73 G4cout <<
"G4Decay constructor " <<
" Name:" << processName <<
G4endl;
92 }
else if (aParticleType.
GetPDGMass() <= 0.0*MeV) {
153 if ( rKineticEnergy <
DBL_MIN ) {
157 G4cout <<
"G4Decay::GetMeanFreePath() !!particle stops!!";
196 G4bool isPreAssigned = (o_products !=
nullptr);
206 if ( (decaytable ==
nullptr) && !isExtDecayer && !isPreAssigned ){
208 G4cout <<
"G4Decay::DoIt : decay table not defined for ";
213 <<
" decay probability exist but decay table is not defined "
214 <<
"- the particle will be killed;\n"
215 <<
" isExtDecayer: " << isExtDecayer
216 <<
"; isPreAssigned: " << isPreAssigned;
232 }
else if ( isExtDecayer ) {
234 products =
pExtDecayer->ImportDecayProducts(aTrack);
252 if ( decaychannel ==
nullptr) {
255 ed <<
"Can not determine decay channel for "
257 <<
" mass of dynamic particle: "
258 << massParent/GeV <<
" (GEV)" <<
G4endl
259 <<
" dacay table has " << decaytable->
entries()
262 if (massParent < 0.) {
264 ed <<
"Using PDG mass ("<<checkedmass/GeV
265 <<
"(GeV)) in IsOKWithParentMass" <<
G4endl;
269 ed << ic <<
": BR " << dc->
GetBR() <<
", IsOK? "
273 for (
G4int id=0;
id<ndaughters;++id) {
274 if (
id>0) ed <<
" + ";
285 G4cout <<
"G4Decay::DoIt : selected decay channel addr:"
307 if (ParentEnergy < ParentMass) {
309 ed <<
"Total Energy is less than its mass - increased the energy"
311 <<
"\n Energy:" << ParentEnergy/MeV <<
"[MeV]"
312 <<
"\n Mass:" << ParentMass/MeV <<
"[MeV]";
315 ParentEnergy = ParentMass;
329 if (isPreAssigned) products->
Boost( ParentEnergy, ParentDirection);
332 if (!isExtDecayer) products->
Boost( ParentEnergy, ParentDirection);
343 G4cout <<
"G4Decay::DoIt : Decay vertex :";
344 G4cout <<
" Time: " << finalGlobalTime/
ns <<
"[ns]";
349 G4cout <<
"G4Decay::DoIt : decay products in Lab. Frame" <<
G4endl;
356 for (index=0; index < numberOfSecondaries; index++){
421 if ( previousStepSize > 0.0){
434 G4cout <<
"G4Decay::PostStepGetPhysicalInteractionLength " <<
G4endl;
520 <<
"kinematics of daughters are dertermined by DecayChannels "
521 <<
" or by PreAssignedDecayProducts\n";
G4double condition(const G4ErrorSymMatrix &m)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
CLHEP::Hep3Vector G4ThreeVector
G4ReferenceCountedHandle< G4VTouchable > G4TouchableHandle
G4TouchableHandle is a type providing reference counting mechanism for any kind of touchable objects....
G4GLOB_DLL std::ostream G4cout
G4DynamicParticle * PopProducts()
void Boost(G4double totalEnergy, const G4ThreeVector &momentumDirection)
G4VDecayChannel * GetDecayChannel(G4int index) const
G4VDecayChannel * SelectADecayChannel(G4double parentMass=-1.)
virtual void ProcessDescription(std::ostream &outFile) const override
G4VExtDecayer * pExtDecayer
virtual void DaughterPolarization(const G4Track &aTrack, G4DecayProducts *products)
virtual G4VParticleChange * DecayIt(const G4Track &aTrack, const G4Step &aStep)
G4double fRemainderLifeTime
G4ParticleChangeForDecay fParticleChangeForDecay
virtual G4bool IsApplicable(const G4ParticleDefinition &) override
virtual G4double GetMeanFreePath(const G4Track &aTrack, G4double previousStepSize, G4ForceCondition *condition) override
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
virtual void EndTracking() override
virtual void StartTracking(G4Track *) override
void SetExtDecayer(G4VExtDecayer *)
G4Decay(const G4String &processName="Decay")
virtual G4double AtRestGetPhysicalInteractionLength(const G4Track &track, G4ForceCondition *condition) override
virtual G4double GetMeanLifeTime(const G4Track &aTrack, G4ForceCondition *condition) override
virtual void BuildPhysicsTable(const G4ParticleDefinition &) override
virtual G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep) override
void DumpInfo(G4int mode=0) const
const G4ThreeVector & GetMomentumDirection() const
const G4DecayProducts * GetPreAssignedDecayProducts() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4double GetTotalEnergy() const
G4double GetPreAssignedDecayProperTime() const
G4double GetTotalMomentum() const
const G4String & GetName() const
G4bool GetPDGStable() const
G4double GetPDGMass() const
G4DecayTable * GetDecayTable() const
G4double GetPDGLifeTime() const
const G4String & GetParticleName() const
G4TrackStatus GetTrackStatus() const
const G4ThreeVector & GetPosition() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
G4double GetGlobalTime() const
G4double GetProperTime() const
G4double GetLocalTime() const
G4Material * GetMaterial() const
const G4DynamicParticle * GetDynamicParticle() const
const G4TouchableHandle & GetTouchableHandle() const
void SetGoodForTrackingFlag(G4bool value=true)
void SetVerboseLevel(G4int value)
G4int GetVerboseLevel() const
G4int GetNumberOfDaughters() const
virtual G4DecayProducts * DecayIt(G4double parentMass=-1.0)=0
virtual G4bool IsOKWithParentMass(G4double parentMass)
const G4String & GetDaughterName(G4int anIndex) const
G4double currentInteractionLength
void SubtractNumberOfInteractionLengthLeft(G4double prevStepSize)
G4int GetVerboseLevel() const
virtual void ResetNumberOfInteractionLengthLeft()
void ClearNumberOfInteractionLengthLeft()
G4double theNumberOfInteractionLengthLeft
void SetProcessSubType(G4int)
G4VParticleChange * pParticleChange
const G4String & GetProcessName() const
G4VRestDiscreteProcess(const G4String &, G4ProcessType aType=fNotDefined)