/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/Mcgpj/Mcgpj-00-01-04/src/code/src/TVacuumPol.C

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <fstream>
00003 #include <sstream>
00004 #include <cstdlib>
00005 #include "TVacuumPol.h"
00006 
00007 using namespace std;
00008 
00009 TVacuumPol::TVacuumPol(){
00010   using namespace std;
00011   fsvtr = NULL;
00012   fsvsr = NULL;
00013   fsvsi = NULL;
00014   fNoVP = false;
00015 }
00016 
00017 void TVacuumPol::Init(std::string vpold, std::string vpolf){
00018 /*  char *vpd = getenv("VACUUM_POL_DIR");
00019   char *vpf = getenv("VACUUM_POL_FNAME");
00020   string vpolfname;
00021   if(vpf == NULL){
00022     if(vpd == NULL){
00023       vpolfname = "vpol.dat";
00024     }else{
00025       ostringstream temp;
00026       temp<<vpd<<"/"<<"vpol.dat";
00027       vpolfname = temp.str();
00028     }
00029   } else {
00030     vpolfname = vpf;
00031   }
00032 */
00033   string vpolfname;
00034   if(vpolf.empty()) vpolfname = "vpol.dat";
00035   else vpolfname = vpolf;
00036 
00037   if(! vpold.empty()) { 
00038         cout<<"Directory is \""<<vpold<<"\"."<<endl<<flush;
00039         vpolfname = vpold + "/" + vpolfname;
00040   }
00041 
00042 //  if(vpd != NULL) cout<<"Directory is \""<<vpd<<"\"."<<endl<<flush;
00043   cout<<"File name is \""<<vpolfname<<"\"."<<endl<<flush;
00044 
00045   ReadVacuumPolData(vpolfname);
00046 }
00047 
00048 TVacuumPol::~TVacuumPol(){
00049   delete fsvtr;
00050   delete fsvsr;
00051   delete fsvsi;
00052 }
00053 
00054 void TVacuumPol::ReadVacuumPolData(std::string fname){
00055   ifstream IN(fname.c_str());
00056   if(IN.is_open() == false ){
00057     std::cout<<"Can't read \""<<fname<<"\". Vacuum polarization will be zero."
00058              <<std::endl;
00059     std::cout<<"Probably you should tune VACUUM_POL_DIR or VACUUM_POL_FNAME variables."<<std::endl;
00060     fReadSuccessfullyVP = false;
00061     return;
00062   }
00063 
00064   const int MAX_NP = 20000;
00065   double *s   = new double[MAX_NP];
00066   double *vtr = new double[MAX_NP];
00067   double *vsr = new double[MAX_NP];
00068   double *vsi = new double[MAX_NP];
00069   double *vp  = new double[MAX_NP];
00070 
00071   int np = 0;
00072   while(!IN.eof()){
00073     IN>>s[np]>>vtr[np]>>vsr[np]>>vsi[np]>>vp[np];
00074     string str;
00075     getline(IN,str);
00076     s[np] *= 1e6;
00077     np++;
00078   }
00079   np--;
00080   
00081   double *re_vs = new double[np];
00082   double *im_vs = new double[np];
00083   double *re_vt = new double[np];
00084 
00085   for(int i=0;i<np;i++){
00086     std::complex<double> Pi_s(vsr[i],vsi[i]);
00087     std::complex<double> vs = 1./(1.-Pi_s);
00088     re_vs[i] = std::real(vs);
00089     im_vs[i] = std::imag(vs);
00090 
00091     std::complex<double> Pi_t(vtr[i],0.);
00092     std::complex<double> vt = 1./(1.-Pi_t);
00093     re_vt[i] = std::real(vt);
00094   }
00095 
00096   if(fsvsr) delete fsvsr;
00097   fsvsr = new TRadSpline3("vsr",s,re_vs,np);
00098 
00099   if(fsvsi) delete fsvsi;
00100   fsvsi = new TRadSpline3("vsi",s,im_vs,np);
00101 
00102   if(fsvtr) delete fsvtr;
00103   fsvtr = new TRadSpline3("vtr",s,re_vt,np);
00104 
00105   delete [] re_vs;
00106   delete [] im_vs;
00107   delete [] re_vt;
00108 
00109   delete [] s; 
00110   delete [] vtr; 
00111   delete [] vsr; 
00112   delete [] vsi; 
00113   delete [] vp; 
00114 
00115   fReadSuccessfullyVP = true;
00116 }

Generated on Tue Nov 29 23:12:42 2016 for BOSS_7.0.2 by  doxygen 1.4.7