00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "G4AblaDataFile.hh"
00034
00035 #include "globals.hh"
00036 #include <fstream>
00037
00038 G4AblaDataFile::G4AblaDataFile()
00039 {
00040 verboseLevel = 0;
00041 }
00042
00046 bool G4AblaDataFile::readData()
00047 {
00048 if(!getenv("G4ABLADATA")) {
00049
00050
00051
00052
00053 G4String errorMessage1 = "ERROR: Data missing. Set environment variable G4ABLADATA\n";
00054 G4String errorMessage2 = "\t to point to the directory containing data files needed\n";
00055 G4String errorMessage3 = "\t by INCL and ABLA models.\n";
00056 G4String errorMessage = errorMessage1 + errorMessage2 + errorMessage3;
00057 G4Exception(errorMessage);
00058 }
00059
00060 G4String dataPath(getenv("G4ABLADATA"));
00061 G4String flAlphaFile(dataPath + "/flalpha.dat");
00062 G4String frldmFile( dataPath + "/frldm.dat");
00063 G4String vgsldFile( dataPath + "/vgsld.dat");
00064 G4String pace2File( dataPath + "/pace2.dat");
00065
00066 if(verboseLevel > 1) {
00067 G4cout <<"Data path = " << dataPath << G4endl;
00068 G4cout <<"FlAlphaFile = " << flAlphaFile << G4endl;
00069 G4cout <<"FrldmFile = " << frldmFile << G4endl;
00070 G4cout <<"VgsldFile = " << vgsldFile << G4endl;
00071 G4cout <<"Pace2File = " << pace2File << G4endl;
00072 }
00073
00074 std::ifstream flalphain(flAlphaFile.c_str());
00075 std::ifstream frldmin(frldmFile.c_str());
00076 std::ifstream vgsldin(vgsldFile.c_str());
00077 std::ifstream pace2in(pace2File.c_str());
00078
00079 std::filebuf *buf1 = flalphain.rdbuf();
00080 std::filebuf *buf2 = frldmin.rdbuf();
00081 std::filebuf *buf3 = vgsldin.rdbuf();
00082 std::filebuf *buf4 = pace2in.rdbuf();
00083 if (!((buf1->is_open()) && (buf2->is_open()) && (buf3->is_open()) && (buf4->is_open()))) {
00084 G4Exception("ERROR: Data missing. Could not find ABLA data file in " + dataPath +
00085 " defined by environment variable G4ABLADATA");
00086 }
00087
00088 G4double flalpha, frldm, vgsld, pace2;
00089 const G4int rows = 98;
00090 const G4int cols = 153;
00091 const G4int massnumbers = 263;
00092 for(int i = 0; i < rows; i++) {
00093 for(int j = 0; j < cols; j++) {
00094 setAlpha(j, i, 0.0);
00095 setEcnz( j, i, 0.0);
00096 setVgsld(j, i, 0.0);
00097 }
00098 }
00099
00100 for(int i = 0; i < rows; i++) {
00101 for(int j = 0; j < cols; j++) {
00102 flalphain >> flalpha;
00103 frldmin >> frldm;
00104 vgsldin >> vgsld;
00105 setAlpha(j, i, flalpha);
00106 setEcnz( j, i, frldm);
00107 setVgsld(j, i, vgsld);
00108 }
00109 }
00110 flalphain.close();
00111 frldmin.close();
00112 vgsldin.close();
00113
00114 int A = 0, Zbegin = 0, Zend = 0;
00115 G4String str1, str2, str3;
00116 for(int i = 0; i < 500; i++) {
00117 for(int j = 0; j < 500; j++) {
00118 setPace2(i, j, 0.0);
00119 }
00120 }
00121
00122 for(int i = 0; i < massnumbers; i++) {
00123 pace2in >> str1 >> A >> str2 >> Zbegin >> str3 >> Zend;
00124 for(int j = Zbegin; j <= Zend; j++) {
00125 pace2in >> pace2;
00126 setPace2(A, j, pace2);
00127 }
00128 }
00129 pace2in.close();
00130 if(std::fabs(getPace2(A, Zend) - 114516.10) > 1e-6) {
00131 G4cout <<"ERROR: Problem in parsing datafile " + pace2File << G4endl;
00132 return false;
00133 }
00134
00135 return true;
00136 }
00137
00138