Stride Reference Manual  1.0
popgen/main.cpp
Go to the documentation of this file.
1 
2 #include <iostream>
3 #include <string>
4 #include <random>
5 #include <tclap/CmdLine.h>
6 
8 
9 using namespace std;
10 using namespace stride;
11 using namespace popgen;
12 using namespace TCLAP;
13 
14 template<class T>
15 void run(T generator, const string& prefix) {
16  cerr << "Generating...\n";
17  generator.generate(prefix);
18  cerr << "Done!\n";
19 }
20 
21 int main(int argc, char** argv) {
22  try {
23  // TCLAP commandline interface
24  CmdLine cmd("Commandline interface of the PopulationGenerator", ' ', "Beta");
25 
26  ValueArg<string> sourceArg("i", "input", "Input xml file for the configuration of the generator", true,
27  "data/happy_day.xml", "string", cmd);
28  ValueArg<string> outputPrefixArg("o", "output", "Output prefix", true, "pop", "string", cmd);
29  string options = "The random generator (one of the following): ";
30  options += "default_random_engine - mt19937 - mt19937_64 - minstd_rand0 - minstd_rand - ranlux24_base - ranlux48_base - ranlux24 - ranlux48 - knuth_b";
31  ValueArg<string> rngArg("r", "randomgenerator", options, false, "mt19937", "string", cmd);
32 
33  // The seed argument
34  ValueArg<int> seedArg("s", "seed", "The seed of the random generator", false, 1, "int");
35  cmd.add(seedArg);
36 
37  // Parse the argv array
38  cmd.parse(argc, argv);
39 
40  // Get the value parsed by each argument
41  string sourceXml = sourceArg.getValue();
42  string prefix = outputPrefixArg.getValue();
43  string rng = rngArg.getValue();
44  int seed = seedArg.getValue();
45 
46  cerr << "Starting...\n";
47  if (rng == "default_random_engine") {
48  PopulationGenerator<default_random_engine> generator {sourceXml, seed};
49  run(generator, prefix);
50  } else if (rng == "mt19937") {
51  PopulationGenerator<mt19937> generator {sourceXml, seed};
52  run(generator, prefix);
53  } else if (rng == "mt19937_64") {
54  PopulationGenerator<mt19937_64> generator {sourceXml, seed};
55  run(generator, prefix);
56  } else if (rng == "minstd_rand0") {
57  PopulationGenerator<minstd_rand0> generator {sourceXml, seed};
58  run(generator, prefix);
59  } else if (rng == "minstd_rand") {
60  PopulationGenerator<minstd_rand> generator {sourceXml, seed};
61  run(generator, prefix);
62  } else if (rng == "ranlux24_base") {
63  PopulationGenerator<ranlux24_base> generator {sourceXml, seed};
64  run(generator, prefix);
65  } else if (rng == "ranlux48_base") {
66  PopulationGenerator<ranlux48_base> generator {sourceXml, seed};
67  run(generator, prefix);
68  } else if (rng == "ranlux24") {
69  PopulationGenerator<ranlux24> generator {sourceXml, seed};
70  run(generator, prefix);
71  } else if (rng == "ranlux48") {
72  PopulationGenerator<ranlux48> generator {sourceXml, seed};
73  run(generator, prefix);
74  } else if (rng == "knuth_b") {
75  PopulationGenerator<knuth_b> generator {sourceXml, seed};
76  run(generator, prefix);
77  }
78  } catch (ArgException& exc) {
79  cerr << "Error: " << exc.error() << " for argument " << exc.argId() << endl;
80  }
81 }
int main(int argc, char **argv)
Definition: popgen/main.cpp:21
Time Dependent Person DataType.
Definition: NoBehaviour.h:17
void run(T generator, const string &prefix)
Definition: popgen/main.cpp:15
STL namespace.