Beispiel #1
0
void makeControlPlots::Loop()
{
//   In a ROOT session, you can do:
//      Root > .L makeControlPlots.C
//      Root > makeControlPlots t
//      Root > t.GetEntry(12); // Fill t data members with entry number 12
//      Root > t.Show();       // Show values of entry 12
//      Root > t.Show(16);     // Read and show values of entry 16
//      Root > t.Loop();       // Loop on all entries
//

//     This is the loop skeleton where:
//    jentry is the global entry number in the chain
//    ientry is the entry number in the current Tree
//  Note that the argument to GetEntry must be:
//    jentry for TChain::GetEntry
//    ientry for TTree::GetEntry and TBranch::GetEntry
//
//       To read only selected branches, Insert statements like:
// METAHOD1:
//    fChain->SetBranchStatus("*",0);  // disable all branches
//    fChain->SetBranchStatus("branchname",1);  // activate branchname
// METHOD2: replace line
//    fChain->GetEntry(jentry);       //read all branches
//by  b_branchname->GetEntry(ientry); //read only this branch
  if (!intervals)
    return;

   if (fChain == 0) return;

   Long64_t nentries = fChain->GetEntries();
  
   std::vector<variablesToControl> controls;
   int kIntervals=intervals->numberOfIntervals();
   controls.reserve(kIntervals);

   cout<<"creating variables"<<endl;
   for(int iinterval=0;iinterval<kIntervals;iinterval++){	  
   controls[iinterval].reset();
   }


   Long64_t nbytes = 0, nb = 0;
   for (Long64_t jentry=0; jentry<nentries;jentry++) {
      Long64_t ientry = LoadTree(jentry);
      if (ientry < 0) break;
      nb = fChain->GetEntry(jentry);   nbytes += nb;
      // if (Cut(ientry) < 0) continue;
      controls[time_interval-1].counter++;
      int tt=iTT(ieta,iphi,sign);
      int xtal=iXtal(ieta,iphi,sign);
      RMSet=RMSet*errEtCorr_factor;
      RMSetNoCorr=RMSetNoCorr*errEtCorr_factor;
      //Histories by eta ring
      controls[time_interval-1].nhitMean[ieta-1][sign]+=nHits;
      controls[time_interval-1].etSumMean[ieta-1][sign]+=et;
      controls[time_interval-1].etMean[ieta-1][sign]+=et/(float)nHits;
      controls[time_interval-1].etMeanRMS[ieta-1][sign]+=nHits*pow(RMSet,2);
      controls[time_interval-1].etABRatio[ieta-1][sign]+=etB/etA;
      controls[time_interval-1].etABRatioRMS[ieta-1][sign]+=0.05*0.05*(etB/etA)*(etB/etA); //provisional value
      controls[time_interval-1].etMeanNoCorr[ieta-1][sign]+=etNoCorr/(float)nHits;
      controls[time_interval-1].etMeanNoCorrRMS[ieta-1][sign]+=nHits*pow(RMSetNoCorr,2);
      controls[time_interval-1].lcMean[ieta-1][sign]+=lc;
      controls[time_interval-1].lcMeanRMS[ieta-1][sign]+=nHits*pow(RMSlc,2);
      controls[time_interval-1].tlMean[ieta-1][sign]+=TMath::Exp(-1*TMath::Log(lc)/alphaDB(sign,ieta,iphi));
      controls[time_interval-1].tlMeanRMS[ieta-1][sign]+=nHits*pow(RMSlc*alphaDB(sign,ieta,iphi),2); //approximation
      controls[time_interval-1].counterEta[ieta-1][sign]++;

      //Histories by tt
      controls[time_interval-1].nhitTowerMean[tt-1]+=nHits;
      controls[time_interval-1].etSumTowerMeanVsEtRef[tt-1]+=et;
      controls[time_interval-1].etTowerMean[tt-1]+=et/(float)nHits;
      controls[time_interval-1].etTowerMeanRMS[tt-1]+=nHits*pow(RMSet,2);
      controls[time_interval-1].etTowerMeanNoCorr[tt-1]+=etNoCorr/float(nHits);
      controls[time_interval-1].etTowerMeanNoCorrRMS[tt-1]+=nHits*pow(RMSetNoCorr,2);
      controls[time_interval-1].lcTowerMean[tt-1]+=lc;
      controls[time_interval-1].lcTowerMeanRMS[tt-1]+=nHits*pow(RMSlc,2);
      controls[time_interval-1].tlTowerMean[tt-1]+=TMath::Exp(-1*TMath::Log(lc)/alphaDB(sign,ieta,iphi));
      controls[time_interval-1].tlTowerMeanRMS[tt-1]+=nHits*pow(RMSlc*alphaDB(sign,ieta,iphi),2);
      controls[time_interval-1].counterTower[tt-1]++;

      //Histories by xtal
      controls[time_interval-1].nhitXtalMean[xtal-1]+=nHits;
      controls[time_interval-1].etSumXtalMeanVsEtRef[xtal-1]+=et;
      controls[time_interval-1].etXtalMean[xtal-1]+=et/(float)nHits;
      controls[time_interval-1].etXtalMeanRMS[xtal-1]+=nHits*pow(RMSet,2);
      controls[time_interval-1].etXtalMeanNoCorr[xtal-1]+=etNoCorr/(float)nHits;
      controls[time_interval-1].etXtalMeanNoCorrRMS[xtal-1]+=nHits*pow(RMSetNoCorr,2);
      controls[time_interval-1].lcXtalMean[xtal-1]+=lc;
      controls[time_interval-1].lcXtalMeanRMS[xtal-1]+=nHits*pow(RMSlc,2);
      controls[time_interval-1].tlXtalMean[xtal-1]+=TMath::Exp(-1*TMath::Log(lc)/alphaDB(sign,ieta,iphi));
      controls[time_interval-1].tlXtalMeanRMS[xtal-1]+=nHits*pow(RMSlc*alphaDB(sign,ieta,iphi),2);
      controls[time_interval-1].counterXtal[xtal-1]++;
   }

   int counterTotal=0;
   float nInterval[kIntervals];    
   float nIntervalError[kIntervals];    
   //   float nIntervalError[kInterval];
   float etTotal=0;    
   float etTotalNoCorr=0; 

   cout<<"loop ended"<<endl;
   for(int iinterval=0;iinterval<kIntervals;iinterval++){
     if(controls[iinterval].counter!=0){
       for (int i=0;i<kBarlRings;++i)
	 {
	   for(int j=0;j<kSides;++j){
	     controls[iinterval].etSumMean[i][j]=controls[iinterval].etSumMean[i][j]/controls[iinterval].counterEta[i][j];
	     controls[iinterval].etMean[i][j]=controls[iinterval].etMean[i][j]/controls[iinterval].counterEta[i][j];
	     controls[iinterval].etMeanRMS[i][j]=sqrt(controls[iinterval].etMeanRMS[i][j])/(controls[iinterval].nhitMean[i][j]);// i want eerror on mean
	     std::cout << "i " << i << " j " << j << " etMean " << controls[iinterval].etMean[i][j] << " etMeanErr " << controls[iinterval].etMeanRMS[i][j] << std::endl;
	     
	     controls[iinterval].etMeanNoCorr[i][j]= controls[iinterval].etMeanNoCorr[i][j]/controls[iinterval].counterEta[i][j];
	     controls[iinterval].etMeanNoCorrRMS[i][j]= sqrt(controls[iinterval].etMeanNoCorrRMS[i][j])/(controls[iinterval].nhitMean[i][j]);// i want eerror on mean
	     controls[iinterval].etABRatio[i][j]=controls[iinterval].etABRatio[i][j]/controls[iinterval].counterEta[i][j];
	     controls[iinterval].etABRatioRMS[i][j]=sqrt(controls[iinterval].etABRatioRMS[i][j])/sqrt(controls[iinterval].counterEta[i][j]);// i want eerror on mean
	     controls[iinterval].lcMeanRMS[i][j]= sqrt(controls[iinterval].lcMeanRMS[i][j])/(controls[iinterval].nhitMean[i][j]);// i want eerror on mean
	     controls[iinterval].lcMean[i][j]=controls[iinterval].lcMean[i][j]/controls[iinterval].counterEta[i][j];
	     controls[iinterval].tlMeanRMS[i][j]= sqrt(controls[iinterval].tlMeanRMS[i][j])/(controls[iinterval].nhitMean[i][j]);// i want eerror on mean
	     controls[iinterval].tlMean[i][j]=controls[iinterval].tlMean[i][j]/controls[iinterval].counterEta[i][j];
	     controls[iinterval].nhitMean[i][j]=controls[iinterval].nhitMean[i][j]/controls[iinterval].counterEta[i][j];
	   }
	 }
       
       for (int i=0;i<kSM*kTowerPerSM;++i)
	 {
	   controls[iinterval].etSumTowerMeanVsEtRef[i]=controls[iinterval].etSumTowerMeanVsEtRef[i]/controls[iinterval].counterTower[i];
	   controls[iinterval].etTowerMean[i]=controls[iinterval].etTowerMean[i]/controls[iinterval].counterTower[i];
	   controls[iinterval].etTowerMeanRMS[i]=sqrt(controls[iinterval].etTowerMeanRMS[i])/(controls[iinterval].nhitTowerMean[i]);// i want eerror on mean
	   controls[iinterval].etTowerMeanNoCorr[i]= controls[iinterval].etTowerMeanNoCorr[i]/controls[iinterval].counterTower[i];
	   controls[iinterval].etTowerMeanNoCorrRMS[i]= sqrt(controls[iinterval].etTowerMeanNoCorrRMS[i])/(controls[iinterval].nhitTowerMean[i]);// i want eerror on mean
	   controls[iinterval].lcTowerMean[i]=controls[iinterval].lcTowerMean[i]/controls[iinterval].counterTower[i];
	   controls[iinterval].lcTowerMeanRMS[i]= sqrt(controls[iinterval].lcTowerMeanRMS[i])/(controls[iinterval].nhitTowerMean[i]);// i want eerror on mean
	   controls[iinterval].tlTowerMean[i]=controls[iinterval].tlTowerMean[i]/controls[iinterval].counterTower[i];
	   controls[iinterval].tlTowerMeanRMS[i]= sqrt(controls[iinterval].tlTowerMeanRMS[i])/(controls[iinterval].nhitTowerMean[i]);// i want eerror on mean
	   controls[iinterval].nhitTowerMean[i]=controls[iinterval].nhitTowerMean[i]/controls[iinterval].counterTower[i];
	 }
       for (int i=0;i<kSM*kXtalPerSM;++i)
	 {
	   controls[iinterval].etSumXtalMeanVsEtRef[i]=controls[iinterval].etSumXtalMeanVsEtRef[i]/controls[iinterval].counterXtal[i];
	   controls[iinterval].etXtalMean[i]=controls[iinterval].etXtalMean[i]/controls[iinterval].counterXtal[i];
	   controls[iinterval].etXtalMeanRMS[i]=sqrt(controls[iinterval].etXtalMeanRMS[i])/(controls[iinterval].nhitXtalMean[i]);// i want eerror on mean
	   controls[iinterval].etXtalMeanNoCorr[i]= controls[iinterval].etXtalMeanNoCorr[i]/controls[iinterval].counterXtal[i];
	   controls[iinterval].etXtalMeanNoCorrRMS[i]= sqrt(controls[iinterval].etXtalMeanNoCorrRMS[i])/(controls[iinterval].nhitXtalMean[i]);// i want eerror on mean
	   controls[iinterval].lcXtalMean[i]=controls[iinterval].lcXtalMean[i]/controls[iinterval].counterXtal[i];
	   controls[iinterval].lcXtalMeanRMS[i]= sqrt(controls[iinterval].lcXtalMeanRMS[i])/(controls[iinterval].nhitXtalMean[i]);// i want eerror on mean
	   controls[iinterval].tlXtalMean[i]=controls[iinterval].tlXtalMean[i]/controls[iinterval].counterXtal[i];
	   controls[iinterval].tlXtalMeanRMS[i]= sqrt(controls[iinterval].tlXtalMeanRMS[i])/(controls[iinterval].nhitXtalMean[i]);// i want eerror on mean
	   controls[iinterval].nhitXtalMean[i]=controls[iinterval].nhitXtalMean[i]/controls[iinterval].counterXtal[i];
	 }
       nInterval[iinterval]=intervals->intervalTime(iinterval);
       nIntervalError[iinterval]=0.;
       //       nIntervalError[iinterval]=0;
     }
   }


   //Arrays to be used in the graph
   float etSumMeanVsRefArray[kIntervals];
   float etSumMeanVsRefRMSArray[kIntervals];
   float etMeanArray[kIntervals];
   float etMeanRMSArray[kIntervals];
   float etMeanNoCorrArray[kIntervals];
   float etMeanNoCorrRMSArray[kIntervals];
   float etABRatioArray[kIntervals];
   float etABRatioRMSArray[kIntervals];
   float lcMeanArray[kIntervals];
   float lcMeanRMSArray[kIntervals];
   float tlMeanArray[kIntervals];
   float tlMeanRMSArray[kIntervals];
   float nhitMeanArray[kIntervals];
   
   float etSumTowerMeanVsRefArray[kIntervals];
   float etSumTowerMeanVsRefRMSArray[kIntervals];
   float etTowerMeanArray[kIntervals];
   float etTowerMeanRMSArray[kIntervals];
   float etTowerMeanNoCorrArray[kIntervals];
   float etTowerMeanNoCorrRMSArray[kIntervals];
   float lcTowerMeanArray[kIntervals];
   float lcTowerMeanRMSArray[kIntervals];
   float tlTowerMeanArray[kIntervals];
   float tlTowerMeanRMSArray[kIntervals];
   float nhitTowerMeanArray[kIntervals];

   float etSumXtalMeanVsRefArray[kIntervals];
   float etSumXtalMeanVsRefRMSArray[kIntervals];
   float etXtalMeanArray[kIntervals];
   float etXtalMeanRMSArray[kIntervals];
   float etXtalMeanNoCorrArray[kIntervals];
   float etXtalMeanNoCorrRMSArray[kIntervals];
   float lcXtalMeanArray[kIntervals];
   float lcXtalMeanRMSArray[kIntervals];
   float tlXtalMeanArray[kIntervals];
   float tlXtalMeanRMSArray[kIntervals];
   float nhitXtalMeanArray[kIntervals];


   int historyNormalizationInterval=20;
   //   kIntervals=487;

   TFile *outFile=TFile::Open(outFileName+"_etaRing.root","recreate");

   for (int i=0;i<kBarlRings;++i)
     {
       for(int j=0;j<kSides;++j){
	 std::cout << "Creating history for iring " <<  i+1 << "/85" << " side  "<<j+1<<"/2"<<std::endl;
	 float etref=0;
	 float etSumOverRef=0;
	 float etABRatioref=0;
	 float etNoCorrref=0;
	 float lcref=0;
	 float tlref=0;
	 float nhitref=0;
	 int nref=0;
	 
	 for (int iref=-5;iref<6;++iref)
	   {
	     nref++;
	     etSumOverRef+=controls[historyNormalizationInterval+iref].etSumMean[i][j]/((controls[historyNormalizationInterval+iref].etSumMean[2][0]+controls[historyNormalizationInterval+iref].etSumMean[2][1])/2.);
	     etref+=controls[historyNormalizationInterval+iref].etMean[i][j];
	     etNoCorrref+=controls[historyNormalizationInterval+iref].etMeanNoCorr[i][j];
	     etABRatioref+=controls[historyNormalizationInterval+iref].etABRatio[i][j];
	     lcref+=controls[historyNormalizationInterval+iref].lcMean[i][j];
	     tlref+=controls[historyNormalizationInterval+iref].tlMean[i][j];
	     nhitref+=controls[historyNormalizationInterval+iref].nhitMean[i][j];
	   }
	 
	 etSumOverRef=etSumOverRef/nref;
	 etref=etref/nref;
	 etABRatioref=etABRatioref/nref;
	 etNoCorrref=etNoCorrref/nref;
	 lcref=lcref/nref;
	 tlref=tlref/nref;
	 nhitref=nhitref/nref;


	 
	 for(int iinterval=0;iinterval<kIntervals;iinterval++){
	   //	   cout<<controls[iinterval].etMeanNoCorr[i][j]<<" "<<controls[iinterval].etMeanNoCorrRMS[i][j]<<" "<<controls[iinterval].lcMean[i][j]<<" "<<controls[iinterval].lcMeanRMS[i][j]<<endl;
	   //Normalizing to time reference interval
	   float nXtalRing=controls[iinterval].counterEta[i][j];
	   float kFactor=1.;
	   float kFactorAB=1.;
// 	   if (kfactorCorr)
// 	     kFactor=(1+(controls[iinterval].etMean[i][j]/etref-1.)*kfactor_alpha)/(controls[iinterval].etMean[i][j]/etref);
// 	   if (kfactorABCorr)
// 	     kFactorAB=(1+(controls[iinterval].etABRatio[i][j]/etABRatioref-1.)*kfactorAB_alpha)/(controls[iinterval].etABRatio[i][j]/etABRatioref);
	   etSumMeanVsRefArray[iinterval]=1 + (((controls[iinterval].etSumMean[i][j]/((controls[iinterval].etSumMean[2][0]+controls[iinterval].etSumMean[2][1])/2.))/etSumOverRef)-1.)/2.;
 	   etSumMeanVsRefRMSArray[iinterval]=0.;
	   etMeanArray[iinterval]=(controls[iinterval].etMean[i][j]/etref)*kFactor;
	   etMeanRMSArray[iinterval]=(controls[iinterval].etMeanRMS[i][j]/etref)*kFactor;
	   etMeanNoCorrArray[iinterval]=(controls[iinterval].etMeanNoCorr[i][j]/etNoCorrref)*kFactor;
	   etMeanNoCorrRMSArray[iinterval]=(controls[iinterval].etMeanNoCorrRMS[i][j]/(etNoCorrref))*kFactor;
	   etABRatioArray[iinterval]=(controls[iinterval].etABRatio[i][j]/etABRatioref)*kFactorAB;
	   etABRatioRMSArray[iinterval]=(controls[iinterval].etABRatioRMS[i][j]/etABRatioref)*kFactorAB;
	   nhitMeanArray[iinterval]=controls[iinterval].nhitMean[i][j]/nhitref;
	   lcMeanArray[iinterval]=1/(controls[iinterval].lcMean[i][j]/lcref);
	   lcMeanRMSArray[iinterval]=pow(lcref/controls[iinterval].lcMean[i][j],2)*controls[iinterval].lcMeanRMS[i][j];
	   tlMeanArray[iinterval]=controls[iinterval].tlMean[i][j]/tlref;
	   tlMeanRMSArray[iinterval]=controls[iinterval].tlMeanRMS[i][j]/(tlref);
	   //Now normalizing other regions to reference region
	   // 	   if (i!=0)
	   // 	     {
	   // 	       etMeanArray[iinterval]=etMeanArray[i][j][iinterval]/etMeanArray[0][iinterval];
	   // 	       etMeanNoCorrArray[i][j][iinterval]=etMeanNoCorrArray[i][j][iinterval]/etMeanNoCorrArray[0][iinterval];
	   // 	       nhitMeanArray[i][j][iinterval]=nhitMeanArray[i][j][iinterval]/nhitMeanArray[0][iinterval];
	   // 	       lcMeanArray[i][j][iinterval]=lcMeanArray[i][j][iinterval]/lcMeanArray[0][iinterval];
	   // 	     }
	 }
	 
	 TGraph* nhitGraph=new TGraph(kIntervals,nInterval,&nhitMeanArray[0]);
	 TString etaLabel="ieta_";
	 TString sideLabel="_side_";
	 etaLabel+=(i+1);
	 sideLabel+=j;
	 
	 nhitGraph->SetName("nHit_"+etaLabel+sideLabel);
	 nhitGraph->SetTitle("nHit_"+etaLabel+sideLabel);
	 nhitGraph->GetYaxis()->SetTitle("nhit");
	 nhitGraph->GetXaxis()->SetTitle("interval");
	 nhitGraph->Write();
	 delete nhitGraph;


	 TGraphErrors* etSumOverRefGraph=new TGraphErrors(kIntervals,nInterval,&etSumMeanVsRefArray[0],nIntervalError,&etSumMeanVsRefRMSArray[0]);
	 etSumOverRefGraph->SetName("etSumOverRef_"+etaLabel+sideLabel);
	 etSumOverRefGraph->SetTitle("etSumOverRef_"+etaLabel+sideLabel);
	 etSumOverRefGraph->GetYaxis()->SetTitle("<et>");   
	 etSumOverRefGraph->GetXaxis()->SetTitle("interval");
       
	 etSumOverRefGraph->Write();
	 delete etSumOverRefGraph;

	 TGraphErrors* etGraph=new TGraphErrors(kIntervals,nInterval,&etMeanArray[0],nIntervalError,&etMeanRMSArray[0]);
	 etGraph->SetName("et_"+etaLabel+sideLabel);
	 etGraph->SetTitle("et_"+etaLabel+sideLabel);
	 etGraph->GetYaxis()->SetTitle("<et>");   
	 etGraph->GetXaxis()->SetTitle("interval");
       
	 etGraph->Write();
	 delete etGraph;
       
	 TGraphErrors* etNoCorrGraph=new TGraphErrors(kIntervals,nInterval,&etMeanNoCorrArray[0],nIntervalError,&etMeanNoCorrRMSArray[0]);
	 etNoCorrGraph->SetName("etNoCorr_"+etaLabel+sideLabel);
	 etNoCorrGraph->SetTitle("etNoCorr_"+etaLabel+sideLabel);
	 etNoCorrGraph->GetYaxis()->SetTitle("<etNoCorr>");   
	 etNoCorrGraph->GetXaxis()->SetTitle("interval");
       
	 etNoCorrGraph->Write();
	 delete etNoCorrGraph;
       
	 TGraphErrors* etABRatioGraph=new TGraphErrors(kIntervals,nInterval,&etABRatioArray[0],nIntervalError,&etABRatioRMSArray[0]);
	 etABRatioGraph->SetName("etABRatio_"+etaLabel+sideLabel);
	 etABRatioGraph->SetTitle("etABRatio_"+etaLabel+sideLabel);
	 etABRatioGraph->GetYaxis()->SetTitle("<etABRatio>");   
	 etABRatioGraph->GetXaxis()->SetTitle("interval");
       
	 etABRatioGraph->Write();
	 delete etABRatioGraph;

	 TGraphErrors* lcGraph=new TGraphErrors(kIntervals,nInterval,&lcMeanArray[0],nIntervalError,&lcMeanRMSArray[0]);
	 lcGraph->SetName("lc_"+etaLabel+sideLabel);
	 lcGraph->SetTitle("lc_"+etaLabel+sideLabel);
	 lcGraph->GetYaxis()->SetTitle("<tl>");   
	 lcGraph->GetXaxis()->SetTitle("interval");
       
	 lcGraph->Write();
	 delete lcGraph;

	 TGraphErrors* EtNoCorrvsTLGraph=new TGraphErrors((kIntervals-200),&tlMeanArray[200],&etMeanNoCorrArray[200],&tlMeanRMSArray[200],&etMeanNoCorrRMSArray[200]);
	 EtNoCorrvsTLGraph->SetName("EtNoCorrvsTL_"+etaLabel+sideLabel);       
	 EtNoCorrvsTLGraph->SetName("EtNoCorrvsTL_"+etaLabel+sideLabel);       
	 EtNoCorrvsTLGraph->GetYaxis()->SetTitle("<etNoCorr>");   
	 EtNoCorrvsTLGraph->GetXaxis()->SetTitle("<lc>");

	 EtNoCorrvsTLGraph->Write();
	 delete EtNoCorrvsTLGraph;
       }
     }

   outFile->Write();
   outFile->Close();
   outFile=TFile::Open(outFileName+"_itt.root","recreate");
   for (int i=0;i<kSM*kTowerPerSM;++i)
     {
       std::cout << "Creating history for itt " <<  i+1 << "/" << kSM*kTowerPerSM << std::endl;
       float etref=0;
       float etNoCorrref=0;
       float lcref=0;
       float tlref=0;
       float nhitref=0;
       int nref=0;

       for (int iref=-5;iref<6;++iref)
	 {
	   nref++;
	   etref+=controls[historyNormalizationInterval+iref].etTowerMean[i];
	   etNoCorrref+=controls[historyNormalizationInterval+iref].etTowerMeanNoCorr[i];
	   lcref+=controls[historyNormalizationInterval+iref].lcTowerMean[i];
	   tlref+=controls[historyNormalizationInterval+iref].tlTowerMean[i];
	   nhitref+=controls[historyNormalizationInterval+iref].nhitTowerMean[i];
	 }

       etref=etref/nref;
       etNoCorrref=etNoCorrref/nref;
       lcref=lcref/nref;
       tlref=tlref/nref;
       nhitref=nhitref/nref;

       for(int iinterval=0;iinterval<kIntervals;iinterval++){
	 //Normalizing to time reference interval
	 float kFactor=1.;
	 if (kfactorCorr)
	   kFactor=(1+(controls[iinterval].etTowerMean[i]/etref-1.)*kfactor_alpha)/(controls[iinterval].etTowerMean[i]/etref);
	 etTowerMeanArray[iinterval]=(controls[iinterval].etTowerMean[i]/etref)*kFactor;
	 etTowerMeanRMSArray[iinterval]=(controls[iinterval].etTowerMeanRMS[i]/etref)*kFactor;
	 etTowerMeanNoCorrArray[iinterval]=(controls[iinterval].etTowerMeanNoCorr[i]/etNoCorrref)*kFactor;
	 etTowerMeanNoCorrRMSArray[iinterval]=(controls[iinterval].etTowerMeanNoCorrRMS[i]/etNoCorrref)*kFactor;
	 nhitTowerMeanArray[iinterval]=controls[iinterval].nhitTowerMean[i]/nhitref;
	 lcTowerMeanArray[iinterval]=1/(controls[iinterval].lcTowerMean[i]/lcref);
	 lcTowerMeanRMSArray[iinterval]=pow(lcref/controls[iinterval].lcTowerMean[i],2)*controls[iinterval].lcTowerMeanRMS[i];
	 tlTowerMeanArray[iinterval]=controls[iinterval].tlTowerMean[i]/tlref;
	 tlTowerMeanRMSArray[iinterval]=controls[iinterval].tlTowerMeanRMS[i]/(tlref);

	 //Now normalizing other regions to reference region
	 // 	   if (i!=0)
	 // 	     {
	 // 	       etMeanArray[iinterval]=etMeanArray[iinterval]/etMeanArray[0][iinterval];
	 // 	       etMeanNoCorrArray[iinterval]=etMeanNoCorrArray[iinterval]/etMeanNoCorrArray[0][iinterval];
	 // 	       nhitMeanArray[iinterval]=nhitMeanArray[iinterval]/nhitMeanArray[0][iinterval];
	 // 	       lcMeanArray[iinterval]=lcMeanArray[iinterval]/lcMeanArray[0][iinterval];
	 // 	     }
       }
       TGraph* nhitGraph=new TGraph(kIntervals,nInterval,&nhitTowerMeanArray[0]);
       TString etaLabel="itt_";
       etaLabel+=(i+1);
       
       nhitGraph->SetName("nHit_"+etaLabel);
       nhitGraph->SetTitle("nHit_"+etaLabel);
       nhitGraph->GetYaxis()->SetTitle("nhit");
       nhitGraph->GetXaxis()->SetTitle("interval");
       nhitGraph->Write();
       delete nhitGraph;

       TGraphErrors* etGraph=new TGraphErrors(kIntervals,nInterval,&etTowerMeanArray[0],nIntervalError,&etTowerMeanRMSArray[0]);
       etGraph->SetName("et_"+etaLabel);
       etGraph->SetTitle("et_"+etaLabel);
       etGraph->GetYaxis()->SetTitle("<et>/<et ieta=1>");   
       etGraph->GetXaxis()->SetTitle("interval");
       
       etGraph->Write();
       delete etGraph;
       
       TGraphErrors* etNoCorrGraph=new TGraphErrors(kIntervals,nInterval,&etTowerMeanNoCorrArray[0],nIntervalError,&etTowerMeanNoCorrRMSArray[0]);
       etNoCorrGraph->SetName("etNoCorr_"+etaLabel);
	 etNoCorrGraph->SetTitle("etNoCorr_"+etaLabel);
	 etNoCorrGraph->GetYaxis()->SetTitle("<etNoCorr>");   
	 etNoCorrGraph->GetXaxis()->SetTitle("interval");
	 
	 etNoCorrGraph->Write();
	 delete etNoCorrGraph;
	 
	 TGraphErrors* lcGraph=new TGraphErrors(kIntervals,nInterval,&lcTowerMeanArray[0],nIntervalError,&lcTowerMeanRMSArray[0]);
	 lcGraph->SetName("lc_"+etaLabel);
	 lcGraph->SetTitle("lc_"+etaLabel);
	 lcGraph->GetYaxis()->SetTitle("<tl>");   
	 lcGraph->GetXaxis()->SetTitle("interval");
	 
	 lcGraph->Write();
	 delete lcGraph;

	 TGraphErrors* EtNoCorrvsTLGraph=new TGraphErrors((kIntervals-200),&tlTowerMeanArray[200],&etTowerMeanNoCorrArray[200],&tlTowerMeanRMSArray[200],&etTowerMeanNoCorrRMSArray[200]);
	 EtNoCorrvsTLGraph->SetName("EtNoCorrvsTL_"+etaLabel);       
	 EtNoCorrvsTLGraph->SetName("EtNoCorrvsTL_"+etaLabel);       
	 EtNoCorrvsTLGraph->GetYaxis()->SetTitle("<etNoCorr>");   
	 EtNoCorrvsTLGraph->GetXaxis()->SetTitle("<lc>");

	 EtNoCorrvsTLGraph->Write();       
	 delete EtNoCorrvsTLGraph;
       
     }

   outFile->Write();
   outFile->Close();

   outFile=TFile::Open(outFileName+"_ixtal.root","recreate");
   for (int i=0;i<kSM*kXtalPerSM;++i)
     {
       std::cout << "Creating history for ixtal " <<  i+1 << "/" << kSM*kXtalPerSM << std::endl;
       float etref=0;
       float etNoCorrref=0;
       float lcref=0;
       float tlref=0;
       float nhitref=0;
       int nref=0;

       for (int iref=-5;iref<6;++iref)
	 {
	   nref++;
	   etref+=controls[historyNormalizationInterval+iref].etXtalMean[i];
	   etNoCorrref+=controls[historyNormalizationInterval+iref].etXtalMeanNoCorr[i];
	   lcref+=controls[historyNormalizationInterval+iref].lcXtalMean[i];
	   tlref+=controls[historyNormalizationInterval+iref].tlXtalMean[i];
	   nhitref+=controls[historyNormalizationInterval+iref].nhitXtalMean[i];
	 }

       etref=etref/nref;
       etNoCorrref=etNoCorrref/nref;
       lcref=lcref/nref;
       tlref=tlref/nref;
       nhitref=nhitref/nref;

       for(int iinterval=0;iinterval<kIntervals;iinterval++){
	 //Normalizing to time reference interval
	 float kFactor=1.;
	 if (kfactorCorr)
	   kFactor=(1+(controls[iinterval].etXtalMean[i]/etref-1.)*kfactor_alpha)/(controls[iinterval].etXtalMean[i]/etref);
	 etXtalMeanArray[iinterval]=(controls[iinterval].etXtalMean[i]/etref)*kFactor;
	 etXtalMeanRMSArray[iinterval]=(controls[iinterval].etXtalMeanRMS[i]/etref)*kFactor;
	 etXtalMeanNoCorrArray[iinterval]=(controls[iinterval].etXtalMeanNoCorr[i]/etNoCorrref)*kFactor;
	 etXtalMeanNoCorrRMSArray[iinterval]=(controls[iinterval].etXtalMeanNoCorrRMS[i]/etNoCorrref)*kFactor;
	 nhitXtalMeanArray[iinterval]=controls[iinterval].nhitXtalMean[i]/nhitref;
	 lcXtalMeanArray[iinterval]=1/(controls[iinterval].lcXtalMean[i]/lcref);
	 lcXtalMeanRMSArray[iinterval]=pow(lcref/controls[iinterval].lcXtalMean[i],2)*controls[iinterval].lcXtalMeanRMS[i];
	 tlXtalMeanArray[iinterval]=controls[iinterval].tlXtalMean[i]/tlref;
	 tlXtalMeanRMSArray[iinterval]=controls[iinterval].tlXtalMeanRMS[i]/(tlref);

	 //Now normalizing other regions to reference region
	 // 	   if (i!=0)
	 // 	     {
	 // 	       etMeanArray[iinterval]=etMeanArray[iinterval]/etMeanArray[0][iinterval];
	 // 	       etMeanNoCorrArray[iinterval]=etMeanNoCorrArray[iinterval]/etMeanNoCorrArray[0][iinterval];
	 // 	       nhitMeanArray[iinterval]=nhitMeanArray[iinterval]/nhitMeanArray[0][iinterval];
	 // 	       lcMeanArray[iinterval]=lcMeanArray[iinterval]/lcMeanArray[0][iinterval];
	 // 	     }
       }
       TGraph* nhitGraph=new TGraph(kIntervals,nInterval,&nhitXtalMeanArray[0]);
       TString etaLabel="ixtal_";
       etaLabel+=(i+1);
       
       nhitGraph->SetName("nHit_"+etaLabel);
       nhitGraph->SetTitle("nHit_"+etaLabel);
       nhitGraph->GetYaxis()->SetTitle("nhit");
       nhitGraph->GetXaxis()->SetTitle("interval");
       nhitGraph->Write();
       delete nhitGraph;

       TGraphErrors* etGraph=new TGraphErrors(kIntervals,nInterval,&etXtalMeanArray[0],nIntervalError,&etXtalMeanRMSArray[0]);
       etGraph->SetName("et_"+etaLabel);
       etGraph->SetTitle("et_"+etaLabel);
       etGraph->GetYaxis()->SetTitle("<et>/<et ieta=1>");   
       etGraph->GetXaxis()->SetTitle("interval");
       
       etGraph->Write();
       delete etGraph;
       
       TGraphErrors* etNoCorrGraph=new TGraphErrors(kIntervals,nInterval,&etXtalMeanNoCorrArray[0],nIntervalError,&etXtalMeanNoCorrRMSArray[0]);
       etNoCorrGraph->SetName("etNoCorr_"+etaLabel);
       etNoCorrGraph->SetTitle("etNoCorr_"+etaLabel);
       etNoCorrGraph->GetYaxis()->SetTitle("<etNoCorr>");   
       etNoCorrGraph->GetXaxis()->SetTitle("interval");
       
       etNoCorrGraph->Write();
       delete etNoCorrGraph;
	 
	 
	 TGraphErrors* lcGraph=new TGraphErrors(kIntervals,nInterval,&lcXtalMeanArray[0],nIntervalError,&lcXtalMeanRMSArray[0]);
	 lcGraph->SetName("lc_"+etaLabel);
	 lcGraph->SetTitle("lc_"+etaLabel);
	 lcGraph->GetYaxis()->SetTitle("<tl>");   
	 lcGraph->GetXaxis()->SetTitle("interval");
	 
	 lcGraph->Write();
	 delete lcGraph;

	 TGraphErrors* EtNoCorrvsTLGraph=new TGraphErrors((kIntervals-200),&tlXtalMeanArray[200],&etXtalMeanNoCorrArray[200],&tlXtalMeanRMSArray[200],&etXtalMeanNoCorrRMSArray[200]);
	 EtNoCorrvsTLGraph->SetName("EtNoCorrvsTL_"+etaLabel);       
	 EtNoCorrvsTLGraph->SetName("EtNoCorrvsTL_"+etaLabel);       
	 EtNoCorrvsTLGraph->GetYaxis()->SetTitle("<etNoCorr>");   
	 EtNoCorrvsTLGraph->GetXaxis()->SetTitle("<lc>");

	 EtNoCorrvsTLGraph->Write();       
	 delete EtNoCorrvsTLGraph;
       
     }

   outFile->Write();
   outFile->Close();


}
Beispiel #2
0
void doBeamSpotVariations::Loop()
{
//   In a ROOT session, you can do:
//      Root > .L doBeamSpotVariations.C
//      Root > doBeamSpotVariations t
//      Root > t.GetEntry(12); // Fill t data members with entry number 12
//      Root > t.Show();       // Show values of entry 12
//      Root > t.Show(16);     // Read and show values of entry 16
//      Root > t.Loop();       // Loop on all entries
//

//     This is the loop skeleton where:
//    jentry is the global entry number in the chain
//    ientry is the entry number in the current Tree
//  Note that the argument to GetEntry must be:
//    jentry for TChain::GetEntry
//    ientry for TTree::GetEntry and TBranch::GetEntry
//
//       To read only selected branches, Insert statements like:
// METAHOD1:
//    fChain->SetBranchStatus("*",0);  // disable all branches
//    fChain->SetBranchStatus("branchname",1);  // activate branchname
// METHOD2: replace line
//    fChain->GetEntry(jentry);       //read all branches
//by  b_branchname->GetEntry(ientry); //read only this branch
  if (!intervals)
    return;

   if (fChain == 0) return;

   Long64_t nentries = fChain->GetEntries();
  
   std::vector<variablesToControl> controls;
   std::vector<variablesToControl_ee> controls_ee;
   int kIntervals=intervals->numberOfIntervals();
   controls.reserve(kIntervals);
   controls_ee.reserve(kIntervals);
   unsigned long int nHitsEB[kIntervals];
   unsigned long int nHitsEE[kIntervals];

   cout<<"creating variables"<<endl;
   for(int iinterval=0;iinterval<kIntervals;iinterval++){	  
     controls[iinterval].reset();
     controls_ee[iinterval].reset();
     nHitsEB[iinterval]=0;
     nHitsEE[iinterval]=0;
   }


   std::vector<bsInfo> bsInfos;
   bsInfos.reserve(kIntervals);
   for(int iinterval=0;iinterval<kIntervals;iinterval++){	  
     bsInfos[iinterval].reset();
   }
   
   TFile *fbs=TFile::Open(bsInfoFile);
   if (!fbs->IsOpen())
     std::cout << "Cannot open " << bsInfoFile << std::endl;
   TTree* bsInfoTree= (TTree*)fbs->Get("bsFinalTree");

   int timeVar;
   unsigned int nEvents;
   float bsPosVar=0,bsWidVar=0;

   TBranch *b_time=bsInfoTree->GetBranch("time_interval");
   TBranch *b_events=bsInfoTree->GetBranch("nEvents");
   TBranch *b_bsPos=bsInfoTree->GetBranch("bsPos");
   TBranch *b_bsWid=bsInfoTree->GetBranch("bsWid");

   bsInfoTree->SetBranchAddress("time_interval", &timeVar, &b_time);
   bsInfoTree->SetBranchAddress("nEvents", &nEvents, &b_events);
   bsInfoTree->SetBranchAddress("bsPos", &bsPosVar, &b_bsPos);
   bsInfoTree->SetBranchAddress("bsWid", &bsWidVar, &b_bsWid);

   int nentries_bs = bsInfoTree->GetEntries();
   for(int jentry=0;jentry<nentries_bs;++jentry){
     bsInfoTree->GetEntry(jentry);
     bsInfos[timeVar-1].bsPos=bsPosVar;
     bsInfos[timeVar-1].bsWid=bsWidVar;
     bsInfos[timeVar-1].nEvents=nEvents;
   }

   std::cout << "Read beamSpot informations for " << nentries_bs << " intervals " << std::endl;

   std::cout << "Opening eeIndicesMap  " << eeIndicesFile << std::endl;
   TFile *fee=TFile::Open(eeIndicesFile);
   if (!fee->IsOpen())
     std::cout << "Cannot open " << eeIndicesFile << std::endl;
   TTree* eeIndicesTree= (TTree*)fee->Get("eeIndices");
   
   int ixVar,iyVar,signVar,iringVar,ixtalVar,iSCVar,iLMVar;
   TBranch *b_ix=eeIndicesTree->GetBranch("ix");
   TBranch *b_iy=eeIndicesTree->GetBranch("iy");
   TBranch *b_sig=eeIndicesTree->GetBranch("sign");
   TBranch *b_iring=eeIndicesTree->GetBranch("iring");
   TBranch *b_ixtal=eeIndicesTree->GetBranch("ixtal");
   TBranch *b_isc=eeIndicesTree->GetBranch("isc");
   TBranch *b_ilm=eeIndicesTree->GetBranch("ilm");
   
   eeIndicesTree->SetBranchAddress("ix", &ixVar, &b_ix);
   eeIndicesTree->SetBranchAddress("iy", &iyVar, &b_iy);
   eeIndicesTree->SetBranchAddress("sign", &signVar, &b_sig);
   eeIndicesTree->SetBranchAddress("iring", &iringVar, &b_iring);
   eeIndicesTree->SetBranchAddress("ixtal", &ixtalVar, &b_ixtal);
   eeIndicesTree->SetBranchAddress("isc", &iSCVar, &b_isc);
   eeIndicesTree->SetBranchAddress("ilm", &iLMVar, &b_ilm);
   
   int nentries_ee = eeIndicesTree->GetEntries();
   int endcapRings[kEndcWedgesX][kEndcWedgesY][kSides];
   int endcapXtals[kEndcWedgesX][kEndcWedgesY][kSides];
   int endcapSCs[kEndcWedgesX][kEndcWedgesY][kSides];
   int endcapLMs[kEndcWedgesX][kEndcWedgesY][kSides];
   
   for (int isign=0;isign<kSides;++isign)
     for (int ix=0;ix<kEndcWedgesX;++ix)
       for (int iy=0;iy<kEndcWedgesX;++iy)
	 {
	   endcapRings[ix][iy][isign]=-1;
	   endcapXtals[ix][iy][isign]=-1;
	   endcapSCs[ix][iy][isign]=-1;
	   endcapLMs[ix][iy][isign]=-1;
	 }
   
   for(int jentry=0;jentry<nentries_ee;++jentry)
     {
       eeIndicesTree->GetEntry(jentry);
       endcapRings[ixVar-1][iyVar-1][signVar]=iringVar;
       endcapXtals[ixVar-1][iyVar-1][signVar]=ixtalVar;
       endcapSCs[ixVar-1][iyVar-1][signVar]=iSCVar;
       endcapLMs[ixVar-1][iyVar-1][signVar]=iLMVar;
     }

  std::cout << "Read eeIndices for " << nentries_ee << " xtals " << std::endl;

   TF1* bsCorrections[85]; 
   TF1* bsCorrections_ee[kEndcRings]; 

   if (applyBSCorrection)
     {
       std::cout << "Reading beamSpot corrections file " << bsCorrectionFile << std::endl;
       TFile *bsWeights = TFile::Open(bsCorrectionFile);

       //Only for EB at the moment
       for (int iieta=0;iieta<85;++iieta)
	 //    for (int iside=0;iside<2;++iside)
	 {
	   
	   TString name="f_bsAsymm_ieta_";
	   name+=(iieta+1);
	   // 	name+="_side_";
	   // 	name+=iside;
	   std::cout << "Getting " << name << std::endl;
	   bsCorrections[iieta]=(TF1*)bsWeights->Get(name);
	 }

       for (int iieta=0;iieta<kEndcRings;++iieta)
	 //    for (int iside=0;iside<2;++iside)
	 {
	   
	   TString name="f_bsAsymm_ee_iring_";
	   name+=(iieta+1);
	   // 	name+="_side_";
	   // 	name+=iside;
	   std::cout << "Getting " << name << std::endl;
	   bsCorrections_ee[iieta]=(TF1*)bsWeights->Get(name);
	 }
     }

   TF1* lumiCorrections[85]; 
   TF1* lumiCorrections_ee[kEndcRings]; 


   if (applyLumiCorrection)
     {
       std::cout << "Reading lumi corrections file " << bsCorrectionFile << std::endl;
       TFile *bsWeights = TFile::Open(bsCorrectionFile);

       //Only for EB at the moment
       for (int iieta=0;iieta<85;++iieta)
	 //    for (int iside=0;iside<2;++iside)
	 {
	   
	   TString name="f_lumiAsymm_ieta_";
	   name+=(iieta+1);
	   // 	name+="_side_";
	   // 	name+=iside;
	   std::cout << "Getting " << name << std::endl;
	   lumiCorrections[iieta]=(TF1*)bsWeights->Get(name);
	 }

       for (int iieta=0;iieta<kEndcRings;++iieta)
	 //    for (int iside=0;iside<2;++iside)
	 {
	   
	   TString name="f_lumiAsymm_ee_iring_";
	   name+=(iieta+1);
	   // 	name+="_side_";
	   // 	name+=iside;
	   std::cout << "Getting " << name << std::endl;
	   lumiCorrections_ee[iieta]=(TF1*)bsWeights->Get(name);
	 }
       Long64_t nbytes = 0, nb = 0;

       for (Long64_t jentry=0; jentry<nentries;jentry++) {
	 Long64_t ientry = LoadTree(jentry);
	 if (ientry < 0) break;
	 nb = fChain->GetEntry(jentry);   nbytes += nb;
	 // if (Cut(ientry) < 0) continue;
	 //Only EB for the moment
	 
	 if (time_interval>186 && time_interval<242)
	   continue;

	 if (det==0)
	   {
	     nHitsEB[time_interval-1]+=nHits;
	   }
	 else if (det==1)
	   {
	     nHitsEE[time_interval-1]+=nHits;
	   }
       } 
       for(int iinterval=0;iinterval<kIntervals;iinterval++)
	 {	  
	   bsInfos[iinterval].nHitsMeanEB = double(nHitsEB[iinterval])/double(bsInfos[iinterval].nEvents);
	   bsInfos[iinterval].nHitsMeanEE = double(nHitsEE[iinterval])/double(bsInfos[iinterval].nEvents);
	   std::cout << "Interval " << iinterval << " <nHitsEB>: " << bsInfos[iinterval].nHitsMeanEB <<  " <nHitsEE>: " << bsInfos[iinterval].nHitsMeanEE << std::endl; 
	 }
     }
   

   Long64_t nbytes = 0, nb = 0;
   
   for (Long64_t jentry=0; jentry<nentries;jentry++) {
     Long64_t ientry = LoadTree(jentry);
     if (ientry < 0) break;
     nb = fChain->GetEntry(jentry);   nbytes += nb;
     // if (Cut(ientry) < 0) continue;
     //Only EB for the moment
     
     if (time_interval>186 && time_interval<242)
       continue;

     double bsCorr=1.;
     double lumiCorr=1.;
     if (det==0)
       {
	 
	 if (applyBSCorrection)
	   {
	     if (sign>0)
	       bsCorr=bsCorrections[ieta-1]->Eval(bsInfos[time_interval-1].bsPos);
	     else
	       bsCorr=bsCorrections[ieta-1]->Eval(-bsInfos[time_interval-1].bsPos);
	     // 	  if (TMath::Abs(ieta)==1)
	      // 	      std::cout << "time " << time_interval-1 << " bsPos " << bsInfos[time_interval-1].bsPos << " ieta " << ieta << " sign " << sign << " bsCorr " << bsCorr << std::endl;  
	    }

	 if (applyLumiCorrection)
	   {
	       lumiCorr=lumiCorrections[ieta-1]->Eval(bsInfos[time_interval-1].nHitsMeanEB);
	    }
	  //      std::cout << bsCorr << std::endl;

	  et=et/bsCorr;
	  et=et/lumiCorr;
	  
	  controls[time_interval-1].counter++;
	  controls[time_interval-1].totalHits+=nHits;
	  //Histories by eta ring
	  controls[time_interval-1].nhitMean[ieta-1][sign]+=nHits;
	  controls[time_interval-1].etSumMean[ieta-1][sign]+=et;
	  controls[time_interval-1].etSumMeanRMS[ieta-1][sign]+=nHits*pow(RMSet,2);
	  controls[time_interval-1].etMean[ieta-1][sign]+=et/(float)nHits;
	  controls[time_interval-1].etMeanRMS[ieta-1][sign]+=pow(RMSet,2)/(float)nHits;
	  controls[time_interval-1].lcMean[ieta-1][sign]+=lc/(float)nHits;
	  controls[time_interval-1].lcMeanRMS[ieta-1][sign]+=pow(RMSlc,2)/(float)nHits;
	  controls[time_interval-1].tlMean[ieta-1][sign]+=TMath::Exp(-1*TMath::Log(lc)/alphaDB(sign,ieta,iphi));
	  controls[time_interval-1].tlMeanRMS[ieta-1][sign]+=pow(RMSlc*alphaDB(sign,ieta,iphi),2)/(float)nHits; //approximation
	  controls[time_interval-1].counterEta[ieta-1][sign]++;
	}
      else if (det==1)
	{
	  int iring=(endcapRings[ieta-1][iphi-1][sign]);	

	  if (applyBSCorrection)
	    {
	      if (sign>0)
		bsCorr=bsCorrections_ee[iring]->Eval(bsInfos[time_interval-1].bsPos);
	      else
		bsCorr=bsCorrections_ee[iring]->Eval(-bsInfos[time_interval-1].bsPos);
	      // 	  if (TMath::Abs(ieta)==1)
	      // 	      std::cout << "time " << time_interval-1 << " bsPos " << bsInfos[time_interval-1].bsPos << " ieta " << ieta << " sign " << sign << " bsCorr " << bsCorr << std::endl;  
	    }

	 if (applyLumiCorrection)
	   {
	       lumiCorr=lumiCorrections_ee[iring]->Eval(bsInfos[time_interval-1].nHitsMeanEB);
	    }
	  //      std::cout << bsCorr << std::endl;
	  et=et/bsCorr;	  
	  et=et/lumiCorr;	  

	  controls_ee[time_interval-1].counter++;
	  controls_ee[time_interval-1].totalHits+=nHits;
	  //Histories by eta ring
	  controls_ee[time_interval-1].nhitMean[iring][sign]+=nHits;
	  controls_ee[time_interval-1].etSumMean[iring][sign]+=et;
	  controls_ee[time_interval-1].etSumMeanRMS[iring][sign]+=nHits*pow(RMSet,2);
	  controls_ee[time_interval-1].etMean[iring][sign]+=et/(float)nHits;
	  controls_ee[time_interval-1].etMeanRMS[iring][sign]+=pow(RMSet,2)/(float)nHits;
	  controls_ee[time_interval-1].lcMean[iring][sign]+=lc/(float)nHits;
	  controls_ee[time_interval-1].lcMeanRMS[iring][sign]+=pow(RMSlc,2)/(float)nHits;
	  controls_ee[time_interval-1].tlMean[iring][sign]+=TMath::Exp(-1*TMath::Log(lc)/alphaDB(sign,ieta,iphi));
	  controls_ee[time_interval-1].tlMeanRMS[iring][sign]+=pow(RMSlc*alphaDB(sign,ieta,iphi),2)/(float)nHits; //approximation
	  controls_ee[time_interval-1].counterEta[iring][sign]++;
	}
   }

   int counterTotal=0;
   float nInterval[kIntervals];    
   float nIntervalError[kIntervals];    
   //   float nIntervalError[kInterval];
   float etTotal=0;    
   float etTotalNoCorr=0; 

   cout<<"loop ended"<<endl;

   for(int iinterval=0;iinterval<kIntervals;iinterval++){
     if(controls[iinterval].counter!=0){
       controls[iinterval].nHitsMean=(double)controls[iinterval].totalHits/(double)bsInfos[iinterval].nEvents;
       std::cout << "Interval " << iinterval << " <nHitsEBPerEvent> " << controls[iinterval].nHitsMean << std::endl; 
       for (int i=0;i<kBarlRings;++i)
	 {
	   for(int j=0;j<kSides;++j){
	     controls[iinterval].etSumMean[i][j]=controls[iinterval].etSumMean[i][j]/(float)controls[iinterval].counterEta[i][j];
	     controls[iinterval].etSumMeanRMS[i][j]=sqrt(controls[iinterval].etSumMeanRMS[i][j])/(float)controls[iinterval].counterEta[i][j];
	     controls[iinterval].etMean[i][j]=controls[iinterval].etMean[i][j]/(float)controls[iinterval].counterEta[i][j];
	     controls[iinterval].etMeanRMS[i][j]=sqrt(controls[iinterval].etMeanRMS[i][j])/((float)controls[iinterval].counterEta[i][j]);// i want eerror on mean

	     controls[iinterval].lcMeanRMS[i][j]= sqrt(controls[iinterval].lcMeanRMS[i][j])/((float)controls[iinterval].counterEta[i][j]);// i want eerror on mean
	     controls[iinterval].lcMean[i][j]=controls[iinterval].lcMean[i][j]/(float)controls[iinterval].counterEta[i][j];
	     controls[iinterval].tlMeanRMS[i][j]= sqrt(controls[iinterval].tlMeanRMS[i][j])/((float)controls[iinterval].counterEta[i][j]);// i want eerror on mean
	     controls[iinterval].tlMean[i][j]=controls[iinterval].tlMean[i][j]/(float)controls[iinterval].counterEta[i][j];
	     controls[iinterval].nhitMean[i][j]=controls[iinterval].nhitMean[i][j]/(float)controls[iinterval].counterEta[i][j];
	   }
	 }
       nInterval[iinterval]=intervals->intervalTime(iinterval);
       nIntervalError[iinterval]=0.;
     }
     if(controls_ee[iinterval].counter!=0){
       controls_ee[iinterval].nHitsMean=(double)controls_ee[iinterval].totalHits/(double)bsInfos[iinterval].nEvents;
       std::cout << "Interval " << iinterval << " <nHitsEEPerEvent> " << controls_ee[iinterval].nHitsMean << std::endl; 
       for (int i=0;i<kEndcRings;++i)
	 {
	   for(int j=0;j<kSides;++j){
	     controls_ee[iinterval].etSumMean[i][j]=controls_ee[iinterval].etSumMean[i][j]/(float)controls_ee[iinterval].counterEta[i][j];
	     controls_ee[iinterval].etSumMeanRMS[i][j]=sqrt(controls_ee[iinterval].etSumMeanRMS[i][j])/(float)controls_ee[iinterval].counterEta[i][j];
	     controls_ee[iinterval].etMean[i][j]=controls_ee[iinterval].etMean[i][j]/(float)controls_ee[iinterval].counterEta[i][j];
	     controls_ee[iinterval].etMeanRMS[i][j]=sqrt(controls_ee[iinterval].etMeanRMS[i][j])/((float)controls_ee[iinterval].counterEta[i][j]);// i want eerror on mean

	     controls_ee[iinterval].lcMeanRMS[i][j]= sqrt(controls_ee[iinterval].lcMeanRMS[i][j])/((float)controls_ee[iinterval].counterEta[i][j]);// i want eerror on mean
	     controls_ee[iinterval].lcMean[i][j]=controls_ee[iinterval].lcMean[i][j]/(float)controls_ee[iinterval].counterEta[i][j];
	     controls_ee[iinterval].tlMeanRMS[i][j]= sqrt(controls_ee[iinterval].tlMeanRMS[i][j])/((float)controls_ee[iinterval].counterEta[i][j]);// i want eerror on mean
	     controls_ee[iinterval].tlMean[i][j]=controls_ee[iinterval].tlMean[i][j]/(float)controls_ee[iinterval].counterEta[i][j];
	     controls_ee[iinterval].nhitMean[i][j]=controls_ee[iinterval].nhitMean[i][j]/(float)controls_ee[iinterval].counterEta[i][j];
	   }
	 }
     }  
   }
   
   
   TProfile* bsAsymm[85];
   TProfile* lumiAsymm[85];
   TProfile* bsWidAsymm[85];

   TProfile* bsAsymm_ee[kEndcRings];
   TProfile* lumiAsymm_ee[kEndcRings];
   TProfile* bsWidAsymm_ee[kEndcRings];

   for (int i=0;i<85;++i)
     {
	 TString name="bsAsymm_ieta_";
	 name+=(i+1);
	 bsAsymm[i]=new TProfile(name,name,41,-2.05,2.05);
	 name="lumiAsymm_ieta_";
	 name+=(i+1);
	 lumiAsymm[i]=new TProfile(name,name,50,0.,300.);
	 name="bsWidAsymm_ieta_";
	 name+=(i+1);
	 bsWidAsymm[i]=new TProfile(name,name,60,4.,7.);
     }

   for (int i=0;i<kEndcRings;++i)
     {
	 TString name="bsAsymm_ee_iring_";
	 name+=(i+1);
	 bsAsymm_ee[i]=new TProfile(name,name,41,-2.05,2.05);
	 name="lumiAsymm_ee_iring_";
	 name+=(i+1);
	 lumiAsymm_ee[i]=new TProfile(name,name,50,0.,300.);
	 name="bsWidAsymm_ee_iring_";
	 name+=(i+1);
	 bsWidAsymm_ee[i]=new TProfile(name,name,60,4.,7.);
     }

   for(int iinterval=0;iinterval<kIntervals;iinterval++){
     if(controls[iinterval].counter!=0){
       for (int i=0;i<kBarlRings;++i)
         {
	   //	   std::cout << bsInfos[iinterval].bsPos << "," << (controls[iinterval].etSumMean[i][1]-controls[iinterval].etSumMean[i][0])/((controls[iinterval].etSumMean[i][1]+controls[iinterval].etSumMean[i][0])/2.) << std::endl;
	   //	   bsAsymm[i]->Fill(bsInfos[iinterval].bsPos,((controls[iinterval].etSumMean[i][1]-controls[iinterval].etSumMean[i][0])/((controls[iinterval].etSumMean[i][1]+controls[iinterval].etSumMean[i][0])/2.))/2.);
	   bsAsymm[i]->Fill(bsInfos[iinterval].bsPos,((controls[iinterval].etSumMean[i][1])/((controls[iinterval].etSumMean[i][1]+controls[iinterval].etSumMean[i][0])/2.)));
	   lumiAsymm[i]->Fill(controls[iinterval].nHitsMean,((controls[iinterval].etSumMean[i][1])/((controls[iinterval].etSumMean[9][1]+controls[iinterval].etSumMean[9][0])/2.)));
	   bsWidAsymm[i]->Fill(bsInfos[iinterval].bsWid,((controls[iinterval].etSumMean[i][1])/((controls[iinterval].etSumMean[9][1]+controls[iinterval].etSumMean[9][0])/2.)));
	 }
       
       for (int i=0;i<kEndcRings;++i)
         {
	   //	   std::cout << bsInfos[iinterval].bsPos << "," << (controls[iinterval].etSumMean[i][1]-controls[iinterval].etSumMean[i][0])/((controls[iinterval].etSumMean[i][1]+controls[iinterval].etSumMean[i][0])/2.) << std::endl;
	   //	   bsAsymm[i]->Fill(bsInfos[iinterval].bsPos,((controls[iinterval].etSumMean[i][1]-controls[iinterval].etSumMean[i][0])/((controls[iinterval].etSumMean[i][1]+controls[iinterval].etSumMean[i][0])/2.))/2.);

	   std::cout << bsInfos[iinterval].bsPos << "," << ((controls_ee[iinterval].etSumMean[i][1])/((controls_ee[iinterval].etSumMean[i][1]+controls_ee[iinterval].etSumMean[i][0])/2.)) << std::endl;
	   bsAsymm_ee[i]->Fill(bsInfos[iinterval].bsPos,((controls_ee[iinterval].etSumMean[i][1])/((controls_ee[iinterval].etSumMean[i][1]+controls_ee[iinterval].etSumMean[i][0])/2.)));
	   lumiAsymm_ee[i]->Fill(controls[iinterval].nHitsMean,((controls_ee[iinterval].etSumMean[i][1])/((controls[iinterval].etSumMean[9][1]+controls[iinterval].etSumMean[9][0])/2.)));
	   bsWidAsymm_ee[i]->Fill(bsInfos[iinterval].bsWid,((controls_ee[iinterval].etSumMean[i][1])/((controls[iinterval].etSumMean[9][1]+controls[iinterval].etSumMean[9][0])/2.)));
	 }
     }
   }

   TFile *outFile=TFile::Open(outFileName,outFileMode);
   for (int i=0;i<85;++i)
     {
       if (!applyBSCorrection && !applyLumiCorrection)
	 {
	   TString name="f_bsAsymm_ieta_";
	   name+=(i+1);
	   std::cout << name << std::endl;
	   bsAsymm[i]->Fit("pol1");
	   TF1* f=bsAsymm[i]->GetFunction("pol1");
	   TF1* f_corr=(TF1*)f->Clone(name);
	   f_corr->SetParameter(0,1.);
	   //       f_corr->SetParameter(1,f->GetParameter(1));
	   f_corr->Write(name);
	   bsAsymm[i]->Write();
	 }

       if (applyBSCorrection && applyLumiCorrection)
	 {
	   TString name="f_bsWidAsymm_ieta_";
	   name+=(i+1);
	   std::cout << name << std::endl;
	   bsWidAsymm[i]->Fit("pol1","","",4.5,5.2);
	   TF1* f= (TF1*) bsWidAsymm[i]->GetFunction("pol1");
	   TF1* f_corr=(TF1*)f->Clone(name);
	   f_corr->SetParameter(0,(f->GetParameter(0))/(f->GetParameter(0)+5*f->GetParameter(1)));
	   f_corr->SetParameter(1,f->GetParameter(1)/(f->GetParameter(0)+5*f->GetParameter(1)));
	   f_corr->Write(name);
	   bsWidAsymm[i]->Write();
	 }

       if (applyBSCorrection && !applyLumiCorrection)
	 {
	   TString name="f_lumiAsymm_ieta_";
	   name+=(i+1);
	   std::cout << name << std::endl;
	   lumiAsymm[i]->Fit("pol1","","",0.,50.);
	   TF1* f= (TF1*) lumiAsymm[i]->GetFunction("pol1");
	   TF1* f_corr=(TF1*)f->Clone(name);
	   f_corr->SetParameter(0,(f->GetParameter(0))/(f->GetParameter(0)+20*f->GetParameter(1)));
	   f_corr->SetParameter(1,f->GetParameter(1)/(f->GetParameter(0)+20*f->GetParameter(1)));
	   f_corr->Write(name);
	   lumiAsymm[i]->Write();
	 }
     }

   for (int i=0;i<kEndcRings;++i)
     {

       if (!applyBSCorrection && !applyLumiCorrection)
	 {
	   TString name="f_bsAsymm_ee_iring_";
	   name+=(i+1);
	   std::cout << name << std::endl;
	   bsAsymm_ee[i]->Fit("pol1");
	   TF1* f=bsAsymm_ee[i]->GetFunction("pol1");
	   TF1* f_corr=(TF1*)f->Clone(name);
	   f_corr->SetParameter(0,1.);
	   //       f_corr->SetParameter(1,f->GetParameter(1));
	   f_corr->Write(name);
	   bsAsymm_ee[i]->Write();
	 }

       if (applyBSCorrection && applyLumiCorrection)
	 {
	   TString name="f_bsWidAsymm_ee_iring_";
	   name+=(i+1);
	   std::cout << name << std::endl;
	   bsWidAsymm_ee[i]->Fit("pol1","","",4.5,5.2);
	   TF1* f= (TF1*) bsWidAsymm_ee[i]->GetFunction("pol1");
	   TF1* f_corr=(TF1*)f->Clone(name);
	   f_corr->SetParameter(0,(f->GetParameter(0))/(f->GetParameter(0)+5*f->GetParameter(1)));
	   f_corr->SetParameter(1,f->GetParameter(1)/(f->GetParameter(0)+5*f->GetParameter(1)));
	   f_corr->Write(name);
	   bsWidAsymm_ee[i]->Write();
	 }

       if (applyBSCorrection && !applyLumiCorrection)
	 {
	   TString name="f_lumiAsymm_ee_iring_";
	   name+=(i+1);
	   std::cout << name << std::endl;
	   lumiAsymm_ee[i]->Fit("pol1","","",0.,50.);
	   TF1* f= (TF1*) lumiAsymm_ee[i]->GetFunction("pol1");
	   TF1* f_corr=(TF1*)f->Clone(name);
	   f_corr->SetParameter(0,(f->GetParameter(0))/(f->GetParameter(0)+20*f->GetParameter(1)));
	   f_corr->SetParameter(1,f->GetParameter(1)/(f->GetParameter(0)+20*f->GetParameter(1)));
	   f_corr->Write(name);
	   lumiAsymm_ee[i]->Write();
	 }
     }
   outFile->Write();
   outFile->Close();

   
}