43 #include "G4ParticleChange.hh" 54 G4VITRestDiscreteProcess(processName, type)
57 SetProcessSubType(59);
58 enableAlongStepDoIt =
false;
59 enablePostStepDoIt =
true;
60 enableAtRestDoIt =
true;
67 G4cout <<
"G4MolecularDissociationProcess constructor " <<
" Name:" 72 pParticleChange = &aParticleChange;
75 fProposesTimeStep =
true;
99 G4VITRestDiscreteProcess(right)
117 G4cout <<
"G4MolecularDissociation::IsApplicable(";
136 return (output > 0 ? output : 0);
147 aParticleChange.Initialize(track);
159 const vector<const G4MolecularDissociationChannel*>* DecayVector =
166 exceptionDescription <<
"No decay channel was found for the molecule : " 169 "G4DNAMolecularDissociation::NoDecayChannel",
171 exceptionDescription);
172 return &aParticleChange;
175 G4int DecayVectorSize = DecayVector->size();
184 decayChannel = (*DecayVector)[i];
185 if(RdmValue < decayChannel->GetProbability())
break;
189 while(i < DecayVectorSize);
204 aParticleChange.ProposeLocalEnergyDeposit(decayChannel->
GetEnergy());
213 vector<G4ThreeVector> ProductsDisplacement(nbProducts);
216 DecayDisplacementMap::iterator it =
223 theMotherMoleculeDisplacement =
229 errMsg <<
"No G4MolecularDecayProcess::theDecayDisplacementMap[" 230 << theMotherMolecule->
GetName() +
"]";
232 "DNAMolecularDecay001",
237 aParticleChange.SetNumberOfSecondaries(nbProducts);
246 <<
" (trackID :" << track.GetTrackID() <<
") " 255 for(
G4int j = 0; j < nbProducts; j++)
260 + ProductsDisplacement[j];
261 double mag_displacement = displacement.
mag();
262 G4ThreeVector displacement_direction = displacement / mag_displacement;
266 navigator->CheckNextStep(track.GetPosition(),
267 displacement_direction,
271 if(prNewSafety < mag_displacement) mag_displacement = prNewSafety;
290 track.GetPosition() + displacement_direction
293 secondary->SetTrackStatus(fAlive);
301 aParticleChange.G4VParticleChange::AddSecondary(secondary);
327 aParticleChange.ProposeTrackStatus(fStopAndKill);
329 return &aParticleChange;
virtual G4double GetMeanLifeTime(const G4Track &, G4ForceCondition *)
G4double GetEnergy() const
G4VMolecularDecayDisplacer * GetDecayDisplacer(const G4ParticleDefinition *)
std::ostringstream G4ExceptionDescription
G4ITNavigator * GetNavigatorForTracking() const
const G4MolecularDissociationTable * GetDecayTable() const
const G4String & GetParticleType() const
G4MolecularConfiguration * GetProduct(int) const
const G4MoleculeDefinition * GetDefinition() const
const std::vector< const G4MolecularDissociationChannel * > * GetDecayChannel() const
const G4String & GetParticleName() const
static G4ITTransportationManager * GetTransportationManager()
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
G4double GetDecayTime() const
virtual G4VParticleChange * DecayIt(const G4Track &, const G4Step &)
virtual std::vector< G4ThreeVector > GetProductsDisplacement(const G4MolecularDissociationChannel *) const =0
virtual ~G4DNAMolecularDissociation()
G4Molecule * GetMolecule(const G4Track &track)
G4double GetProbability() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4Track * BuildTrack(G4double globalTime, const G4ThreeVector &Position)
DecayDisplacementMap fDecayDisplacementMap
G4DNAMolecularDissociation()
const G4String & GetName() const
virtual G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
void SetDecayDisplacer(const G4ParticleDefinition *, G4VMolecularDecayDisplacer *)
virtual G4ThreeVector GetMotherMoleculeDisplacement(const G4MolecularDissociationChannel *) const =0
G4int GetNbProducts() const
virtual G4bool IsApplicable(const G4ParticleDefinition &)