source: trunk/source/processes/electromagnetic/lowenergy/test/G4DNACrossSectionDataSetTest.cc @ 1350

Last change on this file since 1350 was 1350, checked in by garnier, 13 years ago

update to last version 4.9.4

File size: 9.3 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// $Id: G4DNACrossSectionDataSetTest.cc,v 1.2 2006/06/29 19:43:55 gunter Exp $
28// GEANT4 tag $Name: geant4-09-04-ref-00 $
29//
30// Author: Riccardo Capra <capra@ge.infn.it>
31//
32// History:
33// -----------
34// 30 Jun 2005  RC         Created
35                                                                                                                                                                                                                             
36                                                                                                                                                                                                                                                                                                                                                                                                                                                         
37#include "G4DNACrossSectionDataSet.hh"
38#include "G4LogLogInterpolation.hh"
39#include <fstream>
40#include <unistd.h>
41
42#define EnergyUMIS 2 //eV
43#define DataUMIS 3 //barn
44
45int main(int argc, char **argv)
46{
47 const char *inFile;
48
49 if (argc>2)
50 {
51  G4cout << "Syntax: " << argv[0] << " [filename]" << G4endl;
52  G4cout << G4endl;
53  G4cout << "(!) NOTE: some files will be written in this directory (pattern: G4DNACrossSectionDataSetTestFile*.dat)" << G4endl;
54  return 0;
55 }
56 else if (argc==2)
57  inFile=argv[1];
58 else
59 {
60  inFile="G4DNACrossSectionDataSetTestFile";
61  std::ofstream out("./G4DNACrossSectionDataSetTestFile.dat");
62  out << "1.00000000e+05   8.14416702e+02   6.76315789e+02   4.88340749e+02   8.39880339e+01   7.89635115e-02   2.06314024e+03\n"
63         "2.00000000e+05   5.28359350e+02   4.63221618e+02   3.44771389e+02   7.30146866e+01   2.52677590e-01   1.40961972e+03\n\n"
64     "    3.00000000e+05   3.95840046e+02   3.53745700e+02   2.65748336e+02\t5.98188864e+01 4.09845238e-01   1.07556281e+03\n"
65         "4.00000000e+05   3.19343880e+02   2.88487842e+02   2.17686875e+02   5.03590031e+01   5.32869987e-01   8.76410470e+02\r\n"
66         "5.00000000e+05   2.69156735e+02   2.44940828e+02   1.85347963e+02   4.34715722e+01   6.24418579e-01   7.43541517e+02\n"
67         "1.00000000e+06   1.55452794e+02   1.43970277e+02   1.09881243e+02   2.64352725e+01   8.10553505e-01   4.36550140e+02     \n"
68         "1.50000000e+06   1.11668214e+02   1.04282494e+02   7.98560948e+01\t1.93490562e+01   8.14261386e-01   3.15970120e+02\n"
69         "2.00000000e+06   8.80312507e+01   8.26279732e+01   6.33649352e+01   1.54081437e+01   7.71586134e-01   2.50203889e+02\n"
70      "   2.50000000e+06   7.30696756e+01 6.88018974e+01   5.28437021e+01   1.28756775e+01   7.19674081e-01   2.08310627e+02\n\r"
71         "3.00000000e+06   6.26612557e+01   5.91740007e+01   4.55044481e+01   1.11003552e+01   6.69053959e-01   1.79109114e+02\n"
72      "   3.50000000e+06   5.50134904e+01   5.20584986e+01   4.00630585e+01   9.78183471e+00   6.23068350e-01   1.57539951e+02\n"
73         "4.00000000e+06   4.91088724e+01   4.65679165e+01   3.58555442e+01   8.76079088e+00   5.82043180e-01   1.40875167e+02\n\n    # comment\n"
74         "4.50000000e+06   4.44233138e+01   4.21789727e+01   3.25041581e+01   7.94478293e+00   5.45740594e-01   1.27596968e+02\n#comment\r\n"
75         "5.00000000e+06   4.05969944e+01   3.85988273e+01   2.97569104e+01   7.27564958e+00   5.13600786e-01 1.16741982e+02\n"
76         "6.00000000e+06   3.47166562e+01   3.30808108e+01   2.55256187e+01   6.24407052e+00   4.59695847e-01   1.00026852e+02\n"
77         "7.00000000e+06   3.03909338e+01   2.90156224e+01   2.24051103e+01   5.48359988e+00   4.16287624e-01   8.77115540e+01\n"
78         "8.00000000e+06   2.70812879e+01   2.58941898e+01   2.00065525e+01\t4.89722388e+00   3.80739730e-01   7.82599938e+01\n"
79         "9.00000000e+06   2.44599065e+01   2.34131260e+01   1.80955062e+01   4.43069001e+00   3.51212438e-01   7.07504411e+01\n"
80         "1.00000000e+07   2.23229847e+01   2.13902553e+01   1.65394526e+01   4.05000347e+00   3.26180582e-01   6.46288766e+01 #comment     \n"
81         "1.10000000e+07   2.05485697e+01   1.97086000e+01   1.52450755e+01   3.73311927e+00 3.04729195e-01   5.95400936e+01#comment\n"
82         "1.20000000e+07   1.90475083e+01   1.82869443e+01   1.41492895e+01   3.46491210e+00   2.86140746e-01   5.52347951e+01\n"
83         "1.30000000e+07   1.77638183e+01   1.70693653e+01   1.32099385e+01   3.23474125e+00 \t  2.69857202e-01   5.15477205e+01       \n"
84    "     1.40000000e+07   1.66514478e+01   1.60114678e+01   1.23958510e+01   3.03496833e+00   2.55467589e-01   4.83492025e+01\n"
85         "1.50000000e+07   1.56760259e+01   1.50837486e+01   1.16792471e+01   2.85979032e+00   2.42653835e-01   4.55414657e+01\n"
86         "1.60000000e+07   1.48138030e+01   1.42630410e+01   1.10462104e+01   2.70486989e+00   2.31166719e-01   4.30590910e+01    \n\n";
87         
88  if (!out.good())
89  {
90   G4cout << argv[0] << ": Failed to create \"./G4DNACrossSectionDataSetTestFile.dat\" file" << G4endl;
91   return 0;
92  }         
93
94  out.close();
95  setenv("G4LEDATA", ".", 1);                                                                                                   
96 }                                                                                                                             
97
98 G4LogLogInterpolation *algorithm(new G4LogLogInterpolation);
99 
100 G4DNACrossSectionDataSet dataset(algorithm, EnergyUMIS, DataUMIS);
101 
102 G4cout << argv[0] << ": G4DNACrossSectionDataSet::Load: " << G4endl;
103
104 try
105 {
106  if (!dataset.LoadData(inFile))
107  {
108   G4cout << " - Failed with false" << G4endl;
109   return 0;
110  }
111 }
112 catch (...)
113 {
114  G4cout << " - Failed with exception" << G4endl;
115  return 0;
116 }
117 
118 if (argc==1)
119  unlink("./G4DNACrossSectionDataSetTestFile.dat");
120 
121 G4cout << " - Passed" << G4endl;
122 
123 G4cout << argv[0] << ": G4DNACrossSectionDataSet::PrintData: " << G4endl;
124 dataset.PrintData();
125 
126 setenv("G4LEDATA", ".", 1);
127 G4cout << argv[0] << ": G4DNACrossSectionDataSet::Save: " << G4endl;
128 try
129 {
130  if (!dataset.SaveData("G4DNACrossSectionDataSetTestFile-2"))
131  {
132   G4cout << " - Failed with false" << G4endl;
133   return 0;
134  }
135 }
136 catch (...)
137 {
138  G4cout << " - Failed with exception" << G4endl;
139  return 0;
140 }
141 
142 G4DNACrossSectionDataSet dataset2(algorithm->Clone(), EnergyUMIS, DataUMIS);
143 try
144 {
145  if (!dataset2.LoadData("G4DNACrossSectionDataSetTestFile-2"))
146  {
147   G4cout << " - Failed with file missing" << G4endl;
148   return 0;
149  }
150 }
151 catch (...)
152 {
153  G4cout << " - Failed with file missing" << G4endl;
154  return 0;
155 }
156 
157 unlink("./G4DNACrossSectionDataSetTestFile-2.dat");
158
159 G4cout << " - Passed" << G4endl;
160 
161 G4cout << argv[0] << ": Comparing data:" << G4endl;
162 
163 size_t n(dataset.NumberOfComponents());
164 
165 if (n!=dataset2.NumberOfComponents())
166 {
167  G4cout << " - Failed different number of components" << G4endl;
168  return 0;
169 }
170 
171 while (n>0)
172 {
173  n--;
174 
175  const G4DataVector &e(dataset.GetComponent(n)->GetEnergies(0));
176  const G4DataVector &e2(dataset2.GetComponent(n)->GetEnergies(0));
177  const G4DataVector &d(dataset.GetComponent(n)->GetData(0));
178  const G4DataVector &d2(dataset2.GetComponent(n)->GetData(0));
179
180  if (e.size()!=e2.size() || d.size()!=d2.size() || e.size()!=d.size())
181  {
182   G4cout << " - Failed different number of rows" << G4endl;
183   return 0;
184  }
185 
186  size_t m(e.size());
187 
188  while (m>0)
189  {
190   m--;
191   
192   if (e[m]!=e2[m])
193   {
194    G4cout << " - Failed different energies (line " << (m+1) << " - " << e[m] << ", " << e2[m] << ")" << G4endl;
195    return 0;
196   }
197
198   if (d[m]!=d2[m])
199   {
200    G4cout << " - Failed different data (line " << (m+1) << ", column " << (n+2) << " - " << d[m] << ", " << d2[m] << ")" << G4endl;
201    return 0;
202   }
203  }
204 }
205 
206 G4cout << " - Passed" << G4endl;
207 G4cout << G4endl;
208 G4cout << "(!) NOTE: Files G4DNACrossSectionDataSetTestFile*.dat were written and removed from this directory" << G4endl;
209 
210 return 0;
211}
Note: See TracBrowser for help on using the repository browser.