From a0601bb02a81ff12c48558635e60e21626f3a5c6 Mon Sep 17 00:00:00 2001 From: Alberto Caliva Date: Tue, 5 Aug 2025 12:25:16 +0200 Subject: [PATCH 1/3] added EPOS4 generator for pp collisions at 13 TeV --- .../generator/pp_13TeV_hydro_cascade.optns | 32 +++++++++++++++++++ .../examples/ini/GeneratorEPOS4_pp13TeV.ini | 11 +++++++ 2 files changed, 43 insertions(+) create mode 100644 MC/config/examples/epos4/generator/pp_13TeV_hydro_cascade.optns create mode 100644 MC/config/examples/ini/GeneratorEPOS4_pp13TeV.ini diff --git a/MC/config/examples/epos4/generator/pp_13TeV_hydro_cascade.optns b/MC/config/examples/epos4/generator/pp_13TeV_hydro_cascade.optns new file mode 100644 index 000000000..6081a0fa4 --- /dev/null +++ b/MC/config/examples/epos4/generator/pp_13TeV_hydro_cascade.optns @@ -0,0 +1,32 @@ +!-------------------------------------------------------------------- +! proton-proton collisions at 13 TeV with hydro and hadronic cascade +!-------------------------------------------------------------------- + +!--------------------------------------- +! Define run +!--------------------------------------- + +application hadron !hadron-hadron, hadron-nucleus, or nucleus-nucleus +set laproj 1 !projectile atomic number +set maproj 1 !projectile mass number +set latarg 1 !target atomic number +set matarg 1 !target mass number +set ecms 13000 !sqrt(s)_pp +set istmax 25 !max status considered for storage + +ftime on !string formation time non-zero +!suppressed decays: +nodecays + 110 20 2130 -2130 2230 -2230 1130 -1130 1330 -1330 2330 -2330 3331 -3331 +end + +set ninicon 1 !number of initial conditions used for hydro evolution +core full !core/corona activated +hydro hlle !hydro activated +eos x3ff !eos activated (epos standard EoS) +hacas full !hadronic cascade activated (UrQMD) +set nfreeze 1 !number of freeze out events per hydro event +set modsho 1 !printout every modsho events +set centrality 0 !0=min bias +set ihepmc 2 !HepMC output enabled on stdout +set nfull 10 diff --git a/MC/config/examples/ini/GeneratorEPOS4_pp13TeV.ini b/MC/config/examples/ini/GeneratorEPOS4_pp13TeV.ini new file mode 100644 index 000000000..3e5080bf1 --- /dev/null +++ b/MC/config/examples/ini/GeneratorEPOS4_pp13TeV.ini @@ -0,0 +1,11 @@ +[GeneratorExternal] +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/examples/epos4/generator_EPOS4.C +funcName=generateEPOS4("${O2DPG_MC_CONFIG_ROOT}/MC/config/examples/epos4/generator/pp_13TeV_hydro_cascade.optns", 2147483647) + +[GeneratorFileOrCmd] +cmd=${O2DPG_MC_CONFIG_ROOT}/MC/config/examples/epos4/epos.sh +bMaxSwitch=none + +# Set to version 2 if EPOS4.0.0 is used +[HepMC] +version=3 From eafe367f99f8f27c4c208e302c42dbae1fc0fd64 Mon Sep 17 00:00:00 2001 From: Alberto Caliva Date: Tue, 5 Aug 2025 14:13:59 +0200 Subject: [PATCH 2/3] added validation routine --- .../ini/tests/GeneratorEPOS4_pp13TeV.C | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C diff --git a/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C b/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C new file mode 100644 index 000000000..0952342ef --- /dev/null +++ b/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C @@ -0,0 +1,64 @@ +int External() +{ + std::string path{"o2sim_Kine.root"}; + // Check that file exists, can be opened and has the correct tree + TFile file(path.c_str(), "READ"); + if (file.IsZombie()) + { + std::cerr << "Cannot open ROOT file " << path << "\n"; + return 1; + } + auto tree = (TTree *)file.Get("o2sim"); + if (!tree) + { + std::cerr << "Cannot find tree o2sim in file " << path << "\n"; + return 1; + } + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + + // Check if all events are filled + auto nEvents = tree->GetEntries(); + for (Long64_t i = 0; i < nEvents; ++i) + { + tree->GetEntry(i); + if (tracks->empty()) + { + std::cerr << "Empty entry found at event " << i << "\n"; + return 1; + } + } + // Check if there are 100 events, as simulated in the o2dpg-test + if (nEvents != 100) + { + std::cerr << "Expected 100 events, got " << nEvents << "\n"; + return 1; + } + // check if each event has two protons with 6800 GeV of energy + // exits if the particle is not a proton + for (int i = 0; i < nEvents; i++) + { + auto check = tree->GetEntry(i); + int count = 0; + for (int idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack) + { + auto track = tracks->at(idxMCTrack); + double energy = track.GetEnergy(); + // Check if track energy is approximately equal to 6800 GeV (a tolerance of 65 keV is considered, straight equality does not work due to floating point precision) + if (std::abs(energy - 6500) < 1e-4) + { + if (track.GetPdgCode() != 2212){ + std::cerr << "Found 6500 GeV particle with pdgID " << track.GetPdgCode() << "\n"; + return 1; + } + count++; + } + } + if (count < 2) + { + std::cerr << "Event " << i << " has less than 2 protons at 6500 GeV\n"; + return 1; + } + } + return 0; +} From 2b251ed0909afad1b9752850af2565657bede020 Mon Sep 17 00:00:00 2001 From: Alberto Caliva Date: Tue, 5 Aug 2025 19:20:27 +0200 Subject: [PATCH 3/3] fixed comments --- MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C b/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C index 0952342ef..eac9c321b 100644 --- a/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C +++ b/MC/config/examples/ini/tests/GeneratorEPOS4_pp13TeV.C @@ -34,8 +34,8 @@ int External() std::cerr << "Expected 100 events, got " << nEvents << "\n"; return 1; } - // check if each event has two protons with 6800 GeV of energy - // exits if the particle is not a proton + // check if each event has two protons with 6500 GeV of energy + // exits if the particle is not a proton for (int i = 0; i < nEvents; i++) { auto check = tree->GetEntry(i); @@ -44,7 +44,7 @@ int External() { auto track = tracks->at(idxMCTrack); double energy = track.GetEnergy(); - // Check if track energy is approximately equal to 6800 GeV (a tolerance of 65 keV is considered, straight equality does not work due to floating point precision) + // Check if track energy is approximately equal to 6500 GeV (a tolerance of 65 keV is considered, straight equality does not work due to floating point precision) if (std::abs(energy - 6500) < 1e-4) { if (track.GetPdgCode() != 2212){