File indexing completed on 2025-08-05 08:10:56
0001 #ifndef MACRO_FUN4ALLG4SPHENIX_C
0002 #define MACRO_FUN4ALLG4SPHENIX_C
0003
0004 #include <GlobalVariables.C>
0005
0006 #include <DisplayOn.C>
0007 #include <G4Setup_sPHENIX.C>
0008 #include <G4_Bbc.C>
0009 #include <G4_CaloTrigger.C>
0010 #include <G4_Centrality.C>
0011 #include <G4_DSTReader.C>
0012 #include <G4_Global.C>
0013 #include <G4_HIJetReco.C>
0014 #include <G4_Input.C>
0015 #include <G4_Jets.C>
0016 #include <G4_KFParticle.C>
0017 #include <G4_ParticleFlow.C>
0018 #include <G4_Production.C>
0019 #include <G4_TopoClusterReco.C>
0020 #include <G4_Tracking.C>
0021 #include <G4_User.C>
0022 #include <QA.C>
0023
0024 #include <ffamodules/FlagHandler.h>
0025 #include <ffamodules/HeadReco.h>
0026 #include <ffamodules/SyncReco.h>
0027 #include <ffamodules/XploadInterface.h>
0028
0029 #include <fun4all/Fun4AllDstOutputManager.h>
0030 #include <fun4all/Fun4AllOutputManager.h>
0031 #include <fun4all/Fun4AllServer.h>
0032
0033 #include <phool/PHRandomSeed.h>
0034 #include <phool/recoConsts.h>
0035
0036 R__LOAD_LIBRARY(libfun4all.so)
0037 R__LOAD_LIBRARY(libffamodules.so)
0038
0039
0040
0041
0042 int Fun4All_G4_sPHENIX_ForTrackCutStudy(
0043 const int nEvents = 1,
0044 const string &inputFile = "/sphenix/lustre01/sphnxpro/mdc2/shijing_hepmc/fm_0_20/g4hits/G4Hits_sHijing_0_20fm-0000000040-00848.root",
0045 const string &outputFile = "sPhenixG4_test00019.root",
0046 const string &embed_input_file = "/sphenix/lustre01/sphnxpro/mdc2/shijing_hepmc/fm_0_20/g4hits/G4Hits_sHijing_0_20fm-0000000040-00848.root",
0047 const int skip = 0,
0048 const string &outdir = ".")
0049 {
0050 Fun4AllServer *se = Fun4AllServer::instance();
0051 se->Verbosity(0);
0052
0053
0054 PHRandomSeed::Verbosity(1);
0055
0056
0057 recoConsts *rc = recoConsts::instance();
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073 Input::VERBOSITY = 0;
0074
0075
0076
0077
0078
0079
0080 INPUTREADHITS::filename[0] = inputFile;
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090 INPUTEMBED::filename[0] = embed_input_file;
0091
0092
0093
0094 Input::SIMPLE = true;
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118 INPUTHEPMC::filename = inputFile;
0119
0120
0121
0122
0123
0124
0125
0126
0127 InputInit();
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137 if (Input::SIMPLE)
0138 {
0139 INPUTGENERATOR::SimpleEventGenerator[0]->add_particles("pi-", 5);
0140 if (Input::HEPMC || Input::EMBED)
0141 {
0142 INPUTGENERATOR::SimpleEventGenerator[0]->set_reuse_existing_vertex(true);
0143 INPUTGENERATOR::SimpleEventGenerator[0]->set_existing_vertex_offset_vector(0.0, 0.0, 0.0);
0144 }
0145 else
0146 {
0147 INPUTGENERATOR::SimpleEventGenerator[0]->set_vertex_distribution_function(PHG4SimpleEventGenerator::Gaus,
0148 PHG4SimpleEventGenerator::Gaus,
0149 PHG4SimpleEventGenerator::Gaus);
0150 INPUTGENERATOR::SimpleEventGenerator[0]->set_vertex_distribution_mean(0., 0., 0.);
0151 INPUTGENERATOR::SimpleEventGenerator[0]->set_vertex_distribution_width(0.01, 0.01, 5.);
0152 }
0153 INPUTGENERATOR::SimpleEventGenerator[0]->set_eta_range(-1, 1);
0154 INPUTGENERATOR::SimpleEventGenerator[0]->set_phi_range(-M_PI, M_PI);
0155 INPUTGENERATOR::SimpleEventGenerator[0]->set_pt_range(0.1, 20.);
0156 }
0157
0158
0159
0160 if (Input::UPSILON)
0161 {
0162 INPUTGENERATOR::VectorMesonGenerator[0]->add_decay_particles("e", 0);
0163 INPUTGENERATOR::VectorMesonGenerator[0]->set_rapidity_range(-1, 1);
0164 INPUTGENERATOR::VectorMesonGenerator[0]->set_pt_range(0., 10.);
0165
0166 INPUTGENERATOR::VectorMesonGenerator[0]->set_upsilon_1s();
0167 if (Input::HEPMC || Input::EMBED)
0168 {
0169 INPUTGENERATOR::VectorMesonGenerator[0]->set_reuse_existing_vertex(true);
0170 INPUTGENERATOR::VectorMesonGenerator[0]->set_existing_vertex_offset_vector(0.0, 0.0, 0.0);
0171 }
0172 }
0173
0174
0175
0176 if (Input::GUN)
0177 {
0178 INPUTGENERATOR::Gun[0]->AddParticle("pi-", 0, 1, 0);
0179 INPUTGENERATOR::Gun[0]->set_vtx(0, 0, 0);
0180 }
0181
0182
0183 if (Input::PYTHIA6)
0184 {
0185
0186 Input::ApplysPHENIXBeamParameter(INPUTGENERATOR::Pythia6);
0187 }
0188
0189 if (Input::PYTHIA8)
0190 {
0191
0192 Input::ApplysPHENIXBeamParameter(INPUTGENERATOR::Pythia8);
0193 }
0194
0195
0196
0197
0198
0199
0200 if (Input::HEPMC)
0201 {
0202
0203 Input::ApplysPHENIXBeamParameter(INPUTMANAGER::HepMCInputManager);
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215 if (Input::PILEUPRATE > 0)
0216 {
0217
0218 INPUTMANAGER::HepMCPileupInputManager->CopyHelperSettings(INPUTMANAGER::HepMCInputManager);
0219
0220
0221 }
0222 }
0223 if (Input::PILEUPRATE > 0)
0224 {
0225
0226 Input::ApplysPHENIXBeamParameter(INPUTMANAGER::HepMCPileupInputManager);
0227 }
0228
0229 InputRegister();
0230
0231 if (! Input::READHITS)
0232 {
0233 rc->set_IntFlag("RUNNUMBER",1);
0234
0235 SyncReco *sync = new SyncReco();
0236 se->registerSubsystem(sync);
0237
0238 HeadReco *head = new HeadReco();
0239 se->registerSubsystem(head);
0240 }
0241
0242
0243
0244 FlagHandler *flag = new FlagHandler();
0245 se->registerSubsystem(flag);
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255 Enable::DSTOUT_COMPRESS = false;
0256 DstOut::OutputDir = outdir;
0257 DstOut::OutputFile = outputFile;
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271 Enable::QA = false;
0272
0273
0274
0275
0276
0277
0278
0279
0280 Enable::BBCFAKE = true;
0281
0282 Enable::PIPE = true;
0283 Enable::PIPE_ABSORBER = true;
0284
0285
0286 Enable::MVTX = true;
0287 Enable::MVTX_CELL = Enable::MVTX && true;
0288 Enable::MVTX_CLUSTER = Enable::MVTX_CELL && true;
0289 Enable::MVTX_QA = Enable::MVTX_CLUSTER && Enable::QA && true;
0290
0291 Enable::INTT = true;
0292
0293
0294 Enable::INTT_CELL = Enable::INTT && true;
0295 Enable::INTT_CLUSTER = Enable::INTT_CELL && true;
0296 Enable::INTT_QA = Enable::INTT_CLUSTER && Enable::QA && true;
0297
0298 Enable::TPC = true;
0299 Enable::TPC_ABSORBER = true;
0300 Enable::TPC_CELL = Enable::TPC && true;
0301 Enable::TPC_CLUSTER = Enable::TPC_CELL && true;
0302 Enable::TPC_QA = Enable::TPC_CLUSTER && Enable::QA && true;
0303
0304 Enable::MICROMEGAS = true;
0305 Enable::MICROMEGAS_CELL = Enable::MICROMEGAS && true;
0306 Enable::MICROMEGAS_CLUSTER = Enable::MICROMEGAS_CELL && true;
0307 Enable::MICROMEGAS_QA = Enable::MICROMEGAS_CLUSTER && Enable::QA && true;
0308
0309 Enable::TRACKING_TRACK = (Enable::MICROMEGAS_CLUSTER && Enable::TPC_CLUSTER && Enable::INTT_CLUSTER && Enable::MVTX_CLUSTER) && true;
0310 Enable::TRACKING_EVAL = Enable::TRACKING_TRACK && true;
0311 Enable::TRACKING_QA = Enable::TRACKING_TRACK && Enable::QA && true;
0312
0313
0314
0315
0316
0317 Enable::CEMC = true;
0318 Enable::CEMC_ABSORBER = true;
0319 Enable::CEMC_CELL = Enable::CEMC && true;
0320 Enable::CEMC_TOWER = Enable::CEMC_CELL && true;
0321 Enable::CEMC_CLUSTER = Enable::CEMC_TOWER && true;
0322
0323 Enable::CEMC_EVAL = false;
0324 Enable::CEMC_QA = Enable::CEMC_CLUSTER && Enable::QA && true;
0325
0326 Enable::HCALIN = true;
0327 Enable::HCALIN_ABSORBER = true;
0328 Enable::HCALIN_CELL = Enable::HCALIN && true;
0329 Enable::HCALIN_TOWER = Enable::HCALIN_CELL && true;
0330 Enable::HCALIN_CLUSTER = Enable::HCALIN_TOWER && true;
0331
0332 Enable::HCALIN_EVAL = false;
0333 Enable::HCALIN_QA = Enable::HCALIN_CLUSTER && Enable::QA && true;
0334
0335 Enable::MAGNET = true;
0336 Enable::MAGNET_ABSORBER = true;
0337
0338 Enable::HCALOUT = true;
0339 Enable::HCALOUT_ABSORBER = true;
0340 Enable::HCALOUT_CELL = Enable::HCALOUT && true;
0341 Enable::HCALOUT_TOWER = Enable::HCALOUT_CELL && true;
0342 Enable::HCALOUT_CLUSTER = Enable::HCALOUT_TOWER && true;
0343
0344 Enable::HCALOUT_EVAL = false;
0345 Enable::HCALOUT_QA = Enable::HCALOUT_CLUSTER && Enable::QA && true;
0346
0347 Enable::EPD = true;
0348
0349 Enable::BEAMLINE = true;
0350
0351
0352 Enable::ZDC = true;
0353
0354
0355 Enable::ZDC_TOWER = Enable::ZDC && true;
0356
0357 Enable::ZDC_EVAL = false;
0358
0359
0360
0361 Enable::PLUGDOOR_ABSORBER = true;
0362
0363 Enable::GLOBAL_RECO = (Enable::BBCFAKE || Enable::TRACKING_TRACK) && true;
0364
0365
0366
0367
0368
0369
0370
0371 Enable::CALOTRIGGER = Enable::CEMC_TOWER && Enable::HCALIN_TOWER && Enable::HCALOUT_TOWER && false;
0372
0373 Enable::JETS = (Enable::GLOBAL_RECO || Enable::GLOBAL_FASTSIM) && true;
0374
0375 Enable::JETS_EVAL = false;
0376 Enable::JETS_QA = Enable::JETS && Enable::QA && true;
0377
0378
0379
0380
0381 Enable::HIJETS = Enable::JETS && Enable::CEMC_TOWER && Enable::HCALIN_TOWER && Enable::HCALOUT_TOWER && false;
0382
0383
0384 Enable::TOPOCLUSTER = Enable::CEMC_TOWER && Enable::HCALIN_TOWER && Enable::HCALOUT_TOWER && false;
0385
0386 Enable::PARTICLEFLOW = Enable::TOPOCLUSTER && true;
0387
0388 Enable::CENTRALITY = true;
0389
0390
0391 Enable::BLACKHOLE = true;
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404 rc->set_StringFlag("XPLOAD_TAG",XPLOAD::tag);
0405
0406 rc->set_StringFlag("XPLOAD_CONFIG",XPLOAD::config);
0407
0408 rc->set_uint64Flag("TIMESTAMP",XPLOAD::timestamp);
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433 G4Init();
0434
0435
0436
0437
0438 if (!Input::READHITS)
0439 {
0440 G4Setup();
0441 }
0442
0443
0444
0445
0446
0447 if (Enable::BBC || Enable::BBCFAKE) Bbc_Reco();
0448
0449 if (Enable::MVTX_CELL) Mvtx_Cells();
0450 if (Enable::INTT_CELL) Intt_Cells();
0451 if (Enable::TPC_CELL) TPC_Cells();
0452 if (Enable::MICROMEGAS_CELL) Micromegas_Cells();
0453
0454 if (Enable::CEMC_CELL) CEMC_Cells();
0455
0456 if (Enable::HCALIN_CELL) HCALInner_Cells();
0457
0458 if (Enable::HCALOUT_CELL) HCALOuter_Cells();
0459
0460
0461
0462
0463
0464 if (Enable::CEMC_TOWER) CEMC_Towers();
0465 if (Enable::CEMC_CLUSTER) CEMC_Clusters();
0466
0467
0468
0469
0470
0471 if (Enable::HCALIN_TOWER) HCALInner_Towers();
0472 if (Enable::HCALIN_CLUSTER) HCALInner_Clusters();
0473
0474 if (Enable::HCALOUT_TOWER) HCALOuter_Towers();
0475 if (Enable::HCALOUT_CLUSTER) HCALOuter_Clusters();
0476
0477
0478 if (Enable::TOPOCLUSTER) TopoClusterReco();
0479
0480
0481
0482
0483 if(Enable::TRACKING_TRACK)
0484 {
0485 TrackingInit();
0486 }
0487 if (Enable::MVTX_CLUSTER) Mvtx_Clustering();
0488 if (Enable::INTT_CLUSTER) Intt_Clustering();
0489 if (Enable::TPC_CLUSTER) TPC_Clustering();
0490 if (Enable::MICROMEGAS_CLUSTER) Micromegas_Clustering();
0491
0492 if (Enable::TRACKING_TRACK)
0493 {
0494 Tracking_Reco();
0495 }
0496
0497
0498
0499
0500 if (Enable::GLOBAL_RECO && Enable::GLOBAL_FASTSIM)
0501 {
0502 cout << "You can only enable Enable::GLOBAL_RECO or Enable::GLOBAL_FASTSIM, not both" << endl;
0503 gSystem->Exit(1);
0504 }
0505 if (Enable::GLOBAL_RECO)
0506 {
0507 Global_Reco();
0508 }
0509 else if (Enable::GLOBAL_FASTSIM)
0510 {
0511 Global_FastSim();
0512 }
0513
0514
0515
0516
0517
0518 if (Enable::CENTRALITY)
0519 {
0520 Centrality();
0521 }
0522
0523
0524
0525
0526
0527 if (Enable::CALOTRIGGER)
0528 {
0529 CaloTrigger_Sim();
0530 }
0531
0532
0533
0534
0535
0536 if (Enable::JETS) Jet_Reco();
0537 if (Enable::HIJETS) HIJetReco();
0538
0539 if (Enable::PARTICLEFLOW) ParticleFlow();
0540
0541
0542
0543
0544 string outputroot = outputFile;
0545 string remove_this = ".root";
0546 size_t pos = outputroot.find(remove_this);
0547 if (pos != string::npos)
0548 {
0549 outputroot.erase(pos, remove_this.length());
0550 }
0551
0552 if (Enable::TRACKING_EVAL) Tracking_Eval(outputroot + "_g4svtx_eval.root");
0553
0554 if (Enable::CEMC_EVAL) CEMC_Eval(outputroot + "_g4cemc_eval.root");
0555
0556 if (Enable::HCALIN_EVAL) HCALInner_Eval(outputroot + "_g4hcalin_eval.root");
0557
0558 if (Enable::HCALOUT_EVAL) HCALOuter_Eval(outputroot + "_g4hcalout_eval.root");
0559
0560 if (Enable::JETS_EVAL) Jet_Eval(outputroot + "_g4jet_eval.root");
0561
0562 if (Enable::DSTREADER) G4DSTreader(outputroot + "_DSTReader.root");
0563
0564 if (Enable::USER) UserAnalysisInit();
0565
0566
0567
0568
0569 if (Enable::KFPARTICLE && Input::UPSILON) KFParticle_Upsilon_Reco();
0570 if (Enable::KFPARTICLE && Input::DZERO) KFParticle_D0_Reco();
0571
0572
0573
0574
0575
0576 if (Enable::CEMC_QA) CEMC_QA();
0577 if (Enable::HCALIN_QA) HCALInner_QA();
0578 if (Enable::HCALOUT_QA) HCALOuter_QA();
0579
0580 if (Enable::JETS_QA) Jet_QA();
0581
0582 if (Enable::MVTX_QA) Mvtx_QA();
0583 if (Enable::INTT_QA) Intt_QA();
0584 if (Enable::TPC_QA) TPC_QA();
0585 if (Enable::MICROMEGAS_QA) Micromegas_QA();
0586 if (Enable::TRACKING_QA) Tracking_QA();
0587
0588 if (Enable::TRACKING_QA && Enable::CEMC_QA && Enable::HCALIN_QA && Enable::HCALOUT_QA) QA_G4CaloTracking();
0589
0590
0591
0592
0593
0594 InputManagers();
0595
0596 if (Enable::PRODUCTION)
0597 {
0598 Production_CreateOutputDir();
0599 }
0600
0601 if (Enable::DSTOUT)
0602 {
0603 string FullOutFile = DstOut::OutputDir + "/" + DstOut::OutputFile;
0604 Fun4AllDstOutputManager *out = new Fun4AllDstOutputManager("DSTOUT", FullOutFile);
0605 if (Enable::DSTOUT_COMPRESS)
0606 {
0607 ShowerCompress();
0608 DstCompress(out);
0609 }
0610 se->registerOutputManager(out);
0611 }
0612
0613
0614
0615 if (Enable::DISPLAY)
0616 {
0617 DisplayOn();
0618
0619 gROOT->ProcessLine("Fun4AllServer *se = Fun4AllServer::instance();");
0620 gROOT->ProcessLine("PHG4Reco *g4 = (PHG4Reco *) se->getSubsysReco(\"PHG4RECO\");");
0621
0622 cout << "-------------------------------------------------" << endl;
0623 cout << "You are in event display mode. Run one event with" << endl;
0624 cout << "se->run(1)" << endl;
0625 cout << "Run Geant4 command with following examples" << endl;
0626 gROOT->ProcessLine("displaycmd()");
0627
0628 return 0;
0629 }
0630
0631
0632 if (nEvents < 0)
0633 {
0634 return 0;
0635 }
0636
0637
0638 if (nEvents == 0 && !Input::HEPMC && !Input::READHITS && INPUTEMBED::REPEAT)
0639 {
0640 cout << "using 0 for number of events is a bad idea when using particle generators" << endl;
0641 cout << "it will run forever, so I just return without running anything" << endl;
0642 return 0;
0643 }
0644
0645 se->skip(skip);
0646 se->run(nEvents);
0647
0648
0649
0650
0651
0652 if (Enable::QA) QA_Output(outputroot + "_qa.root");
0653
0654
0655
0656
0657
0658 se->End();
0659 std::cout << "All done" << std::endl;
0660 delete se;
0661 if (Enable::PRODUCTION)
0662 {
0663 Production_MoveOutput();
0664 }
0665
0666 gSystem->Exit(0);
0667 return 0;
0668 }
0669 #endif