Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DNAMolecularMaterial.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//
27// Author: Mathieu Karamitros
28//
29// We would be very happy hearing from you, send us your feedback! :)
30//
31// In order for Geant4-DNA to be maintained and still open-source,
32// article citations are crucial.
33// If you use Geant4-DNA chemistry and you publish papers about your software,
34// in addition to the general paper on Geant4-DNA:
35//
36// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
37//
38// we would be very happy if you could please also cite the following
39// reference papers on chemistry:
40//
41// J. Comput. Phys. 274 (2014) 841-882
42// Prog. Nucl. Sci. Tec. 2 (2011) 503-508
43
44#ifndef G4DNAMolecularMaterial_HH
45#define G4DNAMolecularMaterial_HH
46
47#include "globals.hh"
48#include "G4ios.hh"
49#include <map>
50#include <vector>
51#include "G4VStateDependent.hh"
52
53class G4Material;
55
56/**
57 * \struct CompareMaterial
58 * \brief Materials can be described as a derivation of existing "parent"
59 * materials in order to alter few of their features, such as density.
60 * \p CompareMaterial compare materials taking into account
61 * their possible "affiliation".
62 */
64{
65 bool operator()(const G4Material* mat1, const G4Material* mat2) const;
66};
67
68using ComponentMap = std::map<const G4Material*, G4double, CompareMaterial>;
69
70/**
71 * \class G4DNAMolecularMaterial
72 * \brief G4DNAMolecularMaterial builds tables of molecular densities for chosen
73 * molecular materials. The class handles homogeneous, composite and
74 * derived materials. A material of interest is labeled as molecular if built
75 * using the number of atoms rather than the mass fractions.
76 *
77 * \details
78 * - Initialization:
79 * G4DNAMolecularMaterial is initialized when
80 * G4ApplicationState == G4State_Idle.
81 * It should be initialized on the master thread and used in read-only mode
82 * during stepping. The singleton is thread-shared.
83 *
84 * - For Developers:
85 * Use GetNumMolPerVolTableFor(molecule) in the concrete implementation of
86 * G4VEmModel::Initialise or G4VProcess::PreparePhysicsTable
87 * at run initialization to retrieve a read-only, thread-safe, table.
88 * The table is then built on the master thread at initialization time and
89 * shared between all threads and models.
90 *
91 * \note A G4material is labeled as molecular if built using the number of atoms
92 *
93 */
94
96{
97public:
100
102 void Initialize();
103 void Clear();
104
105 G4bool Notify(G4ApplicationState requestedState) override;
106
107 //----------------------------------------------------------------------------
108
109 /**
110 * \fn const std::vector<G4double>* \
111 * GetDensityTableFor(const G4Material* searchedMaterial) const
112 * \brief Retrieve a table of volumetric mass densities (mass per unit volume)
113 * in the G4 unit system for chosen material.
114 *
115 * @param[in] searchedMaterial
116 * The material which you'd like to retrieve the volumic mass
117 * @pre The \p searchedMaterial used in parameter must be built as a
118 * molecular material, using the number of atoms rather than the density
119 * fractions.
120 * \return
121 * Pointer to a table of molecular densities for the \p searchedMaterial
122 * indexed on the (parent) material index.
123 *
124 */
125 const std::vector<G4double>* GetDensityTableFor(const G4Material*) const;
126
127 /**
128 * \fn const std::vector<G4double>* \
129 * GetNumMolPerVolTableFor(const G4Material* searchedMaterial) const
130 * \brief Retrieve a table of molecular densities (number of molecules per
131 * unit volume) in the G4 unit system for chosen material.
132 *
133 * @param[in] searchedMaterial
134 * The material which you'd like to retrieve the molecular density
135 * @pre The \p searchedMaterial used in parameter must be built as a
136 * molecular material, using the number of atoms rather than the density
137 * fractions.
138 * \return
139 * Pointer to a table of molecular densities for the \p searchedMaterial
140 * indexed on the (parent) material index.
141 */
142 const std::vector<G4double>* GetNumMolPerVolTableFor(const G4Material*) const;
143
144 inline const std::vector<ComponentMap>* GetMassFractionTable() const{
145 return fpCompFractionTable;
146 }
147 inline const std::vector<ComponentMap>* GetDensityTable() const{
148 return fpCompDensityTable;
149 }
150
151 //----------------------------------------------------------------------------
152
154
155 /**
156 * \fn void SetMolecularConfiguration(const G4Material* material, \
157 * G4MolecularConfiguration* molConf)
158 * \brief Associate a molecular configuration to a G4material.
159 *
160 * @param[in] material
161 * Pointer to a G4 material. The material
162 * does not need to be defined as a molecular material.
163 * @param[in] molConf
164 * The molecular configuration corresponding to
165 * the G4 \p material.
166 */
169
170 /**
171 * \fn void SetMolecularConfiguration(const G4Material* material, \
172 * const G4String& molConf)
173 * \brief Associate a molecular configuration to a G4material.
174 *
175 * @param[in] material
176 * Pointer to a G4 material. The material
177 * does not need to be defined as a molecular material.
178 * @param[in] molConf
179 * User ID of the molecular configuration corresponding to
180 * the G4 \p material.
181 */
183 const G4String&);
184
185 /**
186 * \fn void SetMolecularConfiguration(const G4Material* material, \
187 * const G4String& molConf)
188 * \brief Associate a molecular configuration to a G4material.
189 *
190 * @param[in] material
191 * Name of the G4 material. The material
192 * does not need to be defined as a molecular material.
193 * @param[in] molConf
194 * User ID of the molecular configuration corresponding to
195 * the G4 \p material.
196 */
197 void SetMolecularConfiguration(const G4String& materialName,
198 const G4String& molUserIF);
199
200 //----------------------------------------------------------------------------
201
202 /**
203 * \brief Deprecated
204 * \deprecated Will return a G4 fatal exception.
205 * Use instead GetNumMolPerVolTableFor(molecule) at run
206 * initialization to retrieve a read-only, thread-safe, table.
207 * \note A G4material is labeled as molecular if built using
208 * the number of atoms.
209 */
211
212 /**
213 * \brief Deprecated
214 * \deprecated Will return a G4 fatal exception.
215 * Use instead GetNumMolPerVolTableFor(molecule) at run
216 * initialization to retrieve a read-only, thread-safe, table.
217 * \note A G4material is labeled as molecular if built using
218 * the number of atoms.
219 */
221 const G4Material *component,
222 G4double massFraction);
223
224protected:
227 ~G4DNAMolecularMaterial() override;
228 void Create();
230 void InitializeDensity();
231 void RecordMolecularMaterial(G4Material* parentMaterial,
232 G4Material* molecularMaterial,
233 G4double fraction);
234 void SearchMolecularMaterial(G4Material* parentMaterial,
235 G4Material* material,
236 G4double currentFraction);
237
238 void AddMaterial(const G4Material*, G4double fraction);
239
240 void PrintNotAMolecularMaterial(const char* methodName,
241 const G4Material* lookForMaterial) const;
242
243 // Tables built for all molecular materials at initialization
244 std::vector<ComponentMap>* fpCompFractionTable;
245 std::vector<ComponentMap>* fpCompDensityTable;
246 std::vector<ComponentMap>* fpCompNumMolPerVolTable;
247
248 mutable std::map<const G4Material*, std::vector<G4double>*, CompareMaterial>
250 mutable std::map<const G4Material*, std::vector<G4double>*, CompareMaterial>
252 mutable std::map<const G4Material*, G4bool, CompareMaterial> fWarningPrinted;
253
254 std::map<G4int /*Material ID*/,
256
258 std::size_t fNMaterials;
259};
260
261#endif // G4DNAMolecularMaterial_HH
G4ApplicationState
std::map< const G4Material *, G4double, CompareMaterial > ComponentMap
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
G4DNAMolecularMaterial builds tables of molecular densities for chosen molecular materials....
void SetMolecularConfiguration(const G4Material *, G4MolecularConfiguration *)
Associate a molecular configuration to a G4material.
std::map< const G4Material *, std::vector< G4double > *, CompareMaterial > fAskedDensityTable
void RecordMolecularMaterial(G4Material *parentMaterial, G4Material *molecularMaterial, G4double fraction)
G4MolecularConfiguration * GetMolecularConfiguration(const G4Material *) const
std::map< const G4Material *, G4bool, CompareMaterial > fWarningPrinted
void PrintNotAMolecularMaterial(const char *methodName, const G4Material *lookForMaterial) const
G4DNAMolecularMaterial & operator=(const G4DNAMolecularMaterial &)=delete
std::map< G4int, G4MolecularConfiguration * > fMaterialToMolecularConf
const std::vector< ComponentMap > * GetDensityTable() const
const std::vector< G4double > * GetNumMolPerVolTableFor(const G4Material *) const
Retrieve a table of molecular densities (number of molecules per unit volume) in the G4 unit system f...
G4double GetNumMoleculePerVolumeUnitForMaterial(const G4Material *mat)
Deprecated.
std::vector< ComponentMap > * fpCompFractionTable
std::vector< ComponentMap > * fpCompNumMolPerVolTable
static G4DNAMolecularMaterial * Instance()
G4bool Notify(G4ApplicationState requestedState) override
void AddMaterial(const G4Material *, G4double fraction)
G4double GetNumMolPerVolForComponentInComposite(const G4Material *composite, const G4Material *component, G4double massFraction)
Deprecated.
const std::vector< G4double > * GetDensityTableFor(const G4Material *) const
Retrieve a table of volumetric mass densities (mass per unit volume) in the G4 unit system for chosen...
static G4DNAMolecularMaterial * fInstance
const std::vector< ComponentMap > * GetMassFractionTable() const
void SearchMolecularMaterial(G4Material *parentMaterial, G4Material *material, G4double currentFraction)
G4DNAMolecularMaterial(const G4DNAMolecularMaterial &right)=delete
std::map< const G4Material *, std::vector< G4double > *, CompareMaterial > fAskedNumPerVolTable
std::vector< ComponentMap > * fpCompDensityTable
Materials can be described as a derivation of existing "parent" materials in order to alter few of th...
bool operator()(const G4Material *mat1, const G4Material *mat2) const