| 1 | #include <iostream> | 
| 2 | #include <TString.h> | 
| 3 | #include <TPDGCode.h> | 
| 4 | #include <TMath.h> | 
| 5 | #include "PamVMCOptMgr.h" | 
| 6 |  | 
| 7 | ClassImp(PamVMCOptMgr) | 
| 8 |  | 
| 9 | using std::cout; | 
| 10 | using std::endl; | 
| 11 | using TMath::Pi; | 
| 12 | using TMath::TwoPi; | 
| 13 |  | 
| 14 | PamVMCOptMgr * PamVMCOptMgr::fopt = 0; | 
| 15 |  | 
| 16 | PamVMCOptMgr * PamVMCOptMgr::Instance(){ | 
| 17 |  | 
| 18 | if(fopt == 0) { | 
| 19 | fopt = new PamVMCOptMgr(); | 
| 20 | } | 
| 21 | return fopt; | 
| 22 | } | 
| 23 |  | 
| 24 | void PamVMCOptMgr::ParseOptions(TXMLNode *node){ | 
| 25 |  | 
| 26 | foptmap.DeleteAll(); | 
| 27 |  | 
| 28 |  | 
| 29 | if( node ){ | 
| 30 | if (strcmp(node->GetNodeName(), "Main_settings") == 0) { | 
| 31 |  | 
| 32 | TXMLNode* ch_node=node->GetChildren(); | 
| 33 | for (; ch_node; ch_node = ch_node->GetNextNode()) { | 
| 34 | if (ch_node->GetNodeType() == TXMLNode::kXMLElementNode) { // Element Node | 
| 35 | if (strcmp(ch_node->GetNodeName(), "Init_mode_set") == 0) { | 
| 36 | SetOpt("Init_mode_set",ParseInitOpt(ch_node->GetChildren())); | 
| 37 | } | 
| 38 | if (strcmp(ch_node->GetNodeName(), "Random_mode_set") == 0) { | 
| 39 | SetOpt("Random_mode_set",ParseRandomOpt(ch_node->GetChildren())); | 
| 40 | } | 
| 41 | if (strcmp(ch_node->GetNodeName(), "Runtime_mode_set") == 0) { | 
| 42 | SetOpt("Runtime_mode_set",ParseRuntimeOpt(ch_node->GetChildren())); | 
| 43 | } | 
| 44 | if (strcmp(ch_node->GetNodeName(), "Primary_mode_set") == 0) { | 
| 45 | SetOpt("Primary_mode_set",ParsePrimaryOpt(ch_node->GetChildren())); | 
| 46 | } | 
| 47 | } | 
| 48 | } | 
| 49 | } | 
| 50 | } else { | 
| 51 | SetOpt("Init_mode_set",ParseInitOpt(0)); | 
| 52 | SetOpt("Random_mode_set",ParseRandomOpt(0)); | 
| 53 | SetOpt("Runtime_mode_set",ParseRuntimeOpt(0)); | 
| 54 | SetOpt("Primary_mode_set",ParsePrimaryOpt(0)); | 
| 55 | } | 
| 56 | } | 
| 57 |  | 
| 58 |  | 
| 59 | pInitModeOpt * PamVMCOptMgr::ParseInitOpt(TXMLNode *node){ | 
| 60 | //defaults | 
| 61 | TString PAM_VMC = gSystem->Getenv("PAM_VMC"); | 
| 62 | TString path = PAM_VMC+"/config"; | 
| 63 | TString path_tmp = PAM_VMC+"/examples"; | 
| 64 | TString path_out = PAM_VMC+"/examples"; | 
| 65 | TString filepattern = "out"; | 
| 66 | TString C_name = "g4Config.C"; | 
| 67 | TString in_name = "g4config2.in"; | 
| 68 | Bool_t use_cookies = 0; | 
| 69 | Bool_t use_nocalo = kFALSE; | 
| 70 |  | 
| 71 |  | 
| 72 | if( node ){ | 
| 73 | for ( ; node; node = node->GetNextNode()) { | 
| 74 | if ( (node->GetNodeType() == TXMLNode::kXMLElementNode) ) { // Element Node | 
| 75 | TString val = node->GetText(); | 
| 76 | if( val.Length()){ | 
| 77 | if (strcmp(node->GetNodeName(), "g4Config_path") == 0){ | 
| 78 | path =  val; | 
| 79 | } | 
| 80 | if (strcmp(node->GetNodeName(), "g4Config_C_name") == 0){ | 
| 81 | C_name =  val; | 
| 82 | } | 
| 83 | if (strcmp(node->GetNodeName(), "g4Config_in_name") == 0){ | 
| 84 | in_name =  val; | 
| 85 | } | 
| 86 | if (strcmp(node->GetNodeName(), "use_pbs_jobcookie") == 0){ | 
| 87 | use_cookies = kTRUE; | 
| 88 | TXMLNode *node_ch = node->GetChildren(); | 
| 89 | for ( ; node_ch; node_ch = node_ch->GetNextNode()) { | 
| 90 | if (strcmp(node_ch->GetNodeName(), "out_tmp_dir") == 0){ | 
| 91 | path_tmp = node_ch->GetText(); | 
| 92 | } | 
| 93 | } | 
| 94 | } | 
| 95 | if (strcmp(node->GetNodeName(), "out_path") == 0){ | 
| 96 | path_out = val; | 
| 97 | } | 
| 98 | if (strcmp(node->GetNodeName(), "out_file_pattern") == 0){ | 
| 99 | filepattern = val; | 
| 100 | } | 
| 101 | } | 
| 102 | if (strcmp(node->GetNodeName(), "dont_use_pbs_jobcookie") == 0){ | 
| 103 | use_cookies = kFALSE; | 
| 104 | } | 
| 105 | if (strcmp(node->GetNodeName(), "use_nocalo") == 0){ | 
| 106 | cout << "Found nocalo flag" << endl; | 
| 107 | use_nocalo = kTRUE; | 
| 108 | } | 
| 109 | } | 
| 110 | } | 
| 111 | } | 
| 112 | return new pInitModeOpt( path, C_name, in_name, use_cookies, use_nocalo, path_tmp, path_out, filepattern ); | 
| 113 | } | 
| 114 |  | 
| 115 |  | 
| 116 | pRandomModeOpt * PamVMCOptMgr::ParseRandomOpt(TXMLNode *node){ | 
| 117 | //defaults | 
| 118 | Bool_t read_f_mode = kFALSE; | 
| 119 | TString PAM_VMC = gSystem->Getenv("PAM_VMC"); | 
| 120 | TString read_g4_seed_path=PAM_VMC+"/examples/radom_dump.root"; | 
| 121 | Bool_t custom_gen = kFALSE; | 
| 122 | Int_t seed1 = 1000; | 
| 123 | Int_t seed2 = 1001; | 
| 124 | Bool_t write_mode = kFALSE; | 
| 125 | TString write_path = PAM_VMC+"/examples"; | 
| 126 | TString writename = "random_dump.root"; | 
| 127 |  | 
| 128 | if( node ){ | 
| 129 | for ( ; node; node = node->GetNextNode()) { | 
| 130 | if ( (node->GetNodeType() == TXMLNode::kXMLElementNode) ) { // Element Node | 
| 131 | TString val = node->GetText(); | 
| 132 | if( val.Length()){ | 
| 133 | if (strcmp(node->GetNodeName(), "generate_g4_seed") == 0){ | 
| 134 | read_f_mode = kFALSE; | 
| 135 | TXMLNode *node_ch = node->GetChildren(); | 
| 136 | for ( ; node_ch; node_ch = node_ch->GetNextNode()) { | 
| 137 | if (strcmp(node_ch->GetNodeName(), "auto_g4_seed") == 0){ | 
| 138 | custom_gen = kFALSE; | 
| 139 | } | 
| 140 | if (strcmp(node_ch->GetNodeName(), "dont_save_g4rnd_in_file") == 0){ | 
| 141 | write_mode = kFALSE; | 
| 142 | } | 
| 143 | if (strcmp(node_ch->GetNodeName(), "save_g4rnd_in_file") == 0){ | 
| 144 | write_mode = kTRUE; | 
| 145 | TXMLNode *node_ch2 = node_ch->GetChildren(); | 
| 146 | for ( ; node_ch2; node_ch2 = node_ch2->GetNextNode()) { | 
| 147 | TString val_ch2 = node_ch2->GetText(); | 
| 148 | if (val_ch2.Length()){ | 
| 149 | if (strcmp(node_ch2->GetNodeName(), "g4_rnd_path") == 0){ | 
| 150 | write_path = node_ch2->GetText(); | 
| 151 | } | 
| 152 | if (strcmp(node_ch2->GetNodeName(), "g4_rnd_filename") == 0){ | 
| 153 | writename = node_ch2->GetText(); | 
| 154 | } | 
| 155 | } | 
| 156 | } | 
| 157 | } | 
| 158 |  | 
| 159 | TString val_ch = node_ch->GetText(); | 
| 160 | if (val_ch.Length()){ | 
| 161 | if (strcmp(node_ch->GetNodeName(), "init_g4_seed1") == 0){ | 
| 162 | custom_gen = kTRUE; | 
| 163 | seed1 = atoi(val_ch); | 
| 164 | } | 
| 165 | if (strcmp(node_ch->GetNodeName(), "init_g4_seed2") == 0){ | 
| 166 | custom_gen = kTRUE; | 
| 167 | seed2 = atoi(val_ch); | 
| 168 | } | 
| 169 | } | 
| 170 | } | 
| 171 | } | 
| 172 | if (strcmp(node->GetNodeName(), "read_g4_seed_filepath") == 0){ | 
| 173 | read_f_mode = kTRUE; | 
| 174 | read_g4_seed_path = val; | 
| 175 | } | 
| 176 |  | 
| 177 |  | 
| 178 | } | 
| 179 | } | 
| 180 | } | 
| 181 | } | 
| 182 |  | 
| 183 | return new pRandomModeOpt( read_f_mode,  read_g4_seed_path, custom_gen, seed1, seed2, write_mode, write_path, writename ); | 
| 184 | } | 
| 185 |  | 
| 186 | pRuntimeModeOpt * PamVMCOptMgr::ParseRuntimeOpt(TXMLNode *node){ | 
| 187 | //defaults | 
| 188 | Int_t verbose_lev = 0; | 
| 189 | Int_t maxstep = 50000; | 
| 190 | Save_cond sv_c = EVERYTHING; | 
| 191 | Save_mode sv_m = ALL_DETECTORS; | 
| 192 |  | 
| 193 |  | 
| 194 | if( node ){ | 
| 195 | for ( ; node; node = node->GetNextNode()) { | 
| 196 | if ( (node->GetNodeType() == TXMLNode::kXMLElementNode) ) { // Element Node | 
| 197 | TString val = node->GetText(); | 
| 198 | if( val.Length()){ | 
| 199 | if (strcmp(node->GetNodeName(), "verbose_level") == 0){ | 
| 200 | verbose_lev = atoi(val); | 
| 201 | } | 
| 202 | if (strcmp(node->GetNodeName(), "maxstep") == 0){ | 
| 203 | maxstep = atoi(val); | 
| 204 | } | 
| 205 | if (strcmp(node->GetNodeName(), "save_condition") == 0){ | 
| 206 | TXMLNode *node_ch = node->GetChildren(); | 
| 207 | for ( ; node_ch; node_ch = node_ch->GetNextNode()) { | 
| 208 | if (strcmp(node_ch->GetNodeName(), "accept_only") == 0) sv_c = ACCEPT_ONLY; | 
| 209 | if (strcmp(node_ch->GetNodeName(), "trig_only") == 0) sv_c = TRIG_ONLY; | 
| 210 | if (strcmp(node_ch->GetNodeName(), "everything") == 0) sv_c = EVERYTHING; | 
| 211 | } | 
| 212 | } | 
| 213 | if (strcmp(node->GetNodeName(), "save_mode") == 0){ | 
| 214 | TXMLNode *node_ch = node->GetChildren(); | 
| 215 | for ( ; node_ch; node_ch = node_ch->GetNextNode()) { | 
| 216 | if (strcmp(node_ch->GetNodeName(), "all_detectors") == 0) sv_m = ALL_DETECTORS; | 
| 217 | if (strcmp(node_ch->GetNodeName(), "only_primaries") == 0) sv_m = ONLY_PRIMARIES; | 
| 218 | } | 
| 219 | } | 
| 220 |  | 
| 221 | } | 
| 222 |  | 
| 223 | } | 
| 224 | } | 
| 225 | } | 
| 226 | return new pRuntimeModeOpt(verbose_lev, maxstep, sv_c, sv_m ); | 
| 227 | } | 
| 228 |  | 
| 229 |  | 
| 230 | pPrimaryModeOpt * PamVMCOptMgr::ParsePrimaryOpt(TXMLNode *node){ | 
| 231 | //defaults | 
| 232 | Bool_t read_mode = kFALSE; //0 - generate primary kinematics, 1 -read from file; | 
| 233 | TString read_path = "/set/path/to/kine.root"; // path to file with primary kinematics | 
| 234 | Int_t pdg = kProton; //PDG code of  primary | 
| 235 | Bool_t spt_mode = kTRUE; // 0 - dome; 1 - user defined angles and vertex point | 
| 236 | Bool_t vert_mode = kFALSE; //0 - fixed point, 1 - vertex box | 
| 237 | Bool_t ang_mode = kFALSE; // 0 - fixed angle, 1 - isotropic | 
| 238 | Momentum_mode mom_mode = FIXED; // fixed, flat, powerlaw | 
| 239 |  | 
| 240 | Momentum_units units = GV_R; // GV_p, GV_R, GeV_T | 
| 241 | Double_t mom_fix = 1.; //Momentum, Rig, Kine | 
| 242 | Double_t mom_min = 1.; | 
| 243 | Double_t mom_max = 2.; | 
| 244 | Double_t gamma = 2.75; | 
| 245 |  | 
| 246 | Nevents_mode nv_m = NEV_TOT; //Total, accept, trigg | 
| 247 | Int_t nevents = 100; //number of events | 
| 248 |  | 
| 249 | //Spatial and angular coordinates for fixed-isotropic case | 
| 250 | Double_t x0 = 0.; | 
| 251 | Double_t y0 = 0.; | 
| 252 | Double_t z0 = 130.; | 
| 253 | Double_t x0_min = -40.; | 
| 254 | Double_t x0_max = 40.; | 
| 255 | Double_t y0_min = -40.; | 
| 256 | Double_t y0_max = 40.; | 
| 257 | Double_t z0_min = 130.; | 
| 258 | Double_t z0_max = 130.; | 
| 259 | Double_t theta = 0.; | 
| 260 | Double_t phi = 0.; | 
| 261 | Double_t theta_min = 0.; | 
| 262 | Double_t theta_max = Pi()/2.; | 
| 263 | Double_t phi_min = 0.; | 
| 264 | Double_t phi_max = TwoPi(); | 
| 265 |  | 
| 266 | if( node ){ | 
| 267 | for ( ; node; node = node->GetNextNode()) { | 
| 268 | if ( (node->GetNodeType() == TXMLNode::kXMLElementNode) ) { // Element Node | 
| 269 | if (strcmp(node->GetNodeName(), "read_from_file") == 0){ | 
| 270 | read_mode = kTRUE; | 
| 271 | TString val = node->GetText(); | 
| 272 | if (val.Length() ) read_path = val; | 
| 273 | } | 
| 274 | if (strcmp(node->GetNodeName(), "define_primaries") == 0){ | 
| 275 | read_mode = kFALSE; | 
| 276 | TXMLNode *node_ch = node->GetChildren(); | 
| 277 | for ( ; node_ch; node_ch = node_ch->GetNextNode()) { | 
| 278 | if (strcmp(node_ch->GetNodeName(), "particle_type") == 0){ | 
| 279 | TXMLNode *node_ch2 = node_ch->GetChildren(); | 
| 280 | for ( ; node_ch2; node_ch2 = node_ch2->GetNextNode()) { | 
| 281 | if (strcmp(node_ch2->GetNodeName(), "kProton") == 0){ | 
| 282 | pdg = kProton; | 
| 283 | } | 
| 284 | if (strcmp(node_ch2->GetNodeName(), "H-2") == 0){ | 
| 285 | pdg = 1000010020; | 
| 286 | } | 
| 287 | if (strcmp(node_ch2->GetNodeName(), "H-3") == 0){ | 
| 288 | pdg = 1000010030; | 
| 289 | } | 
| 290 | if (strcmp(node_ch2->GetNodeName(), "He-3") == 0){ | 
| 291 | pdg = 1000020030; | 
| 292 | } | 
| 293 | if (strcmp(node_ch2->GetNodeName(), "He-4") == 0){ | 
| 294 | pdg = 1000020040; | 
| 295 | } | 
| 296 | if (strcmp(node_ch2->GetNodeName(), "user_pdg") == 0){ | 
| 297 | TString val2 = node_ch2->GetText(); | 
| 298 | if( val2.Length() ) pdg = atoi(val2); | 
| 299 | } | 
| 300 | } | 
| 301 | } | 
| 302 | if (strcmp(node_ch->GetNodeName(), "gen_mode") == 0){ | 
| 303 | TXMLNode *node_ch2 = node_ch->GetChildren(); | 
| 304 | for ( ; node_ch2; node_ch2 = node_ch2->GetNextNode()) { | 
| 305 | if (strcmp(node_ch2->GetNodeName(), "user_defined") == 0){ | 
| 306 | spt_mode = kTRUE; | 
| 307 | TXMLNode *node_ch3 = node_ch2->GetChildren(); | 
| 308 | for ( ; node_ch3; node_ch3 = node_ch3->GetNextNode()) { | 
| 309 |  | 
| 310 | //spatial | 
| 311 | if (strcmp(node_ch3->GetNodeName(), "vertex_mode") == 0){ | 
| 312 | TXMLNode *node_ch4 = node_ch3->GetChildren(); | 
| 313 | for ( ; node_ch4; node_ch4 = node_ch4->GetNextNode()) { | 
| 314 | if (strcmp(node_ch4->GetNodeName(), "vertex_box") == 0){ | 
| 315 | vert_mode = kTRUE; | 
| 316 | TXMLNode *node_ch5 = node_ch4->GetChildren(); | 
| 317 | for ( ; node_ch5; node_ch5 = node_ch5->GetNextNode()) { | 
| 318 | TString val5 = node_ch5->GetText(); | 
| 319 | if( val5.Length()){ | 
| 320 | if (strcmp(node_ch5->GetNodeName(), "x0_min") == 0) x0_min = atof(val5); | 
| 321 | if (strcmp(node_ch5->GetNodeName(), "x0_max") == 0) x0_max = atof(val5); | 
| 322 | if (strcmp(node_ch5->GetNodeName(), "y0_min") == 0) y0_min = atof(val5); | 
| 323 | if (strcmp(node_ch5->GetNodeName(), "y0_max") == 0) y0_max = atof(val5); | 
| 324 | if (strcmp(node_ch5->GetNodeName(), "z0_min") == 0) z0_min = atof(val5); | 
| 325 | if (strcmp(node_ch5->GetNodeName(), "z0_max") == 0) z0_max = atof(val5); | 
| 326 | } | 
| 327 | } | 
| 328 | } | 
| 329 | if (strcmp(node_ch4->GetNodeName(), "vertex_fix_point") == 0){ | 
| 330 | vert_mode = kFALSE; | 
| 331 | TXMLNode *node_ch5 = node_ch4->GetChildren(); | 
| 332 | for ( ; node_ch5; node_ch5 = node_ch5->GetNextNode()) { | 
| 333 | TString val5 = node_ch5->GetText(); | 
| 334 | if( val5.Length()){ | 
| 335 | if (strcmp(node_ch5->GetNodeName(), "x0") == 0) x0 = atof(val5); | 
| 336 | if (strcmp(node_ch5->GetNodeName(), "y0") == 0) y0 = atof(val5); | 
| 337 | if (strcmp(node_ch5->GetNodeName(), "z0") == 0) z0 = atof(val5); | 
| 338 | } | 
| 339 | } | 
| 340 | } | 
| 341 | } | 
| 342 |  | 
| 343 | } | 
| 344 |  | 
| 345 | //angular | 
| 346 | if (strcmp(node_ch3->GetNodeName(), "ang_mode") == 0){ | 
| 347 | TXMLNode *node_ch4 = node_ch3->GetChildren(); | 
| 348 | for ( ; node_ch4; node_ch4 = node_ch4->GetNextNode()) { | 
| 349 | if (strcmp(node_ch4->GetNodeName(), "ang_fixed") == 0){ | 
| 350 | ang_mode = kFALSE; | 
| 351 | TXMLNode *node_ch5 = node_ch4->GetChildren(); | 
| 352 | for ( ; node_ch5; node_ch5 = node_ch5->GetNextNode()) { | 
| 353 | TString val5 = node_ch5->GetText(); | 
| 354 | if( val5.Length()){ | 
| 355 | if (strcmp(node_ch5->GetNodeName(), "theta") == 0) theta = atof(val5); | 
| 356 | if (strcmp(node_ch5->GetNodeName(), "phi") == 0) phi = atof(val5); | 
| 357 | } | 
| 358 | } | 
| 359 | } | 
| 360 | if (strcmp(node_ch4->GetNodeName(), "ang_iso") == 0){ | 
| 361 | ang_mode = kTRUE; | 
| 362 | TXMLNode *node_ch5 = node_ch4->GetChildren(); | 
| 363 | for ( ; node_ch5; node_ch5 = node_ch5->GetNextNode()) { | 
| 364 | TString val5 = node_ch5->GetText(); | 
| 365 | if( val5.Length()){ | 
| 366 | if (strcmp(node_ch5->GetNodeName(), "theta_min") == 0) theta_min = atof(val5); | 
| 367 | if (strcmp(node_ch5->GetNodeName(), "phi_min") == 0) phi_min = atof(val5); | 
| 368 | if (strcmp(node_ch5->GetNodeName(), "theta_max") == 0) theta_min = atof(val5); | 
| 369 | if (strcmp(node_ch5->GetNodeName(), "phi_max") == 0) phi_min = atof(val5); | 
| 370 | } | 
| 371 | } | 
| 372 | } | 
| 373 | } | 
| 374 |  | 
| 375 | } | 
| 376 |  | 
| 377 |  | 
| 378 | } | 
| 379 | } | 
| 380 |  | 
| 381 |  | 
| 382 | if (strcmp(node_ch2->GetNodeName(), "dome") == 0){ | 
| 383 | spt_mode = kFALSE; | 
| 384 | } | 
| 385 |  | 
| 386 | } | 
| 387 | } | 
| 388 |  | 
| 389 | //momentum mode | 
| 390 | if (strcmp(node_ch->GetNodeName(), "momentum_mode") == 0){ | 
| 391 | TXMLNode *node_ch2 = node_ch->GetChildren(); | 
| 392 | for ( ; node_ch2; node_ch2 = node_ch2->GetNextNode()) { | 
| 393 | if (strcmp(node_ch2->GetNodeName(), "momentum_mode_fixed") == 0){ | 
| 394 | mom_mode = FIXED; | 
| 395 | TXMLNode *node_ch3 = node_ch2->GetChildren(); | 
| 396 | for ( ; node_ch3; node_ch3 = node_ch3->GetNextNode()) { | 
| 397 | TString val3 = node_ch3->GetText(); | 
| 398 | if( val3.Length()){ | 
| 399 | if (strcmp(node_ch3->GetNodeName(), "P0") == 0) mom_fix = atof(val3); | 
| 400 | } | 
| 401 | } | 
| 402 | } | 
| 403 |  | 
| 404 | if (strcmp(node_ch2->GetNodeName(), "momentum_mode_flat") == 0){ | 
| 405 | mom_mode = FLAT; | 
| 406 | TXMLNode *node_ch3 = node_ch2->GetChildren(); | 
| 407 | for ( ; node_ch3; node_ch3 = node_ch3->GetNextNode()) { | 
| 408 | TString val3 = node_ch3->GetText(); | 
| 409 | if( val3.Length()){ | 
| 410 | if (strcmp(node_ch3->GetNodeName(), "P0_min") == 0) mom_min = atof(val3); | 
| 411 | if (strcmp(node_ch3->GetNodeName(), "P0_max") == 0) mom_max = atof(val3); | 
| 412 | } | 
| 413 | } | 
| 414 | } | 
| 415 |  | 
| 416 | if (strcmp(node_ch2->GetNodeName(), "momentum_mode_powerlaw") == 0){ | 
| 417 | mom_mode = POWERLAW; | 
| 418 | TXMLNode *node_ch3 = node_ch2->GetChildren(); | 
| 419 | for ( ; node_ch3; node_ch3 = node_ch3->GetNextNode()) { | 
| 420 | TString val3 = node_ch3->GetText(); | 
| 421 | if( val3.Length()){ | 
| 422 | if (strcmp(node_ch3->GetNodeName(), "P0_min") == 0) mom_min = atof(val3); | 
| 423 | if (strcmp(node_ch3->GetNodeName(), "P0_max") == 0) mom_max = atof(val3); | 
| 424 | if (strcmp(node_ch3->GetNodeName(), "gamma") == 0) gamma = atof(val3); | 
| 425 | } | 
| 426 | } | 
| 427 | } | 
| 428 |  | 
| 429 | } | 
| 430 | } | 
| 431 | //momentum units | 
| 432 | if (strcmp(node_ch->GetNodeName(), "momentum_units") == 0){ | 
| 433 | TXMLNode *node_ch2 = node_ch->GetChildren(); | 
| 434 | for ( ; node_ch2; node_ch2 = node_ch2->GetNextNode()) { | 
| 435 | if (strcmp(node_ch2->GetNodeName(), "GV_p") == 0) units = GV_p; | 
| 436 | if (strcmp(node_ch2->GetNodeName(), "GV_R") == 0) units = GV_R; | 
| 437 | if (strcmp(node_ch2->GetNodeName(), "GeV_T") == 0) units = GeV_T; | 
| 438 | } | 
| 439 | } | 
| 440 | //nevents | 
| 441 | if (strcmp(node_ch->GetNodeName(), "nevents") == 0){ | 
| 442 | TXMLNode *node_ch2 = node_ch->GetChildren(); | 
| 443 | for ( ; node_ch2; node_ch2 = node_ch2->GetNextNode()) { | 
| 444 | TString val2 = node_ch2->GetText(); | 
| 445 | if (strcmp(node_ch2->GetNodeName(), "nev_tot") == 0) nv_m = NEV_TOT; | 
| 446 | if (strcmp(node_ch2->GetNodeName(), "nev_accept") == 0) nv_m = NEV_ACCEPT; | 
| 447 | if (strcmp(node_ch2->GetNodeName(), "nev_trigg") == 0) nv_m = NEV_TRIGG; | 
| 448 | if(val2.Length()) nevents = atoi(val2); | 
| 449 | } | 
| 450 | } | 
| 451 |  | 
| 452 |  | 
| 453 | } | 
| 454 | } | 
| 455 | } | 
| 456 | } | 
| 457 | } | 
| 458 | return new  pPrimaryModeOpt(read_mode, read_path, pdg, spt_mode, vert_mode, ang_mode, | 
| 459 | mom_mode, units, mom_fix, mom_min, mom_max, gamma, nv_m,  nevents,  x0,  y0, z0, | 
| 460 | x0_min,  x0_max, y0_min, y0_max, z0_min, z0_max, | 
| 461 | theta,  phi, theta_min, theta_max,  phi_min, phi_max); | 
| 462 | } |