71 fPoint->SetNode(
nullptr);
99 G4cout <<
"The user track information is a molecule" <<
G4endl;
108 fpMolecularConfiguration = right.fpMolecularConfiguration;
115 if (&right ==
this)
return *
this;
116 fpMolecularConfiguration = right.fpMolecularConfiguration;
124 if (fpMolecularConfiguration == right.fpMolecularConfiguration)
135 return !(*
this == right);
146 return fpMolecularConfiguration < right.fpMolecularConfiguration;
151G4Molecule::G4Molecule()
155 fpMolecularConfiguration =
nullptr;
167 RemoveAMoleculeAtTime(fpMolecularConfiguration,
173 fpMolecularConfiguration =
nullptr;
210 if (OrbitalToFill != 0)
213 dynElectronOccupancy.
AddElectron(OrbitalToFill - 1, 1);
217 if (OrbitalToFill == 0)
223 fpMolecularConfiguration =
225 pMoleculeDefinition, dynElectronOccupancy);
229 fpMolecularConfiguration =
nullptr;
231 "G4Molecule::G4Molecule(G4MoleculeDefinition* pMoleculeDefinition, "
232 "G4int OrbitalToFree, G4int OrbitalToFill)",
233 "G4Molecule_wrong_usage_of_constructor",
235 "If you want to use this constructor, the molecule definition has to be "
236 "first defined with electron occupancies");
268 dynElectronOccupancy);
272 fpMolecularConfiguration =
nullptr;
274 "G4Molecule::G4Molecule(G4MoleculeDefinition* pMoleculeDefinition, "
275 "G4int OrbitalToFree, G4int OrbitalToFill)",
276 "G4Molecule_wrong_usage_of_constructor",
278 "If you want to use this constructor, the molecule definition has to be "
279 "first defined with electron occupancies");
287 fpMolecularConfiguration = pMolecularConfiguration;
294 fpMolecularConfiguration =
303 fpMolecularConfiguration = fpMolecularConfiguration->
ExciteMolecule(excitationLevel);
310 fpMolecularConfiguration = fpMolecularConfiguration->
IonizeMolecule(ionizationLevel);
317 fpMolecularConfiguration = fpMolecularConfiguration->
AddElectron(orbit, number);
324 fpMolecularConfiguration =
332 fpMolecularConfiguration =
340 return fpMolecularConfiguration->
GetName();
379 "A track was already assigned to this molecule");
388 G4double xMomentum = cos(phi) * sin(theta);
389 G4double yMomentum = sin(theta) * sin(phi);
392 G4ThreeVector MomentumDirection(xMomentum, yMomentum, zMomentum);
396 fpMolecularConfiguration->
GetDefinition(), MomentumDirection,
402 AddAMoleculeAtTime(fpMolecularConfiguration,
421 double E = (fpMolecularConfiguration->
GetMass() / (c_squared)) * (v * v) / 2.;
430 double moleculeMass = fpMolecularConfiguration->
GetMass() / (c_squared);
440 return sqrt(3 * k_Boltzmann *
452const vector<const G4MolecularDissociationChannel*>*
490 return fpMolecularConfiguration->
GetCharge();
497 return fpMolecularConfiguration->
GetMass();
524 double temperature)
const
534 return fpMolecularConfiguration;
541 return fpMolecularConfiguration->
GetLabel();
554 assert(fpMolecularConfiguration !=
nullptr);
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4IT * GetIT(const G4Track *track)
G4Molecule * GetMolecule(const G4Track &track)
G4DLLIMPORT G4Allocator< G4Molecule > *& aMoleculeAllocator()
G4GLOB_DLL std::ostream G4cout
G4int AddElectron(G4int orbit, G4int number=1)
G4int RemoveElectron(G4int orbit, G4int number=1)
virtual void Print() const
const G4String & GetName() const
G4MolecularConfiguration * IonizeMolecule(G4int) const
const G4String & GetLabel() const
G4MolecularConfiguration * RemoveElectron(G4int, G4int number=1) const
const G4MoleculeDefinition * GetDefinition() const
G4int GetFakeParticleID() const
G4MolecularConfiguration * MoveOneElectron(G4int, G4int) const
G4double GetDecayTime() const
G4int GetMoleculeID() const
static G4MolecularConfiguration * GetOrCreateMolecularConfiguration(const G4MoleculeDefinition *)
const G4ElectronOccupancy * GetElectronOccupancy() const
const std::vector< const G4MolecularDissociationChannel * > * GetDissociationChannels() const
const G4String & GetFormatedName() const
G4double GetNbElectrons() const
static G4MolecularConfiguration * GetMolecularConfiguration(const G4MoleculeDefinition *, const G4String &label)
G4MolecularConfiguration * ExciteMolecule(G4int) const
G4double GetVanDerVaalsRadius() const
G4MolecularConfiguration * AddElectron(G4int orbit, G4int n=1) const
G4double GetDiffusionCoefficient() const
static G4double GetGlobalTemperature()
G4int GetAtomsNumber() const
const G4ElectronOccupancy * GetGroundStateElectronOccupancy() const
void IonizeMolecule(G4int)
void RemoveElectron(G4int, G4int number=1)
void AddElectron(G4int orbit, G4int n=1)
static G4Molecule * GetMolecule(const G4Track *)
G4bool operator<(const G4Molecule &right) const
G4double GetVanDerVaalsRadius() const
const G4MolecularConfiguration * GetMolecularConfiguration() const
void SetElectronOccupancy(const G4ElectronOccupancy *)
void MoveOneElectron(G4int, G4int)
const G4String & GetLabel() const
void ChangeConfigurationToLabel(const G4String &label)
G4int GetMoleculeID() const
G4double GetKineticEnergy() const
G4Molecule(const G4Molecule &)
const G4String & GetFormatedName() const
G4int GetAtomsNumber() const
G4bool operator==(const G4Molecule &right) const
G4int GetFakeParticleID() const
G4double GetDiffusionVelocity() const
const G4String & GetName() const
G4Track * BuildTrack(G4double globalTime, const G4ThreeVector &Position)
void ExciteMolecule(G4int)
G4bool operator!=(const G4Molecule &right) const
const G4ElectronOccupancy * GetElectronOccupancy() const
G4Molecule & operator=(const G4Molecule &right)
const G4MoleculeDefinition * GetDefinition() const
G4double GetDiffusionCoefficient() const
G4double GetDecayTime() const
const std::vector< const G4MolecularDissociationChannel * > * GetDissociationChannels() const
G4double GetNbElectrons() const
const G4ThreeVector & GetPosition() const
G4double GetGlobalTime() const
void SetUserInformation(G4VUserTrackInformation *aValue) const
static G4VMoleculeCounter * Instance()
#define G4ThreadLocalStatic