1 |
#ifndef PAMVMCOPTMGR_H |
2 |
#define PAMVMCOPTMGR_H |
3 |
#include <iostream> |
4 |
#include <stdio.h> |
5 |
#include <stdlib.h> |
6 |
|
7 |
#include <TSystem.h> |
8 |
#include <TMap.h> |
9 |
#include <TObjString.h> |
10 |
#include <TDOMParser.h> |
11 |
#include <TXMLAttr.h> |
12 |
#include <TXMLNode.h> |
13 |
|
14 |
|
15 |
#include "PamVMCOptions.h" |
16 |
using namespace std; |
17 |
|
18 |
class PamVMCOptMgr: public TObject { |
19 |
|
20 |
private: |
21 |
|
22 |
static PamVMCOptMgr * fopt; |
23 |
TMap foptmap; |
24 |
|
25 |
void SetOpt(const char *name, TObject *value){ |
26 |
foptmap.Add(new TObjString(name),value); |
27 |
} |
28 |
|
29 |
void ParseOptions(TXMLNode *node); |
30 |
pInitModeOpt * ParseInitOpt(TXMLNode *node); |
31 |
pRandomModeOpt * ParseRandomOpt(TXMLNode *node); |
32 |
pRuntimeModeOpt * ParseRuntimeOpt(TXMLNode *node); |
33 |
pPrimaryModeOpt * ParsePrimaryOpt(TXMLNode *node); |
34 |
protected: |
35 |
PamVMCOptMgr(){ |
36 |
ParseOptions(0); |
37 |
} |
38 |
|
39 |
public: |
40 |
|
41 |
~PamVMCOptMgr(){ foptmap.DeleteAll(); } |
42 |
|
43 |
static PamVMCOptMgr * Instance(); |
44 |
|
45 |
TObject * GetOpt(const char *name){ |
46 |
return foptmap(name); |
47 |
} |
48 |
|
49 |
virtual void Print(const Option_t* = "") const { foptmap.Print(); } |
50 |
|
51 |
Int_t ParseFile(TString filename) { |
52 |
TDOMParser *domParser = new TDOMParser(); |
53 |
Int_t parsecode = domParser->ParseFile(filename); |
54 |
|
55 |
if (parsecode < 0) { |
56 |
cerr << domParser->GetParseCodeMessage(parsecode) << endl; |
57 |
return -1; |
58 |
} |
59 |
|
60 |
TXMLNode * node = domParser->GetXMLDocument()->GetRootNode(); |
61 |
|
62 |
ParseOptions(node); |
63 |
|
64 |
return 0; |
65 |
} |
66 |
|
67 |
|
68 |
//Different getters |
69 |
|
70 |
//INIT Options |
71 |
TString GetOutPath(){ |
72 |
return ((pInitModeOpt*)GetOpt("Init_mode_set"))->fout_path; |
73 |
} |
74 |
TString GetOutPattern(){ |
75 |
return ((pInitModeOpt*)GetOpt("Init_mode_set"))->fout_file_pattern; |
76 |
} |
77 |
TString GetOutPatternFull(){ |
78 |
TString tmp = ((pInitModeOpt*)GetOpt("Init_mode_set"))->fout_path; |
79 |
tmp += "/"; |
80 |
tmp += ((pInitModeOpt*)GetOpt("Init_mode_set"))->fout_file_pattern; |
81 |
return tmp; |
82 |
} |
83 |
TString GetTmpPath(){ |
84 |
return ((pInitModeOpt*)GetOpt("Init_mode_set"))->fout_tmp_dir; |
85 |
} |
86 |
|
87 |
Bool_t IsUseCookie(){ |
88 |
return ((pInitModeOpt*)GetOpt("Init_mode_set"))->fuse_pbs_jobcookie; |
89 |
} |
90 |
|
91 |
Bool_t IsNoCalo(){ |
92 |
return ((pInitModeOpt*)GetOpt("Init_mode_set"))->fuse_nocalo; |
93 |
} |
94 |
|
95 |
TString GetG4ConfigC(){ |
96 |
TString tmp = ((pInitModeOpt*)GetOpt("Init_mode_set"))->fg4Config_path; |
97 |
tmp += "/"; |
98 |
tmp += ((pInitModeOpt*)GetOpt("Init_mode_set"))->fg4Config_C_name; |
99 |
return tmp; |
100 |
} |
101 |
|
102 |
TString GetG4ConfigIn(){ |
103 |
TString tmp = ((pInitModeOpt*)GetOpt("Init_mode_set"))->fg4Config_path; |
104 |
tmp += "/"; |
105 |
tmp += ((pInitModeOpt*)GetOpt("Init_mode_set"))->fg4Config_in_name; |
106 |
return tmp; |
107 |
} |
108 |
|
109 |
//RANDOM OPTIONS |
110 |
|
111 |
Bool_t IsReadRandomMode(){ |
112 |
/* 0 - generate, 1 - read from file */ |
113 |
return ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fread_from_file_mode; |
114 |
} |
115 |
|
116 |
Bool_t IsUserRandomMode(){ |
117 |
/* 1 - generate random use user-defined seeds, 0 - autogenerate them */ |
118 |
return ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fgenerate_g4_seed_user; |
119 |
} |
120 |
|
121 |
void GetUserRandomSeed(Int_t & seed1, Int_t & seed2){ |
122 |
seed1 = ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fseed1; |
123 |
seed2 = ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fseed2; |
124 |
} |
125 |
Bool_t DoWriteRandom(){ |
126 |
/* 0 - don't save g4 random snapshots into root-file, 1 - do it */ |
127 |
return ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fwrite_to_file_mode; |
128 |
} |
129 |
TString GetRandomOutFile(){ |
130 |
TString tmp = ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fwrite_g4_rnd_path; |
131 |
tmp += "/"; |
132 |
tmp += ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fwrite_g4_rnd_filename; |
133 |
return tmp; |
134 |
} |
135 |
TString GetRandomOutFilename(){ |
136 |
return ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fwrite_g4_rnd_filename; |
137 |
} |
138 |
TString GetRandomInFilename(){ |
139 |
return ((pRandomModeOpt*)GetOpt("Random_mode_set"))->fread_g4_seed_path; |
140 |
} |
141 |
|
142 |
//RUNTIME OPTIONS |
143 |
|
144 |
Int_t GetVerboseLevel(){ |
145 |
return ((pRuntimeModeOpt*)GetOpt("Runtime_mode_set"))->fverbose_lev; |
146 |
} |
147 |
Int_t GetMaxSteps(){ |
148 |
return ((pRuntimeModeOpt*)GetOpt("Runtime_mode_set"))->fmaxstep; |
149 |
} |
150 |
Save_cond GetSaveCond(){ |
151 |
return ((pRuntimeModeOpt*)GetOpt("Runtime_mode_set"))->fsv_c; |
152 |
} |
153 |
Save_mode GetSaveMode(){ |
154 |
return ((pRuntimeModeOpt*)GetOpt("Runtime_mode_set"))->fsv_m; |
155 |
} |
156 |
|
157 |
//PRIMARY OPTIONS |
158 |
Bool_t GetReadPrimMode(){ |
159 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fread_mode; |
160 |
} |
161 |
TString GetReadPrimPath(){ |
162 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fread_path; |
163 |
} |
164 |
Int_t GetPrimPDG(){ |
165 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fpdg; |
166 |
} |
167 |
|
168 |
Momentum_mode GetPrimMomMode(){ |
169 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fmom_mode; |
170 |
} |
171 |
|
172 |
Momentum_units GetPrimMomUnits(){ |
173 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->funits; |
174 |
} |
175 |
|
176 |
Double_t GetMomFixed(){ |
177 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fmom_fix; |
178 |
} |
179 |
|
180 |
void GetMomLimits( Double_t & min, Double_t & max){ |
181 |
min = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fmom_min; |
182 |
max = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fmom_max; |
183 |
} |
184 |
|
185 |
Double_t GetMomGamma(){ |
186 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fgamma; |
187 |
} |
188 |
|
189 |
Bool_t IsCustomKinematics(){ |
190 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fspt_mode; |
191 |
} |
192 |
Bool_t IsBoxVertex(){ |
193 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fvert_mode; |
194 |
} |
195 |
|
196 |
void GetFixedPointVertex( Double_t &x0, Double_t &y0, Double_t &z0 ){ |
197 |
x0 = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fx0; |
198 |
y0 = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fy0; |
199 |
z0 = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fz0; |
200 |
} |
201 |
|
202 |
void GetBoxVertex( Double_t &x0_min, Double_t &x0_max, |
203 |
Double_t &y0_min, Double_t &y0_max, |
204 |
Double_t &z0_min, Double_t &z0_max ){ |
205 |
x0_min = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fx0_min; |
206 |
x0_max = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fx0_max; |
207 |
y0_min = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fy0_min; |
208 |
y0_max = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fy0_max; |
209 |
z0_min = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fz0_min; |
210 |
z0_max = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fz0_max; |
211 |
} |
212 |
|
213 |
Bool_t IsIsotropicPlane(){ |
214 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fang_mode; |
215 |
} |
216 |
|
217 |
void GetFixedAngles( Double_t &theta, Double_t &phi){ |
218 |
theta = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->ftheta; |
219 |
phi = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fphi; |
220 |
} |
221 |
void GetIsotropicAngles( Double_t &theta_min, Double_t &theta_max, |
222 |
Double_t &phi_min, Double_t &phi_max ){ |
223 |
theta_min = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->ftheta_min; |
224 |
theta_max = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->ftheta_max; |
225 |
phi_min = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fphi_min; |
226 |
phi_max = ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fphi_max; |
227 |
} |
228 |
|
229 |
Nevents_mode GetStopMode(){ |
230 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fnv_m; |
231 |
} |
232 |
|
233 |
Int_t GetEvMax(){ |
234 |
return ((pPrimaryModeOpt*)GetOpt("Primary_mode_set"))->fnevents; |
235 |
} |
236 |
|
237 |
ClassDef(PamVMCOptMgr,1); |
238 |
|
239 |
|
240 |
}; |
241 |
|
242 |
#endif |