00001
00007 #include <math.h>
00008 #include <iostream.h>
00009 #include <fstream.h>
00010 #include <iomanip.h>
00011 #include <string>
00012 #include "ReactorDetector.hh"
00013 #include "ReactorConstants.hh"
00014 #include "ReactorFortran.hh"
00015 #include "MyTlSource.hh"
00016
00017 MyTlSource::MyTlSource(int newIsotope){
00018
00019 Isotope = newIsotope;
00020
00021
00022
00023
00024 fstream fin("data/tl_bi_decays.txt", ios::in);
00025
00026
00027 char paramLine[256];
00028 string dummyString;
00029 int dummyInt;
00030 float dummyFloat;
00031 bool done = false;
00032 bool Set = false;
00033
00034 int Z, A;
00035 int Nbranch = 0;
00036 float branchProb[40];
00037 int Ngamma[40];
00038 float gammaE[40][6];
00039
00040
00041 numGamma = 0;
00042 for(int i=0;i<6; i++) gammaEnergy[i] = 0.;
00043
00044
00045 if(Isotope == 208){
00046
00047 while(!done){
00048
00049
00050 if(fin.peek() == '#'){
00051
00052 fin.getline(paramLine, 256);
00053 continue;
00054 }
00055
00056
00057 if(fin.peek() == 'e' || fin.peek() == 'E'){
00058
00059 done = true;
00060 continue;
00061 }
00062
00063
00064 if(fin.peek() == 'n' || fin.peek() == 'N'){
00065
00066 if(Set){
00067
00068 fin.getline( paramLine, 256 );
00069 continue;
00070 }
00071 fin >> dummyString;
00072 while(fin.peek() == ' ' || fin.peek() == '=')
00073 fin.ignore(1);
00074
00075 fin >> Z >> A;
00076
00077
00078 if(A == 208){
00079
00080
00081 Nbranch = 40;
00082 for(int n=0; n<Nbranch; n++){
00083
00084 fin >> branchProb[n] >> dummyInt >> dummyFloat >> Ngamma[n];
00085 for(int i=0; i<6; i++) fin >> gammaE[n][i];
00086 fin >> dummyFloat >> dummyFloat >> dummyFloat;
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 }
00097
00098 Set = true;
00099 }
00100
00101 continue;
00102 }
00103
00104
00105 if(fin.peek() == '0' || fin.peek() == '1'){
00106
00107 fin.getline(paramLine, 256);
00108 continue;
00109 }
00110
00111
00112 if(fin.peek() == ' ' || fin.peek() == '\n'){
00113
00114 fin.ignore(1);
00115 continue;
00116 }
00117 }
00118
00119 }
00120
00121
00122 if(Isotope == 210){
00123
00124 while(!done){
00125
00126
00127 if(fin.peek() == '#'){
00128
00129 fin.getline(paramLine, 256);
00130 continue;
00131 }
00132
00133
00134 if(fin.peek() == 'e' || fin.peek() == 'E'){
00135
00136 done = true;
00137 continue;
00138 }
00139
00140
00141 if(fin.peek() == 'n' || fin.peek() == 'N'){
00142
00143 if(Set){
00144
00145 fin.getline( paramLine, 256 );
00146 continue;
00147 }
00148 fin >> dummyString;
00149 while(fin.peek() == ' ' || fin.peek() == '=')
00150 fin.ignore(1);
00151
00152 fin >> Z >> A;
00153
00154
00155 if(A == 210){
00156
00157
00158 Nbranch = 12;
00159 for(int n=0; n<Nbranch; n++){
00160
00161 fin >> branchProb[n] >> dummyInt >> dummyFloat >> Ngamma[n];
00162 for(int i=0; i<6; i++) fin >> gammaE[n][i];
00163 fin >> dummyFloat >> dummyFloat >> dummyFloat;
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 }
00174
00175 Set = true;
00176 }
00177
00178 continue;
00179 }
00180
00181
00182 if(fin.peek() == '0' || fin.peek() == '1'){
00183
00184 fin.getline(paramLine, 256);
00185 continue;
00186 }
00187
00188
00189 if(fin.peek() == ' ' || fin.peek() == '\n'){
00190
00191 fin.ignore(1);
00192 continue;
00193 }
00194 }
00195
00196 }
00197
00198
00199 const int len = 1;
00200 float r[len];
00201 ranlux_(r,len);
00202
00203 bool passed = false;
00204 for(int n=0;n<Nbranch; n++){
00205
00206 if(branchProb[n] > r[0] && !passed){
00207
00208
00209 numGamma = Ngamma[n];
00210 for(int i=0;i<numGamma; i++) gammaEnergy[i] = gammaE[n][i];
00211
00212 if(numGamma)passed = true;
00213 }
00214 }
00215
00216
00217 }
00218
00219 MyTlSource::~MyTlSource(){
00220 ;
00221 }
00222
00223 MyTlSource::MyTlSource(const MyTlSource& TlSource){
00224
00225 Isotope = TlSource.Isotope;
00226
00227 numGamma = TlSource.numGamma;
00228
00229 for(int n=0;n<6;n++){
00230 gammaEnergy[n] = TlSource.gammaEnergy[n];
00231 }
00232 }
00233
00234 MyTlSource& MyTlSource::operator=(const MyTlSource& rhs){
00235
00236 if(this == &rhs)return *this;
00237
00238 Isotope = rhs.Isotope;
00239
00240 numGamma = rhs.numGamma;
00241
00242 for(int n=0;n<6;n++){
00243 gammaEnergy[n] = rhs.gammaEnergy[n];
00244 }
00245
00246 return *this;
00247
00248 }