Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4MolecularConfiguration::G4MolecularConfigurationManager Class Reference

#include <G4MolecularConfiguration.hh>

Public Member Functions

 G4MolecularConfigurationManager ()
 ~G4MolecularConfigurationManager ()
int GetNumberOfCreatedSpecies ()
G4int Insert (const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc, G4MolecularConfiguration *molConf)
G4int Insert (const G4MoleculeDefinition *molDef, int charge, G4MolecularConfiguration *molConf)
G4int Insert (const G4MoleculeDefinition *molDef, const G4String &label, G4MolecularConfiguration *molConf)
void AddUserID (const G4String &name, G4MolecularConfiguration *molecule)
void RecordNewlyLabeledConfiguration (G4MolecularConfiguration *molConf)
const G4ElectronOccupancyFindCommonElectronOccupancy (const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc)
G4MolecularConfigurationGetMolecularConfiguration (const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc)
G4MolecularConfigurationGetMolecularConfiguration (const G4MoleculeDefinition *molDef, int charge)
G4MolecularConfigurationGetMolecularConfiguration (const G4MoleculeDefinition *molDef, const G4String &label)
G4MolecularConfigurationGetMolecularConfiguration (int moleculeID)
G4MolecularConfigurationGetMolecularConfiguration (const G4String &userID)
G4MolecularConfigurationGetOrCreateMolecularConfiguration (const G4MoleculeDefinition *molDef, const G4ElectronOccupancy &eOcc)
G4MolecularConfigurationGetOrCreateMolecularConfiguration (const G4MoleculeDefinition *molDef, int charge)
void RemoveMolecularConfigurationFromTable (G4MolecularConfiguration *)
const std::vector< G4MolecularConfiguration * > & GetAllSpecies ()
std::map< G4String, G4MolecularConfiguration * > & GetUserIDTable ()

Static Public Attributes

static G4Mutex fManagerCreationMutex

Detailed Description

Definition at line 339 of file G4MolecularConfiguration.hh.

Constructor & Destructor Documentation

◆ G4MolecularConfigurationManager()

G4MolecularConfiguration::G4MolecularConfigurationManager::G4MolecularConfigurationManager ( )
inline

Definition at line 342 of file G4MolecularConfiguration.hh.

343 {
344 fLastMoleculeID = -1;
345 }

◆ ~G4MolecularConfigurationManager()

G4MolecularConfiguration::G4MolecularConfigurationManager::~G4MolecularConfigurationManager ( )

Definition at line 146 of file G4MolecularConfiguration.cc.

148{
149 G4MolecularConfigurationManager::MolElectronConfTable::iterator it1;
150 G4MolecularConfigurationManager::ElectronOccupancyTable::
151 iterator it2;
152
153 for (it1 = fElecOccTable.begin(); it1 != fElecOccTable.end(); it1++)
154 {
155 for (it2 = it1->second.begin(); it2 != it1->second.end(); it2++)
156 {
157
158
159 delete it2->second;
160
161 }
162 }
163 fElecOccTable.clear();
164 fgManager = nullptr;
165}
static G4MolecularConfigurationManager * fgManager

Member Function Documentation

◆ AddUserID()

void G4MolecularConfiguration::G4MolecularConfigurationManager::AddUserID ( const G4String & name,
G4MolecularConfiguration * molecule )

Definition at line 819 of file G4MolecularConfiguration.cc.

821{
822 auto it = fUserIDTable.find(userID);
823
824 if(it == fUserIDTable.end())
825 {
826 fUserIDTable[userID] = molecule;
827 }
828 else if(molecule != it->second)
829 {
830 // TODO improve exception
831 // exception
832 G4ExceptionDescription description;
833 description << "The user identifier " << userID
834 << " was already given in another configuration in the table"
835 << G4endl;
836 G4Exception("G4MolecularConfiguration::G4MolecularConfigurationManager::AddUserID",
837 "CONF_ALREADY_RECORDED",
839 description);
840 }
841}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
#define G4endl
Definition G4ios.hh:67

Referenced by G4MolecularConfiguration::CreateMolecularConfiguration(), G4MolecularConfiguration::CreateMolecularConfiguration(), G4MolecularConfiguration::CreateMolecularConfiguration(), G4MolecularConfiguration::CreateMolecularConfiguration(), and G4MolecularConfiguration::SetUserID().

◆ FindCommonElectronOccupancy()

const G4ElectronOccupancy * G4MolecularConfiguration::G4MolecularConfigurationManager::FindCommonElectronOccupancy ( const G4MoleculeDefinition * molDef,
const G4ElectronOccupancy & eOcc )

Definition at line 209 of file G4MolecularConfiguration.cc.

212{
213 //G4AutoLock lock(&fMoleculeCreationMutex);
214
215 auto it1 = fElecOccTable.find(molDef);
216
217 if(it1 == fElecOccTable.end())
218 {
219 // TODO = handle exception ?
220 return nullptr;
221 }
222
223 ElectronOccupancyTable& table2 = it1->second;
224 auto it2 = table2.find(eOcc);
225
226 //lock.unlock();
227
228 if (it2 == table2.end())
229 {
230 // TODO = handle exception ?
231 return nullptr;
232 }
233
234 return &(it2->first);
235}

Referenced by G4MolecularConfiguration::G4MolecularConfiguration(), and G4MolecularConfiguration::G4MolecularConfiguration().

◆ GetAllSpecies()

const std::vector< G4MolecularConfiguration * > & G4MolecularConfiguration::G4MolecularConfigurationManager::GetAllSpecies ( )
inline

Definition at line 406 of file G4MolecularConfiguration.hh.

407 {
408 return fMolConfPerID;
409 }

Referenced by G4MolecularConfiguration::FinalizeAll(), and G4MolecularConfiguration::PrintAll().

◆ GetMolecularConfiguration() [1/5]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetMolecularConfiguration ( const G4MoleculeDefinition * molDef,
const G4ElectronOccupancy & eOcc )

◆ GetMolecularConfiguration() [2/5]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetMolecularConfiguration ( const G4MoleculeDefinition * molDef,
const G4String & label )

Definition at line 868 of file G4MolecularConfiguration.cc.

871{
872 //G4AutoLock lock(&fMoleculeCreationMutex);
873
874 auto it1 = fLabelTable.find(molDef);
875
876 if(it1 == fLabelTable.end()) return nullptr;
877
878 LabelTable& table2 = it1->second;
879
880 auto it2 = table2.find(label);
881
882 //lock.unlock();
883
884 if(it2 == table2.end()) return nullptr;
885 return it2->second;
886}

◆ GetMolecularConfiguration() [3/5]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetMolecularConfiguration ( const G4MoleculeDefinition * molDef,
int charge )

Definition at line 296 of file G4MolecularConfiguration.cc.

299{
300 //G4AutoLock lock(&fMoleculeCreationMutex);
301
302 auto it1 = fChargeTable.find(molDef);
303
304 if(it1 == fChargeTable.end()) return nullptr;
305
306 ChargeTable& table2 = it1->second;
307 auto it = table2.find(charge);
308
309 if(it == table2.end())
310 {
311 return nullptr;
312 }
313
314 return it->second;
315
316}

◆ GetMolecularConfiguration() [4/5]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetMolecularConfiguration ( const G4String & userID)

Definition at line 1477 of file G4MolecularConfiguration.cc.

1479{
1480 for(auto it : fMolConfPerID)
1481 {
1482 if(it->GetUserID() == userID) return it;
1483 }
1484 return nullptr;
1485}

◆ GetMolecularConfiguration() [5/5]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetMolecularConfiguration ( int moleculeID)

Definition at line 891 of file G4MolecularConfiguration.cc.

893{
894 if(moleculeID > (int) fMolConfPerID.size() ||
895 moleculeID < 0) return nullptr;
896
897 return fMolConfPerID[moleculeID];
898}

◆ GetNumberOfCreatedSpecies()

int G4MolecularConfiguration::G4MolecularConfigurationManager::GetNumberOfCreatedSpecies ( )
inline

Definition at line 348 of file G4MolecularConfiguration.hh.

349 {
350 return fLastMoleculeID+1;
351 }

Referenced by G4MolecularConfiguration::GetNumberOfSpecies().

◆ GetOrCreateMolecularConfiguration() [1/2]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetOrCreateMolecularConfiguration ( const G4MoleculeDefinition * molDef,
const G4ElectronOccupancy & eOcc )

Definition at line 1262 of file G4MolecularConfiguration.cc.

1265{
1266 auto it1 = fElecOccTable.find(molDef);
1267
1268 if(it1 == fElecOccTable.end())
1269 {
1270 return new G4MolecularConfiguration(molDef, eOcc);
1271 }
1272
1273 ElectronOccupancyTable& table2 = it1->second;
1274 auto it = table2.find(eOcc);
1275
1276 if(it == table2.end())
1277 {
1278 auto molConf =
1279 new G4MolecularConfiguration(molDef, eOcc);
1280// molConf->Finalize();
1281 return molConf;
1282 }
1283
1284 return it->second;
1285}
G4MolecularConfiguration(const G4MoleculeDefinition *, const G4ElectronOccupancy &, const G4String &label="")

Referenced by G4MolecularConfiguration::GetOrCreateMolecularConfiguration().

◆ GetOrCreateMolecularConfiguration() [2/2]

G4MolecularConfiguration * G4MolecularConfiguration::G4MolecularConfigurationManager::GetOrCreateMolecularConfiguration ( const G4MoleculeDefinition * molDef,
int charge )

Definition at line 1290 of file G4MolecularConfiguration.cc.

1293{
1294 auto it1 = fChargeTable.find(molDef);
1295
1296 if(it1 == fChargeTable.end())
1297 {
1298 G4AutoLock lock(&fMoleculeCreationMutex);
1299
1300 auto newConf = new G4MolecularConfiguration(molDef, charge);
1301 return newConf ;
1302 }
1303
1304 ChargeTable& table2 = it1->second;
1305 auto it = table2.find(charge);
1306
1307 if(it == table2.end())
1308 {
1309 G4AutoLock lock(&fMoleculeCreationMutex);
1310
1311 auto newConf =
1312 new G4MolecularConfiguration(molDef, charge);
1313// newConf->Finalize();
1314 return newConf ;
1315 }
1316
1317 return it->second;
1318}
G4TemplateAutoLock< G4Mutex > G4AutoLock

◆ GetUserIDTable()

std::map< G4String, G4MolecularConfiguration * > & G4MolecularConfiguration::G4MolecularConfigurationManager::GetUserIDTable ( )
inline

Definition at line 411 of file G4MolecularConfiguration.hh.

412 {
413 return fUserIDTable;
414 }

Referenced by G4MolecularConfiguration::GetUserIDTable().

◆ Insert() [1/3]

G4int G4MolecularConfiguration::G4MolecularConfigurationManager::Insert ( const G4MoleculeDefinition * molDef,
const G4ElectronOccupancy & eOcc,
G4MolecularConfiguration * molConf )

Definition at line 169 of file G4MolecularConfiguration.cc.

174{
175 //G4AutoLock lock(&fMoleculeCreationMutex);
176
177 ElectronOccupancyTable& table2 = fElecOccTable[molDef];
178 auto it = table2.find(eOcc);
179
180 if(it == table2.end())
181 {
182 table2[eOcc] = molConf;
183 }
184 else
185 {
187 errMsg << "The same molecular configuration seemed to be recorded twice";
188 G4Exception("G4MolecularConfigurationManager::"
189 "SetMolecularConfiguration(const G4MoleculeDefinition* molDef,"
190 "const G4ElectronOccupancy& eOcc,"
191 "G4MolecularConfiguration* molConf)",
192 "",
194 errMsg
195 );
196 }
197
198 fLastMoleculeID++;
199
200 fMolConfPerID.push_back(molConf);
201
202 //lock.unlock();
203 return fLastMoleculeID;
204}

Referenced by G4MolecularConfiguration::G4MolecularConfiguration(), G4MolecularConfiguration::G4MolecularConfiguration(), G4MolecularConfiguration::G4MolecularConfiguration(), and G4MolecularConfiguration::G4MolecularConfiguration().

◆ Insert() [2/3]

G4int G4MolecularConfiguration::G4MolecularConfigurationManager::Insert ( const G4MoleculeDefinition * molDef,
const G4String & label,
G4MolecularConfiguration * molConf )

Definition at line 903 of file G4MolecularConfiguration.cc.

907{
908 G4AutoLock lock(&fMoleculeCreationMutex);
909 LabelTable& tmpMap = fLabelTable[molDef];
910 auto it = tmpMap.find(label);
911
912 if(it == tmpMap.end())
913 {
914 fLastMoleculeID++;
915 tmpMap[label] = molConf;
916 lock.unlock();
917 }
918 else
919 {
920 lock.unlock();
922 errMsg << "The same molecular configuration seemed to be recorded twice";
923 G4Exception("G4MolecularConfigurationManager::"
924 "SetMolecularConfiguration(const G4MoleculeDefinition* molDef,"
925 "const G4String& label,"
926 "G4MolecularConfiguration* molConf)",
927 "", FatalException, errMsg);
928 }
929
930 fMolConfPerID.push_back(molConf);
931
932 return fLastMoleculeID;
933}

◆ Insert() [3/3]

G4int G4MolecularConfiguration::G4MolecularConfigurationManager::Insert ( const G4MoleculeDefinition * molDef,
int charge,
G4MolecularConfiguration * molConf )

Definition at line 261 of file G4MolecularConfiguration.cc.

265{
266
267 //G4AutoLock lock(&fMoleculeCreationMutex);
268 ChargeTable& table2 = fChargeTable[molDef];
269 auto it = table2.find(charge);
270
271 if(it == table2.end())
272 {
273 table2[charge] = molConf;
274 }
275 else
276 {
277 //lock.unlock();
279 errMsg << "The same molecular configuration seemed to be recorded twice";
280 G4Exception("G4MolecularConfigurationManager::"
281 "SetMolecularConfiguration(const G4MoleculeDefinition* molDef,"
282 "int charge,"
283 "G4MolecularConfiguration* molConf)",
284 "", FatalException, errMsg);
285 }
286
287 fLastMoleculeID++;
288 fMolConfPerID.push_back(molConf);
289 //lock.unlock();
290 return fLastMoleculeID;
291}

◆ RecordNewlyLabeledConfiguration()

void G4MolecularConfiguration::G4MolecularConfigurationManager::RecordNewlyLabeledConfiguration ( G4MolecularConfiguration * molConf)

Definition at line 792 of file G4MolecularConfiguration.cc.

794{
795 //G4AutoLock lock(&fMoleculeCreationMutex);
796
797 LabelTable& tmpMap = fLabelTable[molConf->fMoleculeDefinition];
798
799 auto it = tmpMap.find(*molConf->fLabel);
800
801 if(it == tmpMap.end())
802 {
803 tmpMap[*(molConf->fLabel)] = molConf;
804 }
805 else
806 {
808 errMsg << "The same molecular configuration seemed to be recorded twice";
809 G4Exception("G4MolecularConfigurationManager::"
810 "SetMolecularConfiguration(const G4MoleculeDefinition* molDef,"
811 "const G4String& label,"
812 "G4MolecularConfiguration* molConf)",
813 "", FatalException, errMsg);
814 }
815
816 //lock.unlock();
817}
const G4MoleculeDefinition * fMoleculeDefinition

Referenced by G4MolecularConfiguration::G4MolecularConfiguration().

◆ RemoveMolecularConfigurationFromTable()

void G4MolecularConfiguration::G4MolecularConfigurationManager::RemoveMolecularConfigurationFromTable ( G4MolecularConfiguration * configuration)

Definition at line 845 of file G4MolecularConfiguration.cc.

847{
848 auto it1 =
849 fElecOccTable.find(configuration->GetDefinition());
850 auto end = fElecOccTable.end();
851
852 if (it1 == end) return;
853
854 auto it2 =
855 it1->second.find(*configuration->GetElectronOccupancy());
856
857 if (it2 == it1->second.end()) return;
858
859 it2->second = 0;
860// it1->second.erase(it2);
861
862 configuration->fElectronOccupancy = nullptr;
863}
const G4ElectronOccupancy * fElectronOccupancy
const G4MoleculeDefinition * GetDefinition() const
const G4ElectronOccupancy * GetElectronOccupancy() const

Member Data Documentation

◆ fManagerCreationMutex

G4Mutex MolecularConfigurationManager::fManagerCreationMutex
static

The documentation for this class was generated from the following files: