Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4MoleculeDefinition.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// Contact: Mathieu Karamitros (kara (AT) cenbg . in2p3 . fr)
27//
28// WARNING : This class is released as a prototype.
29// It might strongly evolve or even disapear in the next releases.
30//
31// ----------------------------------------------------------------------
32// GEANT 4 class implementation file
33//
34// 21 Oct 2009 first implementation by A. Mantero and M.Karamitros
35// Based on prototype of A.Mantero
36// **********************************************************************
37//
38// Author: Mathieu Karamitros
39
40// The code is developed in the framework of the ESA AO7146
41//
42// We would be very happy hearing from you, send us your feedback! :)
43//
44// In order for Geant4-DNA to be maintained and still open-source,
45// article citations are crucial.
46// If you use Geant4-DNA chemistry and you publish papers about your software,
47// in addition to the general paper on Geant4-DNA:
48//
49// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
50//
51// we would be very happy if you could please also cite the following
52// reference papers on chemistry:
53//
54// J. Comput. Phys. 274 (2014) 841-882
55// Prog. Nucl. Sci. Tec. 2 (2011) 503-508
56
57#ifndef G4MoleculeDefinition_h
58#define G4MoleculeDefinition_h 1
59
60#include "globals.hh"
62#include "G4ios.hh"
66#include "G4FakeParticleID.hh"
67
71
72// -----------------------------------------------------------------------------
73// ### MoleculeDefinition ###
74// -----------------------------------------------------------------------------
75
77{
78public:
80 G4double mass,
81 G4double diffCoeff,
82 G4int charge = 0,
83 G4int electronicLevels = 0,
84 G4double radius = -1,
85 G4int atomsNumber = -1,
86 G4double lifetime = -1,
87 G4String aType = "",
89
90 virtual ~G4MoleculeDefinition();
91
94
95 // Set the electronic configuration at ground level
97 G4int eNb = 2);
98 // set the occupation(0(def), 1 or 2) of the level specified
99 //(levels numbering starts from 0)
100
101 //methods to set/get diffusion properties
103 inline G4double GetDiffusionCoefficient() const;
104
105 inline void SetAtomsNumber(G4int);
106 inline G4int GetAtomsNumber() const;
107
108 inline void SetVanDerVaalsRadius(G4double);
109 inline G4double GetVanDerVaalsRadius() const;
110
111 //____________________________________________________________________________
112 // Create more molecular configurations for this molecule definition
113 // Other ways : through G4MolecularTable
114
115 // Note: the userID of the created molecule configuration will be:
116 // MoleculeDefinationName_excitedStateLabel
118 NewConfiguration(const G4String& excitedStateLabel);
119
121 NewConfigurationWithElectronOccupancy(const G4String& excitedStateLabel,
122 const G4ElectronOccupancy&,
123 double decayTime = 0.);
124
126 GetConfigurationWithLabel(const G4String& molecularConfLabel);
127
128 //____________________________________________________________________________
129 // Build the decay table
130 // Version 1
131
132 void AddDecayChannel(const G4MolecularConfiguration* molConf,
133 const G4MolecularDissociationChannel* channel);
134
135 // Version 2
136
137 void AddDecayChannel(const G4String& molecularConfLabel,
138 const G4MolecularDissociationChannel* channel);
139
140 //____________________________________________________________________________
141 // "Get" methods related to decay
142
143 const std::vector<const G4MolecularDissociationChannel*>*
145 const std::vector<const G4MolecularDissociationChannel*>*
146 GetDecayChannels(const G4String&) const;
147
148 inline const G4MolecularDissociationTable* GetDecayTable() const;
150 inline G4double GetDecayTime() const;
151
152 //____________________________________________________________________________
153 // General "Get" methods
155 inline G4int GetCharge() const;
156 inline const G4String& GetName() const;
157 inline G4double GetMass() const;
158 inline const G4String& GetType() const;
159 inline G4int GetNbElectrons() const;
160 inline G4int GetNbMolecularShells() const;
161
162 inline const G4String& GetFormatedName() const
163 {
164 return fFormatedName;
165 }
166
167 //____________________________________________________________________________
168 inline void SetFormatedName(const G4String& name)
169 {
170 fFormatedName = name;
171 }
172
173 void Finalize();
174
175 static G4MoleculeDefinition* Load(std::istream&);
176 void Serialize(std::ostream&);
177
178protected:
180
181private:
182 G4int fCharge;
183
184 // Diffusion Coefficient in one medium only
185 // Note : For the time being, we will consider only one diffusion
186 // coefficient for the all simulation => diffusion in one medium only
187 // If the user needs to use the diffusion in different materials,
188 // she/he should contact the developers/maintainers of this package
189 G4double fDiffusionCoefficient;
190
191 G4int fAtomsNb;
192 G4double fVanDerVaalsRadius;
193
194 G4String fFormatedName;
195
196 G4ElectronOccupancy* fElectronOccupancy;
197 G4MolecularDissociationTable* fDecayTable;
198};
199
201{
202 fDiffusionCoefficient = value;
203}
204
206{
207 return fDiffusionCoefficient;
208}
209
211{
212 return fCharge;
213}
214
216{
217 return GetPDGLifeTime();
218}
219
221{
222 fAtomsNb = val;
223}
224
226{
227 return fAtomsNb;
228}
229
231{
232 fVanDerVaalsRadius = val;
233}
234
236{
237 return fVanDerVaalsRadius;
238}
239
241{
242 return fElectronOccupancy;
243}
244
246{
247
248 return GetParticleName();
249}
250
252{
253 return GetPDGMass();
254}
255
257{
258 return GetParticleSubType();
259}
260
262{
263 if (fElectronOccupancy)
264 {
265 return fElectronOccupancy->GetTotalOccupancy();
266 }
267
268 return 0;
269 // return fNbOfElectrons;
270}
271
273{
274 if (fElectronOccupancy)
275 {
276 return fElectronOccupancy->GetSizeOfOrbit();
277 }
278
279 return 0;
280}
281
283{
284 return fDecayTable;
285}
286
288{
289 return fDecayTable;
290}
291#endif
292
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4int GetTotalOccupancy() const
static G4FakeParticleID Create()
const G4ElectronOccupancy * GetGroundStateElectronOccupancy() const
const G4String & GetName() const
const G4MolecularDissociationTable * GetDecayTable() const
void SetFormatedName(const G4String &name)
const G4String & GetFormatedName() const
void SetVanDerVaalsRadius(G4double)
void Serialize(std::ostream &)
G4MolecularConfiguration * GetConfigurationWithLabel(const G4String &molecularConfLabel)
G4MoleculeDefinition(const G4MoleculeDefinition &)=delete
const G4String & GetType() const
G4MoleculeDefinition & operator=(const G4MoleculeDefinition &)=delete
static G4MoleculeDefinition * Load(std::istream &)
G4double GetVanDerVaalsRadius() const
G4int GetNbMolecularShells() const
void SetLevelOccupation(G4int, G4int eNb=2)
G4double GetDecayTime() const
void SetDiffusionCoefficient(G4double)
G4double GetDiffusionCoefficient() const
void AddDecayChannel(const G4MolecularConfiguration *molConf, const G4MolecularDissociationChannel *channel)
G4MolecularConfiguration * NewConfiguration(const G4String &excitedStateLabel)
G4MolecularConfiguration * NewConfigurationWithElectronOccupancy(const G4String &excitedStateLabel, const G4ElectronOccupancy &, double decayTime=0.)
const std::vector< const G4MolecularDissociationChannel * > * GetDecayChannels(const G4MolecularConfiguration *) const
G4double GetPDGLifeTime() const
const G4String & GetParticleName() const
const G4String & GetParticleSubType() const