From 3d8ee786ebcc6deae072f7e6144ac75652536d1d Mon Sep 17 00:00:00 2001 From: jaimenorman Date: Wed, 21 Oct 2026 15:08:35 +0100 Subject: [PATCH 1/3] higher MB gaps for testing --- .../PWGGAJE/ini/GeneratorJE_gapgen11_hook_pp13600GeV.ini | 9 +++++++++ .../PWGGAJE/ini/GeneratorJE_gapgen7_hook_pp13600GeV.ini | 9 +++++++++ .../PWGGAJE/ini/GeneratorJE_gapgen9_hook_pp13600GeV.ini | 9 +++++++++ 3 files changed, 27 insertions(+) create mode 100644 MC/config/PWGGAJE/ini/GeneratorJE_gapgen11_hook_pp13600GeV.ini create mode 100644 MC/config/PWGGAJE/ini/GeneratorJE_gapgen7_hook_pp13600GeV.ini create mode 100644 MC/config/PWGGAJE/ini/GeneratorJE_gapgen9_hook_pp13600GeV.ini diff --git a/MC/config/PWGGAJE/ini/GeneratorJE_gapgen11_hook_pp13600GeV.ini b/MC/config/PWGGAJE/ini/GeneratorJE_gapgen11_hook_pp13600GeV.ini new file mode 100644 index 000000000..8a061b68b --- /dev/null +++ b/MC/config/PWGGAJE/ini/GeneratorJE_gapgen11_hook_pp13600GeV.ini @@ -0,0 +1,9 @@ +### jet-jet production with MB Gap 11 +### The external generator derives from GeneratorPythia8. +[GeneratorExternal] +fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/external/generator/generator_pythia8_gaptrigger_jets_hook.C +funcName = getGeneratorPythia8GapGenJE(11,"${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_minbias.cfg","${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_jet.cfg") + +[GeneratorPythia8] +config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_jet.cfg +includePartonEvent=true diff --git a/MC/config/PWGGAJE/ini/GeneratorJE_gapgen7_hook_pp13600GeV.ini b/MC/config/PWGGAJE/ini/GeneratorJE_gapgen7_hook_pp13600GeV.ini new file mode 100644 index 000000000..6e3625e80 --- /dev/null +++ b/MC/config/PWGGAJE/ini/GeneratorJE_gapgen7_hook_pp13600GeV.ini @@ -0,0 +1,9 @@ +### jet-jet production with MB Gap 7 +### The external generator derives from GeneratorPythia8. +[GeneratorExternal] +fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/external/generator/generator_pythia8_gaptrigger_jets_hook.C +funcName = getGeneratorPythia8GapGenJE(7,"${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_minbias.cfg","${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_jet.cfg") + +[GeneratorPythia8] +config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_jet.cfg +includePartonEvent=true diff --git a/MC/config/PWGGAJE/ini/GeneratorJE_gapgen9_hook_pp13600GeV.ini b/MC/config/PWGGAJE/ini/GeneratorJE_gapgen9_hook_pp13600GeV.ini new file mode 100644 index 000000000..eeb94e5e5 --- /dev/null +++ b/MC/config/PWGGAJE/ini/GeneratorJE_gapgen9_hook_pp13600GeV.ini @@ -0,0 +1,9 @@ +### jet-jet production with MB Gap 9 +### The external generator derives from GeneratorPythia8. +[GeneratorExternal] +fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/external/generator/generator_pythia8_gaptrigger_jets_hook.C +funcName = getGeneratorPythia8GapGenJE(9,"${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_minbias.cfg","${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_jet.cfg") + +[GeneratorPythia8] +config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGGAJE/pythia8/generator/pythia8_jet.cfg +includePartonEvent=true From 6cc11e4e871a739706c525cd31d3ef09a8b79672 Mon Sep 17 00:00:00 2001 From: jaimenorman Date: Wed, 21 Oct 2026 15:48:04 +0100 Subject: [PATCH 2/3] add tests --- .../GeneratorJE_gapgen11_hook_pp13600GeV.C | 71 +++++++++++++++++++ .../GeneratorJE_gapgen7_hook_pp13600GeV.C | 71 +++++++++++++++++++ .../GeneratorJE_gapgen9_hook_pp13600GeV.C | 71 +++++++++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C create mode 100644 MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C create mode 100644 MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C diff --git a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C new file mode 100644 index 000000000..168d47983 --- /dev/null +++ b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C @@ -0,0 +1,71 @@ +int External() { + std::string path{"o2sim_Kine.root"}; + + float ratioTrigger = 1./11; // one event triggered out of 5 + + + 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"); + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + o2::dataformats::MCEventHeader *eventHeader = nullptr; + tree->SetBranchAddress("MCEventHeader.", &eventHeader); + + int nEventsMB{}, nEventsJetJet{}; + float sumWeightsMB{}, sumWeightsJetJet{}; + int sumTracks{}; + auto nEvents = tree->GetEntries(); + + for (int i = 0; i < nEvents; i++) { + tree->GetEntry(i); + + // check subgenerator information and event weights + if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) { + bool isValid = false; + int subGeneratorId = eventHeader->getInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid); + if (eventHeader->hasInfo(o2::dataformats::MCInfoKeys::weight)) { + float weight = eventHeader->getInfo(o2::dataformats::MCInfoKeys::weight,isValid); + if (subGeneratorId == 0) { + nEventsMB++; + sumWeightsMB += weight; + } + else if (subGeneratorId == 1) { + nEventsJetJet++; + sumWeightsJetJet += weight; + } + } + } + sumTracks += tracks->size(); + } + + std::cout << "--------------------------------\n"; + std::cout << "# Events: " << nEvents << "\n"; + std::cout << "# MB events: " << nEventsMB << "\n"; + std::cout << " sum of weights for MB events: " << sumWeightsMB << "\n"; + std::cout << "# Jet-jet events " << nEventsJetJet << "\n"; + std::cout << " sum of weights jet-jet events: " << sumWeightsJetJet << "\n"; + std::cout << "# tracks summed over all events (jet-jet + MB): " << sumTracks << "\n"; + + if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.95 || nEventsMB > nEvents * (1 - ratioTrigger) * 1.05) { // we put some tolerance since the number of generated events is small + std::cerr << "Number of generated MB events different than expected\n"; + return 1; + } + if (nEventsJetJet < nEvents * ratioTrigger * 0.95 || nEventsJetJet > nEvents * ratioTrigger * 1.05) { + std::cerr << "Number of jet-jet generated events different than expected\n"; + return 1; + } + if(nEventsMB < sumWeightsMB * 0.95 || nEventsMB > sumWeightsMB * 1.05) { + std::cerr << "Weights of MB events do not = 1 as expected\n"; + return 1; + } + if(sumTracks < 1) { + std::cerr << "No tracks in simulated events\n"; + return 1; + } + return 0; +} diff --git a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C new file mode 100644 index 000000000..4f1123917 --- /dev/null +++ b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C @@ -0,0 +1,71 @@ +int External() { + std::string path{"o2sim_Kine.root"}; + + float ratioTrigger = 1./7; // one event triggered out of 5 + + + 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"); + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + o2::dataformats::MCEventHeader *eventHeader = nullptr; + tree->SetBranchAddress("MCEventHeader.", &eventHeader); + + int nEventsMB{}, nEventsJetJet{}; + float sumWeightsMB{}, sumWeightsJetJet{}; + int sumTracks{}; + auto nEvents = tree->GetEntries(); + + for (int i = 0; i < nEvents; i++) { + tree->GetEntry(i); + + // check subgenerator information and event weights + if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) { + bool isValid = false; + int subGeneratorId = eventHeader->getInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid); + if (eventHeader->hasInfo(o2::dataformats::MCInfoKeys::weight)) { + float weight = eventHeader->getInfo(o2::dataformats::MCInfoKeys::weight,isValid); + if (subGeneratorId == 0) { + nEventsMB++; + sumWeightsMB += weight; + } + else if (subGeneratorId == 1) { + nEventsJetJet++; + sumWeightsJetJet += weight; + } + } + } + sumTracks += tracks->size(); + } + + std::cout << "--------------------------------\n"; + std::cout << "# Events: " << nEvents << "\n"; + std::cout << "# MB events: " << nEventsMB << "\n"; + std::cout << " sum of weights for MB events: " << sumWeightsMB << "\n"; + std::cout << "# Jet-jet events " << nEventsJetJet << "\n"; + std::cout << " sum of weights jet-jet events: " << sumWeightsJetJet << "\n"; + std::cout << "# tracks summed over all events (jet-jet + MB): " << sumTracks << "\n"; + + if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.95 || nEventsMB > nEvents * (1 - ratioTrigger) * 1.05) { // we put some tolerance since the number of generated events is small + std::cerr << "Number of generated MB events different than expected\n"; + return 1; + } + if (nEventsJetJet < nEvents * ratioTrigger * 0.95 || nEventsJetJet > nEvents * ratioTrigger * 1.05) { + std::cerr << "Number of jet-jet generated events different than expected\n"; + return 1; + } + if(nEventsMB < sumWeightsMB * 0.95 || nEventsMB > sumWeightsMB * 1.05) { + std::cerr << "Weights of MB events do not = 1 as expected\n"; + return 1; + } + if(sumTracks < 1) { + std::cerr << "No tracks in simulated events\n"; + return 1; + } + return 0; +} diff --git a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C new file mode 100644 index 000000000..f671d1bfa --- /dev/null +++ b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C @@ -0,0 +1,71 @@ +int External() { + std::string path{"o2sim_Kine.root"}; + + float ratioTrigger = 1./9; // one event triggered out of 5 + + + 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"); + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + o2::dataformats::MCEventHeader *eventHeader = nullptr; + tree->SetBranchAddress("MCEventHeader.", &eventHeader); + + int nEventsMB{}, nEventsJetJet{}; + float sumWeightsMB{}, sumWeightsJetJet{}; + int sumTracks{}; + auto nEvents = tree->GetEntries(); + + for (int i = 0; i < nEvents; i++) { + tree->GetEntry(i); + + // check subgenerator information and event weights + if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) { + bool isValid = false; + int subGeneratorId = eventHeader->getInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid); + if (eventHeader->hasInfo(o2::dataformats::MCInfoKeys::weight)) { + float weight = eventHeader->getInfo(o2::dataformats::MCInfoKeys::weight,isValid); + if (subGeneratorId == 0) { + nEventsMB++; + sumWeightsMB += weight; + } + else if (subGeneratorId == 1) { + nEventsJetJet++; + sumWeightsJetJet += weight; + } + } + } + sumTracks += tracks->size(); + } + + std::cout << "--------------------------------\n"; + std::cout << "# Events: " << nEvents << "\n"; + std::cout << "# MB events: " << nEventsMB << "\n"; + std::cout << " sum of weights for MB events: " << sumWeightsMB << "\n"; + std::cout << "# Jet-jet events " << nEventsJetJet << "\n"; + std::cout << " sum of weights jet-jet events: " << sumWeightsJetJet << "\n"; + std::cout << "# tracks summed over all events (jet-jet + MB): " << sumTracks << "\n"; + + if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.95 || nEventsMB > nEvents * (1 - ratioTrigger) * 1.05) { // we put some tolerance since the number of generated events is small + std::cerr << "Number of generated MB events different than expected\n"; + return 1; + } + if (nEventsJetJet < nEvents * ratioTrigger * 0.95 || nEventsJetJet > nEvents * ratioTrigger * 1.05) { + std::cerr << "Number of jet-jet generated events different than expected\n"; + return 1; + } + if(nEventsMB < sumWeightsMB * 0.95 || nEventsMB > sumWeightsMB * 1.05) { + std::cerr << "Weights of MB events do not = 1 as expected\n"; + return 1; + } + if(sumTracks < 1) { + std::cerr << "No tracks in simulated events\n"; + return 1; + } + return 0; +} From 5bcae772dab5c8685895f93a29d73e9eecc712ab Mon Sep 17 00:00:00 2001 From: jaimenorman Date: Wed, 21 Oct 2026 15:53:08 +0100 Subject: [PATCH 3/3] fix to comments --- .../PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C | 2 +- .../PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C | 2 +- .../PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C index 168d47983..df0ac751f 100644 --- a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C +++ b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen11_hook_pp13600GeV.C @@ -1,7 +1,7 @@ int External() { std::string path{"o2sim_Kine.root"}; - float ratioTrigger = 1./11; // one event triggered out of 5 + float ratioTrigger = 1./11; // one event triggered out of 11 TFile file(path.c_str(), "READ"); diff --git a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C index 4f1123917..3c3ebe1f3 100644 --- a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C +++ b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen7_hook_pp13600GeV.C @@ -1,7 +1,7 @@ int External() { std::string path{"o2sim_Kine.root"}; - float ratioTrigger = 1./7; // one event triggered out of 5 + float ratioTrigger = 1./7; // one event triggered out of 7 TFile file(path.c_str(), "READ"); diff --git a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C index f671d1bfa..37a214de7 100644 --- a/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C +++ b/MC/config/PWGGAJE/ini/tests/GeneratorJE_gapgen9_hook_pp13600GeV.C @@ -1,7 +1,7 @@ int External() { std::string path{"o2sim_Kine.root"}; - float ratioTrigger = 1./9; // one event triggered out of 5 + float ratioTrigger = 1./9; // one event triggered out of 9 TFile file(path.c_str(), "READ");