Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4Molecule.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// The code is developed in the framework of the ESA AO7146
32//
33// We would be very happy hearing from you, send us your feedback! :)
34//
35// In order for Geant4-DNA to be maintained and still open-source,
36// article citations are crucial.
37// If you use Geant4-DNA chemistry and you publish papers about your software,
38// in addition to the general paper on Geant4-DNA:
39//
40// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
41//
42// we would be very happy if you could please also cite the following
43// reference papers on chemistry:
44//
45// J. Comput. Phys. 274 (2014) 841-882
46// Prog. Nucl. Sci. Tec. 2 (2011) 503-508
47//
48// ---------------------------------------------------------------------
49// GEANT 4 class header file
50//
51// History: first implementation, based on G4DynamicParticle
52// New dependency : G4VUserTrackInformation
53//
54// ---------------- G4Molecule ----------------
55// first design&implementation by Alfonso Mantero, 7 Apr 2009
56// New developments Alfonso Mantero & Mathieu Karamitros
57// Oct/Nov 2009 Class Name changed to G4Molecule
58// Removed dependency from G4DynamicParticle
59// New constructors :
60// copy constructor
61// direct ionized/excited molecule
62// New methods :
63// Get : name,atoms' number,nb electrons,decayChannel
64// PrintState //To get the electronic level and the
65// corresponding name of the excitation
66// Kinematic :
67// BuildTrack,GetKineticEnergy,GetDiffusionVelocity
68// Change the way dynCharge and eNb is calculated
69// ---------------------------------------------------------------------
70
71#ifndef G4Molecule_h
72#define G4Molecule_h 1
73
74#include "G4IT.hh"
75#include "G4Allocator.hh"
77
78class G4Molecule;
79template<>
81
82class G4Molecule;
87class G4Material;
88
89G4Molecule* GetMolecule(const G4Track& track);
90G4Molecule* GetMolecule(const G4Track* track);
91
92/** Class Description
93 * The dynamic molecule holds all the data that change for a molecule
94 * It has a pointer to G4MoleculeDefinition object, which holds
95 * all the "ground level" information.
96 */
97
98class G4Molecule : public G4IT
99{
100
101public:
102 // With Description
103
105
106 //From G4VUserTrackInformation
107 void Print() const;
108
109 // new/delete operators are overloded to use G4Allocator
110 inline void *operator new(size_t);
111#ifdef __IBMCPP__
112 inline void *operator new(size_t sz, void* p)
113 {
114 return p;
115 }
116#endif
117 inline void operator delete(void*);
118
119 G4Molecule(const G4Molecule&);
120 G4Molecule & operator=(const G4Molecule &right);
121 G4bool operator==(const G4Molecule &right) const;
122 G4bool operator!=(const G4Molecule &right) const;
123 G4bool operator<(const G4Molecule &right) const;
124
125 operator int() const
126 {
127 return GetMoleculeID();
128 }
129
130 virtual G4ITType GetITSubType() const
131 {
132 return GetMoleculeID();
133 }
134
135public:
136 //------ Constructors --------------------------
137 /** To build a molecule at ground state according to a given
138 * G4MoleculeDefinition that can be obtained from G4GenericMoleculeManager
139 */
140 G4Molecule(G4MoleculeDefinition* pMoleculeDefinition);
141
142 G4Molecule(G4MoleculeDefinition* pMoleculeDefinition, int charge);
143
144 /** To build a molecule at a specific excitation/ionisation state according
145 * to a ground state that can be obtained from G4GenericMoleculeManager
146 */
147 G4Molecule(G4MoleculeDefinition* pMoleculeDefinition, G4int, G4int);
148
149 /** Specific builder for water molecules to be used in Geant4-DNA,
150 * the last option Excitation is true if the molecule is excited, is
151 * false is the molecule is ionized.
152 */
153 G4Molecule(G4MoleculeDefinition* pMoleculeDefinition, G4int, G4bool);
154
156
157 virtual ~G4Molecule();
158
159 //-------- Methods -------------------------------
160 //Get from static definition
161 /** Returns the name of the molecule
162 */
163 const G4String& GetName() const;
164
165 /** Returns the formated name of the molecule
166 */
167 const G4String& GetFormatedName() const;
168
169 /** Returns the nomber of atoms compouning the molecule
170 */
171 G4int GetAtomsNumber() const;
172
173 /** Will set up the correct molecularConfiguration given
174 * an electron configuration
175 */
177
178 /** Method used in Geant4-DNA to excite water molecules
179 */
180 void ExciteMolecule(G4int);
181
182 /** Method used in Geant4-DNA to ionize water molecules
183 */
184 void IonizeMolecule(G4int);
185
186 /** Add n electrons to a given orbit.
187 * Note : You can add as many electrons to a given orbit, the result
188 * may be unrealist.
189 */
190 void AddElectron(G4int orbit, G4int n = 1);
191
192 /** Remove n electrons to a given orbit.
193 */
194 void RemoveElectron(G4int, G4int number = 1);
195
196 /** Move one electron from an orbit to another.
197 */
198 void MoveOneElectron(G4int /*orbit*/, G4int /*orbit*/);
199
200 /** Returns the number of electron.
201 */
202 G4double GetNbElectrons() const; //This method can be used to check if the electron s number is physical
203
204 /** Show the electronic state of the molecule.
205 */
206 void PrintState() const;
207
208 G4Track * BuildTrack(G4double globalTime, const G4ThreeVector& Position);
209
211
213
214 const std::vector<const G4MolecularDissociationChannel*>* GetDissociationChannels() const;
215
216 G4int GetFakeParticleID() const;
217 G4int GetMoleculeID() const;
218
219 //-------------Inline functions ---------------------
220 /** Get molecule definition. This G4MoleculeDefinition has the ground
221 * electronic state of the molecule.
222 */
223 const G4MoleculeDefinition* GetDefinition() const;
224
225 //methods to set/get changing parameters
226
227 /////////////////////////////////////////////////////////////////////////////
228 /** Sets the diffusion coefficient D of the molecule used in diffusion
229 * processes to calculate the mean square jump distance between two
230 * changes of direction. In three dimension : <x^2> = 6 D t where t is
231 * the mean jump time between two changes of direction.
232 */
234
235 /** Returns the diffusion coefficient D.
236 */
238
239 /** Returns the diffusion coefficient D.
240 */
242 double temperature) const;
243
244 /** Set the decay time of the molecule.
245 */
247
248 /** Returns the decay time of the molecule.
249 */
250 G4double GetDecayTime() const;
251
252 /** The Van Der Valls Radius of the molecule
253 */
256
257 /** Returns the object ElectronOccupancy describing the electronic
258 * configuration of the molecule.
259 */
261
262 /** Returns the charge of molecule.
263 */
264 G4int GetCharge() const;
265
266 /** Set the total mass of the molecule.
267 */
269
270 /** Returns the total mass of the molecule.
271 */
272 G4double GetMass() const;
273
274 /** Returns the label of the molecule configuration
275 */
276 const G4String& GetLabel() const;
277
278 void SetLabel(const G4String& label);
279
280 void ChangeConfigurationToLabel(const G4String& label);
281
282 ////////////////////////////////////////////////////////////////////////
283
285
286 static G4Molecule* GetMolecule(const G4Track*);
287
288private:
289 /** Default molecule builder
290 */
291 G4Molecule();
292 const G4MolecularConfiguration* fpMolecularConfiguration;
293};
294
295#if defined G4EM_ALLOC_EXPORT
297#else
299#endif
300
301//////////////////////////
302inline void * G4Molecule::operator new(size_t)
303//////////////////////////
304{
305 if (!aMoleculeAllocator())
306 {
308 }
309 return (void *)aMoleculeAllocator()->MallocSingle();
310}
311
312//////////////////////////
313inline void G4Molecule::operator delete(void * aMolecule)
314//////////////////////////
315{
316 aMoleculeAllocator()->FreeSingle((G4Molecule *)aMolecule);
317}
318
319#endif
G4Molecule * GetMolecule(const G4Track &track)
Definition: G4Molecule.cc:76
G4DLLIMPORT G4Allocator< G4Molecule > *& aMoleculeAllocator()
double G4double
Definition: G4Types.hh:83
#define G4DLLIMPORT
Definition: G4Types.hh:69
#define G4DLLEXPORT
Definition: G4Types.hh:68
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
Definition: G4IT.hh:88
virtual void Print() const
Definition: G4IT.hh:97
virtual ~G4KDNode()
void IonizeMolecule(G4int)
Definition: G4Molecule.cc:308
G4int GetCharge() const
Definition: G4Molecule.cc:488
void RemoveElectron(G4int, G4int number=1)
Definition: G4Molecule.cc:322
void AddElectron(G4int orbit, G4int n=1)
Definition: G4Molecule.cc:315
virtual ~G4Molecule()
Definition: G4Molecule.cc:160
static G4Molecule * GetMolecule(const G4Track *)
Definition: G4Molecule.cc:90
G4bool operator<(const G4Molecule &right) const
Definition: G4Molecule.cc:144
G4double GetVanDerVaalsRadius() const
Definition: G4Molecule.cc:481
const G4MolecularConfiguration * GetMolecularConfiguration() const
Definition: G4Molecule.cc:532
void SetElectronOccupancy(const G4ElectronOccupancy *)
Definition: G4Molecule.cc:292
void MoveOneElectron(G4int, G4int)
Definition: G4Molecule.cc:330
G4double GetMass() const
Definition: G4Molecule.cc:495
const G4String & GetLabel() const
Definition: G4Molecule.cc:539
void ChangeConfigurationToLabel(const G4String &label)
Definition: G4Molecule.cc:546
ITDef(G4Molecule) void Print() const
G4int GetMoleculeID() const
Definition: G4Molecule.cc:467
G4double GetKineticEnergy() const
Definition: G4Molecule.cc:416
const G4String & GetFormatedName() const
Definition: G4Molecule.cc:345
virtual G4ITType GetITSubType() const
Definition: G4Molecule.hh:130
G4int GetAtomsNumber() const
Definition: G4Molecule.cc:352
G4bool operator==(const G4Molecule &right) const
Definition: G4Molecule.cc:122
G4int GetFakeParticleID() const
Definition: G4Molecule.cc:460
void SetMass(G4double)
void SetVanDerVaalsRadius(G4double)
G4double GetDiffusionVelocity() const
Definition: G4Molecule.cc:428
void PrintState() const
Definition: G4Molecule.cc:366
void SetDecayTime(G4double)
const G4String & GetName() const
Definition: G4Molecule.cc:338
G4Track * BuildTrack(G4double globalTime, const G4ThreeVector &Position)
Definition: G4Molecule.cc:373
void ExciteMolecule(G4int)
Definition: G4Molecule.cc:301
G4bool operator!=(const G4Molecule &right) const
Definition: G4Molecule.cc:133
void SetDiffusionCoefficient(G4double)
const G4ElectronOccupancy * GetElectronOccupancy() const
Definition: G4Molecule.cc:502
G4Molecule & operator=(const G4Molecule &right)
Definition: G4Molecule.cc:113
const G4MoleculeDefinition * GetDefinition() const
Definition: G4Molecule.cc:509
G4double GetDiffusionCoefficient() const
Definition: G4Molecule.cc:516
G4double GetDecayTime() const
Definition: G4Molecule.cc:474
void SetLabel(const G4String &label)
const std::vector< const G4MolecularDissociationChannel * > * GetDissociationChannels() const
Definition: G4Molecule.cc:453
G4double GetNbElectrons() const
Definition: G4Molecule.cc:359