#include "TChain.h" #include "TFile.h" #include "TH1F.h" #include "TH2F.h" #include "TObjArray.h" #include "TString.h" #include "TSystem.h" Double_t getDecayBR(const TString &name) { // Most branching ratios are taken from 2012 PDG. // Values for Delta+ are from QED calculations: // Probing Hadronic Structure with the decay Delta -> N l+ l- // Malcolm N. Butler // http://arxiv.org/pdf/nucl-th/9303015.pdf if(name.Contains("Delta+.")) { if(name.Contains(".pepem")) return 4.2e-5; if(name.Contains(".pmpmm")) return 3.e-7; } if(name.Contains("eta.")) { if(name.Contains(".gepem")) return 6.9e-3; if(name.Contains(".gmpmm")) return 3.1e-4; if(name.Contains(".epem")) return 5.6e-6; if(name.Contains(".mpmm")) return 5.8e-6; } if(name.Contains("eta'.") || name.Contains("etap")) { if(name.Contains(".gmpmm")) return 1.07e-4; } if(name.Contains("omega.")) { if(name.Contains(".pi0epem")) return 7.7e-4; if(name.Contains(".pi0mpmm")) return 1.3e-4; if(name.Contains(".epem")) return 7.28e-5; if(name.Contains(".mpmm")) return 9.0e-5; } if(name.Contains("pi0.")) { if(name.Contains(".gepem")) return 1.17e-2; } if(name.Contains("phi.")) { if(name.Contains(".epem")) return 2.97e-4; if(name.Contains(".mpmm")) return 2.87e-4; } if(name.Contains("rho0.")) { if(name.Contains(".epem")) return 4.7e-5; if(name.Contains(".mpmm")) return 4.55e-5; } if(name.Contains("jpsi.")) { if(name.Contains(".epem")) return 0.0594; if(name.Contains(".mpmm")) return 0.0594; if(name.Contains(".gepem")) return 8.8e-3; } cout<<"No branching ratio found for file "<Sumw2(); h->Scale(br * mult / ((Double_t)h->GetEntries() * (Double_t)h->GetBinWidth(1))); } } Int_t pluto_qa_scale_hists(TString inFilePattern="./qa/*root") { // Scale histograms by branching ratio, multiplicity, number of events // and bin width. // inFilePattern: name of QA file(s). // Get list of input files TString inFiles = gSystem->GetFromPipe("ls -1 " + inFilePattern); TObjArray *inFilesList = inFiles.Tokenize("\n"); if(inFilesList->GetEntries() == 0) { cout<<"Input files: "<GetEntries(); TFile *f = NULL; TH1F *h = NULL; const Int_t nHists = 14; // Name of histograms to scale. TString arrHists[nHists] = { "h_invmass", "h_p", "h_pt", "h_mt", "h_p1", "h_p2", "h_px", "h_py", "h_pz", "h_px_ll", "h_py_ll", "h_pz_ll", "h_y", "h_opang"}; for (Int_t iFile = 0; iFile < nEntries; iFile++) { // Nomalize histograms by number of entries and bin width. TString fileName = ((TObjString*)inFilesList->At(iFile))->GetString(); f = new TFile(fileName.Data(), "UPDATE"); for(Int_t iHist = 0; iHist < nHists; iHist++) { h = (TH1F*)gDirectory->Get(arrHists[iHist]+";1"); scaleHist(h, fileName); h->Write("", TObject::kOverwrite); } // Scale m_t - pole mass histogram. TH1F *h_mt_m0 = (TH1F*)gDirectory->Get("h_mt_m0;1"); TH1F *h_y = (TH1F*)gDirectory->Get("h_y;1"); Double_t normMtM0 = getDecayBR(fileName) * getDecayMultiplicity(fileName) / ((Double_t)h_mt_m0->GetEntries() * (Double_t)h_mt_m0->GetBinWidth(1) * (Double_t)h_y->GetEntries() * (Double_t)h_y->GetBinWidth(1)); h_mt_m0->Scale(normMtM0); f->Close(); } return 0; }