From cbcccd22812b75c5f72623006ca90f074641f9e1 Mon Sep 17 00:00:00 2001 From: Felix Riehn <felix@matilda> Date: Wed, 26 Dec 2018 22:47:03 +0000 Subject: [PATCH] repaired interface to sibyll decay routine to properly pass particle masses, added positrons as EM particle to EMCut --- Documentation/Examples/cascade_example.cc | 3 +++ Processes/Sibyll/Decay.h | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc index f6d04cfaf..101aa15ee 100644 --- a/Documentation/Examples/cascade_example.cc +++ b/Documentation/Examples/cascade_example.cc @@ -75,6 +75,9 @@ public: case Code::Electron: is_em = true; break; + case Code::Positron: + is_em = true; + break; case Code::Gamma: is_em = true; break; diff --git a/Processes/Sibyll/Decay.h b/Processes/Sibyll/Decay.h index 93516c141..19f270eb2 100644 --- a/Processes/Sibyll/Decay.h +++ b/Processes/Sibyll/Decay.h @@ -132,9 +132,15 @@ namespace corsika::process { corsika::particles::GetLifetime(p.GetPID()); auto const lifetime = gamma * t0; + const auto mkin = (E * E - p.GetMomentum().squaredNorm());//delta_mass(p.GetMomentum(), E, m); cout << "Decay: code: " << p.GetPID() << endl; cout << "Decay: MinStep: t0: " << t0 << endl; cout << "Decay: MinStep: energy: " << E / 1_GeV << " GeV" << endl; + cout << "Decay: momentum: " << p.GetMomentum().GetComponents() / 1_GeV << " GeV" << endl; + cout << "Decay: momentum: shell mass-kin. inv. mass " << mkin / 1_GeV / 1_GeV << " " << m / 1_GeV*m / 1_GeV << endl; + //cout << "Decay: sib mass: " << s_mass1_.am2[ process::sibyll::ConvertToSibyllRaw(p.GetPID()) ] << endl; + auto sib_id = process::sibyll::ConvertToSibyllRaw(p.GetPID()); + cout << "Decay: sib mass: " << get_sibyll_mass2( sib_id ) << endl; cout << "Decay: MinStep: gamma: " << gamma << endl; cout << "Decay: MinStep: tau: " << lifetime << endl; @@ -154,10 +160,13 @@ namespace corsika::process { pin.SetPID(process::sibyll::ConvertToSibyllRaw(pCode)); pin.SetEnergy(p.GetEnergy()); pin.SetMomentum(p.GetMomentum()); + // setting particle mass with Corsika values, may be inconsistent with sibyll internal values +#warning setting particle mass with Corsika values, may be inconsistent with sibyll internal values + pin.SetMass( corsika::particles::GetMass( pCode ) ); // remember position Point decayPoint = p.GetPosition(); TimeType t0 = p.GetTime(); - // remove original particle from corsika stack + // remove original particle from corsika stack p.Delete(); // set all particles/hadrons unstable // setHadronsUnstable(); @@ -170,15 +179,12 @@ namespace corsika::process { // print output int print_unit = 6; sib_list_(print_unit); + // copy particles from sibyll stack to corsika - int i = -1; for (auto& psib : ss) { - ++i; // FOR NOW: skip particles that have decayed in Sibyll, move to iterator? - if (abs(s_plist_.llist[i]) > 100) continue; + if ( psib.HasDecayed() ) continue; // add to corsika stack - // cout << "decay product: " << process::sibyll::ConvertFromSibyll( - // psib.GetPID() ) << endl; auto pnew = s.NewParticle(); pnew.SetEnergy(psib.GetEnergy()); pnew.SetPID(process::sibyll::ConvertFromSibyll(psib.GetPID())); -- GitLab