From baa7256299b71720f843345b96a9b9995d85d4b1 Mon Sep 17 00:00:00 2001 From: Michal Broz Date: Wed, 4 Dec 2024 12:00:03 +0100 Subject: [PATCH 1/3] Enable DPMJET --- .../external/generator/GeneratorStarlight.C | 28 ++++++++++++-- MC/config/PWGUD/ini/makeStarlightConfig.py | 38 ++++++++++--------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/MC/config/PWGUD/external/generator/GeneratorStarlight.C b/MC/config/PWGUD/external/generator/GeneratorStarlight.C index 132e57444..88535ffa1 100644 --- a/MC/config/PWGUD/external/generator/GeneratorStarlight.C +++ b/MC/config/PWGUD/external/generator/GeneratorStarlight.C @@ -1,5 +1,5 @@ -//R__LOAD_LIBRARY(libDPMJET.so) -//R__LOAD_LIBRARY(libDpmJetLib.so) +R__LOAD_LIBRARY(libDPMJET.so) +R__LOAD_LIBRARY(libDpmJetLib.so) R__LOAD_LIBRARY(libStarlib.so) R__ADD_INCLUDE_PATH($STARlight_ROOT/include) @@ -104,7 +104,7 @@ class GeneratorStarlight_class : public Generator {"kIncohPsi2sToElPi", 4, 444011, 20, -1.0, -1.0, 100443, 1 }, // {"kIncohUpsilonToMu", 4, 553013, 20, -1.0, -1.0, 553, 0 }, // {"kIncohUpsilonToEl", 4, 553011, 20, -1.0, -1.0, 553, 0 }, // -// {"kDpmjetSingle", 5, 113, 20, -1.0, -1.0, -1, 0 }, // + {"kDpmjetSingle", 5, 113, 20, -1.0, -1.0, -1, 0 }, // {"kTauLowToEl3Pi", 1, 15, 990, 3.5, 20.0, -1, 1 }, // from 0.4 to 15 GeV {"kTauLowToPo3Pi", 1, 15, 990, 3.5, 20.0, -1, 1 }, // from 0.4 to 15 GeV {"kTauLowToElMu", 1, 15, 990, 3.5, 20.0, -1, 1 }, // from 0.4 to 15 GeV @@ -312,8 +312,28 @@ class GeneratorStarlight_class : public Generator FairGenerator* - GeneratorStarlight(std::string configuration = "empty",float energyCM = 5020, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "") + GeneratorStarlight(std::string configuration = "empty",float energyCM = 5020, int beam1Z = 82, int beam1A = 208, int beam2Z = 82, int beam2A = 208, std::string extrapars = "",std::string dpmjetconf = "") { + if(dpmjetconf.size() != 0){ + //Copy necesary files to the working directory + TString pathDPMJET = gSystem->ExpandPathName("$DPMJET_ROOT/dpmdata"); + system(TString::Format("cp -r %s .",pathDPMJET.Data())); + system(TString::Format("cp %s ./my.input",dpmjetconf.c_str())); + + //Reset four seeds of the DPMJET random generator in the config + std::random_device rd; + std::mt19937 gen(rd()); + std::uniform_int_distribution<> dist(1, 168); + + std::string command = "awk -i inplace -v nums=\""; + for (int i = 0; i < 4; ++i)command += TString::Format("%d.0 ", dist(gen)); + command +=" \" \' "; + command += "BEGIN {split(nums, newvals);}"; + command += "{if ($1 == \"RNDMINIT\") {printf \"%-16s%-9s%-9s%-9s%-9s\\n\", $1, newvals[1], newvals[2], newvals[3], newvals[4];}"; + command += " else {print $0;}}\' \"my.input\" "; + system(command.c_str()); + } + auto gen = new o2::eventgen::GeneratorStarlight_class(); gen->selectConfiguration(configuration); gen->setCollisionSystem(energyCM, beam1Z, beam1A, beam2Z, beam2A); diff --git a/MC/config/PWGUD/ini/makeStarlightConfig.py b/MC/config/PWGUD/ini/makeStarlightConfig.py index 2cc92456f..7d941e463 100755 --- a/MC/config/PWGUD/ini/makeStarlightConfig.py +++ b/MC/config/PWGUD/ini/makeStarlightConfig.py @@ -27,6 +27,9 @@ parser.add_argument('--extraPars', default='', help='Extra parameters for SL config') +parser.add_argument('--dpmjetConf', default='', + help='DPMJET config file') + args = parser.parse_args() @@ -76,25 +79,26 @@ fout.write('funcName = GeneratorStarlightToEvtGen("%s", %f, %d, %d, %d, %d, "%s") \n' % (args.process,args.eCM ,pZ,pA,tZ,tA,args.extraPars)) else: fout.write('fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGUD/external/generator/GeneratorStarlight.C \n') - fout.write('funcName = GeneratorStarlight("%s", %f, %d, %d, %d, %d, "%s") \n' % (args.process,args.eCM ,pZ,pA,tZ,tA,args.extraPars)) + fout.write('funcName = GeneratorStarlight("%s", %f, %d, %d, %d, %d, "%s", "%s") \n' % (args.process,args.eCM ,pZ,pA,tZ,tA,args.extraPars,args.dpmjetConf)) ###Trigger -fout.write('[TriggerExternal] \n') -fout.write('fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGUD/trigger/selectParticlesInAcceptance.C \n') -if 'kTwoGamma' in args.process or 'kTau' in args.process: - if args.rapidity == 'cent_eta': - fout.write('funcName = selectDirectPartInAcc(-0.9,0.9) \n') - if args.rapidity == 'muon_eta': - fout.write('funcName = selectDirectPartInAcc(-4.0,-2.5) \n') -else: - if args.rapidity == 'cent_rap': - fout.write('funcName = selectMotherPartInAcc(-0.9,0.9) \n') - if args.rapidity == 'muon_rap': - fout.write('funcName = selectMotherPartInAcc(-4.0,-2.5) \n') - if args.rapidity == 'cent_eta': - fout.write('funcName = selectDaughterPartInAcc(-0.9,0.9) \n') - if args.rapidity == 'muon_eta': - fout.write('funcName = selectDaughterPartInAcc(-4.0,-2.5) \n') +if not 'kDpmjet' in args.process: + fout.write('[TriggerExternal] \n') + fout.write('fileName = ${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGUD/trigger/selectParticlesInAcceptance.C \n') + if 'kTwoGamma' in args.process or 'kTau' in args.process: + if args.rapidity == 'cent_eta': + fout.write('funcName = selectDirectPartInAcc(-0.9,0.9) \n') + if args.rapidity == 'muon_eta': + fout.write('funcName = selectDirectPartInAcc(-4.0,-2.5) \n') + else: + if args.rapidity == 'cent_rap': + fout.write('funcName = selectMotherPartInAcc(-0.9,0.9) \n') + if args.rapidity == 'muon_rap': + fout.write('funcName = selectMotherPartInAcc(-4.0,-2.5) \n') + if args.rapidity == 'cent_eta': + fout.write('funcName = selectDaughterPartInAcc(-0.9,0.9) \n') + if args.rapidity == 'muon_eta': + fout.write('funcName = selectDaughterPartInAcc(-4.0,-2.5) \n') ### close outout file fout.close() From aab27027427a0cc27bfffa2b0ac1d8d495e27dc8 Mon Sep 17 00:00:00 2001 From: Michal Broz Date: Mon, 9 Dec 2024 09:53:02 +0100 Subject: [PATCH 2/3] Refined seeding --- .../external/generator/GeneratorStarlight.C | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/MC/config/PWGUD/external/generator/GeneratorStarlight.C b/MC/config/PWGUD/external/generator/GeneratorStarlight.C index 88535ffa1..0d05401e5 100644 --- a/MC/config/PWGUD/external/generator/GeneratorStarlight.C +++ b/MC/config/PWGUD/external/generator/GeneratorStarlight.C @@ -11,6 +11,23 @@ R__ADD_INCLUDE_PATH($STARlight_ROOT/include) // usage: o2-sim -g external --configKeyValues 'GeneratorExternal.fileName=GeneratorStarlight.C;GeneratorExternal.funcName=GeneratorStarlight("kCohJpsiToMu")' +unsigned int generateRandomSeed() { + // Use high-resolution clock for time-based seed + auto timeNow = std::chrono::high_resolution_clock::now(); + auto timeSeed = static_cast(timeNow.time_since_epoch().count()); + + // Random device for system entropy + std::random_device rd; + + // Add process ID and thread ID for additional entropy + unsigned int pid = static_cast(getpid()); + unsigned int tid = static_cast(std::hash()(std::this_thread::get_id())); + + // Combine all entropy sources + unsigned int seed = timeSeed ^ (rd() << 1) ^ (pid << 2) ^ (tid << 3); + return seed; +} + namespace o2 { namespace eventgen @@ -128,12 +145,9 @@ class GeneratorStarlight_class : public Generator mPdgMother = slConfig[idx].pdg_mother; mDecayEvtGen = slConfig[idx].decay_EvtGen; - - uint random_seed; - unsigned long long int random_value = 0; - ifstream urandom("/dev/urandom", ios::in|ios::binary); - urandom.read(reinterpret_cast(&random_value), sizeof(random_seed)); - + + unsigned int random_seed = generateRandomSeed(); + setParameter(Form("BEAM_1_Z = %3i #Z of target",targZ)); setParameter(Form("BEAM_1_A = %3i #A of target",targA)); setParameter(Form("BEAM_2_Z = %3i #Z of projectile",projZ)); @@ -321,8 +335,7 @@ FairGenerator* system(TString::Format("cp %s ./my.input",dpmjetconf.c_str())); //Reset four seeds of the DPMJET random generator in the config - std::random_device rd; - std::mt19937 gen(rd()); + std::mt19937 gen(generateRandomSeed()); std::uniform_int_distribution<> dist(1, 168); std::string command = "awk -i inplace -v nums=\""; From 5196042667c58c14b074ab95467955bbde5553f3 Mon Sep 17 00:00:00 2001 From: Michal Broz Date: Tue, 10 Dec 2024 08:43:38 +0100 Subject: [PATCH 3/3] Split of Dpmjet processe and fix in decay tables --- .../external/generator/DecayTablesEvtGen/TAUTAU.ELPI.DEC | 2 +- .../external/generator/DecayTablesEvtGen/TAUTAU.POPI.DEC | 2 +- MC/config/PWGUD/external/generator/GeneratorStarlight.C | 5 +++-- MC/config/PWGUD/ini/makeStarlightConfig.py | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.ELPI.DEC b/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.ELPI.DEC index cabb74aa9..02817cef1 100644 --- a/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.ELPI.DEC +++ b/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.ELPI.DEC @@ -5,6 +5,6 @@ Decay tau+ 0.25 pi+ anti-nu_tau TAUSCALARNU; #[Reconstructed PDG2011] 0.25 pi+ pi0 anti-nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; #[Reconstructed PDG2011] 0.25 pi0 pi0 pi+ anti-nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] -0.25 anti-nu_tau pi+ pi0 pi0 pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.25 anti-nu_tau pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] Enddecay End diff --git a/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.POPI.DEC b/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.POPI.DEC index e66ddc4be..9a703958d 100644 --- a/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.POPI.DEC +++ b/MC/config/PWGUD/external/generator/DecayTablesEvtGen/TAUTAU.POPI.DEC @@ -5,6 +5,6 @@ Decay tau- 0.25 pi- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] 0.25 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; #[Reconstructed PDG2011] 0.25 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] -0.25 nu_tau pi- pi0 pi0 pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.25 nu_tau pi- pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] Enddecay End diff --git a/MC/config/PWGUD/external/generator/GeneratorStarlight.C b/MC/config/PWGUD/external/generator/GeneratorStarlight.C index 0d05401e5..6cb67cbe9 100644 --- a/MC/config/PWGUD/external/generator/GeneratorStarlight.C +++ b/MC/config/PWGUD/external/generator/GeneratorStarlight.C @@ -121,7 +121,8 @@ class GeneratorStarlight_class : public Generator {"kIncohPsi2sToElPi", 4, 444011, 20, -1.0, -1.0, 100443, 1 }, // {"kIncohUpsilonToMu", 4, 553013, 20, -1.0, -1.0, 553, 0 }, // {"kIncohUpsilonToEl", 4, 553011, 20, -1.0, -1.0, 553, 0 }, // - {"kDpmjetSingle", 5, 113, 20, -1.0, -1.0, -1, 0 }, // + {"kDpmjetSingleA", 5, 113, 20, -1.0, -1.0, -1, 0 }, // + {"kDpmjetSingleC", 5, 113, 20, -1.0, -1.0, -1, 0 }, // {"kTauLowToEl3Pi", 1, 15, 990, 3.5, 20.0, -1, 1 }, // from 0.4 to 15 GeV {"kTauLowToPo3Pi", 1, 15, 990, 3.5, 20.0, -1, 1 }, // from 0.4 to 15 GeV {"kTauLowToElMu", 1, 15, 990, 3.5, 20.0, -1, 1 }, // from 0.4 to 15 GeV @@ -292,7 +293,7 @@ class GeneratorStarlight_class : public Generator -1, slPart->GetPx(), slPart->GetPy(), - slPart->GetPz(), + (mSelectedConfiguration.compare("kDpmjetSingleC") == 0 ? -1.0*slPart->GetPz() : slPart->GetPz()), slPart->GetE(), vtx,vty,vtz,vtt); //particle.Print(); diff --git a/MC/config/PWGUD/ini/makeStarlightConfig.py b/MC/config/PWGUD/ini/makeStarlightConfig.py index 7d941e463..b067d6501 100755 --- a/MC/config/PWGUD/ini/makeStarlightConfig.py +++ b/MC/config/PWGUD/ini/makeStarlightConfig.py @@ -17,7 +17,7 @@ parser.add_argument('--rapidity', default='cent', choices=['cent_rap', 'muon_rap', 'cent_eta', 'muon_eta'], help='Rapidity to select') -parser.add_argument('--process',default=None, choices=['kTwoGammaToMuLow', 'kTwoGammaToElLow', 'kTwoGammaToMuMedium', 'kTwoGammaToElMedium', 'kTwoGammaToMuHigh', 'kTwoGammaToElHigh', 'kTwoGammaToRhoRho', 'kTwoGammaToF2', 'kCohRhoToPi', 'kCohRhoToElEl', 'kCohRhoToMuMu', 'kCohRhoToPiWithCont', 'kCohRhoToPiFlat', 'kCohPhiToKa', 'kDirectPhiToKaKa', 'kCohPhiToEl', 'kCohOmegaTo2Pi', 'kCohOmegaTo3Pi', 'kCohOmegaToPiPiPi', 'kCohRhoPrimeTo4Pi', 'kCohJpsiToMu', 'kCohJpsiToEl', 'kCohJpsiToElRad', 'kCohJpsiToProton', 'kCohPsi2sToMu','kCohPsi2sToEl', 'kCohPsi2sToMuPi', 'kCohPsi2sToElPi', 'kCohUpsilonToMu', 'kCohUpsilonToEl', 'kIncohRhoToPi', 'kIncohRhoToElEl', 'kIncohRhoToMuMu', 'kIncohRhoToPiWithCont', 'kIncohRhoToPiFlat', 'kIncohPhiToKa', 'kIncohOmegaTo2Pi', 'kIncohOmegaTo3Pi', 'kIncohOmegaToPiPiPi', 'kIncohRhoPrimeTo4Pi', 'kIncohJpsiToMu', 'kIncohJpsiToEl', 'kIncohJpsiToElRad', 'kIncohJpsiToProton', 'kIncohJpsiToLLbar', 'kIncohPsi2sToMu', 'kIncohPsi2sToEl', 'kIncohPsi2sToMuPi', 'kIncohPsi2sToElPi', 'kIncohUpsilonToMu', 'kIncohUpsilonToEl', 'kDpmjetSingle', 'kTauLowToEl3Pi', 'kTauLowToPo3Pi', 'kTauMediumToEl3Pi', 'kTauMediumToPo3Pi', 'kTauHighToEl3Pi', 'kTauHighToPo3Pi', 'kTauLowToElMu', 'kTauLowToElPiPi0', 'kTauLowToPoPiPi0'], +parser.add_argument('--process',default=None, choices=['kTwoGammaToMuLow', 'kTwoGammaToElLow', 'kTwoGammaToMuMedium', 'kTwoGammaToElMedium', 'kTwoGammaToMuHigh', 'kTwoGammaToElHigh', 'kTwoGammaToRhoRho', 'kTwoGammaToF2', 'kCohRhoToPi', 'kCohRhoToElEl', 'kCohRhoToMuMu', 'kCohRhoToPiWithCont', 'kCohRhoToPiFlat', 'kCohPhiToKa', 'kDirectPhiToKaKa', 'kCohPhiToEl', 'kCohOmegaTo2Pi', 'kCohOmegaTo3Pi', 'kCohOmegaToPiPiPi', 'kCohRhoPrimeTo4Pi', 'kCohJpsiToMu', 'kCohJpsiToEl', 'kCohJpsiToElRad', 'kCohJpsiToProton', 'kCohPsi2sToMu','kCohPsi2sToEl', 'kCohPsi2sToMuPi', 'kCohPsi2sToElPi', 'kCohUpsilonToMu', 'kCohUpsilonToEl', 'kIncohRhoToPi', 'kIncohRhoToElEl', 'kIncohRhoToMuMu', 'kIncohRhoToPiWithCont', 'kIncohRhoToPiFlat', 'kIncohPhiToKa', 'kIncohOmegaTo2Pi', 'kIncohOmegaTo3Pi', 'kIncohOmegaToPiPiPi', 'kIncohRhoPrimeTo4Pi', 'kIncohJpsiToMu', 'kIncohJpsiToEl', 'kIncohJpsiToElRad', 'kIncohJpsiToProton', 'kIncohJpsiToLLbar', 'kIncohPsi2sToMu', 'kIncohPsi2sToEl', 'kIncohPsi2sToMuPi', 'kIncohPsi2sToElPi', 'kIncohUpsilonToMu', 'kIncohUpsilonToEl', 'kDpmjetSingleA', 'kDpmjetSingleC', 'kTauLowToEl3Pi', 'kTauLowToPo3Pi', 'kTauMediumToEl3Pi', 'kTauMediumToPo3Pi', 'kTauHighToEl3Pi', 'kTauHighToPo3Pi', 'kTauLowToElMu', 'kTauLowToElPiPi0', 'kTauLowToPoPiPi0'], help='Process to switch on')