64{
69
70
72
73
77 if(kineticEnergy == 0.0 || track.GetTrackStatus() !=
fAlive) {
79 }
80
82
83
89
91 }
92 }
93
96
97
100
101
105
106 if(nullptr != fDiffraction) {
111
113 {
114 try
115 {
117 }
119 {
124 <<
" off target element " << elm->
GetName() <<
" Z= "
128 ed <<
" ApplyYourself failed" <<
G4endl;
129 G4Exception(
"G4HadronElasticProcess::PostStepDoIt",
"had006",
131 }
132
133 result =
CheckResult(theProj, *targNucleus, result);
135
136
137
139
142 }
144 }
145 }
146
147
149 if(nullptr == hadi) {
152 <<
" off target element " << elm->
GetName() <<
" Z= "
155 DumpState(track,
"ChooseHadronicInteraction",ed);
156 ed <<
" No HadronicInteraction found out" <<
G4endl;
157 G4Exception(
"G4HadronElasticProcess::PostStepDoIt",
"had005",
160 }
161
162 size_t idx = track.GetMaterialCutsCouple()->GetIndex();
166
167
168
169
170
171
172
173
174
175
177
178
179
180
181
182
183
186
187
188
189
190
191
192
193
194
195
198
199
201
202 if(efinal > 0.0) {
205 } else {
210 }
211
212
213
214
216
217
220
224
226
228
229
231 track.GetPosition());
237
238 } else {
240 delete p;
241 }
242 }
246
248}
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
Hep3Vector & rotateUz(const Hep3Vector &)
G4double ComputeCrossSection(const G4DynamicParticle *, const G4Material *)
const G4Element * SampleZandA(const G4DynamicParticle *, const G4Material *, G4Nucleus &target)
void SetMomentumDirection(const G4ThreeVector &aDirection)
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4String & GetName() const
G4double GetEnergyChange() const
void SetTrafoToLab(const G4LorentzRotation &aT)
G4double GetLocalEnergyDeposit() const
const G4ThreeVector & GetMomentumChange() const
std::size_t GetNumberOfSecondaries() const
G4HadSecondary * GetSecondary(size_t i)
G4DynamicParticle * GetParticle()
void Report(std::ostream &aS) const
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
const G4String & GetModelName() const
void SetRecoilEnergyThreshold(G4double val)
void FillResult(G4HadFinalState *aR, const G4Track &aT)
G4Nucleus * GetTargetNucleusPointer()
G4HadFinalState * CheckResult(const G4HadProjectile &thePro, const G4Nucleus &targetNucleus, G4HadFinalState *result)
G4ParticleChange * theTotalResult
G4HadronicInteraction * ChooseHadronicInteraction(const G4HadProjectile &aHadProjectile, G4Nucleus &aTargetNucleus, const G4Material *aMaterial, const G4Element *anElement)
G4CrossSectionDataStore * theCrossSectionDataStore
void CheckEnergyMomentumConservation(const G4Track &, const G4Nucleus &)
void DumpState(const G4Track &, const G4String &, G4ExceptionDescription &)
G4double theLastCrossSection
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
void AddSecondary(G4Track *aSecondary)
void Initialize(const G4Track &) override
void ProposeEnergy(G4double finalEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4ProcessManager * GetProcessManager() const
const G4String & GetParticleName() const
static G4int GetModelID(const G4int modelIndex)
G4ProcessVector * GetAtRestProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
const std::vector< G4double > * GetEnergyCutsVector(std::size_t pcIdx) const
static G4ProductionCutsTable * GetProductionCutsTable()
void SetWeight(G4double aValue)
void SetTouchableHandle(const G4TouchableHandle &apValue)
void SetCreatorModelID(const G4int id)
virtual G4double ComputeRatio(const G4ParticleDefinition *, G4double kinEnergy, G4int, G4int)=0
void ProposeTrackStatus(G4TrackStatus status)
void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart)
void ProposeWeight(G4double finalWeight)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetNumberOfSecondaries(G4int totSecondaries)
G4double theNumberOfInteractionLengthLeft