From db64dd187b74c2451f4b251341041af6d2009d1a Mon Sep 17 00:00:00 2001 From: Felix Riehn <friehn@lip.pt> Date: Wed, 31 Jul 2024 16:26:39 +0200 Subject: [PATCH] switch to nucleon-nucleon frame --- .../detail/modules/pythia8/Interaction.inl | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/corsika/detail/modules/pythia8/Interaction.inl b/corsika/detail/modules/pythia8/Interaction.inl index 01e88c6d2..470cc66b2 100644 --- a/corsika/detail/modules/pythia8/Interaction.inl +++ b/corsika/detail/modules/pythia8/Interaction.inl @@ -46,11 +46,11 @@ namespace corsika::pythia8 { pythia_.settings.mode("Beams:idA", static_cast<PDGCodeIntType>(get_PDG(Code::Proton))); pythia_.settings.mode("Beams:idB", - static_cast<PDGCodeIntType>(get_PDG(Code::Nitrogen))); + static_cast<PDGCodeIntType>(get_PDG(Code::Oxygen))); pythia_.readString("Beams:allowVariableEnergy = on"); pythia_.readString("Beams:frameType = 1"); // CoM - pythia_.settings.parm("Beams:eCM", 10000.); + pythia_.settings.parm("Beams:eCM", 400_TeV/1_GeV); // needed when regular Pythia (not Angantyr) takes over for pp pythia_.readString("SoftQCD:all = on"); @@ -74,7 +74,7 @@ namespace corsika::pythia8 { pythia_.readString("HadronLevel:Decay = off"); // Reduce printout and relax energy-momentum conservation. - pythia_.readString("Print:quiet = on"); + //pythia_.readString("Print:quiet = on"); pythia_.readString("Check:epTolErr = 0.1"); pythia_.readString("Check:epTolWarn = 0.0001"); pythia_.readString("Check:mTolErr = 0.01"); @@ -218,12 +218,12 @@ namespace corsika::pythia8 { projectileId, corsika::pythia8::Interaction::canInteract(projectileId)); // define system (this is Nucleus-Nucleus!!) - auto const sqrtS2 = (projectileP4 + targetP4).getNormSqr(); - HEPEnergyType const sqrtS = sqrt(sqrtS2); + auto const sqrtS2NN = (projectileP4 + targetP4/get_nucleus_A(targetId)).getNormSqr(); + HEPEnergyType const sqrtSNN = sqrt(sqrtS2NN); HEPEnergyType const eProjectileLab = - calculate_lab_energy(sqrtS2, get_mass(projectileId), get_mass(targetId)); + calculate_lab_energy(sqrtS2NN, get_mass(projectileId), get_mass(targetId)/get_nucleus_A(targetId)); - if (!isValid(projectileId, targetId, sqrtS)) { + if (!isValid(projectileId, targetId, sqrtSNN)) { throw std::runtime_error("invalid target,projectile,energy combination."); } @@ -231,8 +231,8 @@ namespace corsika::pythia8 { CORSIKA_LOG_DEBUG( "Interaction: " " doInteraction: E(GeV): {}" - " Ecm(GeV): {}", - eProjectileLab / 1_GeV, sqrtS / 1_GeV); + " Ecm_NN(GeV): {}", + eProjectileLab / 1_GeV, sqrtSNN / 1_GeV); COMBoost const labFrameBoost{targetP4.getSpaceLikeComponents(), get_mass(targetId)}; // auto const proj4MomLab = labFrameBoost.toCoM(projectileP4); @@ -241,9 +241,10 @@ namespace corsika::pythia8 { // variables to talk to Pythia double const eCM_pythia = - sqrtS / 1_GeV; // CoM energy hadron-Nucleus or Nucleus-Nucleus - double const idA_pythia = static_cast<int>(get_PDG(projectileId)); - double const idB_pythia = static_cast<int>(get_PDG(targetId)); + sqrtSNN / 1_GeV; // CoM energy hadron-Nucleon + double const idA_pythia = static_cast<double>(get_PDG(projectileId)); + double const idB_pythia = static_cast<double>(get_PDG(targetId)); + CORSIKA_LOG_INFO("re-configuring pythia idA={}, idB={}, ecm={} GeV", idA_pythia, idB_pythia, eCM_pythia); // configure event pythia_.setBeamIDs(idA_pythia, idB_pythia); pythia_.setKinematics(eCM_pythia); -- GitLab