From 200f5ad80a3315031bfa19650cd57f2cf72e2294 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 23 Nov 2025 16:47:24 +0530 Subject: [PATCH 01/31] =?UTF-8?q?Create=20the=20Non-HFE=E2=80=93enhanced?= =?UTF-8?q?=20dataset.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We will produce a Non-HFE–enhanced dataset by generating Monte Carlo samples with increased π⁰ and η production, to improve the statistical precision of the non-HFE efficiency measurement. --- .../pythia8/generator/pythia8_NonHfe.cfg | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg diff --git a/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg b/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg new file mode 100644 index 000000000..bcaf3b203 --- /dev/null +++ b/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg @@ -0,0 +1,61 @@ +### authors: Rashi Gupta (rashi.gupta@cern.ch) +### authors: Ravindra Singh (ravindra.singh@cern.ch) +### electrons from pi0 and eta enhancement + +### beams +Beams:idA 2212 # proton +Beams:idB 2212 # proton +Beams:eCM 13600. # GeV + +### processes +SoftQCD:inelastic on # all inelastic processes + +### decays +ParticleDecays:limitTau0 on +ParticleDecays:tau0Max 10. + +### switching on Pythia Mode2 +ColourReconnection:mode 1 +ColourReconnection:allowDoubleJunRem off +ColourReconnection:m0 0.3 +ColourReconnection:allowJunctions on +ColourReconnection:junctionCorrection 1.20 +ColourReconnection:timeDilationMode 2 +ColourReconnection:timeDilationPar 0.18 +StringPT:sigma 0.335 +StringZ:aLund 0.36 +StringZ:bLund 0.56 +StringFlav:probQQtoQ 0.078 +StringFlav:ProbStoUD 0.2 +StringFlav:probQQ1toQQ0join 0.0275,0.0275,0.0275,0.0275 +MultiPartonInteractions:pT0Ref 2.15 +BeamRemnants:remnantMode 1 +BeamRemnants:saturation 5 + + +### switch off all decay channels +111:onMode = off +221:onMode = off + +111:onIfAny = 11 # pi0 -> e+ e- gamma +221:onIfAny = 11 # eta -> e+ e- gamma + +# COMPLETELY DISABLE HEAVY-FLAVOUR DECAYS (NO ELECTRONS) +############################################################ +# Charm +411:onMode = off # D+ +421:onMode = off # D0 +431:onMode = off # D_s +4122:onMode = off # Lambda_c +4132:onMode = off # Xi_c0 +4232:onMode = off # Xi_c+ +4332:onMode = off # Omega_c + +# Beauty +511:onMode = off # B0 +521:onMode = off # B+ +531:onMode = off # B_s +5122:onMode = off # Lambda_b +5132:onMode = off # Xi_b- +5232:onMode = off # Xi_b0 +5332:onMode = off # Omega_b From db1cd1039ef2e63e277707ac64b3288b83f8a23f Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 23 Nov 2025 16:49:45 +0530 Subject: [PATCH 02/31] =?UTF-8?q?Create=20the=20Non-HFE=E2=80=93enhanced?= =?UTF-8?q?=20dataset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We will produce a Non-HFE–enhanced dataset by generating Monte Carlo samples with increased π⁰ and η production, to improve the statistical precision of the non-HFE efficiency measurement. --- .../PWGHF/ini/tests/GeneratorHF_Non_Hfe.C | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C new file mode 100644 index 000000000..5ff1d04ee --- /dev/null +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C @@ -0,0 +1,157 @@ +int External() { + std::string path{"o2sim_Kine.root"}; + + int checkPdgDecayElectron = 11; + int checkPdgQuarkOne = 1; // d quark + int checkPdgQuarkTwo = 2; // u quark + int checkPdgQuarkThree = 3; // s quark + float ratioTrigger = 1. / 5; // 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"); + if (!tree) { + std::cerr << "Cannot find tree o2sim in file" << path << "\n"; + return 1; + } + + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + o2::dataformats::MCEventHeader *eventHeader = nullptr; + tree->SetBranchAddress("MCEventHeader.", &eventHeader); + + int nEventsMB{}, nEventsInjOne{}, nEventsInjTwo{}, nEventsInjThree{}; + int nQuarksOne{}, nQuarksTwo{}, nQuarksThree{}; + int nElectrons{}; + auto nEvents = tree->GetEntries(); + + for (int i = 0; i < nEvents; i++) { + tree->GetEntry(i); + + // check subgenerator information + if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) { + bool isValid = false; + int subGeneratorId = eventHeader->getInfo( + o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid); + if (subGeneratorId == 0) { + nEventsMB++; + } else if (subGeneratorId == checkPdgQuarkOne) { + nEventsInjOne++; + } else if (subGeneratorId == checkPdgQuarkTwo) { + nEventsInjTwo++; + } else if (subGeneratorId == checkPdgQuarkThree) { + nEventsInjThree++; + } + } // if event header + + int nelectronsev = 0; + + for (auto &track : *tracks) { + auto pdg = track.GetPdgCode(); + if (std::abs(pdg) == checkPdgQuarkOne) { + nQuarksOne++; + continue; + } + if (std::abs(pdg) == checkPdgQuarkTwo) { + nQuarksTwo++; + continue; + } + if (std::abs(pdg) == checkPdgQuarkThree) { + nQuarksThree++; + continue; + } + + + auto y = track.GetRapidity(); + if (std::abs(pdg) == checkPdgDecayElectron) { + int igmother = track.getMotherTrackId(); + auto gmTrack = (*tracks)[igmother]; + int gmpdg = gmTrack.GetPdgCode(); + if (int(std::abs(gmpdg) / 100.) == 1 || + int(std::abs(gmpdg) / 1000.) == 1 || + int(std::abs(gmpdg) / 100.) == 2 || + int(std::abs(gmpdg) / 1000.) == 2 || + int(std::abs(gmpdg) / 100.) == 3 || + int(std::abs(gmpdg) / 1000.) == 3) { + nElectrons++; + nelectronsev++; + } // gmpdg + } // pdgdecay + } // loop track + // std::cout << "#electrons per event: " << nelectronsev << "\n"; + } + + std::cout << "--------------------------------\n"; + std::cout << "# Events: " << nEvents << "\n"; + std::cout << "# MB events: " << nEventsMB << "\n"; + std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkOne) + << nEventsInjOne << "\n"; + std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkTwo) + << nEventsInjTwo << "\n"; + std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkThree) + << nEventsInjThree << "\n"; + std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkOne) << nQuarksOne + << "\n"; + std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkTwo) << nQuarksTwo + << "\n"; + std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkThree) << nQuarksThree + << "\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 (nEventsInjOne < nEvents * ratioTrigger * 0.5 * 0.95 || + nEventsInjOne > nEvents * ratioTrigger * 0.5 * 1.05) { + std::cerr << "Number of generated events injected with " << checkPdgQuarkOne + << " different than expected\n"; + return 1; + } + if (nEventsInjTwo < nEvents * ratioTrigger * 0.5 * 0.95 || + nEventsInjTwo > nEvents * ratioTrigger * 0.5 * 1.05) { + std::cerr << "Number of generated events injected with " << checkPdgQuarkTwo + << " different than expected\n"; + return 1; + } + if (nEventsInjThree < nEvents * ratioTrigger * 0.5 * 0.95 || + nEventsInjThree > nEvents * ratioTrigger * 0.5 * 1.05) { + std::cerr << "Number of generated events injected with " << checkPdgQuarkThree + << " different than expected\n"; + return 1; + } + if (nQuarksOne < + nEvents * + ratioTrigger) { // we expect anyway more because the same quark is + // repeated several time, after each gluon radiation + std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkOne + << " lower than expected\n"; + return 1; + } + if (nQuarksTwo < + nEvents * + ratioTrigger) { // we expect anyway more because the same quark is + // repeated several time, after each gluon radiation + std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkTwo + << " lower than expected\n"; + return 1; + } + if (nQuarksThree < + nEvents * + ratioTrigger) { // we expect anyway more because the same quark is + // repeated several time, after each gluon radiation + std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkThree + << " lower than expected\n"; + return 1; + } + std::cout << "#electrons: " << nElectrons << "\n"; + + return 0; +} // external From abd70d4db8dd669694e628773a8f365f1d5668ca Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 23 Nov 2025 16:51:32 +0530 Subject: [PATCH 03/31] =?UTF-8?q?Create=20the=20Non-HFE=E2=80=93enhanced?= =?UTF-8?q?=20dataset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We will produce a Non-HFE–enhanced dataset by generating Monte Carlo samples with increased π⁰ and η production, to improve the statistical precision of the non-HFE efficiency measurement. --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini new file mode 100644 index 000000000..bf5dd5a65 --- /dev/null +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini @@ -0,0 +1,8 @@ +### The external generator derives from GeneratorPythia8. +[GeneratorExternal] +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C +funcName=GeneratorPythia8GapTriggeredCharmAndBeauty(5, -1.5, 1.5, -1.0, 1.0, {11}) + +[GeneratorPythia8] +config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg +includePartonEvent=true From 41fabe09ba64464e8aec1afec580911169949f7e Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:50:27 +0530 Subject: [PATCH 04/31] Update and rename GeneratorHF_Non_Hfe_enhance.ini to GeneratorHF_Non_Hfe.ini Rename File and add nonHfe.c file --- ...{GeneratorHF_Non_Hfe_enhance.ini => GeneratorHF_Non_Hfe.ini} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename MC/config/PWGHF/ini/{GeneratorHF_Non_Hfe_enhance.ini => GeneratorHF_Non_Hfe.ini} (88%) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini similarity index 88% rename from MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini rename to MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index bf5dd5a65..1c5e4ea83 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe_enhance.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,6 +1,6 @@ ### The external generator derives from GeneratorPythia8. [GeneratorExternal] -fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C funcName=GeneratorPythia8GapTriggeredCharmAndBeauty(5, -1.5, 1.5, -1.0, 1.0, {11}) [GeneratorPythia8] From fa2d14d033f35342bc2190eddb0cb5d5f4a066f1 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:00:03 +0530 Subject: [PATCH 05/31] Create generator_pythia8_gaptriggered_nonhfe.C Add generator_pythia8_gaptriggered_nonhfe.C file for enance pion and eta --- .../generator_pythia8_gaptriggered_nonhfe.C | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C new file mode 100644 index 000000000..d54ff8308 --- /dev/null +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -0,0 +1,218 @@ +#include "FairGenerator.h" + +#include "TDatabasePDG.h" +#include "TRandom.h" + +#include "Generators/GeneratorPythia8.h" +#include "Generators/GeneratorPythia8Param.h" +#include "Pythia8/Pythia.h" +#include + +#include +#include + +using namespace Pythia8; + +class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia8 +{ + public: + /// default constructor + GeneratorPythia8GapTriggeredPionEta() = default; + GeneratorPythia8GapTriggeredPionEta(int inputTriggerRatio = 5, std::vector quarkPdgList = {}, std::vector hadronPdgList = {}) + { + mGeneratedEvents = 0; + mInverseTriggerRatio = inputTriggerRatio; + mQuarkRapidityMin = -1.5; + mQuarkRapidityMax = 1.5; + mHadRapidityMin = -1.5; + mHadRapidityMax = 1.5; + + mQuarkPdg = 0; + mHadronPdg = 0; + mQuarkPdgList = quarkPdgList; + mHadronPdgList = hadronPdgList; + Print(); + } + + /// Destructor + GeneratorPythia8GapTriggeredPionEta() = default; + /// Print the input + void Print() + { + LOG(info) << "********** GeneratorPythia8GapTriggeredHF configuration dump **********"; + LOG(info) << Form("* Trigger ratio: %d", mInverseTriggerRatio); + LOG(info) << Form("* Quark pdg: %d", mQuarkPdg); + LOG(info) << Form("* Quark rapidity: %f - %f", mQuarkRapidityMin, mQuarkRapidityMax); + LOG(info) << Form("* Hadron pdg: %d", mHadronPdg); + LOG(info) << Form("* Hadron rapidity: %f - %f", mHadRapidityMin, mHadRapidityMax); + LOG(info) << Form("* Quark pdg list: "); + for (auto pdg : mQuarkPdgList) { + LOG(info) << Form("* %d ", pdg); + } + LOG(info) << Form("* Hadron pdg list: "); + for (auto pdg : mHadronPdgList) { + LOG(info) << Form("* %d ", pdg); + } + LOG(info) << "***********************************************************************"; + } + + bool Init() override + { + addSubGenerator(0, "Minimum bias"); + addSubGenerator(1, "Down injected"); + addSubGenerator(2, "Up injected"); + addSubGenerator(3, "Strange injected"); + + return o2::eventgen::GeneratorPythia8::Init(); + } + void setQuarkRapidity(float yMin, float yMax) + { + mQuarkRapidityMin = yMin; + mQuarkRapidityMax = yMax; + }; + void setHadronRapidity(float yMin, float yMax) + { + mHadRapidityMin = yMin; + mHadRapidityMax = yMax; + }; + void setUsedSeed(unsigned int seed) + { + mUsedSeed = seed; + }; + unsigned int getUsedSeed() const + { + return mUsedSeed; + }; + + protected: + //__________________________________________________________________ + bool generateEvent() override + { + + // Simple straightforward check to alternate generators + if (mGeneratedEvents % mInverseTriggerRatio == 0) { + int nInjectedEvents = mGeneratedEvents / mInverseTriggerRatio; + // Alternate quarks if enabled (with the same ratio) + if (mQuarkPdgList.size() >= 1) { + int iQuark = nInjectedEvents % mQuarkPdgList.size(); + mQuarkPdg = mQuarkPdgList[iQuark]; + LOG(debug) << "SELECTED quark: " << mQuarkPdgList[iQuark]; + } + // Alternate hadrons if enabled (with the same ratio) + if (mHadronPdgList.size() >= 1) { + int iHadron = (nInjectedEvents / std::max(mQuarkPdgList.size(), 1ul)) % mHadronPdgList.size(); + mHadronPdg = mHadronPdgList[iHadron]; + LOG(debug) << "SELECTED hadron: " << mHadronPdgList[iHadron]; + } + + // Generate event of interest + bool genOk = false; + while (!genOk) { + if (GeneratorPythia8::generateEvent()) { + genOk = selectEvent(); + } + } + notifySubGenerator(mQuarkPdg); + } else { + // Generate minimum-bias event + bool genOk = false; + while (!genOk) { + genOk = GeneratorPythia8::generateEvent(); + } + notifySubGenerator(0); + } + + mGeneratedEvents++; + + return true; + } + bool selectEvent() + { + + bool isGoodAtPartonLevel{mQuarkPdgList.size() == 0}; + bool isGoodAtHadronLevel{mHadronPdgList.size() == 0}; + + for (auto iPart{0}; iPart < mPythia.event.size(); ++iPart) { + // search for Q-Qbar mother with at least one Q in rapidity window + if (!isGoodAtPartonLevel) { + auto daughterList = mPythia.event[iPart].daughterList(); + bool hasQ = false, hasQbar = false, atSelectedY = false; + for (auto iDau : daughterList) { + if (mPythia.event[iDau].id() == mQuarkPdg) { + hasQ = true; + if ((mPythia.event[iDau].y() > mQuarkRapidityMin) && (mPythia.event[iDau].y() < mQuarkRapidityMax)) { + atSelectedY = true; + } + } + if (mPythia.event[iDau].id() == -mQuarkPdg) { + hasQbar = true; + if ((mPythia.event[iDau].y() > mQuarkRapidityMin) && (mPythia.event[iDau].y() < mQuarkRapidityMax)) { + atSelectedY = true; + } + } + } + if (hasQ && hasQbar && atSelectedY) { + isGoodAtPartonLevel = true; + } + } + // search for hadron in rapidity window + if (!isGoodAtHadronLevel) { + int id = std::abs(mPythia.event[iPart].id()); + float rap = mPythia.event[iPart].y(); + if (id == mHadronPdg && rap > mHadRapidityMin && rap < mHadRapidityMax) { + isGoodAtHadronLevel = true; + } + } + // we send the trigger immediately (if there are no particles to replace, that can be different from the trigger ones) + if (isGoodAtPartonLevel && isGoodAtHadronLevel) { + LOG(debug) << "EVENT SELECTED: Found particle " << mPythia.event[iPart].id() << " at rapidity " << mPythia.event[iPart].y() << "\n"; + return true; + } + } + // we send the trigger + if (isGoodAtPartonLevel && isGoodAtHadronLevel) { + return true; + } + + return false; + }; + + private: + // Interface to override import particles + Pythia8::Event mOutputEvent; + + // Properties of selection + int mQuarkPdg; + float mQuarkRapidityMin; + float mQuarkRapidityMax; + int mHadronPdg; + float mHadRapidityMin; + float mHadRapidityMax; + unsigned int mUsedSeed; + + // Control gap-triggering + unsigned long long mGeneratedEvents; + int mInverseTriggerRatio; + + // Control alternate trigger on charm and beauty quarks + std::vector mQuarkPdgList = {}; + + // Control alternate trigger on different hadrons + std::vector mHadronPdgList = {}; +}; +// Predefined generators: +// Predefined generators: +// Charm-enriched +FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}, std::vector> partPdgToReplaceList = {}, std::vector freqReplaceList = {}) +{ + auto myGen = new GeneratorPythia8GapTriggeredHF(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList, partPdgToReplaceList, freqReplaceList); + auto seed = (gRandom->TRandom::GetSeed() % 900000000); + myGen->setUsedSeed(seed); + myGen->readString("Random:setSeed on"); + myGen->readString("Random:seed " + std::to_string(seed)); + myGen->setQuarkRapidity(yQuarkMin, yQuarkMax); + if (hadronPdgList.size() != 0) { + myGen->setHadronRapidity(yHadronMin, yHadronMax); + } + return myGen; +} From 64baf3340430bc1c220baca445a22ea863db0ab6 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sat, 10 Jan 2026 15:38:29 +0530 Subject: [PATCH 06/31] Update generator_pythia8_gaptriggered_nonhfe.C --- .../external/generator/generator_pythia8_gaptriggered_nonhfe.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index d54ff8308..ee6693a28 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -35,7 +35,7 @@ class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia } /// Destructor - GeneratorPythia8GapTriggeredPionEta() = default; + ~GeneratorPythia8GapTriggeredPionEta() = default; /// Print the input void Print() { From c31e83c498fd1caa94844b6f63a4f337a2adbd5d Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sat, 10 Jan 2026 15:40:41 +0530 Subject: [PATCH 07/31] remove build error --- .../external/generator/generator_pythia8_gaptriggered_nonhfe.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index ee6693a28..61977e15b 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -205,7 +205,7 @@ class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia // Charm-enriched FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}, std::vector> partPdgToReplaceList = {}, std::vector freqReplaceList = {}) { - auto myGen = new GeneratorPythia8GapTriggeredHF(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList, partPdgToReplaceList, freqReplaceList); + auto myGen = new GeneratorPythia8GapTriggeredPionEta(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList, partPdgToReplaceList, freqReplaceList); auto seed = (gRandom->TRandom::GetSeed() % 900000000); myGen->setUsedSeed(seed); myGen->readString("Random:setSeed on"); From 71e837aa9db660b543440236d31bd6e3a53c9bcd Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 04:49:40 +0530 Subject: [PATCH 08/31] Update generator_pythia8_gaptriggered_nonhfe.C --- .../generator/generator_pythia8_gaptriggered_nonhfe.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index 61977e15b..662821c7b 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -203,9 +203,9 @@ class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia // Predefined generators: // Predefined generators: // Charm-enriched -FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}, std::vector> partPdgToReplaceList = {}, std::vector freqReplaceList = {}) +FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}) { - auto myGen = new GeneratorPythia8GapTriggeredPionEta(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList, partPdgToReplaceList, freqReplaceList); + auto myGen = new GeneratorPythia8GapTriggeredPionEta(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList); auto seed = (gRandom->TRandom::GetSeed() % 900000000); myGen->setUsedSeed(seed); myGen->readString("Random:setSeed on"); From c2bdacff04d6f26f549c0f08c24eb427fd8e50fe Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 08:00:35 +0530 Subject: [PATCH 09/31] Correct name --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index 1c5e4ea83..84b069437 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,7 +1,7 @@ ### The external generator derives from GeneratorPythia8. [GeneratorExternal] fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C -funcName=GeneratorPythia8GapTriggeredCharmAndBeauty(5, -1.5, 1.5, -1.0, 1.0, {11}) +funcName=GeneratorPythia8GapTriggeredPionAndEta(5, -1.5, 1.5, -1.0, 1.0, {11}) [GeneratorPythia8] config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg From 738d26300b89590e4ccb051c33d6766d4760dc7e Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 08:00:50 +0530 Subject: [PATCH 10/31] correct name --- .../external/generator/generator_pythia8_gaptriggered_nonhfe.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index 662821c7b..1d374d150 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -205,7 +205,7 @@ class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia // Charm-enriched FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}) { - auto myGen = new GeneratorPythia8GapTriggeredPionEta(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList); + auto myGen = new GeneratorPythia8GapTriggeredNonHF(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList); auto seed = (gRandom->TRandom::GetSeed() % 900000000); myGen->setUsedSeed(seed); myGen->readString("Random:setSeed on"); From 9f8a12b154db2be1614536a16d9ce9884ef761b2 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 08:19:21 +0530 Subject: [PATCH 11/31] remove build error --- .../generator/generator_pythia8_gaptriggered_nonhfe.C | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index 1d374d150..c69645159 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -13,12 +13,12 @@ using namespace Pythia8; -class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia8 +class GeneratorPythia8GapTriggeredNonHF : public o2::eventgen::GeneratorPythia8 { public: /// default constructor - GeneratorPythia8GapTriggeredPionEta() = default; - GeneratorPythia8GapTriggeredPionEta(int inputTriggerRatio = 5, std::vector quarkPdgList = {}, std::vector hadronPdgList = {}) + GeneratorPythia8GapTriggeredNonHF() = default; + GeneratorPythia8GapTriggeredNonHF(int inputTriggerRatio = 5, std::vector quarkPdgList = {}, std::vector hadronPdgList = {}) { mGeneratedEvents = 0; mInverseTriggerRatio = inputTriggerRatio; @@ -35,7 +35,7 @@ class GeneratorPythia8GapTriggeredPionEta : public o2::eventgen::GeneratorPythia } /// Destructor - ~GeneratorPythia8GapTriggeredPionEta() = default; + ~GeneratorPythia8GapTriggeredNonHF() = default; /// Print the input void Print() { From b5239c16bbe1c81e2cd703157f92e4150a468cce Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 09:46:06 +0530 Subject: [PATCH 12/31] remove e and add pion , eta ID --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index 84b069437..ad9721365 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,7 +1,7 @@ ### The external generator derives from GeneratorPythia8. [GeneratorExternal] fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C -funcName=GeneratorPythia8GapTriggeredPionAndEta(5, -1.5, 1.5, -1.0, 1.0, {11}) +funcName=GeneratorPythia8GapTriggeredPionAndEta(5, -1.5, 1.5, -1.0, 1.0, {111, 221}) [GeneratorPythia8] config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg From 1ae85430f653c2923eb5fd4eb8f09a69ce8fba7f Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 15:08:02 +0530 Subject: [PATCH 13/31] Remove build error --- .../external/generator/generator_pythia8_gaptriggered_nonhfe.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index c69645159..78cdf38eb 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -205,7 +205,7 @@ class GeneratorPythia8GapTriggeredNonHF : public o2::eventgen::GeneratorPythia8 // Charm-enriched FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}) { - auto myGen = new GeneratorPythia8GapTriggeredNonHF(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList); + auto myGen = new GeneratorPythia8GapTriggeredNonHF(inputTriggerRatio, std::vector{}, hadronPdgList); auto seed = (gRandom->TRandom::GetSeed() % 900000000); myGen->setUsedSeed(seed); myGen->readString("Random:setSeed on"); From 35ccc9a2240b12261be72dcce420ec0db0b16dfc Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Sun, 11 Jan 2026 15:51:15 +0530 Subject: [PATCH 14/31] Update generator_pythia8_gaptriggered_nonhfe.C --- .../external/generator/generator_pythia8_gaptriggered_nonhfe.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C index 78cdf38eb..c69645159 100644 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C @@ -205,7 +205,7 @@ class GeneratorPythia8GapTriggeredNonHF : public o2::eventgen::GeneratorPythia8 // Charm-enriched FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}) { - auto myGen = new GeneratorPythia8GapTriggeredNonHF(inputTriggerRatio, std::vector{}, hadronPdgList); + auto myGen = new GeneratorPythia8GapTriggeredNonHF(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList); auto seed = (gRandom->TRandom::GetSeed() % 900000000); myGen->setUsedSeed(seed); myGen->readString("Random:setSeed on"); From 99fdf6ab23b65822cec506480093c73b864a21b0 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 12 Jan 2026 15:05:33 +0530 Subject: [PATCH 15/31] Update GeneratorHF_Non_Hfe.ini --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index ad9721365..84b069437 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,7 +1,7 @@ ### The external generator derives from GeneratorPythia8. [GeneratorExternal] fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C -funcName=GeneratorPythia8GapTriggeredPionAndEta(5, -1.5, 1.5, -1.0, 1.0, {111, 221}) +funcName=GeneratorPythia8GapTriggeredPionAndEta(5, -1.5, 1.5, -1.0, 1.0, {11}) [GeneratorPythia8] config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg From 11f2902615a8174d67276d707f4009196b1e205b Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Thu, 15 Jan 2026 21:54:48 +0530 Subject: [PATCH 16/31] Replace 1/2 to 1/3 --- MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C index 5ff1d04ee..5e8e71b3c 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C @@ -109,20 +109,21 @@ int External() { std::cerr << "Number of generated MB events different than expected\n"; return 1; } - if (nEventsInjOne < nEvents * ratioTrigger * 0.5 * 0.95 || - nEventsInjOne > nEvents * ratioTrigger * 0.5 * 1.05) { +constexpr float nInjectedSpecies = 3.f; + if (nEventsInjOne < nEvents * ratioTrigger * 1/nInjectedSpecies * 0.95 || + nEventsInjOne > nEvents * ratioTrigger * 1/nInjectedSpecies * 1.05) { std::cerr << "Number of generated events injected with " << checkPdgQuarkOne << " different than expected\n"; return 1; } - if (nEventsInjTwo < nEvents * ratioTrigger * 0.5 * 0.95 || - nEventsInjTwo > nEvents * ratioTrigger * 0.5 * 1.05) { + if (nEventsInjTwo < nEvents * ratioTrigger * 1/nInjectedSpecies * 0.95 || + nEventsInjTwo > nEvents * ratioTrigger * 1/nInjectedSpecies * 1.05) { std::cerr << "Number of generated events injected with " << checkPdgQuarkTwo << " different than expected\n"; return 1; } - if (nEventsInjThree < nEvents * ratioTrigger * 0.5 * 0.95 || - nEventsInjThree > nEvents * ratioTrigger * 0.5 * 1.05) { + if (nEventsInjThree < nEvents * ratioTrigger * 1/nInjectedSpecies * 0.95 || + nEventsInjThree > nEvents * ratioTrigger * 1/nInjectedSpecies * 1.05) { std::cerr << "Number of generated events injected with " << checkPdgQuarkThree << " different than expected\n"; return 1; From 20a6450930c2a24be5b9d9f2241b977c79a37356 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Fri, 16 Jan 2026 18:58:04 +0530 Subject: [PATCH 17/31] ncrease the tolerance to 10% --- MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C index 5e8e71b3c..d8f62cfc1 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C @@ -102,28 +102,28 @@ int External() { std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkThree) << nQuarksThree << "\n"; - if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.95 || + if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.90 || nEventsMB > nEvents * (1 - ratioTrigger) * - 1.05) { // we put some tolerance since the number of + 1.1) { // 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; } constexpr float nInjectedSpecies = 3.f; - if (nEventsInjOne < nEvents * ratioTrigger * 1/nInjectedSpecies * 0.95 || - nEventsInjOne > nEvents * ratioTrigger * 1/nInjectedSpecies * 1.05) { + if (nEventsInjOne < nEvents * ratioTrigger * 1.0/nInjectedSpecies * 0.90 || + nEventsInjOne > nEvents * ratioTrigger * 1.0/nInjectedSpecies * 1.1) { std::cerr << "Number of generated events injected with " << checkPdgQuarkOne << " different than expected\n"; return 1; } - if (nEventsInjTwo < nEvents * ratioTrigger * 1/nInjectedSpecies * 0.95 || - nEventsInjTwo > nEvents * ratioTrigger * 1/nInjectedSpecies * 1.05) { + if (nEventsInjTwo < nEvents * ratioTrigger * 1.0/nInjectedSpecies * 0.90 || + nEventsInjTwo > nEvents * ratioTrigger * 1.0/nInjectedSpecies * 1.1) { std::cerr << "Number of generated events injected with " << checkPdgQuarkTwo << " different than expected\n"; return 1; } - if (nEventsInjThree < nEvents * ratioTrigger * 1/nInjectedSpecies * 0.95 || - nEventsInjThree > nEvents * ratioTrigger * 1/nInjectedSpecies * 1.05) { + if (nEventsInjThree < nEvents * ratioTrigger * 1.0/nInjectedSpecies * 0.90 || + nEventsInjThree > nEvents * ratioTrigger * 1.0/nInjectedSpecies * 1.1) { std::cerr << "Number of generated events injected with " << checkPdgQuarkThree << " different than expected\n"; return 1; From 310f1a6b27a9b3373590aefeb2700c30d6332df8 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:40:49 +0530 Subject: [PATCH 18/31] Update and rename MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C to MC/config/PWGHF/trigger/selectNonHfe.C remove gaptrigger and add trigger selection --- .../generator_pythia8_gaptriggered_nonhfe.C | 218 ------------------ MC/config/PWGHF/trigger/selectNonHfe.C | 39 ++++ 2 files changed, 39 insertions(+), 218 deletions(-) delete mode 100644 MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C create mode 100644 MC/config/PWGHF/trigger/selectNonHfe.C diff --git a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C b/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C deleted file mode 100644 index c69645159..000000000 --- a/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C +++ /dev/null @@ -1,218 +0,0 @@ -#include "FairGenerator.h" - -#include "TDatabasePDG.h" -#include "TRandom.h" - -#include "Generators/GeneratorPythia8.h" -#include "Generators/GeneratorPythia8Param.h" -#include "Pythia8/Pythia.h" -#include - -#include -#include - -using namespace Pythia8; - -class GeneratorPythia8GapTriggeredNonHF : public o2::eventgen::GeneratorPythia8 -{ - public: - /// default constructor - GeneratorPythia8GapTriggeredNonHF() = default; - GeneratorPythia8GapTriggeredNonHF(int inputTriggerRatio = 5, std::vector quarkPdgList = {}, std::vector hadronPdgList = {}) - { - mGeneratedEvents = 0; - mInverseTriggerRatio = inputTriggerRatio; - mQuarkRapidityMin = -1.5; - mQuarkRapidityMax = 1.5; - mHadRapidityMin = -1.5; - mHadRapidityMax = 1.5; - - mQuarkPdg = 0; - mHadronPdg = 0; - mQuarkPdgList = quarkPdgList; - mHadronPdgList = hadronPdgList; - Print(); - } - - /// Destructor - ~GeneratorPythia8GapTriggeredNonHF() = default; - /// Print the input - void Print() - { - LOG(info) << "********** GeneratorPythia8GapTriggeredHF configuration dump **********"; - LOG(info) << Form("* Trigger ratio: %d", mInverseTriggerRatio); - LOG(info) << Form("* Quark pdg: %d", mQuarkPdg); - LOG(info) << Form("* Quark rapidity: %f - %f", mQuarkRapidityMin, mQuarkRapidityMax); - LOG(info) << Form("* Hadron pdg: %d", mHadronPdg); - LOG(info) << Form("* Hadron rapidity: %f - %f", mHadRapidityMin, mHadRapidityMax); - LOG(info) << Form("* Quark pdg list: "); - for (auto pdg : mQuarkPdgList) { - LOG(info) << Form("* %d ", pdg); - } - LOG(info) << Form("* Hadron pdg list: "); - for (auto pdg : mHadronPdgList) { - LOG(info) << Form("* %d ", pdg); - } - LOG(info) << "***********************************************************************"; - } - - bool Init() override - { - addSubGenerator(0, "Minimum bias"); - addSubGenerator(1, "Down injected"); - addSubGenerator(2, "Up injected"); - addSubGenerator(3, "Strange injected"); - - return o2::eventgen::GeneratorPythia8::Init(); - } - void setQuarkRapidity(float yMin, float yMax) - { - mQuarkRapidityMin = yMin; - mQuarkRapidityMax = yMax; - }; - void setHadronRapidity(float yMin, float yMax) - { - mHadRapidityMin = yMin; - mHadRapidityMax = yMax; - }; - void setUsedSeed(unsigned int seed) - { - mUsedSeed = seed; - }; - unsigned int getUsedSeed() const - { - return mUsedSeed; - }; - - protected: - //__________________________________________________________________ - bool generateEvent() override - { - - // Simple straightforward check to alternate generators - if (mGeneratedEvents % mInverseTriggerRatio == 0) { - int nInjectedEvents = mGeneratedEvents / mInverseTriggerRatio; - // Alternate quarks if enabled (with the same ratio) - if (mQuarkPdgList.size() >= 1) { - int iQuark = nInjectedEvents % mQuarkPdgList.size(); - mQuarkPdg = mQuarkPdgList[iQuark]; - LOG(debug) << "SELECTED quark: " << mQuarkPdgList[iQuark]; - } - // Alternate hadrons if enabled (with the same ratio) - if (mHadronPdgList.size() >= 1) { - int iHadron = (nInjectedEvents / std::max(mQuarkPdgList.size(), 1ul)) % mHadronPdgList.size(); - mHadronPdg = mHadronPdgList[iHadron]; - LOG(debug) << "SELECTED hadron: " << mHadronPdgList[iHadron]; - } - - // Generate event of interest - bool genOk = false; - while (!genOk) { - if (GeneratorPythia8::generateEvent()) { - genOk = selectEvent(); - } - } - notifySubGenerator(mQuarkPdg); - } else { - // Generate minimum-bias event - bool genOk = false; - while (!genOk) { - genOk = GeneratorPythia8::generateEvent(); - } - notifySubGenerator(0); - } - - mGeneratedEvents++; - - return true; - } - bool selectEvent() - { - - bool isGoodAtPartonLevel{mQuarkPdgList.size() == 0}; - bool isGoodAtHadronLevel{mHadronPdgList.size() == 0}; - - for (auto iPart{0}; iPart < mPythia.event.size(); ++iPart) { - // search for Q-Qbar mother with at least one Q in rapidity window - if (!isGoodAtPartonLevel) { - auto daughterList = mPythia.event[iPart].daughterList(); - bool hasQ = false, hasQbar = false, atSelectedY = false; - for (auto iDau : daughterList) { - if (mPythia.event[iDau].id() == mQuarkPdg) { - hasQ = true; - if ((mPythia.event[iDau].y() > mQuarkRapidityMin) && (mPythia.event[iDau].y() < mQuarkRapidityMax)) { - atSelectedY = true; - } - } - if (mPythia.event[iDau].id() == -mQuarkPdg) { - hasQbar = true; - if ((mPythia.event[iDau].y() > mQuarkRapidityMin) && (mPythia.event[iDau].y() < mQuarkRapidityMax)) { - atSelectedY = true; - } - } - } - if (hasQ && hasQbar && atSelectedY) { - isGoodAtPartonLevel = true; - } - } - // search for hadron in rapidity window - if (!isGoodAtHadronLevel) { - int id = std::abs(mPythia.event[iPart].id()); - float rap = mPythia.event[iPart].y(); - if (id == mHadronPdg && rap > mHadRapidityMin && rap < mHadRapidityMax) { - isGoodAtHadronLevel = true; - } - } - // we send the trigger immediately (if there are no particles to replace, that can be different from the trigger ones) - if (isGoodAtPartonLevel && isGoodAtHadronLevel) { - LOG(debug) << "EVENT SELECTED: Found particle " << mPythia.event[iPart].id() << " at rapidity " << mPythia.event[iPart].y() << "\n"; - return true; - } - } - // we send the trigger - if (isGoodAtPartonLevel && isGoodAtHadronLevel) { - return true; - } - - return false; - }; - - private: - // Interface to override import particles - Pythia8::Event mOutputEvent; - - // Properties of selection - int mQuarkPdg; - float mQuarkRapidityMin; - float mQuarkRapidityMax; - int mHadronPdg; - float mHadRapidityMin; - float mHadRapidityMax; - unsigned int mUsedSeed; - - // Control gap-triggering - unsigned long long mGeneratedEvents; - int mInverseTriggerRatio; - - // Control alternate trigger on charm and beauty quarks - std::vector mQuarkPdgList = {}; - - // Control alternate trigger on different hadrons - std::vector mHadronPdgList = {}; -}; -// Predefined generators: -// Predefined generators: -// Charm-enriched -FairGenerator* GeneratorPythia8GapTriggeredPionAndEta(int inputTriggerRatio, float yQuarkMin = -1.5, float yQuarkMax = 1.5, float yHadronMin = -1.5, float yHadronMax = 1.5, std::vector hadronPdgList = {}) -{ - auto myGen = new GeneratorPythia8GapTriggeredNonHF(inputTriggerRatio, std::vector{1, 2, 3}, hadronPdgList); - auto seed = (gRandom->TRandom::GetSeed() % 900000000); - myGen->setUsedSeed(seed); - myGen->readString("Random:setSeed on"); - myGen->readString("Random:seed " + std::to_string(seed)); - myGen->setQuarkRapidity(yQuarkMin, yQuarkMax); - if (hadronPdgList.size() != 0) { - myGen->setHadronRapidity(yHadronMin, yHadronMax); - } - return myGen; -} diff --git a/MC/config/PWGHF/trigger/selectNonHfe.C b/MC/config/PWGHF/trigger/selectNonHfe.C new file mode 100644 index 000000000..3d5f19fc7 --- /dev/null +++ b/MC/config/PWGHF/trigger/selectNonHfe.C @@ -0,0 +1,39 @@ +#include +#include "Generators/Trigger.h" +#include +#include + +///============================================================================ + +/// Select π⁰ and η within a given rapidity window for enhancement +/// pdgPartForAccCut: PDG of the particle to select (111=π⁰, 221=η) +/// minNb: minimum number of such particles per event for enhancement + +//// authors: Rashi Gupta (rashi.gupta@cern.ch) +/// authors: Ravindra Singh (ravindra.singh@cern.ch) +/// ============================================================================ + + + + +o2::eventgen::Trigger selectPionEtaWithinAcc(Int_t pdgPartForAccCut = 111; 221, double rapidityMin = -1.5, double rapidityMax = 1.5, int minNb = 1) +{ + return [pdgPartForAccCut, rapidityMin, rapidityMax, minNb](const std::vector& particles) -> bool { + int count = 0; + for (const auto& particle : particles) { + Int_t pdg = TMath::Abs(particle.GetPdgCode()); + if (pdg == pdgPartForAccCut) { // select π⁰ (111) or η (221) + double y = particle.Y(); + if (y >= rapidityMin && y <= rapidityMax) { + count++; + } + } + } + + // Only accept events with at least minNb π⁰/η + if (count >= minNb) + return kTRUE; + else + return kFALSE; + }; +} From ead9fb3fb44704c18be8fd6f7c514e8b96e27640 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:42:50 +0530 Subject: [PATCH 19/31] Update GeneratorHF_Non_Hfe.ini Change .c file --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index 84b069437..39a5075e3 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,8 +1,11 @@ ### The external generator derives from GeneratorPythia8. [GeneratorExternal] -fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_nonhfe.C -funcName=GeneratorPythia8GapTriggeredPionAndEta(5, -1.5, 1.5, -1.0, 1.0, {11}) +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C + +# Function name and its arguments +# Arguments: pdgPartForAccCut, rapidityMin, rapidityMax, minNb +funcName=selectPionEtaWithinAcc(111, -1.5, 1.5, 1) [GeneratorPythia8] config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg includePartonEvent=true From 24328aa68fdc295626deba10e1ed12233c0dbb43 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:44:34 +0530 Subject: [PATCH 20/31] Update pythia8_NonHfe.cfg Remove Heavy flavour decay off --- .../pythia8/generator/pythia8_NonHfe.cfg | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg b/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg index bcaf3b203..e4fe0e6f2 100644 --- a/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg +++ b/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg @@ -39,23 +39,3 @@ BeamRemnants:saturation 5 111:onIfAny = 11 # pi0 -> e+ e- gamma 221:onIfAny = 11 # eta -> e+ e- gamma - -# COMPLETELY DISABLE HEAVY-FLAVOUR DECAYS (NO ELECTRONS) -############################################################ -# Charm -411:onMode = off # D+ -421:onMode = off # D0 -431:onMode = off # D_s -4122:onMode = off # Lambda_c -4132:onMode = off # Xi_c0 -4232:onMode = off # Xi_c+ -4332:onMode = off # Omega_c - -# Beauty -511:onMode = off # B0 -521:onMode = off # B+ -531:onMode = off # B_s -5122:onMode = off # Lambda_b -5132:onMode = off # Xi_b- -5232:onMode = off # Xi_b0 -5332:onMode = off # Omega_b From eca0412cf690098106f5dd11c78b9e003722ba8f Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:45:48 +0530 Subject: [PATCH 21/31] Update GeneratorHF_Non_Hfe.C Remove quark level information --- .../PWGHF/ini/tests/GeneratorHF_Non_Hfe.C | 200 +++++------------- 1 file changed, 55 insertions(+), 145 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C index d8f62cfc1..2ff0aad73 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_Non_Hfe.C @@ -1,158 +1,68 @@ -int External() { - std::string path{"o2sim_Kine.root"}; - - int checkPdgDecayElectron = 11; - int checkPdgQuarkOne = 1; // d quark - int checkPdgQuarkTwo = 2; // u quark - int checkPdgQuarkThree = 3; // s quark - float ratioTrigger = 1. / 5; // one event triggered out of 5 +#include +#include +#include +#include +#include +#include "DataFormats/MCTrack.h" +int External() { + std::string path{"o2sim_Kine.root"}; - 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; - } + const int pdgPi0 = 111; + const int pdgEta = 221; + const double yMin = -1.5; + const double yMax = 1.5; + const int minNb = 1; - std::vector *tracks{}; - tree->SetBranchAddress("MCTrack", &tracks); - o2::dataformats::MCEventHeader *eventHeader = nullptr; - tree->SetBranchAddress("MCEventHeader.", &eventHeader); + TFile file(path.c_str(), "READ"); + if (file.IsZombie()) { + std::cerr << "Cannot open ROOT file " << path << "\n"; + return 1; + } - int nEventsMB{}, nEventsInjOne{}, nEventsInjTwo{}, nEventsInjThree{}; - int nQuarksOne{}, nQuarksTwo{}, nQuarksThree{}; - int nElectrons{}; - auto nEvents = tree->GetEntries(); + auto tree = (TTree*)file.Get("o2sim"); + if (!tree) { + std::cerr << "Cannot find tree o2sim\n"; + return 1; + } - for (int i = 0; i < nEvents; i++) { - tree->GetEntry(i); + std::vector* tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); - // check subgenerator information - if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) { - bool isValid = false; - int subGeneratorId = eventHeader->getInfo( - o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid); - if (subGeneratorId == 0) { - nEventsMB++; - } else if (subGeneratorId == checkPdgQuarkOne) { - nEventsInjOne++; - } else if (subGeneratorId == checkPdgQuarkTwo) { - nEventsInjTwo++; - } else if (subGeneratorId == checkPdgQuarkThree) { - nEventsInjThree++; - } - } // if event header + int nEvents = tree->GetEntries(); + int nAccepted = 0; + int totalPi0 = 0, totalEta = 0; - int nelectronsev = 0; + for (int i = 0; i < nEvents; ++i) { + tree->GetEntry(i); - for (auto &track : *tracks) { - auto pdg = track.GetPdgCode(); - if (std::abs(pdg) == checkPdgQuarkOne) { - nQuarksOne++; - continue; - } - if (std::abs(pdg) == checkPdgQuarkTwo) { - nQuarksTwo++; - continue; - } - if (std::abs(pdg) == checkPdgQuarkThree) { - nQuarksThree++; - continue; - } + int count = 0; + for (auto& track : *tracks) { + int pdg = std::abs(track.GetPdgCode()); + double y = track.GetRapidity(); + if ((pdg == pdgPi0 || pdg == pdgEta) && y >= yMin && y <= yMax) { + count++; + if (pdg == pdgPi0) totalPi0++; + if (pdg == pdgEta) totalEta++; + } + } - auto y = track.GetRapidity(); - if (std::abs(pdg) == checkPdgDecayElectron) { - int igmother = track.getMotherTrackId(); - auto gmTrack = (*tracks)[igmother]; - int gmpdg = gmTrack.GetPdgCode(); - if (int(std::abs(gmpdg) / 100.) == 1 || - int(std::abs(gmpdg) / 1000.) == 1 || - int(std::abs(gmpdg) / 100.) == 2 || - int(std::abs(gmpdg) / 1000.) == 2 || - int(std::abs(gmpdg) / 100.) == 3 || - int(std::abs(gmpdg) / 1000.) == 3) { - nElectrons++; - nelectronsev++; - } // gmpdg - } // pdgdecay - } // loop track - // std::cout << "#electrons per event: " << nelectronsev << "\n"; - } + if (count < minNb) { + std::cerr << " Trigger violation in event " << i + << " (found " << count << " π0/η in rapidity window)\n"; + return 1; + } - std::cout << "--------------------------------\n"; - std::cout << "# Events: " << nEvents << "\n"; - std::cout << "# MB events: " << nEventsMB << "\n"; - std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkOne) - << nEventsInjOne << "\n"; - std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkTwo) - << nEventsInjTwo << "\n"; - std::cout << Form("# events injected with %d quark pair: ", checkPdgQuarkThree) - << nEventsInjThree << "\n"; - std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkOne) << nQuarksOne - << "\n"; - std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkTwo) << nQuarksTwo - << "\n"; - std::cout << Form("# %d (anti)quarks: ", checkPdgQuarkThree) << nQuarksThree - << "\n"; + nAccepted++; + } - if (nEventsMB < nEvents * (1 - ratioTrigger) * 0.90 || - nEventsMB > nEvents * (1 - ratioTrigger) * - 1.1) { // 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; - } -constexpr float nInjectedSpecies = 3.f; - if (nEventsInjOne < nEvents * ratioTrigger * 1.0/nInjectedSpecies * 0.90 || - nEventsInjOne > nEvents * ratioTrigger * 1.0/nInjectedSpecies * 1.1) { - std::cerr << "Number of generated events injected with " << checkPdgQuarkOne - << " different than expected\n"; - return 1; - } - if (nEventsInjTwo < nEvents * ratioTrigger * 1.0/nInjectedSpecies * 0.90 || - nEventsInjTwo > nEvents * ratioTrigger * 1.0/nInjectedSpecies * 1.1) { - std::cerr << "Number of generated events injected with " << checkPdgQuarkTwo - << " different than expected\n"; - return 1; - } - if (nEventsInjThree < nEvents * ratioTrigger * 1.0/nInjectedSpecies * 0.90 || - nEventsInjThree > nEvents * ratioTrigger * 1.0/nInjectedSpecies * 1.1) { - std::cerr << "Number of generated events injected with " << checkPdgQuarkThree - << " different than expected\n"; - return 1; - } - if (nQuarksOne < - nEvents * - ratioTrigger) { // we expect anyway more because the same quark is - // repeated several time, after each gluon radiation - std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkOne - << " lower than expected\n"; - return 1; - } - if (nQuarksTwo < - nEvents * - ratioTrigger) { // we expect anyway more because the same quark is - // repeated several time, after each gluon radiation - std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkTwo - << " lower than expected\n"; - return 1; - } - if (nQuarksThree < - nEvents * - ratioTrigger) { // we expect anyway more because the same quark is - // repeated several time, after each gluon radiation - std::cerr << "Number of generated (anti)quarks " << checkPdgQuarkThree - << " lower than expected\n"; - return 1; - } - std::cout << "#electrons: " << nElectrons << "\n"; + std::cout << "--------------------------------------\n"; + std::cout << "Trigger test: π0/η within rapidity window\n"; + std::cout << "Events tested: " << nEvents << "\n"; + std::cout << "Events accepted: " << nAccepted << "\n"; + std::cout << "# π0: " << totalPi0 << ", # η: " << totalEta << "\n"; + std::cout << "Trigger test PASSED\n"; - return 0; -} // external + return 0; +} From 76c6771b7cb7201d5ac1036bd39f50ed12dc528e Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 16:08:10 +0530 Subject: [PATCH 22/31] Update GeneratorHF_Non_Hfe.ini --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index 39a5075e3..f0fb16e3a 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -5,7 +5,7 @@ fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C # Function name and its arguments # Arguments: pdgPartForAccCut, rapidityMin, rapidityMax, minNb -funcName=selectPionEtaWithinAcc(111, -1.5, 1.5, 1) +funcName=selectPionEtaWithinAcc(111; 221 , -1.5, 1.5, 1) [GeneratorPythia8] config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg includePartonEvent=true From 8aff82949c296cd86a33f4a27cd695d03f106a13 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:19:17 +0530 Subject: [PATCH 23/31] Add correctly pDg cut --- MC/config/PWGHF/trigger/selectNonHfe.C | 30 ++++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/MC/config/PWGHF/trigger/selectNonHfe.C b/MC/config/PWGHF/trigger/selectNonHfe.C index 3d5f19fc7..2acfc23fe 100644 --- a/MC/config/PWGHF/trigger/selectNonHfe.C +++ b/MC/config/PWGHF/trigger/selectNonHfe.C @@ -12,24 +12,26 @@ //// authors: Rashi Gupta (rashi.gupta@cern.ch) /// authors: Ravindra Singh (ravindra.singh@cern.ch) /// ============================================================================ +o2::eventgen::Trigger selectPionEtaWithinAcc(TString pdgPartForAccCut = "111;221", double rapidityMin = -1.5, double rapidityMax = 1.5, int minNb = 1) +{ + return [pdgPartForAccCut, rapidityMin, rapidityMax, minNb](const std::vector& particles) -> bool { + TObjArray* obj = pdgPartForAccCut.Tokenize(";"); + int count = 0; + for (const auto& particle : particles) { + int pdg = TMath::Abs(particle.GetPdgCode()); + double y = particle.Y(); + if (y < rapidityMin || y > rapidityMax) continue; + for (int i = 0; i < obj->GetEntriesFast(); ++i) { + int pdgCode = std::stoi(obj->At(i)->GetName()); - -o2::eventgen::Trigger selectPionEtaWithinAcc(Int_t pdgPartForAccCut = 111; 221, double rapidityMin = -1.5, double rapidityMax = 1.5, int minNb = 1) -{ - return [pdgPartForAccCut, rapidityMin, rapidityMax, minNb](const std::vector& particles) -> bool { - int count = 0; - for (const auto& particle : particles) { - Int_t pdg = TMath::Abs(particle.GetPdgCode()); - if (pdg == pdgPartForAccCut) { // select π⁰ (111) or η (221) - double y = particle.Y(); - if (y >= rapidityMin && y <= rapidityMax) { - count++; - } - } + if (pdg == pdgCode) { + count++; + break; } - + } + } // Only accept events with at least minNb π⁰/η if (count >= minNb) return kTRUE; From 620e774262135c4521dc7327d04e2f16105e3086 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:20:32 +0530 Subject: [PATCH 24/31] Update GeneratorHF_Non_Hfe.ini --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index f0fb16e3a..b365a6ce2 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -5,7 +5,7 @@ fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C # Function name and its arguments # Arguments: pdgPartForAccCut, rapidityMin, rapidityMax, minNb -funcName=selectPionEtaWithinAcc(111; 221 , -1.5, 1.5, 1) +funcName=selectPionEtaWithinAcc("111;221",-1.5,1.5,1) [GeneratorPythia8] config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg includePartonEvent=true From 998d36fa2aa7f2032aa0a5890e7cf1a8e88bbaba Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Mon, 9 Feb 2026 18:30:37 +0530 Subject: [PATCH 25/31] usetriggerexternal C --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index b365a6ce2..c08a82181 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,11 +1,14 @@ -### The external generator derives from GeneratorPythia8. -[GeneratorExternal] +### The external generator trigger for π⁰/η within rapidity window +[TriggerExternal] +# Path to your trigger C++ file +fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C -fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C +# Function name and arguments +# Arguments: pdgPartForAccCut (TString "111;221"), rapidityMin, rapidityMax, minNb +funcName = selectPionEtaWithinAcc("111;221",-1.5,1.5,1) -# Function name and its arguments -# Arguments: pdgPartForAccCut, rapidityMin, rapidityMax, minNb -funcName=selectPionEtaWithinAcc("111;221",-1.5,1.5,1) +### The Pythia8 generator configuration [GeneratorPythia8] -config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg -includePartonEvent=true +config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_NonHfe.cfg +includePartonEvent = true + From fc6613f75f37c2b72fe18d1ed14c625d3c3cf58e Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Tue, 10 Feb 2026 04:41:14 +0530 Subject: [PATCH 26/31] Rename MC/config/PWGHF/trigger/selectNonHfe.C to MC/config/PWGHF/external/generator/selectNonHfe.C change path --- MC/config/PWGHF/{trigger => external/generator}/selectNonHfe.C | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename MC/config/PWGHF/{trigger => external/generator}/selectNonHfe.C (100%) diff --git a/MC/config/PWGHF/trigger/selectNonHfe.C b/MC/config/PWGHF/external/generator/selectNonHfe.C similarity index 100% rename from MC/config/PWGHF/trigger/selectNonHfe.C rename to MC/config/PWGHF/external/generator/selectNonHfe.C From 6fc3f7179e8bdf439b3aad66a0b1d81043644708 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Tue, 10 Feb 2026 04:43:17 +0530 Subject: [PATCH 27/31] Update GeneratorHF_Non_Hfe.ini change filepath --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index c08a82181..fa54dee8f 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,7 +1,7 @@ ### The external generator trigger for π⁰/η within rapidity window [TriggerExternal] # Path to your trigger C++ file -fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/selectNonHfe.C # Function name and arguments # Arguments: pdgPartForAccCut (TString "111;221"), rapidityMin, rapidityMax, minNb From 88a147635715224da3f55c408909ae620af56b0f Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:24:01 +0530 Subject: [PATCH 28/31] Update GeneratorHF_Non_Hfe.ini --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index fa54dee8f..0d9ec00c6 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,5 +1,5 @@ ### The external generator trigger for π⁰/η within rapidity window -[TriggerExternal] +[GeneratorExternal] # Path to your trigger C++ file fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/selectNonHfe.C From a7ef760be984d6ca15f6baf329d609568db7ee17 Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:03:15 +0530 Subject: [PATCH 29/31] Rename MC/config/PWGHF/external/generator/selectNonHfe.C to MC/config/PWGHF/trigger/selectNonHfe.C --- MC/config/PWGHF/{external/generator => trigger}/selectNonHfe.C | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename MC/config/PWGHF/{external/generator => trigger}/selectNonHfe.C (100%) diff --git a/MC/config/PWGHF/external/generator/selectNonHfe.C b/MC/config/PWGHF/trigger/selectNonHfe.C similarity index 100% rename from MC/config/PWGHF/external/generator/selectNonHfe.C rename to MC/config/PWGHF/trigger/selectNonHfe.C From 5dd0ba3582c6c3654d0f44a50e5b2cf31a2def8b Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:04:09 +0530 Subject: [PATCH 30/31] Update GeneratorHF_Non_Hfe.ini --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index 0d9ec00c6..3132dadbf 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,7 +1,7 @@ ### The external generator trigger for π⁰/η within rapidity window [GeneratorExternal] # Path to your trigger C++ file -fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/selectNonHfe.C +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C # Function name and arguments # Arguments: pdgPartForAccCut (TString "111;221"), rapidityMin, rapidityMax, minNb From 02149aa1b133d5286210c8b5b48e5c50596f197d Mon Sep 17 00:00:00 2001 From: Rashi gupta <167059733+rashigupt@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:51:27 +0530 Subject: [PATCH 31/31] Use triggerexternal --- MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini index 3132dadbf..29e433f6f 100644 --- a/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini +++ b/MC/config/PWGHF/ini/GeneratorHF_Non_Hfe.ini @@ -1,5 +1,5 @@ ### The external generator trigger for π⁰/η within rapidity window -[GeneratorExternal] +[TriggerExternal] # Path to your trigger C++ file fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/trigger/selectNonHfe.C