Пример #1
0
void compIsol(int varnum)
{
  TString varname, vartitle;
  if(varnum==1) {
    varname="hHEIsoPt";
    vartitle="H/E Isolation";
  }
  if(varnum==2) {
    varname="hHcalIsoPt";
    vartitle="HCAL Isolation";
  }
  if(varnum==3) {
    varname="hEcalIsoPt";
    vartitle="ECAL Isolation";
  }
  if(varnum==4) {
    varname="hTrkIsoPt";
    vartitle="Track Isolation";
  }
  if(varnum==5) {
    varname="hJetEt";
    vartitle="Jet E_{T} [GeV]";
  }
  if(varnum==6) {
    varname="hNJets";
    vartitle="Number of Jets";
  }
  
  
  TH1D* hBorn;
  TH1D* hADD;
  if(varnum<=4) {
    TH2D* hBorn2d = dynamic_cast<TH2D*>(GetPlot(1, varname));
    TH2D* hADD2d = dynamic_cast<TH2D*>(GetPlot(3, varname));
    hBorn = hBorn2d->ProjectionX(varname+"born");
    hADD = hADD2d->ProjectionX(varname+"add");
    cout << "asdf" << endl;
  } else {
    hBorn = dynamic_cast<TH1D*>(GetPlot(1, varname));
    hADD = dynamic_cast<TH1D*>(GetPlot(3, varname));
  }
  
  hBorn->Scale(1/hBorn->GetSumOfWeights());
  hADD->Scale(1/hADD->GetSumOfWeights());

  hBorn->SetLineColor(kBlue+2);
  hADD->SetLineColor(kCyan+4);
  hBorn->SetFillColor(0);
  hADD->SetFillColor(0);
  hBorn->SetLineStyle(1);
  hADD->SetLineStyle(2);
  
  //  hBorn->SetStats(0);
  //  hADD->SetStats(0);

  gPad->SetLogy(1);
  
  hBorn->GetXaxis()->SetTitle(vartitle);
  hBorn->GetYaxis()->SetTitle("Normalized Units");
  hBorn->SetTitle("Leading Photons in Pythia/Sherpa Samples");

  hBorn->Draw();
  hADD->Draw("sames");

  hBorn->SetMaximum(1);

  gPad->Update();
  TPaveStats *st1=(TPaveStats*)hBorn->GetListOfFunctions()->FindObject("stats");
  TPaveStats *st2=(TPaveStats*)hADD->GetListOfFunctions()->FindObject("stats");
  st1->SetName("Born");
  st2->SetName("ADD");
  st1->SetOptStat(101100);
  st2->SetOptStat(101100);
  st1->SetX1NDC(.25);
  st1->SetX2NDC(.55);
  st1->SetY1NDC(.56);
  st1->SetY2NDC(.80);
  st2->SetX1NDC(.56);
  st2->SetX2NDC(.86);
  st2->SetY1NDC(.56);
  st2->SetY2NDC(.80);

  TLegend* leg=new TLegend(.25,.78,.55,.85);
  leg->AddEntry(hBorn, "Pythia (Born)", "l");
  leg->SetBorderSize(0);
  leg->SetFillColor(0);
  leg->SetTextSize(0.045);
  leg->Draw();

  TLegend* leg=new TLegend(.56,.78,.86,.85);
  leg->AddEntry(hADD, "Sherpa (ADD)", "l");
  leg->SetBorderSize(0);
  leg->SetFillColor(0);
  leg->SetTextSize(0.045);
  leg->Draw();

  gPad->Update();
  

  return;
}
Пример #2
0
void combinedFit() {

  TH1D * hB = new TH1D("hB","histo B",100,0,100);
  TH1D * hSB = new TH1D("hSB","histo S+B",100, 0,100);

  TF1 * fB = new TF1("fB","expo",0,100);
  fB->SetParameters(1,-0.05);
  hB->FillRandom("fB");

  TF1 * fS = new TF1("fS","gaus",0,100);
  fS->SetParameters(1,30,5);

  hSB->FillRandom("fB",2000);
  hSB->FillRandom("fS",1000);

  // perform now global fit

  TF1 * fSB = new TF1("fSB","expo + gaus(2)",0,100);

  ROOT::Math::WrappedMultiTF1 wfB(*fB,1);
  ROOT::Math::WrappedMultiTF1 wfSB(*fSB,1);

  ROOT::Fit::DataOptions opt;
  ROOT::Fit::DataRange rangeB;
  // set the data range
  rangeB.SetRange(10,90);
  ROOT::Fit::BinData dataB(opt,rangeB);
  ROOT::Fit::FillData(dataB, hB);

  ROOT::Fit::DataRange rangeSB;
  rangeSB.SetRange(10,50);
  ROOT::Fit::BinData dataSB(opt,rangeSB);
  ROOT::Fit::FillData(dataSB, hSB);

  ROOT::Fit::Chi2Function chi2_B(dataB, wfB);
  ROOT::Fit::Chi2Function chi2_SB(dataSB, wfSB);

  GlobalChi2 globalChi2(chi2_B, chi2_SB);

  ROOT::Fit::Fitter fitter;

  const int Npar = 6;
  double par0[Npar] = { 5,5,-0.1,100, 30,10};

  // create before the parameter settings in order to fix or set range on them
  fitter.Config().SetParamsSettings(6,par0);
  // fix 5-th parameter
  fitter.Config().ParSettings(4).Fix();
  // set limits on the third and 4-th parameter
  fitter.Config().ParSettings(2).SetLimits(-10,-1.E-4);
  fitter.Config().ParSettings(3).SetLimits(0,10000);
  fitter.Config().ParSettings(3).SetStepSize(5);

  fitter.Config().MinimizerOptions().SetPrintLevel(0);
  fitter.Config().SetMinimizer("Minuit2","Migrad");

  // fit FCN function directly
  // (specify optionally data size and flag to indicate that is a chi2 fit)
  fitter.FitFCN(6,globalChi2,0,dataB.Size()+dataSB.Size(),true);
  ROOT::Fit::FitResult result = fitter.Result();
  result.Print(std::cout);

  TCanvas * c1 = new TCanvas("Simfit","Simultaneous fit of two histograms",
                             10,10,700,700);
  c1->Divide(1,2);
  c1->cd(1);
  gStyle->SetOptFit(1111);

  fB->SetFitResult( result, iparB);
  fB->SetRange(rangeB().first, rangeB().second);
  fB->SetLineColor(kBlue);
  hB->GetListOfFunctions()->Add(fB);
  hB->Draw();

  c1->cd(2);
  fSB->SetFitResult( result, iparSB);
  fSB->SetRange(rangeSB().first, rangeSB().second);
  fSB->SetLineColor(kRed);
  hSB->GetListOfFunctions()->Add(fSB);
  hSB->Draw();


}
Пример #3
0
void plot_xtalE(){

    gStyle->SetOptStat(0);
    gStyle->SetOptFit(0);
    gStyle->SetTitleSize(0.08,"t");

    // a list of runs corresponding to xtal0 to xtal53
    int runlist[54] = {3295,3296,3297,3369,3300,3301,3302,3303,3368,
	3244,3245,3246,3247,3248,3249,3250,3251,3252,
	3240,3239,3238,3237,3236,3235,3232,3234,3233,
	3267,3266,3265,3263,3258,3257,3256,3254,3253,
	3268,3272,3274,3275,3276,3277,3278,3281,3283,
	3294,3293,3292,3289,3288,3287,3286,3285,3284};

    //    for(int i=0;i<54;i++){
    //	runlist[i] = 3305;
    //   }

    ofstream outfile("energycalibration.fcl");
    TCanvas *c1 = new TCanvas("c1","c1",1800,1200);
    TH2D *xtalEnergy = new TH2D("xtalEnergy","xtalEnergy",9,0,9,6,0,6);

    outfile << "// constants from runs" <<endl;;

    for(int i=0;i<54;i++){
	outfile <<  runlist[i]  <<  " ";
	if(i%9==8 && i!=53) {
	    outfile << endl;
	    outfile << "// ";}
    } 

    outfile << "\nBEGIN_PROLOG" << endl;
    outfile << "xtal_energy_response: {" << endl;

    double mean[54];
    double rms[54];
    double norm[54];
    double index[54];

    c1->Divide(9,6);

    for(int i=0;i<54;i++){
	index[i]=i;
	c1->cd(54-i);
	c1->cd(54-i)->SetLogz();

	//if(i==3 || i==8 || i==9) continue; // these are runs where the beams are at the wrong place

	TFile *file = new TFile(Form("run%d.root",runlist[i]));

	TH2D *beamEnergy2D = (TH2D*)file->Get("beamEnergy2D");
	beamEnergy2D->Draw("colz text");
	beamEnergy2D->SetMarkerSize(1);
	beamEnergy2D->SetMaximum(3000);
	beamEnergy2D->SetMinimum(1);
	beamEnergy2D->SetTitle(Form("Run %d",runlist[i]));


	double maxE = beamEnergy2D->GetMaximum();
	int maxBin = beamEnergy2D->GetMaximumBin();
	int x,y,z;
	beamEnergy2D->GetBinXYZ(maxBin,x,y,z);
	cout<<x<<" "<<y<<" "<<z<<" "<<(y-1)*9+9-x<<endl;
	int xtalNum = (y-1)*9+9-x; 

	TH1D *beamEnergy = (TH1D*)file->Get(Form("beamEnergy%02d",xtalNum));
	TH1D *beamTime = (TH1D*)file->Get(Form("beamTime%02d",xtalNum));
	TH1D *beamTimeEnergy = (TH1D*)file->Get(Form("beamTimeEnergy%02d",xtalNum));
	TH1D *syncEnergy = (TH1D*)file->Get(Form("syncEnergy%02d",xtalNum));

	beamEnergy->Draw();
	TF1 *fit = new TF1("fit","gaus(0)",1500,2800);
	fit->SetParLimits(1,1700,2500);
	fit->SetParLimits(2,50,150);
	fit->SetParameters(100,2100,100);
	beamEnergy->Fit("fit","REM");


	norm[i]=fit->GetParameter(0);    
	mean[i]=fit->GetParameter(1);    
	rms[i]=fit->GetParameter(2);    

	TF1 *refit = new TF1("refit","gaus(0)",mean[i]-2*rms[i], mean[i]+2*rms[i]);
	refit->SetParameters(norm[i],mean[i],rms[i]);
	beamEnergy->Fit("refit","REM");

	norm[i]=refit->GetParameter(0);    
	mean[i]=refit->GetParameter(1);    
	rms[i]=refit->GetParameter(2);    

        outfile << Form("xtal%d : %f",i,mean[i]) << endl;

	xtalEnergy->Fill(8-i%9,i/9,mean[i]);

	TText *text = new TText(0.15,0.75,Form("E%d=%.1f",xtalNum,mean[i]));
	text->SetTextSize(0.09);
	text->SetTextColor(2);
	text->SetNDC();
	beamEnergy->GetListOfFunctions()->Add(text);
    }


    outfile << "}" << endl;
    outfile << "END_PROLOG" << endl;

    TCanvas *c2 = new TCanvas("c2","c2",900,600);
    xtalEnergy->Draw("colz text");
    xtalEnergy->SetMarkerSize(1.5);
    xtalEnergy->SetMaximum(2500);
    xtalEnergy->SetMinimum(1700);

    TCanvas *c3 = new TCanvas("c3","c3",900,600);
    TGraph *g1 = new TGraph(54,index,mean);
    g1->SetMarkerStyle(20);
    g1->Draw("AP");

    double avg=0;

    for(int i=0;i<54;i++){
	if(mean[i]>0){
	    avg += mean[i]/54.;
	}
    }

    cout<<avg<<endl;

    TLine *linem5 = new TLine(0,0.95*avg,54,0.95*avg);
    TLine *linep5 = new TLine(0,1.05*avg,54,1.05*avg);
    linem5->SetLineWidth(2);
    linem5->SetLineStyle(7);
    linem5->SetLineColor(2);
    linep5->SetLineWidth(2);
    linep5->SetLineColor(2);
    linep5->SetLineStyle(7);
    linem5->Draw("same");
    linep5->Draw("same");

    TLine *line1 = new TLine(0,0.9*avg,54,0.9*avg);
    line1->SetLineWidth(2);
    line1->SetLineColor(4);
    line1->Draw("same");


    TLine *line2 = new TLine(0,1.1*avg,54,1.1*avg);
    line2->SetLineWidth(2);
    line2->SetLineColor(4);
    line2->Draw("same");

    TLegend *leg = new TLegend(0.7,0.1,0.9,0.3);
    leg->AddEntry(linem5,"#pm 5%","l");
    leg->AddEntry(line1,"#pm 10%","l");
    leg->Draw();

}