Paramotopy
parallel parameter homotopy through bertini
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
runinfo.hpp
Go to the documentation of this file.
1 //contains the runinfo class
2 #include <vector>
3 #include <map>
4 #include <iostream>
5 #include <string>
6 #include <sstream>
7 #include <fstream>
8 #include <cmath>
9 #include <stdio.h>
10 #include <unistd.h>
11 #include <stdlib.h>
12 #include <errno.h>
13 #include <sys/wait.h>
14 #include <sys/stat.h>
15 #include <sys/types.h>
16 
17 
18 #include <boost/filesystem/operations.hpp>
19 #include <boost/filesystem/path.hpp>
20 #include <boost/progress.hpp>
21 #include <boost/regex.hpp>
22 
23 #include "tinyxml.h"
24 
25 
26 #ifndef __RUNINFO_H__
27 #define __RUNINFO_H__
28 
29 
30 #include "random.hpp"
31 #include "para_aux_funcs.hpp"
32 
33 #include "xml_preferences.hpp"
34 
35 
41 class runinfo {
42 
43 public:
44 
45  // values of points -- two different ways storing the data
46  // whether or not we are user-defined or not
47  // if doing a mesh, the data is contained as follows
48  // -- first vector size is the number of parameters
49  // -- second vector size the number of mesh points for the given param
50  // -- pair is the real (first) and imaginary (second)
51 
52  // if not doing a mesh, the data is contained as follows
53  // -- first vector size is number of sample n-tuples)
54  // -- second vector size is n
55  // -- pair is the real (first) and imaginary (second)
56 
58  int numfunct;
63 
64  int numparam;
67  int numconsts;
68 
69  //this may well be changed/ renamed/ deleted
71  boost::filesystem::path location;
72 
74  boost::filesystem::path fundamental_dir;
75 
77  boost::filesystem::path base_dir;
78 
82  time_t initiated;
84  time_t updated;
85 
87  std::string paramotopy_file;
88 
90  boost::filesystem::path inputfilename;
92  boost::filesystem::path prefix;
93 
95  int steptwomode;// indicates to step2 whether to use step2 or pathfailure bertini settings.
96 
98  std::vector<std::string> Functions;
100  std::vector<std::string> VarGroups;
102  std::vector<std::string> Parameters;
104  std::vector<std::string> ParameterNames;
106  std::vector<std::string> Constants;
108  std::vector<std::string> ConstantNames;
110  std::string CustomLines;
111 
113  std::vector< std::vector< std::pair<double,double> > > Values;
114 
115  std::vector< std::pair<double,double> > BoundsLeft;
116  std::vector< std::pair<double,double> > BoundsRight;
117 
120 
122  std::string mcfname;
124  std::vector< int > NumMeshPoints;
125 
126  // random initial values
127  // -- vector size is the number of parameters
128  // -- pair is the real (first) and imaginary (second)
130  std::vector< std::pair<double,double> > RandomValues;
131 
132 
133 
134 
135 
136 
137 
138 
139 
145  // methods
151 
154  steptwomode = -1;
155  };//default constructor
156 
159  std::string WriteInputStepOne(ProgSettings paramotopy_settings);
163  std::string WriteInputStepTwo(std::vector<std::pair<double, double> > tmprandomvalues,
164  bool standardstep2);
165 
167  void GetOriginalParamotopy();
169  void GetInputFileName();
173  void GetInputFileName(boost::filesystem::path suppliedfilename);
174 
175 
177  void make_base_dir_name();
178 
180  void mkdirstep1(){
181  boost::filesystem::path tempstr = base_dir;
182  boost::filesystem::create_directories(tempstr);
183  tempstr /= "step1";
184  boost::filesystem::create_directories(tempstr);
185  };
186 
188  void clear(){
189  Functions.clear(); VarGroups.clear();
190  Parameters.clear(); ParameterNames.clear();
191  Constants.clear(); ConstantNames.clear();
192  Values.clear(); NumMeshPoints.clear();
193  CustomLines.clear();
194  RandomValues.clear();
195  numfunct = 0; numvariables = 0; numvargroup = 0; numparam = 0; numconsts = 0;
196  };
197 
199  void ParseData();
202  void ParseData(boost::filesystem::path dir);
203 
207  void ParseDataGuts(std::ifstream & fin);
208 
213  void ReadCustomLines(std::ifstream & fin);
214 
219 
221  void RandomMenu(){
222  std::stringstream ss;
223  ss << "1) save values\n"
224  << "2) load random values\n"
225  << "3) make new values\n"
226  << "*\n0)return to paramotopy\n: ";
227  int choice = get_int_choice(ss.str(),0,3);
228  switch (choice) {
229  case 0:
230 
231  break;
232  case 1:
234  break;
235  case 2:
237  break;
238  case 3:
240  break;
241  default:
242  break;
243  }
244  };
246  void SaveRandom();
248  void LoadRandom();
250  void SetRandom();
252  bool GetPrevRandom();
254  void SetLocation();
256  bool test_if_finished();
258  void DisplayAllValues();
259 
261  void CopyUserDefinedFile();
262 
264  std::vector<std::pair<double, double> > MakeRandomValues(int garbageint);
265 
266 
272  void GetRandomValues();
273 
274 
275 
277  void WriteOriginalParamotopy(boost::filesystem::path dir);
279  void WriteModifiedParamotopy(boost::filesystem::path dir, int iteration);
281  void WriteRandomValues();
282 
283 
284  // ManageData
286  void SetBaseDirZero();
289  void SetBaseDirManual(std::vector< boost::filesystem::path > found_runs);
292  void SetBaseDirMostRecent(std::vector< boost::filesystem::path > found_runs);
296  void SetBaseDirNew(std::vector< boost::filesystem::path > found_runs);
303  void AutoScanData(const int preferred_behaviour);
305  void ScanData();
307  void save();
311  void load(boost::filesystem::path filename);
317  void get_run_xml(boost::filesystem::path filename, int & run, time_t & wheninitiated, time_t & whenupdated);
319  void UpdateAndSave();
320 
322  void MakeRandomValues();
323 
325  bool CheckRunStepOne();
326 
328  void GatherData();
329 
330 
332  boost::filesystem::path GetAvailableRuns();
333 
335  void CollectSpecificFiles(boost::filesystem::path file_to_gather,
336  std::vector < boost::filesystem::path > folders_with_data,
337  boost::filesystem::path run_to_analyze,
338  int parser_index, bool mergefailed);
339 
341  std::vector< boost::filesystem::path > GetFoldersForData(boost::filesystem::path dir);
343  void IncrementOutputFolder(boost::filesystem::path & output_folder_name,
344  boost::filesystem::path base_output_folder_name,
345  int & output_folder_index);
347  void MergeFolders(std::string file_to_gather, std::string left_folder,
348  std::string right_folder, std::string output_folder_name, int parser_index);
350  void finalize_run_to_file(boost::filesystem::path file_to_gather,
351  boost::filesystem::path source_folder,
352  boost::filesystem::path base_output_folder_name,
353  int parser_index, bool mergefailed);
354 
356  void rest_of_files(std::ifstream & datafile, std::string & output_buffer,
357  std::ofstream & outputfile, std::vector < boost::filesystem::path > filelist,
358  int file_index, int parser_index);
361 bool endoffile_stuff(std::ifstream & datafile, int & file_index, std::vector < boost::filesystem::path > filelist);
362 
364 
365  bool ReadPoint(std::ifstream & fin, int & next_index, std::string & data, int parser_index);
366 
368  std::string ParseSolutionsFile(std::ifstream & fin);
369 
371  std::vector< std::vector < std::pair< std::string, std::string > > > ParseSolutionsFile_ActualSolutions(std::ifstream & fin);
372 
373 
375  //gets called repeatedly to see if any points had failed paths (each point has one failed_paths file.
379  std::string ParseFailedPaths(std::ifstream & fin);
381  void PrintRandom();
382 private:
384  void GetNumVariables();
388  void ReadSizes(std::ifstream & fin);
392  void ReadParameters(std::ifstream & fin);
396  void ReadFunctions(std::ifstream & fin);
400  void ReadVarGroups(std::ifstream & fin);
404  void ReadConstants(std::ifstream & fin);
408  void ReadConstantStrings(std::ifstream & fin);
411  void MakeParameterNames();
416  void MakeVariableGroups(std::stringstream & fout, ProgSettings paramotopy_settings);
420  void MakeDeclareConstants(std::stringstream & fout);
424  void MakeConstants(std::stringstream & fout);
429  void MakeConstantsStep2(std::vector<std::pair<double, double> > CurrentValues, std::stringstream & inputfilestream, bool standardstep2);
433  void MakeCustomLines(std::stringstream & inputfilestream);
437  void MakeDeclareFunctions(std::stringstream & inputstringstream);
441  void MakeFunctions(std::stringstream & inputstringstream);
444  void MakeRandomValues(std::vector< std::pair< std::pair< double, double >,
445  std::pair< double, double > > > RandomRanges);
446 
447 
450  void MakeValues(std::ifstream & fin);
452  void MakeValues();
453 
455  void MakeBounds();
456 
458  void SetDataFirst();
460  void SetDataMostRecent();
462  void SetDataInteractive();
464  void WriteDataDateStarted();
466  void DeleteRunFolder();
467 
468 
469 
470 protected:
471 
472 
473 };
474 
475 
476 
477 #endif
478 
479 
void MakeRandomValues()
Definition: runinfo.cpp:750
void MakeDeclareFunctions(std::stringstream &inputstringstream)
Definition: runinfo.cpp:968
void ReadSizes(std::ifstream &fin)
Definition: runinfo.cpp:719
void SetBaseDirManual(std::vector< boost::filesystem::path > found_runs)
Definition: runinfo.cpp:1336
std::vector< std::vector< std::pair< std::string, std::string > > > ParseSolutionsFile_ActualSolutions(std::ifstream &fin)
void GetOriginalParamotopy()
Definition: runinfo.cpp:44
runinfo()
Definition: runinfo.hpp:153
void ScanData()
Definition: runinfo.cpp:1461
void MakeValues()
Definition: runinfo.cpp:1135
std::string ParseSolutionsFile(std::ifstream &fin)
int steptwomode
Definition: runinfo.hpp:95
void SetDataInteractive()
std::vector< std::pair< double, double > > RandomValues
Definition: runinfo.hpp:130
bool ReadPoint(std::ifstream &fin, int &next_index, std::string &data, int parser_index)
function for parsing ***_solutions files, as output from bertini.
void PrintRandom()
Definition: runinfo.cpp:567
void ReadConstantStrings(std::ifstream &fin)
Definition: runinfo.cpp:883
int numvariables
Definition: runinfo.hpp:60
void LoadRandom()
Definition: runinfo.cpp:392
std::vector< int > NumMeshPoints
Definition: runinfo.hpp:124
void MakeFunctions(std::stringstream &inputstringstream)
Definition: runinfo.cpp:913
void load(boost::filesystem::path filename)
Definition: runinfo.cpp:1586
boost::filesystem::path base_dir
Definition: runinfo.hpp:77
void SetLocation()
Definition: runinfo.cpp:163
boost::filesystem::path GetAvailableRuns()
bool userdefined
Definition: runinfo.hpp:119
std::string paramotopy_file
Definition: runinfo.hpp:87
void rest_of_files(std::ifstream &datafile, std::string &output_buffer, std::ofstream &outputfile, std::vector< boost::filesystem::path > filelist, int file_index, int parser_index)
void MakeCustomLines(std::stringstream &inputfilestream)
Definition: runinfo.cpp:1001
boost::filesystem::path fundamental_dir
Definition: runinfo.hpp:74
int numfunct
Definition: runinfo.hpp:58
void WriteOriginalParamotopy(boost::filesystem::path dir)
Definition: runinfo.cpp:70
void ReadVarGroups(std::ifstream &fin)
Definition: runinfo.cpp:860
void WriteRandomValues()
Definition: runinfo.cpp:349
void finalize_run_to_file(boost::filesystem::path file_to_gather, boost::filesystem::path source_folder, boost::filesystem::path base_output_folder_name, int parser_index, bool mergefailed)
void ParseData()
Definition: runinfo.cpp:636
void UpdateAndSave()
Definition: runinfo.cpp:1315
void MakeDeclareConstants(std::stringstream &fout)
Definition: runinfo.cpp:952
void DisplayAllValues()
Definition: runinfo.cpp:1201
bool CheckRunStepOne()
Definition: runinfo.cpp:6
void ReadParameters(std::ifstream &fin)
Definition: runinfo.cpp:738
void clear()
Definition: runinfo.hpp:188
time_t initiated
Definition: runinfo.hpp:82
void CollectSpecificFiles(boost::filesystem::path file_to_gather, std::vector< boost::filesystem::path > folders_with_data, boost::filesystem::path run_to_analyze, int parser_index, bool mergefailed)
void GatherData()
void mkdirstep1()
Definition: runinfo.hpp:180
int numparam
Definition: runinfo.hpp:64
std::string WriteInputStepTwo(std::vector< std::pair< double, double > > tmprandomvalues, bool standardstep2)
Definition: runinfo.cpp:193
void save()
Definition: runinfo.cpp:1526
void GetNumVariables()
Definition: runinfo.cpp:894
void ParseDataGuts(std::ifstream &fin)
Definition: runinfo.cpp:656
void make_base_dir_name()
Definition: runinfo.cpp:139
void ReadConstants(std::ifstream &fin)
Definition: runinfo.cpp:873
void SetDataFirst()
void ReadCustomLines(std::ifstream &fin)
Definition: runinfo.cpp:703
std::string WriteInputStepOne(ProgSettings paramotopy_settings)
Definition: runinfo.cpp:174
void MakeParameterNames()
Definition: runinfo.cpp:1185
std::string ParseFailedPaths(std::ifstream &fin)
function for parsing the failed_paths file (just one instance of it)
void SetRandom()
Definition: runinfo.cpp:502
int get_int_choice(std::string display_string, int min_value, int max_value)
int numconsts
Definition: runinfo.hpp:67
std::vector< std::string > Parameters
Definition: runinfo.hpp:102
void SetBaseDirNew(std::vector< boost::filesystem::path > found_runs)
Definition: runinfo.cpp:1385
void MakeConstants(std::stringstream &fout)
Definition: runinfo.cpp:983
std::string mcfname
Definition: runinfo.hpp:122
std::string CustomLines
Definition: runinfo.hpp:110
void RandomMenu()
Definition: runinfo.hpp:221
int numvargroup
Definition: runinfo.hpp:62
std::vector< boost::filesystem::path > GetFoldersForData(boost::filesystem::path dir)
void get_run_xml(boost::filesystem::path filename, int &run, time_t &wheninitiated, time_t &whenupdated)
Definition: runinfo.cpp:1600
std::vector< std::string > ParameterNames
Definition: runinfo.hpp:104
bool test_if_finished()
Definition: runinfo.cpp:1287
bool endoffile_stuff(std::ifstream &datafile, int &file_index, std::vector< boost::filesystem::path > filelist)
std::vector< std::string > VarGroups
Definition: runinfo.hpp:100
void WriteDataDateStarted()
boost::filesystem::path inputfilename
Definition: runinfo.hpp:90
boost::filesystem::path prefix
Definition: runinfo.hpp:92
boost::filesystem::path location
Definition: runinfo.hpp:71
void SetDataMostRecent()
void AutoScanData(const int preferred_behaviour)
Definition: runinfo.cpp:1481
void MergeFolders(std::string file_to_gather, std::string left_folder, std::string right_folder, std::string output_folder_name, int parser_index)
void SetBaseDirMostRecent(std::vector< boost::filesystem::path > found_runs)
Definition: runinfo.cpp:1421
int run_number
Definition: runinfo.hpp:80
void DeleteRunFolder()
A class that stores the general program settings of Paramotopy.
std::vector< std::string > Functions
Definition: runinfo.hpp:98
void MakeVariableGroups(std::stringstream &fout, ProgSettings paramotopy_settings)
Definition: runinfo.cpp:927
bool GetPrevRandom()
Definition: runinfo.cpp:451
void CopyUserDefinedFile()
Definition: runinfo.cpp:579
std::vector< std::string > ConstantNames
Definition: runinfo.hpp:108
void GetInputFileName()
Definition: runinfo.cpp:299
void MakeConstantsStep2(std::vector< std::pair< double, double > > CurrentValues, std::stringstream &inputfilestream, bool standardstep2)
Definition: runinfo.cpp:1009
void MakeBounds()
Definition: runinfo.cpp:1100
std::vector< std::vector< std::pair< double, double > > > Values
Definition: runinfo.hpp:113
bool made_new_folder
Definition: runinfo.hpp:218
void GetRandomValues()
Definition: runinfo.cpp:812
A class for the input file parser.
Definition: runinfo.hpp:41
void SetBaseDirZero()
Definition: runinfo.cpp:1322
void IncrementOutputFolder(boost::filesystem::path &output_folder_name, boost::filesystem::path base_output_folder_name, int &output_folder_index)
time_t updated
Definition: runinfo.hpp:84
void ReadFunctions(std::ifstream &fin)
Definition: runinfo.cpp:847
void SaveRandom()
Definition: runinfo.cpp:369
std::vector< std::pair< double, double > > BoundsLeft
Definition: runinfo.hpp:115
void WriteModifiedParamotopy(boost::filesystem::path dir, int iteration)
Definition: runinfo.cpp:97
std::vector< std::string > Constants
Definition: runinfo.hpp:106
std::vector< std::pair< double, double > > BoundsRight
Definition: runinfo.hpp:116