Esempio n. 1
0
File: fitLinear.C Progetto: Y--/root
void makePoints(Int_t n, Double_t *x, Double_t *y, Double_t *e, Int_t p)
{
  Int_t i;
  TRandom r;

  if (p==2) {
    for (i=0; i<n; i++) {
      x[i] = r.Uniform(-2, 2);
      y[i]=TMath::Sin(x[i]) + TMath::Sin(2*x[i]) + r.Gaus()*0.1;
      e[i] = 0.1;
    }
  }
  if (p==3) {
    for (i=0; i<n; i++) {
      x[i] = r.Uniform(-2, 2);
      y[i] = -7 + 2*x[i]*x[i] + x[i]*x[i]*x[i]+ r.Gaus()*0.1;
      e[i] = 0.1;
    }
  }
  if (p==4) {
    for (i=0; i<n; i++) {
      x[i] = r.Uniform(-2, 2);
      y[i]=-2 + TMath::Exp(-x[i]) + r.Gaus()*0.1;
      e[i] = 0.1;
    }
  }
}
Esempio n. 2
0
void multicolor(Int_t isStack=0) {
   TCanvas *c1 = new TCanvas;
   Int_t nbins = 20;
   TH2F *h1 = new TH2F("h1","h1",nbins,-4,4,nbins,-4,4);
   h1->SetFillColor(kBlue);
   TH2F *h2 = new TH2F("h2","h2",nbins,-4,4,nbins,-4,4);
   h2->SetFillColor(kRed);
   TH2F *h3 = new TH2F("h3","h3",nbins,-4,4,nbins,-4,4);
   h3->SetFillColor(kYellow);
   THStack *hs = new THStack("hs","three plots");
   hs->Add(h1);
   hs->Add(h2);
   hs->Add(h3);
   TRandom r;
   Int_t i;
   for (i=0;i<20000;i++) h1->Fill(r.Gaus(),r.Gaus());
   for (i=0;i<200;i++) {
      Int_t ix = (Int_t)r.Uniform(0,nbins);
      Int_t iy = (Int_t)r.Uniform(0,nbins);
      Int_t bin = h1->GetBin(ix,iy);
      Double_t val = h1->GetBinContent(bin);
      if (val <= 0) continue;
      if (!isStack) h1->SetBinContent(bin,0);
      if (r.Rndm() > 0.5) {
         if (!isStack) h2->SetBinContent(bin,0);
         h3->SetBinContent(bin,val);
      } else {
         if (!isStack) h3->SetBinContent(bin,0);
         h2->SetBinContent(bin,val);
      }
   }
   hs->Draw("lego1");
}
Esempio n. 3
0
void write(int n) {

   TRandom R;
   TStopwatch timer;

   TFile f1("mathcoreVectorIO_F.root","RECREATE");

   // create tree
   TTree t1("t1","Tree with new Float LorentzVector");

   XYZTVectorF *v1 = new XYZTVectorF();
   t1.Branch("LV branch","ROOT::Math::XYZTVectorF",&v1);

   timer.Start();
   for (int i = 0; i < n; ++i) {
      double Px = R.Gaus(0,10);
      double Py = R.Gaus(0,10);
      double Pz = R.Gaus(0,10);
      double E  = R.Gaus(100,10);
      v1->SetCoordinates(Px,Py,Pz,E);
      t1.Fill();
   }

   f1.Write();
   timer.Stop();
   std::cout << " Time for new Float Vector " << timer.RealTime() << "  " << timer.CpuTime() << std::endl;
   t1.Print();
}
Esempio n. 4
0
// Throw toy experiments to predict observed yields:
// - Throw nPredictions mean values (prediction) from the background estimates
//   considering their uncertainties
//   - Per prediction, throw nExperiments observed yields from a Poisson
//     distribution with mean value prediction
void ToyExperiments::run(unsigned int nPredictions, unsigned int nExperiments) const {
  std::cout << "Predicting event yields in " << Parameters::nBins() << " bins from " << nPredictions*nExperiments << " toy experiments ...  " << std::flush;

  // Minimal value (in standard deviations) allowed for
  //correlated fluctuation
  const double minCorr = findMinValidRandomNumberForCorrelatedUncertainties();

  // Throw mean values
  for(unsigned int p = 0; p < nPredictions; ++p) {
    // Throw one (normalized) random number for correlated
    // uncertainties that is valid in all bins
    double rCorr = rand_->Gaus(0.,1.);
    while( rCorr <= minCorr ) {
      rCorr = rand_->Gaus(0.,1.);
    }

    // Loop over all bins and get individual predictions
    for(unsigned int bin = 0; bin < Parameters::nBins(); ++bin) {
      double prediction = -1.;
      bool negativePrediction = true;
      while( negativePrediction ) {
	// Throw one (normalized) random number for uncorrelated
	// uncertainties that is valid in this bin only
	double rUncorr = rand_->Gaus(0.,1.);
	
	// Scale the normalized random numbers by the uncertainties' size
	// to obtain variation of yield
	double uncorrVar = rUncorr * uncorrelatedUncerts_.at(bin);
	double corrVar   = rCorr   * correlatedUncerts_.at(bin);
	
	// Add variations to yield
	prediction = meanPredictions_.at(bin) + uncorrVar + corrVar;
	
	// Check if prediction is positive
	if( prediction >= 0. ) {
	  negativePrediction = false;
	}
      }

      // Throw predicted yields from Poisson with
      // this mean
      for(unsigned int e = 0; e < nExperiments; ++e) {
	predictedYields_.at(bin)->Fill(rand_->Poisson(prediction));
      }
    }
  }
  std::cout << "ok" << std::endl;

  for(unsigned int bin = 0; bin < Parameters::nBins(); ++bin) {
    if( predictedYields_.at(bin)->GetBinContent(Parameters::maxYield()+1) > 0 ) {
      std::cerr << "\n\nWARNING: Overflows in yield histograms!" << std::endl;
      std::cerr << "This is probably safe, but better increase Parameters::maxYield.\n\n" << std::endl;
    }
  }
}
Esempio n. 5
0
void th2polyHoneycomb(){
   gStyle->SetCanvasPreferGL(true);
   TH2Poly *hc = new TH2Poly();
   hc->Honeycomb(0,0,.1,25,25);

   TRandom ran;
   for (int i = 0; i<30000; i++) {
      hc->Fill(ran.Gaus(2.,1), ran.Gaus(2.,1));
   }

   hc->Draw("gllego");
}
Esempio n. 6
0
void FitterUtils::initiateParams(int nGenSignalZeroGamma, int nGenSignalOneGamma, int nGenSignalTwoGamma, RooRealVar const& expoConstGen, RooRealVar& nSignal, RooRealVar& nPartReco, 
      RooRealVar& nComb, RooRealVar& fracZero, RooRealVar& fracOne, RooRealVar& expoConst, RooRealVar&  nJpsiLeak, bool constPartReco, RooRealVar const& fracPartRecoSigma)
{
   TRandom rand;
   rand.SetSeed();

   int nGenSignal = nGenSignalZeroGamma + nGenSignalOneGamma + nGenSignalTwoGamma;

   double nGenSignal2;
   double nGenPartReco2;
   if(!constPartReco)
   {
      nGenSignal2 = rand.Uniform(nGenSignal-5*sqrt(nGenSignal), nGenSignal+5*sqrt(nGenSignal));
      nGenPartReco2 = rand.Uniform(nGenPartReco-5*sqrt(nGenPartReco), nGenPartReco+5*sqrt(nGenPartReco));
   }
   if(constPartReco)
   { 
      double nGenSigPartReco( nGenSignal+nGenPartReco );
      double nGenSigPartReco2( rand.Uniform( nGenSigPartReco-5*sqrt(nGenSigPartReco), nGenSigPartReco+5*sqrt(nGenSigPartReco) ) );
      double fracPartReco1( nGenPartReco/(1.*nGenSignal));
      double fracPartReco2( rand.Uniform(fracPartReco1-5*fracPartRecoSigma.getVal(), fracPartReco1+5*fracPartRecoSigma.getVal()) ); 

      nGenPartReco2 = fracPartReco2*nGenSigPartReco2 / (1+fracPartReco2); 
      nGenSignal2 = nGenSigPartReco2 / (1+fracPartReco2); 
   }
   double nGenComb2 = rand.Uniform(nGenComb-5*sqrt(nGenComb), nGenComb+5*sqrt(nGenComb));
   double nGenJpsiLeak2 = rand.Uniform(nGenJpsiLeak-5*sqrt(nGenJpsiLeak), nGenJpsiLeak+5*sqrt(nGenJpsiLeak));


   nSignal.setVal(nGenSignal2);
   nSignal.setRange(TMath::Max(0.,nGenSignal2-10.*sqrt(nGenSignal)) , nGenSignal2+10*sqrt(nGenSignal));

   nPartReco.setVal(nGenPartReco2);
   nPartReco.setRange(TMath::Max(0.,nGenPartReco2-10.*sqrt(nGenPartReco)), nGenPartReco2+10*sqrt(nGenPartReco));


   nComb.setVal(nGenComb2);
   nComb.setRange(TMath::Max(0.,nGenComb2-10.*sqrt(nGenComb)), nGenComb2+10*sqrt(nGenComb));

   nJpsiLeak.setVal(nGenJpsiLeak2);
   nJpsiLeak.setRange(TMath::Max(0., nGenJpsiLeak2-10*sqrt(nGenJpsiLeak)), nGenJpsiLeak2+10*sqrt(nGenJpsiLeak));

   double fracGenZero(nGenSignalZeroGamma/(1.*nGenSignal));
   double fracGenOne(nGenSignalOneGamma/(1.*nGenSignal));

   fracZero.setVal(rand.Gaus(fracGenZero, sqrt(nGenSignalZeroGamma)/(1.*nGenSignal))) ;
   fracZero.setRange(0., 1.);
   fracOne.setVal(rand.Gaus(fracGenOne, sqrt(nGenSignalOneGamma)/(1.*nGenSignal))) ;
   fracOne.setRange(0., 1.);

   expoConst.setVal(rand.Uniform( expoConstGen.getVal() - 5*expoConstGen.getError(), expoConstGen.getVal() + 5*expoConstGen.getError() ) );
   expoConst.setRange( expoConstGen.getVal() - 10*expoConstGen.getError(), expoConstGen.getVal() + 10*expoConstGen.getError() );
}
Esempio n. 7
0
// PValue for finding a local p-value as observed in 'bin' or worse 
void ToyExperiments::printGlobalPValueOfLocalFluctuation(unsigned int bin, unsigned int nExperiments) const {
  std::cout << "Determining global p-value for observed fluctuation in bin " << bin << " from " << nExperiments << " toy experiments ...  " << std::flush;

  // Find the predicted yields that correspond
  // to the local p-value 'localPValue'
  std::vector<unsigned int> limitYields = yields(localPValue(bin,observedYields_.at(bin)));

  TH1* hIsAbovePValue = new TH1D("hIsAbovePValue","",2,0,2);

  const double minCorr = findMinValidRandomNumberForCorrelatedUncertainties();

  for(unsigned int p = 0; p < nExperiments; ++p) {
    bool isAbovePValue = false;
    double rCorr = rand_->Gaus(0.,1.);
    while( rCorr <= minCorr ) {
      rCorr = rand_->Gaus(0.,1.);
    }
    for(unsigned int b = 0; b < Parameters::nBins(); ++b) {
      double prediction = -1.;
      bool negativePrediction = true;
      while( negativePrediction ) {
	double rUncorr = rand_->Gaus(0.,1.);
	double uncorrVar = rUncorr * uncorrelatedUncerts_.at(b);
	double corrVar   = rCorr   * correlatedUncerts_.at(b);
	prediction = meanPredictions_.at(b) + uncorrVar + corrVar;
	if( prediction >= 0. ) {
	  negativePrediction = false;
	}
      }
      double predictedYield = rand_->Poisson(prediction);
      if( predictedYield >= limitYields.at(b) ) {
	isAbovePValue = true;
	break;
      }      
    }
    if( isAbovePValue ) {
      hIsAbovePValue->Fill(1);
    } else {
      hIsAbovePValue->Fill(0);
    }
  }
  std::cout << "ok" << std::endl;

  double lpv      = localPValue(bin,observedYields_.at(bin));
  double gpUncorr = 1. - pow(1.-lpv,Parameters::nBins());
  double gpCorr   = hIsAbovePValue->Integral(2,2)/hIsAbovePValue->Integral(1,2);

  std::cout << "\n\n----- Global p-value for observed fluctuation in bin " << bin << " -----" << std::endl;
  std::cout << "  local p-value                           : " << lpv << " (" << TMath::NormQuantile(1.-lpv) << "sig)" << std::endl;
  std::cout << "  global p-value (without correlations)   : " << gpUncorr  << " (" << TMath::NormQuantile(1.-gpUncorr) << "sig)" << std::endl;
  std::cout << "  global p-value (including correlations) : " << gpCorr  << " (" << TMath::NormQuantile(1.-gpCorr) << "sig)" << std::endl;
}
Esempio n. 8
0
void JEC_fit_Uncertainty(int N)
{
  TF1 *func[1000];
  TFile *inf = new TFile("L3Graphs_test_Icone5.root");
  TGraphErrors *g = (TGraphErrors*)inf->Get("Correction_vs_CaloPt");
  TGraphErrors *vg[1000];
  int i,k;
  double x[20],y[20],ex[20],ey[20];
  double vx[20],vy[20],vex[20],vey[20];
  for(i=0;i<g->GetN();i++)
    {
      g->GetPoint(i,x[i],y[i]);
      ex[i]=g->GetErrorX(i);
      ey[i]=g->GetErrorY(i); 
    }  
  TRandom *rnd = new TRandom();
  rnd->SetSeed(0);
  for(k=0;k<N;k++)
    {
      for(i=0;i<g->GetN();i++)
        {	
          vx[i] = rnd->Gaus(x[i],ex[i]);
          //vx[i] = x[i];
          vy[i] = rnd->Gaus(y[i],ey[i]);
          vex[i] = ex[i];
          vey[i] = ey[i];
        }
      vg[k] = new TGraphErrors(g->GetN(),vx,vy,vex,vey);
      func[k] = new TF1("func","[0]+[1]/(pow(log10(x),[2])+[3])",1,2000);
      func[k]->SetParameters(1,3,6,5);
      vg[k]->Fit(func[k],"RQ");     	
    }
  
  TCanvas *c = new TCanvas("c","c");
  gPad->SetLogx();
  g->SetMarkerStyle(20);
  g->SetMaximum(3.5);
  g->Draw("AP");
  for(k=0;k<N;k++)
    {
      func[k]->SetLineColor(5);
      func[k]->SetLineWidth(1);
      cout<<func[k]->GetChisquare()<<endl;
      vg[k]->SetMarkerColor(2);
      vg[k]->SetLineColor(2);
      vg[k]->SetMarkerStyle(21);
      //if (func[k]->GetChisquare()<0.1)
        //vg[k]->Draw("sameP");
      func[k]->Draw("same");  
    }  	 
}  
Esempio n. 9
0
void candlehisto()
{
   TCanvas *c1 = new TCanvas("c1","Candle Presets",800,600);
   c1->Divide(3,2);

   TRandom *rand = new TRandom();
   TH2I *h1 = new TH2I("h1","Sin",18,0,360,100,-1.5,1.5);
   h1->GetXaxis()->SetTitle("Deg");

   float myRand;
   for (int i = 0; i < 360; i+=10) {
      for (int j = 0; j < 100; j++) {
         myRand = rand->Gaus(sin(i*3.14/180),0.2);
         h1->Fill(i,myRand);
      }
   }

   for (int i = 1; i < 7; i++) {
      c1->cd(i);
      char str[16];
      sprintf(str,"CANDLEX%d",i);
      TH2I * myhist = (TH2I*)h1->DrawCopy(str);
      myhist->SetTitle(str);
   }

   TCanvas *c2 = new TCanvas("c2","Violin Presets",800,300);
   c2->Divide(2,1);

   for (int i = 1; i < 3; i++) {
      c2->cd(i);
      char str[16];
      sprintf(str,"VIOLINX%d",i);
      TH2I * myhist = (TH2I*)h1->DrawCopy(str);
      myhist->SetFillColor(kGray+2);
   }

   TCanvas *c3 = new TCanvas("c3","Playing with candle and violin-options",800,600);
   c3->Divide(3,2);
   char myopt[6][16] = {"1000000","2000000","3000000","1112111","112111","112111"};
   for (int i = 0; i < 6; i++) {
      c3->cd(i+1);
      char str[16];
      sprintf(str, "candlex(%s)",myopt[i]);
      TH2I * myhist = (TH2I*)h1->DrawCopy(str);
      myhist->SetFillColor(kYellow);
      if (i == 4) {
         TH2I * myhist2 = (TH2I*)h1->DrawCopy("candlex(1000000) same");
         myhist2->SetFillColor(kRed);
      }
      if (i == 5) {
         myhist->SetBarWidth(0.2);
         myhist->SetBarOffset(0.25);
         TH2I * myhist2 = (TH2I*)h1->DrawCopy("candlex(2000000) same");
         myhist2->SetFillColor(kRed);
         myhist2->SetBarWidth(0.6);
         myhist2->SetBarOffset(-0.5);
      }
      myhist->SetTitle(str);
   }
}
Esempio n. 10
0
void tv3Write() {
   //creates the Tree
   TVector3 *v = new TVector3();
   TVector3::Class()->IgnoreTObjectStreamer();
   TFile *f = new TFile("v3.root","recreate");
   TTree *T = new TTree("T","v3 Tree");
   T->Branch("v3","TVector3",&v,32000,1);
   TRandom r;
   for (Int_t i=0;i<10000;i++) {
      v->SetXYZ(r.Gaus(0,1),r.Landau(0,1),r.Gaus(100,10));
      T->Fill();
   }
   T->Write();
   T->Print();
   delete f;
}
Esempio n. 11
0
PolyFit::PolyFit(double p0, double p1, double p2, double p3, double sigma) :
  _theTFile(new TFile("test/myFit.root","RECREATE")),
  _sigma(sigma)
{

  // Display parameters for test distribution 

  std::cout << std::endl;
  /*Info <<"Set p0 as "<< p0 << endmsg;
  Info <<"Set p1 as "<< p1 << endmsg;
  Info <<"Set p2 as "<< p2 << endmsg;
  Info <<"Set p3 as "<< p3 << endmsg;
  Info <<"Set sigma as "<< sigma << endmsg;*/
  std::cout <<"Set p0 as "<< p0 << std::endl;
  std::cout <<"Set p1 as "<< p1 << std::endl;
  std::cout <<"Set p2 as "<< p2 << std::endl;
  std::cout <<"Set p3 as "<< p3 << std::endl;
  std::cout <<"Set sigma as "<< sigma << std::endl;

  // Generate test distribution and smear them with a gaussian
  TRandom randomNumber;
  randomNumber.SetSeed(1773);
  for(int i=0; i<1000; i++) {
    double tmpXvalue=static_cast<double>((rand() % 10000 + 1)) / 100;
    double tmpYvalue=randomNumber.Gaus(p0 + p1 * tmpXvalue + p2 * tmpXvalue * tmpXvalue + p3 * tmpXvalue * tmpXvalue * tmpXvalue, _sigma);
    _xValue.push_back(tmpXvalue);
    _yValue.push_back(tmpYvalue);
  }

}
Esempio n. 12
0
void candleplotoption()
{
   TCanvas *c1 = new TCanvas("c1","Candle Presets",1200,800);
   c1->Divide(3,2);

   TRandom *randnum = new TRandom();
   TH2I *h1 = new TH2I("h1","Sin",18,0,360,300,-1.5,1.5);
   h1->GetXaxis()->SetTitle("Deg");
   float myRand;
   for (int i = 0; i < 360; i+=10) {
      for (int j = 0; j < 100; j++) {
         myRand = randnum->Gaus(sin(i*3.14/180),0.2);
         h1->Fill(i,myRand);
      }
   }
   for (int i = 1; i < 7; i++) {
      c1->cd(i);
      char str[16];
      sprintf(str,"candlex%d",i);
      TH2I * myhist = (TH2I*)h1->DrawCopy(str);
      myhist->SetTitle(str);
   }

   TCanvas *c2 = new TCanvas("c2","Candle Individual",1200,800);
   c2->Divide(4,4);
   char myopt[16][8] = {"0","1","11","21","31","30","111","311","301","1111","2321","12111","112111","212111","312111"};
   for (int i = 0; i < 15; i++) {
      c2->cd(i+1);
      char str[16];
      sprintf(str, "candlex(%s)",myopt[i]);
      TH2I * myhist = (TH2I*)h1->DrawCopy(str);
      myhist->SetTitle(str);
   }
}
Esempio n. 13
0
int ConvertEvent::get_electron_numbers(double energy)
{
    if (energy <= 0)
        return 0;
    int n = int(round(random.Gaus(energy / work_function, TMath::Sqrt(fano * energy / work_function))));
    return n > 0 ? n : 0;
}
Esempio n. 14
0
void Interpolation()
{
   ROOT::R::TRInterface &r=ROOT::R::TRInterface::Instance();
   //Creating points
   TRandom rg;
   std::vector<Double_t> x(10),y(10);
   for(int i=0;i<10;i++)
   {
      x[i]=i;
      y[i]=rg.Gaus();
   }

   r["x"]=x;
   r["y"]=y;


   // do plotting only in non-batch mode
   if (!gROOT->IsBatch() )  {

      r<<"dev.new()";//Required to activate new window for plot
      //Plot parameter. Plotting using two rows and one column
      r<<"par(mfrow = c(2,1))";

      //plotting the points
      r<<"plot(x, y, main = 'approx(.) and approxfun(.)')";

      //The function "approx" returns a list with components x and y
      //containing n coordinates which interpolate the given data points according to the method (and rule) desired.
      r<<"points(approx(x, y), col = 2, pch = '*')";
      r<<"points(approx(x, y, method = 'constant'), col = 4, pch = '*')";
   }
   else {
      r << "print('Interpolated points')";
      r << "print(approx(x,y,n=20))";
   }

   //The function "approxfun" returns a function performing (linear or constant)
   //interpolation of the given data.
   //For a given set of x values, this function will return the corresponding interpolated values.
   r<<"f <- approxfun(x, y)";
   //using approxfun with const method
   r<<"fc <- approxfun(x, y, method = 'const')";

   if (!gROOT->IsBatch() ) {
      r<<"curve(f(x), 0, 11, col = 'green2')";
      r<<"points(x, y)";

      r<<"curve(fc(x), 0, 10, col = 'darkblue', add = TRUE)";
      // different interpolation on left and right side :
      r<<"plot(approxfun(x, y, rule = 2:1), 0, 11,col = 'tomato', add = TRUE, lty = 3, lwd = 2)";
      r<<"dev.off()";//Required to close new window for plot
   }
   else {
      r << "x2=x+0.5";
      r << "print('Result of approxfun with default method')";
      r << "print(paste('x = ',x,'  f(x) = ',f(x2)))";
      r << "print('Result of approxfun with const method')";
      r << "print(paste('x = ',x,'  f(x) = ',fc(x2)))";
   }
}
Esempio n. 15
0
void MixingResult::randomise () {//randomizer
  static TRandom donram(42); 
  std::cout << "Randomising " << getName() << "; old value "
	    << measurement;
  double delta = donram.Gaus()*error;
  measurement += delta;
  std::cout << " delta " << delta << " new value " << measurement << std::endl; 
}
Esempio n. 16
0
// Example of a canvas showing two histograms with different scales.
// The second histogram is drawn in a transparent pad
void transpad() {
   TCanvas *c1 = new TCanvas("c1","transparent pad",200,10,700,500);
   TPad *pad1 = new TPad("pad1","",0,0,1,1);
   TPad *pad2 = new TPad("pad2","",0,0,1,1);
   pad2->SetFillStyle(4000); //will be transparent
   pad1->Draw();
   pad1->cd();

   TH1F *h1 = new TH1F("h1","h1",100,-3,3);
   TH1F *h2 = new TH1F("h2","h2",100,-3,3);
   TRandom r;
   for (Int_t i=0;i<100000;i++) {
      Double_t x1 = r.Gaus(-1,0.5);
      Double_t x2 = r.Gaus(1,1.5);
      if (i <1000) h1->Fill(x1);
      h2->Fill(x2);
   }
   h1->Draw();
   pad1->Update(); //this will force the generation of the "stats" box
   TPaveStats *ps1 = (TPaveStats*)h1->GetListOfFunctions()->FindObject("stats");
   ps1->SetX1NDC(0.4); ps1->SetX2NDC(0.6);
   pad1->Modified();
   c1->cd();
   
   //compute the pad range with suitable margins
   Double_t ymin = 0;
   Double_t ymax = 2000;
   Double_t dy = (ymax-ymin)/0.8; //10 per cent margins top and bottom
   Double_t xmin = -3;
   Double_t xmax = 3;
   Double_t dx = (xmax-xmin)/0.8; //10 per cent margins left and right
   pad2->Range(xmin-0.1*dx,ymin-0.1*dy,xmax+0.1*dx,ymax+0.1*dy);
   pad2->Draw();
   pad2->cd();
   h2->SetLineColor(kRed);
   h2->Draw("sames");
   pad2->Update();
   TPaveStats *ps2 = (TPaveStats*)h2->GetListOfFunctions()->FindObject("stats");
   ps2->SetX1NDC(0.65); ps2->SetX2NDC(0.85);
   ps2->SetTextColor(kRed);
   
   // draw axis on the right side of the pad
   TGaxis *axis = new TGaxis(xmax,ymin,xmax,ymax,ymin,ymax,50510,"+L");
   axis->SetLabelColor(kRed);
   axis->Draw();
}
Esempio n. 17
0
void makeDecalibCDB(Int_t firstRun, Int_t lastRun, Float_t decalib = 0.065)
{
  //Generates a random decalibration factors O(1)
  //to be applied in the anchor run simulations with raw:// .
  //If decalib<0, no decalibration generated, all factors=1.
  
  //Run range is [firstRun,lastRun] and gaussian sigma = decalib.
  //Author: Boris Polishchuk.
  
  AliCDBManager::Instance()->SetDefaultStorage("raw://");
  AliCDBManager::Instance()->SetRun(firstRun);

  TString emcPath("PHOS/Calib/EmcGainPedestals");
  AliCDBEntry* entryEmc = AliCDBManager::Instance()->Get(emcPath.Data(),-1);

  AliPHOSEmcCalibData* clb=0;

  if(entryEmc) clb = (AliPHOSEmcCalibData*)entryEmc->GetObject();
  else { printf("CDB entry not found. Exit.\n"); return; }
  
  if(!clb) { printf("Calibration parameters for PHOS EMC not found.\n"); return; }
  
  printf("\t\tEMC calibration object found: FirstRun=%d LastRun=%d Version=%d SubVersion=%d\n",
         entryEmc->GetId().GetFirstRun(), entryEmc->GetId().GetLastRun(),
         entryEmc->GetId().GetVersion(),entryEmc->GetId().GetSubVersion());
  
  
  TRandom rn;
  rn.SetSeed(0); //the seed is set to the current  machine clock

  Float_t adcChannelEmc;

  for(Int_t module=1; module<6; module++) {
    for(Int_t column=1; column<57; column++) {
      for(Int_t row=1; row<65; row++) {

	if(decalib<0.) adcChannelEmc = 1.;
	else
	  adcChannelEmc =rn.Gaus(1.,decalib);

        clb->SetADCchannelEmcDecalib(module,column,row,adcChannelEmc);
      }
    }
  }

  AliCDBManager::Instance()->SetDefaultStorage("local://./");
  AliCDBStorage* storage = AliCDBManager::Instance()->GetDefaultStorage();
  
  AliCDBMetaData *md = new AliCDBMetaData();
  AliCDBId id(emcPath.Data(),firstRun,lastRun);
  storage->Put(clb,id, md);

}
Esempio n. 18
0
TMap* CreateDCSAliasMap()
{
  // Creates a DCS structure
  // The structure is the following:
  //   TMap (key --> value)
  //     <DCSAlias> --> <valueList>
  //     <DCSAlias> is a string
  //     <valueList> is a TObjArray of AliDCSValue
  //     An AliDCSValue consists of timestamp and a value in form of a AliSimpleValue

  // In this example 6 aliases exists: DCSAlias1 ... DCSAlias6
  // Each contains 1000 values randomly generated by TRandom::Gaus + 5*nAlias

  TMap* aliasMap = new TMap;
  aliasMap->SetOwner(1);
  TRandom random;

	FILE *fp = fopen("./DCSValues.txt","r");

	char name[50];
	Float_t val;
	while(!(EOF == fscanf(fp,"%s %f",name,&val))){
		TObjArray* valueSet = new TObjArray;
		valueSet->SetOwner(1);

		TString aliasName=name;
		
		//printf("alias: %s\t\t",aliasName.Data());

		int timeStamp=10;
		
		
		if(aliasName.Contains("HV")) {
			for(int i=0;i<200;i++){
				dcsVal = new AliDCSValue((Float_t) (val+random.Gaus(0,val*0.1)), timeStamp+10*i);
				valueSet->Add(dcsVal);
			}
		} else {
			for(int i=0;i<2;i++){
				AliDCSValue* dcsVal = new AliDCSValue((UInt_t) (val), timeStamp+10*i);
				valueSet->Add(dcsVal);
			}
		}
		
		aliasMap->Add(new TObjString(aliasName), valueSet);

	}
	fclose(fp);
  return aliasMap;
}
Esempio n. 19
0
double write(int n) {



  TRandom R;
  TStopwatch timer;


  TFile f1("mathcoreLV.root","RECREATE");

  // create tree
  TTree t1("t1","Tree with new LorentzVector");

  std::vector<ROOT::Math::XYZTVector>  tracks;
  std::vector<ROOT::Math::XYZTVector> * pTracks = &tracks;
  t1.Branch("tracks","std::vector<ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > >",&pTracks);

  double M = 0.13957;  // set pi+ mass

  timer.Start();
  double sum = 0;
  for (int i = 0; i < n; ++i) {
    int nPart = R.Poisson(5);
    pTracks->clear();
    pTracks->reserve(nPart);
    for (int j = 0; j < nPart; ++j) {
      double px = R.Gaus(0,10);
      double py = R.Gaus(0,10);
      double pt = sqrt(px*px +py*py);
      double eta = R.Uniform(-3,3);
      double phi = R.Uniform(0.0 , 2*TMath::Pi() );
      RhoEtaPhiVector vcyl( pt, eta, phi);
      // set energy
      double E = sqrt( vcyl.R()*vcyl.R() + M*M);
      XYZTVector q( vcyl.X(), vcyl.Y(), vcyl.Z(), E);
      // fill track vector
      pTracks->push_back(q);
      // evaluate sum of components to check
      sum += q.x()+q.y()+q.z()+q.t();
    }
    t1.Fill();
  }

  f1.Write();
  timer.Stop();
  std::cout << " Time for new Vector " << timer.RealTime() << "  " << timer.CpuTime() << std::endl;

  t1.Print();
  return sum;
}
Esempio n. 20
0
//==================================================================
void doIt() 
{
  TFile file("treeClass.root","recreate") ;
  
  TRandom * r = new TRandom() ;

  TTree theTree("treeClass", "A tree with a class") ;

  Event * event = new Event() ;
  
  theTree.Branch("eventBranch", "Event", &event, 16000, 0) ; // No splitting

  for( int ev=0; ev<10; ++ev)
  {
   event->setEventNumber(ev) ;
   std::cout << __LINE__ << "]\t[" << __PRETTY_FUNCTION__ << "]\tEvent: " << ev         << std::endl ;
   for(int i=0; i<(int)r->Gaus(5,2); ++i)
   {
    double t = r->Gaus(50,12) ;
    std::cout << __LINE__ << "]\t[" << __PRETTY_FUNCTION__ << "]\t   t: " << t          << std::endl ;
    event->addTrack(t) ;
   }
   double x = r->Gaus(150,12) ;
   std::cout << __LINE__ << "]\t[" << __PRETTY_FUNCTION__ << "]\t   xw: " << x          << std::endl ;
   event->setX(x) ;
   std::cout << __LINE__ << "]\t[" << __PRETTY_FUNCTION__ << "]\t   xr: " << event->x() << std::endl ;
   theTree.Fill() ;
   event->cleanData() ;
  }
  
//  theTree.BuildIndex("getEventNumber") ;
  
  file.Write() ;
  file.Close() ;
  
  std::cout << __LINE__ << "]\t[" << __PRETTY_FUNCTION__ << "]\tFile treeClass.root written" << std::endl ;
}
Esempio n. 21
0
void roottest() {

    TCanvas *c1 = new TCanvas("c1","demo",200,10,700,500);
    c1->SetFillColor(42);

    TRandom r;
    gRandom->SetSeed();

    TH1F *histo1 = new TH1F("histo1","s",50,0.,50.);
    histo1->SetMarkerStyle(21);
    for (int i=0; i<500; i++) {
        float p1=r.Gaus(10,2);
        histo1->Fill(p1);
    }
    histo1->Draw("");
    c1->SaveAs("c1.gif");
}
Esempio n. 22
0
void treegetval() {
   // create a simple TTree with 5 branches
   Int_t run, evt;
   Float_t x,y,z;
   TTree *T = new TTree("T","test friend trees");
   T->Branch("Run",&run,"Run/I");
   T->Branch("Event",&evt,"Event/I");
   T->Branch("x",&x,"x/F");
   T->Branch("y",&y,"y/F");
   T->Branch("z",&z,"z/F");
   TRandom r;
   for (Int_t i=0;i<10000;i++) {
      if (i < 5000) run = 1;
      else          run = 2;
      evt = i;
      x = r.Gaus(10,1);
      y = r.Gaus(20,2);
      z = r.Landau(2,1);
      T->Fill();
   }

   // Draw with option goff and generate seven variables
   Int_t n = T->Draw("x:y:z:Run:Event:sin(x):cos(x)","Run==1","goff");
   printf("The arrays' dimension is %d\n",n);

   // Retrieve variables 5 et 6
   Double_t *vxs = T->GetVal(5);
   Double_t *vxc = T->GetVal(6);

   // Draw with option goff and generate only one variable
   T->Draw("x","Run==1","goff");

   // Retrieve variable 0
   Double_t *vx  = T->GetVal(0);

   // Create and draw graphs
   TGraph *gs = new TGraph(n,vx,vxs);
   TGraph *gc = new TGraph(n,vx,vxc);
   gs->Draw("ap");
   gc->Draw("p");
}
Esempio n. 23
0
void candleplot() {

   gStyle->SetTimeOffset(0);
   TRandom *rand = new TRandom();
   TDatime *dateBegin = new TDatime(2010,1,1,0,0,0);
   TDatime *dateEnd = new TDatime(2011,1,1,0,0,0);

   TH2I *h1 = new TH2I("h1","Machine A + B",12,dateBegin->Convert(),dateEnd->Convert(),1000,0,1000);
   TH2I *h2 = new TH2I("h2","Machine B",12,dateBegin->Convert(),dateEnd->Convert(),1000,0,1000);

   h1->GetXaxis()->SetTimeDisplay(1);
   h1->GetXaxis()->SetTimeFormat("%m/%y");
   h1->GetXaxis()->SetTitle("Date [month/year]");

   float Rand;
   for (int i = dateBegin->Convert(); i < dateEnd->Convert(); i+=86400*30) {
      for (int j = 0; j < 1000; j++) {
         Rand = rand->Gaus(500+sin(i/10000000.)*100,50); h1->Fill(i,Rand);
         Rand = rand->Gaus(500+sin(i/11000000.)*100,70); h2->Fill(i,Rand);
      }
   }

   h1->SetBarWidth(0.4);
   h1->SetBarOffset(-0.25);
   h1->SetFillColor(kYellow);
   h1->SetFillStyle(1001);

   h2->SetBarWidth(0.4);
   h2->SetBarOffset(0.25);
   h2->SetLineColor(kRed);
   h2->SetFillColor(kGreen);

   TCanvas *c1 = new TCanvas();

   h1->Draw("candle2");
   h2->Draw("candle3 same");

   gPad->BuildLegend(0.78,0.695,0.980,0.935,"","f");
}
Esempio n. 24
0
void CreateParentTree() {
   // create a simple TTree with 5 branches
   // Two branches ("Run" and "Event") will be used to index the Tree
   TFile *f = new TFile("treeparent.root","recreate");
   TTree *T = new TTree("T","test friend trees");
   T->Branch("Run",&Run,"Run/I");
   T->Branch("Event",&Event,"Event/I");
   T->Branch("x",&x,"x/F");
   T->Branch("y",&y,"y/F");
   T->Branch("z",&z,"z/F");
   TRandom r;
   for (Int_t i=0;i<10000;i++) {
      if (i < 5000) Run = 1;
      else          Run = 2;
      Event = i;
      x = r.Gaus(10,1);
      y = r.Gaus(20,2);
      z = r.Landau(2,1);
      T->Fill();
   }
   T->Print();
   T->Write();
   delete f;
}
Esempio n. 25
0
void jetEnergy(Double_t fRMS, Double_t fTowerE, Double_t fZSThreshold, Int_t fIter)
{ 
 Double_t jetEnergySum = 0;
 Int_t counter = 0;
 Int_t sumCounter = 0;

 TRandom *noise = new TRandom;
 
 for(Int_t i = 0; i < fIter; i++){
  counter++;
  
  for(Int_t j = 0; j < 20; j++){
   Double_t energy = fTowerE + noise->Gaus(0., fRMS);
   
   if(energy > fZSThreshold){
    sumCounter++;
    jetEnergySum += energy;
   }
  }
  
  if(counter%1000 == 0) cout<<">> Iteration: "<<counter<<", Jet energy = "<<jetEnergySum/counter<<" MeV\n";
 }
 cout<<">> Sum counter = "<<sumCounter<<"\n";
} 
Esempio n. 26
0
TLorentzVector* applyResolution(TLorentzVector *l_gen){

  if(randomForSmearing.Uniform()<.9){
    double l_Perp =
      l_gen->Perp()+(randomForSmearing.Gaus(0,0.012*1.15*
					    l_gen->Perp()+0.00000*1.15* l_gen->Perp()* l_gen->Perp() ));
    double l_Theta = l_gen->Theta()+(randomForSmearing.Gaus(0,0.001));
    double l_Phi = l_gen->Phi()+(randomForSmearing.Gaus(0,0.001));
  }else{
    double l_Perp =
      l_gen->Perp()+randomForSmearing.Gaus(-l_gen->Perp()*.04,l_gen->Perp()*.08);
    //double l_Perp = l_gen->Perp();
    double l_Theta = l_gen->Theta()+(randomForSmearing.Gaus(0,0.001));
    double l_Phi = l_gen->Phi()+(randomForSmearing.Gaus(0,0.001));
  }
  double l_Px = l_Perp*cos(l_Phi);
  double l_Py = l_Perp*sin(l_Phi);
  double l_Pz = l_Perp/tan(l_Theta);
  double l_E = sqrt(l_Px*l_Px+l_Py*l_Py+l_Pz*l_Pz);

  return (new TLorentzVector( l_Px, l_Py, l_Pz, l_E ));


}
Esempio n. 27
0
int main(int argc, char** argv)
{
  string inputfile;
  string outputfile;
  vector<string> datafiles;

  /* Argument parsing */
  /* ---------------- */
  if( argc != 3 ) {
    Usage();
  } else {
    inputfile = argv[1];
    outputfile = argv[2];

    string extension = inputfile.substr( inputfile.length()-5, 5 );
    /* A single input file */
    if( extension == ".root" )  {
      cout<<"A single input file, "<<inputfile<<endl;
      datafiles.push_back(inputfile);
    }
    /* Input file is a list */
    else if( extension == ".list" )  {
      cout<<"A list of root files, "<<inputfile<<endl;
      /* Grab all the data files in the list */
      ifstream inlist( inputfile.c_str() );
      string line;
      while( getline( inlist, line ) )  {
        datafiles.push_back( line );
      }
    }
    /* Other errors */
    else {
      Usage();
    }
  }

  /* Load the StreamChain and initializa StreamChain Tree reader */
  /* ----------------------------------------------------------- */
  TChain* EventChain = new TChain("Event");

  for( unsigned int i =0; i<datafiles.size(); i++ ) {
    EventChain->Add( datafiles[i].c_str() );
  }
  cout<<datafiles.size()<<" data files will be processed."<<endl;


  // Load the ReadinChain Tree
  // Get the ReadinChain Tree reader
  TR = new TreeReader;
  TR->Init(EventChain);

  /* Begin Job */
  /* --------- */
  if( BeginJob() == 0 ) {
    cout<<"BeginJob failed"<<endl;
    return 0;
  }

  TFile f( outputfile.c_str(), "RECREATE" );
  TH1F* hDistOrg = new TH1F("DistOrg","DistOrg",1000,0,3500);
  TH1F* hDistNew = new TH1F("DistNew","DistNew",1000,0,3500);

  int nTot = 0;
  int nOrg = 0;
  int nNew = 0;

  TRandom rand;
  
  /* The main loop over every stream entries */
  /* --------------------------------------- */
  unsigned int entries = EventChain->GetEntries();
  for( unsigned int entry=0; entry<entries; entry++ )  {
    unsigned int localentry = EventChain->LoadTree(entry);
    int ret = TR->GetEntry( localentry );
    if( ret==0 ) { 
      cout<<"Warning: Read error"<<endl;
    }

    /*** Test each entry here ***/
    if( TR->Fold != 2 ) continue;
    if( TR->E[1] < 1.9988 ) continue;
    if( TR->E[1] > 2.9852 ) continue;
    
    nTot++;
    
    /* Original case */
    {
      /* Useful event left */
      double x0,y0,z0, x1,y1,z1;
      /* IBD primary vertex */
      x0 =  TR->XT[0];
      y0 =  TR->YT[0];
      z0 =  TR->ZT[0];
      /* Gamma dep center */
      x1 =  TR->XCpt[1];
      y1 =  TR->YCpt[1];
      z1 =  TR->ZCpt[1];
      
      /* Step 1, gamma range */

      /* Step 2, rec shrink */
      x0 *= 0.97;
      y0 *= 0.97;
      z0 *= 0.89;
     
      /* Step 3, resolution */
      x0 += rand.Gaus(0, 160);
      y0 += rand.Gaus(0, 160);
      z0 += rand.Gaus(0, 120);

      x1 += rand.Gaus(0, 160);
      y1 += rand.Gaus(0, 160);
      z1 += rand.Gaus(0, 120);
      
      double l = sqrt( pow((x1-x0),2) + pow((y1-y0),2) + pow((z1-z0),2) );
      hDistOrg->Fill(l);
      
      if( l<500 ) nOrg++;
    }

    /* New case */
    {
      /* Useful event left */
      double x0,y0,z0, x1,y1,z1;
      /* IBD primary vertex */
      x0 =  TR->XT[0];
      y0 =  TR->YT[0];
      z0 =  TR->ZT[0];
      /* Gamma dep center */
      x1 =  TR->XCpt[1];
      y1 =  TR->YCpt[1];
      z1 =  TR->ZCpt[1];

      /* Step 1, gamma range */
      x1 = x0 + (x1-x0)* (1-0.007);
      y1 = y0 + (y1-y0)* (1-0.007);
      z1 = z0 + (z1-z0)* (1-0.007);

      /* step 2, rec shrink */
      x0 *= 0.97;
      y0 *= 0.97;
      z0 *= 0.89;
      
      x0 *= (1-0.012);
      y0 *= (1-0.012);
      z0 *= (1-0.016);

      /* Step 3, resolution */
      x0 += rand.Gaus(0, 160 * (1-0.019));
      y0 += rand.Gaus(0, 160 * (1-0.019));
      z0 += rand.Gaus(0, 120 * (1-0.025));

      x1 += rand.Gaus(0, 160 * (1-0.019));
      y1 += rand.Gaus(0, 160 * (1-0.019));
      z1 += rand.Gaus(0, 120 * (1-0.025));

      double l = sqrt( pow((x1-x0),2) + pow((y1-y0),2) + pow((z1-z0),2) );
      hDistNew->Fill(l);

      if( l<500 ) nNew++;
    }

    /***  End of each entry   ***/

  }

  f.Write();

  double EffOrg = nOrg/double(nTot);
  double ErrOrg = sqrt( EffOrg*(1-EffOrg)/double(nTot) );
  
  double EffNew = nNew/double(nTot);
  double ErrNew = sqrt( EffNew*(1-EffNew)/double(nTot) );

  cout<<nTot<<"\t"<<nOrg<<"\t"<<nNew<<endl;
  cout<<EffOrg<<"+/-"<<ErrOrg<<" vs. "<<EffNew<<"+/-"<<ErrNew<<endl;
  

  
  /* End Job */
  /* ------- */
  if( EndJob() == 0 ) {
    cout<<"BeginJob failed"<<endl;
    return 0;
  }

  return 1;
}
Esempio n. 28
0
void RAA_read_eMaxSumCandPlots(
				  Int_t radius = 3
)
{
gStyle->SetOptStat(0);  
  TH1::SetDefaultSumw2();
  TH2::SetDefaultSumw2();
char* etaWidth = (char*)"20_eta_20";
				  Int_t etaLow = 20;
				  Int_t etaHigh = 20;
  // char * etaWidth = (char*)Form("%d_eta_%d",etaLow, etaHigh);
  cout<<"etaWidth = "<<etaWidth<<endl;
  cout<<"Radius = "<<radius<<endl;

  Float_t pfptmin=30;
  Float_t trMaxCut=0.01; 
// to run macro in test mode and not process whole tree, make Short=1
// to read all entries, make Short=0  
  Int_t Short=0;
  long TestEntries=10000;
  long entries;
  
  if(radius==2){
     pfptmin = 30;
  } else if(radius==3){
     pfptmin = 40;
  } else if(radius==4){
     pfptmin = 50;
  }

  bool isSymm = false;
  if(etaLow == etaHigh) isSymm = true;
  
  char * ntuple = (char*)"Pawan"; //  or "Pawan"
  
  // the cut is a 3 step cut based on the different value of the calopt/pfpt - copy the following lines into your loop (with the corresponding branch address set)
  // if(calopt/pfpt <= 0.5 && eMax/Sumcand < 0.05) hGood->Fill();
  // if(calopt/pfpt > 0.5 && calopt/pfpt <= 0.85 && eMax/Sumcand < (18/7 *(Float_t)calopt_1/pfpt_1 - 9/7)) ) hGood->Fill();
  // if(calopt/pfpt > 0.85 & eMax/Sumcand > 0.9) hGood->Fill();
  
  TFile * fData, * fMC;
  TTree * Data_matched, * Data_unmatched, *MC_matched, * MC_unmatched; 
  TCanvas * ceMaxSumcand_jet55[ptSelection], * ceMaxSumcand_jet65[ptSelection], * ceMaxSumcand_jet80[ptSelection];

  if(ntuple == "Pawan"){
    fData = TFile::Open("/mnt/hadoop/cms/store/user/pawan/trees/JetRaaTree_akPu234_PbPb_DATA.root");
    fMC = TFile::Open("/mnt/hadoop/cms/store/user/pawan/trees/JetRaaTree_akPu234_PbPb_MC.root");

    Data_matched = (TTree*)fData->Get(Form("akPu%dJetAnalyzer/jetTree",radius));
    MC_matched = (TTree*)fMC->Get(Form("akPu%dJetAnalyzer/jetTree",radius));
  }
  if(ntuple == "Raghav"){
    // Raghav's ntuples - running to find the difference in spectra between Pawan's and mine.
    fData = TFile::Open(Form("/export/d00/scratch/rkunnawa/rootfiles/PbPb_Data_calo_pf_jet_correlation_deltaR_0p2_akPu%d_20150331.root",radius));
    fMC = TFile::Open(Form("/export/d00/scratch/rkunnawa/rootfiles/PbPb_MC_calo_pf_jet_correlation_deltaR_0p2_akPu%d_20150331.root",radius));

    Data_matched= (TTree*)fData->Get("matchedJets");
    Data_unmatched = (TTree*)fData->Get("unmatchedPFJets");

    MC_matched = (TTree*)fMC->Get("matchedJets");
    MC_unmatched = (TTree*)fMC->Get("unmatchedPFJets");
  }
  
  
//  TH2F* hData_eMaxSumcand_calopfpt_ptselection[ptSelection];
//  TH2F* hMC_eMaxSumcand_calopfpt_ptselection[ptSelection];
//  TH2F* hMC_eMaxSumcand_calopfpt_refptselection[ptSelection];
//  TCanvas * ceMaxSumcand [ptSelection];

  TLine * CutA_1 = new TLine(0.5, 0.05, 0.85, 0.9);
  CutA_1->SetLineStyle(2);
  CutA_1->SetLineWidth(2);
  CutA_1->SetLineColor(kRed);
  TLine * CutA_2 = new TLine(0.85, 0.9, 0.85, 5);
  CutA_2->SetLineStyle(2);
  CutA_2->SetLineWidth(2);
  CutA_2->SetLineColor(kRed);
  TLine * CutA_3 = new TLine(0, 0.05, 0.5, 0.05);
  CutA_3->SetLineStyle(2);
  CutA_3->SetLineWidth(2);
  CutA_3->SetLineColor(kRed);

  TH2F* hData_eMaxSumcand_calopfpt_ptselection_jet55[ptSelection];
  TH2F* hMC_eMaxSumcand_calopfpt_ptselection_jet55[ptSelection];
  TH2F* hMC_eMaxSumcand_calopfpt_refptselection_jet55[ptSelection];
  
  TH2F* hData_eMaxSumcand_calopfpt_ptselection_jet65[ptSelection];
  TH2F* hMC_eMaxSumcand_calopfpt_ptselection_jet65[ptSelection];
  TH2F* hMC_eMaxSumcand_calopfpt_refptselection_jet65[ptSelection];

  TH2F* hData_eMaxSumcand_calopfpt_ptselection_jet80[ptSelection];
  TH2F* hMC_eMaxSumcand_calopfpt_ptselection_jet80[ptSelection];
  TH2F* hMC_eMaxSumcand_calopfpt_refptselection_jet80[ptSelection];  

  TH2F* hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[ptSelection];
  TH2F* hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[ptSelection];
  TH2F* hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet55[ptSelection];
  
  TH2F* hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[ptSelection];
  TH2F* hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[ptSelection];
  TH2F* hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet65[ptSelection];

  TH2F* hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[ptSelection];
  TH2F* hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[ptSelection];
  TH2F* hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet80[ptSelection];  
  for(int a = 0;a<ptSelection; ++a) {

    hData_eMaxSumcand_calopfpt_ptselection_jet55[a] = new TH2F(Form("hData_eMaxSumcand_calopfpt_ptselection_jet55_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_eMaxSumcand_calopfpt_ptselection_jet55[a] = new TH2F(Form("hMC_eMaxSumcand_calopfpt_ptselection_jet55_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_eMaxSumcand_calopfpt_refptselection_jet55[a] = new TH2F(Form("hMC_eMaxSumcand_calopfpt_refptselection_jet55_%d",a),"",100, 0, 2.5, 100, 0, 5);
    
    hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[a] = new TH2F(Form("hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet55_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[a] = new TH2F(Form("hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet55_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet55[a] = new TH2F(Form("hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet55_%d",a),"",100, 0, 2.5, 100, 0, 5);

    hData_eMaxSumcand_calopfpt_ptselection_jet65[a] = new TH2F(Form("hData_eMaxSumcand_calopfpt_ptselection_jet65_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_eMaxSumcand_calopfpt_ptselection_jet65[a] = new TH2F(Form("hMC_eMaxSumcand_calopfpt_ptselection_jet65_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_eMaxSumcand_calopfpt_refptselection_jet65[a] = new TH2F(Form("hMC_eMaxSumcand_calopfpt_refptselection_jet65_%d",a),"",100, 0, 2.5, 100, 0, 5);
    
    hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[a] = new TH2F(Form("hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet65_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[a] = new TH2F(Form("hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet65_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet65[a] = new TH2F(Form("hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet65_%d",a),"",100, 0, 2.5, 100, 0, 5);

    hData_eMaxSumcand_calopfpt_ptselection_jet80[a] = new TH2F(Form("hData_eMaxSumcand_calopfpt_ptselection_jet80_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_eMaxSumcand_calopfpt_ptselection_jet80[a] = new TH2F(Form("hMC_eMaxSumcand_calopfpt_ptselection_jet80_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_eMaxSumcand_calopfpt_refptselection_jet80[a] = new TH2F(Form("hMC_eMaxSumcand_calopfpt_refptselection_jet80_%d",a),"",100, 0, 2.5, 100, 0, 5);
    
    hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[a] = new TH2F(Form("hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet80_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[a] = new TH2F(Form("hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet80_%d",a),"",100, 0, 2.5, 100, 0, 5);
    hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet80[a] = new TH2F(Form("hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet80_%d",a),"",100, 0, 2.5, 100, 0, 5);

  }  
  // 1 - Data, 2 - MC
  Float_t pfpt_1[1000], pfpt_2[1000];
  Float_t pfrefpt_2[1000];
  Float_t calopt_1[1000], calopt_2[1000];
  Int_t npf_1, npf_2;
  Int_t isCaloMatch_1[1000], isCaloMatch_2[1000]; 
  Float_t eMax_1[1000], eMax_2[1000];
  Float_t chMax_1[1000], chMax_2[1000];
  Float_t neMax_1[1000], neMax_2[1000];
  Float_t phMax_1[1000], phMax_2[1000];
  Float_t muMax_1[1000], muMax_2[1000]; 
  Float_t trMax_1[1000], trMax_2[1000];
  Float_t eSum_1[1000], eSum_2[1000];  
  Float_t chSum_1[1000], chSum_2[1000];
//  Float_t trSum_1[1000], trSum_2[1000];
  Float_t phSum_1[1000], phSum_2[1000];
  Float_t neSum_1[1000], neSum_2[1000];
  Float_t muSum_1[1000], muSum_2[1000];
  Int_t jet55_1, jet65_1, jet80_1;
  Int_t jet55_p_1, jet65_p_1, jet80_p_1;
  Int_t jet55_2, jet65_2, jet80_2;
  Int_t jet55_p_2;
  Float_t pthat_2;
  Double_t weight;
  Int_t subid_2[1000];
  Int_t hiBin_1, hiBin_2;
  Float_t eta_1[1000], eta_2[1000];
  Float_t pfrawpt_1[1000], pfrawpt_2[1000]; 
  Int_t nref_2;
  Int_t pfrefidx_2[1000]; //! REF -> PF match index
  Float_t refdrjt_2[1000];

  if(ntuple == "Pawan"){
    Data_matched->SetBranchAddress("npf", &npf_1);
    Data_matched->SetBranchAddress("isCaloMatch", &isCaloMatch_1);
    Data_matched->SetBranchAddress("calopt",&calopt_1);
    Data_matched->SetBranchAddress("pfpt",&pfpt_1);
    Data_matched->SetBranchAddress("eMax",&eMax_1);
    Data_matched->SetBranchAddress("chMax",&chMax_1);
    Data_matched->SetBranchAddress("trMax",&trMax_1);    
    Data_matched->SetBranchAddress("neMax",&neMax_1);
    Data_matched->SetBranchAddress("phMax",&phMax_1);
    Data_matched->SetBranchAddress("muMax",&muMax_1);
    Data_matched->SetBranchAddress("chSum",&chSum_1);
//    Data_matched->SetBranchAddress("trSum",&trSum_1);
    Data_matched->SetBranchAddress("phSum",&phSum_1);
    Data_matched->SetBranchAddress("neSum",&neSum_1);
    Data_matched->SetBranchAddress("muSum",&muSum_1);
    Data_matched->SetBranchAddress("hiBin",&hiBin_1);
    Data_matched->SetBranchAddress("jet55",&jet55_1);
    Data_matched->SetBranchAddress("jet65",&jet65_1);
    Data_matched->SetBranchAddress("jet80",&jet80_1);
    Data_matched->SetBranchAddress("jet55_prescl",&jet55_p_1);
    Data_matched->SetBranchAddress("jet65_prescl",&jet65_p_1);
    Data_matched->SetBranchAddress("jet80_prescl",&jet80_p_1);
    Data_matched->SetBranchAddress("pfeta",&eta_1);
    Data_matched->SetBranchAddress("pfrawpt",&pfrawpt_1);
  }

#if 0
  if(ntuple == "Raghav")  {
    Data_matched->SetBranchAddress("calopt",&calopt_1);
    Data_matched->SetBranchAddress("pfpt",&pfpt_1);
    Data_matched->SetBranchAddress("eMax",&eMax_1);
    Data_matched->SetBranchAddress("chMax",&chMax_1);
    Data_matched->SetBranchAddress("trMax",&trMax_1);
    Data_matched->SetBranchAddress("neMax",&neMax_1);
    Data_matched->SetBranchAddress("phMax",&phMax_1);
    Data_matched->SetBranchAddress("chSum",&chSum_1);
//    Data_matched->SetBranchAddress("trSum",&trSum_1);
    Data_matched->SetBranchAddress("phSum",&phSum_1);
    Data_matched->SetBranchAddress("neSum",&neSum_1);
    Data_matched->SetBranchAddress("muSum",&muSum_1);
    Data_matched->SetBranchAddress("hiBin",&hiBin_1);
    Data_matched->SetBranchAddress("jet55",&jet55_1);
    Data_matched->SetBranchAddress("jet65",&jet65_1);
    Data_matched->SetBranchAddress("jet80",&jet80_1);
    Data_matched->SetBranchAddress("jet55_prescl",&jet55_p_1);
    Data_matched->SetBranchAddress("jet65_prescl",&jet65_p_1);
    Data_matched->SetBranchAddress("jet80_prescl",&jet80_p_1);
    Data_matched->SetBranchAddress("pfeta",&eta_1);
    Data_matched->SetBranchAddress("pfrawpt",&pfrawpt_1);
 
    Data_unmatched->SetBranchAddress("pfpt",&pfpt_1);
    Data_unmatched->SetBranchAddress("eMax",&eMax_1);
    Data_unmatched->SetBranchAddress("chMax",&chMax_1);
    Data_unmatched->SetBranchAddress("trMax",&trMax_1);
    Data_unmatched->SetBranchAddress("chSum",&chSum_1);
//    Data_unmatched->SetBranchAddress("trSum",&trSum_1);
    Data_unmatched->SetBranchAddress("phSum",&phSum_1);
    Data_unmatched->SetBranchAddress("neSum",&neSum_1);
    Data_unmatched->SetBranchAddress("muSum",&muSum_1);
    Data_unmatched->SetBranchAddress("hiBin",&hiBin_1);
    Data_unmatched->SetBranchAddress("jet55",&jet55_1);
    Data_unmatched->SetBranchAddress("jet65",&jet65_1);
    Data_unmatched->SetBranchAddress("jet80",&jet80_1);
    Data_unmatched->SetBranchAddress("jet55_prescl",&jet55_p_1);
    Data_unmatched->SetBranchAddress("jet65_prescl",&jet65_p_1);
    Data_unmatched->SetBranchAddress("jet80_prescl",&jet80_p_1);
    Data_unmatched->SetBranchAddress("pfeta",&eta_1);
    Data_unmatched->SetBranchAddress("pfrawpt",&pfrawpt_1);
  }
#endif

  MC_matched->SetBranchAddress("npf", &npf_2);
  MC_matched->SetBranchAddress("nref", &nref_2);
  MC_matched->SetBranchAddress("pfrefidx",&pfrefidx_2);
  MC_matched->SetBranchAddress("refdrjt",&refdrjt_2);
  MC_matched->SetBranchAddress("pthat", &pthat_2);
  MC_matched->SetBranchAddress("isCaloMatch", &isCaloMatch_2);
  MC_matched->SetBranchAddress("calopt",&calopt_2);
  MC_matched->SetBranchAddress("pfpt",&pfpt_2);
  MC_matched->SetBranchAddress("eMax",&eMax_2);
  MC_matched->SetBranchAddress("chMax",&chMax_2);
  MC_matched->SetBranchAddress("trMax",&trMax_2);
  MC_matched->SetBranchAddress("neMax",&neMax_2);
  MC_matched->SetBranchAddress("phMax",&phMax_2);
  MC_matched->SetBranchAddress("muMax",&muMax_2);  
  MC_matched->SetBranchAddress("chSum",&chSum_2);
//  MC_matched->SetBranchAddress("trSum",&trSum_2);
  MC_matched->SetBranchAddress("phSum",&phSum_2);
  MC_matched->SetBranchAddress("neSum",&neSum_2);
  MC_matched->SetBranchAddress("muSum",&muSum_2);
  MC_matched->SetBranchAddress("hiBin",&hiBin_2);
  if(ntuple == "Pawan")  MC_matched->SetBranchAddress("refpt",&pfrefpt_2);
  //if(ntuple == "Raghav") MC_matched->SetBranchAddress("pfrefpt",&pfrefpt_2);
  MC_matched->SetBranchAddress("jet55",&jet55_2);
  MC_matched->SetBranchAddress("jet65",&jet65_2);
  MC_matched->SetBranchAddress("jet80",&jet80_2);
  MC_matched->SetBranchAddress("weight", &weight);
  MC_matched->SetBranchAddress("subid", &subid_2);
  MC_matched->SetBranchAddress("jet55_prescl",&jet55_p_2);
  MC_matched->SetBranchAddress("pfeta",&eta_2);
  MC_matched->SetBranchAddress("pfrawpt",&pfrawpt_2);

#if 0
  if(ntuple == "Raghav"){
    MC_unmatched->SetBranchAddress("pfpt",&pfpt_2);
    MC_unmatched->SetBranchAddress("eMax",&eMax_2);
    MC_unmatched->SetBranchAddress("chMax",&chMax_2);
    MC_unmatched->SetBranchAddress("trMax",&trMax_2);
    MC_unmatched->SetBranchAddress("chSum",&chSum_2);
//    MC_unmatched->SetBranchAddress("trSum",&trSum_2);
    MC_unmatched->SetBranchAddress("phSum",&phSum_2);
    MC_unmatched->SetBranchAddress("neSum",&neSum_2);
    MC_unmatched->SetBranchAddress("muSum",&muSum_2);
    MC_unmatched->SetBranchAddress("hiBin",&hiBin_2);
    if(ntuple == "Pawan")  MC_unmatched->SetBranchAddress("refpt",&pfrefpt_2);
    if(ntuple == "Raghav") MC_unmatched->SetBranchAddress("pfrefpt",&pfrefpt_2);
    MC_unmatched->SetBranchAddress("jet55",&jet55_2);
    MC_unmatched->SetBranchAddress("jet65",&jet65_2);
    MC_unmatched->SetBranchAddress("jet80",&jet80_2);
    MC_unmatched->SetBranchAddress("weight", & weight);
    MC_unmatched->SetBranchAddress("subid", &subid_2);
    MC_unmatched->SetBranchAddress("jet55_prescl",&jet55_p_2);
    MC_unmatched->SetBranchAddress("pfeta",&eta_2);
    MC_unmatched->SetBranchAddress("pfrawpt",&pfrawpt_2);
  }
#endif
  
  // data loop
// test mode is Short=1
  if(Short==1){
   entries=TestEntries;
  } else {
    entries = Data_matched->GetEntries();
  }    
  //entries = 1000;
  Float_t Jet55_prescl = 2.0475;

  // get the random value for smear systematics, TRandom rnd, value per jet = rnd.Gaus(0,1);
  TRandom rnd; 
  TH1F * htest = new TH1F("htest","",nbins_pt, boundaries_pt);

  cout<<"matched Data ntuple "<<endl;

  for(long nentry = 0; nentry < entries; ++nentry ){

    if(nentry%100000 == 0) cout<<nentry<<"/"<<entries<<endl;
    Data_matched->GetEntry(nentry);

    Int_t cBin = findBin(hiBin_1);
    if(cBin == -1 || cBin >= nbins_cent) continue;

    Float_t wght = 1; 
    // if(etaBoundary == 1.0){ 
    //   if(radius == 2) wght = R2nCorr[cBin][htest->FindBin(pfpt_1)];
    //   if(radius == 3) wght = R3nCorr[cBin][htest->FindBin(pfpt_1)];
    //   if(radius == 4) wght = R4nCorr[cBin][htest->FindBin(pfpt_1)];  
    // }
    
    for(int g = 0; g<npf_1; ++g){ // jet loop

      if(isSymm && TMath::Abs(eta_1[g]) > (Float_t)etaHigh/10) continue;       
      if(!isSymm && (TMath::Abs(eta_1[g]) < (Float_t)etaLow/10 || TMath::Abs(eta_1[g]) > (Float_t)etaHigh/10)) continue;
   
      Float_t Sumcand = chSum_1[g] + phSum_1[g] + neSum_1[g] + muSum_1[g];
//      cout<<"find my ptbin with pfpt_1[g]: "<<pfpt_1[g]<<endl;
      int ptbin=findPtBin(pfpt_1[g]);
 //     cout<<"ptbin is: "<<ptbin<<endl;
      if(ptbin==-1){ continue; }
      if(isCaloMatch_1[g] == 1){

	if(jet55_1 == 1 && jet65_1 == 0 && jet80_1 == 0 ) {
	  hData_eMaxSumcand_calopfpt_ptselection_jet55[ptbin]->Fill(calopt_1[g]/pfpt_1[g],eMax_1[g]/Sumcand);
//	  hData_Jet55_noCut->Fill(pfpt_1[g], Jet55_prescl* wght);
//	  hpbpb_Data_Jet55_noCut[cBin]->Fill(pfpt_1[g], Jet55_prescl* wght);
	  }
          
	if(jet65_1 == 1 && jet80_1 == 0 ) {
	  hData_eMaxSumcand_calopfpt_ptselection_jet65[ptbin]->Fill(calopt_1[g]/pfpt_1[g],eMax_1[g]/Sumcand);	    
	}

	if(jet80_1 == 1) {
	  hData_eMaxSumcand_calopfpt_ptselection_jet80[ptbin]->Fill(calopt_1[g]/pfpt_1[g],eMax_1[g]/Sumcand);
	}
      }
      // fill the histograms with unmatched Jets 
      if(isCaloMatch_1[g] ==0) {
      	
	if(jet55_1 == 1 && jet65_1 == 0 && jet80_1 == 0 ) {
		hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[ptbin]->Fill(0.,eMax_1[g]/Sumcand);
	}
	if(jet65_1 == 1 && jet80_1 == 0 ) {
		hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[ptbin]->Fill(0.,eMax_1[g]/Sumcand);
	}
	if(jet80_1 == 1) {
		hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[ptbin]->Fill(0.,eMax_1[g]/Sumcand);
	}
 
      } // end caloMatch loop
 //   } // end pfptbin check loop
    }// jet loop
    
  }// data ntuple loop
  
#if 0
  if(ntuple == "Raghav"){
    // data unmatched loop:
    entries = Data_unmatched->GetEntries();
    //entries = 1000;
    cout<<"Unmatched Data ntuple "<<endl;
    for(long nentry = 0; nentry < entries; ++nentry ){

      if(nentry%100000 == 0) cout<<nentry<<"/"<<entries<<endl;
      Data_unmatched->GetEntry(nentry);
      Int_t cBin = findBin(hiBin_1);
      if(cBin == -1 || cBin >= nbins_cent) continue;
    
      if(isSymm && TMath::Abs(eta_1) > (Float_t)etaHigh/10) continue;       
      if(!isSymm && (TMath::Abs(eta_1) < (Float_t)etaLow/10 || TMath::Abs(eta_1) > (Float_t)etaHigh/10)) continue;
    
      Float_t wght = 1; 
      // if(etaBoundary == 1.0){
      //   if(radius == 2) wght = R2nCorr[cBin][htest->FindBin(pfpt_1)];
      //   if(radius == 3) wght = R3nCorr[cBin][htest->FindBin(pfpt_1)];
      //   if(radius == 4) wght = R4nCorr[cBin][htest->FindBin(pfpt_1)];    
      // }
      Float_t Sumcand = chSum_1 + phSum_1 + neSum_1 + muSum_1;

      if(jet55_1 == 1 && jet65_1 == 0 && jet80_1 == 0 ) {
    
	hData_unmatched_Jet55_noCut->Fill(pfpt_1, Jet55_prescl*wght);
	hpbpb_Data_Jet55_noCut[cBin]->Fill(pfpt_1, Jet55_prescl*wght);
      
      }

      if(jet65_1 == 1 && jet80_1 == 0 ) {

	hData_unmatched_Jet65_noCut->Fill(pfpt_1, wght);
	hpbpb_Data_Jet65_noCut[cBin]->Fill(pfpt_1, wght);
      
      }

      if(jet80_1 == 1) {
    
	hData_unmatched_Jet80_noCut->Fill(pfpt_1, wght);
	hpbpb_Data_Jet80_noCut[cBin]->Fill(pfpt_1, wght);

      
      }
    
    }// data ntuple loop
  
  }// only for different Raghav's ntuple 
#endif
  if(Short==1){
   entries=TestEntries;
  } else {  
    entries = MC_matched->GetEntries();
  }
  //entries = 1000;
  // MC loop
  cout<<" looking at matched MC ntuple "<<endl;
  for(long nentry = 0; nentry < entries; ++nentry){

    if(nentry%100000 == 0) cout<<nentry<<"/"<<entries<<endl;
    MC_matched->GetEntry(nentry);
    
    Int_t cBin = findBin(hiBin_2);
    if(cBin == -1 || cBin >= nbins_cent) continue;    
    
    for(int g = 0; g<npf_2; ++g){
    
      Float_t Sumcand = chSum_2[g] + phSum_2[g] + neSum_2[g] + muSum_2[g];
      int refid = -1; 
      
      if(pfpt_2[g] > 2 * pthat_2) continue;
      refid = pfrefidx_2[g];
      if(subid_2[refid] != 0 || fabs(refdrjt_2[refid]) > kdelrcut) continue;
      if(refid < 0) continue;
      
      if(isSymm && TMath::Abs(eta_2[g]) > (Float_t)etaHigh/10) continue;       
      if(!isSymm && (TMath::Abs(eta_2[g]) < (Float_t)etaLow/10 || TMath::Abs(eta_2[g]) > (Float_t)etaHigh/10)) continue;

      int ptbin=findPtBin(pfpt_2[g]);
      int refptbin=findPtBin(pfrefpt_2[refid]);
      if(ptbin==-1){ continue; }
      if(isCaloMatch_2[g] == 1){
//	  hpbpb_gen[cBin]->Fill(pfrefpt_2[refid], weight);
//	  hpbpb_reco[cBin]->Fill(pfpt_2[g], weight);
//	  hpbpb_matrix[cBin]->Fill(pfrefpt_2[refid], pfpt_2[g], weight);	
//	hpbpb_MC_noCut[cBin]->Fill(pfrefpt_2[refid], weight);
	if(jet55_2 == 1 && jet65_2==0 && jet80_2 == 0){
      hMC_eMaxSumcand_calopfpt_ptselection_jet55[ptbin]->Fill(calopt_2[g]/pfpt_2[g],eMax_2[g]/Sumcand);
      if(ptbin==refptbin){
        hMC_eMaxSumcand_calopfpt_refptselection_jet55[ptbin]->Fill(calopt_2[g]/pfpt_2[g],eMax_2[g]/Sumcand);
      }
//	  hMC_Jet55_noCut->Fill(pfrefpt_2[refid], weight);
//	  hpbpb_MC_Jet55_noCut[cBin]->Fill(pfrefpt_2[refid],weight);
	}
	if(jet65_2 == 1 && jet80_2 == 0){
      hMC_eMaxSumcand_calopfpt_ptselection_jet65[ptbin]->Fill(calopt_2[g]/pfpt_2[g],eMax_2[g]/Sumcand);
      if(ptbin==refptbin){
        hMC_eMaxSumcand_calopfpt_refptselection_jet65[ptbin]->Fill(calopt_2[g]/pfpt_2[g],eMax_2[g]/Sumcand);
      }
	}
    
	if(jet80_2 == 1){
      hMC_eMaxSumcand_calopfpt_ptselection_jet80[ptbin]->Fill(calopt_2[g]/pfpt_2[g],eMax_2[g]/Sumcand);
      if(ptbin==refptbin){
        hMC_eMaxSumcand_calopfpt_refptselection_jet80[ptbin]->Fill(calopt_2[g]/pfpt_2[g],eMax_2[g]/Sumcand);
      }
	}// jet 80 selection
    
      }// matched jets 

      if(isCaloMatch_2[g] == 0){


//	hpbpb_MC_noCut[cBin]->Fill(pfrefpt_2[refid], weight);

	if(jet55_2 == 1 && jet65_2==0 && jet80_2 == 0){
		hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[ptbin]->Fill(0.,eMax_2[g]/Sumcand);
      if(ptbin==refptbin){
        hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet55[ptbin]->Fill(0.,eMax_2[g]/Sumcand);
      }
	}   
	if(jet65_2 == 1 && jet80_2 == 0){
		hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[ptbin]->Fill(0.,eMax_2[g]/Sumcand);
      if(ptbin==refptbin){
        hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet65[ptbin]->Fill(0.,eMax_2[g]/Sumcand);
      }
	}
	if(jet80_2 == 1){
		hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[ptbin]->Fill(0.,eMax_2[g]/Sumcand);
      if(ptbin==refptbin){
        hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet80[ptbin]->Fill(0.,eMax_2[g]/Sumcand);
      }      
	}
    
      }//unmatched jets

    }// jet loop
    
  }// mc ntuple loop

#if 0
  if(ntuple == "Raghav"){
    entries = MC_unmatched->GetEntries();
    //entries = 1000;
    // MC loop
    cout<<" looking at unmatched MC ntuple"<<endl;
    for(long nentry = 0; nentry < entries; ++nentry){

      if(nentry%100000 == 0) cout<<nentry<<"/"<<entries<<endl;
      MC_unmatched->GetEntry(nentry);

      if(subid_2 != 0) continue;

      Int_t cBin = findBin(hiBin_2);
      if(cBin == -1 || cBin >= nbins_cent) continue;
    
      Float_t Sumcand = chSum_2 + phSum_2 + neSum_2 + muSum_2;

      if(isSymm && TMath::Abs(eta_2) > (Float_t)etaHigh/10) continue;       
      if(!isSymm && (TMath::Abs(eta_2) < (Float_t)etaLow/10 || TMath::Abs(eta_2) > (Float_t)etaHigh/10)) continue;

      weight = (Float_t)weight * 1e-5;

      if(eMax_2/Sumcand < 0.05  ){
	hpbpb_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

      }

      hpbpb_MC_noCut[cBin]->Fill(pfrefpt_2, weight);

      if(jet55_2 == 1 && jet65_2==0 && jet80_2 == 0){
	hpbpb_MC_Jet55_noCut[cBin]->Fill(pfrefpt_2,weight);
	hMC_unmatched_Jet55_noCut->Fill(pfrefpt_2, weight);
	if(eMax_2/Sumcand < 0.05  ){

	  hpbpb_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	  hpbpb_Jet55_GenSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet55_reco[cBin]->Fill(pfpt_2, weight);
	  hpbpb_Jet55_RecoSmear[cBin]->Fill(pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet55_raw[cBin]->Fill(pfrawpt_2, weight);
	  hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_matrix_HLT_GenSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), pfpt_2, weight);
	  hpbpb_matrix_HLT_RecoSmear[cBin]->Fill(pfrefpt_2, pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_matrix_HLT_BothSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet55_gen2pSmear[cBin]->Fill(pfrefpt_2 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), weight);
	  hpbpb_matrix_HLT_gen2pSmear[cBin]->Fill(pfrefpt_2 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), pfpt_2, weight);

	  hMC_unmatched_Jet55_CutA->Fill(pfrefpt_2, weight);
	  hpbpb_anaBin_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	  hpbpb_anaBin_Jet55_reco[cBin]->Fill(pfpt_2, weight);
	  hpbpb_anaBin_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	}
	else hMC_unmatched_Jet55_CutA_rej->Fill(pfrefpt_2, weight);
      
      }

    
      if(jet65_2 == 1 && jet80_2 == 0){
	hpbpb_MC_Jet65_noCut[cBin]->Fill(pfrefpt_2,weight);
	hMC_unmatched_Jet65_noCut->Fill(pfrefpt_2, weight);
	if(eMax_2/Sumcand < 0.05  ){

	  hpbpb_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	  hpbpb_Jet65_GenSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet65_reco[cBin]->Fill(pfpt_2, weight);
	  hpbpb_Jet65_RecoSmear[cBin]->Fill(pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet65_raw[cBin]->Fill(pfrawpt_2, weight);
	  hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_matrix_HLT_GenSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), pfpt_2, weight);
	  hpbpb_matrix_HLT_RecoSmear[cBin]->Fill(pfrefpt_2, pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_matrix_HLT_BothSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet65_gen2pSmear[cBin]->Fill(pfrefpt_2 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), weight);
	  hpbpb_matrix_HLT_gen2pSmear[cBin]->Fill(pfrefpt_2 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), pfpt_2, weight);

	  hMC_unmatched_Jet65_CutA->Fill(pfrefpt_2, weight);
	  hpbpb_anaBin_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	  hpbpb_anaBin_Jet65_reco[cBin]->Fill(pfpt_2, weight);
	  hpbpb_anaBin_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	}
	else hMC_unmatched_Jet65_CutA_rej->Fill(pfrefpt_2);
      
      }

    
      if(jet80_2 == 1){
	hpbpb_MC_Jet80_noCut[cBin]->Fill(pfrefpt_2,weight);
	hMC_unmatched_Jet80_noCut->Fill(pfrefpt_2, weight);
	if(eMax_2/Sumcand < 0.05  ){

	  hpbpb_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	  hpbpb_Jet80_GenSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet80_reco[cBin]->Fill(pfpt_2, weight);
	  hpbpb_Jet80_RecoSmear[cBin]->Fill(pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet80_raw[cBin]->Fill(pfrawpt_2, weight);
	  hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_matrix_HLT_GenSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), pfpt_2, weight);
	  hpbpb_matrix_HLT_RecoSmear[cBin]->Fill(pfrefpt_2, pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_matrix_HLT_BothSmear[cBin]->Fill(pfrefpt_2 + rnd.Gaus(0,1), pfpt_2 + rnd.Gaus(0,1), weight);
	  hpbpb_Jet80_gen2pSmear[cBin]->Fill(pfrefpt_2 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), weight);
	  hpbpb_matrix_HLT_gen2pSmear[cBin]->Fill(pfrefpt_2 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), pfpt_2, weight);

	  hMC_unmatched_Jet80_CutA->Fill(pfrefpt_2, weight);
	  hpbpb_anaBin_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	  hpbpb_anaBin_Jet80_reco[cBin]->Fill(pfpt_2, weight);
	  hpbpb_anaBin_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	}else hMC_unmatched_Jet80_CutA_rej->Fill(pfrefpt_2, weight);
      
      }
    
    
    }// mc unmatched  ntuple loop

  }
#endif


  TFile fout(Form("%s_TTree_PbPb_Data_MC_finebins_%s_R0p%d_eMaxOverSumCand.root",ntuple,etaWidth,radius),"RECREATE");
  fout.cd();
  
  

//    hpbpb_MC_noCut[i]->Write();

  for(int a = 0;a<ptSelection; ++a) {
    hData_eMaxSumcand_calopfpt_ptselection_jet55[a]->Add(hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[a]);
    hMC_eMaxSumcand_calopfpt_ptselection_jet55[a]->Add(hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet55[a]);
    hMC_eMaxSumcand_calopfpt_refptselection_jet55[a]->Add(hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet55[a]);
    hData_eMaxSumcand_calopfpt_ptselection_jet65[a]->Add(hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[a]);
    hMC_eMaxSumcand_calopfpt_ptselection_jet65[a]->Add(hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet65[a]);
    hMC_eMaxSumcand_calopfpt_refptselection_jet65[a]->Add(hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet65[a]);
    hData_eMaxSumcand_calopfpt_ptselection_jet80[a]->Add(hData_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[a]);
    hMC_eMaxSumcand_calopfpt_ptselection_jet80[a]->Add(hMC_unmatch_eMaxSumcand_calopfpt_ptselection_jet80[a]);
    hMC_eMaxSumcand_calopfpt_refptselection_jet80[a]->Add(hMC_unmatch_eMaxSumcand_calopfpt_refptselection_jet80[a]);    
    hData_eMaxSumcand_calopfpt_ptselection_jet55[a]->Write();
    hMC_eMaxSumcand_calopfpt_ptselection_jet55[a]->Write();
    hMC_eMaxSumcand_calopfpt_refptselection_jet55[a]->Write();
    hData_eMaxSumcand_calopfpt_ptselection_jet65[a]->Write();
    hMC_eMaxSumcand_calopfpt_ptselection_jet65[a]->Write();
    hMC_eMaxSumcand_calopfpt_refptselection_jet65[a]->Write();
    hData_eMaxSumcand_calopfpt_ptselection_jet80[a]->Write();
    hMC_eMaxSumcand_calopfpt_ptselection_jet80[a]->Write();
    hMC_eMaxSumcand_calopfpt_refptselection_jet80[a]->Write();
     
   }
   for(int a = 0;a<ptSelection; ++a) {   
    ceMaxSumcand_jet55[a] = new TCanvas(Form("ceMaxSumcand_jet55_%d",a),"",1000,800);
    ceMaxSumcand_jet55[a]->Divide(3,1);
    ceMaxSumcand_jet55[a]->cd(1);
    ceMaxSumcand_jet55[a]->cd(1)->SetLogz();
    hData_eMaxSumcand_calopfpt_ptselection_jet55[a]->SetXTitle("calopt/pfpt");
    hData_eMaxSumcand_calopfpt_ptselection_jet55[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hData_eMaxSumcand_calopfpt_ptselection_jet55[a]->Draw("colz");
    drawText(Form("%d < pfpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("Data - jet55 !jet65 !jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();
    
    ceMaxSumcand_jet55[a]->cd(2);
    ceMaxSumcand_jet55[a]->cd(2)->SetLogz();
    hMC_eMaxSumcand_calopfpt_ptselection_jet55[a]->SetXTitle("calopt/pfpt");
    hMC_eMaxSumcand_calopfpt_ptselection_jet55[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hMC_eMaxSumcand_calopfpt_ptselection_jet55[a]->Draw("colz");
    drawText(Form("%d < pfpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("MC - jet55 !jet65 !jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();

    ceMaxSumcand_jet55[a]->cd(3);
    ceMaxSumcand_jet55[a]->cd(3)->SetLogz();
    hMC_eMaxSumcand_calopfpt_refptselection_jet55[a]->SetXTitle("calopt/pfpt");
    hMC_eMaxSumcand_calopfpt_refptselection_jet55[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hMC_eMaxSumcand_calopfpt_refptselection_jet55[a]->Draw("colz");
    drawText(Form("%d < pfpt, refpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("MC - jet55 !jet65 !jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();

    ceMaxSumcand_jet55[a]->SaveAs(Form("Plots_eMaxOverSumCand/eMaxOverSumCand_calpfpt_PbPb_jet55_showingCut_fullstat_R0p%d_%d_ptrange_%d.pdf",radius, ptBoundary[a], ptBoundary[a+1]),"RECREATE");


    ceMaxSumcand_jet65[a] = new TCanvas(Form("ceMaxSumcand_jet65_%d",a),"",1000,800);
    ceMaxSumcand_jet65[a]->Divide(3,1);
    ceMaxSumcand_jet65[a]->cd(1);
    ceMaxSumcand_jet65[a]->cd(1)->SetLogz();
    hData_eMaxSumcand_calopfpt_ptselection_jet65[a]->SetXTitle("calopt/pfpt");
    hData_eMaxSumcand_calopfpt_ptselection_jet65[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hData_eMaxSumcand_calopfpt_ptselection_jet65[a]->Draw("colz");
    drawText(Form("%d < pfpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("Data - jet65 !jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();
    
    ceMaxSumcand_jet65[a]->cd(2);
    ceMaxSumcand_jet65[a]->cd(2)->SetLogz();
    hMC_eMaxSumcand_calopfpt_ptselection_jet65[a]->SetXTitle("calopt/pfpt");
    hMC_eMaxSumcand_calopfpt_ptselection_jet65[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hMC_eMaxSumcand_calopfpt_ptselection_jet65[a]->Draw("colz");
    drawText(Form("%d < pfpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("MC - jet65 !jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();

    ceMaxSumcand_jet65[a]->cd(3);
    ceMaxSumcand_jet65[a]->cd(3)->SetLogz();
    hMC_eMaxSumcand_calopfpt_refptselection_jet65[a]->SetXTitle("calopt/pfpt");
    hMC_eMaxSumcand_calopfpt_refptselection_jet65[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hMC_eMaxSumcand_calopfpt_refptselection_jet65[a]->Draw("colz");
    drawText(Form("%d < pfpt, refpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("MC - jet65 !jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();

    ceMaxSumcand_jet65[a]->SaveAs(Form("Plots_eMaxOverSumCand/eMaxOverSumCand_calpfpt_PbPb_jet65_showingCut_fullstat_R0p%d_%d_ptrange_%d.pdf",radius, ptBoundary[a], ptBoundary[a+1]),"RECREATE");

    ceMaxSumcand_jet80[a] = new TCanvas(Form("ceMaxSumcand_jet80_%d",a),"",1000,800);
    ceMaxSumcand_jet80[a]->Divide(3,1);
    ceMaxSumcand_jet80[a]->cd(1);
    ceMaxSumcand_jet80[a]->cd(1)->SetLogz();
    hData_eMaxSumcand_calopfpt_ptselection_jet80[a]->SetXTitle("calopt/pfpt");
    hData_eMaxSumcand_calopfpt_ptselection_jet80[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hData_eMaxSumcand_calopfpt_ptselection_jet80[a]->Draw("colz");
    drawText(Form("%d < pfpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("Data - jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();
    
    ceMaxSumcand_jet80[a]->cd(2);
    ceMaxSumcand_jet80[a]->cd(2)->SetLogz();
    hMC_eMaxSumcand_calopfpt_ptselection_jet80[a]->SetXTitle("calopt/pfpt");
    hMC_eMaxSumcand_calopfpt_ptselection_jet80[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hMC_eMaxSumcand_calopfpt_ptselection_jet80[a]->Draw("colz");
    drawText(Form("%d < pfpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("MC - jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();

    ceMaxSumcand_jet80[a]->cd(3);
    ceMaxSumcand_jet80[a]->cd(3)->SetLogz();
    hMC_eMaxSumcand_calopfpt_refptselection_jet80[a]->SetXTitle("calopt/pfpt");
    hMC_eMaxSumcand_calopfpt_refptselection_jet80[a]->SetYTitle("eMax/(chSum+phSum+neSum+muSum)");
    hMC_eMaxSumcand_calopfpt_refptselection_jet80[a]->Draw("colz");
    drawText(Form("%d < pfpt, refpt < %d", ptBoundary[a], ptBoundary[a+1]),0.2,0.7,14);
    drawText("MC - jet80",0.25,0.8,14);
    CutA_1->Draw();
    CutA_2->Draw();
    CutA_3->Draw();

    ceMaxSumcand_jet80[a]->SaveAs(Form("Plots_eMaxOverSumCand/eMaxOverSumCand_calpfpt_PbPb_jet80_showingCut_fullstat_R0p%d_%d_ptrange_%d.pdf",radius, ptBoundary[a], ptBoundary[a+1]),"RECREATE");
    
  }

  
}
void Class_Test()
{
//_data=data;
Hist= new TH2D("Gaus_hist","Gaus_hist",50,-10,10,50,-10,10);
Hist_PDF= new TH2D("Gaus_hist_PDF","Gaus_hist_PDF",50,-10,10,50,-10,10);
    Hist_Interpol= new TH2D("Gaus_hist_Interpol","Gaus_hist_Interpol",50,-10,10,50,-10,10);
std::vector<Double_t> data (20000);
std::vector<Double_t> points_x (10000);
std::vector<Double_t> points_y (10000);
std::vector<Double_t> weights (10000);

for (int i=0;i<10000;i++)
	{
        points_x[i]=r.Gaus(0,2);
        points_y[i]=r.Gaus(0,4);
		//std::cout<< points_x[i] <<endl;
		
		data[2*i]=points_x[i]+points_y[i];
		data[2*i+1]=points_x[i]-2*points_y[i];
		//weights[i]=r.Rndm();
		weights[i]=1;
		Hist->Fill(points_x[i]+points_y[i],points_x[i]-2*points_y[i],weights[i]);
		
	}

int i_x,i_y;
    Double_t eval,interpol;
TStopwatch w;
    w.Start();
A= new NDPdfTreeAllBin(data,"a",1,3,true,10000,2,weights,2,10,5);
std::vector<double> X(2);
Double_t res=0;
Double_t res2=0;
w.Print();
w.Start();
for (int i=1; i<=50; i++)
{
for (int j=1;j<=50;j++)
{
  X[0] = Hist->GetXaxis()->GetBinCenter(i);
  X[1] = Hist->GetYaxis()->GetBinCenter(j);
  eval=A->evaluate(X.data());
  interpol=A->Interpol(X.data());
//i_x=Hist->GetXaxis()->FindFixBin(X[0][i]);
//i_y=Hist->GetYaxis()->FindFixBin(X[1][i]);
//std::cout<<" i = " << i << " j = " << j << " eval = " << eval << " hist = " << Hist->GetBinContent(i,j)<< endl;
    Hist_PDF->SetBinContent(i,j,eval);
    Hist_Interpol->SetBinContent(i,j,interpol);
//Double_t g= TMath::Gaus(X[0],100,4, true)*TMath::Gaus(X[1],100,4,true)*10000*Hist->GetXaxis()->GetBinWidth(i)*Hist->GetYaxis()->GetBinWidth(j);
    Double_t g=Hist->GetBinContent(i,j);
res+=eval-g;

if (g>0)
res2+=(eval-g)*(eval-g)/g;
    cout<<"TEST"<<res2<<endl;
}

}
w.Print();
    
    Hist->Scale(1/Hist->Integral());
    Hist_PDF->Scale(1/Hist_PDF->Integral());
    Hist_Interpol->Scale(1/Hist_Interpol->Integral());
    Hist->SetLineColor(kRed);
    Hist_PDF->SetLineColor(kBlue);
    Hist_Interpol->SetLineColor(kMagenta);
cout <<"res=" << res << " res2= " <<res2<< "  " <<res2/2500 <<endl;
Hist->Draw("LEGO");
new TCanvas();
Hist_PDF->Draw("LEGO");
new TCanvas();
Hist_Interpol->Draw("LEGO");


}
Esempio n. 30
0
void RAA_plot_yetkinCutEfficiency_minbias(char* etaWidth = (char*)"10_eta_18",
					  Int_t radius = 4,
					  Int_t etaLow = 10,
					  Int_t etaHigh = 18)
{
  TH1::SetDefaultSumw2();
  
  // the cut is a 3 step cut based on the different value of the calopt/pfpt - copy the following lines into your loop (with the corresponding branch address set)
  // if(calopt/pfpt <= 0.5 && eMax/Sumcand < 0.05) hGood->Fill();
  // if(calopt/pfpt > 0.5 && calopt/pfpt <= 0.85 && eMax/Sumcand < (18/7 *(Float_t)calopt_1/pfpt_1 - 9/7)) ) hGood->Fill();
  // if(calopt/pfpt > 0.85 & eMax/Sumcand > 0.9) hGood->Fill();
  
  
  cout<<"etaWidth = "<<etaWidth<<endl;

  bool isSymm = false;
  if(etaLow == etaHigh) isSymm = true;
  
  TFile * fData;

  fData = TFile::Open("/mnt/hadoop/cms/store/user/pawan/ntuples/JetRaa_akPu234_PbPb_MinBias.root");

  TTree * Data_matched= (TTree*)fData->Get(Form("akPu%dJetAnalyzer/matchedJets",radius));
  TTree * Data_unmatched = (TTree*)fData->Get(Form("akPu%dJetAnalyzer/unmatchedPFJets",radius));


  // TTree * MC_matched = (TTree*)fMC->Get("matchedJets");
  // TTree * MC_unmatched = (TTree*)fMC->Get("unmatchedPFJets");

  
  // //get the spectra with the specific trigger object from the different files. 
  // TH1F *hpbpb_Jet80_gen[nbins_cent],*hpbpb_Jet80_reco[nbins_cent];
  // TH1F *hpbpb_Jet65_gen[nbins_cent],*hpbpb_Jet65_reco[nbins_cent];
  // TH1F *hpbpb_Jet55_gen[nbins_cent],*hpbpb_Jet55_reco[nbins_cent];
  // TH1F *hpbpb_JetComb_gen[nbins_cent],*hpbpb_JetComb_reco[nbins_cent];

  // //TH1F *hpbpb_gen[nbins_cent],*hpbpb_reco[nbins_cent];
  // //TH2F *hpbpb_matrix[nbins_cent];
  // TH2F *hpbpb_matrix_HLT[nbins_cent];
  // //TH2F *hpbpb_mcclosure_matrix[nbins_cent];
  // TH2F *hpbpb_mcclosure_matrix_HLT[nbins_cent];
  // //TH2F *hpbpb_response[nbins_cent];
  // TH1F *hpbpb_mcclosure_JetComb_data[nbins_cent];
  // //TH1F *hpbpb_mcclosure_data[nbins_cent];
  // TH1F *hpbpb_mcclosure_Jet80_data[nbins_cent];
  // TH1F *hpbpb_mcclosure_Jet65_data[nbins_cent];
  // TH1F *hpbpb_mcclosure_Jet55_data[nbins_cent];
  // //TH1F *hpbpb_mcclosure_gen[nbins_cent];
  // TH1F *hpbpb_mcclosure_JetComb_gen[nbins_cent];
  // TH1F *hpbpb_mcclosure_Jet80_gen[nbins_cent];
  // TH1F *hpbpb_mcclosure_Jet65_gen[nbins_cent];
  // TH1F *hpbpb_mcclosure_Jet55_gen[nbins_cent];

  TH1F *hpbpb_TrgObj80[nbins_cent];
  TH1F *hpbpb_TrgObj65[nbins_cent];
  TH1F *hpbpb_TrgObj55[nbins_cent];
  TH1F *hpbpb_TrgObjComb[nbins_cent];
  TH1F * hpbpb_noTrg[nbins_cent];

  // JEC systematics
  TH1F *hpbpb_JEC_TrgObjComb[nbins_cent];

  // Smear systematics
  TH1F *hpbpb_Smear_TrgObjComb[nbins_cent];
    
  for(int i = 0;i<nbins_cent;++i){
    //cout<<"cent bin = "<<i<<endl;

    hpbpb_noTrg[i] = new TH1F(Form("hpbpb_noTrg_R%d_%s_cent%d",radius,etaWidth,i),"",400,0,400);
    
    hpbpb_TrgObj80[i] = new TH1F(Form("hpbpb_HLT80_R%d_%s_cent%d",radius,etaWidth,i),Form("Spectra from  Jet 80 R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_TrgObj65[i] = new TH1F(Form("hpbpb_HLT65_R%d_%s_cent%d",radius,etaWidth,i),Form("Spectra from  Jet 65 && !jet80 R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_TrgObj55[i] = new TH1F(Form("hpbpb_HLT55_R%d_%s_cent%d",radius,etaWidth,i),Form("Spectra from Jet 55 && !jet65 && !jet80 R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_TrgObjComb[i] = new TH1F(Form("hpbpb_HLTComb_R%d_%s_cent%d",radius,etaWidth,i),Form("Trig Combined Spectra R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_JEC_TrgObjComb[i] = new TH1F(Form("hpbpb_JEC_HLTComb_R%d_%s_cent%d",radius,etaWidth,i),Form("Trig Combined Spectra R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Smear_TrgObjComb[i] = new TH1F(Form("hpbpb_Smear_HLTComb_R%d_%s_cent%d",radius,etaWidth,i),Form("Trig Combined Spectra R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);

#if 0
    //hpbpb_gen[i] = new TH1F(Form("hpbpb_gen_R%d_%s_cent%d",radius,etaWidth,i),Form("Gen refpt R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    //cout<<"A"<<endl;
    //hpbpb_reco[i] = new TH1F(Form("hpbpb_reco_R%d_%s_cent%d",radius,etaWidth,i),Form("Reco jtpt R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    //cout<<"B"<<endl;
    //hpbpb_matrix[i] = new TH2F(Form("hpbpb_matrix_R%d_%s_cent%d",radius,etaWidth,i),Form("Matrix refpt jtpt R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400,400,0,400);
    hpbpb_matrix_HLT[i] = new TH2F(Form("hpbpb_matrix_HLT_R%d_%s_cent%d",radius,etaWidth,i),Form("Matrix refpt jtpt from trigger addition R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400,400,0,400);
    //hpbpb_mcclosure_matrix[i] = new TH2F(Form("hpbpb_mcclosure_matrix_R%d_%s_cent%d",radius,etaWidth,i),Form("Matrix for mcclosure refpt jtpt R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400,400,0,400);
    hpbpb_mcclosure_matrix_HLT[i] = new TH2F(Form("hpbpb_mcclosure_matrix_HLT_R%d_%s_cent%d",radius,etaWidth,i),Form("Matrix for mcclosure refpt jtpt from Jet triggers R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400,400,0,400);
    //cout<<"C"<<endl;
    //hpbpb_mcclosure_data[i] = new TH1F(Form("hpbpb_mcclosure_data_R%d_%s_cent%d",radius,etaWidth,i),Form("data for unfolding mc closure test R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_JetComb_data[i] = new TH1F(Form("hpbpb_mcclosure_JetComb_data_R%d_%s_cent%d",radius,etaWidth,i),Form("data for unfolding mc closure test trigger combined  R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_Jet80_data[i] = new TH1F(Form("hpbpb_mcclosure_Jet80_data_R%d_%s_cent%d",radius,etaWidth,i),Form("data for unfolding mc closure test trigger 80  R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_Jet65_data[i] = new TH1F(Form("hpbpb_mcclosure_Jet65_data_R%d_%s_cent%d",radius,etaWidth,i),Form("data for unfolding mc closure test trigger 65  R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_Jet55_data[i] = new TH1F(Form("hpbpb_mcclosure_Jet55_data_R%d_%s_cent%d",radius,etaWidth,i),Form("data for unfolding mc closure test trigger 55  R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);

    //hpbpb_mcclosure_gen[i] = new TH1F(Form("hpbpb_mcclosure_gen_R%d_%s_cent%d",radius,etaWidth,i),Form("gen spectra for unfolding mc closure test R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_JetComb_gen[i] = new TH1F(Form("hpbpb_mcclosure_gen_JetComb_R%d_%s_cent%d",radius,etaWidth,i),Form("gen spectra for unfolding mc closure test trigger combined R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_Jet80_gen[i] = new TH1F(Form("hpbpb_mcclosure_gen_Jet80_R%d_%s_cent%d",radius,etaWidth,i),Form("gen spectra for unfolding mc closure test trigger 80 R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_Jet65_gen[i] = new TH1F(Form("hpbpb_mcclosure_gen_Jet65_R%d_%s_cent%d",radius,etaWidth,i),Form("gen spectra for unfolding mc closure test trigger 65 R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_mcclosure_Jet55_gen[i] = new TH1F(Form("hpbpb_mcclosure_gen_Jet55_R%d_%s_cent%d",radius,etaWidth,i),Form("gen spectra for unfolding mc closure test trigger 55 R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);

    hpbpb_JetComb_gen[i] = new TH1F(Form("hpbpb_JetComb_gen_R%d_%s_cent%d",radius,etaWidth,i),Form("Gen refpt from HLT trigger combined R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_JetComb_reco[i] = new TH1F(Form("hpbpb_JetComb_reco_R%d_%s_cent%d",radius,etaWidth,i),Form("reco jtpt from HLT trigger combined R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Jet80_gen[i] = new TH1F(Form("hpbpb_Jet80_gen_R%d_%s_cent%d",radius,etaWidth,i),Form("Gen refpt from Jet80 trigger R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Jet80_reco[i] = new TH1F(Form("hpbpb_Jet80_reco_R%d_%s_cent%d",radius,etaWidth,i),Form("reco jtpt from Jet80 trigger R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Jet65_gen[i] = new TH1F(Form("hpbpb_Jet65_gen_R%d_%s_cent%d",radius,etaWidth,i),Form("Gen refpt from Jet65 && !Jet80 trigger R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Jet65_reco[i] = new TH1F(Form("hpbpb_Jet65_reco_R%d_%s_cent%d",radius,etaWidth,i),Form("reco jtpt from Jet65 && !Jet80 trigger R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Jet55_gen[i] = new TH1F(Form("hpbpb_Jet55_gen_R%d_%s_cent%d",radius,etaWidth,i),Form("Gen refpt from Jet55 && !Jet65 && !Jet80 trigger R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);
    hpbpb_Jet55_reco[i] = new TH1F(Form("hpbpb_Jet55_reco_R%d_%s_cent%d",radius,etaWidth,i),Form("reco jtpt from Jet55 && !Jet65 && !Jet80 trigger R%d %s %2.0f - %2.0f cent",radius,etaWidth,5*boundaries_cent[i],5*boundaries_cent[i+1]),400,0,400);

#endif	
  }// centrality bin loop
  


  // Define all the histograms necessary for the analysis: 
  
  // 1 - Data, 2 - MC
  Float_t pfpt_1, pfpt_2;
  Float_t pfrefpt_2;
  Float_t calopt_1, calopt_2;
  Float_t eMax_1, eMax_2;
  Float_t chMax_1, chMax_2;
  Float_t chSum_1, chSum_2;
  Float_t phSum_1, phSum_2;
  Float_t neSum_1, neSum_2;
  Float_t muSum_1, muSum_2;
  Int_t jet55_1, jet65_1, jet80_1;
  Int_t jet55_p_1, jet65_p_1, jet80_p_1;
  Int_t jet55_2, jet65_2, jet80_2;
  Int_t jet55_p_2;
  Float_t weight;
  Int_t subid_2;
  Int_t hiBin_1, hiBin_2;
  Int_t jetMB_1, jetMB_p_1;
  Float_t eta_1, eta_2;
  Float_t pfrawpt_1, pfrawpt_2;
  
  Data_matched->SetBranchAddress("calopt",&calopt_1);
  Data_matched->SetBranchAddress("pfpt",&pfpt_1);
  Data_matched->SetBranchAddress("eMax",&eMax_1);
  Data_matched->SetBranchAddress("chMax",&chMax_1);
  Data_matched->SetBranchAddress("chSum",&chSum_1);
  Data_matched->SetBranchAddress("phSum",&phSum_1);
  Data_matched->SetBranchAddress("neSum",&neSum_1);
  Data_matched->SetBranchAddress("muSum",&muSum_1);
  Data_matched->SetBranchAddress("hiBin",&hiBin_1);  
  Data_matched->SetBranchAddress("jetMB",&jetMB_1);
  Data_matched->SetBranchAddress("jet55",&jet55_1);
  Data_matched->SetBranchAddress("jet65",&jet65_1);
  Data_matched->SetBranchAddress("jet80",&jet80_1);
  Data_matched->SetBranchAddress("jetMB_prescl",&jetMB_p_1);
  Data_matched->SetBranchAddress("jet55_prescl",&jet55_p_1);
  Data_matched->SetBranchAddress("jet65_prescl",&jet65_p_1);
  Data_matched->SetBranchAddress("jet80_prescl",&jet80_p_1);
  Data_matched->SetBranchAddress("pfeta",&eta_1);
  Data_matched->SetBranchAddress("pfrawpt",&pfrawpt_1);
  
  Data_unmatched->SetBranchAddress("pfpt",&pfpt_1);
  Data_unmatched->SetBranchAddress("eMax",&eMax_1);
  Data_unmatched->SetBranchAddress("chMax",&chMax_1);
  Data_unmatched->SetBranchAddress("chSum",&chSum_1);
  Data_unmatched->SetBranchAddress("phSum",&phSum_1);
  Data_unmatched->SetBranchAddress("neSum",&neSum_1);
  Data_unmatched->SetBranchAddress("muSum",&muSum_1);
  Data_unmatched->SetBranchAddress("hiBin",&hiBin_1);
  Data_unmatched->SetBranchAddress("jet55",&jet55_1);
  Data_unmatched->SetBranchAddress("jet65",&jet65_1);
  Data_unmatched->SetBranchAddress("jet80",&jet80_1);
  Data_unmatched->SetBranchAddress("jetMB",&jetMB_1);
  Data_unmatched->SetBranchAddress("jetMB_prescl",&jetMB_p_1);
  Data_unmatched->SetBranchAddress("jet55_prescl",&jet55_p_1);
  Data_unmatched->SetBranchAddress("jet65_prescl",&jet65_p_1);
  Data_unmatched->SetBranchAddress("jet80_prescl",&jet80_p_1);
  Data_unmatched->SetBranchAddress("pfeta",&eta_1);
  Data_unmatched->SetBranchAddress("pfrawpt",&pfrawpt_1);
  
#if 0
  MC_matched->SetBranchAddress("calopt",&calopt_2);
  MC_matched->SetBranchAddress("pfpt",&pfpt_2);
  MC_matched->SetBranchAddress("eMax",&eMax_2);
  MC_matched->SetBranchAddress("chMax",&chMax_2);
  MC_matched->SetBranchAddress("chSum",&chSum_2);
  MC_matched->SetBranchAddress("phSum",&phSum_2);
  MC_matched->SetBranchAddress("neSum",&neSum_2);
  MC_matched->SetBranchAddress("muSum",&muSum_2);
  MC_matched->SetBranchAddress("hiBin",&hiBin_2);
  MC_matched->SetBranchAddress("pfrefpt",&pfrefpt_2);
  MC_matched->SetBranchAddress("jet55",&jet55_2);
  MC_matched->SetBranchAddress("jet65",&jet65_2);
  MC_matched->SetBranchAddress("jet80",&jet80_2);
  MC_matched->SetBranchAddress("weight", &weight);
  MC_matched->SetBranchAddress("subid", &subid_2);
  MC_matched->SetBranchAddress("jet55_prescl",&jet55_p_2);
  
  MC_unmatched->SetBranchAddress("pfpt",&pfpt_2);
  MC_unmatched->SetBranchAddress("eMax",&eMax_2);
  MC_unmatched->SetBranchAddress("chMax",&chMax_2);
  MC_unmatched->SetBranchAddress("chSum",&chSum_2);
  MC_unmatched->SetBranchAddress("phSum",&phSum_2);
  MC_unmatched->SetBranchAddress("neSum",&neSum_2);
  MC_unmatched->SetBranchAddress("muSum",&muSum_2);
  MC_unmatched->SetBranchAddress("hiBin",&hiBin_2);
  MC_unmatched->SetBranchAddress("pfrefpt",&pfrefpt_2);
  MC_unmatched->SetBranchAddress("jet55",&jet55_2);
  MC_unmatched->SetBranchAddress("jet65",&jet65_2);
  MC_unmatched->SetBranchAddress("jet80",&jet80_2);
  MC_unmatched->SetBranchAddress("weight", & weight);
  MC_unmatched->SetBranchAddress("subid", &subid_2);
  MC_unmatched->SetBranchAddress("jet55_prescl",&jet55_p_2);
#endif

  // data loop
  long entries = Data_matched->GetEntries();
  //entries = 1000;
  cout<<"matched Data ntuple "<<endl;

  TRandom rnd; 

  Float_t prescl = 38.695;
  
  for(long nentry = 0; nentry < entries; ++nentry ){

    if(nentry%10000 == 0) cout<<" nentry = "<<nentry<<endl;
    Data_matched->GetEntry(nentry);

    Int_t cBin = findBin(hiBin_1);
    if(cBin == -1 || cBin >= nbins_cent) continue;
    
    Float_t Sumcand = chSum_1 + phSum_1 + neSum_1 + muSum_1;

    if(isSymm && TMath::Abs(eta_1) > (Float_t)etaHigh/10) continue;       
    if(!isSymm && (TMath::Abs(eta_1) < (Float_t)etaLow/10 || TMath::Abs(eta_1) > (Float_t)etaHigh/10)) continue;
       
    
    if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand < ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)) hpbpb_noTrg[cBin]->Fill(pfpt_1, prescl);
    if(calopt_1/pfpt_1 > 0.85) hpbpb_noTrg[cBin]->Fill(pfpt_1, prescl);
    if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand < 0.05) hpbpb_noTrg[cBin]->Fill(pfpt_1, prescl);
   
    if(jetMB_1 == 1 && jet55_1 == 0 && jet65_1 == 0 && jet80_1 == 0 ) {
      
      //hData_Jet55_noCut->Fill(pfpt_1, jet55_p_1);
      
      if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand < ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)) {
	//hData_Jet55_CutA->Fill(pfpt_1, jet55_p_1);
	hpbpb_TrgObjComb[cBin]->Fill(pfpt_1, prescl);
	hpbpb_JEC_TrgObjComb[cBin]->Fill(pfpt_1 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), prescl);
	hpbpb_Smear_TrgObjComb[cBin]->Fill(pfpt_1 + rnd.Gaus(0,1), prescl);
      }
      if(calopt_1/pfpt_1 > 0.85){
	//hData_Jet55_CutA->Fill(pfpt_1, jet55_p_1);
	hpbpb_TrgObjComb[cBin]->Fill(pfpt_1, prescl);
	hpbpb_JEC_TrgObjComb[cBin]->Fill(pfpt_1 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), prescl);
	hpbpb_Smear_TrgObjComb[cBin]->Fill(pfpt_1 + rnd.Gaus(0,1), prescl);
      }
      if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand < 0.05) {
	//hData_Jet55_CutA->Fill(pfpt_1, jet55_p_1);
	hpbpb_TrgObjComb[cBin]->Fill(pfpt_1, prescl);
      	hpbpb_JEC_TrgObjComb[cBin]->Fill(pfpt_1 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), prescl);
	hpbpb_Smear_TrgObjComb[cBin]->Fill(pfpt_1 + rnd.Gaus(0,1), prescl);
      }
      //if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand >= 0.05) hData_Jet55_CutA_rej->Fill(pfpt_1, jet55_p_1);
      //if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand >= ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)) hData_Jet55_CutA_rej->Fill(pfpt_1, jet55_p_1);
      
    }
#if 0
    if(jet65_1 == 1 && jet80_1 == 0 ) {
      
      //hData_Jet65_noCut->Fill(pfpt_1);
      
      if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand < ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)){
	//hData_Jet65_CutA->Fill(pfpt_1);
	hpbpb_TrgObj65[cBin]->Fill(pfpt_1);
      }
      if(calopt_1/pfpt_1 > 0.85) {
	//hData_Jet65_CutA->Fill(pfpt_1);
	hpbpb_TrgObj65[cBin]->Fill(pfpt_1);
      }
      if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand < 0.05) {
	//hData_Jet65_CutA->Fill(pfpt_1);
	hpbpb_TrgObj65[cBin]->Fill(pfpt_1);
      }
      //if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand >= 0.05) hData_Jet65_CutA_rej->Fill(pfpt_1);
      //if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand >= ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)) hData_Jet65_CutA_rej->Fill(pfpt_1);
      
    }

    if(jet80_1 == 1) {
    
      //hData_Jet80_noCut->Fill(pfpt_1);
      
      if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand < ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)) {
	//hData_Jet80_CutA->Fill(pfpt_1);
	hpbpb_TrgObj80[cBin]->Fill(pfpt_1);
      }
      if(calopt_1/pfpt_1 > 0.85){
	//hData_Jet80_CutA->Fill(pfpt_1);
	hpbpb_TrgObj80[cBin]->Fill(pfpt_1);
      }
      if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand < 0.05){
	//hData_Jet80_CutA->Fill(pfpt_1);
	hpbpb_TrgObj80[cBin]->Fill(pfpt_1);
      }
      //if(calopt_1/pfpt_1 <= 0.5 && eMax_1/Sumcand >= 0.05) hData_Jet80_CutA_rej->Fill(pfpt_1);
      //if(calopt_1/pfpt_1 > 0.5 && calopt_1/pfpt_1 <= 0.85 && eMax_1/Sumcand >= ((Float_t)18/7 *(Float_t)calopt_1/pfpt_1 - (Float_t)9/7)) hData_Jet80_CutA_rej->Fill(pfpt_1);
      
    }
#endif
    
  }// data ntuple loop

  // data unmatched loop:
  entries = Data_unmatched->GetEntries();
  //entries = 1000;
  cout<<"Unmatched Data ntuple "<<endl;
  for(long nentry = 0; nentry < entries; ++nentry ){

    if(nentry%10000 == 0) cout<<" nentry = "<<nentry<<endl;
    Data_unmatched->GetEntry(nentry);
    Int_t cBin = findBin(hiBin_1);
    if(cBin == -1 || cBin >= nbins_cent) continue;
    
    Float_t Sumcand = chSum_1 + phSum_1 + neSum_1 + muSum_1;

    
    if(isSymm && TMath::Abs(eta_1) > (Float_t)etaHigh/10) continue;       
    if(!isSymm && (TMath::Abs(eta_1) < (Float_t)etaLow/10 || TMath::Abs(eta_1) > (Float_t)etaHigh/10)) continue;   
    if(eMax_1/Sumcand < 0.05) hpbpb_noTrg[cBin]->Fill(pfpt_1, prescl);

    if(jet55_1 == 1 && jet65_1 == 0 && jet80_1 == 0 ) {
    
      //hData_unmatched_Jet55_noCut->Fill(pfpt_1, jet55_p_1);

      if(eMax_1/Sumcand < 0.05 ) {hpbpb_TrgObjComb[cBin]->Fill(pfpt_1, prescl);
	hpbpb_JEC_TrgObjComb[cBin]->Fill(pfpt_1 * (1. + 0.02/nbins_cent*(nbins_cent-cBin)), prescl);
	hpbpb_Smear_TrgObjComb[cBin]->Fill(pfpt_1 + rnd.Gaus(0,1), prescl);
      }
	//hData_unmatched_Jet55_CutA->Fill(pfpt_1, jet55_p_1);
      //else hData_unmatched_Jet55_CutA_rej->Fill(pfpt_1, jet55_p_1);
      
    }
#if 0
    if(jet65_1 == 1 && jet80_1 == 0 ) {

      //hData_unmatched_Jet65_noCut->Fill(pfpt_1);

      if(eMax_1/Sumcand < 0.05  )hpbpb_TrgObj65[cBin]->Fill(pfpt_1);
	//hData_unmatched_Jet65_CutA->Fill(pfpt_1);
      //else hData_unmatched_Jet65_CutA_rej->Fill(pfpt_1);
      
    }

    if(jet80_1 == 1) {
    
      //hData_unmatched_Jet80_noCut->Fill(pfpt_1);

      if(eMax_1/Sumcand < 0.05  )hpbpb_TrgObj80[cBin]->Fill(pfpt_1);
	//hData_unmatched_Jet80_CutA->Fill(pfpt_1);
      //else hData_unmatched_Jet80_CutA_rej->Fill(pfpt_1);
      
    }
#endif
  }// data ntuple loop

#if 0
  entries = MC_matched->GetEntries();
  //entries = 1000;
  // MC loop
  cout<<" looking at matched MC ntuple "<<endl;
  for(long nentry = 0; nentry < entries; ++nentry){

    if(nentry%10000 == 0) cout<<" nentry = "<<nentry<<endl;
    MC_matched->GetEntry(nentry);
    
    Float_t Sumcand = chSum_2 + phSum_2 + neSum_2 + muSum_2;
    if(subid_2 != 0) continue;

    Int_t cBin = findBin(hiBin_2);
    if(cBin == -1 || cBin >= nbins_cent) continue;
    
    
    if(jet55_2 == 1 && jet65_2==0 && jet80_2 == 0){
      
      //hMC_Jet55_noCut->Fill(pfpt_2, weight);

      if(calopt_2/pfpt_2 > 0.5 && calopt_2/pfpt_2 <= 0.85 && eMax_2/Sumcand < ((Float_t)18/7 *(Float_t)calopt_2/pfpt_2 - (Float_t)9/7)){
	//hMC_Jet55_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet55_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet55_data[cBin]->Fill(pfpt_2, weight);
	}
	
      }
      if(calopt_2/pfpt_2 > 0.85) {
	//hMC_Jet55_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet55_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet55_data[cBin]->Fill(pfpt_2, weight);
	}
	
      }
      if(calopt_2/pfpt_2 <= 0.5 && eMax_2/Sumcand < 0.05) {
	//hMC_Jet55_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet55_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet55_data[cBin]->Fill(pfpt_2, weight);
	}
	
      }
      //if(calopt_2/pfpt_2 <= 0.5 && eMax_2/Sumcand >= 0.05) hMC_Jet55_CutA_rej->Fill(pfpt_2, weight);
      //if(calopt_2/pfpt_2 > 0.5 && calopt_2/pfpt_2 <= 0.85 && eMax_2/Sumcand >= ((Float_t)18/7 *(Float_t)calopt_2/pfpt_2 - (Float_t)9/7)) hMC_Jet55_CutA_rej->Fill(pfpt_2, weight);
      
    }
    
    if(jet65_2 == 1 && jet80_2 == 0){
      

      //hMC_Jet65_noCut->Fill(pfpt_2, weight);

      if(calopt_2/pfpt_2 > 0.5 && calopt_2/pfpt_2 <= 0.85 && eMax_2/Sumcand < ((Float_t)18/7 *(Float_t)calopt_2/pfpt_2 - (Float_t)9/7)) {
	//hMC_Jet65_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet65_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet65_data[cBin]->Fill(pfpt_2, weight);
	}
	
      }
      if(calopt_2/pfpt_2 > 0.85) {
	//hMC_Jet65_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet65_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet65_data[cBin]->Fill(pfpt_2, weight);
	}
      }
      if(calopt_2/pfpt_2 <= 0.5 && eMax_2/Sumcand < 0.05) {
	//hMC_Jet65_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet65_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet65_data[cBin]->Fill(pfpt_2, weight);
	}
      }

      //if(calopt_2/pfpt_2 <= 0.5 && eMax_2/Sumcand >= 0.05) hMC_Jet65_CutA_rej->Fill(pfpt_2, weight);
      //if(calopt_2/pfpt_2 > 0.5 && calopt_2/pfpt_2 <= 0.85 && eMax_2/Sumcand >= ((Float_t)18/7 *(Float_t)calopt_2/pfpt_2 - (Float_t)9/7)) hMC_Jet65_CutA_rej->Fill(pfpt_2, weight);

    }

    
    if(jet80_2 == 1){

      //hMC_Jet80_noCut->Fill(pfpt_2, weight);

      if(calopt_2/pfpt_2 > 0.5 && calopt_2/pfpt_2 <= 0.85 && eMax_2/Sumcand < ((Float_t)18/7 *(Float_t)calopt_2/pfpt_2 - (Float_t)9/7)) {
	//hMC_Jet80_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet80_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet80_data[cBin]->Fill(pfpt_2, weight);
	}
      }
      if(calopt_2/pfpt_2 > 0.85) {
	//hMC_Jet80_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet80_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet80_data[cBin]->Fill(pfpt_2, weight);
	}
      }
      if(calopt_2/pfpt_2 <= 0.5 && eMax_2/Sumcand < 0.05) {
	//hMC_Jet80_CutA->Fill(pfpt_2, weight);
	hpbpb_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet80_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet80_data[cBin]->Fill(pfpt_2, weight);
	}
      }
      
      //if(calopt_2/pfpt_2 <= 0.5 && eMax_2/Sumcand >= 0.05) hMC_Jet80_CutA_rej->Fill(pfpt_2, weight);
      //if(calopt_2/pfpt_2 > 0.5 && calopt_2/pfpt_2 <= 0.85 && eMax_2/Sumcand >= ((Float_t)18/7 *(Float_t)calopt_2/pfpt_2 - (Float_t)9/7)) hMC_Jet80_CutA_rej->Fill(pfpt_2, weight);

    }
    
    
  }// mc ntuple loop


  entries = MC_unmatched->GetEntries();
  //entries = 1000;
  // MC loop
  cout<<" looking at unmatched MC ntuple"<<endl;
  for(long nentry = 0; nentry < entries; ++nentry){

    if(nentry%10000 == 0) cout<<" nentry = "<<nentry<<endl;
    MC_unmatched->GetEntry(nentry);

    if(subid_2 != 0) continue;

    Int_t cBin = findBin(hiBin_2);
    if(cBin == -1 || cBin >= nbins_cent) continue;
    
    Float_t Sumcand = chSum_2 + phSum_2 + neSum_2 + muSum_2;

    if(jet55_2 == 1 && jet65_2==0 && jet80_2 == 0){
      
      //hMC_unmatched_Jet55_noCut->Fill(pfrefpt_2, jet55_p_2*weight);
      if(eMax_2/Sumcand < 0.05  ){
	hpbpb_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet55_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet55_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet55_data[cBin]->Fill(pfpt_2, weight);
	}
      }
	//hMC_unmatched_Jet55_CutA->Fill(pfrefpt_2, jet55_p_2*weight);
      //else hMC_unmatched_Jet55_CutA_rej->Fill(pfpt_2, jet55_p_2*weight);
      
    }

    
    if(jet65_2 == 1 && jet80_2 == 0){
      
      //hMC_unmatched_Jet65_noCut->Fill(pfrefpt_2, weight);
      if(eMax_2/Sumcand < 0.05  ){
	hpbpb_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet65_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet65_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet65_data[cBin]->Fill(pfpt_2, weight);
	}
      }
	//hMC_unmatched_Jet65_CutA->Fill(pfrefpt_2, weight);
      //else hMC_unmatched_Jet65_CutA_rej->Fill(pfpt_2);
      
    }

    
    if(jet80_2 == 1){
      
      //hMC_unmatched_Jet80_noCut->Fill(pfrefpt_2, weight);
      if(eMax_2/Sumcand < 0.05  ){
	hpbpb_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	hpbpb_Jet80_reco[cBin]->Fill(pfpt_2, weight);
	hpbpb_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);

	if(nentry%2==0) {
	  hpbpb_mcclosure_matrix_HLT[cBin]->Fill(pfrefpt_2, pfpt_2, weight);
	  hpbpb_mcclosure_Jet80_gen[cBin]->Fill(pfrefpt_2, weight);
	}
	if(nentry%2==1) {
	  hpbpb_mcclosure_Jet80_data[cBin]->Fill(pfpt_2, weight);
	}
      }
	//hMC_unmatched_Jet80_CutA->Fill(pfrefpt_2, weight);
      //else hMC_unmatched_Jet80_CutA_rej->Fill(pfpt_2);
      
    }
    
    
  }// mc unmatched  ntuple loop

#endif

  TFile fout(Form("../../Output/Pawan_ntuple_PbPb_MinBiasData_spectra_JetID_CutA_finebins_%s_R0p%d.root",etaWidth,radius),"RECREATE");
  fout.cd();

#if 0
  for(int i = 0;i<nbins_cent;++i){
    //hpbpb_TrgObjComb[i]->Add(hpbpb_TrgObj80[i]);
    //hpbpb_TrgObjComb[i]->Add(hpbpb_TrgObj65[i]);
    //hpbpb_TrgObjComb[i]->Add(hpbpb_TrgObj55[i]);

#if 0
    hpbpb_mcclosure_JetComb_data[i]->Add(hpbpb_mcclosure_Jet80_data[i]);
    hpbpb_mcclosure_JetComb_data[i]->Add(hpbpb_mcclosure_Jet65_data[i]);
    hpbpb_mcclosure_JetComb_data[i]->Add(hpbpb_mcclosure_Jet55_data[i]);

    hpbpb_mcclosure_JetComb_gen[i]->Add(hpbpb_mcclosure_Jet80_gen[i]);
    hpbpb_mcclosure_JetComb_gen[i]->Add(hpbpb_mcclosure_Jet65_gen[i]);
    hpbpb_mcclosure_JetComb_gen[i]->Add(hpbpb_mcclosure_Jet55_gen[i]);

    hpbpb_JetComb_reco[i]->Add(hpbpb_Jet80_reco[i]);
    hpbpb_JetComb_reco[i]->Add(hpbpb_Jet65_reco[i]);
    hpbpb_JetComb_reco[i]->Add(hpbpb_Jet55_reco[i]);

    hpbpb_JetComb_gen[i]->Add(hpbpb_Jet80_gen[i]);
    hpbpb_JetComb_gen[i]->Add(hpbpb_Jet65_gen[i]);
    hpbpb_JetComb_gen[i]->Add(hpbpb_Jet55_gen[i]);
#endif
  }

#endif 

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

    hpbpb_noTrg[i]->Write();
    hpbpb_TrgObjComb[i]->Write();
    hpbpb_JEC_TrgObjComb[i]->Write();
    hpbpb_Smear_TrgObjComb[i]->Write();
#if 0
    hpbpb_TrgObj80[i]->Write();
    hpbpb_TrgObj65[i]->Write();
    hpbpb_TrgObj55[i]->Write();

    hpbpb_matrix_HLT[i]->Write();
    hpbpb_mcclosure_matrix_HLT[i]->Write();
    hpbpb_mcclosure_JetComb_data[i]->Write();
    hpbpb_mcclosure_Jet80_data[i]->Write();
    hpbpb_mcclosure_Jet65_data[i]->Write();
    hpbpb_mcclosure_Jet55_data[i]->Write();
    hpbpb_mcclosure_JetComb_gen[i]->Write();    
    hpbpb_mcclosure_Jet80_gen[i]->Write();
    hpbpb_mcclosure_Jet65_gen[i]->Write();
    hpbpb_mcclosure_Jet55_gen[i]->Write();

    hpbpb_JetComb_reco[i]->Write();
    hpbpb_Jet80_reco[i]->Write();
    hpbpb_Jet65_reco[i]->Write();
    hpbpb_Jet55_reco[i]->Write();
    hpbpb_JetComb_gen[i]->Write();
    hpbpb_Jet80_gen[i]->Write();
    hpbpb_Jet65_gen[i]->Write();
    hpbpb_Jet55_gen[i]->Write();
#endif
  }

  fout.Close();

  #if 0
  // add the unmatched histograms to the matched ones to get the final cut efficiency
  hData_Jet55_noCut->Add(hData_unmatched_Jet55_noCut);
  hData_Jet65_noCut->Add(hData_unmatched_Jet65_noCut);
  hData_Jet80_noCut->Add(hData_unmatched_Jet80_noCut);
  
  hData_Jet55_CutA->Add(hData_unmatched_Jet55_CutA);
  hData_Jet65_CutA->Add(hData_unmatched_Jet65_CutA);
  hData_Jet80_CutA->Add(hData_unmatched_Jet80_CutA);

  hData_Jet55_CutA_rej->Add(hData_unmatched_Jet55_CutA_rej);
  hData_Jet65_CutA_rej->Add(hData_unmatched_Jet65_CutA_rej);
  hData_Jet80_CutA_rej->Add(hData_unmatched_Jet80_CutA_rej);

  hMC_Jet55_noCut->Add(hMC_unmatched_Jet55_noCut);
  hMC_Jet65_noCut->Add(hMC_unmatched_Jet65_noCut);
  hMC_Jet80_noCut->Add(hMC_unmatched_Jet80_noCut);
  
  hMC_Jet55_CutA->Add(hMC_unmatched_Jet55_CutA);
  hMC_Jet65_CutA->Add(hMC_unmatched_Jet65_CutA);
  hMC_Jet80_CutA->Add(hMC_unmatched_Jet80_CutA);

  hMC_Jet55_CutA_rej->Add(hMC_unmatched_Jet55_CutA_rej);
  hMC_Jet65_CutA_rej->Add(hMC_unmatched_Jet65_CutA_rej);
  hMC_Jet80_CutA_rej->Add(hMC_unmatched_Jet80_CutA_rej);

  

  hData_Jet65_noCut->Write();
  hData_Jet65_CutA->Write();
  // hData_Jet65_CutB->Write();
  TH1F * hData_Jet65_CutA_eff = (TH1F*)hData_Jet65_CutA->Clone("hData_Jet65_CutA_eff");
  hData_Jet65_CutA_eff->Divide(hData_Jet65_noCut);
  hData_Jet65_CutA_eff->Write();
  // TH1F * hData_Jet65_CutB_eff = (TH1F*)hData_Jet65_CutB->Clone("hData_Jet65_CutB_eff");
  // hData_Jet65_CutB_eff->Divide(hData_Jet65_noCut);
  // hData_Jet65_CutB_eff->Write();
  hData_Jet65_CutA_rej->Write();
  // hData_Jet65_CutB_rej->Write();
  TH1F * hData_Jet65_CutA_rej_eff = (TH1F*)hData_Jet65_CutA_rej->Clone("hData_Jet65_CutA_rej_eff");
  hData_Jet65_CutA_rej_eff->Divide(hData_Jet65_noCut);
  hData_Jet65_CutA_rej_eff->Write();
  // hData_Jet65_CutB_rej_eff = (TH1F*)hData_Jet65_CutB_rej->Clone("hData_Jet65_CutB_rej_eff");
  // hData_Jet65_CutB_rej_eff->Divide(hData_Jet65_noCut);
  // hData_Jet65_CutB_rej_eff->Write();

  hData_Jet55_noCut->Write();
  hData_Jet55_CutA->Write();
  // hData_Jet55_CutB->Write();
  TH1F * hData_Jet55_CutA_eff = (TH1F*)hData_Jet55_CutA->Clone("hData_Jet55_CutA_eff");
  hData_Jet55_CutA_eff->Divide(hData_Jet55_noCut);
  hData_Jet55_CutA_eff->Write();
  // TH1F * hData_Jet55_CutB_eff = (TH1F*)hData_Jet55_CutB->Clone("hData_Jet55_CutB_eff");
  // hData_Jet55_CutB_eff->Divide(hData_Jet55_noCut);
  // hData_Jet55_CutB_eff->Write();
  hData_Jet55_CutA_rej->Write();
  // hData_Jet55_CutB_rej->Write();
  TH1F * hData_Jet55_CutA_rej_eff = (TH1F*)hData_Jet55_CutA_rej->Clone("hData_Jet55_CutA_rej_eff");
  hData_Jet55_CutA_rej_eff->Divide(hData_Jet55_noCut);
  hData_Jet55_CutA_rej_eff->Write();
  // hData_Jet55_CutB_rej_eff = (TH1F*)hData_Jet55_CutB_rej->Clone("hData_Jet55_CutB_rej_eff");
  // hData_Jet55_CutB_rej_eff->Divide(hData_Jet55_noCut);
  // hData_Jet55_CutB_rej_eff->Write();

  hData_Jet80_noCut->Write();
  hData_Jet80_CutA->Write();
  //hData_Jet80_CutB->Write();
  TH1F * hData_Jet80_CutA_eff = (TH1F*)hData_Jet80_CutA->Clone("hData_Jet80_CutA_eff");
  hData_Jet80_CutA_eff->Divide(hData_Jet80_noCut);
  hData_Jet80_CutA_eff->Write();
  // TH1F * hData_Jet80_CutB_eff = (TH1F*)hData_Jet80_CutB->Clone("hData_Jet80_CutB_eff");
  // hData_Jet80_CutB_eff->Divide(hData_Jet80_noCut);
  // hData_Jet80_CutB_eff->Write();
  hData_Jet80_CutA_rej->Write();
  // hData_Jet80_CutB_rej->Write();
  TH1F * hData_Jet80_CutA_rej_eff = (TH1F*)hData_Jet80_CutA_rej->Clone("hData_Jet80_CutA_rej_eff");
  hData_Jet80_CutA_rej_eff->Divide(hData_Jet80_noCut);
  hData_Jet80_CutA_rej_eff->Write();
  // hData_Jet80_CutB_rej_eff = (TH1F*)hData_Jet80_CutB_rej->Clone("hData_Jet80_CutB_rej_eff");
  // hData_Jet80_CutB_rej_eff->Divide(hData_Jet80_noCut);
  // hData_Jet80_CutB_rej_eff->Write();
  
  
  hMC_Jet80_noCut->Write();
  hMC_Jet80_CutA->Write();
  // hMC_Jet80_CutB->Write();
  TH1F * hMC_Jet80_CutA_eff = (TH1F*)hMC_Jet80_CutA->Clone("hMC_Jet80_CutA_eff");
  hMC_Jet80_CutA_eff->Divide(hMC_Jet80_noCut);
  hMC_Jet80_CutA_eff->Write();
  // TH1F * hMC_Jet80_CutB_eff = (TH1F*)hMC_Jet80_CutB->Clone("hMC_Jet80_CutB_eff");
  // hMC_Jet80_CutB_eff->Divide(hMC_Jet80_noCut);
  // hMC_Jet80_CutB_eff->Write();
  
  hMC_Jet65_noCut->Write();
  hMC_Jet65_CutA->Write();
  // hMC_Jet65_CutB->Write();
  TH1F * hMC_Jet65_CutA_eff = (TH1F*)hMC_Jet65_CutA->Clone("hMC_Jet65_CutA_eff");
  hMC_Jet65_CutA_eff->Divide(hMC_Jet65_noCut);
  hMC_Jet65_CutA_eff->Write();
  // TH1F * hMC_Jet65_CutB_eff = (TH1F*)hMC_Jet65_CutB->Clone("hMC_Jet65_CutB_eff");
  // hMC_Jet65_CutB_eff->Divide(hMC_Jet65_noCut);
  // hMC_Jet65_CutB_eff->Write();
  
  hMC_Jet55_noCut->Write();
  hMC_Jet55_CutA->Write();
  // hMC_Jet55_CutB->Write();
  TH1F * hMC_Jet55_CutA_eff = (TH1F*)hMC_Jet55_CutA->Clone("hMC_Jet55_CutA_eff");
  hMC_Jet55_CutA_eff->Divide(hMC_Jet55_noCut);
  hMC_Jet55_CutA_eff->Write();
  // TH1F * hMC_Jet55_CutB_eff = (TH1F*)hMC_Jet55_CutB->Clone("hMC_Jet55_CutB_eff");
  // hMC_Jet55_CutB_eff->Divide(hMC_Jet55_noCut);
  // hMC_Jet55_CutB_eff->Write();

  // save the unmatched histograms as well:
  hData_unmatched_Jet80_noCut->Write();
  hData_unmatched_Jet80_CutA->Write();
  hData_unmatched_Jet80_CutA_rej->Write();
  hData_unmatched_Jet65_noCut->Write();
  hData_unmatched_Jet65_CutA->Write();
  hData_unmatched_Jet65_CutA_rej->Write();
  hData_unmatched_Jet55_noCut->Write();
  hData_unmatched_Jet55_CutA->Write();
  hData_unmatched_Jet55_CutA_rej->Write();

  hMC_unmatched_Jet80_noCut->Write();
  hMC_unmatched_Jet80_CutA->Write();
  hMC_unmatched_Jet80_CutA_rej->Write();
  hMC_unmatched_Jet65_noCut->Write();
  hMC_unmatched_Jet65_CutA->Write();
  hMC_unmatched_Jet65_CutA_rej->Write();
  hMC_unmatched_Jet55_noCut->Write();
  hMC_unmatched_Jet55_CutA->Write();
  hMC_unmatched_Jet55_CutA_rej->Write();
  
  
  TCanvas * cJet80_CutEfficiency_Jet80 = new TCanvas("cJet80_CutEfficiency_Jet80","",1000,800);
  cJet80_CutEfficiency_Jet80->Divide(2,1);
  cJet80_CutEfficiency_Jet80->cd(1);

  hData_Jet80_CutA_eff->Rebin(5);
  hData_Jet80_CutA_eff->Scale(1./5);
  hData_Jet80_CutA_eff->SetMarkerColor(kRed);
  hData_Jet80_CutA_eff->SetMarkerStyle(24);
  hData_Jet80_CutA_eff->SetAxisRange(20,600,"X");
  hData_Jet80_CutA_eff->SetAxisRange(0,1.2,"Y");
  hData_Jet80_CutA_eff->SetXTitle(Form("akPu%dPF p_{T}",radius));
  hData_Jet80_CutA_eff->SetTitle("Data");
  hData_Jet80_CutA_eff->SetYTitle("Jet80_Cut efficiency");
  hData_Jet80_CutA_eff->Draw();
  // hData_Jet80_CutB_eff->Rebin(20);
  // hData_Jet80_CutB_eff->Scale(1./20);
  // hData_Jet80_CutB_eff->SetMarkerColor(kBlack);
  // hData_Jet80_CutB_eff->SetMarkerStyle(33);
  // hData_Jet80_CutB_eff->SetAxisRange(20,600,"X");
  // hData_Jet80_CutB_eff->Draw("same");

  cJet80_CutEfficiency_Jet80->cd(2);
  hMC_Jet80_CutA_eff->Rebin(5);
  hMC_Jet80_CutA_eff->Scale(1./5);
  hMC_Jet80_CutA_eff->SetMarkerColor(kRed);
  hMC_Jet80_CutA_eff->SetMarkerStyle(24);
  hMC_Jet80_CutA_eff->SetAxisRange(20,600,"X");
  hMC_Jet80_CutA_eff->SetAxisRange(0,1.2,"Y");
  hMC_Jet80_CutA_eff->SetXTitle(Form("akPu%dPF ref p_{T}",radius));
  hMC_Jet80_CutA_eff->SetTitle("MC");
  hMC_Jet80_CutA_eff->SetYTitle("Jet80_Cut efficiency");
  hMC_Jet80_CutA_eff->Draw();
  // hMC_Jet80_CutB_eff->Rebin(20);
  // hMC_Jet80_CutB_eff->Scale(1./20);
  // hMC_Jet80_CutB_eff->SetMarkerColor(kBlack);
  // hMC_Jet80_CutB_eff->SetMarkerStyle(33);
  // hMC_Jet80_CutB_eff->SetAxisRange(20,600,"X");
  // hMC_Jet80_CutB_eff->Draw("same");

  cJet80_CutEfficiency_Jet80->SaveAs(Form("PbPb_YetkinCuts_Jet80_eMaxSumcand_A_chMaxJtpt_calopfpt_Eff_R0p%d.pdf",radius),"RECREATE");

  // TCanvas * cCutRejection_Jet80 = new TCanvas("cCutRejection_Jet80","",1000,800);

  // hData_Jet80_CutA_rej->Rebin(5);
  // hData_Jet80_CutA_rej->Scale(1./5);
  // hData_Jet80_CutA_rej->SetMarkerColor(kRed);
  // hData_Jet80_CutA_rej->SetMarkerStyle(24);
  // hData_Jet80_CutA_rej->SetAxisRange(20,600,"X");
  // hData_Jet80_CutA_rej->SetAxisRange(0,1.2,"Y");
  // hData_Jet80_CutA_rej->SetXTitle("matched akPu3PF p_{T}");
  // hData_Jet80_CutA_rej->SetTitle("Data");
  // hData_Jet80_CutA_rej->SetYTitle("Jet80_Cut Rejection");
  // hData_Jet80_CutA_rej->Draw();
  // // hData_Jet80_CutB_rej->Rebin(20);
  // // hData_Jet80_CutB_rej->Scale(1./20);
  // // hData_Jet80_CutB_rej->SetMarkerColor(kBlack);
  // // hData_Jet80_CutB_rej->SetMarkerStyle(33);
  // // hData_Jet80_CutB_rej->SetAxisRange(20,600,"X");
  // // hData_Jet80_CutB_rej->Draw("same");

  // cCutRejection_Jet80->SaveAs("PbPb_YetkinCuts_Jet80_eMaxSumcand_A_chMaxJtpt_calopfpt_rejection.pdf","RECREATE");

  TCanvas * cJet55_CutEfficiency_Jet55 = new TCanvas("cJet55_CutEfficiency_Jet55","",1000,800);
  cJet55_CutEfficiency_Jet55->Divide(2,1);
  cJet55_CutEfficiency_Jet55->cd(1);

  hData_Jet55_CutA_eff->Rebin(5);
  hData_Jet55_CutA_eff->Scale(1./5);
  hData_Jet55_CutA_eff->SetMarkerColor(kRed);
  hData_Jet55_CutA_eff->SetMarkerStyle(24);
  hData_Jet55_CutA_eff->SetAxisRange(20,600,"X");
  hData_Jet55_CutA_eff->SetAxisRange(0,1.2,"Y");
  hData_Jet55_CutA_eff->SetXTitle(Form("akPu%dPF p_{T}",radius));
  hData_Jet55_CutA_eff->SetTitle("Data");
  hData_Jet55_CutA_eff->SetYTitle("Jet55_Cut efficiency");
  hData_Jet55_CutA_eff->Draw();
  // hData_Jet55_CutB_eff->Rebin(20);
  // hData_Jet55_CutB_eff->Scale(1./20);
  // hData_Jet55_CutB_eff->SetMarkerColor(kBlack);
  // hData_Jet55_CutB_eff->SetMarkerStyle(33);
  // hData_Jet55_CutB_eff->SetAxisRange(20,600,"X");
  // hData_Jet55_CutB_eff->SetAxisRange(0,1.2,"Y");
  // hData_Jet55_CutB_eff->Draw("same");

  cJet55_CutEfficiency_Jet55->cd(2);
  hMC_Jet55_CutA_eff->Rebin(5);
  hMC_Jet55_CutA_eff->Scale(1./5);
  hMC_Jet55_CutA_eff->SetMarkerColor(kRed);
  hMC_Jet55_CutA_eff->SetMarkerStyle(24);
  hMC_Jet55_CutA_eff->SetAxisRange(20,600,"X");
  hMC_Jet55_CutA_eff->SetAxisRange(0,1.2,"Y");
  hMC_Jet55_CutA_eff->SetXTitle(Form("akPu%dPF ref p_{T}",radius));
  hMC_Jet55_CutA_eff->SetTitle("MC");
  hMC_Jet55_CutA_eff->SetYTitle("Jet55_Cut efficiency");
  hMC_Jet55_CutA_eff->Draw();
  // hMC_Jet55_CutB_eff->Rebin(20);
  // hMC_Jet55_CutB_eff->Scale(1./20);
  // hMC_Jet55_CutB_eff->SetMarkerColor(kBlack);
  // hMC_Jet55_CutB_eff->SetMarkerStyle(33);
  // hMC_Jet55_CutB_eff->SetAxisRange(20,600,"X");
  // hMC_Jet55_CutB_eff->Draw("same");

  cJet55_CutEfficiency_Jet55->SaveAs(Form("PbPb_YetkinCuts_Jet55_noJet65noJet80_eMaxSumcand_A_chMaxJtpt_calopfpt_Eff_including_unmatched_R0p%d.pdf",radius),"RECREATE");

  // TCanvas * cCutRejection_Jet55 = new TCanvas("cCutRejection_Jet55","",1000,800);

  // hData_Jet55_CutA_rej->Rebin(5);
  // hData_Jet55_CutA_rej->Scale(1./5);
  // hData_Jet55_CutA_rej->SetMarkerColor(kRed);
  // hData_Jet55_CutA_rej->SetMarkerStyle(24);
  // hData_Jet55_CutA_rej->SetAxisRange(20,600,"X");
  // hData_Jet55_CutA_rej->SetAxisRange(0,1.2,"Y");
  // hData_Jet55_CutA_rej->SetXTitle("matched akPu3PF p_{T}");
  // hData_Jet55_CutA_rej->SetTitle("Data");
  // hData_Jet55_CutA_rej->SetYTitle("Jet55_Cut Rejection");
  // hData_Jet55_CutA_rej->Draw();
  // // hData_Jet55_CutB_rej->Rebin(20);
  // // hData_Jet55_CutB_rej->Scale(1./20);
  // // hData_Jet55_CutB_rej->SetMarkerColor(kBlack);
  // // hData_Jet55_CutB_rej->SetMarkerStyle(33);
  // // hData_Jet55_CutB_rej->SetAxisRange(20,600,"X");
  // // hData_Jet55_CutB_rej->Draw("same");

  // cCutRejection_Jet55->SaveAs("PbPb_YetkinCuts_Jet55_noJet65noJet80_eMaxSumcand_A_chMaxJtpt_calopfpt_rejection_including_unmatched.pdf","RECREATE");

  TCanvas * cJet65_CutEfficiency_Jet65 = new TCanvas("cJet65_CutEfficiency_Jet65","",1000,800);
  cJet65_CutEfficiency_Jet65->Divide(2,1);
  cJet65_CutEfficiency_Jet65->cd(1);

  hData_Jet65_CutA_eff->Rebin(5);
  hData_Jet65_CutA_eff->Scale(1./5);
  hData_Jet65_CutA_eff->SetMarkerColor(kRed);
  hData_Jet65_CutA_eff->SetMarkerStyle(24);
  hData_Jet65_CutA_eff->SetAxisRange(20,600,"X");
  hData_Jet65_CutA_eff->SetAxisRange(0,1.2,"Y");
  hData_Jet65_CutA_eff->SetXTitle(Form("matched akPu%dPF p_{T}",radius));
  hData_Jet65_CutA_eff->SetTitle("Data");
  hData_Jet65_CutA_eff->SetYTitle("Jet65_Cut efficiency");
  hData_Jet65_CutA_eff->Draw();
  // hData_Jet65_CutB_eff->Rebin(20);
  // hData_Jet65_CutB_eff->Scale(1./20);
  // hData_Jet65_CutB_eff->SetMarkerColor(kBlack);
  // hData_Jet65_CutB_eff->SetMarkerStyle(33);
  // hData_Jet65_CutB_eff->SetAxisRange(20,600,"X");
  // hData_Jet65_CutB_eff->Draw("same");

  cJet65_CutEfficiency_Jet65->cd(2);
  hMC_Jet65_CutA_eff->Rebin(5);
  hMC_Jet65_CutA_eff->Scale(1./5);
  hMC_Jet65_CutA_eff->SetMarkerColor(kRed);
  hMC_Jet65_CutA_eff->SetMarkerStyle(24);
  hMC_Jet65_CutA_eff->SetAxisRange(20,600,"X");
  hMC_Jet65_CutA_eff->SetAxisRange(0,1.2,"Y");
  hMC_Jet65_CutA_eff->SetXTitle(Form("matched akPu%dPF ref p_{T}",radius));
  hMC_Jet65_CutA_eff->SetTitle("MC");
  hMC_Jet65_CutA_eff->SetYTitle("Jet65_Cut efficiency");
  hMC_Jet65_CutA_eff->Draw();
  // hMC_Jet65_CutB_eff->Rebin(20);
  // hMC_Jet65_CutB_eff->Scale(1./20);
  // hMC_Jet65_CutB_eff->SetMarkerColor(kBlack);
  // hMC_Jet65_CutB_eff->SetMarkerStyle(33);
  // hMC_Jet65_CutB_eff->SetAxisRange(20,600,"X");
  // hMC_Jet65_CutB_eff->Draw("same");

  cJet65_CutEfficiency_Jet65->SaveAs(Form("PbPb_YetkinCuts_Jet65_noJet80_eMaxSumcand_A_chMaxJtpt_calopfpt_Eff_including_unmatched_R0p%d.pdf",radius),"RECREATE");

  // TCanvas * cCutRejection_Jet65 = new TCanvas("cCutRejection_Jet65","",1000,800);

  // hData_Jet65_CutA_rej->Rebin(5);
  // hData_Jet65_CutA_rej->Scale(1./5);
  // hData_Jet65_CutA_rej->SetMarkerColor(kRed);
  // hData_Jet65_CutA_rej->SetMarkerStyle(24);
  // hData_Jet65_CutA_rej->SetAxisRange(20,600,"X");
  // hData_Jet65_CutA_rej->SetAxisRange(0, 1.2,"Y");
  // hData_Jet65_CutA_rej->SetXTitle("matched akPu3PF p_{T}");
  // hData_Jet65_CutA_rej->SetTitle("Data");
  // hData_Jet65_CutA_rej->SetYTitle("Jet65_Cut Rejection");
  // hData_Jet65_CutA_rej->Draw();
  // // hData_Jet65_CutB_rej->Rebin(20);
  // // hData_Jet65_CutB_rej->Scale(1./20);
  // // hData_Jet65_CutB_rej->SetMarkerColor(kBlack);
  // // hData_Jet65_CutB_rej->SetMarkerStyle(33);
  // // hData_Jet65_CutB_rej->SetAxisRange(20,600,"X");
  // // hData_Jet65_CutB_rej->Draw("same");

  // cCutRejection_Jet65->SaveAs("PbPb_YetkinCuts_Jet65_noJet80_eMaxSumcand_A_chMaxJtpt_calopfpt_rejection_including_unmatched.pdf","RECREATE");


  // plot the trigger combination from this, and the total cut efficiency:
  
  TH1F * hData_Jet80 = (TH1F*)hData_Jet80_CutA->Clone("hData_Jet80");
  TH1F * hData_Jet65 = (TH1F*)hData_Jet65_CutA->Clone("hData_Jet65");
  TH1F * hData_Jet55 = (TH1F*)hData_Jet55_CutA->Clone("hData_Jet55");

  TH1F * hData_Combined = (TH1F*)hData_Jet80->Clone("hData_Combined");
  hData_Combined->Add(hData_Jet65);
  hData_Combined->Add(hData_Jet55);

  hData_Combined->Print("base");
  
  TH1F * hData_noCut_Jet80 = (TH1F*)hData_Jet80_noCut->Clone("hData_noCut_Jet80");
  TH1F * hData_noCut_Jet65 = (TH1F*)hData_Jet65_noCut->Clone("hData_noCut_Jet65");
  TH1F * hData_noCut_Jet55 = (TH1F*)hData_Jet55_noCut->Clone("hData_noCut_Jet55");

  TH1F * hData_noCut_Combined = (TH1F*)hData_noCut_Jet80->Clone("hData_noCut_Combined");
  hData_noCut_Combined->Add(hData_noCut_Jet65);
  hData_noCut_Combined->Add(hData_noCut_Jet55);
  
  hData_noCut_Combined->Print("base");
  
  TH1F * hMC_Jet80 = (TH1F*)hMC_Jet80_CutA->Clone("hMC_Jet80");
  TH1F * hMC_Jet65 = (TH1F*)hMC_Jet65_CutA->Clone("hMC_Jet65");
  TH1F * hMC_Jet55 = (TH1F*)hMC_Jet55_CutA->Clone("hMC_Jet55");

  TH1F * hMC_Combined = (TH1F*)hMC_Jet80->Clone("hMC_Combined");
  hMC_Combined->Add(hMC_Jet65);
  hMC_Combined->Add(hMC_Jet55);

  hMC_Combined->Print("base");
  
  TH1F * hMC_noCut_Jet80 = (TH1F*)hMC_Jet80_noCut->Clone("hMC_noCut_Jet80");
  TH1F * hMC_noCut_Jet65 = (TH1F*)hMC_Jet65_noCut->Clone("hMC_noCut_Jet65");
  TH1F * hMC_noCut_Jet55 = (TH1F*)hMC_Jet55_noCut->Clone("hMC_noCut_Jet55");

  TH1F * hMC_noCut_Combined = (TH1F*)hMC_noCut_Jet80->Clone("hMC_noCut_Combined");
  hMC_noCut_Combined->Add(hMC_noCut_Jet65);
  hMC_noCut_Combined->Add(hMC_noCut_Jet55);

  hMC_noCut_Combined->Print("base");
  
  TH1F * hData_Combined_Efficiency = (TH1F*)hData_Combined->Clone("hData_Combined_Efficiency");
  hData_Combined_Efficiency->Divide(hData_noCut_Combined);
  hData_Combined_Efficiency->Print("base");
  
  TH1F * hMC_Combined_Efficiency = (TH1F*)hMC_Combined->Clone("hMC_Combined_Efficiency");
  hMC_Combined_Efficiency->Divide(hMC_noCut_Combined);
  hMC_Combined_Efficiency->Print("base");
  
  TCanvas * cCombinedEff = new TCanvas("cCombinedEff","",800,600);
  hData_Combined_Efficiency->SetXTitle("Jet p_{T}");
  hData_Combined_Efficiency->SetYTitle("Combined Jet ID cut efficiency");
  hData_Combined_Efficiency->SetMarkerStyle(20);
  hData_Combined_Efficiency->SetMarkerColor(kBlack);
  hData_Combined_Efficiency->Rebin(10);
  hData_Combined_Efficiency->Scale(1/10);
  hData_Combined_Efficiency->SetAxisRange(30,350,"X");
  hData_Combined_Efficiency->Draw();
  
  hMC_Combined_Efficiency->SetMarkerStyle(24);
  hMC_Combined_Efficiency->SetMarkerColor(kRed);
  hMC_Combined_Efficiency->Rebin(10);
  hMC_Combined_Efficiency->Scale(1/10);
  hMC_Combined_Efficiency->Draw("same");

  cCombinedEff->SaveAs(Form("Combined_trigger_efficiency_YetkinCut_R0p%d.pdf",radius),"RECREATE");
  
  TCanvas * cTriggerCombination = new TCanvas("cTriggerCombination","",800,600);
  cTriggerCombination->SetLogy();

  hData_Combined->SetMarkerColor(kBlack);
  hData_Combined->SetMarkerStyle(25);
  hData_Combined->SetAxisRange(30,350,"X");
  //hData_Combined->SetXTitle("");
  //hData_Combined->Draw();

  hData_Jet80->SetMarkerColor(kRed);
  hData_Jet80->SetMarkerStyle(20);
  hData_Jet80->Draw("same");
  
  hData_Jet65->SetMarkerColor(kBlue);
  hData_Jet65->SetMarkerStyle(20);
  hData_Jet65->Draw("same");

  hData_Jet55->SetMarkerColor(kGreen);
  hData_Jet55->SetMarkerStyle(20);
  hData_Jet55->Draw("same");

  //drawText()

  cTriggerCombination->SaveAs(Form("TriggerCombination_YetkinCuts_R0p%d.pdf",radius),"RECREATE");

  #endif


}