TProfile* overlayTProfiles(TH2F* hdata, TH2F* hdy, float ymin, float ymax, TString savename) { // See how the mean of the dimumass changes vs some variable by making TProfiles of a 2D histogram with the Dimu mass as the y axis. // Compare data to MC and save the results as png files. TString dataname = TString("Golden_JSON_DoubleMuon_Data"); TString dyname = TString("Drell_Yan_Monte_Carlo_2015"); // Make TProfiles from them to see how the mean changes vs the x variable. TProfile* pdata = hdata->ProfileX(); pdata->SetLineColor(1); pdata->SetLineWidth(3); pdata->SetTitle(hdata->GetTitle()); pdata->GetYaxis()->SetTitle(hdata->GetYaxis()->GetTitle()); TProfile* pdy = hdy->ProfileX(); pdy->SetLineColor(2); pdy->SetLineWidth(3); pdy->SetTitle(hdy->GetTitle()); pdy->GetYaxis()->SetTitle(hdy->GetYaxis()->GetTitle()); std::cout<< "hdata: " << hdata << std::endl; std::cout<< "hdy: " << hdy << std::endl; std::cout<< "pdata: " << pdata << std::endl; std::cout<< "pdy: " << pdy << std::endl; TCanvas* c = new TCanvas(); c->SetGridx(kTRUE); c->SetGridy(kTRUE); // Draw data and MC on the same plot // Have to draw the same plots twice to get error bars and a curve through the error bars. c->cd(); // hdata->Draw("colz"); pdata->SetAxisRange(ymin,ymax,"Y"); pdata->Draw("hist c"); pdata->Draw("E X0 same"); pdy->Draw("hist c same"); pdy->Draw("E X0 same"); // Stat box alignment DiMuPlottingSystem* dps = new DiMuPlottingSystem(); dps->arrangeStatBox(c); // Legend TLegend* l = new TLegend(0.15, 0.15, 0.7, 0.25, "", "brNDC"); l->AddEntry(pdata, dataname, "l"); l->AddEntry(pdy, dyname, "l"); l->Draw("same"); c->Print(savename); return pdata; }
void flavor_ana(int doMC=1, const char * JecType = "abs", const char * inFile0Name="../outputs/jetSkimRelValQCD_Pt_80_120_sw354-JEC_Summer09_7TeV_ReReco332.root", const char * inFile1Name="djtree_JEC_Summer09_7TeV_ReReco332.root") { // Define Inputs cout << "======= Inputs: ========" << endl; //cout << "Inclusive jets: " << inFile0Name << endl; //cout << "Dijets: " << inFile1Name << endl; //TFile * inFile0 = new TFile(inFile0Name); //TFile * inFile1 = new TFile(inFile1Name); TFile * inFile0 = new TFile("../outputs/jetSkimRelValQCD_Pt_80_120_sw354-JEC_Summer09_7TeV_ReReco332.root"); TFile * inFile1 = new TFile(Form("djtree_JEC_Summer09_7TeV_ReReco332_%s.root",JecType)); TTree * Events; inFile0->GetObject("Events",Events); TTree * djtree; inFile1->GetObject("djtree",djtree); aliases(Events); // === Dijets === cout << endl << "================ dijets ==============" << endl; Int_t numPreSelEvtl = djtree->GetEntries("vz>-99"); cout << "Events:" << endl; cout << "- with none-fake vtx: " << numPreSelEvtl << endl; // - selection - TCut evtSelDj("nlpet>80 && nlpet<120 && alpet>80 && jdphi>2.8"); TCut evtSelDj2("nlpet>80 && nlpet<120 && alpet>80 && jdphi>3.0"); Int_t numSelEvt1 = djtree->GetEntries(evtSelDj); cout << "- Passing sel: " << numSelEvt1 << endl; Int_t numSelEvt2 = djtree->GetEntries(evtSelDj2); cout << "- Passing diphi sel: " << numSelEvt2 << endl; // === flavor studies === TProfile * hNrJFlav = new TProfile("hNrJFlav","flavor",10,85,110); hNrJFlav->SetMarkerColor(kRed); hNrJFlav->SetLineColor(kRed); hNrJFlav->SetMarkerStyle(kOpenCircle); hNrJFlav->SetMinimum(0.); hNrJFlav->SetMaximum(0.7); hNrJFlav->SetTitle(";p_{T}^{gen jet};q jet fraction"); TProfile * hAwJFlav = (TProfile*)hNrJFlav->Clone("hAwJFlav"); hAwJFlav->SetMarkerColor(kBlue); hAwJFlav->SetLineColor(kBlue); TCanvas * cJFlav = new TCanvas("cJFlav","cJFlav",500,500); TCut matParton("nlpstat>-99&&alpstat>-99"); djtree->Draw("(abs(nlpid)<6):nlpet>>hNrJFlav",evtSelDj&&matParton,"prof"); djtree->Draw("(abs(alpid)<6):alpet>>hAwJFlav",evtSelDj&&matParton,"prof same"); TLegend *leg2 = new TLegend(0.605,0.216,0.905,0.369,NULL,"brNDC"); leg2->SetFillColor(0); leg2->SetBorderSize(0); leg2->SetTextSize(0.03); leg2->AddEntry(hNrJFlav,"Di-Jets, Near Jet","p"); leg2->AddEntry(hAwJFlav,"Di-Jets, Away Jet","p"); leg2->Draw(); cJFlav->Print("plots/cDJFlavor.gif"); }
//------------------------------------------------------------// // Get TProfile //------------------------------------------------------------// TProfile* getProfile(TFile* file, TString pname, TString xtitle, TString ytitle, int color, int marker) { TProfile* prof = (TProfile*) (file->Get(pname.Data())->Clone(Form("%s_%i",pname.Data(),color))); prof->GetXaxis()->SetTitle(xtitle.Data()); prof->GetYaxis()->SetTitle(ytitle.Data()); prof->SetMarkerStyle(marker); prof->SetMarkerColor(color); //prof->SetMarkerSize(0.5); prof->SetLineColor(color); prof->SetTitle(""); prof->SetStats(0); prof->GetYaxis()->SetTitleOffset(1.5); return prof; }
void Fake100PeVShower(int opt) { // opt == 0 implies save to root file // opt == 1 implies plot and save to canvas TFile* file = NULL; TCanvas* c = NULL; if(opt == 0) file = new TFile("fake100PeVShower.root","recreate"); if(opt == 1) c = makeCanvas("c"); TString gaus = "1.5e7*TMath::Exp(-(pow(x-10,2)/9))"; TString bump = "5e6*TMath::Exp(-(pow(x-17,2)/20))"; TF1* f = new TF1("f",(gaus+"+"+bump).Data(),0,30); int nbins = 3000; float xmin = 0; float xmax = 30; TProfile* prof = new TProfile("prof","",nbins,xmin,xmax); prof->SetStats(0); prof->SetTitle(""); prof->GetYaxis()->SetTitle("Charge excess / 1e7"); prof->GetXaxis()->SetTitle("z [m]"); float step = xmax / nbins; for(int i =0; i<nbins; ++i){ float x = step * i; if(opt == 1 ) prof->Fill(x, f->Eval(x)/1e7); else prof->Fill(x, f->Eval(x)); } if(opt == 1){ prof->Draw(); c->SaveAs("JaimeCheck/FakeProfile100PeV.png"); } if(opt == 0){ file->Write(); file->Close(); } }
void drawOutputOfBensNumberZeroedChannel16BH(){ // gStyle->SetOptStat("mre"); auto cOld = new TChain("angResTree"); // cOld->Add("januaryTests/photogrammetryNumbers/generateAngularResolutionTreePlots_3*.root"); cOld->Add("januaryTests/photogrammetryNumbersZeroedChannel16BH_cosminV3Trees/generateAngularResolutionTreePlots_3*.root"); auto cNew = new TChain("angResTree"); cNew->Add("januaryTests/bensNumbersZeroedChannel16BH_cosminV3Trees/generateAngularResolutionTreePlots_3*.root"); const Int_t numVars = 2; TString drawVars[numVars] = {"deltaPhiDeg", "deltaThetaDeg"}; TString varNames[numVars] = {"#delta#phi", "#delta#theta"}; for(int varInd=0; varInd < numVars; varInd++){ auto c1 = new TCanvas(); const Int_t numPhiBins = 128; TProfile* hProfOld = new TProfile("hProfOld", "Photogrammetry", numPhiBins, 0, 360); TH1D* hOld = new TH1D("hOld", "Photogrammetry", numPhiBins/2, -5, 5); TString drawCommandOld = TString::Format("%s:phiExpected>>hProfOld", drawVars[varInd].Data()); cOld->Draw(drawCommandOld, "TMath::Abs(deltaPhiDeg) < 5", "goff"); TString drawCommandOld2 = TString::Format("%s>>hOld", drawVars[varInd].Data()); cOld->Draw(drawCommandOld2, "TMath::Abs(deltaPhiDeg) < 5", "goff"); hProfOld->SetLineColor(kBlue); hOld->SetLineColor(kBlue); TProfile* hProfNew = new TProfile("hProfNew", "Ben's numbers", numPhiBins, 0, 360); TH1D* hNew = new TH1D("hNew", "Ben's numbers", numPhiBins/2, -5, 5); TString drawCommandNew = TString::Format("%s:phiExpected>>hProfNew", drawVars[varInd].Data()); cNew->Draw(drawCommandNew, "TMath::Abs(deltaPhiDeg) < 5", "goff"); TString drawCommandNew2 = TString::Format("%s>>hNew", drawVars[varInd].Data()); cNew->Draw(drawCommandNew2, "TMath::Abs(deltaPhiDeg) < 5", "goff"); hProfNew->SetLineColor(kRed); hNew->SetLineColor(kRed); hProfNew->Draw(); hProfOld->Draw("same"); // hProfOld->Draw(); // hProfNew->Draw("same"); auto l = c1->BuildLegend(); l->Draw(); // TH1D* hs[2] = {hOld, hNew}; TH1D* hs[2] = {hNew, hOld}; TCanvas* c2 = RootTools::drawHistsWithStatsBoxes(2, hs, "", "mre"); auto l2 = c2->BuildLegend(); l2->Draw(); hProfNew->SetTitle("Comparison of WAIS divide photogrammetry vs. Ben's numbers "+varNames[varInd]+" ; Expected #phi (Degrees); " + varNames[varInd] + " (Degrees)"); hProfOld->SetTitle("Comparison of WAIS divide photogrammetry vs. Ben's numbers "+varNames[varInd]+" ; Expected #phi (Degrees); " + varNames[varInd] + " (Degrees)"); c1->Update(); hOld->SetTitle("Comparison of WAIS divide pulses "+varNames[varInd]+", photogrammetry vs. Ben's numbers;"+varNames[varInd]+" (Degrees); Events/bin"); hNew->SetTitle("Comparison of WAIS divide pulses "+varNames[varInd]+", photogrammetry vs. Ben's numbers;"+varNames[varInd]+" (Degrees); Events/bin"); c2->Update(); } }
void draw_clouds_profiles() { // gROOT->ProcessLine(".L ../utils.C"); // gROOT->ProcessLine(".L AliLRCFit.cxx"); TFile *f[8]; // f[0] = new TFile( "output_classesByV0M_LHC10h.root" ); // f[0] = new TFile( "output_classesByV0M_LHC10h_c10_5_1.root" ); f[0] = new TFile( "output_classesByV0M_LHC10h_c10_5_25_1_05.root" ); // f[0] = new TFile( "output_classesByV0M_LHC11h_FemtoPlus_c10_5_CUT_OUTLIERS.root" ); // f[0] = new TFile( "output_classesByV0M_LHC15o_fieldMM_c10_5_CUT_OUTLIERS.root" ); // f[0] = new TFile( "output_classesByV0M_LHC15o_fieldPP_c10_5_CUT_OUTLIERS.root" ); // const int nCW = 2; //nCentrWidths // const double cWidths[nCW] = { 10, 5 }; //width of the centrality bins // const double cStep[nCW] = { 5, 2.5 }; //centrality bins step // const int nCentrBins[nCW] = { 17, 35 }; //n centrality bins // const int nCW = 3; //nCentrWidths // const double cWidths[nCW] = { 10, 5, 1.0 }; //width of the centrality bins // const double cStep[nCW] = { 5, 2.5, 1.0 }; //centrality bins step // const int nCentrBins[nCW] = { 17, 35, 90 }; //n centrality bins // const int nCW = 4; //nCentrWidths // const double cWidths[nCW] = { 10, 5, 1.0, 0.5 }; //width of the centrality bins // const double cStep[nCW] = { 5, 2.5, 1.0, 1.0 }; //centrality bins step // const int nCentrBins[nCW] = { 17, 35, 90, 90 }; //n centrality bins const int nCW = 5; //nCentrWidths const double cWidths[nCW] = { 10, 5, 2.5, 1.0, 0.5 }; //width of the centrality bins const double cStep[nCW] = { 5, 2.5, 2.5, 1.0, 1.0 }; //centrality bins step const int nCentrBins[nCW] = { 17, 35, 36, 90, 90 }; //n centrality bins TH2D *hist2D;//[200][3]; TProfile *profile;//[200][3]; int cW = 2; int etaW = 1; int phiW = 0; const int kCorrType = 1; //0-NN, 1-PtPt, 2-PtN TCanvas *canv_tmp_for_fit = new TCanvas("canv_tmp_for_fit","canv_tmp_for_fit",50,50,300,300 ); TCanvas *canv_2D_clouds = new TCanvas("canv_2D_clouds","canv_2D_clouds",150,250,1400,600 ); tuneCanvas(canv_2D_clouds); canv_2D_clouds->Divide(2,1); gStyle->SetOptStat( kFALSE ); TGraph *grFromFit2D = new TGraph; bool firstDraw = true; // for ( int cBin = 0; cBin < nCentrBins[cW]; cBin++ ) for ( int cBin = nCentrBins[cW]-1; cBin >= 0; cBin-- ) { if (cBin%2!=0) continue; // cout << "cBin=" << cBin << endl; float cBinMin = cStep[cW] * cBin; float cBinMax = cWidths[cW] + cStep[cW] * cBin; // ##### pad 1 - clouds tunePad( canv_2D_clouds->cd(1) ); if ( kCorrType == 0 ) { hist2D = (TH2D*)f[0]->Get( Form("hist2D_NN_c%.1f-%.1f_etaW_%d_phiW_%d", cBinMin, cBinMax, etaW, phiW) ); hist2D->SetTitle( ""); hist2D->GetXaxis()->SetTitle( "N_{ch} Forward"); hist2D->GetYaxis()->SetTitle( "N_{ch} Backward"); hist2D->GetXaxis()->SetRangeUser(0,650); hist2D->GetYaxis()->SetRangeUser(0,650); } else if ( kCorrType == 1 ) { hist2D = (TH2D*)f[0]->Get( Form("hist2D_PtPt_c%.1f-%.1f_etaW_%d_phiW_%d", cBinMin, cBinMax, etaW, phiW) ); hist2D->SetTitle( ""); hist2D->GetXaxis()->SetTitle( "#LTp_{T}#GT Forward"); hist2D->GetYaxis()->SetTitle( "#LTp_{T}#GT Backward"); } hist2D->SetMarkerColor(kOrange-9+cBin); tuneHist2D_onPad(hist2D); hist2D->GetXaxis()->CenterTitle(); hist2D->GetYaxis()->CenterTitle(); // removeBinsWithFewEntries(hist2D); hist2D->DrawCopy( firstDraw ? "" : "same" ); // ##### pad 2 - profiles tunePad( canv_2D_clouds->cd(2) ); profile = hist2D->ProfileX(); //(TProfile*)f[0]->Get( Form("hist2D_c%.1f-%.1f_etaW_%d_phiW_%d_pfx", cBinMin, cBinMax, etaW, phiW) ); if ( kCorrType == 0 ) { profile->SetTitle( ""); profile->GetYaxis()->SetTitle( "#LTN_{ch}#GT Backward"); profile->GetXaxis()->SetRangeUser(0,650); profile->GetYaxis()->SetRangeUser(0,650); } else if ( kCorrType == 1 ) { profile->SetTitle( ""); profile->GetYaxis()->SetTitle( "#LT#LTp_{T}#GT#GT Backward"); } profile->SetLineColor(kOrange-9+cBin); profile->SetMarkerStyle(7); tuneProfile_onPad( profile ); profile->GetYaxis()->CenterTitle(); deleteProfileEmptyBinErrors(profile); canv_tmp_for_fit->cd(); profile->Fit("pol1","Q");//,"",0.25,1.2);//,"N"); canv_2D_clouds->cd(2); TF1 *fit = profile->GetFunction("pol1"); Double_t p0 = fit->GetParameter(0); Double_t p1 = fit->GetParameter(1); grFromFit2D->SetPoint(grFromFit2D->GetN(), (cBinMax+cBinMin)/2, p1); double meanX = hist2D->ProjectionX()->GetMean(); double rmsX = hist2D->ProjectionX()->GetRMS(); fit->SetRange( meanX-3*rmsX, meanX+3*rmsX ); fit->SetLineColorAlpha( kRed, 0.6 ); fit->Draw("same"); profile->DrawCopy( firstDraw ? "" : "same" ); firstDraw = false; } TGraphErrors *grByFormula; /*[cW][etaW]*/ if ( kCorrType == 0 ) { grByFormula = (TGraphErrors*)f[0]->Get( Form( "grNN_c%d_eta%d", cW, etaW ) ); } else if ( kCorrType == 1 ) { grByFormula = (TGraphErrors*)f[0]->Get( Form( "grPtPt_c%d_eta%d", cW, etaW ) ); } TCanvas *canv_GrCoeff = new TCanvas("canv_GrCoeff","canv_GrCoeff",20,150,900,700 ); grByFormula->Draw("APL"); grFromFit2D->SetLineColor(kRed); grFromFit2D->DrawClone("PL"); return; TGraphErrors *gr[10][10]; for ( int cW = 0; cW < 2; cW++ ) for ( int etaW = 0; etaW < 3; etaW++ ) gr[cW][etaW] = (TGraphErrors*)f[0]->Get( Form( "grPtPt_c%d_eta%d", cW, etaW ) ); drawGraph( gr[1][0], 24, kBlack, "APL" ); drawGraph( gr[0][0], 20, kBlack, "PL" ); // drawGraph( gr[1][1], 24, kBlue, "PL" ); // drawGraph( gr[0][1], 20, kBlue, "PL" ); // drawGraph( gr[1][2], 24, kGreen, "PL" ); // drawGraph( gr[0][2], 20, kGreen, "PL" ); //// drawGraph( gr[6], 24, kRed, "PL" ); // drawGraph( gr[7], 20, kRed, "PL" ); f[1] = new TFile( "output_histos_graphs_LHC15o_fieldMM.root" ); TGraphErrors *grMM[10][10]; for ( int cW = 0; cW < 2; cW++ ) for ( int etaW = 0; etaW < 3; etaW++ ) grMM[cW][etaW] = (TGraphErrors*)f[1]->Get( Form( "grPtPt_c%d_eta%d", cW, etaW ) ); drawGraph( grMM[1][0], 24, kGreen, "PL" ); drawGraph( grMM[0][0], 20, kGreen, "PL" ); // drawGraph( grMM[1][1], 24, kRed, "PL" ); // drawGraph( grMM[0][1], 20, kRed, "PL" ); // drawGraph( grMM[1][2], 24, kGreen, "PL" ); // drawGraph( grMM[0][2], 20, kGreen, "PL" ); // gROOT->ProcessLine( ".q"); }