Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4DNAPTBIonisationStructure.cc
이 파일의 문서화 페이지로 가기
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 // Authors: S. Meylan and C. Villagrasa (IRSN, France)
26 // Models come from
27 // M. Bug et al, Rad. Phys and Chem. 130, 459-479 (2017)
28 
30 #include "G4SystemOfUnits.hh"
31 
33 {
34  energyConstant["G4_WATER"].push_back(10.79*eV);
35  energyConstant["G4_WATER"].push_back(13.39*eV);
36  energyConstant["G4_WATER"].push_back(16.05*eV);
37  energyConstant["G4_WATER"].push_back(32.30*eV);
38  energyConstant["G4_WATER"].push_back(539.0*eV);
39 
40  energyConstant["THF"].push_back(9.74*eV);
41  energyConstant["THF"].push_back(12.31*eV);
42  energyConstant["THF"].push_back(12.99*eV);
43  energyConstant["THF"].push_back(13.57*eV);
44  energyConstant["THF"].push_back(13.60*eV);
45  energyConstant["THF"].push_back(15.11*eV);
46  energyConstant["THF"].push_back(15.97*eV);
47  energyConstant["THF"].push_back(16.28*eV);
48  energyConstant["THF"].push_back(18.19*eV);
49  energyConstant["THF"].push_back(18.69*eV);
50  energyConstant["THF"].push_back(22.14*eV);
51  energyConstant["THF"].push_back(22.25*eV);
52  energyConstant["THF"].push_back(27.21*eV);
53  energyConstant["THF"].push_back(28.97*eV);
54  energyConstant["THF"].push_back(36.97*eV);
55  energyConstant["THF"].push_back(305.07*eV);
56  energyConstant["THF"].push_back(305.08*eV);
57  energyConstant["THF"].push_back(306.17*eV);
58  energyConstant["THF"].push_back(306.17*eV);
59  energyConstant["THF"].push_back(557.94*eV);
60 
61  energyConstant["PY"].push_back(9.73*eV);
62  energyConstant["PY"].push_back(10.96*eV);
63  energyConstant["PY"].push_back(11.54*eV);
64  energyConstant["PY"].push_back(12.58*eV);
65  energyConstant["PY"].push_back(15.96*eV);
66  energyConstant["PY"].push_back(16.27*eV);
67  energyConstant["PY"].push_back(16.53*eV);
68  energyConstant["PY"].push_back(17.98*eV);
69  energyConstant["PY"].push_back(19.37*eV);
70  energyConstant["PY"].push_back(20.52*eV);
71  energyConstant["PY"].push_back(24.55*eV);
72  energyConstant["PY"].push_back(24.64*eV);
73  energyConstant["PY"].push_back(29.75*eV);
74  energyConstant["PY"].push_back(33.02*eV);
75  energyConstant["PY"].push_back(36.57*eV);
76  energyConstant["PY"].push_back(305.92*eV);
77  energyConstant["PY"].push_back(307.09*eV);
78  energyConstant["PY"].push_back(307.09*eV);
79  energyConstant["PY"].push_back(307.52*eV);
80  energyConstant["PY"].push_back(423.44*eV);
81  energyConstant["PY"].push_back(423.44*eV);
82 
83  energyConstant["PU"].push_back(9.58*eV);
84  energyConstant["PU"].push_back(10.57*eV);
85  energyConstant["PU"].push_back(10.97*eV);
86  energyConstant["PU"].push_back(12.22*eV);
87  energyConstant["PU"].push_back(12.92*eV);
88  energyConstant["PU"].push_back(13.44*eV);
89  energyConstant["PU"].push_back(15.05*eV);
90  energyConstant["PU"].push_back(16.56*eV);
91  energyConstant["PU"].push_back(17.18*eV);
92  energyConstant["PU"].push_back(17.88*eV);
93  energyConstant["PU"].push_back(17.90*eV);
94  energyConstant["PU"].push_back(19.11*eV);
95  energyConstant["PU"].push_back(20.09*eV);
96  energyConstant["PU"].push_back(21.70*eV);
97  energyConstant["PU"].push_back(23.52*eV);
98  energyConstant["PU"].push_back(24.35*eV);
99  energyConstant["PU"].push_back(25.41*eV);
100  energyConstant["PU"].push_back(29.34*eV);
101  energyConstant["PU"].push_back(32.44*eV);
102  energyConstant["PU"].push_back(33.67*eV);
103  energyConstant["PU"].push_back(36.26*eV);
104  energyConstant["PU"].push_back(38.22*eV);
105  energyConstant["PU"].push_back(306.53*eV);
106  energyConstant["PU"].push_back(307.19*eV);
107  energyConstant["PU"].push_back(307.64*eV);
108  energyConstant["PU"].push_back(308.14*eV);
109  energyConstant["PU"].push_back(308.17*eV);
110  energyConstant["PU"].push_back(423.31*eV);
111  energyConstant["PU"].push_back(423.43*eV);
112  energyConstant["PU"].push_back(423.64*eV);
113  energyConstant["PU"].push_back(423.98*eV);
114 
115  energyConstant["TMP"].push_back(10.81*eV);
116  energyConstant["TMP"].push_back(10.81*eV);
117  energyConstant["TMP"].push_back(12.90*eV);
118  energyConstant["TMP"].push_back(13.32*eV);
119  energyConstant["TMP"].push_back(13.32*eV);
120  energyConstant["TMP"].push_back(13.59*eV);
121  energyConstant["TMP"].push_back(14.33*eV);
122  energyConstant["TMP"].push_back(14.33*eV);
123  energyConstant["TMP"].push_back(15.90*eV);
124  energyConstant["TMP"].push_back(17.09*eV);
125  energyConstant["TMP"].push_back(17.09*eV);
126  energyConstant["TMP"].push_back(17.13*eV);
127  energyConstant["TMP"].push_back(17.85*eV);
128  energyConstant["TMP"].push_back(17.85*eV);
129  energyConstant["TMP"].push_back(18.44*eV);
130  energyConstant["TMP"].push_back(19.37*eV);
131  energyConstant["TMP"].push_back(19.37*eV);
132  energyConstant["TMP"].push_back(21.40*eV);
133  energyConstant["TMP"].push_back(26.20*eV);
134  energyConstant["TMP"].push_back(26.20*eV);
135  energyConstant["TMP"].push_back(27.43*eV);
136  energyConstant["TMP"].push_back(35.23*eV);
137  energyConstant["TMP"].push_back(37.67*eV);
138  energyConstant["TMP"].push_back(37.67*eV);
139  energyConstant["TMP"].push_back(39.64*eV);
140  energyConstant["TMP"].push_back(152.42*eV);
141  energyConstant["TMP"].push_back(152.42*eV);
142  energyConstant["TMP"].push_back(152.44*eV);
143  energyConstant["TMP"].push_back(209.59*eV);
144  energyConstant["TMP"].push_back(306.92*eV);
145  energyConstant["TMP"].push_back(306.92*eV);
146  energyConstant["TMP"].push_back(306.92*eV);
147  energyConstant["TMP"].push_back(557.34*eV);
148  energyConstant["TMP"].push_back(559.40*eV);
149  energyConstant["TMP"].push_back(559.40*eV);
150  energyConstant["TMP"].push_back(559.41*eV);
151  energyConstant["TMP"].push_back(2178.05*eV);
152 
153  std::map<G4String, std::vector<G4double> >::iterator it;
154  for(it=energyConstant.begin();it!=energyConstant.end();it++)
155  {
156  nLevels[it->first] = (it->second).size();
157  }
158 }
159 
160 
162 { }
163 
164 
166 {
167  G4String matNameModif = ReplaceMaterial(materialName);
168 
169  // check if the material exist in the map
170  if(energyConstant.find(matNameModif)==energyConstant.end())
171  {
172  std::ostringstream oss;
173  oss << "Material name was not found in energyConstantMap. Problematic material is: "<<matNameModif;
174  G4Exception("G4DNAPTBIonisationStructure::IonisationEnergy","em0002",
175  FatalException, oss.str().c_str());
176  }
177 
178  G4double ionisation = 0.;
179 
180  if (level >=0 && level < nLevels[matNameModif]) ionisation = energyConstant[matNameModif][level];
181 
182  return ionisation;
183 }
184 
186 {
187  G4String matNameModif = ReplaceMaterial(materialName);
188 
189  // check if the material exist in the map
190  if(nLevels.find(matNameModif)==nLevels.end())
191  {
192  std::ostringstream oss;
193  oss << "Material name was not found in energyConstantMap. Problematic material is: "<<matNameModif;
194  G4Exception("G4DNAPTBIonisationStructure::NumberOfLevels","em0002",
195  FatalException, oss.str().c_str());
196  }
197 
198  return nLevels[matNameModif];
199 }
200 
202 {
203  G4String materialNameModified (materialName);
204 
205  if(materialName=="backbone_THF") materialNameModified = "THF";
206  else if(materialName=="backbone_TMP") materialNameModified = "TMP";
207  else if(materialName=="adenine_PU") materialNameModified = "PU";
208  else if(materialName=="guanine_PU") materialNameModified = "PU";
209  else if(materialName=="thymine_PY") materialNameModified = "PY";
210  else if(materialName=="cytosine_PY") materialNameModified = "PY";
211 
212  return materialNameModified;
213 }
std::map< G4String, std::vector< G4double > > energyConstant
double G4double
Definition: G4Types.hh:76
std::map< G4String, G4int > nLevels
G4String ReplaceMaterial(const G4String &materialName)
static constexpr double eV
Definition: G4SIunits.hh:215
G4double IonisationEnergy(G4int level, const G4String &materialName)
G4int NumberOfLevels(const G4String &materialName)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.hh:65
int G4int
Definition: G4Types.hh:78