From 46018bf0bc599cd9975c3337e54a49539d6b7fc1 Mon Sep 17 00:00:00 2001 From: Daiki Sekihata Date: Fri, 15 May 2026 18:29:34 +0200 Subject: [PATCH] MC/PWGEM: update DY generator in OO --- ...eratorDYee_GapTriggered_Gap2_OO5360GeV.ini | 7 ++ ...eneratorDYee_GapTriggered_Gap2_OO5360GeV.C | 56 +++++++++ ...eneratorDYee_GapTriggered_Gap5_OO5360GeV.C | 56 +++++++++ ..._pp_5360_bbbar_forceddecayscharmbeauty.cfg | 117 +++++++----------- .../pythia8_pp_5360_cr2_forceddecayscharm.cfg | 41 ++---- MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap2.sh | 52 ++++++++ MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap5.sh | 52 ++++++++ 7 files changed, 282 insertions(+), 99 deletions(-) create mode 100644 MC/config/PWGEM/ini/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.ini create mode 100644 MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.C create mode 100644 MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap5_OO5360GeV.C create mode 100644 MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap2.sh create mode 100644 MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap5.sh diff --git a/MC/config/PWGEM/ini/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.ini b/MC/config/PWGEM/ini/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.ini new file mode 100644 index 000000000..a83045099 --- /dev/null +++ b/MC/config/PWGEM/ini/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.ini @@ -0,0 +1,7 @@ +[GeneratorExternal] +fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/external/generator/Generator_pythia8_GapTriggered_DYll.C +funcName = GeneratorPythia8GapTriggeredDYll(2, 1, 11, -1.5, +1.5, 1000080160, 1000080160, 5360.0) + +[GeneratorPythia8] +config = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGEM/pythia8/generator/configPythiaEmpty.cfg +includePartonEvent = true diff --git a/MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.C b/MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.C new file mode 100644 index 000000000..ac9df9f68 --- /dev/null +++ b/MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap2_OO5360GeV.C @@ -0,0 +1,56 @@ +int External() { + std::string path{"o2sim_Kine.root"}; + // Check that file exists, can be opened and has the correct tree + TFile file(path.c_str(), "READ"); + if (file.IsZombie()) + { + std::cerr << "Cannot open ROOT file " << path << "\n"; + return 1; + } + auto tree = (TTree *)file.Get("o2sim"); + if (!tree) + { + std::cerr << "Cannot find tree o2sim in file " << path << "\n"; + return 1; + } + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + + // Check if all events are filled + auto nEvents = tree->GetEntries(); + for (Long64_t i = 0; i < nEvents; ++i) + { + tree->GetEntry(i); + if (tracks->empty()) + { + std::cerr << "Empty entry found at event " << i << "\n"; + return 1; + } + } + // check if each event has at least two oxygen ions + for (int i = 0; i < nEvents; i++) + { + auto check = tree->GetEntry(i); + int count = 0; + for (int idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack) + { + auto track = tracks->at(idxMCTrack); + if (track.GetPdgCode() == 1000080160) + { + count++; + } + } + if (count < 2) + { + std::cerr << "Event " << i << " has less than 2 oxygen ions\n"; + return 1; + } + } + + return 0; +} + +int pythia8() +{ + return External(); +} diff --git a/MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap5_OO5360GeV.C b/MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap5_OO5360GeV.C new file mode 100644 index 000000000..ac9df9f68 --- /dev/null +++ b/MC/config/PWGEM/ini/tests/GeneratorDYee_GapTriggered_Gap5_OO5360GeV.C @@ -0,0 +1,56 @@ +int External() { + std::string path{"o2sim_Kine.root"}; + // Check that file exists, can be opened and has the correct tree + TFile file(path.c_str(), "READ"); + if (file.IsZombie()) + { + std::cerr << "Cannot open ROOT file " << path << "\n"; + return 1; + } + auto tree = (TTree *)file.Get("o2sim"); + if (!tree) + { + std::cerr << "Cannot find tree o2sim in file " << path << "\n"; + return 1; + } + std::vector *tracks{}; + tree->SetBranchAddress("MCTrack", &tracks); + + // Check if all events are filled + auto nEvents = tree->GetEntries(); + for (Long64_t i = 0; i < nEvents; ++i) + { + tree->GetEntry(i); + if (tracks->empty()) + { + std::cerr << "Empty entry found at event " << i << "\n"; + return 1; + } + } + // check if each event has at least two oxygen ions + for (int i = 0; i < nEvents; i++) + { + auto check = tree->GetEntry(i); + int count = 0; + for (int idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack) + { + auto track = tracks->at(idxMCTrack); + if (track.GetPdgCode() == 1000080160) + { + count++; + } + } + if (count < 2) + { + std::cerr << "Event " << i << " has less than 2 oxygen ions\n"; + return 1; + } + } + + return 0; +} + +int pythia8() +{ + return External(); +} diff --git a/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_bbbar_forceddecayscharmbeauty.cfg b/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_bbbar_forceddecayscharmbeauty.cfg index 375c72768..2cc3486fe 100644 --- a/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_bbbar_forceddecayscharmbeauty.cfg +++ b/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_bbbar_forceddecayscharmbeauty.cfg @@ -30,97 +30,73 @@ MultiPartonInteractions:pT0Ref = 2.15 BeamRemnants:remnantMode = 1 BeamRemnants:saturation =5 -### only semileptonic decays from https://pdg.lbl.gov/2025/ +### only semileptonic decays for charm ### D+ -411:oneChannel = 1 0.08810 0 -311 -11 12 -#411:addChannel = 1 0.04020 0 -321 211 -11 12 # may be double counting -411:addChannel = 1 0.05400 0 -313 -11 12 -411:addChannel = 1 0.00372 0 111 -11 12 -411:addChannel = 1 0.00111 0 221 -11 12 -411:addChannel = 1 0.00187 0 113 -11 12 -411:addChannel = 1 0.00169 0 223 -11 12 -411:addChannel = 1 0.00020 0 331 -11 12 +411:oneChannel = 1 0.087 0 -311 -11 12 +411:addChannel = 1 0.040 0 -321 211 -11 12 +411:addChannel = 1 0.037 0 -313 -11 12 ### D0 -421:oneChannel = 1 0.0354 0 -321 -11 12 -421:addChannel = 1 0.0216 0 -323 -11 12 -#421:addChannel = 1 0.0160 0 -321 111 -11 12 # may be double counting -#421:addChannel = 1 0.0144 0 -311 211 -11 12 # may be double counting -421:addChannel = 1 0.00291 0 -211 -11 12 -421:addChannel = 1 0.00145 0 -211 111 -11 12 -421:addChannel = 1 0.00146 0 -213 -11 12 +421:oneChannel = 1 0.035 0 -321 -11 12 +421:addChannel = 1 0.022 0 -323 -11 12 +421:addChannel = 1 0.016 0 -321 111 -11 12 +421:addChannel = 1 0.014 0 -311 -211 -11 12 ### Ds -431:oneChannel = 1 0.0234 0 333 -11 12 -431:addChannel = 1 0.0227 0 221 -11 12 -431:addChannel = 1 0.0081 0 331 -11 12 -431:addChannel = 1 0.0029 0 311 -11 12 -431:addChannel = 1 0.0021 0 313 -11 12 +431:oneChannel = 1 0.025 0 333 -11 12 +431:addChannel = 1 0.027 0 221 -11 12 ### Lambdac -4122:oneChannel = 1 0.0356 0 3122 -11 12 -4122:oneChannel = 1 0.0009 0 2212 -321 -11 12 -4122:oneChannel = 1 0.0010 0 3124 -11 12 -4122:oneChannel = 1 0.0004 0 3126 -11 12 -### Xi_{c}^{+} +4122:oneChannel = 1 0.036 0 3122 -11 12 +### chi_{c}^{+} 4232:oneChannel = 1 0.07 0 3322 -11 12 -### Xi_{c}^{0} -4132:oneChannel = 1 0.0105 0 3312 -11 12 +### chi_{c}^{0} +4132:oneChannel = 1 0.014 0 3312 -11 12 ### Omega_{c} 4332:oneChannel = 1 0.01224 0 3334 -11 12 -### only semileptonic decays for beauty from https://pdg.lbl.gov/2025/ +### only semileptonic decays for beauty ### B0 -511:oneChannel = 1 0.021000 0 12 -11 -411 -511:addChannel = 1 0.048700 0 12 -11 -413 -511:addChannel = 1 0.002300 0 12 -11 -415 -511:addChannel = 1 0.000150 0 12 -11 -211 -511:addChannel = 1 0.000294 0 12 -11 -213 -#511:addChannel = 1 0.004500 0 12 -11 -10411 -#511:addChannel = 1 0.005200 0 12 -11 -10413 -#511:addChannel = 1 0.008300 0 12 -11 -20413 -511:addChannel = 1 0.003640 0 12 -11 -421 -211 -511:addChannel = 1 0.005440 0 12 -11 -423 -211 -511:addChannel = 1 0.001450 0 12 -11 -411 -211 211 -511:addChannel = 1 0.000510 0 12 -11 -413 -211 211 +511:oneChannel = 1 0.0207000 0 12 -11 -411 +511:addChannel = 1 0.0570000 0 12 -11 -413 +511:addChannel = 1 0.0023000 0 12 -11 -415 +511:addChannel = 1 0.0001330 0 12 -11 -211 +511:addChannel = 1 0.0002690 0 12 -11 -213 +511:addChannel = 1 0.0045000 0 12 -11 -10411 +511:addChannel = 1 0.0052000 0 12 -11 -10413 +511:addChannel = 1 0.0083000 0 12 -11 -20413 ### B+ -521:oneChannel = 1 0.000078 0 12 -11 111 -521:addChannel = 1 0.000158 0 12 -11 113 -521:addChannel = 1 0.000035 0 12 -11 221 -521:addChannel = 1 0.000119 0 12 -11 223 -521:addChannel = 1 0.000024 0 12 -11 331 -521:addChannel = 1 0.022600 0 12 -11 -421 -521:addChannel = 1 0.052600 0 12 -11 -423 -521:addChannel = 1 0.001590 0 12 -11 -425 -#521:addChannel = 1 0.000900 0 12 -11 -10421 -#521:addChannel = 1 0.002840 0 12 -11 -10423 -#521:addChannel = 1 0.001700 0 12 -11 -20423 -521:addChannel = 1 0.003820 0 12 -11 -411 211 -521:addChannel = 1 0.005420 0 12 -11 -413 211 -521:addChannel = 1 0.001730 0 12 -11 -421 -211 211 -521:addChannel = 1 0.000700 0 12 -11 -423 -211 211 -521:addChannel = 1 0.000300 0 12 -11 -431 321 -521:addChannel = 1 0.000290 0 12 -11 -433 321 +521:oneChannel = 1 0.0000720 0 12 -11 111 +521:addChannel = 1 0.0001450 0 12 -11 113 +521:addChannel = 1 0.0000840 0 12 -11 221 +521:addChannel = 1 0.0001450 0 12 -11 223 +521:addChannel = 1 0.0000840 0 12 -11 331 +521:addChannel = 1 0.0224000 0 12 -11 -421 +521:addChannel = 1 0.0617000 0 12 -11 -423 +521:addChannel = 1 0.0030000 0 12 -11 -425 +521:addChannel = 1 0.0049000 0 12 -11 -10421 +521:addChannel = 1 0.0056000 0 12 -11 -10423 +521:addChannel = 1 0.0090000 0 12 -11 -20423 ### Bs -531:oneChannel = 1 0.000106 0 12 -11 -321 -531:addChannel = 1 0.000300 0 12 -11 -323 -531:addChannel = 1 0.022900 0 12 -11 -431 -531:addChannel = 1 0.052000 0 12 -11 -433 -531:addChannel = 1 0.007000 0 12 -11 -435 -531:addChannel = 1 0.000300 0 12 -11 -10323 -531:addChannel = 1 0.004000 0 12 -11 -10431 -531:addChannel = 1 0.007000 0 12 -11 -10433 -531:addChannel = 1 0.000200 0 12 -11 -20323 -531:addChannel = 1 0.004000 0 12 -11 -20433 +531:oneChannel = 1 0.0002000 0 12 -11 -321 +531:addChannel = 1 0.0003000 0 12 -11 -323 +531:addChannel = 1 0.0210000 0 12 -11 -431 +531:addChannel = 1 0.0490000 0 12 -11 -433 +531:addChannel = 1 0.0070000 0 12 -11 -435 +531:addChannel = 1 0.0003000 0 12 -11 -10323 +531:addChannel = 1 0.0040000 0 12 -11 -10431 +531:addChannel = 1 0.0070000 0 12 -11 -10433 +531:addChannel = 1 0.0002000 0 12 -11 -20323 +531:addChannel = 1 0.0040000 0 12 -11 -20433 ### Lambdab 5122:oneChannel = 1 0.0546000 0 -12 11 4122 5122:addChannel = 1 0.0096000 0 -12 11 4124 5122:addChannel = 1 0.0128000 0 -12 11 14122 -### Xi_{b}^{-} +### Chi_{b}^{-} 5132:oneChannel = 1 0.1080010 0 -12 11 4 3101 5132:addChannel = 1 0.0020000 0 -12 11 2 3101 -### Xi_{b}^{0} +### Chi_{b}^{0} 5232:oneChannel = 1 0.1080010 0 -12 11 4 3201 5232:addChannel = 1 0.0020000 0 -12 11 2 3201 ### Omega_{b}^{-} @@ -132,4 +108,3 @@ BeamRemnants:saturation =5 4332:tau0 = 0.08000000000 # Correct Lb decay length (wrong in PYTHIA8 decay table) 5122:tau0 = 4.41000e-01 - diff --git a/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_cr2_forceddecayscharm.cfg b/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_cr2_forceddecayscharm.cfg index 2ee27cad6..7f5a2bcab 100644 --- a/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_cr2_forceddecayscharm.cfg +++ b/MC/config/PWGEM/pythia8/generator/pythia8_pp_5360_cr2_forceddecayscharm.cfg @@ -36,39 +36,24 @@ MultiPartonInteractions:pT0Ref = 2.15 BeamRemnants:remnantMode = 1 BeamRemnants:saturation =5 -### only semileptonic decays from https://pdg.lbl.gov/2025/ + ### only semileptonic decays ### D+ -411:oneChannel = 1 0.08810 0 -311 -11 12 -#411:addChannel = 1 0.04020 0 -321 211 -11 12 # may be double counting -411:addChannel = 1 0.05400 0 -313 -11 12 -411:addChannel = 1 0.00372 0 111 -11 12 -411:addChannel = 1 0.00111 0 221 -11 12 -411:addChannel = 1 0.00187 0 113 -11 12 -411:addChannel = 1 0.00169 0 223 -11 12 -411:addChannel = 1 0.00020 0 331 -11 12 +411:oneChannel = 1 0.087 0 -311 -11 12 +411:addChannel = 1 0.040 0 -321 211 -11 12 +411:addChannel = 1 0.037 0 -313 -11 12 ### D0 -421:oneChannel = 1 0.0354 0 -321 -11 12 -421:addChannel = 1 0.0216 0 -323 -11 12 -#421:addChannel = 1 0.0160 0 -321 111 -11 12 # may be double counting -#421:addChannel = 1 0.0144 0 -311 211 -11 12 # may be double counting -421:addChannel = 1 0.00291 0 -211 -11 12 -421:addChannel = 1 0.00145 0 -211 111 -11 12 -421:addChannel = 1 0.00146 0 -213 -11 12 +421:oneChannel = 1 0.035 0 -321 -11 12 +421:addChannel = 1 0.022 0 -323 -11 12 +421:addChannel = 1 0.016 0 -321 111 -11 12 ### Ds -431:oneChannel = 1 0.0234 0 333 -11 12 -431:addChannel = 1 0.0227 0 221 -11 12 -431:addChannel = 1 0.0081 0 331 -11 12 -431:addChannel = 1 0.0029 0 311 -11 12 -431:addChannel = 1 0.0021 0 313 -11 12 +431:oneChannel = 1 0.025 0 333 -11 12 +431:addChannel = 1 0.027 0 221 -11 12 ### Lambdac -4122:oneChannel = 1 0.0356 0 3122 -11 12 -4122:oneChannel = 1 0.0009 0 2212 -321 -11 12 -4122:oneChannel = 1 0.0010 0 3124 -11 12 -4122:oneChannel = 1 0.0004 0 3126 -11 12 -### Xi_{c}^{+} +4122:oneChannel = 1 0.036 0 3122 -11 12 +### chi_{c}^{+} 4232:oneChannel = 1 0.07 0 3322 -11 12 -### Xi_{c}^{0} -4132:oneChannel = 1 0.0105 0 3312 -11 12 +### chi_{c}^{0} +4132:oneChannel = 1 0.014 0 3312 -11 12 ### Omega_{c} 4332:oneChannel = 1 0.01224 0 3334 -11 12 diff --git a/MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap2.sh b/MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap2.sh new file mode 100644 index 000000000..9b36bcf51 --- /dev/null +++ b/MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap2.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# +# Steering script for HF enhanced dielectron MC anchored to LHC25ae +# + +# example anchoring + +export ALIEN_JDL_LPMANCHORPASSNAME=apass2 +export ALIEN_JDL_MCANCHOR=apass2 +export ALIEN_JDL_CPULIMIT=8 +export ALIEN_JDL_LPMRUNNUMBER=564356 +export ALIEN_JDL_LPMPRODUCTIONTYPE=MC +export ALIEN_JDL_LPMINTERACTIONTYPE=pp +export ALIEN_JDL_LPMPRODUCTIONTAG=LHC26a2 +export ALIEN_JDL_LPMANCHORRUN=564356 +export ALIEN_JDL_LPMANCHORPRODUCTION=LHC25ae +export ALIEN_JDL_LPMANCHORYEAR=2025 +export ALIEN_JDL_OUTPUT=*.dat@disk=1,*.txt@disk=1,*.root@disk=2 + +export NTIMEFRAMES=1 +export NSIGEVENTS=20 +export SPLITID=100 +export PRODSPLIT=153 +export CYCLE=0 + +# on the GRID, this is set and used as seed; when set, it takes precedence over SEED +#export ALIEN_PROC_ID=2963436952 +export SEED=0 + +# for pp and 50 events per TF, we launch only 4 workers. +export NWORKERS=2 + +# define the generator via ini file +# use 30/70 sampling for different generators +# No forced beauty decays as we have observed biases + +# generate random number +RNDSIG=$(($RANDOM % 100)) + +CONFIGNAME="GeneratorDYee_GapTriggered_Gap2_OO5360GeV.ini" + +export ALIEN_JDL_ANCHOR_SIM_OPTIONS="-gen external -ini $O2DPG_ROOT/MC/config/PWGEM/ini/$CONFIGNAME" + +# run the central anchor steering script; this includes +# * derive timestamp +# * derive interaction rate +# * extract and prepare configurations (which detectors are contained in the run etc.) +# * run the simulation (and QC) +# To disable QC, uncomment the following line +#export DISABLE_QC=1 +${O2DPG_ROOT}/MC/run/ANCHOR/anchorMC.sh diff --git a/MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap5.sh b/MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap5.sh new file mode 100644 index 000000000..8767cae2d --- /dev/null +++ b/MC/run/PWGEM/runAnchoredDYee_OO_5360_Gap5.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# +# Steering script for HF enhanced dielectron MC anchored to LHC25ae +# + +# example anchoring + +export ALIEN_JDL_LPMANCHORPASSNAME=apass2 +export ALIEN_JDL_MCANCHOR=apass2 +export ALIEN_JDL_CPULIMIT=8 +export ALIEN_JDL_LPMRUNNUMBER=564356 +export ALIEN_JDL_LPMPRODUCTIONTYPE=MC +export ALIEN_JDL_LPMINTERACTIONTYPE=pp +export ALIEN_JDL_LPMPRODUCTIONTAG=LHC26a2 +export ALIEN_JDL_LPMANCHORRUN=564356 +export ALIEN_JDL_LPMANCHORPRODUCTION=LHC25ae +export ALIEN_JDL_LPMANCHORYEAR=2025 +export ALIEN_JDL_OUTPUT=*.dat@disk=1,*.txt@disk=1,*.root@disk=2 + +export NTIMEFRAMES=1 +export NSIGEVENTS=20 +export SPLITID=100 +export PRODSPLIT=153 +export CYCLE=0 + +# on the GRID, this is set and used as seed; when set, it takes precedence over SEED +#export ALIEN_PROC_ID=2963436952 +export SEED=0 + +# for pp and 50 events per TF, we launch only 4 workers. +export NWORKERS=2 + +# define the generator via ini file +# use 30/70 sampling for different generators +# No forced beauty decays as we have observed biases + +# generate random number +RNDSIG=$(($RANDOM % 100)) + +CONFIGNAME="GeneratorDYee_GapTriggered_Gap5_OO5360GeV.ini" + +export ALIEN_JDL_ANCHOR_SIM_OPTIONS="-gen external -ini $O2DPG_ROOT/MC/config/PWGEM/ini/$CONFIGNAME" + +# run the central anchor steering script; this includes +# * derive timestamp +# * derive interaction rate +# * extract and prepare configurations (which detectors are contained in the run etc.) +# * run the simulation (and QC) +# To disable QC, uncomment the following line +#export DISABLE_QC=1 +${O2DPG_ROOT}/MC/run/ANCHOR/anchorMC.sh