ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4MoleculeDefinition.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4MoleculeDefinition.hh
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"
61 #include "G4ParticleDefinition.hh"
62 #include "G4ios.hh"
63 #include "G4ElectronOccupancy.hh"
66 #include "G4FakeParticleID.hh"
67 
71 
72 // -----------------------------------------------------------------------------
73 // ### MoleculeDefinition ###
74 // -----------------------------------------------------------------------------
75 
77 {
78 public:
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 
92  // Set the electronic configuration at ground level
94  G4int eNb = 2);
95  // set the occupation(0(def), 1 or 2) of the level specified
96  //(levels numbering starts from 0)
97 
98  //methods to set/get diffusion properties
99  inline void SetDiffusionCoefficient(G4double);
100  inline G4double GetDiffusionCoefficient() const;
101 
102  inline void SetAtomsNumber(G4int);
103  inline G4int GetAtomsNumber() const;
104 
105  inline void SetVanDerVaalsRadius(G4double);
106  inline G4double GetVanDerVaalsRadius() const;
107 
108  //____________________________________________________________________________
109  // Create more molecular configurations for this molecule definition
110  // Other ways : through G4MolecularTable
111 
112  // Note: the userID of the created molecule configuration will be:
113  // MoleculeDefinationName_excitedStateLabel
115  NewConfiguration(const G4String& excitedStateLabel);
116 
118  NewConfigurationWithElectronOccupancy(const G4String& excitedStateLabel,
119  const G4ElectronOccupancy&,
120  double decayTime = 0.);
121 
123  GetConfigurationWithLabel(const G4String& molecularConfLabel);
124 
125  //____________________________________________________________________________
126  // Build the decay table
127  // Version 1
128 
129  void AddDecayChannel(const G4MolecularConfiguration* molConf,
130  const G4MolecularDissociationChannel* channel);
131 
132  // Version 2
133 
134  void AddDecayChannel(const G4String& molecularConfLabel,
135  const G4MolecularDissociationChannel* channel);
136 
137  //____________________________________________________________________________
138  // "Get" methods related to decay
139 
140  const std::vector<const G4MolecularDissociationChannel*>*
142  const std::vector<const G4MolecularDissociationChannel*>*
143  GetDecayChannels(const G4String&) const;
144 
145  inline const G4MolecularDissociationTable* GetDecayTable() const;
147  inline G4double GetDecayTime() const;
148 
149  //____________________________________________________________________________
150  // General "Get" methods
152  inline G4int GetCharge() const;
153  inline const G4String& GetName() const;
154  inline G4double GetMass() const;
155  inline const G4String& GetType() const;
156  inline G4int GetNbElectrons() const;
157  inline G4int GetNbMolecularShells() const;
158 
159  inline const G4String& GetFormatedName() const
160  {
161  return fFormatedName;
162  }
163 
164  //____________________________________________________________________________
165  inline void SetFormatedName(const G4String& name)
166  {
168  }
169 
170  void Finalize();
171 
172  static G4MoleculeDefinition* Load(std::istream&);
173  void Serialize(std::ostream&);
174 
175 protected:
178 
179 private:
181 
182 private:
184 
185  // Diffusion Coefficient in one medium only
186  // Note : For the time being, we will consider only one diffusion
187  // coefficient for the all simulation => diffusion in one medium only
188  // If the user needs to use the diffusion in different materials,
189  // she/he should contact the developers/maintainers of this package
191 
194 
196 
199 };
200 
202 {
204 }
205 
207 {
208  return fDiffusionCoefficient;
209 }
210 
212 {
213  return fCharge;
214 }
215 
217 {
218  return GetPDGLifeTime();
219 }
220 
222 {
223  fAtomsNb = val;
224 }
225 
227 {
228  return fAtomsNb;
229 }
230 
232 {
233  fVanDerVaalsRadius = val;
234 }
235 
237 {
238  return fVanDerVaalsRadius;
239 }
240 
242 {
243  return fElectronOccupancy;
244 }
245 
247 {
248 
249  return GetParticleName();
250 }
251 
253 {
254  return GetPDGMass();
255 }
256 
258 {
259  return GetParticleSubType();
260 }
261 
263 {
264  if (fElectronOccupancy)
265  {
267  }
268 
269  return 0;
270  // return fNbOfElectrons;
271 }
272 
274 {
275  if (fElectronOccupancy)
276  {
278  }
279 
280  return 0;
281 }
282 
284 {
285  return fDecayTable;
286 }
287 
289 {
290  return fDecayTable;
291 }
292 #endif
293