ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4DNAPTBIonisationStructure.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file 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 }