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