From db4bca7195615a6b1d043e83d801a4186d8ed30e Mon Sep 17 00:00:00 2001 From: Nicole Bastid <75683312+NicoleBastid@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:18:11 +0100 Subject: [PATCH 1/6] produce muons from c and b with trigger gap 3 --- .../PWGHF/ini/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.ini | 7 +++++++ .../PWGHF/ini/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.ini | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 MC/config/PWGHF/ini/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.ini create mode 100644 MC/config/PWGHF/ini/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.ini diff --git a/MC/config/PWGHF/ini/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.ini b/MC/config/PWGHF/ini/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.ini new file mode 100644 index 000000000..e945e5789 --- /dev/null +++ b/MC/config/PWGHF/ini/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.ini @@ -0,0 +1,7 @@ +### The external generator derives from GeneratorPythia8. +[GeneratorExternal] +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C +funcName=GeneratorPythia8GapTriggeredBeauty(3, -4.3, -2.2) +[GeneratorPythia8] +config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_beauty_with_mudecays_Mode2.cfg +includePartonEvent=true diff --git a/MC/config/PWGHF/ini/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.ini b/MC/config/PWGHF/ini/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.ini new file mode 100644 index 000000000..f3ae527b9 --- /dev/null +++ b/MC/config/PWGHF/ini/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.ini @@ -0,0 +1,7 @@ +### The external generator derives from GeneratorPythia8. +[GeneratorExternal] +fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C +funcName=GeneratorPythia8GapTriggeredCharm(3, -4.3, -2.2) +[GeneratorPythia8] +config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charm_with_mudecays_Mode2.cfg +includePartonEvent=true From 201fae0a1e8ee2b0432f47d96a66c003f5320ff7 Mon Sep 17 00:00:00 2001 From: Nicole Bastid <75683312+NicoleBastid@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:20:17 +0100 Subject: [PATCH 2/6] macros for muons from c,b with gap3 --- ...GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.C | 103 ++++++++++++++++++ ...GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.C | 103 ++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 MC/config/PWGHF/ini/tests/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.C create mode 100644 MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.C diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.C b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.C new file mode 100644 index 000000000..b915d734e --- /dev/null +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_bbbar_gap3_Mode2_accSmall.C @@ -0,0 +1,103 @@ +int External() { + + int checkPdgDecayMuon = 13; + int checkPdgQuark = 5; + + float ratioTrigger = 1./3; // one event triggered out of 5 + + 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; + } + + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + + o2::dataformats::MCEventHeader *eventHeader = nullptr; + tree->SetBranchAddress("MCEventHeader.", &eventHeader); + + int nEventsMB{}; + int nEventsInj{}; + int nQuarks{}; + int nMuons{}; + + int nMuonsInAcceptance{}; + + 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 == checkPdgQuark) { + nEventsInj++; + } + } // if event header + + int nmuonsev = 0; + int nmuonsevinacc = 0; + + for (auto &track : *tracks) { + auto pdg = track.GetPdgCode(); + if (std::abs(pdg) == checkPdgQuark) { + nQuarks++; + continue; + } // pdgquark + auto y = track.GetRapidity(); + if (std::abs(pdg) == checkPdgDecayMuon) { + int igmother = track.getMotherTrackId(); + auto gmTrack = (*tracks)[igmother]; + int gmpdg = gmTrack.GetPdgCode(); + if (int(std::abs(gmpdg) / 100.) == 5 || + int(std::abs(gmpdg) / 1000.) == 5) { + nMuons++; + nmuonsev++; + if (-4.3 < y && y < -2.2) { + nMuonsInAcceptance++; + nmuonsevinacc++; + } + } // gmpdg + + } // pdgdecay + + } // loop track + // std::cout << "#muons per event: " << nmuonsev << "\n"; + // std::cout << "#muons in acceptance per event: " << nmuonsev << "\n"; + } // events + + std::cout << "#events: " << nEvents << "\n"; + std::cout << "# MB events: " << nEventsMB << "\n"; + std::cout << Form("# events injected with %d quark pair: ", checkPdgQuark) + << nEventsInj << "\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 (nEventsInj < nEvents * ratioTrigger * 0.95 || + nEventsInj > nEvents * ratioTrigger * 1.05) { + std::cerr << "Number of generated events injected with " << checkPdgQuark + << " different than expected\n"; + return 1; + } + std::cout << "#muons: " << nMuons << "\n"; + std::cout << "#muons in acceptance: " << nMuonsInAcceptance << "\n"; + + return 0; +} // external diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.C b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.C new file mode 100644 index 000000000..262973fc2 --- /dev/null +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap3_Mode2_accSmall.C @@ -0,0 +1,103 @@ +int External() { + + int checkPdgDecayMuon = 13; + int checkPdgQuark = 4; + + float ratioTrigger = 1./3; // one event triggered out of 5 + + 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; + } + + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + + o2::dataformats::MCEventHeader *eventHeader = nullptr; + tree->SetBranchAddress("MCEventHeader.", &eventHeader); + + int nEventsMB{}; + int nEventsInj{}; + int nQuarks{}; + int nMuons{}; + + int nMuonsInAcceptance{}; + + 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 == checkPdgQuark) { + nEventsInj++; + } + } // if event header + + int nmuonsev = 0; + int nmuonsevinacc = 0; + + for (auto &track : *tracks) { + auto pdg = track.GetPdgCode(); + if (std::abs(pdg) == checkPdgQuark) { + nQuarks++; + continue; + } // pdgquark + auto y = track.GetRapidity(); + if (std::abs(pdg) == checkPdgDecayMuon) { + int igmother = track.getMotherTrackId(); + auto gmTrack = (*tracks)[igmother]; + int gmpdg = gmTrack.GetPdgCode(); + if (int(std::abs(gmpdg) / 100.) == 4 || + int(std::abs(gmpdg) / 1000.) == 4) { + nMuons++; + nmuonsev++; + if (-4.3 < y && y < -2.2) { + nMuonsInAcceptance++; + nmuonsevinacc++; + } + } // gmpdg + + } // pdgdecay + + } // loop track + // std::cout << "#muons per event: " << nmuonsev << "\n"; + // std::cout << "#muons in acceptance per event: " << nmuonsev << "\n"; + } // events + + std::cout << "#events: " << nEvents << "\n"; + std::cout << "# MB events: " << nEventsMB << "\n"; + std::cout << Form("# events injected with %d quark pair: ", checkPdgQuark) + << nEventsInj << "\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 (nEventsInj < nEvents * ratioTrigger * 0.95 || + nEventsInj > nEvents * ratioTrigger * 1.05) { + std::cerr << "Number of generated events injected with " << checkPdgQuark + << " different than expected\n"; + return 1; + } + std::cout << "#muons: " << nMuons << "\n"; + std::cout << "#muons in acceptance: " << nMuonsInAcceptance << "\n"; + + return 0; +} // external From 743cc5197c4eb60cf7cbf043bbfcc95ec6f68555 Mon Sep 17 00:00:00 2001 From: Nicole Bastid <75683312+NicoleBastid@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:23:17 +0100 Subject: [PATCH 3/6] Update GeneratorHF_mu_ccbar_gap5_Mode2_accInt_muTrig.C correct typo --- .../ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accInt_muTrig.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accInt_muTrig.C b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accInt_muTrig.C index 25c5338a3..1cf192133 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accInt_muTrig.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accInt_muTrig.C @@ -62,8 +62,8 @@ int External() { int igmother = track.getMotherTrackId(); auto gmTrack = (*tracks)[igmother]; int gmpdg = gmTrack.GetPdgCode(); - if (int(std::abs(gmpdg) / 100.) == 5 || - int(std::abs(gmpdg) / 1000.) == 5) { + if (int(std::abs(gmpdg) / 100.) == 4 || + int(std::abs(gmpdg) / 1000.) == 4) { nMuons++; nmuonsev++; if (-4.3 < y && y < -2.2) { From a25e25dc2c0ff27591ad70d2351fe9161140ba07 Mon Sep 17 00:00:00 2001 From: Nicole Bastid <75683312+NicoleBastid@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:25:13 +0100 Subject: [PATCH 4/6] Update GeneratorHF_mu_ccbar_gap5_Mode2_accLarge.C correct typo --- .../ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge.C b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge.C index 25c5338a3..1cf192133 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge.C @@ -62,8 +62,8 @@ int External() { int igmother = track.getMotherTrackId(); auto gmTrack = (*tracks)[igmother]; int gmpdg = gmTrack.GetPdgCode(); - if (int(std::abs(gmpdg) / 100.) == 5 || - int(std::abs(gmpdg) / 1000.) == 5) { + if (int(std::abs(gmpdg) / 100.) == 4 || + int(std::abs(gmpdg) / 1000.) == 4) { nMuons++; nmuonsev++; if (-4.3 < y && y < -2.2) { From 3b29c77d98daa80264e0af6ef051e06f8b018f83 Mon Sep 17 00:00:00 2001 From: Nicole Bastid <75683312+NicoleBastid@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:26:33 +0100 Subject: [PATCH 5/6] Update GeneratorHF_mu_ccbar_gap5_Mode2_accLarge_muTrig.C correct typo --- .../tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge_muTrig.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge_muTrig.C b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge_muTrig.C index 25c5338a3..d53003560 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge_muTrig.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accLarge_muTrig.C @@ -62,8 +62,8 @@ int External() { int igmother = track.getMotherTrackId(); auto gmTrack = (*tracks)[igmother]; int gmpdg = gmTrack.GetPdgCode(); - if (int(std::abs(gmpdg) / 100.) == 5 || - int(std::abs(gmpdg) / 1000.) == 5) { + if (int(std::abs(gmpdg) / 100.) == 4|| + int(std::abs(gmpdg) / 1000.) == 4) { nMuons++; nmuonsev++; if (-4.3 < y && y < -2.2) { From eb17831417717b7601b9fe7050a87efc48b5fd88 Mon Sep 17 00:00:00 2001 From: Nicole Bastid <75683312+NicoleBastid@users.noreply.github.com> Date: Tue, 25 Feb 2025 17:27:16 +0100 Subject: [PATCH 6/6] Update GeneratorHF_mu_ccbar_gap5_Mode2_accSmall.C correct typo --- .../ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accSmall.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accSmall.C b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accSmall.C index 25c5338a3..1cf192133 100644 --- a/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accSmall.C +++ b/MC/config/PWGHF/ini/tests/GeneratorHF_mu_ccbar_gap5_Mode2_accSmall.C @@ -62,8 +62,8 @@ int External() { int igmother = track.getMotherTrackId(); auto gmTrack = (*tracks)[igmother]; int gmpdg = gmTrack.GetPdgCode(); - if (int(std::abs(gmpdg) / 100.) == 5 || - int(std::abs(gmpdg) / 1000.) == 5) { + if (int(std::abs(gmpdg) / 100.) == 4 || + int(std::abs(gmpdg) / 1000.) == 4) { nMuons++; nmuonsev++; if (-4.3 < y && y < -2.2) {