Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4DNAModelInterface.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// Contact authors: S. Meylan, C. Villagrasa
28//
30
31#ifndef G4DNAMODELINTERFACE_HH
32#define G4DNAMODELINTERFACE_HH
33
34#include <map>
36#include "G4VEmModel.hh"
37#include "G4VDNAModel.hh"
38#include "G4Electron.hh"
42#include "G4NistManager.hh"
43#include "G4DNADummyModel.hh"
44
46{
47
48public:
49
50 /*!
51 * \brief G4DNAModelManager
52 * Constructor
53 * \param nam
54 */
55 G4DNAModelInterface(const G4String& nam);
56
57 /*!
58 * \brief ~G4DNAModelManager
59 * Destructor
60 */
61 virtual ~G4DNAModelInterface();
62
63 /*!
64 * \brief Initialise
65 * Initialise method to call all the initialise methods of the registered models
66 * \param particle
67 * \param cuts
68 */
69 virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector& cuts);
70
71 /*!
72 * \brief CrossSectionPerVolume
73 * Method called by the process and used to call the CrossSectionPerVolume method of the registered models.
74 * The method also calculates through G4DNAMolecularMaterial the number of molecule per volume unit for the current
75 * material or (component of a composite material).
76 * \param material
77 * \param p
78 * \param ekin
79 * \param emin
80 * \param emax
81 * \return the final cross section value times with the number of molecule per volume unit
82 */
83 virtual G4double CrossSectionPerVolume(const G4Material* material,
84 const G4ParticleDefinition* p,
85 G4double ekin,
86 G4double emin,
87 G4double emax);
88
89 /*!
90 * \brief SampleSecondaries
91 * Used to call the SampleSecondaries method of the registered models. A sampling is done to select
92 * a component if the material is a composite one.
93 * \param fVect
94 * \param couple
95 * \param aDynamicElectron
96 * \param tmin
97 * \param tmax
98 */
99 virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*fVect,
100 const G4MaterialCutsCouple* couple,
101 const G4DynamicParticle* aDynamicElectron,
102 G4double tmin,
103 G4double tmax);
104
105 /*!
106 * \brief RegisterModel
107 * Method used to associate a model with the interaction
108 * \param model
109 */
110 void RegisterModel(G4VDNAModel* model);
111
112 void RegisterModel(G4VEmModel* model, const G4ParticleDefinition* particle);
113
114 /*!
115 * \brief GetSelectedMaterial
116 * To allow the user to retrieve the selected material in case of a composite material.
117 * \return the last selected material by SampleSecondaries.
118 */
119 G4String GetSelectedMaterial(){return fSampledMat;}
120
121private:
122
123 const G4String fName; ///< name of the interaction
124
125 G4ParticleChangeForGamma* fpParticleChangeForGamma; ///< pointer used to change the characteristics of the current particle
126
127 std::vector<G4VDNAModel*> fRegisteredModels; ///< vector containing all the registered models
128
129 std::map<const G4String, G4double> fMaterialCS; ///< map used to share information between CrossSectionPerVolume and SampleSecondaries
130
131 G4double fCSsumTot; ///< value which contains the sum of all the component cross sections in case of a composite material
132
133 G4String fSampledMat; ///< for the user to retrieve selected material/component
134
135 typedef std::map<const G4String ,std::map<const G4String , std::vector<G4VDNAModel*> > > MaterialParticleModelTable;
136 MaterialParticleModelTable fMaterialParticleModelTable; ///< map: [materialName][particleName] = vector of models
137
138 std::map<G4String, const std::vector<double>* > fMaterialMolPerVol;
139
140 /*!
141 * \brief BuildMaterialParticleModelTable
142 * Method used to build a map allowing the code to quickly retrieve the good model for a particle/material couple
143 * \param p
144 */
145 void BuildMaterialParticleModelTable(const G4ParticleDefinition *p);
146
147 void BuildMaterialMolPerVolTable();
148
149 /*!
150 * \brief InsertModelInTable
151 * Used to put a model in the table after performing some checks.
152 * \param matName
153 * \param pName
154 */
155 void InsertModelInTable(const G4String& matName, const G4String& pName);
156
157 /*!
158 * \brief GetDNAModel
159 * \param material
160 * \param particle
161 * \param ekin
162 * \return G4VDNAModel*
163 * Return the model corresponding to the material, particle and energy specified.
164 * This method will check the energy range of the models to find to good one for the current ekin.
165 */
166 G4VDNAModel* GetDNAModel(const G4String& material, const G4String& particle, G4double ekin);
167
168 G4double GetNumMoleculePerVolumeUnitForMaterial(const G4Material *mat);
169 G4double GetNumMolPerVolUnitForComponentInComposite(const G4Material *component, const G4Material* composite);
170
171 // copy constructor and hide assignment operator
172 G4DNAModelInterface(const G4DNAModelInterface&); // prevent copy-construction
173 G4DNAModelInterface & operator=(const G4DNAModelInterface &right); // prevent assignement
174};
175
176#endif // G4DNAMODELINTERFACE_HH
double G4double
Definition: G4Types.hh:83
virtual ~G4DNAModelInterface()
~G4DNAModelManager Destructor
virtual G4double CrossSectionPerVolume(const G4Material *material, const G4ParticleDefinition *p, G4double ekin, G4double emin, G4double emax)
CrossSectionPerVolume Method called by the process and used to call the CrossSectionPerVolume method ...
G4String GetSelectedMaterial()
GetSelectedMaterial To allow the user to retrieve the selected material in case of a composite materi...
virtual void Initialise(const G4ParticleDefinition *particle, const G4DataVector &cuts)
Initialise Initialise method to call all the initialise methods of the registered models.
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *fVect, const G4MaterialCutsCouple *couple, const G4DynamicParticle *aDynamicElectron, G4double tmin, G4double tmax)
SampleSecondaries Used to call the SampleSecondaries method of the registered models....
void RegisterModel(G4VDNAModel *model)
RegisterModel Method used to associate a model with the interaction.
The G4VDNAModel class.
Definition: G4VDNAModel.hh:50