TH1D *CombineCFs(vector<TH1D*> cfs, vector<Double_t> counts) { // Take in a vector of cfs and a vector of counts, and use them to // make an averaged correlation function UInt_t nCFs = cfs.size(); if(nCFs == 0) { cout << "No CFs found in collection. Cannot combine" << endl; return NULL; } else if (nCFs == 1) { cout<<"Only one cf found in collection."<<endl <<"Cannot combine."<<endl <<"Returning the found CF."<<endl;; return cfs[0]; } assert(nCFs == counts.size()); TH1D *combinedCF = (TH1D*)cfs[0]->Clone(); combinedCF->Scale(counts[0]); Double_t totalCounts = counts[0]; // Add together weighted cfs for(UInt_t i = 1; i < nCFs; i++) { TH1D *copyCF = (TH1D*) cfs[i]->Clone(); Double_t thisCount = counts[i]; copyCF->Scale(thisCount); combinedCF->Add(copyCF); totalCounts += thisCount; delete copyCF; copyCF = NULL; } // Now get average combinedCF->Scale(1./totalCounts); return combinedCF; }
void makeGaussianSignals(SigData_t& m_sigdata) { //std::vector<TH1D *> vgsh(NUMCHAN); std::vector<TH1D *> vcdfh(NUMCHAN); if( m_sigdata.find("gs") == m_sigdata.end() ) { cerr << "Gaussian signal data not found, not making CDF signal!" << endl; return; } for (int ichan=0; ichan<NUMCHAN; ichan++) { TH1D *cdfh; TString channame(channames[ichan]); TString name; TH1D * gsh = m_sigdata["gs"].at(ichan); assert(gsh) ; #if 0 name = "Signalgs_"+channame; gsh = (TH1D *)tch->Clone(name.Data()); assert(gsh); gsh->SetTitle("Gaussian signal"); gsh->Reset(); TF1 *g = (TF1 *)gROOT->GetFunction("gaus"); g->SetParameters(1,gaussian_mean_mass_gev,gaussian_mass_sigma_gev); gsh->FillRandom("gaus",100000); // norm to 1pb signal with 1/fb integrated luminosity double norm = 1000 * gseffxacc[ichan]/gsh->Integral(0,gsh->GetNbinsX()+1,"width"); //gsh->Scale(norm/eff_fudgefactor); // kludge: pre-undo the fudge in the next module gsh->Scale(norm); vgsh[ichan] = gsh; #endif // New CDF bump, same as Gauss but set to CDF (obs/theor)*(LHC theor) = 3.43pb cdfh = (TH1D *)gsh->Clone("CDFbump"); cdfh->Scale(3.43); vcdfh[ichan] = cdfh; cdfh->Draw(); gsh->Draw("same"); } // channel loop //m_sigdata["gs"] = vgsh; m_sigdata["cdf"] = vcdfh; } // makeGaussianSignals
// Takes as input a given process with corresponding luminosity, as well as sample CME, cuts, directory location, and output file name - saves corresponding histogram in root file. void processtree(TString sample, Double_t weight, TLorentzVector CME, TString filename, TString directory, TString param, TString cut, std::clock_t start, Int_t all){ //Open File TFile *f = new TFile(directory); TTree *ttree = (TTree*)f->Get(sample); TString recohistname, paramhistname; if (all==0){ recohistname = "_recoilmassHIST"; paramhistname = "_parameterHIST"; } if (all==1){ recohistname = "_recoilmassHIST_all"; paramhistname = "_parameterHIST_all"; } TString histname = sample + recohistname; TH1D *recoilmassHIST = new TH1D(histname,histname,CME.M()/2,0,CME.M()); //recoilmassHIST->SetCanExtend(kAllAxes); ttree->Project(histname, "recoilmass", cut); histname = sample + paramhistname; TH1D *parameterHIST = new TH1D(histname,histname,CME.M()/2,1,-1); //parameterHIST->SetCanExtend(kAllAxes); ttree->Project(histname, param, cut); //Normalize Hist recoilmassHIST->Scale(1/recoilmassHIST->GetMaximum()); parameterHIST->Scale(1/parameterHIST->GetMaximum()) ; //Normalize Hist // recoilmassHIST->Scale(weight); // parameterHIST->Scale(weight) ; // Writes yield of each histogram for each cut to text file ofstream myfile; Double_t yield = recoilmassHIST->Integral(); myfile.open ("yield.txt", ios::app); cout << "Yield for " << sample << " for Cut " << param << " is " << yield << endl; myfile << param << " " << all << " " << sample << " " << yield << "\n"; //write to file myfile.close(); if (recoilmassHIST->Integral() == 0){ recoilmassHIST->Fill(0); } if (parameterHIST->Integral() == 0){ parameterHIST->Fill(0); } TFile g(filename, "update"); recoilmassHIST->Write(); parameterHIST->Write(); g.Close(); }
void anaFragShape(TString infile="dj_HCPR-GoodTrkAndPixel_CleanEvt1130.root") { TChain * djcalo = new TChain("djcalo/djTree"); djcalo->Add(infile); aliases_dijet(djcalo); TChain * djcalopix = new TChain("djcalo_pxl/djTree"); djcalopix->Add(infile); aliases_dijet(djcalopix); TString evtSel("(cent<10 && nljet>120 && abs(nljeta)<2 && aljet>50 && abs(aljeta)<2 && jdphi>2.5 && Aj>0.24)"); TH1::SetDefaultSumw2(); TCanvas * c0 = new TCanvas("c0","c0",500,500); djcalo->Draw("Aj>>hAj(20,0,1)",evtSel); djcalopix->Draw("Aj",evtSel,"Esame"); TCanvas * c2 = new TCanvas("c2","c2",500,500); TH1D * hJDPhi = new TH1D("hJDPhi","hJDPhi",50,0,3.1416); TH1D * hJDPhi2 = new TH1D("hJDPhi2","hJDPhi",50,0,3.1416); Float_t numDJ = djcalo->Draw("jdphi>>hJDPhi",evtSel); Float_t numDJ2 = djcalopix->Draw("jdphi>>hJDPhi2",evtSel); cout << "num djs: " << numDJ << " djs(pix)" << numDJ2 << endl; TH1D * hPNDRTrk = new TH1D("hPNDRTrk",";R(trk,jet);1/(N_{DJ} 2#piR) dp_{T}^{Trk}/dR",10,0,TMath::PiOver2()); TH1D * hPNDRPix = new TH1D("hPNDRPix",";R(trk,jet);1/(N_{DJ} 2#piR) dp_{T}^{Trk}/dR",10,0,TMath::PiOver2()); TH1D * hPADRTrk = new TH1D("hPADRTrk",";R(trk,jet);1/(N_{DJ} 2#piR) dp_{T}^{Trk}/dR",10,0,TMath::PiOver2()); TH1D * hPADRPix = new TH1D("hPADRPix",";R(trk,jet);1/(N_{DJ} 2#piR) dp_{T}^{Trk}/dR",10,0,TMath::PiOver2()); djcalo->Draw("pndr>>hPNDRTrk",Form("(%s&&ppt>=1.2)*(ppt/(TMath::TwoPi()*pndr))",evtSel.Data())); djcalopix->Draw("pndr>>hPNDRPix",Form("(%s&&ppt>=0.3&&ppt<1.2)*(ppt/(TMath::TwoPi()*pndr))",evtSel.Data())); djcalo->Draw("padr>>hPADRTrk",Form("(%s&&ppt>=1.2)*(ppt/(TMath::TwoPi()*padr))",evtSel.Data())); djcalopix->Draw("padr>>hPADRPix",Form("(%s&&ppt>=0.3&&ppt<1.2)*(ppt/(TMath::TwoPi()*padr))",evtSel.Data())); hPNDRTrk->Scale(1./(numDJ*hPNDRTrk->GetBinWidth(1))); hPNDRPix->Scale(1./(numDJ*hPNDRPix->GetBinWidth(1))); hPADRTrk->Scale(1./(numDJ*hPADRTrk->GetBinWidth(1))); hPADRPix->Scale(1./(numDJ*hPADRPix->GetBinWidth(1))); hPNDRPix->SetMinimum(50); hPNDRPix->SetMaximum(100); hPNDRTrk->SetMinimum(10); hPNDRTrk->SetMaximum(2000); hPNDRPix->SetMarkerStyle(kFullCircle); hPNDRTrk->SetMarkerStyle(kFullSquare); hPNDRPix->SetMarkerColor(kRed); hPNDRTrk->SetMarkerColor(kRed); hPADRPix->SetMarkerStyle(kOpenCircle); hPADRTrk->SetMarkerStyle(kOpenSquare); hPADRPix->SetMarkerColor(kBlue); hPADRTrk->SetMarkerColor(kBlue); TCanvas * c3 = new TCanvas("c3","c3",500,500); hPNDRPix->Draw("E"); hPADRPix->Draw("Esame"); TCanvas * c3_2 = new TCanvas("c3_2","c3_2",500,500); c3_2->SetLogy(); hPNDRTrk->Draw("E"); hPADRTrk->Draw("Esame"); }
void plotTurnOn(TTree* inttree, TString triggerpass, TString variable, TString varname, TString varlatex) { if(varname=="vtxprob") { BIN_MIN = 0; BIN_MAX = 1; } else if(varname=="ffls3d") { BIN_MIN = 0; BIN_MAX = 50; } else if(varname=="cosalpha") { BIN_MIN = 0.9; BIN_MAX = 1; } TH1D* hAll = new TH1D(Form("h%s_%s_All",triggerpass.Data(),varname.Data()),Form(";%s;Probability",varlatex.Data()),BIN_NUM,BIN_MIN,BIN_MAX); inttree->Project(Form("h%s_%s_All",triggerpass.Data(),varname.Data()),variable,prefilter); TH1D* hMBseed = new TH1D(Form("h%s_%s_MBseed",triggerpass.Data(),varname.Data()),Form(";%s;Probability",varlatex.Data()),BIN_NUM,BIN_MIN,BIN_MAX); inttree->Project(Form("h%s_%s_MBseed",triggerpass.Data(),varname.Data()),variable,Form("%s&&%s",prefilter.Data(),triggerpass.Data())); //cout<<hAll->Integral()<<endl; hAll->Scale(1./hAll->Integral()); hMBseed->Scale(1./hMBseed->Integral()); hAll->SetStats(0); hMBseed->SetStats(0); hAll->SetMaximum(hMBseed->GetMaximum()*1.3); hAll->SetLineWidth(2); hAll->SetLineColor(kBlue-7); hAll->SetFillColor(kBlue-7); hAll->SetFillStyle(3001); hMBseed->SetLineWidth(2); hMBseed->SetLineColor(kRed); hMBseed->SetFillColor(kRed); hMBseed->SetFillStyle(3004); TCanvas* c = new TCanvas(Form("c%s_%s",triggerpass.Data(),varname.Data()),"",500,500); hAll->Draw(); hMBseed->Draw("same"); TLatex* tex = new TLatex(0.18,0.96,triggerpass); tex->SetNDC(); tex->SetTextFont(42); tex->SetTextSize(0.04); tex->Draw(); TLegend* leg = new TLegend(0.60,0.82,0.92,0.93); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->AddEntry(hAll,"all","f"); leg->AddEntry(hMBseed,"pass trigger","f"); leg->Draw(); c->SaveAs(Form("triggerturnonPlots/pthat%.0f/c%s_%s.pdf",pthat,triggerpass.Data(),varname.Data())); }
TH1D * DrawHistogram(TList *list, char *name,char *option, Int_t rebin, Int_t color, Int_t marker, Float_t scale, Bool_t draw = kTRUE){ TH1D *histo = list->FindObject(name); histo->SetMarkerColor(color); histo->SetMarkerStyle(marker); histo->SetLineColor(color); histo->Rebin(rebin); histo->Scale(1.0/((Float_t)rebin)); histo->Scale(scale); histo->SetMarkerSize(1.2); if(draw) histo->Draw(option); return histo; }
void compare(){ TFile *fileJian=new TFile("InputsPurdue/PromptRAA_D0_PbPb_spectrum_fonll_effunpre_cent0to100_ptbin12_y1_dataplusfonll.root"); TFile *fileRawJian=new TFile("InputsPurdue/Dspectrum_pbpb_data_ptbin_14_ptd_unpreMBtrig_0_cent0to100_y1.root"); TH1D *hspectrumJian = (TH1D*)fileJian->Get("D0_pbpb_spectrum"); TH1D *rawJian = (TH1D*)fileRawJian->Get("N_mb_expobkg_count"); hspectrumJian->Scale(5.67*1e-9); TFile *fileMIT=new TFile("InputsMIT/alphaD0.root"); TH1D *hspectrumMIT = (TH1D*)fileMIT->Get("hPtCor"); TH1D *hrawMIT = (TH1D*)fileMIT->Get("hPt"); hspectrumMIT->Scale(0.90*1./(2*0.0388*3.01781340000000000e+07)); TCanvas*c=new TCanvas("c","",500,500); c->cd(); c->SetLogy(); hspectrumMIT->Draw(); hspectrumMIT->SetLineWidth(4); hspectrumJian->Draw("same"); TFile*fEffJian=new TFile("InputsPurdue/D0_PbPb_acc_eff_ptbin_14_ybin_6_prompt_FONLLweight_cent-0to100_dataptshape_y1_Ncollweight1.root"); TH1D *EffJian = (TH1D*)fEffJian->Get("d0accxeff_pt"); TH1D *EffMIT = (TH1D*)fileMIT->Get("hEff"); cout<<"bin center MIT"<<EffMIT->GetBinCenter(1)<<"GeV, efficiency="<<EffMIT->GetBinContent(1)<<endl; cout<<"bin center Jian"<<EffJian->GetBinCenter(4)<<"GeV, efficiency="<<EffJian->GetBinContent(4)<<endl; cout<<"bin center MIT"<<hrawMIT->GetBinCenter(1)<<"GeV, raws="<<hrawMIT->GetBinContent(1)<<endl; cout<<"bin center Jian"<<rawJian->GetBinCenter(4)<<"GeV, raws="<<rawJian->GetBinContent(4)<<endl; cout<<"*************"<<endl; cout<<"bin center MIT"<<EffMIT->GetBinCenter(7)<<"GeV, efficiency="<<EffMIT->GetBinContent(7)<<endl; cout<<"bin center Jian"<<EffJian->GetBinCenter(10)<<"GeV, efficiency="<<EffJian->GetBinContent(10)<<endl; cout<<"bin center MIT"<<hrawMIT->GetBinCenter(7)<<"GeV, raws="<<hrawMIT->GetBinContent(7)<<endl; cout<<"bin center Jian"<<rawJian->GetBinCenter(10)<<"GeV, raws="<<rawJian->GetBinContent(10)<<endl; for (int i=1;i<11;i++){ cout<<"pt centre="<<EffJian->GetBinCenter(i+3)<<",value="<<hspectrumMIT->GetBinContent(i)/hspectrumJian->GetBinContent(i+3)<<endl; } }
TH1D* getQCD(int rebinFact){ TString dir = "rootFiles/"; TFile* file = new TFile(dir +"qcdest.root"); TH1D* plot = (TH1D*) file->Get("muon_AbsEta_0btag"); // for(int i = 1; i <= plot->GetNbinsX(); i++){ // plot->SetBinError(i, 0.0); // } plot->SetFillColor(kYellow); plot->SetLineColor(kYellow); plot->SetMarkerStyle(1); TH1D* copyplot = new TH1D("qcd plot", "qcd plot", 30, 0.0, 3.0); for(int i = 1; i <= plot->GetNbinsX(); i++){ copyplot->SetBinContent(i, plot->GetBinContent(i)); //copyplot->SetBinError(i, plot->GetBinError(i)); } copyplot->SetFillColor(kYellow); copyplot->SetLineColor(kYellow); copyplot->SetMarkerStyle(1); copyplot->Scale(1./copyplot->Integral()); copyplot->Rebin(rebinFact); //file->Close("R"); return copyplot; //file->Close(); }
void mc2ibd_NE(TChain *tMC, TFile *fBgnd, TCanvas *cv) { char str[1024]; TLatex *txt = new TLatex(); TH1D *hExp = (TH1D *) fBgnd->Get("hNEA-diff"); if (!hExp) { printf("Histogram hNEA-diff not found in %s\n", fBgnd->GetName()); return; } hExp->SetTitle("Delayed event energy;MeV;Events/200 keV"); hExp->SetLineColor(kBlack); hExp->SetLineWidth(3); gROOT->cd(); TH1D *hMC = new TH1D("hNEMC", "Delayed event energy (MC);MeV;Events/200 keV", 45, 3, 12); hMC->SetLineColor(kBlue); tMC->Project(hMC->GetName(), "NeutronEnergy", cX && cY && cZ && cR && c20 && cGamma && cGammaMax && cPe); hMC->Sumw2(); hMC->Scale(hExp->Integral(15, 45) / hMC->Integral(15,45)); cv->Clear(); hMC->Draw("hist"); hExp->DrawCopy("same"); TLegend *lg = new TLegend(0.65, 0.8, 0.89, 0.89); lg->AddEntry(hExp, "IBD", "LE"); lg->AddEntry(hMC, "MC", "L"); lg->Draw(); }
void mc2ibd_R2(TChain *tMC, TFile *fBgnd, TCanvas *cv) { char str[1024]; TLatex *txt = new TLatex(); TH1D *hExp = (TH1D *) fBgnd->Get("hR2A-diff"); if (!hExp) { printf("Histogram hR2A-diff not found in %s\n", fBgnd->GetName()); return; } hExp->SetTitle("Distance between positron and neutron, 3D case;cm;Events/4cm"); hExp->SetLineColor(kBlack); hExp->SetLineWidth(3); gROOT->cd(); TH1D *hMC = new TH1D("hR2MC", "Distance between positron and neutron, 3D case (MC);cm;Events/4cm", 40, 0, 160); hMC->SetLineColor(kBlue); tMC->Project(hMC->GetName(), "Distance", cX && cY && cZ && cRXY && c20 && cGamma && cGammaMax && cPe && cN); hMC->Sumw2(); hMC->Scale(hExp->Integral() / hMC->Integral()); cv->Clear(); hExp->DrawCopy(); hMC->Draw("hist,same"); TLegend *lg = new TLegend(0.65, 0.8, 0.89, 0.89); lg->AddEntry(hExp, "IBD", "LE"); lg->AddEntry(hMC, "MC", "L"); lg->Draw(); }
TH1D* getSample(TString sample, double weight){ TString dir = "rootFilesV4/central/"; TFile* file = new TFile(dir + sample + "_19584pb_PFElectron_PFMuon_PF2PATJets_PFMET.root"); //TDirectoryFile* folder = (TDirectoryFile*) file->Get("TTbarPlusMetAnalysis/QCD No Iso/Muon/"); TH1D* plot = (TH1D*) file->Get("EventCount/"+Variable); if(sample == "TTJet"){ plot->SetFillColor(kRed+1); plot->SetLineColor(kRed+1); }else if(sample == "WJetsToLNu" || sample == "W1Jet" || sample == "W2Jets"|| sample == "W3Jets"|| sample == "W4Jets"){ plot->SetLineColor(kGreen-3); plot->SetFillColor(kGreen-3); }else if(sample == "DYJetsToLL" || sample == "DY1JetsToLL" || sample == "DY2JetsToLL" || sample == "DY3JetsToLL" || sample == "DY4JetsToLL"){ plot->SetFillColor(kAzure-2); plot->SetLineColor(kAzure-2); }else if(sample == "QCD_Pt_20_MuEnrichedPt_15" || sample == "QCD_Pt-15to20_MuEnrichedPt5" || sample=="QCD_Pt-15to20_MuEnrichedPt5" || sample =="QCD_Pt-20to30_MuEnrichedPt5" || sample == "QCD_Pt-30to50_MuEnrichedPt5" || sample == "QCD_Pt-50to80_MuEnrichedPt5" || sample == "QCD_Pt-80to120_MuEnrichedPt5" || sample == "QCD_Pt-120to170_MuEnrichedPt5" || sample == "QCD_Pt-170to300_MuEnrichedPt5" || sample == "QCD_Pt-300to470_MuEnrichedPt5" || sample == "QCD_Pt-470to600_MuEnrichedPt5" || sample == "QCD_Pt-800to1000_MuEnrichedPt5" || sample =="QCD_Pt-1000_MuEnrichedPt5" ){ plot->SetFillColor(kYellow); plot->SetLineColor(kYellow); }else if(sample == "T_t-channel" || sample == "T_tW-channel" || sample == "T_s-channel" || sample == "Tbar_t-channel" || sample == "Tbar_tW-channel" || sample == "Tbar_s-channel"){ plot->SetFillColor(kMagenta); plot->SetLineColor(kMagenta); } if(sample != "SingleMu") plot->Scale(19.605/19.584); //plot->Scale(weight); plot->Rebin(rebinFact); return plot; }
void LoadHistogramTH1D(const TString& histogramName, const TString& inputFilename, double scale, TH1D*& returnedHistogram, bool debug = false) { // {{{ TFile inputFile(inputFilename); if (!inputFile.IsOpen()) { cerr << "Could not open '" << inputFilename << "' for reading." << endl; } else { TH1D* histogram = dynamic_cast<TH1D*>( inputFile.Get(histogramName) ); if (!histogram) { cerr << "No histogram named '" << histogramName << "' in file '" << inputFilename << "'" << endl; } else { if (debug) cerr << inputFilename << " " << histogramName << " entries=" << histogram->GetEntries() << " integral=" << histogram->Integral() << " scale*integral=" << scale*histogram->Integral() << endl; histogram->Scale(scale); if (!returnedHistogram) { returnedHistogram = new TH1D(*histogram); returnedHistogram->SetDirectory(0); // otherwise "TFile inputFile" owns this returnedHistogram and deletes it when "TFile inputFile" goes out of scope } else { returnedHistogram->Add(histogram); } } inputFile.Close(); } // }}} };
// Convert plots to paper format - no title, bigger fonts etc void combineHists( TFile* fSig, TFile* fBg, TFile* fBg2, std::string histName, std::string plotOpt, std::string outputName, std::vector<double> scalingFactors, std::string label, std::string yTitle="DEFAULT"){ TH1::SetDefaultSumw2(); // for 3 hists - sig and 2 bg TCanvas c1; TH1D* hSig = fSig->Get(histName.c_str()); hSig->SetLineColor(kRed); hSig->SetMarkerSize(0); doSignalHist(hSig); // Make combined BG hist // Need to rescale carefully std::vector<TFile*> files; files.push_back(fBg); files.push_back(fBg2); // TH1D* hBg = combine(files, histName, scalingFactors); TH1D* hBgA = fBg->Get(histName.c_str()); TH1D* hBgB = fBg2->Get(histName.c_str()); TH1D* hBg = (TH1D*) hBgA->Clone(); double total = scalingFactors[0]+scalingFactors[1]; hBg->Scale(scalingFactors[0]/total); hBg->Add(hBgB, scalingFactors[1]/total); hBg->SetMarkerSize(0); doAltBGHist(hBg); THStack st("h",""); st.Add(hSig); st.Add(hBg); st.Draw((plotOpt+"NOSTACK").c_str()); st.GetXaxis()->SetTitle(hSig->GetXaxis()->GetTitle()); if (yTitle == "DEFAULT") { st.GetYaxis()->SetTitle(hSig->GetYaxis()->GetTitle()); } else { st.GetYaxis()->SetTitle(yTitle.c_str()); } setAltTitleLabelSizes(&st.GetHistogram()); st.SetTitle(""); st.Draw((plotOpt+"NOSTACK").c_str()); TLegend* l_all = new TLegend(0.65,0.6,0.89,0.89); l_all->AddEntry(hBg,"Gen. level QCD MC","lp"); l_all->AddEntry((TObject*)0,"(b#bar{b} + q-g scatter,",""); //null pointers for blank entries l_all->AddEntry((TObject*)0,"q = b, #bar{b}, c, #bar{c})",""); l_all->AddEntry(hSig, "Signal MC", "lp"); l_all->AddEntry((TObject*)0,"m_{#phi} = 8 GeV", ""); doStandardLegend(l_all); l_all->Draw(); TPaveText t(0.15, 0.75, 0.5, 0.85, "NDC"); t.AddText(label.c_str()); doStandardText(&t); if (label != "") { t.Draw(); } c1.SaveAs(outputName.c_str()); if (!hSig) delete hSig; if (!hBg) delete hBg; }
void rebin (const char* filename, const char* histname, double rebin=2.0) { TFile* f = new TFile(filename,"update"); TH1D* h = (TH1D*)f->Get(histname); h->Rebin(rebin); h->Scale(1.0/rebin); TFile* fileOut = new TFile(Form("rebin_%s",filename), "update"); h->Write(); }
void plotCorrectionGenNested(){ for(int deta = 0; deta < NdEtaBins+1; deta++){ dEtaBins[deta] = dEtaBins[deta] - 0.00001;//fix bin boundary } TFile* file = new TFile("../rootfiles/CME_QvsdEta_pPb_EPOS_GEN_NestedLoop_v3.root"); TH1D* QvsdEta[48]; for(int deta = 0; deta < NdEtaBins; deta++){ QvsdEta[deta] = (TH1D*) file->Get( Form("ana/QvsdEta_%d",deta) ); } TH1D* hist1[3][2]; TH1D* hist2[3][2]; for(int sign = 0; sign < 1; sign++){ for(int HF = 0; HF < 1; HF++){ hist1[sign][HF] = new TH1D(Form("hist1_%d_%d",sign,HF),"test", NdEtaBins, dEtaBins); hist2[sign][HF] = new TH1D(Form("hist2_%d_%d",sign,HF),"test", NdEtaBins, dEtaBins); } } for(int deta = 0; deta < NdEtaBins; deta++){ double Q_total_real_dEta = QvsdEta[deta]->GetMean(); double Q_total_real_dEta_error = QvsdEta[deta]->GetMeanError(); hist1[0][0]->SetBinContent(deta+1, Q_total_real_dEta ); hist1[0][0]->SetBinError(deta+1, Q_total_real_dEta_error); } TH1D* base3 = makeHist("base3","like sign(++)","#Delta#eta", "cos(#phi_{1}+#phi_{2}-2#phi_{3})/v2_{3}", 48,0,4.8); base3->GetXaxis()->SetTitleColor(kBlack); base3->GetYaxis()->SetRangeUser(-0.0015,0.001); base3->GetYaxis()->SetTitleOffset(1.9); TH1D* base4 = (TH1D*) base3->Clone("base4"); TCanvas* c4 = makeCanvas("c4","c4"); gPad->SetTicks(); gPad->SetLeftMargin(0.20); gPad->SetBottomMargin(0.16); base3->Draw(); TH1D* temp = (TH1D*)hist1[0][0]->Clone("temp"); temp->Scale(1.0/0.20); temp->SetMarkerColor(kRed); temp->SetLineColor(kRed); temp->SetMarkerStyle(20); temp->Draw("Psame"); }
void CompareBranch(string MCfilename, string CDfilename, string MCbranchname, string CDbranchname, string xtitle, string unit, string plotname, string MCcuts, string CDcuts, string MCweight, string CDweight, double xlow, double xup, int nbins) { TH1D* MChist = MakeBranchPlot(MCfilename,MCbranchname,MCcuts,MCweight,xlow,xup,nbins); TH1D* CDhist = MakeBranchPlot(CDfilename,CDbranchname,CDcuts,CDweight,xlow,xup,nbins); MChist->Scale(1./MChist->Integral()); CDhist->Scale(1./CDhist->Integral()); MChist->SetDrawOption("B"); MChist->SetFillColor(kOrange); MChist->SetLineColor(kOrange); MChist->SetMaximum(MChist->GetMaximum()*1.3); MChist->SetMinimum(0); // Draw everything plotmaker plotter(MChist); plotter.SetTitle(xtitle, unit); TCanvas* plot = plotter.Draw(); CDhist->Draw("sameE1"); plot->SaveAs((plotname+".pdf").c_str()); }
void merge(){ TVectorD Nevent; Nevent.ResizeTo(nbin); Nevent.Zero(); // TVectorD totmultall; totmultall.ResizeTo(nbin); totmultall.Zero(); // TVectorD avgmultall; avgmultall.ResizeTo(nbin); avgmultall.Zero(); TVectorD tottrk; tottrk.ResizeTo(nbin); tottrk.Zero(); // TVectorD totptall; totptall.ResizeTo(nbin); totptall.Zero(); // TVectorD totetaall; totetaall.ResizeTo(nbin); totetaall.Zero(); TVectorD avgtrk; avgtrk.ResizeTo(nbin); avgtrk.Zero(); // TVectorD avgmult; avgmult.ResizeTo(nbin); TH2F* s[nbin]; TH2F* b[nbin]; for(int ibin=0;ibin<nbin;ibin++){ s[ibin] = new TH2F(Form("s_%d",ibin),Form("signal",ibin),detastep,detamin,detamax,dphistep,dphimin,dphimax); s[ibin]->Sumw2(); b[ibin] = new TH2F(Form("b_%d",ibin), "background",detastep,detamin,detamax,dphistep,dphimin,dphimax); b[ibin]->Sumw2(); } TFile *fout = new TFile(Form("Anav3_merged.root"),"Recreate"); TFile *f[nFileAll]; for(int ifile=; ifile<63; ifile++){ f[ifile] = TFile::Open(Form("%s/Anav3_%d.root",outdir.Data(),ifile)); if(!f[ifile]) continue; TVectorD* Nevent_t = (TVectorD*)f[ifile]->Get(Form("Nevent")); // TVectorD* totmultall_t = (TVectorD*)f[ifile]->Get(Form("totmultall")); TVectorD* tottrk_t = (TVectorD*)f[ifile]->Get(Form("tottrk")); // TVectorD* totptall_t = (TVectorD*)f[ifile]->Get(Form("totptall")); // TVectorD* totetaall_t = (TVectorD*)f[ifile]->Get(Form("totetaall")); for(int ibin=0;ibin<nbin;ibin++){ // totptall[ibin] += (*totptall_t)[ibin]; // totetaall[ibin] += (*totetaall_t)[ibin]; Nevent[ibin] += (*Nevent_t)[ibin]; // totmultall[ibin] += (*totmultall_t)[ibin]; tottrk[ibin] += (*tottrk_t)[ibin]; TH1D* s_t = (TH1D*)f[ifile]->Get(Form("signal_%d",ibin)); TH1D* b_t = (TH1D*)f[ifile]->Get(Form("background_%d",ibin)); s[ibin]->Add(s_t); b[ibin]->Add(b_t); } f[ifile]->Close(); } for(int ibin=0;ibin<nbin;ibin++){ avgtrk[ibin] = tottrk[ibin]/Nevent[ibin]; TH1D* hr = (TH1D*)s[ibin]->Clone("hr"); hr->Divide(b[ibin]); hr->Scale(b[ibin]->GetBinContent(b[ibin]->FindBin(0,0))); fout->cd(); Nevent.Write("Nevent"); avgtrk.Write("avgtrk"); TDirectory *dir0 = (TDirectory*)fout->mkdir(Form("D_%d",ibin)); dir0->cd(); s[ibin]->Write("s"); b[ibin]->Write("b"); hr->Write(); } }
void Normalize(TH1D &h, double normalization, bool norm_per_avg_width) { int nbins = h.GetNbinsX(); double low = h.GetBinLowEdge(1); double high = h.GetBinLowEdge(nbins+1); double width = (high-low)/nbins; if(norm_per_avg_width) normalization *= width; double integral = h.Integral("width"); h.Scale(normalization/integral); }
int main(){ TFile * data = TFile::Open("TreesMu_Data_plots.root"); TH1D * dataMtop = (TH1D*)data->Get("antiEtaFwDTrue_allW/antiEtaFwDTrue_allWcosTheta"); TFile * tt = TFile::Open("TreesMu_TTBar_RW.root"); TH1D * ttMtop = (TH1D*)tt->Get("MtopOutWindowTrue_allW/MtopOutWindowTrue_allWcosTheta"); TH2D * ttMtop2D = (TH2D*)tt->Get("MtopOutWindowTrue_allW/MtopOutWindowTrue_allWcosTheta2D"); std::pair<TF1, WeightFunctionCreator*> WeightFuncUD(WeightFunctionCreator::getWeightFunction("WeightFuncUDF", F0, FL)); std::pair<TF1, WeightFunctionCreator*> WeightFuncDU(WeightFunctionCreator::getWeightFunction("WeightFuncDUF", F0, FL)); cout<<F0 + F0Sys<<"\t"<<FL - FLSys<<endl; WeightFuncUD.first.SetParameters(F0 + F0Sys, FL - FLSys); WeightFuncDU.first.SetParameters(F0 - F0Sys, FL + FLSys); TH1D * ttUD = myReweightor(ttMtop2D,WeightFuncUD,"WeightFuncUD_"); cout<<"ratio: "<<ttMtop2D->Integral()/ttUD->Integral()<<endl; ttUD->Scale(ttMtop2D->Integral()/ttUD->Integral()); ttUD->Add(ttMtop); TH1D * wUD = (TH1D*)ttUD->Clone("wUD"); wUD->Scale(-1.); wUD->Add(dataMtop); TH1D * ttDU = myReweightor(ttMtop2D,WeightFuncDU,"WeightFuncDU_"); cout<<"ratio: "<<ttMtop2D->Integral()/ttDU->Integral()<<endl; ttDU->Scale(ttMtop2D->Integral()/ttDU->Integral()); ttDU->Add(ttMtop); TH1D * wDU = (TH1D*)ttDU->Clone("wDU"); wDU->Scale(-1.); wDU->Add(dataMtop); TFile * out = new TFile("file.root","recreate"); out->cd(); WeightFuncUD.first.Write(); WeightFuncDU.first.Write(); ttUD->Write(); ttDU->Write(); wUD->Write(); wDU->Write(); out->Close(); return 1; }
// Called just after the main event loop // Can be used to write things out, dump a summary etc // Return non-zero to indicate a problem int TemplateCreator::AfterLastEntry(TGlobalData* gData, const TSetupData* setup){ // Print extra info if we're debugging this module: if(Debug()){ cout<<"-----I'm debugging TemplateCreator::AfterLastEntry()"<<endl; } // Print to stdout the percentage of successful fit for each channel StringPulseIslandMap::const_iterator it; for(it = gData->fPulseIslandToChannelMap.begin(); it != gData->fPulseIslandToChannelMap.end(); ++it){ std::string bankname = it->first; std::string detname = setup->GetDetectorName(bankname); TH1D* hTemplate = fTemplates[detname]; if (!hTemplate) { // if there's no template been created for this channel continue; } int& n_fit_attempts = fNFitAttempts[detname]; // number of pulses we try to fit to int& n_successful_fits = fNSuccessfulFits[detname]; std::cout << "TemplateCreator: " << detname << ": " << n_fit_attempts << " fits attempted with " << n_successful_fits << " successful (" << ((double)n_successful_fits/(double)n_fit_attempts)*100 << "%)" << std::endl; // Normalise the template so that it has pedestal=0 and amplitude=1 // Work out the pedestal of the template from the first 5 bins int n_bins_for_template_pedestal = 5; double total = 0; for (int iBin = 1; iBin <= n_bins_for_template_pedestal; ++iBin) { total += hTemplate->GetBinContent(iBin); } double template_pedestal = total / n_bins_for_template_pedestal; // std::cout << detname << ": Template Pedestal = " << template_pedestal << std::endl; // Subtract off the pedesal for (int iBin = 1; iBin <= hTemplate->GetNbinsX(); ++iBin) { double old_value = hTemplate->GetBinContent(iBin); double new_value = old_value - template_pedestal; hTemplate->SetBinContent(iBin, new_value); } // Integrate over the histogram and scale to give an area of 1 double integral = std::fabs(hTemplate->Integral()); // want the absolute value for the integral because of the negative polarity pulses hTemplate->Scale(1.0/integral); integral = std::fabs(hTemplate->Integral()); // Save the template to the file fTemplateArchive->SaveTemplate(hTemplate); } // Clean up the template archive delete fTemplateArchive; return 0; }
void DrawNcollNpartdis(){ int Gth=0; TFile *fGlauber = TFile::Open(stdGlaulist[Gth]); TTree *t = (TTree*)fGlauber->Get("nt_Pb_Pb"); Float_t Ncoll, Npart, B; Long_t Nevent; t->SetBranchAddress("Ncoll",&Ncoll); t->SetBranchAddress("Npart",&Npart); t->SetBranchAddress("B",&B); Nevent = (Long_t) t->GetEntries(); Long_t Ev; Int_t Bino; Double_t Para, Bi_Para; TH1D* hNcoll = new TH1D("","",4000,0,4000); TH1D* hNpart = new TH1D("","",4000,0,4000); for (Ev=0; Ev<Nevent; Ev++){ //if(Ev%100000==0) cout<<"\t"<<"Have run "<<Ev<<" events"<<endl; t->GetEntry(Ev); hNcoll->Fill(Ncoll); hNpart->Fill(Npart); } TString name; if(Gth==0) name = "G0"; else if(Gth<nGlau) name = Form("Glau_%d",Gth); else name = Form("bin_%d",Gth-nGlau+1); TCanvas *c1 = new TCanvas(); c1->SetLogy(); hNcoll->Scale(1./hNcoll->Integral()); hNcoll->GetXaxis()->SetRangeUser(0,3000); hNcoll->GetXaxis()->SetTitle("Ncoll"); hNcoll->GetYaxis()->SetTitle("Event Fraction"); hNcoll->Draw(); c1->Print(Form("%s_Ncoll.png",name.Data())); TCanvas *c2 = new TCanvas(); c2->SetLogy(); hNpart->Scale(1./hNpart->Integral()); hNpart->GetXaxis()->SetRangeUser(0,500); hNpart->GetXaxis()->SetTitle("Npart"); hNpart->GetYaxis()->SetTitle("Event Fraction"); hNpart->Draw(); c2->Print(Form("%s_Npart.png",name.Data())); }
TH1D* addScale(std::vector<TH1D*> plots, std::vector<double> scalingFactors) { TH1::SetDefaultSumw2(); TH1D* h = (TH1D*)plots[0]->Clone(plots[0]->GetName()); h->Scale(scalingFactors[0]); for (unsigned i = 1; i < plots.size(); i++) { // TH1D* hTmp = (TH1D*)plots[i]->Rebin(nBinsX, plots[0]->GetTitle(), &massBins[0]); h->Add(plots[i], scalingFactors[i]); } return h; }
TH1D* combine(std::vector<TFile*> files, std::string histName, std::vector<double> scalingFactors) { TH1::SetDefaultSumw2(); // Get 1st hist in list TH1D* h = (TH1D*)files[0]->Get(histName.c_str())->Clone(files[0]->Get(histName.c_str())->GetName()); h->Scale(scalingFactors[0]); for (unsigned i = 1; i < files.size(); i++) { TH1D* hTmp = (TH1D*) (files[i]->Get(histName.c_str())); h->Add(hTmp, scalingFactors[i]); } return h; }
TH1D * getNiceHistogram(int nbins, std::vector<Double_t> binning, TFile * file, TString hist) { TH1D *sample = (TH1D*)(file->Get(hist)->Clone()); TH1D *binned = dynamic_cast<TH1D*>(sample->Rebin(nbins,"madgraph",&binning.front())); for (Int_t bin=0; bin < nbins; bin++) { // Divide rebinned histogram's bin content by bin width factor (new/old): binned->SetBinError(bin+1,sqrt(binned->GetBinContent(bin+1))/((binning.at(bin+1)-binning.at(bin))/sample->GetBinWidth(1))); binned->SetBinContent(bin+1,binned->GetBinContent(bin+1)/((binning.at(bin+1)-binning.at(bin))/sample->GetBinWidth(1))); } binned->Scale(1/binned->Integral("width")); return binned; }
TH1D* GetRawBackground1D(int itrg, int jass) { TH2D* hbackground = (TH2D*) GetRawBackground2D(itrg,jass); TH1D* hbackphi = (TH1D*)hbackground->ProjectionY(Form("backphi_trg%d_ass%d",itrg,jass),hbackground->GetXaxis()->FindBin(detaprojmin),hbackground->GetXaxis()->FindBin(detaprojmax),"e"); hbackphi->Scale(hbackground->GetXaxis()->GetBinWidth(1)); hbackphi->GetXaxis()->CenterTitle(); hbackphi->GetYaxis()->CenterTitle(); hbackphi->SetYTitle("B(#Delta#phi)"); hbackphi->SetName(Form("backphi_scale_trg%d_ass%d",itrg,jass)); return hbackphi; }
TH1D* GetRawSignal1D(int itrg, int jass) { TH2D* hsignal = GetRawSignal2D(itrg,jass); TH1D* hsignalphi = (TH1D*)hsignal->ProjectionY(Form("signalphi_trg%d_ass%d",itrg,jass),hsignal->GetXaxis()->FindBin(detaprojmin),hsignal->GetXaxis()->FindBin(detaprojmax),"e"); hsignalphi->Scale(hsignal->GetXaxis()->GetBinWidth(1)); hsignalphi->GetXaxis()->CenterTitle(); hsignalphi->GetYaxis()->CenterTitle(); hsignalphi->SetYTitle("S(#Delta#phi)"); hsignalphi->SetName(Form("signalphi_scale_trg%d_ass%d",itrg,jass)); return hsignalphi; }
TH1D* Draw(TString type, int color, int marker){ TFile *f = new TFile(Form("trackCorr.root"),"ReadOnly"); TH2F* heptrack= (TH2F*)f->Get("heptrack"); if(type=="pt"){ TH1D* heff = (TH1D*)heptrack->ProjectionX("heff",heptrack->GetYaxis()->FindBin(-2.4),heptrack->GetYaxis()->FindBin(2.4)-1,"i"); heff->Scale(1.0/(heptrack->GetYaxis()->FindBin(2.4)-heptrack->GetYaxis()->FindBin(-2.4))); heff->Draw(); cout<<(heptrack->GetYaxis()->FindBin(2.4)-heptrack->GetYaxis()->FindBin(-2.4))<<endl; } else if(type=="eta"){ TH1D* heff = (TH1D*)heptrack->ProjectionY("heff",heptrack->GetXaxis()->FindBin(0.1),-1,"i"); heff->Scale(1.0/(heptrack->GetNbinsX()-heptrack->GetXaxis()->FindBin(0.1)+1)); } heff->SetMarkerStyle(marker); heff->SetMarkerColor(color); heff->SetLineColor(color); heff->SetMarkerSize(1.5); // f->Close(); return heff; }
/** * End of job processing */ void Terminate(Option_t*) { fList = dynamic_cast<TList*>(GetOutputData(1)); if (!fList) { AliError(Form("No output list defined (%p)", GetOutputData(1))); if (GetOutputData(1)) GetOutputData(1)->Print(); return; } TList* output = new TList; output->SetName("triggerResults"); output->SetOwner(); fVertexMC = static_cast<TH1D*>(fList->FindObject("vertexMC")); fVertexESD = static_cast<TH1D*>(fList->FindObject("vertexESD")); fM = static_cast<TH1D*>(fList->FindObject("m")); if (fVertexMC) { TH1D* vtxMC = static_cast<TH1D*>(fVertexMC->Clone("vertexMC")); vtxMC->SetDirectory(0); if (vtxMC->GetEntries() > 0) vtxMC->Scale(1. / vtxMC->GetEntries()); else vtxMC->Scale(0); output->Add(vtxMC); } if (fVertexESD) { TH1D* vtxESD = static_cast<TH1D*>(fVertexESD->Clone("vertexESD")); vtxESD->SetDirectory(0); if (vtxESD->GetEntries() > 0) vtxESD->Scale(1. / vtxESD->GetEntries()); else vtxESD->Scale(0); output->Add(vtxESD); } if (fM) { TH1D* m = static_cast<TH1D*>(fM->Clone("m")); m->SetDirectory(0); m->SetYTitle("P(N_{ch}|_{|#eta|<1} < X)"); if (m->GetBinContent(1) > 0) m->Scale(1. / m->GetBinContent(1)); else m->Scale(0); output->Add(m); } TString vtxReq; if (fVertexRequirement & kMC) vtxReq.Append("MC "); if (fVertexRequirement & kESD) vtxReq.Append("ESD "); output->Add(new TNamed("vtxReq", vtxReq.Data())); output->Add(new TNamed("trkReq", fTrackletRequirement == kMC ? "MC" : "ESD")); fInel.Finish(fList, output); fInelGt0.Finish(fList, output); fNSD.Finish(fList, output); fNClusterGt0.Finish(fList, output); PostData(2, output); }
void DrawRandCone(string tag, int centmin, int centmax) { TFile* f = new TFile(Form("merged/randcone_%s_centmin%d_centmax%d.root",tag.data(),centmin,centmax)); TH1D* one = (TH1D*) f->Get("one"); cout<<one->GetBinContent(1)<<endl; double norm = one->GetBinContent(1); TH1D * hmeanpfPtSumEta = (TH1D*) f->Get("hmeanpfPtSumEta"); TH1D * hmeanpfVsPtSumEta = (TH1D*) f->Get("hmeanpfVsPtSumEta"); TH1D * hmeanpfVsPtInitialSumEta = (TH1D*) f->Get("hmeanpfVsPtInitialSumEta"); hmeanpfPtSumEta->GetXaxis()->CenterTitle(); hmeanpfPtSumEta->GetYaxis()->CenterTitle(); hmeanpfVsPtSumEta->GetXaxis()->CenterTitle(); hmeanpfVsPtSumEta->GetYaxis()->CenterTitle(); hmeanpfVsPtInitialSumEta->GetXaxis()->CenterTitle(); hmeanpfVsPtInitialSumEta->GetYaxis()->CenterTitle(); hmeanpfPtSumEta->Scale(1.0/norm); hmeanpfVsPtSumEta->Scale(1.0/norm); hmeanpfVsPtInitialSumEta->Scale(1.0/norm); TCanvas * c1 = new TCanvas("c1"); hmeanpfPtSumEta->Draw(); // hmeanpfVsPtSumEta->Draw(); // hmeanpfVsPtInitialSumEta->Draw(); TLatex * lmult = new TLatex(0.53, 0.95, Form("CMS PbPb %2.0f-%2.0f%%", centmin*0.5, centmax*0.5)); lmult->SetNDC(1); lmult->SetTextSize(lmult->GetTextSize()*1.5); lmult->Draw(); c1->SaveAs(Form("hmeanpfPtSumEta-%d_%d.png",centmin,centmax)); // c1->SaveAs(Form("hmeanpfVsPtSumEta-%d_%d.png",centmin,centmax)); // c1->SaveAs(Form("hmeanpfVsPtInitialSumEta-%d_%d.png",centmin,centmax)); }
void MCtoSTATerrors() { TLatex *tplus = labelLatex(0.1364943,0.8114407,"MC sample"); TFile *file0 = TFile::Open("results/StandardCutflow/allmc.root"); TCanvas *c1 = new TCanvas(); //TCanvas *c2 = new TCanvas(); TH1D * LPplus = (TH1D*)file0->Get("RECO_PolPlots_50toinf/RECO_ICVarPFPlus"); TH1D * LPminus = (TH1D*)file0->Get("RECO_PolPlots_50toinf/RECO_ICVarPFMinus"); LPplus->Rebin(20); LPminus->Rebin(20); LPplus->Scale(0.3); LPminus->Scale(0.3); TH1D * newLPplus = (TH1D*)LPplus->Clone(); TH1D * newLPminus = (TH1D*)LPminus->Clone(); for(unsigned int i=1; i < LPplus->GetXaxis()->GetNbins(); i++) { newLPplus->SetBinError(i, TMath::Sqrt(LPplus->GetBinContent(i))); newLPminus->SetBinError(i, TMath::Sqrt(LPminus->GetBinContent(i))); } c1->cd(); newLPplus->GetYaxis()->SetTitle("Events / 300 nb^{-1}"); //newLPplus->GetXaxis()->SetTitle("LP(#mu^{+})"); newLPplus->GetXaxis()->SetTitle("LP(#mu)"); newLPplus->GetXaxis()->SetRangeUser(-1.0,2.0); newLPplus->SetLineWidth(3); newLPplus->SetLineStyle(2); newLPplus->SetLineColor(kRed); newLPplus->DrawCopy(); tplus->DrawClone("same"); // c2->cd(); // newLPminus->GetYaxis()->SetTitle("Events / 100 nb^{-1}"); // newLPminus->GetXaxis()->SetTitle("LP(#mu^{-})"); newLPminus->SetLineWidth(3); newLPminus->SetLineStyle(2); newLPminus->SetLineColor(kBlack); newLPminus->DrawCopy("same"); // tplus->DrawClone("same"); leg = new TLegend(0.762931,0.720339,0.8649425,0.8622881,NULL,"brNDC"); leg->AddEntry(newLPplus,"#mu^{+}","l"); leg->AddEntry(newLPminus,"#mu^{-}","l"); leg->SetFillColor(kWhite); leg->SetBorderSize(0); leg->SetTextFont(62); leg->DrawClone(); file0->Close(); return; }