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_EmbedScanOff(
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) {
0588
0589
0590 const std::string svtxOutput = outputroot + "_g4svtx_eval.root";
0591
0592
0593 SvtxEvaluator* eval;
0594 eval = new SvtxEvaluator("SVTXEVALUATOR", svtxOutput, "SvtxTrackMap",
0595 G4MVTX::n_maps_layer,
0596 G4INTT::n_intt_layer,
0597 G4TPC::n_gas_layer,
0598 G4MICROMEGAS::n_micromegas_layer);
0599
0600
0601 eval -> do_cluster_eval(false);
0602 eval -> do_g4hit_eval(false);
0603 eval -> do_hit_eval(false);
0604 eval -> do_gpoint_eval(false);
0605 eval -> do_vtx_eval_light(true);
0606 eval -> do_eval_light(true);
0607 eval -> set_use_initial_vertex(G4TRACKING::g4eval_use_initial_vertex);
0608
0609
0610 bool embed_scan = false;
0611 if (TRACKING::pp_mode) {
0612 embed_scan = false;
0613 }
0614 eval -> scan_for_embedded(embed_scan);
0615 eval -> scan_for_primaries(embed_scan);
0616
0617
0618 std::cout << "SvtxEvaluator: pp_mode set to " << TRACKING::pp_mode << " and scan_for_embedded set to " << embed_scan << std::endl;
0619 eval -> Verbosity(1);
0620 eval -> set_cluster_version(G4TRACKING::cluster_version);
0621
0622
0623 se -> registerSubsystem(eval);
0624 }
0625
0626 if (Enable::CEMC_EVAL) CEMC_Eval(outputroot + "_g4cemc_eval.root");
0627
0628 if (Enable::HCALIN_EVAL) HCALInner_Eval(outputroot + "_g4hcalin_eval.root");
0629
0630 if (Enable::HCALOUT_EVAL) HCALOuter_Eval(outputroot + "_g4hcalout_eval.root");
0631
0632 if (Enable::JETS_EVAL) Jet_Eval(outputroot + "_g4jet_eval.root");
0633
0634 if (Enable::DSTREADER) G4DSTreader(outputroot + "_DSTReader.root");
0635
0636 if (Enable::USER) UserAnalysisInit();
0637
0638
0639
0640 if(G4TRACKING::filter_conversion_electrons) Filter_Conversion_Electrons(outputroot + "_secvert_ntuple.root");
0641
0642
0643
0644
0645 if (Enable::KFPARTICLE && Input::UPSILON) KFParticle_Upsilon_Reco();
0646 if (Enable::KFPARTICLE && Input::DZERO) KFParticle_D0_Reco();
0647
0648
0649
0650
0651
0652 if (Enable::CEMC_QA) CEMC_QA();
0653 if (Enable::HCALIN_QA) HCALInner_QA();
0654 if (Enable::HCALOUT_QA) HCALOuter_QA();
0655
0656 if (Enable::JETS_QA) Jet_QA();
0657
0658 if (Enable::MVTX_QA) Mvtx_QA();
0659 if (Enable::INTT_QA) Intt_QA();
0660 if (Enable::TPC_QA) TPC_QA();
0661 if (Enable::MICROMEGAS_QA) Micromegas_QA();
0662 if (Enable::TRACKING_QA) Tracking_QA();
0663
0664 if (Enable::TRACKING_QA && Enable::CEMC_QA && Enable::HCALIN_QA && Enable::HCALOUT_QA) QA_G4CaloTracking();
0665
0666
0667
0668
0669
0670 InputManagers();
0671
0672 if (Enable::PRODUCTION)
0673 {
0674 Production_CreateOutputDir();
0675 }
0676
0677 if (Enable::DSTOUT)
0678 {
0679 string FullOutFile = DstOut::OutputDir + "/" + DstOut::OutputFile;
0680 Fun4AllDstOutputManager *out = new Fun4AllDstOutputManager("DSTOUT", FullOutFile);
0681 if (Enable::DSTOUT_COMPRESS)
0682 {
0683 ShowerCompress();
0684 DstCompress(out);
0685 }
0686 se->registerOutputManager(out);
0687 }
0688
0689
0690
0691 if (Enable::DISPLAY)
0692 {
0693 DisplayOn();
0694
0695 gROOT->ProcessLine("Fun4AllServer *se = Fun4AllServer::instance();");
0696 gROOT->ProcessLine("PHG4Reco *g4 = (PHG4Reco *) se->getSubsysReco(\"PHG4RECO\");");
0697
0698 cout << "-------------------------------------------------" << endl;
0699 cout << "You are in event display mode. Run one event with" << endl;
0700 cout << "se->run(1)" << endl;
0701 cout << "Run Geant4 command with following examples" << endl;
0702 gROOT->ProcessLine("displaycmd()");
0703
0704 return 0;
0705 }
0706
0707
0708 if (nEvents < 0)
0709 {
0710 return 0;
0711 }
0712
0713
0714 if (nEvents == 0 && !Input::HEPMC && !Input::READHITS && INPUTEMBED::REPEAT)
0715 {
0716 cout << "using 0 for number of events is a bad idea when using particle generators" << endl;
0717 cout << "it will run forever, so I just return without running anything" << endl;
0718 return 0;
0719 }
0720
0721 se->skip(skip);
0722 se->run(nEvents);
0723
0724
0725
0726
0727
0728 if (Enable::QA) QA_Output(outputroot + "_qa.root");
0729
0730
0731
0732
0733
0734
0735 se->End();
0736 std::cout << "All done" << std::endl;
0737 delete se;
0738 if (Enable::PRODUCTION)
0739 {
0740 Production_MoveOutput();
0741 }
0742
0743 gSystem->Exit(0);
0744 return 0;
0745 }
0746 #endif