diff --git a/sim/transport/steer/CbmTransport.cxx b/sim/transport/steer/CbmTransport.cxx index 3fc33fbc3e951e1a67f557d488f8939e0bd7cbd8..79f6b510fda5b601d70ed7c53545b0d9192dcf03 100644 --- a/sim/transport/steer/CbmTransport.cxx +++ b/sim/transport/steer/CbmTransport.cxx @@ -167,13 +167,17 @@ void CbmTransport::ConfigureVMC() LOG(info) << GetName() << ": Create TGeant3"; vmc = new TGeant3("C++ Interface to Geant3"); } //? Native Geant3 - if (!fGeant3Settings) { fGeant3Settings = new CbmGeant3Settings(); } + if (!fGeant3Settings) { + fGeant3Settings = new CbmGeant3Settings(); + } fGeant3Settings->Init(vmc); } //? Geant3 else if (fEngine == kGeant4) { LOG(info) << GetName() << ": Create TGeant4"; - if (!fGeant4Settings) { fGeant4Settings = new CbmGeant4Settings(); } + if (!fGeant4Settings) { + fGeant4Settings = new CbmGeant4Settings(); + } std::array<std::string, 3> runConfigSettings = fGeant4Settings->GetG4RunConfig(); TG4RunConfiguration* runConfig = new TG4RunConfiguration(runConfigSettings[0], runConfigSettings[1], runConfigSettings[2]); @@ -369,7 +373,7 @@ void CbmTransport::RegisterIons() stable = kTRUE; charge = 2.; pdgdb->AddParticle(name, name, mass, stable, 0., charge, "Ion", code); - pdgdb->AddAntiParticle("He3-", -1 * code); + pdgdb->AddAntiParticle("He4-", -1 * code); } // -------------------------------------------------------------------------- @@ -394,7 +398,7 @@ void CbmTransport::PiAndEtaDecay(TVirtualMC* vmc) { assert(vmc); - LOG(info) << GetName() << ": Set decay modes for pi0 and eta"; + LOG(info) << GetName() << ": Set decay modes for pi0, eta, Hypernuclei and Open Charm"; if (fEngine == kGeant4) { std::cout << std::endl << std::endl; @@ -407,6 +411,374 @@ void CbmTransport::PiAndEtaDecay(TVirtualMC* vmc) std::cout << std::endl << std::endl; return; } + Double_t lifetime = 1.85e-10; // lifetime 3HL + Double_t mass = 2.99339; + Int_t PDG = 3004; + Double_t charge = 1.; + + TVirtualMC::GetMC()->DefineParticle(PDG, "H3L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + Int_t mode[6][3]; + Float_t bratio[6]; + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000020030; //3He + mode[0][1] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 2.632e-10; // lifetime NL + mass = 2.046; + PDG = 3003; + charge = 0.; + + TVirtualMC::GetMC()->DefineParticle(PDG, "LambdaN", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, + 0, 0, 1, kFALSE); + + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000010020; //d + mode[0][1] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + lifetime = 1.80e-10; // lifetime 4HL + mass = 3.92975; + PDG = 3005; + charge = 1.; + + TVirtualMC::GetMC()->DefineParticle(PDG, "H4L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000020040; //4He + mode[0][1] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 1.50e-10; // lifetime 4HeL + mass = 3.93070; + PDG = 3006; + charge = 2.; + + TVirtualMC::GetMC()->DefineParticle(PDG, "He4L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, + 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000020030; //3He + mode[0][1] = 2212; //proton + mode[0][2] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 1.85e-10; // lifetime 3HL->d p pi + mass = 2.99339; + PDG = 3012; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "H3L_{dppi}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, + 1, 0, 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000010020; //d + mode[0][1] = 2212; //proton + mode[0][2] = -211; //pi- + // mode[0][0] = 3003; //LambdaN + // mode[0][1] = 2212; //proton + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 2.632e-10; // lifetime 5HeL->4He p pi + mass = 4.8393; + PDG = 3007; + charge = 2.; + TVirtualMC::GetMC()->DefineParticle(PDG, "He5L", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, + 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000020040; //4He + mode[0][1] = 2212; //proton + mode[0][2] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 2.632e-10; // lifetime 4HLL_2body + mass = 4.10791; + PDG = 3008; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "H4LL_{He4Lpi-}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, + 1, 1, 0, 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 3006; //4HeL + mode[0][1] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 2.632e-10; // lifetime 4HLL_3body + mass = 4.10791; + PDG = 3009; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "H4LL_{H3Lppi-}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, + 1, 1, 0, 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 3004; //3HL + mode[0][1] = 2212; //p + mode[0][2] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + + lifetime = 2.632e-10; // lifetime 5HLL + mass = 5.04748; + PDG = 3010; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "H5LL_{He5Lpi-}", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, + 1, 1, 0, 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 3007; //5HeL + mode[0][1] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + + lifetime = 2.632e-10; // lifetime 6HeLL + mass = 5.98575; + PDG = 3011; + charge = 2.; + TVirtualMC::GetMC()->DefineParticle(PDG, "He6LL", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, + 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 3007; //5HeL + mode[0][1] = 2212; //proton + mode[0][2] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + // charm ********************************************************************************************************************** + lifetime = 4.1e-13; // lifetime D0 -> K- pi + mass = 1.86486; + PDG = 421; + charge = 0.; + TVirtualMC::GetMC()->DefineParticle(PDG, "D0", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = -321; //K- + mode[0][1] = 211; //pi+ + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 4.1e-13; // lifetime D0b -> K+ pi- + mass = 1.86486; + PDG = -421; + charge = 0.; + TVirtualMC::GetMC()->DefineParticle(PDG, "D0b", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 321; //K+ + mode[0][1] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 2.0e-13; // lifetime Lc -> p K- pi+ + mass = 2.28646; + PDG = 4122; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "Lc", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 2212; //p + mode[0][1] = -321; //K- + mode[0][2] = 211; //pi+ + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 1.04e-12; // lifetime D+ -> K- pi pi + mass = 1.86962; + PDG = 411; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "D+", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = -321; //K- + mode[0][1] = 211; //pi+ + mode[0][2] = 211; //pi+ + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 1.04e-12; // lifetime D- -> K pi- pi- + mass = 1.86962; + PDG = -411; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "D-", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 321; //K+ + mode[0][1] = -211; //pi- + mode[0][2] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + + lifetime = 5.0e-13; // lifetime Ds+ -> K- K+ pi+ + mass = 1.96850; + PDG = 431; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "Ds+", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = -321; //K- + mode[0][1] = 321; //K+ + mode[0][2] = 211; //pi+ + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + lifetime = 5.0e-13; // lifetime Ds- -> K- K+ pi- + mass = 1.96850; + PDG = -431; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "Ds-", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, 0, + 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = -321; //K- + mode[0][1] = 321; //K+ + mode[0][2] = -211; //pi- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + + // end charm ********************************************************************************************************************** + + + lifetime = 1.55e-22; // lifetime 5HeD->4He K pi- pi- + mass = 5.5809994; + PDG = 4006; + charge = 1.; + TVirtualMC::GetMC()->DefineParticle(PDG, "He5D", kPTHadron, mass, charge, lifetime, "hadron", 0.0, 1, 1, 0, 1, 1, 0, + 0, 1, kFALSE); + + for (Int_t kz = 0; kz < 6; kz++) { + bratio[kz] = 0.; + mode[kz][0] = 0; + mode[kz][1] = 0; + mode[kz][2] = 0; + } + bratio[0] = 100.; + mode[0][0] = 1000020040; //4He + mode[0][1] = -411; //D- + + TVirtualMC::GetMC()->SetDecayMode(PDG, bratio, mode); + TGeant3* gMC3 = static_cast<TGeant3*>(vmc); assert(vmc); @@ -472,22 +844,26 @@ void CbmTransport::Run(Int_t nEvents) // Get the minimum number of events from all file based generators // Set the number of events to process to this minimum number of events - Int_t numAvailEvents {0}; - Int_t numMinAvailEvents {INT_MAX}; + Int_t numAvailEvents{0}; + Int_t numMinAvailEvents{INT_MAX}; TObjArray* genList = fEventGen->GetListOfGenerators(); for (Int_t i = 0; i < genList->GetEntries(); i++) { CbmUnigenGenerator* gen = dynamic_cast<CbmUnigenGenerator*>(genList->At(i)); if (gen) { numAvailEvents = gen->GetNumAvailableEvents(); if (nEvents > numAvailEvents) { - if (numAvailEvents < numMinAvailEvents) { numMinAvailEvents = numAvailEvents; } + if (numAvailEvents < numMinAvailEvents) { + numMinAvailEvents = numAvailEvents; + } } } CbmPlutoGenerator* pgen = dynamic_cast<CbmPlutoGenerator*>(genList->At(i)); if (pgen) { numAvailEvents = pgen->GetNumAvailableEvents(); if (nEvents > numAvailEvents) { - if (numAvailEvents < numMinAvailEvents) { numMinAvailEvents = numAvailEvents; } + if (numAvailEvents < numMinAvailEvents) { + numMinAvailEvents = numAvailEvents; + } } } }