Program Listing for File poet.h

Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/poet.h)

#ifndef __POET_H
#define __POET_H

#include "Core/Common.h"
#include "Core/AstronomicalConstants.h"
#include "StellarEvoltion/MESAIO.h"
#include "StellarEvolution/CustomStellarEvolution.h"
#include "BinarySystem/OrbitSolver.h"
#include "BinarySystem/EvolvingStar.h"
#include "BinarySystem/LockedPlanet.h"
#include "BinarySystem/DiskPlanetSystem.h"
#include "BinarySystem/ConstSolutionIterator.h"
#include "IO/IOColumns.h"
#include <argtable2.h>
#include <iostream>
#include <fstream>
#include <sstream>

std::vector<std::string>
    TRACK_COLUMN_NAMES(CustomStellarEvolution::NUM_TRACK_QUANTITIES);

std::string data_directory()
{
    std::string datadir=DATADIR;
    if(datadir[datadir.size()-1]!='/') datadir+='/';
    return datadir;
}

class CommandLineOptions {
private:

    std::vector<std::string> __input_column_names,

                 __output_column_descr,

                 __track_column_descr,

                 __track_column_units;

    std::vector<double> __defaults;

    std::vector<double> __default_track_smoothing;

    std::vector<int> __default_track_nodes;

    static const std::string __default_outfname,

        __default_serialized_evol,

        __default_output_columns,

        __default_track_columns,

        __default_eccentricity_expansion;

    std::vector<arg_dbl*> __direct_value_options;

    std::vector<arg_dbl*> __custom_track_smoothing;

    std::vector<arg_int*> __custom_track_nodes;

    arg_str *__input_file_columns,

            *__output_file_columns,

            *__required_ages_option,

            *__custom_stellar_evolution_format;

    arg_lit *__start_locked;

    arg_lit *__use_YREC;

    arg_file *__input_fname,

             *__output_fname,

             *__serialized_stellar_evolution,

             *__custom_stellar_evolution,

             *__eccentricity_expansion;

    void *__argtable[InCol::NUM_INPUT_QUANTITIES
                     +
                     2 * CustomStellarEvolution::AGE
                     +
                     10];

    std::vector<InCol::InputColumns> __input_file_format;

    std::vector<OutCol::OutputColumns> __output_file_format;

    std::vector<CustomStellarEvolution::Columns> __track_format;

    std::ifstream __input_stream;

    std::list<char*> __option_help_copies;

    std::list<double> __required_ages;

    bool __parsed_ok,

         __opened_stream,

         __need_orbit;

    char *cstr_copy(const std::ostringstream &stream)
    {return cstr_copy(stream.str());}

    char *cstr_copy(const std::string &str);

    void define_options();

    void set_defaults();

    template<typename COL_ID_TYPE>
    void parse_column_list(
            const char *columns_str,

            const std::vector<std::string> column_names,

            int num_column_names,

            std::vector<COL_ID_TYPE> &columns,

            bool allow_noname=false);

    void postprocess();

    void cleanup();

    void init_input_column_names();

    void init_output_column_descriptions();

    void init_track_column_descriptions_and_units();

    void init_defaults();

    void setup();

    void verify_custom_stellar_evolution();
public:
    CommandLineOptions(int argc, char **argv);

    double get_real_value(InCol::InputColumns quantity) const;

    std::istream &input()
    {if(__input_fname->count) return __input_stream; else return std::cin;}

    std::string input_filename() const {return __input_fname->filename[0];}

    std::string output_filename() const {return __output_fname->filename[0];}

    const char *serialized_stellar_evolution() const
    {return __serialized_stellar_evolution->filename[0];}

    const char *eccentricity_expansion() const
    {return __eccentricity_expansion->filename[0];}

    bool start_locked() const {return __start_locked->count>0;}

    bool use_YREC() const {return __use_YREC->count>0;}

    bool input_from_list() const {return __input_file_format.size();}

    const std::vector<InCol::InputColumns> &input_file_format() const
    {return __input_file_format;}

    const std::vector<OutCol::OutputColumns> &output_file_format() const
    {return __output_file_format;}

    const std::list<double> &required_ages() const
    {return __required_ages;}

    const std::string custom_stellar_evolution() const
    {return __custom_stellar_evolution->filename[0];}

    const std::vector<CustomStellarEvolution::Columns>&
        custom_track_format() const {return __track_format;}

    double custom_track_smoothing(CustomStellarEvolution::Columns column)
        const;

    int custom_track_nodes(CustomStellarEvolution::Columns column)
        const;

    bool need_orbit() const {return __need_orbit;}

    operator bool() {return __parsed_ok;}

    ~CommandLineOptions() {cleanup();}
};

void parse_real_list(
        const char *values_str,

        std::list<double> &values);

void output_solution(
        const OrbitSolver &solver,

        const BinarySystem &system,

        const std::string &filename,

        const std::vector<OutCol::OutputColumns> &output_file_format,

        double start_age,

        double end_age,

        double timestep,

        const std::list<double> &required_ages=std::list<double>());

void calculate_evolution(
        const std::vector<double> &real_parameters,

        bool start_locked,

        const std::list<double> &required_ages,

        const StellarEvolution &stellar_evolution,

        const std::string &outfname,

        const std::vector<OutCol::OutputColumns> &output_file_format,

        bool need_orbit);

std::string update_run_parameters(
        std::vector<double> &real_parameters,

        bool &start_locked,

        std::list<double> &required_ages,

        const std::vector<InCol::InputColumns> &input_format,

        std::istringstream &line,

        size_t input_lineno);

void run(
        const CommandLineOptions &options,

        const StellarEvolution &stellar_evolution);


#endif