Geant4 11.1.1
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:
99 void Initialize();
100 void Clear();
101
102 virtual G4bool Notify(G4ApplicationState requestedState);
103
104 //----------------------------------------------------------------------------
105
106 /**
107 * \fn const std::vector<G4double>* \
108 * GetDensityTableFor(const G4Material* searchedMaterial) const
109 * \brief Retrieve a table of volumetric mass densities (mass per unit volume)
110 * in the G4 unit system for chosen material.
111 *
112 * @param[in] searchedMaterial
113 * The material which you'd like to retrieve the volumic mass
114 * @pre The \p searchedMaterial used in parameter must be built as a
115 * molecular material, using the number of atoms rather than the density
116 * fractions.
117 * \return
118 * Pointer to a table of molecular densities for the \p searchedMaterial
119 * indexed on the (parent) material index.
120 *
121 */
122 const std::vector<G4double>* GetDensityTableFor(const G4Material*) const;
123
124 /**
125 * \fn const std::vector<G4double>* \
126 * GetNumMolPerVolTableFor(const G4Material* searchedMaterial) const
127 * \brief Retrieve a table of molecular densities (number of molecules per
128 * unit volume) in the G4 unit system for chosen material.
129 *
130 * @param[in] searchedMaterial
131 * The material which you'd like to retrieve the molecular density
132 * @pre The \p searchedMaterial used in parameter must be built as a
133 * molecular material, using the number of atoms rather than the density
134 * fractions.
135 * \return
136 * Pointer to a table of molecular densities for the \p searchedMaterial
137 * indexed on the (parent) material index.
138 */
139 const std::vector<G4double>* GetNumMolPerVolTableFor(const G4Material*) const;
140
141 inline const std::vector<ComponentMap>* GetMassFractionTable() const{
142 return fpCompFractionTable;
143 }
144 inline const std::vector<ComponentMap>* GetDensityTable() const{
145 return fpCompDensityTable;
146 }
147
148 //----------------------------------------------------------------------------
149
151
152 /**
153 * \fn void SetMolecularConfiguration(const G4Material* material, \
154 * G4MolecularConfiguration* molConf)
155 * \brief Associate a molecular configuration to a G4material.
156 *
157 * @param[in] material
158 * Pointer to a G4 material. The material
159 * does not need to be defined as a molecular material.
160 * @param[in] molConf
161 * The molecular configuration corresponding to
162 * the G4 \p material.
163 */
166
167 /**
168 * \fn void SetMolecularConfiguration(const G4Material* material, \
169 * const G4String& molConf)
170 * \brief Associate a molecular configuration to a G4material.
171 *
172 * @param[in] material
173 * Pointer to a G4 material. The material
174 * does not need to be defined as a molecular material.
175 * @param[in] molConf
176 * User ID of the molecular configuration corresponding to
177 * the G4 \p material.
178 */
180 const G4String&);
181
182 /**
183 * \fn void SetMolecularConfiguration(const G4Material* material, \
184 * const G4String& molConf)
185 * \brief Associate a molecular configuration to a G4material.
186 *
187 * @param[in] material
188 * Name of the G4 material. The material
189 * does not need to be defined as a molecular material.
190 * @param[in] molConf
191 * User ID of the molecular configuration corresponding to
192 * the G4 \p material.
193 */
194 void SetMolecularConfiguration(const G4String& materialName,
195 const G4String& molUserIF);
196
197 //----------------------------------------------------------------------------
198
199 /**
200 * \brief Deprecated
201 * \deprecated Will return a G4 fatal exception.
202 * Use instead GetNumMolPerVolTableFor(molecule) at run
203 * initialization to retrieve a read-only, thread-safe, table.
204 * \note A G4material is labeled as molecular if built using
205 * the number of atoms.
206 */
208
209 /**
210 * \brief Deprecated
211 * \deprecated Will return a G4 fatal exception.
212 * Use instead GetNumMolPerVolTableFor(molecule) at run
213 * initialization to retrieve a read-only, thread-safe, table.
214 * \note A G4material is labeled as molecular if built using
215 * the number of atoms.
216 */
218 const G4Material *component,
219 G4double massFraction);
220
221protected:
226 virtual ~G4DNAMolecularMaterial();
227 void Create();
229 void InitializeDensity();
230 void RecordMolecularMaterial(G4Material* parentMaterial,
231 G4Material* molecularMaterial,
232 G4double fraction);
233 void SearchMolecularMaterial(G4Material* parentMaterial,
234 G4Material* material,
235 G4double currentFraction);
236
237 void AddMaterial(const G4Material*, G4double fraction);
238
239 void PrintNotAMolecularMaterial(const char* methodName,
240 const G4Material* lookForMaterial) const;
241
242 // Tables built for all molecular materials at initialization
243 std::vector<ComponentMap>* fpCompFractionTable;
244 std::vector<ComponentMap>* fpCompDensityTable;
245 std::vector<ComponentMap>* fpCompNumMolPerVolTable;
246
247 mutable std::map<const G4Material*, std::vector<G4double>*, CompareMaterial>
249 mutable std::map<const G4Material*, std::vector<G4double>*, CompareMaterial>
251 mutable std::map<const G4Material*, G4bool, CompareMaterial> fWarningPrinted;
252
253 std::map<G4int /*Material ID*/,
255
257 std::size_t fNMaterials;
258};
259
260#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
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...
virtual G4bool Notify(G4ApplicationState requestedState)
G4double GetNumMoleculePerVolumeUnitForMaterial(const G4Material *mat)
Deprecated.
std::vector< ComponentMap > * fpCompFractionTable
std::vector< ComponentMap > * fpCompNumMolPerVolTable
static G4DNAMolecularMaterial * Instance()
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)
std::map< const G4Material *, std::vector< G4double > *, CompareMaterial > fAskedNumPerVolTable
G4DNAMolecularMaterial & operator=(const G4DNAMolecularMaterial &)
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