Geant4-11
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
G4BinaryLightIonReaction Class Reference

#include <G4BinaryLightIonReaction.hh>

Inheritance diagram for G4BinaryLightIonReaction:
G4HadronicInteraction

Public Member Functions

void ActivateFor (const G4Element *anElement)
 
void ActivateFor (const G4Material *aMaterial)
 
G4HadFinalStateApplyYourself (const G4HadProjectile &aTrack, G4Nucleus &theNucleus)
 
virtual void BuildPhysicsTable (const G4ParticleDefinition &)
 
void DeActivateFor (const G4Element *anElement)
 
void DeActivateFor (const G4Material *aMaterial)
 
 G4BinaryLightIonReaction (G4VPreCompoundModel *ptr=0)
 
virtual std::pair< G4double, G4doubleGetEnergyMomentumCheckLevels () const
 
virtual const std::pair< G4double, G4doubleGetFatalEnergyCheckLevels () const
 
G4double GetMaxEnergy () const
 
G4double GetMaxEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
G4double GetMinEnergy () const
 
G4double GetMinEnergy (const G4Material *aMaterial, const G4Element *anElement) const
 
const G4StringGetModelName () const
 
G4double GetRecoilEnergyThreshold () const
 
G4int GetVerboseLevel () const
 
virtual void InitialiseModel ()
 
virtual G4bool IsApplicable (const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
G4bool IsBlocked (const G4Element *anElement) const
 
G4bool IsBlocked (const G4Material *aMaterial) const
 
virtual void ModelDescription (std::ostream &) const
 
G4bool operator!= (const G4HadronicInteraction &right) const =delete
 
G4bool operator== (const G4HadronicInteraction &right) const =delete
 
virtual G4double SampleInvariantT (const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A)
 
void SetDeExcitation (G4ExcitationHandler *ptr)
 
void SetEnergyMomentumCheckLevels (G4double relativeLevel, G4double absoluteLevel)
 
void SetMaxEnergy (const G4double anEnergy)
 
void SetMaxEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMaxEnergy (G4double anEnergy, const G4Material *aMaterial)
 
void SetMinEnergy (G4double anEnergy)
 
void SetMinEnergy (G4double anEnergy, const G4Element *anElement)
 
void SetMinEnergy (G4double anEnergy, const G4Material *aMaterial)
 
void SetPrecompound (G4VPreCompoundModel *ptr)
 
void SetRecoilEnergyThreshold (G4double val)
 
void SetVerboseLevel (G4int value)
 
virtual ~G4BinaryLightIonReaction ()
 

Protected Member Functions

void Block ()
 
G4bool IsBlocked () const
 
void SetModelName (const G4String &nam)
 

Protected Attributes

G4bool isBlocked
 
G4double theMaxEnergy
 
G4double theMinEnergy
 
G4HadFinalState theParticleChange
 
G4int verboseLevel
 

Private Member Functions

void DeExciteSpectatorNucleus (G4ReactionProductVector *spectators, G4ReactionProductVector *cascaders, G4double theStatisticalExEnergy, G4LorentzVector &momentum)
 
G4bool EnergyAndMomentumCorrector (G4ReactionProductVector *products, G4LorentzVector &TotalCollisionMom)
 
G4ReactionProductVectorFuseNucleiAndPrompound (const G4LorentzVector &mom)
 
G4double GetProjectileExcitation ()
 
G4ReactionProductVectorInteract (G4LorentzVector &mom, const G4LorentzRotation &)
 
G4bool SetLighterAsProjectile (G4LorentzVector &mom, const G4LorentzRotation &toBreit)
 
G4LorentzVector SortResult (G4ReactionProductVector *result, G4ReactionProductVector *spectators, G4ReactionProductVector *cascaders)
 

Private Attributes

G4bool debug_G4BinaryLightIonReactionResults
 
std::pair< G4double, G4doubleepCheckLevels
 
G4int pA
 
G4LorentzVector pFinalState
 
G4LorentzVector pInitialState
 
G4Fancy3DNucleusprojectile3dNucleus
 
G4int pZ
 
G4double recoilEnergyThreshold
 
G4HadronicInteractionRegistryregistry
 
G4int spectatorA
 
G4int spectatorZ
 
G4int tA
 
G4Fancy3DNucleustarget3dNucleus
 
std::vector< const G4Material * > theBlockedList
 
std::vector< const G4Element * > theBlockedListElements
 
G4FermiMomentum theFermi
 
G4ExcitationHandlertheHandler
 
std::vector< std::pair< G4double, const G4Material * > > theMaxEnergyList
 
std::vector< std::pair< G4double, const G4Element * > > theMaxEnergyListElements
 
std::vector< std::pair< G4double, const G4Material * > > theMinEnergyList
 
std::vector< std::pair< G4double, const G4Element * > > theMinEnergyListElements
 
G4BinaryCascadetheModel
 
G4String theModelName
 
G4VPreCompoundModeltheProjectileFragmentation
 
G4HadFinalState theResult
 
G4int tZ
 

Static Private Attributes

static G4int theBLIR_ID = -1
 

Detailed Description

Definition at line 34 of file G4BinaryLightIonReaction.hh.

Constructor & Destructor Documentation

◆ G4BinaryLightIonReaction()

G4BinaryLightIonReaction::G4BinaryLightIonReaction ( G4VPreCompoundModel ptr = 0)

Definition at line 54 of file G4BinaryLightIonReaction.cc.

55: G4HadronicInteraction("Binary Light Ion Cascade"),
57 pA(0),pZ(0), tA(0),tZ(0),spectatorA(0),spectatorZ(0),
59{
60 if(!ptr) {
63 G4VPreCompoundModel* pre = static_cast<G4VPreCompoundModel*>(p);
64 if(!pre) { pre = new G4PreCompoundModel(); }
66 }
69 theBLIR_ID = G4PhysicsModelCatalog::GetModelID("model_G4BinaryLightIonReaction");
70 debug_G4BinaryLightIonReactionResults=std::getenv("debug_G4BinaryLightIonReactionResults")!=0;
71}
G4ExcitationHandler * theHandler
G4VPreCompoundModel * theProjectileFragmentation
G4Fancy3DNucleus * projectile3dNucleus
G4HadronicInteraction * FindModel(const G4String &name)
static G4HadronicInteractionRegistry * Instance()
G4HadronicInteraction(const G4String &modelName="HadronicModel")
static G4int GetModelID(const G4int modelIndex)
G4ExcitationHandler * GetExcitationHandler() const

References debug_G4BinaryLightIonReactionResults, G4HadronicInteractionRegistry::FindModel(), G4VPreCompoundModel::GetExcitationHandler(), G4PhysicsModelCatalog::GetModelID(), G4HadronicInteractionRegistry::Instance(), theBLIR_ID, theHandler, theModel, and theProjectileFragmentation.

◆ ~G4BinaryLightIonReaction()

G4BinaryLightIonReaction::~G4BinaryLightIonReaction ( )
virtual

Definition at line 73 of file G4BinaryLightIonReaction.cc.

74{}

Member Function Documentation

◆ ActivateFor() [1/2]

void G4HadronicInteraction::ActivateFor ( const G4Element anElement)
inlineinherited

◆ ActivateFor() [2/2]

void G4HadronicInteraction::ActivateFor ( const G4Material aMaterial)
inlineinherited

◆ ApplyYourself()

G4HadFinalState * G4BinaryLightIonReaction::ApplyYourself ( const G4HadProjectile aTrack,
G4Nucleus theNucleus 
)
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 91 of file G4BinaryLightIonReaction.cc.

93{
94 if(std::getenv("BLICDEBUG") ) G4cerr << " ######### Binary Light Ion Reaction starts ######### " << G4endl;
95 G4ping debug("debug_G4BinaryLightIonReaction");
98 tA=targetNucleus.GetA_asInt();
99 tZ=targetNucleus.GetZ_asInt();
100 G4double timePrimary = aTrack.GetGlobalTime();
101 G4LorentzVector mom(aTrack.Get4Momentum());
102 //G4cout << "proj mom : " << mom << G4endl;
103 G4LorentzRotation toBreit(mom.boostVector());
104
105 G4bool swapped=SetLighterAsProjectile(mom, toBreit);
106 //G4cout << "after swap, swapped? / mom " << swapped << " / " << mom <<G4endl;
107 G4ReactionProductVector * result = 0;
108 G4ReactionProductVector * cascaders=0; //new G4ReactionProductVector;
109// G4double m_nucl(0); // to check energy balance
110
111
112 // G4double m1=G4ParticleTable::GetParticleTable()->GetIonTable()->GetIonMass(pZ,pA);
113 // G4cout << "Entering the decision point "
114 // << (mom.t()-mom.mag())/pA << " "
115 // << pA<<" "<< pZ<<" "
116 // << tA<<" "<< tZ<<G4endl
117 // << " "<<mom.t()-mom.mag()<<" "
118 // << mom.t()- m1<<G4endl;
119 if( (mom.t()-mom.mag())/pA < 50*MeV )
120 {
121 // G4cout << "Using pre-compound only, E= "<<mom.t()-mom.mag()<<G4endl;
122 // m_nucl = mom.mag();
123 cascaders=FuseNucleiAndPrompound(mom);
124 if( !cascaders )
125 {
126
127 // abort!! happens for too low energy for nuclei to fuse
128
133 return &theResult;
134 }
135 }
136 else
137 {
138 result=Interact(mom,toBreit);
139
140 if(! result )
141 {
142 // abort!!
143
144 G4cerr << "G4BinaryLightIonReaction no final state for: " << G4endl;
145 G4cerr << " Primary " << aTrack.GetDefinition()
146 << ", (A,Z)=(" << aTrack.GetDefinition()->GetBaryonNumber()
147 << "," << aTrack.GetDefinition()->GetPDGCharge()/eplus << ") "
148 << ", kinetic energy " << aTrack.GetKineticEnergy()
149 << G4endl;
150 G4cerr << " Target nucleus (A,Z)=("
151 << (swapped?pA:tA) << ","
152 << (swapped?pZ:tZ) << ")" << G4endl;
153 G4cerr << " if frequent, please submit above information as bug report"
154 << G4endl << G4endl;
155
160 return &theResult;
161 }
162
163 // Calculate excitation energy,
164 G4double theStatisticalExEnergy = GetProjectileExcitation();
165
166
167 pInitialState = mom;
168 //G4cout << "BLIC: pInitialState from aTrack : " << pInitialState;
171 //G4cout << "BLIC: target nucleus added : " << pInitialState << G4endl;
172
175
177
178 cascaders = new G4ReactionProductVector;
179
180 G4LorentzVector pspectators=SortResult(result,spectators,cascaders);
181 // this also sets spectatorA and spectatorZ
182
183 // pFinalState=std::accumulate(cascaders->begin(),cascaders->end(),pFinalState,ReactionProduct4Mom);
184
185 std::vector<G4ReactionProduct *>::iterator iter;
186
187 // G4cout << "pInitialState, pFinalState / pspectators"<< pInitialState << " / " << pFinalState << " / " << pspectators << G4endl;
188 // if ( spectA-spectatorA !=0 || spectZ-spectatorZ !=0)
189 // {
190 // G4cout << "spect Nucl != spectators: nucl a,z; spect a,z" <<
191 // spectatorA <<" "<< spectatorZ <<" ; " << spectA <<" "<< spectZ << G4endl;
192 // }
193 delete result;
194 result=0;
196 G4int loopcount(0);
197 //G4cout << "BLIC: momentum, pspectators : " << momentum << " / " << pspectators << G4endl;
198 while (std::abs(momentum.e()-pspectators.e()) > 10*MeV) /* Loop checking, 31.08.2015, G.Folger */
199 // see if on loopcount
200 {
201 G4LorentzVector pCorrect(pInitialState-pspectators);
202 //G4cout << "BLIC:: BIC nonconservation? (pInitialState-pFinalState) / spectators :" << momentum << " / " << pspectators << "pCorrect "<< pCorrect<< G4endl;
203 // Correct outgoing casacde particles.... to have momentum of (initial state - spectators)
204 G4bool EnergyIsCorrect=EnergyAndMomentumCorrector(cascaders, pCorrect);
205 if ( ! EnergyIsCorrect && debug_G4BinaryLightIonReactionResults)
206 {
207 G4cout << "Warning - G4BinaryLightIonReaction E/P correction for cascaders failed" << G4endl;
208 }
210 for(iter=cascaders->begin(); iter!=cascaders->end(); iter++)
211 {
212 pFinalState += G4LorentzVector( (*iter)->GetMomentum(), (*iter)->GetTotalEnergy() );
213 }
214 momentum=pInitialState-pFinalState;
215 if (++loopcount > 10 )
216 {
217 if ( momentum.vect().mag() - momentum.e()> 10*keV )
218 {
219 G4cerr << "G4BinaryLightIonReaction.cc: Cannot correct 4-momentum of cascade particles" << G4endl;
220 throw G4HadronicException(__FILE__, __LINE__, "G4BinaryCasacde::ApplyCollision()");
221 } else {
222 break;
223 }
224
225 }
226 }
227
228 if (spectatorA > 0 )
229 {
230 // check spectator momentum
231 if ( momentum.vect().mag() - momentum.e()< 10*keV )
232 {
233 // DeExciteSpectatorNucleus() also handles also case of A=1, Z=0,1
234 DeExciteSpectatorNucleus(spectators, cascaders, theStatisticalExEnergy, momentum);
235
236 } else { // momentum non-conservation --> fail
237 for (iter=spectators->begin();iter!=spectators->end();iter++)
238 {
239 delete *iter;
240 }
241 delete spectators;
242 for(iter=cascaders->begin(); iter!=cascaders->end(); iter++)
243 {
244 delete *iter;
245 }
246 delete cascaders;
247
248 G4cout << "G4BinaryLightIonReaction.cc: mom check: " << momentum
249 << " 3.mag "<< momentum.vect().mag() << G4endl
250 << " .. pInitialState/pFinalState/spectators " << pInitialState <<" "
251 << pFinalState << " " << pspectators << G4endl
252 << " .. A,Z " << spectatorA <<" "<< spectatorZ << G4endl;
253 G4cout << "G4BinaryLightIonReaction invalid final state for: " << G4endl;
254 G4cout << " Primary " << aTrack.GetDefinition()
255 << ", (A,Z)=(" << aTrack.GetDefinition()->GetBaryonNumber()
256 << "," << aTrack.GetDefinition()->GetPDGCharge()/eplus << ") "
257 << ", kinetic energy " << aTrack.GetKineticEnergy()
258 << G4endl;
259 G4cout << " Target nucleus (A,Z)=(" << targetNucleus.GetA_asInt()
260 << "," << targetNucleus.GetZ_asInt() << ")" << G4endl;
261 G4cout << " if frequent, please submit above information as bug report"
262 << G4endl << G4endl;
263#ifdef debug_G4BinaryLightIonReaction
265 ed << "G4BinaryLightIonreaction: Terminate for above error" << G4endl;
266 G4Exception("G4BinaryLightIonreaction::ApplyYourSelf()", "BLIC001", FatalException,
267 ed);
268
269#endif
274 return &theResult;
275 }
276 } else { // no spectators
277 delete spectators;
278 }
279 }
280 // Rotate to lab
282 toZ.rotateZ(-1*mom.phi());
283 toZ.rotateY(-1*mom.theta());
284 G4LorentzRotation toLab(toZ.inverse());
285
286 // Fill the particle change, while rotating. Boost from projectile breit-frame in case we swapped.
287 // theResult.Clear();
290 G4LorentzVector ptot(0);
291 G4ReactionProductVector::iterator iter;
292 #ifdef debug_BLIR_result
293 G4LorentzVector p_raw;
294 #endif
295 //G4int i=0;
296
297 for(iter=cascaders->begin(); iter!=cascaders->end(); iter++)
298 {
299 if((*iter)->GetNewlyAdded())
300 {
301 G4DynamicParticle * aNewDP =
302 new G4DynamicParticle((*iter)->GetDefinition(),
303 (*iter)->GetTotalEnergy(),
304 (*iter)->GetMomentum() );
305 G4LorentzVector tmp = aNewDP->Get4Momentum();
306 #ifdef debug_BLIR_result
307 p_raw+= tmp;
308 #endif
309 if(swapped)
310 {
311 tmp*=toBreit.inverse();
312 tmp.setVect(-tmp.vect());
313 }
314 tmp *= toLab;
315 aNewDP->Set4Momentum(tmp);
316 G4HadSecondary aNew = G4HadSecondary(aNewDP);
317 G4double time = 0; //(*iter)->GetCreationTime();
318 //if(time < 0.0) { time = 0.0; }
319 aNew.SetTime(timePrimary + time);
320 //aNew.SetCreatorModelID((*iter)->GetCreatorModelID()); //AR-02Aug2021 : For some reasons, it does NOT work!
322
324 ptot += tmp;
325 //G4cout << "BLIC: Secondary " << aNew->GetDefinition()->GetParticleName()
326 // <<" "<< aNew->GetMomentum()<<" "<< aNew->GetTotalEnergy() << G4endl;
327 }
328 delete *iter;
329 }
330 delete cascaders;
331
332#ifdef debug_BLIR_result
333 //G4cout << "Result analysis, secondaries " << theResult.GetNumberOfSecondaries() << G4endl;
334 //G4cout << "p_tot_raw " << p_raw << " sum p final " << ptot << G4endl;
336 GetIonMass(targetNucleus.GetZ_asInt(),targetNucleus.GetA_asInt());
337 // delete? tZ=targetNucleus.GetZ_asInt();
338
339 //G4cout << "BLIC Energy conservation initial/primary/nucleus/final/delta(init-final) "
340 // << aTrack.GetTotalEnergy() + m_nucl <<" "<< aTrack.GetTotalEnergy() <<" "<< m_nucl <<" "<<ptot.e()
341 // <<" "<< aTrack.GetTotalEnergy() + m_nucl - ptot.e() << G4endl;
342 G4cout << "BLIC momentum conservation " << aTrack.Get4Momentum()+ G4LorentzVector(m_nucl)
343 << " ptot " << ptot << " delta " << aTrack.Get4Momentum()+ G4LorentzVector(m_nucl) - ptot
344 << " 3mom.mag() " << (aTrack.Get4Momentum()+ G4LorentzVector(m_nucl) - ptot).vect().mag() << G4endl;
345#endif
346
347 if(std::getenv("BLICDEBUG") ) G4cerr << " ######### Binary Light Ion Reaction number ends ######### " << G4endl;
348
349 return &theResult;
350}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
@ isAlive
@ stopAndKill
CLHEP::HepLorentzVector G4LorentzVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
static constexpr double eplus
Definition: G4SIunits.hh:184
static constexpr double keV
Definition: G4SIunits.hh:202
static constexpr double MeV
Definition: G4SIunits.hh:200
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
Hep3Vector unit() const
HepLorentzRotation & rotateY(double delta)
HepLorentzRotation & rotateZ(double delta)
HepLorentzRotation inverse() const
Hep3Vector vect() const
void setVect(const Hep3Vector &)
G4bool SetLighterAsProjectile(G4LorentzVector &mom, const G4LorentzRotation &toBreit)
G4ReactionProductVector * FuseNucleiAndPrompound(const G4LorentzVector &mom)
G4ReactionProductVector * Interact(G4LorentzVector &mom, const G4LorentzRotation &)
G4LorentzVector SortResult(G4ReactionProductVector *result, G4ReactionProductVector *spectators, G4ReactionProductVector *cascaders)
G4bool EnergyAndMomentumCorrector(G4ReactionProductVector *products, G4LorentzVector &TotalCollisionMom)
void DeExciteSpectatorNucleus(G4ReactionProductVector *spectators, G4ReactionProductVector *cascaders, G4double theStatisticalExEnergy, G4LorentzVector &momentum)
G4LorentzVector Get4Momentum() const
void Set4Momentum(const G4LorentzVector &momentum)
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)
G4double GetIonMass(G4int Z, G4int A, G4int nL=0, G4int lvl=0) const
Definition: G4IonTable.cc:1517
G4double GetPDGCharge() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
Definition: G4ping.hh:35
def debug(dflag)
Definition: g4zmq.py:30
int G4lrint(double ad)
Definition: templates.hh:134

References G4HadFinalState::AddSecondary(), CLHEP::HepLorentzVector::boostVector(), G4HadFinalState::Clear(), g4zmq::debug(), debug_G4BinaryLightIonReactionResults, DeExciteSpectatorNucleus(), CLHEP::HepLorentzVector::e(), EnergyAndMomentumCorrector(), eplus, FatalException, FuseNucleiAndPrompound(), G4cerr, G4cout, G4endl, G4Exception(), G4lrint(), G4DynamicParticle::Get4Momentum(), G4HadProjectile::Get4Momentum(), G4Nucleus::GetA_asInt(), G4ParticleDefinition::GetBaryonNumber(), G4HadProjectile::GetDefinition(), G4HadProjectile::GetGlobalTime(), G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4HadProjectile::GetKineticEnergy(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGCharge(), GetProjectileExcitation(), CLHEP::HepLorentzVector::getT(), G4Nucleus::GetZ_asInt(), Interact(), CLHEP::HepLorentzRotation::inverse(), isAlive, keV, CLHEP::HepLorentzVector::mag(), CLHEP::Hep3Vector::mag(), MeV, pA, pFinalState, CLHEP::HepLorentzVector::phi(), pInitialState, projectile3dNucleus, pZ, CLHEP::HepLorentzRotation::rotateY(), CLHEP::HepLorentzRotation::rotateZ(), G4DynamicParticle::Set4Momentum(), G4HadSecondary::SetCreatorModelID(), G4HadFinalState::SetEnergyChange(), SetLighterAsProjectile(), G4HadFinalState::SetMomentumChange(), G4HadFinalState::SetStatusChange(), CLHEP::HepLorentzVector::setT(), G4HadSecondary::SetTime(), CLHEP::HepLorentzVector::setVect(), SortResult(), spectatorA, spectatorZ, stopAndKill, CLHEP::HepLorentzVector::t(), tA, target3dNucleus, theBLIR_ID, theResult, CLHEP::HepLorentzVector::theta(), tZ, CLHEP::Hep3Vector::unit(), and CLHEP::HepLorentzVector::vect().

◆ Block()

void G4HadronicInteraction::Block ( )
inlineprotectedinherited

◆ BuildPhysicsTable()

void G4HadronicInteraction::BuildPhysicsTable ( const G4ParticleDefinition )
virtualinherited

◆ DeActivateFor() [1/2]

void G4HadronicInteraction::DeActivateFor ( const G4Element anElement)
inherited

Definition at line 186 of file G4HadronicInteraction.cc.

187{
188 Block();
189 theBlockedListElements.push_back(anElement);
190}
std::vector< const G4Element * > theBlockedListElements

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theBlockedListElements.

◆ DeActivateFor() [2/2]

void G4HadronicInteraction::DeActivateFor ( const G4Material aMaterial)
inherited

Definition at line 180 of file G4HadronicInteraction.cc.

181{
182 Block();
183 theBlockedList.push_back(aMaterial);
184}
std::vector< const G4Material * > theBlockedList

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theBlockedList.

Referenced by G4HadronHElasticPhysics::ConstructProcess().

◆ DeExciteSpectatorNucleus()

void G4BinaryLightIonReaction::DeExciteSpectatorNucleus ( G4ReactionProductVector spectators,
G4ReactionProductVector cascaders,
G4double  theStatisticalExEnergy,
G4LorentzVector momentum 
)
private

Definition at line 647 of file G4BinaryLightIonReaction.cc.

649{
650 // call precompound model
651 G4ReactionProductVector * proFrag = 0;
652 G4LorentzVector pFragment(0.,0.,0.,0.);
653 // G4cout << " == pre boost 1 "<< momentum.e()<< " "<< momentum.mag()<<G4endl;
654 G4LorentzRotation boost_fragments;
655 // G4cout << " == post boost 1 "<< momentum.e()<< " "<< momentum.mag()<<G4endl;
656 // G4LorentzRotation boost_spectator_mom(-momentum.boostVector());
657 // G4cout << "- momentum " << boost_spectator_mom * momentum << G4endl;
658 G4LorentzVector pFragments(0,0,0,0);
659
660 if(spectatorZ>0 && spectatorA>1)
661 {
662 // Make the fragment
663 G4Fragment aProRes;
665 aProRes.SetNumberOfParticles(0);
666 aProRes.SetNumberOfCharged(0);
669 pFragment=G4LorentzVector(0,0,0,mFragment+std::max(0.,theStatisticalExEnergy) );
670 aProRes.SetMomentum(pFragment);
671
672 proFrag = theHandler->BreakItUp(aProRes);
673
674 boost_fragments = G4LorentzRotation(pSpectators.boostVector());
675
676 // G4cout << " Fragment a,z, Mass Fragment, mass spect-mom, exitationE "
677 // << spectatorA <<" "<< spectatorZ <<" "<< mFragment <<" "
678 // << momentum.mag() <<" "<< momentum.mag() - mFragment
679 // << " "<<theStatisticalExEnergy
680 // << " "<< boost_fragments*pFragment<< G4endl;
681 G4ReactionProductVector::iterator ispectator;
682 for (ispectator=spectators->begin();ispectator!=spectators->end();ispectator++)
683 {
684 delete *ispectator;
685 }
686 }
687 else if(spectatorA!=0)
688 {
689 G4ReactionProductVector::iterator ispectator;
690 for (ispectator=spectators->begin();ispectator!=spectators->end();ispectator++)
691 {
692 (*ispectator)->SetNewlyAdded(true);
693 cascaders->push_back(*ispectator);
694 pFinalState+=G4LorentzVector((*ispectator)->GetMomentum(),(*ispectator)->GetTotalEnergy());
695 //G4cout << "BLIC: spectatorA>0, Z=0 from spectator "
696 // << (*ispectator)->GetDefinition()->GetParticleName() << " "
697 // << (*ispectator)->GetMomentum()<< " "
698 // << (*ispectator)->GetTotalEnergy() << G4endl;
699 }
700
701 }
702 // / if (spectators)
703 delete spectators;
704
705 // collect the evaporation part and boost to spectator frame
706 G4ReactionProductVector::iterator ii;
707 if(proFrag)
708 {
709 for(ii=proFrag->begin(); ii!=proFrag->end(); ii++)
710 {
711 (*ii)->SetNewlyAdded(true);
712 G4LorentzVector tmp((*ii)->GetMomentum(),(*ii)->GetTotalEnergy());
713 tmp *= boost_fragments;
714 (*ii)->SetMomentum(tmp.vect());
715 (*ii)->SetTotalEnergy(tmp.e());
716 // result->push_back(*ii);
717 pFragments += tmp;
718 }
719 }
720
721 // G4cout << "Fragmented p, momentum, delta " << pFragments <<" "<<momentum
722 // <<" "<< pFragments-momentum << G4endl;
723
724 // correct p/E of Cascade secondaries
725 G4LorentzVector pCas=pInitialState - pFragments;
726
727 //G4cout <<"BLIC: Going to correct from " << pFinalState << " to " << pCas << G4endl;
728 // the creation of excited fragment did violate E/p, so correct cascaders to get overall conservation.
729 G4bool EnergyIsCorrect=EnergyAndMomentumCorrector(cascaders, pCas);
730 if ( ! EnergyIsCorrect && debug_G4BinaryLightIonReactionResults)
731 {
732 G4cout << "G4BinaryLightIonReaction E/P correction for nucleus failed, will try to correct overall" << G4endl;
733 }
734
735 // Add deexcitation secondaries
736 if(proFrag)
737 {
738 for(ii=proFrag->begin(); ii!=proFrag->end(); ii++)
739 {
740 cascaders->push_back(*ii);
741 }
742 delete proFrag;
743 }
744 //G4cout << "EnergyIsCorrect? " << EnergyIsCorrect << G4endl;
745 if ( ! EnergyIsCorrect )
746 {
747 // G4cout <<" ! EnergyIsCorrect " << pFinalState << " to " << pInitialState << G4endl;
749 {
751 G4cout << "G4BinaryLightIonReaction E/P corrections failed" << G4endl;
752 }
753 }
754
755}
CLHEP::HepLorentzRotation G4LorentzRotation
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
void SetNumberOfCharged(G4int value)
Definition: G4Fragment.hh:405
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
Definition: G4Fragment.hh:391
void SetMomentum(const G4LorentzVector &value)
Definition: G4Fragment.hh:328
void SetNumberOfParticles(G4int value)
Definition: G4Fragment.hh:400
void SetZandA_asInt(G4int Znew, G4int Anew)
Definition: G4Fragment.hh:281
T max(const T t1, const T t2)
brief Return the largest of the two arguments

References CLHEP::HepLorentzVector::boostVector(), G4ExcitationHandler::BreakItUp(), debug_G4BinaryLightIonReactionResults, CLHEP::HepLorentzVector::e(), EnergyAndMomentumCorrector(), G4cout, G4endl, G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4ParticleTable::GetParticleTable(), G4INCL::Math::max(), pA, pFinalState, pInitialState, G4Fragment::SetMomentum(), G4Fragment::SetNumberOfCharged(), G4Fragment::SetNumberOfHoles(), G4Fragment::SetNumberOfParticles(), G4Fragment::SetZandA_asInt(), spectatorA, spectatorZ, theHandler, and CLHEP::HepLorentzVector::vect().

Referenced by ApplyYourself().

◆ EnergyAndMomentumCorrector()

G4bool G4BinaryLightIonReaction::EnergyAndMomentumCorrector ( G4ReactionProductVector products,
G4LorentzVector TotalCollisionMom 
)
private

Definition at line 355 of file G4BinaryLightIonReaction.cc.

358{
359 const int nAttemptScale = 2500;
360 const double ErrLimit = 1.E-6;
361 if (Output->empty())
362 return TRUE;
363 G4LorentzVector SumMom(0,0,0,0);
364 G4double SumMass = 0;
365 G4double TotalCollisionMass = TotalCollisionMom.m();
366 size_t i = 0;
367 // Calculate sum hadron 4-momenta and summing hadron mass
368 for(i = 0; i < Output->size(); i++)
369 {
370 SumMom += G4LorentzVector((*Output)[i]->GetMomentum(),(*Output)[i]->GetTotalEnergy());
371 SumMass += (*Output)[i]->GetDefinition()->GetPDGMass();
372 }
373 // G4cout << " E/P corrector, SumMass, SumMom.m2, TotalMass "
374 // << SumMass <<" "<< SumMom.m2() <<" "<<TotalCollisionMass<< G4endl;
375 if (SumMass > TotalCollisionMass) return FALSE;
376 SumMass = SumMom.m2();
377 if (SumMass < 0) return FALSE;
378 SumMass = std::sqrt(SumMass);
379
380 // Compute c.m.s. hadron velocity and boost KTV to hadron c.m.s.
381 G4ThreeVector Beta = -SumMom.boostVector();
382 //G4cout << " == pre boost 2 "<< SumMom.e()<< " "<< SumMom.mag()<<" "<< Beta <<G4endl;
383 //--old Output->Boost(Beta);
384 for(i = 0; i < Output->size(); i++)
385 {
386 G4LorentzVector mom = G4LorentzVector((*Output)[i]->GetMomentum(),(*Output)[i]->GetTotalEnergy());
387 mom *= Beta;
388 (*Output)[i]->SetMomentum(mom.vect());
389 (*Output)[i]->SetTotalEnergy(mom.e());
390 }
391
392 // Scale total c.m.s. hadron energy (hadron system mass).
393 // It should be equal interaction mass
394 G4double Scale = 0,OldScale=0;
395 G4double factor = 1.;
396 G4int cAttempt = 0;
397 G4double Sum = 0;
398 G4bool success = false;
399 for(cAttempt = 0; cAttempt < nAttemptScale; cAttempt++)
400 {
401 Sum = 0;
402 for(i = 0; i < Output->size(); i++)
403 {
404 G4LorentzVector HadronMom = G4LorentzVector((*Output)[i]->GetMomentum(),(*Output)[i]->GetTotalEnergy());
405 HadronMom.setVect(HadronMom.vect()+ factor*Scale*HadronMom.vect());
406 G4double E = std::sqrt(HadronMom.vect().mag2() + sqr((*Output)[i]->GetDefinition()->GetPDGMass()));
407 HadronMom.setE(E);
408 (*Output)[i]->SetMomentum(HadronMom.vect());
409 (*Output)[i]->SetTotalEnergy(HadronMom.e());
410 Sum += E;
411 }
412 OldScale=Scale;
413 Scale = TotalCollisionMass/Sum - 1;
414 // G4cout << "E/P corr - " << cAttempt << " " << Scale << G4endl;
415 if (std::abs(Scale) <= ErrLimit
416 || OldScale == Scale) // protect 'frozen' situation and divide by 0 in calculating new factor below
417 {
418 if (debug_G4BinaryLightIonReactionResults) G4cout << "E/p corrector: " << cAttempt << G4endl;
419 success = true;
420 break;
421 }
422 if ( cAttempt > 10 )
423 {
424 // G4cout << " speed it up? " << std::abs(OldScale/(OldScale-Scale)) << G4endl;
425 factor=std::max(1.,G4Log(std::abs(OldScale/(OldScale-Scale))));
426 // G4cout << " ? factor ? " << factor << G4endl;
427 }
428 }
429
431 {
432 G4cout << "G4G4BinaryLightIonReaction::EnergyAndMomentumCorrector - Warning"<<G4endl;
433 G4cout << " Scale not unity at end of iteration loop: "<<TotalCollisionMass<<" "<<Sum<<" "<<Scale<<G4endl;
434 G4cout << " Increase number of attempts or increase ERRLIMIT"<<G4endl;
435 }
436
437 // Compute c.m.s. interaction velocity and KTV back boost
438 Beta = TotalCollisionMom.boostVector();
439 //--old Output->Boost(Beta);
440 for(i = 0; i < Output->size(); i++)
441 {
442 G4LorentzVector mom = G4LorentzVector((*Output)[i]->GetMomentum(),(*Output)[i]->GetTotalEnergy());
443 mom *= Beta;
444 (*Output)[i]->SetMomentum(mom.vect());
445 (*Output)[i]->SetTotalEnergy(mom.e());
446 }
447 return TRUE;
448}
G4double G4Log(G4double x)
Definition: G4Log.hh:226
#define TRUE
Definition: Globals.hh:27
#define FALSE
Definition: Globals.hh:23
double mag2() const
Hep3Vector boostVector() const
T sqr(const T &x)
Definition: templates.hh:128

References CLHEP::HepLorentzVector::boostVector(), debug_G4BinaryLightIonReactionResults, CLHEP::HepLorentzVector::e(), FALSE, G4cout, G4endl, G4Log(), CLHEP::HepLorentzVector::m(), CLHEP::HepLorentzVector::m2(), CLHEP::Hep3Vector::mag2(), G4INCL::Math::max(), CLHEP::HepLorentzVector::setE(), CLHEP::HepLorentzVector::setVect(), sqr(), TRUE, and CLHEP::HepLorentzVector::vect().

Referenced by ApplyYourself(), and DeExciteSpectatorNucleus().

◆ FuseNucleiAndPrompound()

G4ReactionProductVector * G4BinaryLightIonReaction::FuseNucleiAndPrompound ( const G4LorentzVector mom)
private

Definition at line 464 of file G4BinaryLightIonReaction.cc.

465{
466 // Check if kinematically nuclei can fuse.
469 G4LorentzVector pCompound(mom.e()+mTarget,mom.vect());
470 G4double m2Compound=pCompound.m2();
471 if (m2Compound < sqr(mFused) ) {
472 //G4cout << "G4BLIC: projectile p, mTarget, mFused, mCompound, delta: " <<mom << " " << mTarget << " " << mFused
473 // << " " << sqrt(m2Compound)<< " " << sqrt(m2Compound) - mFused << G4endl;
474 return 0;
475 }
476
477 G4Fragment aPreFrag;
478 aPreFrag.SetZandA_asInt(pZ+tZ, pA+tA);
479 aPreFrag.SetNumberOfParticles(pA);
480 aPreFrag.SetNumberOfCharged(pZ);
481 aPreFrag.SetNumberOfHoles(0);
482 //GF FIXME: whyusing plop in z direction? this will not conserve momentum?
483 //G4ThreeVector plop(0.,0., mom.vect().mag());
484 //G4LorentzVector aL(mom.t()+mTarget, plop);
485 G4LorentzVector aL(mom.t()+mTarget,mom.vect());
486 aPreFrag.SetMomentum(aL);
487
488
489 //G4cout << "Fragment INFO "<< pA+tA <<" "<<pZ+tZ<<" "
490 // << aL <<" "<<G4endl << aPreFrag << G4endl;
492 //G4double tSum = 0;
493 for(size_t count = 0; count<cascaders->size(); count++)
494 {
495 cascaders->operator[](count)->SetNewlyAdded(true);
496 //tSum += cascaders->operator[](count)->GetKineticEnergy();
497 }
498 // G4cout << "Exiting pre-compound only, E= "<<tSum<<G4endl;
499 return cascaders;
500}
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment)=0

References G4VPreCompoundModel::DeExcite(), CLHEP::HepLorentzVector::e(), G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4ParticleTable::GetParticleTable(), CLHEP::HepLorentzVector::m2(), pA, pZ, G4Fragment::SetMomentum(), G4Fragment::SetNumberOfCharged(), G4Fragment::SetNumberOfHoles(), G4Fragment::SetNumberOfParticles(), G4Fragment::SetZandA_asInt(), sqr(), CLHEP::HepLorentzVector::t(), tA, theProjectileFragmentation, tZ, and CLHEP::HepLorentzVector::vect().

Referenced by ApplyYourself().

◆ GetEnergyMomentumCheckLevels()

std::pair< G4double, G4double > G4HadronicInteraction::GetEnergyMomentumCheckLevels ( ) const
virtualinherited

◆ GetFatalEnergyCheckLevels()

const std::pair< G4double, G4double > G4HadronicInteraction::GetFatalEnergyCheckLevels ( ) const
virtualinherited

Reimplemented in G4FissLib, G4LFission, G4LENDFission, G4ParticleHPCapture, G4ParticleHPElastic, G4ParticleHPFission, G4ParticleHPInelastic, and G4ParticleHPThermalScattering.

Definition at line 210 of file G4HadronicInteraction.cc.

211{
212 // default level of Check
213 return std::pair<G4double, G4double>(2.*perCent, 1. * GeV);
214}
static constexpr double perCent
Definition: G4SIunits.hh:325
static constexpr double GeV
Definition: G4SIunits.hh:203

References GeV, and perCent.

Referenced by G4HadronicProcess::CheckResult().

◆ GetMaxEnergy() [1/2]

G4double G4HadronicInteraction::GetMaxEnergy ( ) const
inlineinherited

◆ GetMaxEnergy() [2/2]

G4double G4HadronicInteraction::GetMaxEnergy ( const G4Material aMaterial,
const G4Element anElement 
) const
inherited

Definition at line 131 of file G4HadronicInteraction.cc.

133{
134 if(!IsBlocked()) { return theMaxEnergy; }
135 if( IsBlocked(aMaterial) || IsBlocked(anElement) ) { return 0.0; }
136 if(!theMaxEnergyListElements.empty()) {
137 for(auto const& elmlist : theMaxEnergyListElements) {
138 if( anElement == elmlist.second )
139 { return elmlist.first; }
140 }
141 }
142 if(!theMaxEnergyList.empty()) {
143 for(auto const& matlist : theMaxEnergyList) {
144 if( aMaterial == matlist.second )
145 { return matlist.first; }
146 }
147 }
148 return theMaxEnergy;
149}
std::vector< std::pair< G4double, const G4Material * > > theMaxEnergyList
std::vector< std::pair< G4double, const G4Element * > > theMaxEnergyListElements

References G4HadronicInteraction::IsBlocked(), G4HadronicInteraction::theMaxEnergy, G4HadronicInteraction::theMaxEnergyList, and G4HadronicInteraction::theMaxEnergyListElements.

◆ GetMinEnergy() [1/2]

G4double G4HadronicInteraction::GetMinEnergy ( ) const
inlineinherited

◆ GetMinEnergy() [2/2]

G4double G4HadronicInteraction::GetMinEnergy ( const G4Material aMaterial,
const G4Element anElement 
) const
inherited

Definition at line 81 of file G4HadronicInteraction.cc.

83{
84 if(!IsBlocked()) { return theMinEnergy; }
85 if( IsBlocked(aMaterial) || IsBlocked(anElement) ) { return DBL_MAX; }
86 if(!theMinEnergyListElements.empty()) {
87 for(auto const& elmlist : theMinEnergyListElements) {
88 if( anElement == elmlist.second )
89 { return elmlist.first; }
90 }
91 }
92 if(!theMinEnergyList.empty()) {
93 for(auto const & matlist : theMinEnergyList) {
94 if( aMaterial == matlist.second )
95 { return matlist.first; }
96 }
97 }
98 return theMinEnergy;
99}
std::vector< std::pair< G4double, const G4Element * > > theMinEnergyListElements
std::vector< std::pair< G4double, const G4Material * > > theMinEnergyList
#define DBL_MAX
Definition: templates.hh:62

References DBL_MAX, G4HadronicInteraction::IsBlocked(), G4HadronicInteraction::theMinEnergy, G4HadronicInteraction::theMinEnergyList, and G4HadronicInteraction::theMinEnergyListElements.

◆ GetModelName()

const G4String & G4HadronicInteraction::GetModelName ( ) const
inlineinherited

Definition at line 115 of file G4HadronicInteraction.hh.

116 { return theModelName; }

References G4HadronicInteraction::theModelName.

Referenced by G4MuMinusCapturePrecompound::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4INCLXXInterface::ApplyYourself(), G4TheoFSGenerator::ApplyYourself(), G4HadronStoppingProcess::AtRestDoIt(), G4VHadronPhysics::BuildModel(), G4HadronicProcess::CheckEnergyMomentumConservation(), G4HadronicProcess::CheckResult(), G4ChargeExchangePhysics::ConstructProcess(), G4MuonicAtomDecay::DecayIt(), G4LENDModel::DumpLENDTargetInfo(), G4AblaInterface::G4AblaInterface(), G4ElectroVDNuclearModel::G4ElectroVDNuclearModel(), G4EMDissociation::G4EMDissociation(), G4ExcitedStringDecay::G4ExcitedStringDecay(), G4LEHadronProtonElastic::G4LEHadronProtonElastic(), G4LENDModel::G4LENDModel(), G4LENDorBERTModel::G4LENDorBERTModel(), G4LEnp::G4LEnp(), G4LEpp::G4LEpp(), G4LFission::G4LFission(), G4LowEGammaNuclearModel::G4LowEGammaNuclearModel(), G4LowEIonFragmentation::G4LowEIonFragmentation(), G4MuonVDNuclearModel::G4MuonVDNuclearModel(), G4NeutrinoElectronCcModel::G4NeutrinoElectronCcModel(), G4NeutrinoNucleusModel::G4NeutrinoNucleusModel(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4INCLXXInterface::GetDeExcitationModelName(), G4EnergyRangeManager::GetHadronicInteraction(), G4VHighEnergyGenerator::GetProjectileNucleus(), G4NeutronRadCapture::InitialiseModel(), G4BinaryCascade::ModelDescription(), G4LMsdGenerator::ModelDescription(), G4VPartonStringModel::ModelDescription(), G4TheoFSGenerator::ModelDescription(), G4VHadronPhysics::NewModel(), G4NeutrinoElectronProcess::PostStepDoIt(), G4HadronicProcess::PostStepDoIt(), G4ElNeutrinoNucleusProcess::PostStepDoIt(), G4HadronElasticProcess::PostStepDoIt(), G4MuNeutrinoNucleusProcess::PostStepDoIt(), G4HadronicProcessStore::PrintModelHtml(), G4BinaryCascade::PropagateModelDescription(), G4HadronicProcessStore::RegisterInteraction(), and G4LENDModel::returnUnchanged().

◆ GetProjectileExcitation()

G4double G4BinaryLightIonReaction::GetProjectileExcitation ( )
private

Definition at line 592 of file G4BinaryLightIonReaction.cc.

593{
594
595 G4Nucleon * aNuc;
596 // the projectileNucleus excitation energy estimate...
597 G4double theStatisticalExEnergy = 0;
599 while( (aNuc=projectile3dNucleus->GetNextNucleon()) ) /* Loop checking, 31.08.2015, G.Folger */
600 {
601 //G4cout << " Nucleon : " << aNuc->GetDefinition()->GetParticleName() <<" "<< aNuc->AreYouHit() <<" "<<aNuc->GetMomentum()<<G4endl;
602 if(aNuc->AreYouHit()) {
603 G4ThreeVector aPosition(aNuc->GetPosition());
604 G4double localDensity = projectile3dNucleus->GetNuclearDensity()->GetDensity(aPosition);
605 G4double localPfermi = theFermi.GetFermiMomentum(localDensity);
606 G4double nucMass = aNuc->GetDefinition()->GetPDGMass();
607 G4double localFermiEnergy = std::sqrt(nucMass*nucMass + localPfermi*localPfermi) - nucMass;
608 G4double deltaE = localFermiEnergy - (aNuc->GetMomentum().t()-aNuc->GetMomentum().mag());
609 theStatisticalExEnergy += deltaE;
610 }
611 }
612 return theStatisticalExEnergy;
613}
G4Nucleon * GetNextNucleon()
const G4VNuclearDensity * GetNuclearDensity() const
G4double GetFermiMomentum(G4double density)
const G4ThreeVector & GetPosition() const
Definition: G4Nucleon.hh:140
G4bool AreYouHit() const
Definition: G4Nucleon.hh:98
const G4LorentzVector & GetMomentum() const
Definition: G4Nucleon.hh:71
virtual const G4ParticleDefinition * GetDefinition() const
Definition: G4Nucleon.hh:86
G4double GetDensity(const G4ThreeVector &aPosition) const

References G4Nucleon::AreYouHit(), G4Nucleon::GetDefinition(), G4VNuclearDensity::GetDensity(), G4FermiMomentum::GetFermiMomentum(), G4Nucleon::GetMomentum(), G4Fancy3DNucleus::GetNextNucleon(), G4Fancy3DNucleus::GetNuclearDensity(), G4ParticleDefinition::GetPDGMass(), G4Nucleon::GetPosition(), CLHEP::HepLorentzVector::mag(), projectile3dNucleus, G4Fancy3DNucleus::StartLoop(), CLHEP::HepLorentzVector::t(), and theFermi.

Referenced by ApplyYourself().

◆ GetRecoilEnergyThreshold()

G4double G4HadronicInteraction::GetRecoilEnergyThreshold ( ) const
inlineinherited

◆ GetVerboseLevel()

G4int G4HadronicInteraction::GetVerboseLevel ( ) const
inlineinherited

Definition at line 109 of file G4HadronicInteraction.hh.

References G4HadronicInteraction::verboseLevel.

◆ InitialiseModel()

void G4HadronicInteraction::InitialiseModel ( )
virtualinherited

◆ Interact()

G4ReactionProductVector * G4BinaryLightIonReaction::Interact ( G4LorentzVector mom,
const G4LorentzRotation toBreit 
)
private

Definition at line 501 of file G4BinaryLightIonReaction.cc.

502{
503 G4ReactionProductVector * result = 0;
504 G4double projectileMass(0);
506
507 G4int tryCount(0);
508 do
509 {
510 ++tryCount;
516 it=toBreit * G4LorentzVector(projectileMass,G4ThreeVector(0,0,0));
517
521 // G4cout << "out radius - nucleus - projectile " << target3dNucleus->GetOuterRadius()/fermi << " - " << projectile3dNucleus->GetOuterRadius()/fermi << G4endl;
522 G4double aX=(2.*G4UniformRand()-1.)*impactMax;
523 G4double aY=(2.*G4UniformRand()-1.)*impactMax;
524 G4ThreeVector pos(aX, aY, -2.*impactMax-5.*fermi);
525
526 G4KineticTrackVector * initalState = new G4KineticTrackVector;
528 G4Nucleon * aNuc;
529 G4LorentzVector tmpV(0,0,0,0);
530 #ifdef debug_BLIR_finalstate
531 G4LorentzVector pinitial;
532 #endif
533 G4LorentzVector nucleonMom(1./pA*mom);
534 nucleonMom.setZ(nucleonMom.vect().mag());
535 nucleonMom.setX(0);
536 nucleonMom.setY(0);
538 while( (aNuc=projectile3dNucleus->GetNextNucleon()) ) /* Loop checking, 31.08.2015, G.Folger */
539 {
540 G4LorentzVector p4 = aNuc->GetMomentum();
541 tmpV+=p4;
542 G4ThreeVector nucleonPosition(aNuc->GetPosition());
543 G4double density=(projectile3dNucleus->GetNuclearDensity())->GetDensity(nucleonPosition);
544 nucleonPosition += pos;
545 G4KineticTrack * it1 = new G4KineticTrack(aNuc, nucleonPosition, nucleonMom );
547 G4double pfermi= theFermi.GetFermiMomentum(density);
548 G4double mass = aNuc->GetDefinition()->GetPDGMass();
549 G4double Efermi= std::sqrt( sqr(mass) + sqr(pfermi)) - mass;
550 it1->SetProjectilePotential(-Efermi);
551 initalState->push_back(it1);
552 #ifdef debug_BLIR_finalstate
553 pinitial += it1->Get4Momentum();
554 #endif
555 }
556
557 result=theModel->Propagate(initalState, target3dNucleus);
558 #ifdef debug_BLIR_finalstate
559 if( result && result->size()>0)
560 {
561 G4LorentzVector presult;
562 G4ReactionProductVector::iterator iter;
564 for (iter=result->begin(); iter !=result->end(); ++iter)
565 {
566 presult += G4LorentzVector((*iter)->GetMomentum(),(*iter)->GetTotalEnergy());
567 }
568
569 G4cout << "BLIC check result : initial " << pinitial << " mass tgt " << target3dNucleus->GetMass()
570 << " final " << presult
571 << " IF - FF " << pinitial +G4LorentzVector(target3dNucleus->GetMass()) - presult << G4endl;
572
573 }
574 #endif
575 if( result && result->size()==0)
576 {
577 delete result;
578 result=0;
579 }
580 if ( ! result )
581 {
582 delete target3dNucleus;
583 delete projectile3dNucleus;
584 }
585
586 // std::for_each(initalState->begin(), initalState->end(), Delete<G4KineticTrack>());
587 // delete initalState;
588
589 } while (! result && tryCount< 150); /* Loop checking, 31.08.2015, G.Folger */
590 return result;
591}
static const G4double pos
static constexpr double fermi
Definition: G4SIunits.hh:83
CLHEP::Hep3Vector G4ThreeVector
#define G4UniformRand()
Definition: Randomize.hh:52
virtual G4ReactionProductVector * Propagate(G4KineticTrackVector *, G4V3DNucleus *)
void Init(G4int theA, G4int theZ, G4int numberOfLambdas=0)
G4double GetOuterRadius()
void Init(G4int anA, G4int aZ)
CascadeState SetState(const CascadeState new_state)
void SetProjectilePotential(const G4double aPotential)
const G4LorentzVector & Get4Momentum() const

References G4Fancy3DNucleus::CenterNucleons(), fermi, G4cout, G4endl, G4UniformRand, G4KineticTrack::Get4Momentum(), G4Fancy3DNucleus::GetCharge(), G4Nucleon::GetDefinition(), G4FermiMomentum::GetFermiMomentum(), G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4Fancy3DNucleus::GetMass(), G4Fancy3DNucleus::GetMassNumber(), G4Nucleon::GetMomentum(), G4Fancy3DNucleus::GetNextNucleon(), G4Fancy3DNucleus::GetNuclearDensity(), G4Fancy3DNucleus::GetOuterRadius(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetPDGMass(), G4Nucleon::GetPosition(), G4FermiMomentum::Init(), G4Fancy3DNucleus::Init(), CLHEP::Hep3Vector::mag(), G4KineticTrack::outside, pA, pos, projectile3dNucleus, G4BinaryCascade::Propagate(), pZ, G4KineticTrack::SetProjectilePotential(), G4KineticTrack::SetState(), CLHEP::HepLorentzVector::setX(), CLHEP::HepLorentzVector::setY(), CLHEP::HepLorentzVector::setZ(), sqr(), G4Fancy3DNucleus::StartLoop(), tA, target3dNucleus, theFermi, theModel, tZ, and CLHEP::HepLorentzVector::vect().

Referenced by ApplyYourself().

◆ IsApplicable()

G4bool G4HadronicInteraction::IsApplicable ( const G4HadProjectile aTrack,
G4Nucleus targetNucleus 
)
virtualinherited

◆ IsBlocked() [1/3]

G4bool G4HadronicInteraction::IsBlocked ( ) const
inlineprotectedinherited

◆ IsBlocked() [2/3]

G4bool G4HadronicInteraction::IsBlocked ( const G4Element anElement) const
inherited

Definition at line 202 of file G4HadronicInteraction.cc.

203{
204 for (auto const& elm : theBlockedListElements) {
205 if (anElement == elm) return true;
206 }
207 return false;
208}

References G4HadronicInteraction::theBlockedListElements.

◆ IsBlocked() [3/3]

G4bool G4HadronicInteraction::IsBlocked ( const G4Material aMaterial) const
inherited

Definition at line 193 of file G4HadronicInteraction.cc.

194{
195 for (auto const& mat : theBlockedList) {
196 if (aMaterial == mat) return true;
197 }
198 return false;
199}

References G4HadronicInteraction::theBlockedList.

◆ ModelDescription()

void G4BinaryLightIonReaction::ModelDescription ( std::ostream &  outFile) const
virtual

Reimplemented from G4HadronicInteraction.

Definition at line 76 of file G4BinaryLightIonReaction.cc.

77{
78 outFile << "G4Binary Light Ion Cascade is an intra-nuclear cascade model\n"
79 << "using G4BinaryCasacde to model the interaction of a light\n"
80 << "nucleus with a nucleus.\n"
81 << "The lighter of the two nuclei is treated like a set of projectiles\n"
82 << "which are transported simultaneously through the heavier nucleus.\n";
83}

◆ operator!=()

G4bool G4HadronicInteraction::operator!= ( const G4HadronicInteraction right) const
deleteinherited

◆ operator==()

G4bool G4HadronicInteraction::operator== ( const G4HadronicInteraction right) const
deleteinherited

◆ SampleInvariantT()

G4double G4HadronicInteraction::SampleInvariantT ( const G4ParticleDefinition p,
G4double  plab,
G4int  Z,
G4int  A 
)
virtualinherited

◆ SetDeExcitation()

void G4BinaryLightIonReaction::SetDeExcitation ( G4ExcitationHandler ptr)
inline

◆ SetEnergyMomentumCheckLevels()

void G4HadronicInteraction::SetEnergyMomentumCheckLevels ( G4double  relativeLevel,
G4double  absoluteLevel 
)
inlineinherited

Definition at line 149 of file G4HadronicInteraction.hh.

150 { epCheckLevels.first = relativeLevel;
151 epCheckLevels.second = absoluteLevel; }

References G4HadronicInteraction::epCheckLevels.

Referenced by G4BinaryCascade::G4BinaryCascade(), G4CascadeInterface::G4CascadeInterface(), and G4FTFModel::G4FTFModel().

◆ SetLighterAsProjectile()

G4bool G4BinaryLightIonReaction::SetLighterAsProjectile ( G4LorentzVector mom,
const G4LorentzRotation toBreit 
)
private

Definition at line 449 of file G4BinaryLightIonReaction.cc.

450{
451 G4bool swapped = false;
452 if(tA<pA)
453 {
454 swapped = true;
455 G4int tmp(0);
456 tmp = tA; tA=pA; pA=tmp;
457 tmp = tZ; tZ=pZ; pZ=tmp;
459 G4LorentzVector it(m1, G4ThreeVector(0,0,0));
460 mom = toBreit*it;
461 }
462 return swapped;
463}

References G4IonTable::GetIonMass(), G4ParticleTable::GetIonTable(), G4ParticleTable::GetParticleTable(), pA, pZ, tA, and tZ.

Referenced by ApplyYourself().

◆ SetMaxEnergy() [1/3]

void G4HadronicInteraction::SetMaxEnergy ( const G4double  anEnergy)
inlineinherited

Definition at line 102 of file G4HadronicInteraction.hh.

103 { theMaxEnergy = anEnergy; }

References G4HadronicInteraction::theMaxEnergy.

Referenced by G4HadronicInteraction::ActivateFor(), G4IonINCLXXPhysics::AddProcess(), G4BertiniElectroNuclearBuilder::Build(), G4LENDBertiniGammaElectroNuclearBuilder::Build(), G4NeutronLENDBuilder::Build(), G4NeutronPHPBuilder::Build(), G4AlphaPHPBuilder::Build(), G4BertiniKaonBuilder::Build(), G4BertiniNeutronBuilder::Build(), G4BertiniPiKBuilder::Build(), G4BertiniPionBuilder::Build(), G4BertiniProtonBuilder::Build(), G4BinaryAlphaBuilder::Build(), G4BinaryDeuteronBuilder::Build(), G4BinaryHe3Builder::Build(), G4BinaryNeutronBuilder::Build(), G4BinaryPiKBuilder::Build(), G4BinaryPionBuilder::Build(), G4BinaryProtonBuilder::Build(), G4BinaryTritonBuilder::Build(), G4DeuteronPHPBuilder::Build(), G4FTFBinaryKaonBuilder::Build(), G4FTFBinaryNeutronBuilder::Build(), G4FTFBinaryPionBuilder::Build(), G4FTFBinaryProtonBuilder::Build(), G4FTFPAntiBarionBuilder::Build(), G4FTFPKaonBuilder::Build(), G4FTFPNeutronBuilder::Build(), G4FTFPPiKBuilder::Build(), G4FTFPPionBuilder::Build(), G4FTFPProtonBuilder::Build(), G4He3PHPBuilder::Build(), G4HyperonFTFPBuilder::Build(), G4HyperonQGSPBuilder::Build(), G4INCLXXNeutronBuilder::Build(), G4INCLXXPionBuilder::Build(), G4INCLXXProtonBuilder::Build(), G4PrecoNeutronBuilder::Build(), G4PrecoProtonBuilder::Build(), G4ProtonPHPBuilder::Build(), G4QGSBinaryKaonBuilder::Build(), G4QGSBinaryNeutronBuilder::Build(), G4QGSBinaryPiKBuilder::Build(), G4QGSBinaryPionBuilder::Build(), G4QGSBinaryProtonBuilder::Build(), G4QGSPAntiBarionBuilder::Build(), G4QGSPKaonBuilder::Build(), G4QGSPLundStrFragmProtonBuilder::Build(), G4QGSPNeutronBuilder::Build(), G4QGSPPiKBuilder::Build(), G4QGSPPionBuilder::Build(), G4TritonPHPBuilder::Build(), G4QGSPProtonBuilder::Build(), G4HadronicBuilder::BuildFTFP_BERT(), G4HadronicBuilder::BuildFTFQGSP_BERT(), G4QGSBuilder::BuildModel(), G4VHadronPhysics::BuildModel(), G4HadronicBuilder::BuildQGSP_FTFP_BERT(), G4EmExtraPhysics::ConstructGammaElectroNuclear(), LBE::ConstructHad(), G4EmExtraPhysics::ConstructLENDGammaNuclear(), G4HadronDElasticPhysics::ConstructProcess(), G4HadronElasticPhysics::ConstructProcess(), G4HadronHElasticPhysics::ConstructProcess(), G4IonINCLXXPhysics::ConstructProcess(), G4IonPhysics::ConstructProcess(), G4IonPhysicsPHP::ConstructProcess(), G4IonQMDPhysics::ConstructProcess(), G4ANuElNucleusNcModel::G4ANuElNucleusNcModel(), G4ANuMuNucleusNcModel::G4ANuMuNucleusNcModel(), G4BertiniKaonBuilder::G4BertiniKaonBuilder(), G4BertiniPiKBuilder::G4BertiniPiKBuilder(), G4BertiniPionBuilder::G4BertiniPionBuilder(), G4BinaryCascade::G4BinaryCascade(), G4BinaryPiKBuilder::G4BinaryPiKBuilder(), G4BinaryPionBuilder::G4BinaryPionBuilder(), G4ChargeExchange::G4ChargeExchange(), G4DiffuseElastic::G4DiffuseElastic(), G4DiffuseElasticV2::G4DiffuseElasticV2(), G4ElectroVDNuclearModel::G4ElectroVDNuclearModel(), G4EMDissociation::G4EMDissociation(), G4FissLib::G4FissLib(), G4FTFBinaryKaonBuilder::G4FTFBinaryKaonBuilder(), G4FTFBinaryNeutronBuilder::G4FTFBinaryNeutronBuilder(), G4FTFBinaryPiKBuilder::G4FTFBinaryPiKBuilder(), G4FTFBinaryPionBuilder::G4FTFBinaryPionBuilder(), G4FTFBinaryProtonBuilder::G4FTFBinaryProtonBuilder(), G4FTFPAntiBarionBuilder::G4FTFPAntiBarionBuilder(), G4FTFPKaonBuilder::G4FTFPKaonBuilder(), G4FTFPNeutronBuilder::G4FTFPNeutronBuilder(), G4FTFPPiKBuilder::G4FTFPPiKBuilder(), G4FTFPPionBuilder::G4FTFPPionBuilder(), G4FTFPProtonBuilder::G4FTFPProtonBuilder(), G4HadronElastic::G4HadronElastic(), G4HadronicAbsorptionFritiof::G4HadronicAbsorptionFritiof(), G4HadronicAbsorptionFritiofWithBinaryCascade::G4HadronicAbsorptionFritiofWithBinaryCascade(), G4hhElastic::G4hhElastic(), G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(), G4HyperonQGSPBuilder::G4HyperonQGSPBuilder(), G4INCLXXPionBuilder::G4INCLXXPionBuilder(), G4LEHadronProtonElastic::G4LEHadronProtonElastic(), G4LENDModel::G4LENDModel(), G4LEnp::G4LEnp(), G4LEpp::G4LEpp(), G4LFission::G4LFission(), G4LowEGammaNuclearModel::G4LowEGammaNuclearModel(), G4MuonVDNuclearModel::G4MuonVDNuclearModel(), G4NeutrinoElectronCcModel::G4NeutrinoElectronCcModel(), G4NeutrinoElectronNcModel::G4NeutrinoElectronNcModel(), G4NeutrinoNucleusModel::G4NeutrinoNucleusModel(), G4NeutronElectronElModel::G4NeutronElectronElModel(), G4NeutronRadCapture::G4NeutronRadCapture(), G4NuclNuclDiffuseElastic::G4NuclNuclDiffuseElastic(), G4NuElNucleusNcModel::G4NuElNucleusNcModel(), G4NuMuNucleusNcModel::G4NuMuNucleusNcModel(), G4ParticleHPCapture::G4ParticleHPCapture(), G4ParticleHPElastic::G4ParticleHPElastic(), G4ParticleHPFission::G4ParticleHPFission(), G4ParticleHPInelastic::G4ParticleHPInelastic(), G4ParticleHPThermalScattering::G4ParticleHPThermalScattering(), G4QGSPAntiBarionBuilder::G4QGSPAntiBarionBuilder(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4HadronPhysicsFTFP_BERT_HP::Neutron(), G4HadronPhysicsINCLXX::Neutron(), G4HadronPhysicsQGSP_BERT_HP::Neutron(), G4HadronPhysicsQGSP_BIC_HP::Neutron(), G4HadronPhysicsShielding::Neutron(), and G4VHadronPhysics::NewModel().

◆ SetMaxEnergy() [2/3]

void G4HadronicInteraction::SetMaxEnergy ( G4double  anEnergy,
const G4Element anElement 
)
inherited

Definition at line 151 of file G4HadronicInteraction.cc.

153{
154 Block();
155 if(!theMaxEnergyListElements.empty()) {
156 for(auto & elmlist : theMaxEnergyListElements) {
157 if( anElement == elmlist.second ) {
158 elmlist.first = anEnergy;
159 return;
160 }
161 }
162 }
163 theMaxEnergyListElements.push_back(std::pair<G4double, const G4Element *>(anEnergy, anElement));
164}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMaxEnergyListElements.

◆ SetMaxEnergy() [3/3]

void G4HadronicInteraction::SetMaxEnergy ( G4double  anEnergy,
const G4Material aMaterial 
)
inherited

Definition at line 166 of file G4HadronicInteraction.cc.

167{
168 Block();
169 if(!theMaxEnergyList.empty()) {
170 for(auto & matlist: theMaxEnergyList) {
171 if( aMaterial == matlist.second ) {
172 matlist.first = anEnergy;
173 return;
174 }
175 }
176 }
177 theMaxEnergyList.push_back(std::pair<G4double, const G4Material *>(anEnergy, aMaterial));
178}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMaxEnergyList.

◆ SetMinEnergy() [1/3]

void G4HadronicInteraction::SetMinEnergy ( G4double  anEnergy)
inlineinherited

Definition at line 89 of file G4HadronicInteraction.hh.

90 { theMinEnergy = anEnergy; }

References G4HadronicInteraction::theMinEnergy.

Referenced by G4HadronicInteraction::ActivateFor(), G4BertiniElectroNuclearBuilder::Build(), G4LENDBertiniGammaElectroNuclearBuilder::Build(), G4NeutronLENDBuilder::Build(), G4NeutronPHPBuilder::Build(), G4AlphaPHPBuilder::Build(), G4BertiniKaonBuilder::Build(), G4BertiniNeutronBuilder::Build(), G4BertiniPiKBuilder::Build(), G4BertiniPionBuilder::Build(), G4BertiniProtonBuilder::Build(), G4BinaryAlphaBuilder::Build(), G4BinaryDeuteronBuilder::Build(), G4BinaryHe3Builder::Build(), G4BinaryNeutronBuilder::Build(), G4BinaryPiKBuilder::Build(), G4BinaryPionBuilder::Build(), G4BinaryProtonBuilder::Build(), G4BinaryTritonBuilder::Build(), G4DeuteronPHPBuilder::Build(), G4FTFBinaryKaonBuilder::Build(), G4FTFBinaryNeutronBuilder::Build(), G4FTFBinaryPiKBuilder::Build(), G4FTFBinaryPionBuilder::Build(), G4FTFBinaryProtonBuilder::Build(), G4FTFPAntiBarionBuilder::Build(), G4FTFPKaonBuilder::Build(), G4FTFPNeutronBuilder::Build(), G4FTFPPiKBuilder::Build(), G4FTFPPionBuilder::Build(), G4FTFPProtonBuilder::Build(), G4He3PHPBuilder::Build(), G4HyperonFTFPBuilder::Build(), G4HyperonQGSPBuilder::Build(), G4INCLXXNeutronBuilder::Build(), G4INCLXXPionBuilder::Build(), G4INCLXXProtonBuilder::Build(), G4PrecoNeutronBuilder::Build(), G4PrecoProtonBuilder::Build(), G4ProtonPHPBuilder::Build(), G4QGSBinaryKaonBuilder::Build(), G4QGSBinaryNeutronBuilder::Build(), G4QGSBinaryPiKBuilder::Build(), G4QGSBinaryPionBuilder::Build(), G4QGSBinaryProtonBuilder::Build(), G4QGSPAntiBarionBuilder::Build(), G4QGSPKaonBuilder::Build(), G4QGSPLundStrFragmProtonBuilder::Build(), G4QGSPNeutronBuilder::Build(), G4QGSPPiKBuilder::Build(), G4QGSPPionBuilder::Build(), G4TritonPHPBuilder::Build(), G4QGSPProtonBuilder::Build(), G4QGSBuilder::BuildModel(), G4VHadronPhysics::BuildModel(), G4EmExtraPhysics::ConstructGammaElectroNuclear(), LBE::ConstructHad(), G4EmExtraPhysics::ConstructLENDGammaNuclear(), G4HadronElasticPhysicsHP::ConstructProcess(), G4HadronElasticPhysicsLEND::ConstructProcess(), G4HadronElasticPhysicsPHP::ConstructProcess(), G4HadronDElasticPhysics::ConstructProcess(), G4HadronElasticPhysics::ConstructProcess(), G4HadronHElasticPhysics::ConstructProcess(), G4IonElasticPhysics::ConstructProcess(), G4IonINCLXXPhysics::ConstructProcess(), G4IonPhysics::ConstructProcess(), G4IonPhysicsPHP::ConstructProcess(), G4IonQMDPhysics::ConstructProcess(), G4ANuElNucleusNcModel::G4ANuElNucleusNcModel(), G4ANuMuNucleusNcModel::G4ANuMuNucleusNcModel(), G4BertiniKaonBuilder::G4BertiniKaonBuilder(), G4BertiniPiKBuilder::G4BertiniPiKBuilder(), G4BertiniPionBuilder::G4BertiniPionBuilder(), G4BinaryCascade::G4BinaryCascade(), G4BinaryPiKBuilder::G4BinaryPiKBuilder(), G4BinaryPionBuilder::G4BinaryPionBuilder(), G4ChargeExchange::G4ChargeExchange(), G4DiffuseElastic::G4DiffuseElastic(), G4DiffuseElasticV2::G4DiffuseElasticV2(), G4ElectroVDNuclearModel::G4ElectroVDNuclearModel(), G4EMDissociation::G4EMDissociation(), G4FissLib::G4FissLib(), G4FTFBinaryKaonBuilder::G4FTFBinaryKaonBuilder(), G4FTFBinaryNeutronBuilder::G4FTFBinaryNeutronBuilder(), G4FTFBinaryPiKBuilder::G4FTFBinaryPiKBuilder(), G4FTFBinaryPionBuilder::G4FTFBinaryPionBuilder(), G4FTFBinaryProtonBuilder::G4FTFBinaryProtonBuilder(), G4FTFPAntiBarionBuilder::G4FTFPAntiBarionBuilder(), G4FTFPKaonBuilder::G4FTFPKaonBuilder(), G4FTFPNeutronBuilder::G4FTFPNeutronBuilder(), G4FTFPPiKBuilder::G4FTFPPiKBuilder(), G4FTFPPionBuilder::G4FTFPPionBuilder(), G4FTFPProtonBuilder::G4FTFPProtonBuilder(), G4HadronElastic::G4HadronElastic(), G4HadronicAbsorptionBertini::G4HadronicAbsorptionBertini(), G4HadronicAbsorptionFritiof::G4HadronicAbsorptionFritiof(), G4HadronicAbsorptionFritiofWithBinaryCascade::G4HadronicAbsorptionFritiofWithBinaryCascade(), G4hhElastic::G4hhElastic(), G4HyperonFTFPBuilder::G4HyperonFTFPBuilder(), G4HyperonQGSPBuilder::G4HyperonQGSPBuilder(), G4INCLXXPionBuilder::G4INCLXXPionBuilder(), G4LEHadronProtonElastic::G4LEHadronProtonElastic(), G4LENDModel::G4LENDModel(), G4LEnp::G4LEnp(), G4LEpp::G4LEpp(), G4LFission::G4LFission(), G4LowEGammaNuclearModel::G4LowEGammaNuclearModel(), G4MuonVDNuclearModel::G4MuonVDNuclearModel(), G4NeutrinoElectronCcModel::G4NeutrinoElectronCcModel(), G4NeutrinoElectronNcModel::G4NeutrinoElectronNcModel(), G4NeutrinoNucleusModel::G4NeutrinoNucleusModel(), G4NeutronElectronElModel::G4NeutronElectronElModel(), G4NeutronRadCapture::G4NeutronRadCapture(), G4NuclNuclDiffuseElastic::G4NuclNuclDiffuseElastic(), G4NuElNucleusNcModel::G4NuElNucleusNcModel(), G4NuMuNucleusNcModel::G4NuMuNucleusNcModel(), G4ParticleHPCapture::G4ParticleHPCapture(), G4ParticleHPElastic::G4ParticleHPElastic(), G4ParticleHPFission::G4ParticleHPFission(), G4ParticleHPInelastic::G4ParticleHPInelastic(), G4ParticleHPThermalScattering::G4ParticleHPThermalScattering(), G4QGSPAntiBarionBuilder::G4QGSPAntiBarionBuilder(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4NeutrinoElectronCcModel::IsApplicable(), G4HadronPhysicsFTFP_BERT_HP::Neutron(), G4HadronPhysicsINCLXX::Neutron(), G4HadronPhysicsQGSP_BERT_HP::Neutron(), G4HadronPhysicsQGSP_BIC_HP::Neutron(), G4HadronPhysicsShielding::Neutron(), and G4VHadronPhysics::NewModel().

◆ SetMinEnergy() [2/3]

void G4HadronicInteraction::SetMinEnergy ( G4double  anEnergy,
const G4Element anElement 
)
inherited

Definition at line 101 of file G4HadronicInteraction.cc.

103{
104 Block();
105 if(!theMinEnergyListElements.empty()) {
106 for(auto & elmlist : theMinEnergyListElements) {
107 if( anElement == elmlist.second ) {
108 elmlist.first = anEnergy;
109 return;
110 }
111 }
112 }
113 theMinEnergyListElements.push_back(std::pair<G4double, const G4Element *>(anEnergy, anElement));
114}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMinEnergyListElements.

◆ SetMinEnergy() [3/3]

void G4HadronicInteraction::SetMinEnergy ( G4double  anEnergy,
const G4Material aMaterial 
)
inherited

Definition at line 116 of file G4HadronicInteraction.cc.

118{
119 Block();
120 if(!theMinEnergyList.empty()) {
121 for(auto & matlist : theMinEnergyList) {
122 if( aMaterial == matlist.second ) {
123 matlist.first = anEnergy;
124 return;
125 }
126 }
127 }
128 theMinEnergyList.push_back(std::pair<G4double, const G4Material *>(anEnergy, aMaterial));
129}

References G4HadronicInteraction::Block(), and G4HadronicInteraction::theMinEnergyList.

◆ SetModelName()

void G4HadronicInteraction::SetModelName ( const G4String nam)
inlineprotectedinherited

◆ SetPrecompound()

void G4BinaryLightIonReaction::SetPrecompound ( G4VPreCompoundModel ptr)
inline

◆ SetRecoilEnergyThreshold()

void G4HadronicInteraction::SetRecoilEnergyThreshold ( G4double  val)
inlineinherited

◆ SetVerboseLevel()

void G4HadronicInteraction::SetVerboseLevel ( G4int  value)
inlineinherited

◆ SortResult()

G4LorentzVector G4BinaryLightIonReaction::SortResult ( G4ReactionProductVector result,
G4ReactionProductVector spectators,
G4ReactionProductVector cascaders 
)
private

Definition at line 615 of file G4BinaryLightIonReaction.cc.

616{
617 unsigned int i(0);
619 G4LorentzVector pspectators(0,0,0,0);
621 for(i=0; i<result->size(); i++)
622 {
623 if( (*result)[i]->GetNewlyAdded() )
624 {
625 pFinalState += G4LorentzVector( (*result)[i]->GetMomentum(), (*result)[i]->GetTotalEnergy() );
626 cascaders->push_back((*result)[i]);
627 }
628 else {
629 // G4cout <<" spectator ... ";
630 pspectators += G4LorentzVector( (*result)[i]->GetMomentum(), (*result)[i]->GetTotalEnergy() );
631 spectators->push_back((*result)[i]);
632 spectatorA++;
633 spectatorZ+= G4lrint((*result)[i]->GetDefinition()->GetPDGCharge()/eplus);
634 }
635
636 // G4cout << (*result)[i]<< " "
637 // << (*result)[i]->GetDefinition()->GetParticleName() << " "
638 // << (*result)[i]->GetMomentum()<< " "
639 // << (*result)[i]->GetTotalEnergy() << G4endl;
640 }
641 //G4cout << "pFinalState / pspectators, (A,Z), p " << pFinalState << " / " << spectators->size()
642 // << " (" << spectatorA << ", "<< spectatorZ << "), 4-mom: " << pspectators << G4endl;
643
644 return pspectators;
645}

References eplus, G4lrint(), pFinalState, spectatorA, and spectatorZ.

Referenced by ApplyYourself().

Field Documentation

◆ debug_G4BinaryLightIonReactionResults

G4bool G4BinaryLightIonReaction::debug_G4BinaryLightIonReactionResults
private

◆ epCheckLevels

std::pair<G4double, G4double> G4HadronicInteraction::epCheckLevels
privateinherited

◆ isBlocked

G4bool G4HadronicInteraction::isBlocked
protectedinherited

◆ pA

G4int G4BinaryLightIonReaction::pA
private

◆ pFinalState

G4LorentzVector G4BinaryLightIonReaction::pFinalState
private

Definition at line 64 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), DeExciteSpectatorNucleus(), and SortResult().

◆ pInitialState

G4LorentzVector G4BinaryLightIonReaction::pInitialState
private

Definition at line 64 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), and DeExciteSpectatorNucleus().

◆ projectile3dNucleus

G4Fancy3DNucleus* G4BinaryLightIonReaction::projectile3dNucleus
private

Definition at line 62 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), GetProjectileExcitation(), and Interact().

◆ pZ

G4int G4BinaryLightIonReaction::pZ
private

◆ recoilEnergyThreshold

G4double G4HadronicInteraction::recoilEnergyThreshold
privateinherited

◆ registry

G4HadronicInteractionRegistry* G4HadronicInteraction::registry
privateinherited

◆ spectatorA

G4int G4BinaryLightIonReaction::spectatorA
private

Definition at line 61 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), DeExciteSpectatorNucleus(), and SortResult().

◆ spectatorZ

G4int G4BinaryLightIonReaction::spectatorZ
private

Definition at line 61 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), DeExciteSpectatorNucleus(), and SortResult().

◆ tA

G4int G4BinaryLightIonReaction::tA
private

◆ target3dNucleus

G4Fancy3DNucleus * G4BinaryLightIonReaction::target3dNucleus
private

Definition at line 62 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), and Interact().

◆ theBLIR_ID

G4int G4BinaryLightIonReaction::theBLIR_ID = -1
staticprivate

Definition at line 67 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself(), and G4BinaryLightIonReaction().

◆ theBlockedList

std::vector<const G4Material *> G4HadronicInteraction::theBlockedList
privateinherited

◆ theBlockedListElements

std::vector<const G4Element *> G4HadronicInteraction::theBlockedListElements
privateinherited

◆ theFermi

G4FermiMomentum G4BinaryLightIonReaction::theFermi
private

Definition at line 63 of file G4BinaryLightIonReaction.hh.

Referenced by GetProjectileExcitation(), and Interact().

◆ theHandler

G4ExcitationHandler* G4BinaryLightIonReaction::theHandler
private

◆ theMaxEnergy

G4double G4HadronicInteraction::theMaxEnergy
protectedinherited

◆ theMaxEnergyList

std::vector<std::pair<G4double, const G4Material *> > G4HadronicInteraction::theMaxEnergyList
privateinherited

◆ theMaxEnergyListElements

std::vector<std::pair<G4double, const G4Element *> > G4HadronicInteraction::theMaxEnergyListElements
privateinherited

◆ theMinEnergy

G4double G4HadronicInteraction::theMinEnergy
protectedinherited

◆ theMinEnergyList

std::vector<std::pair<G4double, const G4Material *> > G4HadronicInteraction::theMinEnergyList
privateinherited

◆ theMinEnergyListElements

std::vector<std::pair<G4double, const G4Element *> > G4HadronicInteraction::theMinEnergyListElements
privateinherited

◆ theModel

G4BinaryCascade* G4BinaryLightIonReaction::theModel
private

Definition at line 57 of file G4BinaryLightIonReaction.hh.

Referenced by G4BinaryLightIonReaction(), and Interact().

◆ theModelName

G4String G4HadronicInteraction::theModelName
privateinherited

◆ theParticleChange

G4HadFinalState G4HadronicInteraction::theParticleChange
protectedinherited

Definition at line 172 of file G4HadronicInteraction.hh.

Referenced by G4WilsonAbrasionModel::ApplyYourself(), G4EMDissociation::ApplyYourself(), G4LENDCapture::ApplyYourself(), G4LENDElastic::ApplyYourself(), G4LENDFission::ApplyYourself(), G4LENDInelastic::ApplyYourself(), G4ElectroVDNuclearModel::ApplyYourself(), G4ParticleHPThermalScattering::ApplyYourself(), G4NeutrinoElectronNcModel::ApplyYourself(), G4NeutronElectronElModel::ApplyYourself(), G4LFission::ApplyYourself(), G4ANuElNucleusCcModel::ApplyYourself(), G4ANuElNucleusNcModel::ApplyYourself(), G4ANuMuNucleusCcModel::ApplyYourself(), G4ANuMuNucleusNcModel::ApplyYourself(), G4MuonVDNuclearModel::ApplyYourself(), G4NeutrinoElectronCcModel::ApplyYourself(), G4NuElNucleusCcModel::ApplyYourself(), G4NuElNucleusNcModel::ApplyYourself(), G4NuMuNucleusCcModel::ApplyYourself(), G4NuMuNucleusNcModel::ApplyYourself(), G4QMDReaction::ApplyYourself(), G4NeutronRadCapture::ApplyYourself(), G4LowEGammaNuclearModel::ApplyYourself(), G4ChargeExchange::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4LEHadronProtonElastic::ApplyYourself(), G4LEnp::ApplyYourself(), G4LEpp::ApplyYourself(), G4BinaryCascade::ApplyYourself(), G4CascadeInterface::ApplyYourself(), G4LMsdGenerator::ApplyYourself(), G4ElectroVDNuclearModel::CalculateEMVertex(), G4MuonVDNuclearModel::CalculateEMVertex(), G4ElectroVDNuclearModel::CalculateHadronicVertex(), G4MuonVDNuclearModel::CalculateHadronicVertex(), G4NeutrinoNucleusModel::CoherentPion(), G4CascadeInterface::copyOutputToHadronicResult(), G4BinaryCascade::DebugEpConservation(), G4BinaryCascade::DebugFinalEpConservation(), G4NeutrinoNucleusModel::FinalBarion(), G4NeutrinoNucleusModel::FinalMeson(), G4WilsonAbrasionModel::GetAbradedNucleons(), G4CascadeInterface::NoInteraction(), G4CascadeInterface::Propagate(), G4NeutrinoNucleusModel::RecoilDeexcitation(), G4LEHadronProtonElastic::~G4LEHadronProtonElastic(), G4LEnp::~G4LEnp(), and G4LFission::~G4LFission().

◆ theProjectileFragmentation

G4VPreCompoundModel* G4BinaryLightIonReaction::theProjectileFragmentation
private

◆ theResult

G4HadFinalState G4BinaryLightIonReaction::theResult
private

Definition at line 60 of file G4BinaryLightIonReaction.hh.

Referenced by ApplyYourself().

◆ tZ

G4int G4BinaryLightIonReaction::tZ
private

◆ verboseLevel

G4int G4HadronicInteraction::verboseLevel
protectedinherited

Definition at line 177 of file G4HadronicInteraction.hh.

Referenced by G4WilsonAbrasionModel::ApplyYourself(), G4EMDissociation::ApplyYourself(), G4LFission::ApplyYourself(), G4MuMinusCapturePrecompound::ApplyYourself(), G4NeutronRadCapture::ApplyYourself(), G4LowEGammaNuclearModel::ApplyYourself(), G4ChargeExchange::ApplyYourself(), G4HadronElastic::ApplyYourself(), G4LEHadronProtonElastic::ApplyYourself(), G4LEnp::ApplyYourself(), G4LEpp::ApplyYourself(), G4CascadeInterface::ApplyYourself(), G4CascadeInterface::checkFinalResult(), G4CascadeInterface::copyOutputToHadronicResult(), G4CascadeInterface::copyOutputToReactionProducts(), G4LENDModel::create_used_target_map(), G4CascadeInterface::createBullet(), G4CascadeInterface::createTarget(), G4ElasticHadrNucleusHE::DefineHadronValues(), G4ElasticHadrNucleusHE::FillData(), G4ElasticHadrNucleusHE::FillFq2(), G4DiffuseElastic::G4DiffuseElastic(), G4DiffuseElasticV2::G4DiffuseElasticV2(), G4ElasticHadrNucleusHE::G4ElasticHadrNucleusHE(), G4EMDissociation::G4EMDissociation(), G4hhElastic::G4hhElastic(), G4NuclNuclDiffuseElastic::G4NuclNuclDiffuseElastic(), G4WilsonAbrasionModel::G4WilsonAbrasionModel(), G4ElasticHadrNucleusHE::GetFt(), G4ElasticHadrNucleusHE::GetLightFq2(), G4ElasticHadrNucleusHE::GetQ2_2(), G4HadronicInteraction::GetVerboseLevel(), G4ElasticHadrNucleusHE::HadronNucleusQ2_2(), G4ElasticHadrNucleusHE::HadronProtonQ2(), G4LFission::init(), G4DiffuseElastic::Initialise(), G4DiffuseElasticV2::Initialise(), G4NuclNuclDiffuseElastic::Initialise(), G4DiffuseElastic::InitialiseOnFly(), G4DiffuseElasticV2::InitialiseOnFly(), G4NuclNuclDiffuseElastic::InitialiseOnFly(), G4CascadeInterface::makeDynamicParticle(), G4CascadeInterface::NoInteraction(), G4CascadeInterface::Propagate(), G4ElasticHadrNucleusHE::SampleInvariantT(), G4AntiNuclElastic::SampleThetaCMS(), G4DiffuseElastic::SampleThetaLab(), G4NuclNuclDiffuseElastic::SampleThetaLab(), G4AntiNuclElastic::SampleThetaLab(), G4WilsonAbrasionModel::SetUseAblation(), G4HadronicInteraction::SetVerboseLevel(), G4WilsonAbrasionModel::SetVerboseLevel(), G4DiffuseElastic::ThetaCMStoThetaLab(), G4DiffuseElasticV2::ThetaCMStoThetaLab(), G4NuclNuclDiffuseElastic::ThetaCMStoThetaLab(), G4DiffuseElastic::ThetaLabToThetaCMS(), G4DiffuseElasticV2::ThetaLabToThetaCMS(), and G4NuclNuclDiffuseElastic::ThetaLabToThetaCMS().


The documentation for this class was generated from the following files: