source: trunk/source/materials/test/testDEDXTables.cc@ 1289

Last change on this file since 1289 was 1199, checked in by garnier, 16 years ago

nvx fichiers dans CVS

File size: 9.2 KB
Line 
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// Anton.Lechner@cern.ch
28//
29// Environment variable TESTTARGET must be specified (see GNUmakefile)
30//
31
32#include "G4MaterialStoppingICRU73.hh"
33#include "G4SimpleMaterialStoppingICRU73.hh"
34#include "G4IronStoppingICRU73.hh"
35#include <sstream>
36
37
38G4bool Compare(G4PhysicsVector* physicsVector,
39 G4double refDEDXValue,
40 G4double kinEnergyPerNucleon,
41 G4int atomicNumberIon,
42 const G4String& matIdentifier) {
43
44 G4double tableDEDXValue = -1.0;
45
46 if(physicsVector != 0) {
47 size_t nmbBins = physicsVector -> GetVectorLength();
48 G4double lowerEnergyEdge = physicsVector -> GetLowEdgeEnergy(0);
49 G4double upperEnergyEdge = physicsVector -> GetLowEdgeEnergy(nmbBins-1);
50
51 if(kinEnergyPerNucleon <= upperEnergyEdge &&
52 kinEnergyPerNucleon >= lowerEnergyEdge) {
53 G4bool b;
54
55 tableDEDXValue = physicsVector -> GetValue(kinEnergyPerNucleon, b);
56 }
57 }
58
59 // G4cout << *physicsVector << G4endl;
60
61 G4cout << " E/A1(MeV) = " << kinEnergyPerNucleon / MeV
62 << ", Z(Ion) = " << atomicNumberIon
63 << ", Mat = " << matIdentifier
64 << " -- dE/dx(MeV*cm2/mg) = "
65 << tableDEDXValue / (MeV * cm2 / (0.001 * g))
66 << ", Ref(MeV*cm2/mg) = "
67 << refDEDXValue / (MeV * cm2 / (0.001 * g))
68 << ":";
69
70 G4double eps = 0.0001 * (MeV * cm2 / (0.001 * g));
71
72 if( refDEDXValue < (tableDEDXValue - eps) ||
73 refDEDXValue > (tableDEDXValue + eps) ) {
74
75 G4cout << " Test failed" << G4endl;
76 return false;
77 }
78 else G4cout << " Test passed" << G4endl;
79
80 return true;
81}
82
83
84G4bool CompareDEDXValues(G4VIonDEDXTable* table,
85 G4double refDEDXValue,
86 G4double kinEnergyPerNucleon,
87 G4int atomicNumberIon,
88 G4int atomicNumberMat) {
89
90 G4PhysicsVector* physicsVector =
91 table -> GetPhysicsVector(atomicNumberIon,
92 atomicNumberMat);
93
94 std::stringstream ss;
95 ss << atomicNumberMat;
96
97 return Compare(physicsVector, refDEDXValue, kinEnergyPerNucleon,
98 atomicNumberIon, ss.str());
99}
100
101
102G4bool CompareDEDXValues(G4VIonDEDXTable* table,
103 G4double refDEDXValue,
104 G4double kinEnergyPerNucleon,
105 G4int atomicNumberIon,
106 const G4String& matName) {
107
108 G4PhysicsVector* physicsVector =
109 table -> GetPhysicsVector(atomicNumberIon,
110 matName);
111 return Compare(physicsVector, refDEDXValue, kinEnergyPerNucleon,
112 atomicNumberIon, matName);
113}
114
115
116G4bool TestApplicability(G4VIonDEDXTable* table,
117 G4bool shouldBeApplicable,
118 G4int atomicNumberIon,
119 const G4String& matName) {
120
121 G4bool isApplicable = table -> IsApplicable(atomicNumberIon, matName);
122
123 G4cout << " Z(Ion) = " << atomicNumberIon
124 << ", Mat = " << matName
125 << " -- ";
126
127 if(shouldBeApplicable) {
128 G4cout << " Should be applicable: ";
129 if(isApplicable) G4cout << "Test passed." << G4endl;
130 else { G4cout << "Test failed." << G4endl; return false; }
131 }
132 else {
133 G4cout << " Should not be applicable: ";
134 if(!isApplicable) G4cout << "Test passed." << G4endl;
135 else { G4cout << "Test failed." << G4endl; return false; }
136 }
137 return true;
138}
139
140
141int main() {
142
143 G4double unitDEDX = (MeV * cm2 / (0.001 * g));
144
145 G4SimpleMaterialStoppingICRU73* icru73elem =
146 new G4SimpleMaterialStoppingICRU73();
147
148 G4MaterialStoppingICRU73* icru73comp = new G4MaterialStoppingICRU73();
149
150 G4IronStoppingICRU73* icru73iron = new G4IronStoppingICRU73();
151
152 G4cout << "### Test of DEDX tables (ICRU 73) ###" << G4endl;
153
154 G4cout << "#### I. Testing Function GetPhysicsVector() ###" << G4endl;
155
156 G4cout << G4endl << "### A. G4SimpleMaterialStoppingICRU73:" << G4endl;
157
158 // Reference values taken directly from ICRU 73 tables
159 CompareDEDXValues(icru73elem, 8.31 * unitDEDX, 0.025, 3, 1 );
160 CompareDEDXValues(icru73elem, 3.312 * unitDEDX, 1.5, 8, 50);
161 CompareDEDXValues(icru73elem, 10.99 * unitDEDX, 10., 18, 10);
162 CompareDEDXValues(icru73elem, 4.412 * unitDEDX, 10., 18, 92);
163
164 CompareDEDXValues(icru73elem, 8.31 * unitDEDX, 0.025, 3, "G4_H");
165 CompareDEDXValues(icru73elem, 3.312 * unitDEDX, 1.5, 8, "G4_Sn");
166 CompareDEDXValues(icru73elem, 10.99 * unitDEDX, 10., 18, "G4_Ne");
167 CompareDEDXValues(icru73elem, 4.412 * unitDEDX, 10., 18, "G4_U");
168
169 G4cout << G4endl << "### B. G4MaterialStoppingICRU73:" << G4endl;
170
171 // Reference values taken directly from ICRU 73 tables
172 CompareDEDXValues(icru73comp, 2.748 * unitDEDX, 0.025, 3, "G4_A-150_TISSUE");
173 CompareDEDXValues(icru73comp, 1.909 * unitDEDX, 0.025, 3, "G4_CARBON_DIOXIDE");
174 CompareDEDXValues(icru73comp, 4.225 * unitDEDX, 10.0 , 10, "G4_MYLAR");
175
176 // Reference values taken directly from revised ICRU 73 tables
177 CompareDEDXValues(icru73comp, 0.19364 * unitDEDX, 25.0, 3, "G4_WATER");
178 CompareDEDXValues(icru73comp, 3.6037 * unitDEDX, 0.025, 6, "G4_WATER");
179 CompareDEDXValues(icru73comp, 1.6302 * unitDEDX, 10.0, 6, "G4_WATER");
180 CompareDEDXValues(icru73comp, 0.079682 * unitDEDX, 1000.0, 6, "G4_WATER");
181 CompareDEDXValues(icru73comp, 1.2296 * unitDEDX, 80.0, 12, "G4_WATER");
182 CompareDEDXValues(icru73comp, 7.1917 * unitDEDX, 15.0, 15, "G4_WATER");
183 CompareDEDXValues(icru73comp, 4.7505 * unitDEDX, 30.0, 16, "G4_WATER");
184 CompareDEDXValues(icru73comp, 0.76464 * unitDEDX, 800.0, 18, "G4_WATER");
185 CompareDEDXValues(icru73comp, 12.836 * unitDEDX, 0.09, 18, "G4_WATER");
186 CompareDEDXValues(icru73comp, 0.39022 * unitDEDX, 250.0, 10, "G4_WATER");
187
188 G4cout << G4endl << "### C. G4IronStoppingICRU73:" << G4endl;
189
190 // Reference values taken directly from ICRU 73 tables
191 CompareDEDXValues(icru73iron, 27.6 * unitDEDX, 0.025, 26, "G4_H");
192 CompareDEDXValues(icru73iron, 30.72 * unitDEDX, 1.5, 26, "G4_Al");
193 CompareDEDXValues(icru73iron, 13.75 * unitDEDX, 10.0 , 26, "G4_Kr");
194
195 G4cout << G4endl << "#### II. Testing Function IsApplicable() ###" << G4endl;
196
197 G4cout << G4endl << "### A. G4SimpleMaterialStoppingICRU73:" << G4endl;
198
199 TestApplicability(icru73elem, true, 3, "G4_H");
200 TestApplicability(icru73elem, true, 8, "G4_Sn");
201 TestApplicability(icru73elem, true, 18, "G4_Ne");
202 TestApplicability(icru73elem, true, 18, "G4_U");
203 TestApplicability(icru73elem, false, 19, "G4_H");
204 TestApplicability(icru73elem, false, 2, "G4_Sn");
205 TestApplicability(icru73elem, false, 3, "G4_Cr");
206
207 G4cout << G4endl << "### B. G4MaterialStoppingICRU73:" << G4endl;
208
209 TestApplicability(icru73comp, true, 3, "G4_MYLAR");
210 TestApplicability(icru73comp, true, 8, "G4_POLYETHYLENE");
211 TestApplicability(icru73comp, true, 18, "G4_CARBON_DIOXIDE");
212 TestApplicability(icru73comp, true, 18, "G4_A-150_TISSUE");
213 TestApplicability(icru73comp, false, 19, "G4_MYLAR");
214 TestApplicability(icru73comp, false, 2, "G4_MYLAR");
215 TestApplicability(icru73comp, false, 3, "G4_Cr");
216
217 G4cout << G4endl << "### B. G4IronStoppingICRU73:" << G4endl;
218
219 TestApplicability(icru73iron, true, 26, "G4_H");
220 TestApplicability(icru73iron, true, 26, "G4_Ne");
221 TestApplicability(icru73iron, true, 26, "G4_Kr");
222 TestApplicability(icru73iron, false, 19, "G4_H");
223 TestApplicability(icru73iron, false, 26, "G4_Sn");
224 TestApplicability(icru73iron, false, 3, "G4_Cr");
225
226 G4cout << G4endl << "################# DONE #################" << G4endl;
227
228 delete icru73elem;
229 delete icru73comp;
230 delete icru73iron;
231
232 return 0;
233}
234
Note: See TracBrowser for help on using the repository browser.