44 , theTransport(nullptr), theHighEnergyGenerator(nullptr)
45 , theQuasielastic(nullptr)
46 , theCosmicCoalescence(nullptr)
47 , theStringModelID(-1)
61 <<
" string model and a stage to de-excite the excited nuclear fragment.\n<p>"
62 <<
"The string model simulates the interaction of\n"
63 <<
"an incident hadron with a nucleus, forming \n"
64 <<
"excited strings, decays these strings into hadrons,\n"
65 <<
"and leaves an excited nucleus. \n"
66 <<
"<p>The string model:\n";
88 if ( thePrimary.
GetKineticEnergy() < energyThresholdForCharmAndBottomHadrons &&
112 for(
auto & ptr : *result)
116 ptr->Get4Momentum().e(),
117 ptr->Get4Momentum().vect());
138 for (
auto & ptr : *theInitialResult ) {
143 #ifdef DEBUG_initial_result
146 for(
auto & ptr : *theInitialResult)
150 E_out += ptr->Get4Momentum().e();
158 G4int resZ(0),resA(0);
160 for(
auto &
nuc : thy)
162 if(
nuc.AreYouHit()) {
177 G4double E_excit=init_mass + init_E - final_mass - E_out;
178 G4cout <<
" Corrected delta mass " << init_mass - final_mass - delta_m <<
G4endl;
179 G4cout <<
"initial E, mass = " << init_E <<
", " << init_mass <<
G4endl;
180 G4cout <<
" final E, mass = " << E_out <<
", " << final_mass <<
" excitation_E " << E_excit <<
G4endl;
187 if(theProjectileNucleus ==
nullptr)
191 for(
auto &
nuc : they)
193 if(
nuc.AreYouHit()) ++hitCount;
201 if ( !theTransportResult ) {
202 G4cout <<
"G4TheoFSGenerator: null ptr from transport propagate " <<
G4endl;
210 if ( theTransportResult ==
nullptr ) {
211 G4cout <<
"G4TheoFSGenerator: null ptr from decay propagate " <<
G4endl;
221 theProjectileNucleus);
222 if ( !theTransportResult ) {
223 G4cout <<
"G4TheoFSGenerator: null ptr from transport propagate " <<
G4endl;
245 for(
auto & ptr : *theTransportResult)
249 ptr->GetTotalEnergy(),
253 aNew.
SetTime(timePrimary + time);
260 delete theTransportResult;
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4GLOB_DLL std::ostream G4cout
void GenerateDeuterons(G4ReactionProductVector *result)
void SetP0Coalescence(const G4HadProjectile &thePrimary, G4String)
G4ReactionProductVector * Propagate(G4KineticTrackVector *theSecondaries, G4V3DNucleus *)
G4LorentzVector Get4Momentum() const
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4double GetGlobalTime() const
void SetTime(G4double aT)
void SetCreatorModelID(G4int id)
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
virtual std::pair< G4double, G4double > GetEnergyMomentumCheckLevels() const
const G4String & GetModelName() const
static G4HadronicParameters * Instance()
G4double GetIonMass(G4int Z, G4int A, G4int nL=0, G4int lvl=0) const
G4int GetQuarkContent(G4int flavor) const
G4int GetAntiQuarkContent(G4int flavor) const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4int GetModelID(const G4int modelIndex)
static G4Proton * Proton()
G4KineticTrackVector * Scatter(G4Nucleus &theNucleus, const G4DynamicParticle &thePrimary)
G4double GetFraction(G4Nucleus &theNucleus, const G4DynamicParticle &thePrimary)
G4CRCoalescence * theCosmicCoalescence
G4VHighEnergyGenerator * theHighEnergyGenerator
G4TheoFSGenerator(const G4String &name="TheoFSGenerator")
G4QuasiElasticChannel * theQuasielastic
G4VIntraNuclearTransportModel * theTransport
std::pair< G4double, G4double > GetEnergyMomentumCheckLevels() const override
G4HadFinalState * theParticleChange
G4HadFinalState * ApplyYourself(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus) override
void ModelDescription(std::ostream &outFile) const override
~G4TheoFSGenerator() override
G4DecayStrongResonances theDecay
virtual const std::vector< G4Nucleon > & GetNucleons()=0
virtual G4int GetMassNumber()=0
void ModelDescription(std::ostream &) const override
virtual G4V3DNucleus * GetProjectileNucleus() const
virtual G4V3DNucleus * GetWoundedNucleus() const =0
virtual G4KineticTrackVector * Scatter(const G4Nucleus &theNucleus, const G4DynamicParticle &thePrimary)=0
virtual G4ReactionProductVector * PropagateNuclNucl(G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus, G4V3DNucleus *theProjectileNucleus)
void SetPrimaryProjectile(const G4HadProjectile &aPrimary)
virtual void PropagateModelDescription(std::ostream &outFile) const
virtual G4ReactionProductVector * Propagate(G4KineticTrackVector *theSecondaries, G4V3DNucleus *theNucleus)=0
static constexpr double proton_mass_c2
static constexpr double neutron_mass_c2
static constexpr double MeV
T max(const T t1, const T t2)
brief Return the largest of the two arguments
const char * name(G4int ptype)