Main Page   Compound List   File List   Compound Members   File Members  

MyTlSource.cpp

Go to the documentation of this file.
00001 
00007 #include <math.h>
00008 #include <iostream.h>
00009 #include <fstream.h>   // file I/O
00010 #include <iomanip.h>   // format manipulation
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   //cout << "MyTlSource::MyTlSource(" << Isotope << ")" << endl;
00022 
00023   // input the source number and position
00024   fstream fin("data/tl_bi_decays.txt", ios::in);
00025   //cout << "Tl input file: data/tl_bi_decays.txt" << endl;
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;
00036   float branchProb[40];
00037   int Ngamma[40];
00038   float gammaE[40][6];
00039 
00040   // zero the permanent information
00041   numGamma = 0;
00042   for(int i=0;i<6; i++) gammaEnergy[i] = 0.;
00043 
00044   // Tl208
00045   if(Isotope == 208){
00046 
00047     while(!done){
00048 
00049       // '#' specifies a comment line -- ignore it
00050       if(fin.peek() == '#'){
00051 
00052         fin.getline(paramLine, 256);
00053         continue;
00054       }
00055 
00056       // 'E'ND or 'e'nd specifies end of file -- set done flag to true
00057       if(fin.peek() == 'e' || fin.peek() == 'E'){
00058 
00059         done = true;
00060         continue;
00061       }
00062 
00063       // 'N'UCLEUS = or 'n'ucleus = specifies Z and A of daughter nucleus 
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         //cout << Z << " " << A << endl;
00077 
00078         if(A == 208){
00079 
00080           // read in Tl208 decay table, 40 branches
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             cout << "  branchProb[" << n << "] " << branchProb[n] 
00090                  << " and Ngamma[" << n << "] " << Ngamma[n] << endl;
00091             for(int i=0; i<Ngamma[n]; i++){
00092               cout << "  gammaE[" << n << "][" << i << "] " << gammaE[n][i];
00093             }
00094             cout << endl;
00095             */
00096           }
00097 
00098           Set = true;
00099         }
00100 
00101         continue;
00102       }
00103 
00104       // ignore lines starting with numbers if they are not in our decay table
00105       if(fin.peek() == '0' || fin.peek() == '1'){
00106 
00107         fin.getline(paramLine, 256);
00108         continue;
00109       }
00110 
00111       // ignore extra whitespace
00112       if(fin.peek() == ' ' || fin.peek() == '\n'){
00113 
00114         fin.ignore(1);
00115         continue;
00116       }
00117     }
00118 
00119   } // done with Tl208
00120 
00121   // Tl210
00122   if(Isotope == 210){
00123 
00124     while(!done){
00125 
00126       // '#' specifies a comment line -- ignore it
00127       if(fin.peek() == '#'){
00128 
00129         fin.getline(paramLine, 256);
00130         continue;
00131       }
00132 
00133       // 'E'ND or 'e'nd specifies end of file -- set done flag to true
00134       if(fin.peek() == 'e' || fin.peek() == 'E'){
00135 
00136         done = true;
00137         continue;
00138       }
00139 
00140       // 'N'UCLEUS = or 'n'ucleus = specifies Z and A of daughter nucleus 
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         //cout << Z << " " << A << endl;
00154 
00155         if(A == 210){
00156 
00157           // read in Tl210 decay table, 12 branches
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             cout << "  branchProb[" << n << "] " << branchProb[n] 
00167                  << " and Ngamma[" << n << "] " << Ngamma[n] << endl;
00168             for(int i=0; i<Ngamma[n]; i++){
00169               cout << "  gammaE[" << n << "][" << i << "] " << gammaE[n][i];
00170             }
00171             cout << endl;
00172             */
00173           }
00174 
00175           Set = true;
00176         }
00177 
00178         continue;
00179       }
00180 
00181       // ignore lines starting with numbers if they are not in our decay table
00182       if(fin.peek() == '0' || fin.peek() == '1'){
00183 
00184         fin.getline(paramLine, 256);
00185         continue;
00186       }
00187 
00188       // ignore extra whitespace
00189       if(fin.peek() == ' ' || fin.peek() == '\n'){
00190 
00191         fin.ignore(1);
00192         continue;
00193       }
00194     }
00195 
00196   } // done with Tl210
00197 
00198   // pick a decay branch and get the gamma energies
00199   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       // save the number and energies of the gammas
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 }    

Generated on Fri Oct 22 13:56:25 2004 for ReactorFsim by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002