46#ifndef G4MolecularConfiguration_
47#define G4MolecularConfiguration_ 1
68 if (totalOcc1 != totalOcc2)
70 return totalOcc1 < totalOcc2;
73 G4int occupancy1 = -1;
74 G4int occupancy2 = -1;
76 for (
G4int i = 0; i < sizeOrbit; i++)
81 if (occupancy1 != occupancy2)
83 return occupancy1 < occupancy2;
129 bool& wasAlreadyCreated);
136 bool& wasAlreadyCreated);
143 bool& wasAlreadyCreated);
149 bool& wasAlreadyCreated);
248 double temperature)
const;
344 fLastMoleculeID = -1;
350 return fLastMoleculeID+1;
408 return fMolConfPerID;
419 using ElectronOccupancyTable = std::map<G4ElectronOccupancy, G4MolecularConfiguration *, comparator>;
420 using MolElectronConfTable = std::map<const G4MoleculeDefinition *, ElectronOccupancyTable>;
421 MolElectronConfTable fElecOccTable;
424 using ChargeTable = std::map<int, G4MolecularConfiguration *>;
425 using MolChargeConfTable = std::map<const G4MoleculeDefinition *, ChargeTable>;
426 MolChargeConfTable fChargeTable;
429 using LabelTable = std::map<const G4String, G4MolecularConfiguration *>;
430 using MolLabelConfTable = std::map<const G4MoleculeDefinition *, std::map<const G4String, G4MolecularConfiguration *>>;
431 MolLabelConfTable fLabelTable;
434 using UserIDTable = std::map<G4String, G4MolecularConfiguration *>;
435 UserIDTable fUserIDTable;
438 std::vector<G4MolecularConfiguration*> fMolConfPerID;
442 G4int fLastMoleculeID;
443 G4Mutex fMoleculeCreationMutex;
580 double temperature)
const
582 return fDiffParam(material, temperature,
this);
G4int GetTotalOccupancy() const
G4int GetOccupancy(G4int orbit) const
G4int GetSizeOfOrbit() const
void RemoveMolecularConfigurationFromTable(G4MolecularConfiguration *)
const G4ElectronOccupancy * FindCommonElectronOccupancy(const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc)
G4int Insert(const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc, G4MolecularConfiguration *molConf)
const std::vector< G4MolecularConfiguration * > & GetAllSpecies()
G4MolecularConfigurationManager()
void RecordNewlyLabeledConfiguration(G4MolecularConfiguration *molConf)
int GetNumberOfCreatedSpecies()
G4MolecularConfiguration * GetOrCreateMolecularConfiguration(const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc)
std::map< G4String, G4MolecularConfiguration * > & GetUserIDTable()
static G4Mutex fManagerCreationMutex
G4MolecularConfiguration * GetMolecularConfiguration(const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc)
~G4MolecularConfigurationManager()
void AddUserID(const G4String &name, G4MolecularConfiguration *molecule)
void SetDiffusionCoefficient(G4double)
void SetDecayTime(G4double)
static G4MolecularConfiguration * Load(std::istream &)
static int GetNumberOfSpecies()
void CreateDefaultDiffCoeffParam()
void SetUserID(const G4String &userID)
static G4MolecularConfigurationManager * GetManager()
void MakeExceptionIfFinalized()
const G4String & GetName() const
const G4ElectronOccupancy * fElectronOccupancy
G4MolecularConfiguration * IonizeMolecule(G4int) const
static void FinalizeAll()
void SetLabel(const G4String &)
const G4String & GetLabel() const
G4MolecularConfiguration * ChangeConfiguration(const G4ElectronOccupancy &newElectronOccupancy) const
G4MolecularConfiguration & operator=(G4MolecularConfiguration &right)
G4MolecularConfiguration * RemoveElectron(G4int, G4int number=1) const
const G4MoleculeDefinition * GetDefinition() const
static void ScaleAllDiffusionCoefficientsOnWater(double temperature_K)
G4double fDynDiffusionCoefficient
G4int GetFakeParticleID() const
static std::map< G4String, G4MolecularConfiguration * > & GetUserIDTable()
static void DeleteManager()
G4MolecularConfiguration * MoveOneElectron(G4int, G4int) const
G4double GetDecayTime() const
~G4MolecularConfiguration()
void SetVanDerVaalsRadius(G4double)
G4double fDynVanDerVaalsRadius
G4int GetMoleculeID() const
G4MolecularConfiguration(const G4MolecularConfiguration &)
static double ReturnDefaultDiffCoeff(const G4Material *, double, const G4MolecularConfiguration *molConf)
void Unserialize(std::istream &)
const G4MoleculeDefinition * fMoleculeDefinition
static double fgTemperature
void AddDiffCoeffParameterization(const G4DiffCoeffParam &)
static void SetGlobalTemperature(G4double)
void Serialize(std::ostream &)
static G4MolecularConfiguration * GetOrCreateMolecularConfiguration(const G4MoleculeDefinition *)
const G4ElectronOccupancy * GetElectronOccupancy() const
void CheckElectronOccupancy(const char *line) const
const std::vector< const G4MolecularDissociationChannel * > * GetDissociationChannels() const
const G4String & GetFormatedName() const
static G4MolecularConfigurationManager * fgManager
const G4String & GetUserID() const
G4MolecularConfiguration(const G4MoleculeDefinition *, const G4ElectronOccupancy &, const G4String &label="")
G4double GetNbElectrons() const
static G4MolecularConfiguration * GetMolecularConfiguration(const G4MoleculeDefinition *, const G4String &label)
G4MolecularConfiguration * ExciteMolecule(G4int) const
G4double GetVanDerVaalsRadius() const
static double DiffCoeffWater(double temperature_K)
G4DiffCoeffParam fDiffParam
G4MolecularConfiguration * AddElectron(G4int orbit, G4int n=1) const
G4double GetDiffusionCoefficient() const
std::function< double(const G4Material *, double, const G4MolecularConfiguration *)> G4DiffCoeffParam
static G4double GetGlobalTemperature()
static G4MolecularConfiguration * CreateMolecularConfiguration(const G4String &userIdentifier, const G4MoleculeDefinition *, bool &wasAlreadyCreated)
G4int GetAtomsNumber() const
bool operator()(const G4ElectronOccupancy &occ1, const G4ElectronOccupancy &occ2) const