forked from tarlen5/GRCSim
-
Notifications
You must be signed in to change notification settings - Fork 0
/
run_sim_cascade.cpp
132 lines (106 loc) · 4.18 KB
/
run_sim_cascade.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*!
---------------------------------------------------------------------------
\file run_sim_cascade
run_sim_cascade.cpp
Produces a single gamma photon cascade in intergalactic space,
a number of times, as determined by the user.
This file is basically a wrapper to call the IGCascadeSim class,
which performs the intergalactic cascade simulation, with the
given parameters.
\author Timothy C. Arlen
tca3@psu.edu
Thomas Brandon Stevenson
tbrandonstevenson@gmail.com
\date Jan 24, 2014
\note Initial code I'm putting under version control, after major
rewrite of input variables, options, configurations, etc. into
a much more streamlined and easier version using the AnyOption
class.
---------------------------------------------------------------------------
*/
#include <string>
#include <sstream>
#include <iostream>
#include <cstdlib>
#include "IGCascadeSim.hpp"
#include "anyoption.h"
using namespace std;
AnyOption* DefineOptions(int argc, char* argv[], const string& progname)
{
AnyOption* opt = new AnyOption();
/* 1. SET THE USAGE/HELP */
opt->addUsage("Usage:\n");
string usageHelp = " "+progname+" energy Bmag Lcoh ze num_gammas file_num"+
" [Options]\n";
opt->addUsage(usageHelp.c_str());
opt->addUsage("energy - [GeV] energy of photon at OBSERVER redshift.");
opt->addUsage("Bmag - [gauss] magnetic field magnitude.");
opt->addUsage("Lcoh - [Mpc] coherence length of magnetic field.");
opt->addUsage("ze - redshift at source point.");
opt->addUsage("file_num - file number tag.");
opt->addUsage("iterations - number of photons to simulate in this run.\n");
//opt->addUsage( "Usage: " );
opt->addUsage("Options:" );
opt->addUsage(" -h --help Prints this help " );
opt->addUsage(" --eblmodel EBLModel4msld EBLModel name.");
opt->addUsage(" --mf_dir MagneticFieldFiles/ magnetic field files dir.");
opt->addUsage(" --opt_depth_dir OptDepthFiles/ opt depth files dir.");
opt->addUsage(" --output_dir (cwd) Directory to output files.");
opt->addUsage(" --gam_egy_min 0.1 min energy [GeV] to track gammas.");
opt->addUsage(" --lep_egy_min 75. min energy [GeV] to track leptons.");
opt->addUsage(" --mf_no_lock No locking of mf files, so cosmic variance is not preserved in simulation. ");
opt->addUsage(" --single_gen Forces single generation of cascade.");
opt->addUsage(" --trk_delay Track time delay throughout cascade.");
opt->addUsage(" --trk_leptons Tracks all leptons throughout cascade.");
/* 2. SET THE OPTION STRINGS/CHARACTERS */
opt->setFlag("help",'h');
opt->setOption("eblmodel");
opt->setOption("mf_dir");
opt->setOption("opt_depth_dir");
opt->setOption("output_dir");
opt->setFlag("mf_no_lock");
opt->setFlag("single_gen");
opt->setFlag("trk_delay");
opt->setFlag("trk_leptons");
return opt;
}
int main(int argc, char** argv)
{
string progname(*argv);
AnyOption* opt = DefineOptions(argc,argv,progname);
// Process All
opt->processCommandArgs(argc,argv);
if(!opt->hasOptions()) {
opt->printUsage();
exit(EXIT_FAILURE);
}
// Access values:
if( opt->getFlag("help") || opt->getFlag('h') ) {
opt->printUsage();
exit(0);
}
if(opt->getArgc() != 6) {
cerr<<"\nERROR: 6 mandatory inputs required! Usage: "<<endl;
opt->printUsage();
exit(EXIT_FAILURE);
}
// Process Command Line Args:
string egy = opt->getArgv(0);
string mag_field = opt->getArgv(1);
string coh_len = opt->getArgv(2);
string redshift = opt->getArgv(3);
string file_count = opt->getArgv(4);
string iterations = opt->getArgv(5);
cout<<"\n>> Arguments parsed: "<<endl;
cout<<" egy: "<<egy<<endl;
cout<<" redshift: "<<redshift<<endl;
cout<<" mag_field: "<<mag_field<<endl;
cout<<" coh_len: "<<coh_len<<endl;
cout<<" file_count: "<<file_count<<endl;
cout<<" iterations: "<<iterations<<endl;
IGCascade::IGCascadeSim* my_sim =
new IGCascade::IGCascadeSim(egy,redshift,mag_field,coh_len,file_count,opt);
int num_iterations = atoi(iterations.c_str());
my_sim->RunCascade(num_iterations);
return 0;
}