bool DetectorChooser::Readfile(QStringList& list, std::vector<double>& gainlist,  std::vector<double>& corrfactorlist){
//open file for reading
  std::ifstream detfile("detectors.txt",std::ios_base::binary);

  if (!detfile) {
    //complain that file can not be opened
    Saysomething mysay(0,"Error","The file detectors.txt could not be opened \n make sure it is in the executable directory");
    return false;
  }
  std::string detname;
  std::string gainstring;
  std::string corrfactorstring;
  //read line by line
  const char eol=(char)10;

  const char tab='\t';
  while (std::getline(detfile,detname,tab)){
#ifdef COMPONENT_DEBUG
    std::cout <<"detname:"<<detname<<"\n";
#endif
    if (detname.find("%")==std::string::npos){
      //a line without % sign found
      //split myline in tree parts according to name gain and corrfactor

      if (!std::getline(detfile,gainstring,tab)){
      	//error reading gain
       	Saysomething mysay(0,"Error","Error reading gain factor");
        break;
      }
      if(!std::getline(detfile,corrfactorstring,eol)){
      Saysomething mysay(0,"Error","Error reading correlation factor");
	  //error reading corrfactor
      break;
      }
      //add these values to the list
#ifdef COMPONENT_DEBUG
       std::cout <<"detname:"<<detname<<"gainstring"<<gainstring<<"corrfactorstring"<<corrfactorstring<<"\n";
#endif
      char* end;
      const double corrfactor=std::strtod( corrfactorstring.c_str(), &end);
      const double gainfactor=std::strtod( gainstring.c_str(), &end);
      list.append(QString::fromStdString (detname));
      gainlist.push_back(gainfactor);
      corrfactorlist.push_back(corrfactor);
#ifdef COMPONENT_DEBUG
       std::cout <<"detname:"<<detname<<"gain (double)"<<gainfactor<<"corrfactor (double)"<<corrfactor<<"\n";
#endif

    }
    else{
         //a % line was read skip rest of line
         std::getline(detfile,corrfactorstring,eol);
         }

  }
  detfile.close();
  return true; //succes
}
Beispiel #2
0
void alphaBeta(){
 
  char ch1[100];
  char ch2[100];
  char ch3[100];
  char ch4[100];
  char ch5[100];
  char ch6[100];
  char ch7[100];
  char ch8[100];
  double wd1[n_pow][8]={0.};
  double wd2[n_pow][8]={0.};
  double wla1[n_pow][8]={0.};
  double wla2[n_pow][8]={0.};
  double wla3[n_pow][8]={0.};
  double wla4[n_pow][8]={0.};
  string date[n_pow];
  double detRate[n_pow][8]={0.};
  double live[n_pow][8]={0.};

  char ch9[100];
  char ch10[100];
  char ch11[100];
  char ch12[100];
  char ch13[100];
  char ch14[100];
  double reactorRate[n_pow][6]={0.};
  double reactorID[n_pow][6]={0.};
  double goodhour[n_pow][6]={0.};

  double baseline[8][6]={{362.3804, 371.7626, 903.4664, 817.1578, 1353.6177, 1265.3153},
                         {357.9404, 368.4142, 903.3467, 816.8962, 1354.2293, 1265.8861},
                         {1332.4793, 1358.1482, 467.574, 489.5774, 557.5792, 499.2072},
                         {1337.4293, 1362.8763, 472.9709, 495.3458, 558.7073, 501.0714},
                         {1919.6319, 1894.3376, 1533.1804, 1533.6275, 1551.3843, 1524.94},
                         {1917.5188, 1891.9765, 1534.9194, 1535.0322, 1554.7671, 1528.046},
                         {1925.255, 1899.8607, 1538.9301, 1539.4683, 1556.3439, 1530.0787},
                         {1923.1489, 1897.5072, 1540.6667, 1540.8715, 1559.721, 1533.1791}};

  strcpy(ch1, "./detectorDailyRate/AD1DayRate.txt");
  cout<<ch1<<endl;
  ifstream detfile(ch1);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][0]>>live[i][0]>>wd1[i][0]>>wd2[i][0]>>wla1[i][0]>>wla2[i][0]>>wla3[i][0]>>wla4[i][0];
  }  
  detfile.close();

  strcpy(ch2, "./detectorDailyRate/AD2DayRate.txt");
  cout<<ch2<<endl;
  ifstream detfile(ch2);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][1]>>live[i][1]>>wd1[i][1]>>wd2[i][1]>>wla1[i][1]>>wla2[i][1]>>wla3[i][1]>>wla4[i][1];
  }  
  detfile.close();

  strcpy(ch3, "./detectorDailyRate/AD3DayRate.txt");
  cout<<ch3<<endl;
  ifstream detfile(ch3);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][2]>>live[i][2]>>wd1[i][2]>>wd2[i][2]>>wla1[i][2]>>wla2[i][2]>>wla3[i][2]>>wla4[i][2];
  }  
  detfile.close();

  strcpy(ch4, "./detectorDailyRate/AD4DayRate.txt");
  cout<<ch4<<endl;
  ifstream detfile(ch4);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][3]>>live[i][3]>>wd1[i][3]>>wd2[i][3]>>wla1[i][3]>>wla3[i][3]>>wla3[i][3]>>wla4[i][3];
  }  
  detfile.close();

  strcpy(ch5, "./detectorDailyRate/AD5DayRate.txt");
  cout<<ch5<<endl;
  ifstream detfile(ch5);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][4]>>live[i][4]>>wd1[i][4]>>wd2[i][4]>>wla1[i][4]>>wla2[i][4]>>wla3[i][4]>>wla4[i][4];
  }  
  detfile.close();

  strcpy(ch6, "./detectorDailyRate/AD6DayRate.txt");
  cout<<ch6<<endl;
  ifstream detfile(ch6);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][5]>>live[i][5]>>wd1[i][5]>>wd2[i][5]>>wla1[i][5]>>wla2[i][5]>>wla3[i][5]>>wla4[i][5];
  }  
  detfile.close();

  strcpy(ch7, "./detectorDailyRate/AD7DayRate.txt");
  cout<<ch7<<endl;
  ifstream detfile(ch7);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][6]>>live[i][6]>>wd1[i][6]>>wd2[i][6]>>wla1[i][6]>>wla2[i][6]>>wla3[i][6]>>wla4[i][6];
  }  
  detfile.close();

  strcpy(ch8, "./detectorDailyRate/AD8DayRate.txt");
  cout<<ch8<<endl;
  ifstream detfile(ch8);
  for(int i=0; i<n_pow; i++){
    detfile>>date[i]>>detRate[i][7]>>live[i][7]>>wd1[i][7]>>wd2[i][7]>>wla1[i][7]>>wla2[i][7]>>wla3[i][7]>>wla4[i][7];
  }  
  detfile.close();

  strcpy(ch9, "./reactorDailyRate/DayaBayA_rate_p14a.txt");
  cout<<ch9<<endl;
  ifstream reactorfile(ch9);
  for(int i=0; i<n_pow; i++){
    reactorfile>>goodhour[i][0]>>reactorID[i][0]>>reactorRate[i][0];
  }  
  reactorfile.close();

  strcpy(ch10, "./reactorDailyRate/DayaBayB_rate_p14a.txt");
  cout<<ch10<<endl;
  ifstream reactorfile(ch10);
  for(int i=0; i<n_pow; i++){
    reactorfile>>goodhour[i][1]>>reactorID[i][1]>>reactorRate[i][1];
  }  
  reactorfile.close();

  strcpy(ch11, "./reactorDailyRate/LingAoIA_rate_p14a.txt");
  cout<<ch11<<endl;
  ifstream reactorfile(ch11);
  for(int i=0; i<n_pow; i++){
    reactorfile>>goodhour[i][2]>>reactorID[i][2]>>reactorRate[i][2];
  }  
  reactorfile.close();

  strcpy(ch12, "./reactorDailyRate/LingAoIB_rate_p14a.txt");
  cout<<ch12<<endl;
  ifstream reactorfile(ch12);
  for(int i=0; i<n_pow; i++){
    reactorfile>>goodhour[i][3]>>reactorID[i][3]>>reactorRate[i][3];
  }  
  reactorfile.close();

  strcpy(ch13, "./reactorDailyRate/LingAoIIA_rate_p14a.txt");
  cout<<ch13<<endl;
  ifstream reactorfile(ch13);
  for(int i=0; i<n_pow; i++){
    reactorfile>>goodhour[i][4]>>reactorID[i][4]>>reactorRate[i][4];
  }  
  reactorfile.close();

  strcpy(ch14, "./reactorDailyRate/LingAoIIB_rate_p14a.txt");
  cout<<ch14<<endl;
  ifstream reactorfile(ch14);
  for(int i=0; i<n_pow; i++){
    reactorfile>>goodhour[i][5]>>reactorID[i][5]>>reactorRate[i][5];
  }  
  reactorfile.close();

  /*
  strcpy(ch2, "./power_20111224_20120727_newGoodHourweighted.txt");
  cout<<ch2<<endl;
  ifstream powfile(ch2);
  stringstream s;
  for(int i=0; i<217; i++){
    powfile>>pdate[i]>>pd1[i]>>pd2[i]>>pla1[i]>>pla2[i]>>pla3[i]>>pla4[i]; 

    s<<pdate[i].substr(0, pdate[i].find("/"));
    //s>>t1.tm_year;
    s>>month;
    s.clear();

    s<<pdate[i].substr(pdate[i].find("/")+1, pdate[i].rfind("/")-pdate[i].find("/")-1);
    //s>>t1.tm_mon;
    s>>day;
    s.clear();

    s<<pdate[i].substr(pdate[i].rfind("/")+1);
    //s>>t1.tm_mday;
    s>>year;
    s.clear();

    //month = t1.tm_mon;
    //day = t1.tm_mday;
    //year = t1.tm_year;
    fpdate[i] = "20"+year+"-"+month+"-"+day;
  }
  powfile.close(); 

  strcpy(ch3, "./power_20120728_20121018_avg.txt");
  cout<<ch3<<endl;
  ifstream powfile(ch3);
  stringstream s;
  for(int i=217; i<300; i++){
    powfile>>pdate[i]>>pd1[i]>>pd2[i]>>pla1[i]>>pla2[i]>>pla3[i]>>pla4[i]; 

    s<<pdate[i].substr(0, pdate[i].find("/"));
    //s>>t1.tm_year;
    s>>month;
    s.clear();

    s<<pdate[i].substr(pdate[i].find("/")+1, pdate[i].rfind("/")-pdate[i].find("/")-1);
    //s>>t1.tm_mon;
    s>>day;
    s.clear();

    s<<pdate[i].substr(pdate[i].rfind("/")+1);
    //s>>t1.tm_mday;
    s>>year;
    s.clear();

    //month = t1.tm_mon;
    //day = t1.tm_mday;
    //year = t1.tm_year;
    fpdate[i] = "20"+year+"-"+month+"-"+day;
  }
  powfile.close(); 

  strcpy(ch4, "./power_20121019_20131227_goodHourWeighted.txt");
  cout<<ch4<<endl;
  ifstream powfile(ch4);
  stringstream s;
  for(int i=300; i<n_pow; i++){
    powfile>>pdate[i]>>pd1[i]>>pd2[i]>>pla1[i]>>pla2[i]>>pla3[i]>>pla4[i]; 

    s<<pdate[i].substr(0, pdate[i].find("/"));
    //s>>t1.tm_year;
    s>>month;
    s.clear();

    s<<pdate[i].substr(pdate[i].find("/")+1, pdate[i].rfind("/")-pdate[i].find("/")-1);
    //s>>t1.tm_mon;
    s>>day;
    s.clear();

    s<<pdate[i].substr(pdate[i].rfind("/")+1);
    //s>>t1.tm_mday;
    s>>year;
    s.clear();

    //month = t1.tm_mon;
    //day = t1.tm_mday;
    //year = t1.tm_year;
    fpdate[i] = "20"+year+"-"+month+"-"+day;
  }
  powfile.close(); 
*/

  /*/////////////////////////////////////////////////////////////////////commented by ZZC on 2014-10-25////////////////////////////////////////////////////////////////
  for(int i=0; i<n_pow; i++){
    //cout<<date[i]<<" "<<detRate[i][5]<<" "<<live[i][5]<<" "<<wd1[i][5]<<" "<<wd2[i][5]<<" "<<wla1[i][5]<<" "<<wla2[i][5]<<" "<<wla3[i][5]<<" "<<wla4[i][5]<<" "<<endl;
    //cout<<i+1<<" "<<goodhour[i][5]<<" "<<reactorID[i][5]<<" "<<reactorRate[i][5]<<endl;
  }

  // f_i = 1/L/L*flux_i*livetime_d
  double fraction[n_pow][8][6]={0};
  double Far1[n_pow]=0;
  double Far2[n_pow]=0;
  double Far3[n_pow]=0;
  double Far4[n_pow]=0;
  double Far[n_pow]=0;
  double A[n_pow]=0;
  double B[n_pow]=0;
  for(int m=0; m<n_pow; m++){
    for(int i=0; i<8; i++)
    {
      for(int j=0; j<6; j++)
      {
          fraction[m][i][j] = 1/baseline[i][j]/baseline[i][j]*reactorRate[m][j]*live[m][i];
   //       fraction[m][i][j] = 1/baseline[i][j]/baseline[i][j]*reactorRate[m][j];
      }
    }
  }

  for(int m=0; m<n_pow; m++){
      for(int j=0; j<6; j++)
      {
        //A1[m] += fraction[m][0][j];
        //A2[m] += fraction[m][1][j];
        A[m] += fraction[m][1][j] + fraction[m][0][j];
        //B1[m] += fraction[m][2][j];
        //B2[m] += fraction[m][3][j];
        B[m] += fraction[m][3][j] + fraction[m][2][j];
        Far1[m] += fraction[m][4][j];
        Far2[m] += fraction[m][5][j];
        Far3[m] += fraction[m][6][j];
        Far4[m] += fraction[m][7][j];
        Far[m] += fraction[m][4][j] + fraction[m][5][j] + fraction[m][6][j] + fraction[m][7][j];
      }
  }

  double temp1[n_pow]={0};
  double temp2[n_pow]={0};
  double temp3[n_pow]={0};
  double temp4[n_pow]={0};
  double tempf[n_pow]={0};
  double temp[n_pow]={0};
  double alpha1[n_pow]={0};
  double beta1[n_pow]={0};
  double alpha2[n_pow]={0};
  double beta2[n_pow]={0};
  double alpha3[n_pow]={0};
  double beta3[n_pow]={0};
  double alpha4[n_pow]={0};
  double beta4[n_pow]={0};
  double alphaf[n_pow]={0};
  double betaf[n_pow]={0};
  
  for(int m=0; m<n_pow; m++)
  { 
    for(int j=0; j<6; j++)
    {
      if(B[m]!=0)
      {
      temp1[m] += (fraction[m][4][j]-Far1[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]))*(fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]));
      temp2[m] += (fraction[m][5][j]-Far2[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]))*(fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]));
      temp3[m] += (fraction[m][6][j]-Far3[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]))*(fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]));
      temp4[m] += (fraction[m][7][j]-Far4[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]))*(fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]));
      tempf[m] += (fraction[m][4][j] + fraction[m][5][j] + fraction[m][6][j] + fraction[m][7][j]-Far[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]))*(fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]));
      temp[m] += (fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]))*(fraction[m][0][j]+fraction[m][1][j]-A[m]/B[m]*(fraction[m][2][j]+fraction[m][3][j]));
      }
      else{
      temp1[m] += 0;
      temp2[m] += 0;
      temp4[m] += 0;
      temp3[m] += 0;
      tempf[m] += 0;
      temp[m] += 0;
      }
      
    }
    alpha1[m] = temp1[m]/temp[m];
    beta1[m] = (Far1[m] - alpha1[m]*A[m])/B[m];
    alpha2[m] = temp2[m]/temp[m];
    beta2[m] = (Far2[m] - alpha2[m]*A[m])/B[m];
    alpha3[m] = temp3[m]/temp[m];
    beta3[m] = (Far3[m] - alpha3[m]*A[m])/B[m];
    alpha4[m] = temp4[m]/temp[m];
    beta4[m] = (Far4[m] - alpha4[m]*A[m])/B[m];
    alphaf[m] = tempf[m]/temp[m];
    betaf[m] = (Far[m] - alphaf[m]*A[m])/B[m];

    cout<<m+1<<" "<<alphaf[m]<<" "<<betaf[m]<<endl;
    //cout<<"day="<<m+1<<" alpha2/alpha1="<<alphaf[m]/alpha1[m]<<" beta2/beta1="<<betaf[m]/beta1[m]<<endl;

  }
  */

  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  /////////////added by ZZC on 2014-10-25///////////////
  //each variable's name starts with "Z_" to avoid  repeat
  //variable used from Weili: reactorRate[n_pow][rector], n_pow, baseline[AD][reactor]
  //we only need to calculate alpha, beta, fraction for 24 time bins.
  //formula used: DocDB 7618 and 9969
  //please add FullTime.root provided by me to your directory before running this macro.
  //please send me the AlphaBeta.root and Fraction.root after running this macro.
  //In case of any question, contact: [email protected]
  
  Double_t Z_WidthOfBin = 86164.09/24.00;// 1 sidereal day = 86164.09 seconds
  Double_t Z_StartTime = 1324678393.80705;//T0, 23/12/2011 - 22:13:13.80705 (UTC), the start time of the fulltime data
  Double_t Z_StartTime_Pow = 1324684800.00;//2011-12-24-00:00:00(UTC),the start time of the power data file.
  const int Z_NumOfBin = 17016;//number of bins.

  Double_t Z_FullTime[8][Z_NumOfBin];
  Double_t Z_FullTime_temp[8];

  Double_t Z_Alpha[24]={0.0};
  Double_t Z_Beta[24]={0.0};
  Double_t Z_Fraction[3][6][24];// Z_Fraction[Hall][Rct][N24] = \sum_{AD}{Flux[Rct]*DAQLivetime[AD]/L[AD][Rct]^2}
  memset(Z_Fraction,0.0,sizeof(Z_Fraction));

  Double_t Z_A[24]={0.0};//Z_A[N24] = \sum_i{Z_Fraction[0][i][N24]}
  Double_t Z_B[24]={0.0};//Z_B[N24] = \sum_i{Z_Fraction[1][i][N24]}
  Double_t Z_F[24]={0.0};//Z_F[N24] = \sum_i{Z_Fraction[2][i][N24]}
  
  //read the fulltime file.
  TFile *F_FullTime = new TFile("FullTime.root");
  TTree *Tree_FullTime = (TTree*)F_FullTime->Get("FullTime");
  Tree_FullTime->SetBranchAddress("FullTime",Z_FullTime_temp);

  for(int Bin=0;Bin<Z_NumOfBin;Bin++)
  {
	  Tree_FullTime->GetEntry(Bin);
	  for(int Det=0;Det<8;Det++)
	  {
		  Z_FullTime[Det][Bin] = Z_FullTime_temp[Det];
	  }
  }

  //calculate the event fractions
  for(int Bin=0;Bin<Z_NumOfBin;Bin++)
  {
	  int N24 = Bin%24;
	  int N_Day = int((Bin*Z_WidthOfBin + Z_StartTime- Z_StartTime_Pow)/86400.0);

	  if(N_Day<0)
	  {
		  N_Day=0;
	  }
	  if(N_Day>n_pow -1)
	  {
		  N_Day = n_pow-1;
	  }
	  for(int Rct=0;Rct<6;Rct++)
	  {
		  for(int Det=0;Det<2;Det++)
		  {
		  Z_Fraction[0][Rct][N24] += reactorRate[N_Day][Rct]*Z_FullTime[Det][Bin]/pow(baseline[Det][Rct],2.0);
		  }
		  for(int Det=2;Det<4;Det++)
		  {
		  Z_Fraction[1][Rct][N24] += reactorRate[N_Day][Rct]*Z_FullTime[Det][Bin]/pow(baseline[Det][Rct],2.0);
		  }
		  for(int Det=4;Det<8;Det++)
		  {
		  Z_Fraction[2][Rct][N24] += reactorRate[N_Day][Rct]*Z_FullTime[Det][Bin]/pow(baseline[Det][Rct],2.0);
		  }
	  }
  }

  //calculate A,B,F
  for(int Rct=0;Rct<6;Rct++)
  {
	  for(int N24=0;N24<24;N24++)
	  {
		 Z_A[N24] += Z_Fraction[0][Rct][N24];
		 Z_B[N24] += Z_Fraction[1][Rct][N24];
		 Z_F[N24] += Z_Fraction[2][Rct][N24];
	  }
  }
  //calculate alpha, beta
  for(int N24=0;N24<24;N24++)
  {
	  Double_t alpha_Up=0.0;
	  Double_t alpha_Down=0.0;
	  for(int Rct=0;Rct<6;Rct++)
	  {
		  alpha_Up += (Z_Fraction[2][Rct][N24] - Z_F[N24]*Z_Fraction[1][Rct][N24]/Z_B[N24])*(Z_Fraction[0][Rct][N24] - Z_A[N24]*Z_Fraction[1][Rct][N24]/Z_B[N24]);
		  alpha_Down += pow(Z_Fraction[0][Rct][N24] - Z_A[N24]*Z_Fraction[1][Rct][N24]/Z_B[N24],2.0);
	  }
	  Z_Alpha[N24] = alpha_Up/alpha_Down;
	  Z_Beta[N24] = (Z_F[N24] - Z_Alpha[N24]*Z_A[N24])/Z_B[N24];
  }
  //save to .root file
  Double_t AlphaBeta_t[2],Fraction_t[3][6];

  TFile  *F_AlphaBeta = new TFile("AlphaBeta.root","recreate");
  TTree *Tree_AlphaBeta = new TTree("AlphaBeta","AlphaBeta");
  Tree_AlphaBeta->Branch("AlphaBeta",AlphaBeta_t,"AlphaBeta_t[2]/D");

  for(int N24=0; N24<24;N24++)
	{
		AlphaBeta_t[0] = Z_Alpha[N24];
		AlphaBeta_t[1] = Z_Beta[N24];
		Tree_AlphaBeta->Fill();
	}
  Tree_AlphaBeta->Write();

  TFile  *F_Fraction = new TFile("Fraction.root","recreate");
  TTree *Tree_Fraction = new TTree("Fraction","Fraction");
  Tree_Fraction->Branch("Fraction",Fraction_t,"Fraction_t[3][6]/D");

  for(int N24=0; N24<24;N24++)
	{
		for(int Hall=0;Hall<3;Hall++)
		{
			for(int Rct=0;Rct<6;Rct++)
			{
				Fraction_t[Hall][Rct] = Z_Fraction[Hall][Rct][N24];
			}
		}
		Tree_Fraction->Fill();
	}
  Tree_Fraction->Write();

  
}