TH1* getHisto(char * filename, char* histoName, char * dirName, int nBin, double lumi) { TH1 * hpt_=0; TFile *file0 = TFile::Open(filename); if(!file0) return hpt_; TDirectory *dir; TH2D * hMuPt; if(dirName == "0") { hMuPt = (TH2D*) file0->Get(histoName); } else { dir = (TDirectory*) file0->Get(dirName); if(!dir) return hpt_; hMuPt = (TH2D*) dir->Get(histoName); } if(hMuPt) { hpt_ = (TH1*) hMuPt->Clone(); hpt_->Sumw2(); hpt_->Scale(1./lumi); // this take into into account the luminosity hpt_->SetLineWidth(2); hpt_->Rebin(nBin); double nBinX=hpt_->GetNbinsX(); // overFlow hpt_->SetBinContent((int)nBinX,hpt_->GetBinContent((int)nBinX)+hpt_->GetBinContent((int)nBinX+1)); hpt_->SetDirectory(0); file0->Close(); hpt_->SetLineWidth(3); } return hpt_; }
void runcorr(int filenum) { string buffer; vector<string> listoffiles; int nlines = 0; ifstream infile("/net/hisrv0001/home/dav2105/corrana/makecorrhists/oldstuff/sortedforests.txt"); if (!infile.is_open()) { cout << "Error opening file. Exiting." << endl; return; } else { while (!infile.eof()) { infile >> buffer; listoffiles.push_back(buffer); nlines++; } } corrana(listoffiles[filenum].data()); double pttriglow[] = {1,4}; double pttrighigh[] = {2,8}; double ptasslow[] = {1,2}; double ptasshigh[] = {2,3}; int centmin[] = {0,4,8,12,16,20,24,28,32}; int centmax[] = {40,8,12,16,20,24,28,32,36}; TFile * outf = new TFile(Form("corrhists_%d.root",filenum),"recreate"); // for(int i = 0 ; i < 9 ; ++i) // for(int i = 0 ; i < 2 ; ++i) for(int i = 0 ; i < 1 ; ++i) { cout<<"pt iteration "<<i<<endl; // for(int cent = 0 ; cent < 3 ; ++cent) // for(int cent = 0 ; cent < 9 ; ++cent) for(int cent = 0 ; cent < 1 ; ++cent) { cout<<"cent iteration "<<cent<<endl; TH2D * ttsig = TrackTrackSignal(pttriglow[i],pttrighigh[i],ptasslow[i],ptasshigh[i],centmin[cent],centmax[cent]); TH2D * ttbak = TrackTrackBackground(pttriglow[i],pttrighigh[i],ptasslow[i],ptasshigh[i],centmin[cent],centmax[cent]); // TCanvas * c1 = new TCanvas(); // ttsig->Draw("surf1"); // TCanvas * c2 = new TCanvas(); // ttbak->Draw("surf1"); // TCanvas * c3 = new TCanvas(); TH2D * ttcorr = (TH2D*)ttsig->Clone(Form("corr_trg%d_%d_ass%d_%d_cmin%d_cmax%d",(int)pttriglow[i],(int)pttrighigh[i],(int)ptasslow[i],(int)ptasshigh[i],centmin[cent],centmax[cent])); ttcorr->Divide(ttbak); ttcorr->Scale(ttbak->GetBinContent(ttbak->FindBin(0,0))); ttcorr->GetXaxis()->SetRange(ttcorr->GetXaxis()->FindBin(-4.0),ttcorr->GetXaxis()->FindBin(4.0)); ttcorr->GetYaxis()->SetRange(ttcorr->GetYaxis()->FindBin(-3.1415926/2.0),ttcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); // ttcorr->Draw("surf1"); } } outf->Write(); outf->Close(); }
TH2D* GetJetCorrFunc2D_ZYAM(int itrg, int jass) { TH2D* hcorr = (TH2D*)GetRawCorrFunc2D_ratio(itrg,jass); TH2D* hcorr_clone = (TH2D*)hcorr->Clone(Form("corr_clone_itrg%d_jass%d",itrg,jass)); hcorr_clone->Reset(); for(int ietabin=1;ietabin<=hcorr->GetNbinsX();ietabin++) { TH1D* hcorrphi = (TH1D*)hcorr->ProjectionY(Form("corrphi_%d",ietabin),ietabin,ietabin,"e"); // hcorrphi->SetAxisRange(0.35,1.57,"X"); double histminX = hcorrphi->GetBinCenter(hcorrphi->GetMinimumBin()); double histminY = hcorrphi->GetBinContent(hcorrphi->GetMinimumBin()); fitfunc = new TF1(Form("fitfunc_%d",ietabin),"[0]+[1]*(x-[2])*(x-[2])",0.6,1.2); fitfunc->SetParameters(histminY,1,histminX); fitfunc->SetParLimits(1,0,0.10000); // fitfunc->SetParLimits(2,0.35,1.57); for(int ifit=0;ifit<3;ifit++) hcorrphi->Fit(Form("fitfunc_%d",ietabin),"RNO"); float level = fitfunc->GetParameter(0); for(int iphibin=1;iphibin<=hcorr->GetNbinsY();iphibin++) hcorr_clone->SetBinContent(ietabin,iphibin,hcorr->GetBinContent(ietabin,iphibin)-level); } float max = hcorr_clone->GetBinContent(hcorr_clone->GetMaximumBin()); hcorr_clone->SetAxisRange(ymin,max*1.3,"Z"); return hcorr_clone; }
TH2D* GetJetCorrFunc2D_doublegaussian(int itrg, int jass) { TH2D* hcorr = (TH2D*)GetRawCorrFunc2D_ratio(itrg,jass); TH2D* hcorr_clone = (TH2D*)hcorr->Clone(Form("corr_clone_itrg%d_jass%d",itrg,jass)); hcorr_clone->Reset(); for(int ietabin=1;ietabin<=hcorr->GetNbinsX();ietabin++) { TH1D* hcorrphi = (TH1D*)hcorr->ProjectionY(Form("corrphi_%d",ietabin),ietabin,ietabin,"e"); float min = hcorrphi->GetMinimum(); hcorrphi->SetAxisRange(-1,1,"X"); float nearmax = hcorrphi->GetMaximum(); hcorrphi->SetAxisRange(PI-1,PI+1,"X"); float awaymax = hcorrphi->GetMaximum(); TF1* fitfunc = new TF1("fitfunc",doubleGaussian,-PI/2.,3.*PI/2.,5); fitfunc->SetParameters(min,nearmax-min,0.3,awaymax-min,0.5); fitfunc->SetParLimits(0,0,100000); fitfunc->SetParLimits(1,0,100000); fitfunc->SetParLimits(2,0,100000); fitfunc->SetParLimits(3,0,100000); fitfunc->SetParLimits(4,0,100000); for(int ifit=0;ifit<3;ifit++) hcorrphi->Fit(Form("fitfunc_%d",ietabin),"RNO"); float level = fitfunc->GetParameter(0); for(int iphibin=1;iphibin<=hcorr->GetNbinsY();iphibin++) hcorr_clone->SetBinContent(ietabin,iphibin,hcorr->GetBinContent(ietabin,iphibin)-level); delete fitfunc; } float max = hcorr_clone->GetBinContent(hcorr_clone->GetMaximumBin()); hcorr_clone->SetAxisRange(ymin,max*1.3,"Z"); return hcorr_clone; }
TH2D* GetRawCorrFunc2D_ratio(int itrg, int jass) { TH2D* hsignal = GetRawSignal2D(itrg,jass); TH2D* hbackground = GetRawBackground2D(itrg,jass); hcorrelation = (TH2D*) hsignal->Clone(Form("correlation_trg%d_ass%d",itrg,jass)); hcorrelation->Divide(hbackground); hcorrelation->GetXaxis()->CenterTitle(); hcorrelation->GetYaxis()->CenterTitle(); hcorrelation->GetZaxis()->CenterTitle(); hcorrelation->SetZTitle("C(#Delta#eta,#Delta#phi)"); hcorrelation->SetAxisRange(detamin,detamax,"X"); return hcorrelation; }
//loads phi-pT efficiency from root file TH2D *GetEfficiencyPhi(TString effLoc){ TFile *fIn = 0; TH2D *hPhiPt = 0; if(!fIn)fIn = TFile::Open(effLoc.Data()); if(!fIn)Printf("%s%d no input data",(char*)__FILE__,__LINE__); if(!hPhiPt)hPhiPt = (TH2D*)fIn->Get("h2TrackPtPhiNorm"); if(!hPhiPt) cout<<"Could not load h2TrackPtPhiNorm"<<endl; if(!hPhiPt)Printf("%s%d no phi-pt efficiency spectrum available",(char*)__FILE__,__LINE__); gROOT->cd(); TH2D *hPhiPtClone = (TH2D*)hPhiPt->Clone(hPhiPt->GetName()); fIn->Close(); return hPhiPtClone; }
TH2D* Plot2D (std::string var,std::vector<TFile*>& tfiles,std::vector<double>& weights) { double weightTot = 0.0; for ( int i = 0; i<weights.size(); i++) { weightTot+=weights[i]; } std::string name = var; name+="NEW"; TH2D* hVar = (TH2D*)tfiles[0]->Get(var.c_str()); TH2D* HVar = (TH2D*)hVar->Clone(name.c_str()); //HVar->Sumw2(); for (int i=1; i<tfiles.size(); i++) { TH2D* htempVar = (TH2D*)tfiles[i]->Get(var.c_str()); HVar->Add(htempVar,weights[i]/weightTot); } return HVar; }
TH2D* GetJetCorrFunc2D_ZYA1(int itrg, int jass) { TH2D* hcorr = (TH2D*)GetRawCorrFunc2D_ratio(itrg,jass); TH2D* hcorr_clone = (TH2D*)hcorr->Clone(Form("corr_clone_itrg%d_jass%d",itrg,jass)); hcorr_clone->Reset(); for(int ietabin=1;ietabin<=hcorr->GetNbinsX();ietabin++) { TH1D* hcorrphi = (TH1D*)hcorr->ProjectionY(Form("corrphi_%d",ietabin),ietabin,ietabin,"e"); hcorrphi->SetAxisRange(0.5,2.0,"X"); double histminY = hcorrphi->GetMinimum(); fitfunc = new TF1("fitfunc","[0]+[1]*x",0.8,1.2); fitfunc->SetParameters(histminY,0); fitfunc->FixParameter(1,0); for(int ifit=0;ifit<3;ifit++) hcorrphi->Fit(Form("fitfunc_%d",ietabin),"RNO"); float level = fitfunc->GetParameter(0); for(int iphibin=1;iphibin<=hcorrphi->GetNbinsY();iphibin++) hcorr_clone->SetBinContent(ietabin,iphibin,hcorr->GetBinContent(ietabin,iphibin)-level); delete fitfunc; } float max = hcorr_clone->GetBinContent(hcorr_clone->GetMaximumBin()); hcorr_clone->SetAxisRange(ymin,max*1.3,"Z"); return hcorr_clone; }
void mcruncorr(int filenum = 0) { string buffer; vector<string> listoffiles; int nlines = 0; ifstream infile("/net/hisrv0001/home/dav2105/corrana/makecorrhists/franksorted.txt"); if (!infile.is_open()) { cout << "Error opening file. Exiting." << endl; return; } else { while (!infile.eof()) { infile >> buffer; listoffiles.push_back(buffer); nlines++; } } // int filenum = 13; cout<<"opening: "<<listoffiles[filenum].data()<<endl; // alicecorrana("/mnt/hadoop/cms/store/user/velicanu/mergedv1_sortedforest/mergesortv1_2.root"); mccorrana(listoffiles[filenum].data()); // double leadingjetptlow[] = {0 ,70 ,70 ,120,90 ,60 ,120,90 ,60 }; // double leadingjetpthigh[] = {300,90 ,300,300,300,300,300,300,300}; // double subleadingjetptlow[] = {70 ,0 ,50 ,50 ,50 ,50 ,50 ,50 ,50 }; // double subleadingjetpthigh[] = {90 ,300,300,300,300,300,300,300,300}; // double ptasslow[] = {1,1,1,2,2,2,3,3,3}; // double ptasshigh[] = {2,2,2,3,3,3,4,4,4}; // int centmin[] = {0,4,8,16,24}; // int centmax[] = {4,8,16,24,28}; double leadingjetptlow[] = {0 ,70 ,0 ,70 ,0 ,70 ,90 ,90 ,90 }; double leadingjetpthigh[] = {300,90 ,300,90 ,300,90 ,300,300,300}; double subleadingjetptlow[] = {70 ,0 ,70 ,0 ,70 ,0 ,50 ,50 ,50 }; double subleadingjetpthigh[] = {90 ,300,300,300,300,300,300,300,300}; double ptasslow[] = {1 ,1 ,2 ,2 ,3 ,3 ,1 ,2 ,3 }; double ptasshigh[] = {2 ,2 ,3 ,3 ,4 ,4 ,2 ,3 ,4 }; int centmin[] = {0,4,8,12,16,20}; int centmax[] = {4,8,12,16,20,24}; TFile * outf = new TFile(Form("frank_pf3_%d.root",filenum),"recreate"); for(int i = 6 ; i < 9 ; ++i) { cout<<"pt iteration "<<i<<endl; // for(int cent = 0 ; cent < 3 ; ++cent) // for(int cent = 0 ; cent < 9 ; ++cent) for(int cent = 0 ; cent < 6 ; ++cent) { cout<<"cent iteration "<<cent<<endl; TH2D * ljtsig = JetTrackSignal(0, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent]); TH2D * ljtbak = JetTrackBackground(0, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent]); TH2D * ljtcorr = (TH2D*)ljtsig->Clone(Form("corr_leadingjet%d_%d_ass%d_%d_cmin%d_cmax%d",(int)leadingjetptlow[i],(int)leadingjetpthigh[i],(int)ptasslow[i],(int)ptasshigh[i],centmin[cent],centmax[cent])); ljtcorr->Divide(ljtbak); ljtcorr->Scale(ljtbak->GetBinContent(ljtbak->FindBin(0,0))); ljtcorr->GetXaxis()->SetRange(ljtcorr->GetXaxis()->FindBin(-1.6),ljtcorr->GetXaxis()->FindBin(1.6)); ljtcorr->GetYaxis()->SetRange(ljtcorr->GetYaxis()->FindBin(-3.1415926/2.0),ljtcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); TH2D * sljtsig = JetTrackSignal(1, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent]); TH2D * sljtbak = JetTrackBackground(1, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent]); TH2D * sljtcorr = (TH2D*)sljtsig->Clone(Form("corr_subleadingjet%d_%d_ass%d_%d_cmin%d_cmax%d",(int)leadingjetptlow[i],(int)leadingjetpthigh[i],(int)ptasslow[i],(int)ptasshigh[i],centmin[cent],centmax[cent])); sljtcorr->Divide(sljtbak); sljtcorr->Scale(sljtbak->GetBinContent(sljtbak->FindBin(0,0))); sljtcorr->GetXaxis()->SetRange(sljtcorr->GetXaxis()->FindBin(-1.6),sljtcorr->GetXaxis()->FindBin(1.6)); sljtcorr->GetYaxis()->SetRange(sljtcorr->GetYaxis()->FindBin(-3.1415926/2.0),sljtcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); } } outf->Write(); outf->Close(); }
void makeTurnPhotonOn_fromTree() { TFile *inFile = TFile::Open("hydjet_photons_compTree.root"); //TFile *inFile = TFile::Open("/export/d00/scratch/luck/jet55_data_compTree_combined.root"); TTree *inTree = (TTree*)inFile->Get("l1_photon_tree"); Int_t run, lumi, evt; Int_t nl1Egamma; Int_t l1Egamma_hwPt[MAXJETS], l1Egamma_hwEta[MAXJETS], l1Egamma_hwPhi[MAXJETS], l1Egamma_hwQual[MAXJETS]; Int_t l1Egamma_hwIso[MAXJETS]; Float_t l1Egamma_pt[MAXJETS], l1Egamma_eta[MAXJETS], l1Egamma_phi[MAXJETS]; Int_t nl1Jet; Int_t l1Jet_hwPt[MAXJETS], l1Jet_hwEta[MAXJETS], l1Jet_hwPhi[MAXJETS], l1Jet_hwQual[MAXJETS]; Float_t l1Jet_pt[MAXJETS], l1Jet_eta[MAXJETS], l1Jet_phi[MAXJETS]; Int_t emcand_hwPt[144], emcand_hwPhi[144], emcand_hwEta[144], emcand_hwIso[144]; Int_t iso3x3[144], isoCross[144], isoFourPoint[144], isoSingle[144], isoHolePunch[144]; Int_t region_hwPt[396], region_hwEta[396], region_hwPhi[396]; Int_t nPhoton; Float_t photon_pt[MAXJETS]; Float_t photon_eta[MAXJETS]; Float_t photon_phi[MAXJETS]; Float_t cc4[MAXJETS]; Float_t cr4[MAXJETS]; Float_t ct4PtCut20[MAXJETS]; Float_t trkSumPtHollowConeDR04[MAXJETS]; Float_t hcalTowerSumEtConeDR04[MAXJETS]; Float_t ecalRecHitSumEtConeDR04[MAXJETS]; Float_t hadronicOverEm[MAXJETS]; Float_t sigmaIetaIeta[MAXJETS]; Float_t isEle[MAXJETS]; Float_t sigmaIphiIphi[MAXJETS]; Float_t swissCrx[MAXJETS]; Float_t seedTime[MAXJETS]; Bool_t goodEvent; Int_t hiBin; Int_t L1_SingleEG2_BptxAND, L1_SingleEG5_BptxAND, L1_SingleEG8_BptxAND, L1_SingleEG12; inTree->SetBranchAddress("run",&run); inTree->SetBranchAddress("lumi",&lumi); inTree->SetBranchAddress("evt",&evt); inTree->SetBranchAddress("goodEvent",&goodEvent); inTree->SetBranchAddress("hiBin",&hiBin); inTree->SetBranchAddress("nl1Egamma",&nl1Egamma); inTree->SetBranchAddress("l1Egamma_hwPt",l1Egamma_hwPt); inTree->SetBranchAddress("l1Egamma_hwEta",l1Egamma_hwEta); inTree->SetBranchAddress("l1Egamma_hwPhi",l1Egamma_hwPhi); inTree->SetBranchAddress("l1Egamma_hwQual",l1Egamma_hwQual); inTree->SetBranchAddress("l1Egamma_hwIso",l1Egamma_hwIso); inTree->SetBranchAddress("l1Egamma_pt",l1Egamma_pt); inTree->SetBranchAddress("l1Egamma_eta",l1Egamma_eta); inTree->SetBranchAddress("l1Egamma_phi",l1Egamma_phi); inTree->SetBranchAddress("nl1Jet",&nl1Jet); inTree->SetBranchAddress("l1Jet_hwPt",l1Jet_hwPt); inTree->SetBranchAddress("l1Jet_hwEta",l1Jet_hwEta); inTree->SetBranchAddress("l1Jet_hwPhi",l1Jet_hwPhi); inTree->SetBranchAddress("l1Jet_hwQual",l1Jet_hwQual); inTree->SetBranchAddress("l1Jet_pt",l1Jet_pt); inTree->SetBranchAddress("l1Jet_eta",l1Jet_eta); inTree->SetBranchAddress("l1Jet_phi",l1Jet_phi); inTree->SetBranchAddress("emcand_hwPt",emcand_hwPt); inTree->SetBranchAddress("emcand_hwPhi",emcand_hwPhi); inTree->SetBranchAddress("emcand_hwEta",emcand_hwEta); inTree->SetBranchAddress("emcand_hwIso",emcand_hwIso); inTree->SetBranchAddress("iso3x3",iso3x3); inTree->SetBranchAddress("isoCross",isoCross); inTree->SetBranchAddress("isoFourPoint",isoFourPoint); inTree->SetBranchAddress("isoSingle",isoSingle); inTree->SetBranchAddress("isoHolePunch",isoHolePunch); inTree->SetBranchAddress("region_hwPt",region_hwPt); inTree->SetBranchAddress("region_hwPhi",region_hwPhi); inTree->SetBranchAddress("region_hwEta",region_hwEta); inTree->SetBranchAddress("nPhoton",&nPhoton); inTree->SetBranchAddress("photon_pt",photon_pt); inTree->SetBranchAddress("photon_eta",photon_eta); inTree->SetBranchAddress("photon_phi",photon_phi); inTree->SetBranchAddress("cc4",cc4); inTree->SetBranchAddress("cr4",cr4); inTree->SetBranchAddress("ct4PtCut20",ct4PtCut20); inTree->SetBranchAddress("trkSumPtHollowConeDR04",trkSumPtHollowConeDR04); inTree->SetBranchAddress("hcalTowerSumEtConeDR04",hcalTowerSumEtConeDR04); inTree->SetBranchAddress("ecalRecHitSumEtConeDR04",ecalRecHitSumEtConeDR04); inTree->SetBranchAddress("hadronicOverEm",hadronicOverEm); inTree->SetBranchAddress("sigmaIetaIeta",sigmaIetaIeta); inTree->SetBranchAddress("isEle",isEle); inTree->SetBranchAddress("sigmaIphiIphi",sigmaIphiIphi); inTree->SetBranchAddress("swissCrx",swissCrx); inTree->SetBranchAddress("seedTime",seedTime); inTree->SetBranchAddress("L1_SingleEG2_BptxAND", &L1_SingleEG2_BptxAND); inTree->SetBranchAddress("L1_SingleEG5_BptxAND", &L1_SingleEG5_BptxAND); inTree->SetBranchAddress("L1_SingleEG8_BptxAND", &L1_SingleEG8_BptxAND); inTree->SetBranchAddress("L1_SingleEG12", &L1_SingleEG12); Int_t nGen; Float_t gen_pt[MAXJETS], gen_eta[MAXJETS];//, gen_phi[MAXJETS]; Float_t gen_iso[MAXJETS]; Int_t gen_id[MAXJETS], gen_momId[MAXJETS]; inTree->SetBranchAddress("nGen",&nGen); inTree->SetBranchAddress("gen_pt",gen_pt); inTree->SetBranchAddress("gen_eta",gen_eta); //inTree->SetBranchAddress("gen_phi",gen_phi); inTree->SetBranchAddress("gen_iso",gen_iso); inTree->SetBranchAddress("gen_id",gen_id); inTree->SetBranchAddress("gen_momId",gen_momId); TFile *outFile = new TFile(Form("hist_hydjet_photons_reco.root"),"RECREATE"); outFile->cd(); const int nBins = 100; const double maxPt = 100; TH1D *l1Pt = new TH1D("l1Pt",";L1 p_{T} (GeV)",nBins,0,maxPt); TH1D *fPt[3]; fPt[0] = new TH1D("fPt",";offline p_{T} (GeV)",nBins,0,maxPt); fPt[1] = (TH1D*)fPt[0]->Clone("fPt_cen"); fPt[2] = (TH1D*)fPt[0]->Clone("fPt_periph"); TH1D *accepted[THRESHOLDS][3]; TH1D *isoDistribution = new TH1D("isoDistribution",";isolation energy (GeV)",100, -5, 45); TH1D *badIsoDistribution = (TH1D*)isoDistribution->Clone("badIsoDistribution"); TH1D *jetSpectra = new TH1D("jetSpectra","l1 jet (GeV)",64, 0, 256); TH1D *badJetSpectra = (TH1D*)jetSpectra->Clone("badJetSpectra"); TH1D *goodJetSpectra = (TH1D*)jetSpectra->Clone("goodJetSpectra"); for(int i = 0; i < THRESHOLDS; ++i) for(int j = 0; j < 3; ++j) { accepted[i][j] = new TH1D(Form("accepted_pt%d_%d",(int)L1_THRESHOLD[i],j),";offline p_{T}",nBins,0,maxPt); } TH2D *corr = new TH2D("corr",";offline p_{T};l1 p_{T}",nBins,0,maxPt,nBins,0,maxPt); TH2D *matching = new TH2D("matching",";#Delta #eta;#Delta #phi",100,-5,5,100,0, TMath::Pi() ); TH2D *matched_bad = (TH2D*)matching->Clone("matched_bad"); TH2D *absolute_position = new TH2D("absolute_position",";#eta;#phi",50,-5,5,50,-TMath::Pi(), TMath::Pi()); Long64_t entries = inTree->GetEntries(); for(Long64_t j = 0; j < entries; ++j) { if(j % 10000 == 0) printf("%lld / %lld\n",j,entries); inTree->GetEntry(j); double maxl1eta = -999; double maxl1phi = -999; double maxl1pt = -1; double iso = -999; //match to RCT candidates // for(int i = 0; i < 144; ++i) // { // if( emcand_hwPt[i] > maxl1pt) // //if( ((0.5*iso3x3[i])-emcand_hwPt[i]) < 1.0 ) // 0.5 factor to convert to GeV, hacky // { // maxl1pt = emcand_hwPt[i]; // maxl1eta = getPhysicalEta(emcand_hwEta[i]); // maxl1phi = getPhysicalPhi(emcand_hwPhi[i]); // iso = (0.5*iso3x3[i])-emcand_hwPt[i]; // } // } // match to Layer 2 EGammas double maxisopt = l1Egamma_pt[0]; double maxnonisopt = l1Egamma_pt[4]; maxl1pt = std::max(maxisopt, maxnonisopt); //match to Layer 2 jets // for(int i = 0; i < nl1Jet; ++i) // { // if(l1Jet_pt[i] > maxl1pt) // { // maxl1eta = l1Jet_eta[i]; // maxl1phi = l1Jet_phi[i]; // maxl1pt = l1Jet_pt[i]; // iso = 0; // } // } // //match to regions // for(int i = 0; i < 396; ++i) // { // if(region_hwPt[i] > maxl1pt) // { // maxl1pt = region_hwPt[i]; // maxl1eta = getPhysicalEta(region_hwEta[i]); // maxl1phi = getPhysicalPhi(region_hwPhi[i]); // } // } double maxfpt = -1; double maxfeta = -999; double maxfphi = -999; //match to RECO for(int i = 0; i < nPhoton; ++i) { if(photon_pt[i] > maxfpt) if((cc4[i] + cr4[i] + ct4PtCut20[i]) < 1) if(TMath::Abs(photon_eta[i]) < 1.4791) if(!isEle[i]) if(TMath::Abs(seedTime[i])<3) if(swissCrx[i] < 0.9) if(sigmaIetaIeta[i] > 0.002) if(sigmaIphiIphi[i] > 0.002) if(hadronicOverEm[i] < 0.1) { maxfpt = photon_pt[i]; maxfeta = photon_eta[i]; maxfphi = photon_phi[i]; } } // //match to GEN // for(int i = 0; i < nGen; ++i) // { // if(TMath::Abs(gen_momId[i]) <= 22) // if(gen_id[i] == 22) // if(gen_iso[i] < 5) // if(TMath::Abs(gen_eta[i]) < 1.479 ) // if(gen_pt[i] > maxfpt) { // maxfpt = gen_pt[i]; // maxfeta = gen_eta[i]; // } // } //if(f_num > MAXJETS) std::cout << "TOO SMALL" << std::endl; l1Pt->Fill(maxl1pt); // if(goodEvent && maxl1pt < 8 && maxfpt > 30) // { // std::cout << "***********" << std::endl; // std::cout << "run lumi evt" << std::endl; // std::cout << run << " " << lumi << " " << evt << std::endl; // std::cout << "l1pt fpt" << std::endl; // std::cout << maxl1pt << " " << maxfpt << std::endl; // std::cout << "***********" << std::endl; // } if(goodEvent) { fPt[0]->Fill(maxfpt); if(hiBin < 60) fPt[1]->Fill(maxfpt); else if (hiBin >= 100) fPt[2]->Fill(maxfpt); corr->Fill(maxfpt,maxl1pt); double diffphi = TMath::Abs(maxfphi-maxl1phi); if(diffphi > TMath::Pi()) diffphi = (2*TMath::Pi()) - diffphi; double diffeta = maxfeta-maxl1eta; matching->Fill(diffeta, diffphi); isoDistribution->Fill(iso); jetSpectra->Fill(l1Jet_pt[0]); if(maxl1pt <= 8 && maxfpt > 40) { matched_bad->Fill(diffeta, diffphi); goodJetSpectra->Fill(l1Jet_pt[0]); absolute_position->Fill(maxfeta, maxfphi); } //double deltaR = TMath::Sqrt(diffphi*diffphi + diffeta*diffeta); //if(deltaR > 0.5) if(maxfpt < 15) { badIsoDistribution->Fill(iso); badJetSpectra->Fill(l1Jet_pt[0]); } for(int k = 0; k < THRESHOLDS; ++k) { if(maxl1pt>L1_THRESHOLD[k]) { // int threshold = 0; // switch(k) // { // case 0: // threshold = L1_SingleEG2_BptxAND; // break; // case 1: // threshold = L1_SingleEG5_BptxAND; // break; // case 2: // threshold = L1_SingleEG8_BptxAND; // break; // case 3: // threshold = L1_SingleEG12; // break; // } // if(threshold) // { accepted[k][0]->Fill(maxfpt); if(hiBin < 60) accepted[k][1]->Fill(maxfpt); else if (hiBin >= 100) accepted[k][2]->Fill(maxfpt); } } } } TGraphAsymmErrors *a[THRESHOLDS][3]; for(int k = 0; k < THRESHOLDS; ++k){ for(int l = 0; l < 3; ++l) { a[k][l] = new TGraphAsymmErrors(); a[k][l]->BayesDivide(accepted[k][l],fPt[l]); a[k][l]->SetName(Form("asymm_pt_%d_%d",(int)L1_THRESHOLD[k],l)); } } l1Pt->Write(); fPt[0]->Write(); fPt[1]->Write(); fPt[2]->Write(); corr->Write(); matching->Write(); matched_bad->Write(); isoDistribution->Write(); badIsoDistribution->Write(); jetSpectra->Write(); badJetSpectra->Write(); goodJetSpectra->Write(); absolute_position->Write(); for(int k = 0; k < THRESHOLDS; ++k){ for(int l = 0; l < 3; ++l) { accepted[k][l]->Write(); a[k][l]->Write(); } } inFile->Close(); outFile->Close(); }
void pidFitter::processSpecies( string species, int charge, reporter * rp ){ cout << "[pidFitter." << __FUNCTION__ << "]" << endl; string hName = "nSig_" + sName( species, charge ); // get the pt Binning vector<double>pBins = config->getDoubleVector( "binning.p" ); string useNode = ""; TH3* h3 = book->get3D( hName ); int nFits = config->getInt( species + "_Fit:nFits", 1 ); cout << "Number of Fit Categories: " << nFits << endl; for ( int iFit = 1; iFit <= nFits; iFit++ ){ string optPath = species + "_Fit.opt" + config->getString( species + "_Fit.fit"+ts(iFit)+":options"); int fBin = config->getInt( species + "_Fit.fit"+ts(iFit)+":min", 1 ); int lBin = config->getInt( species + "_Fit.fit"+ts(iFit)+":max", pBins.size() ); cout << "Fitting P bins ( " << fBin << " --> " << lBin << " ) " << endl; for ( int i = fBin; i <= lBin; i ++ ){ // get the Pt range for title etc. double pLow = h3->GetZaxis()->GetBinLowEdge( i ); double pHi = h3->GetZaxis()->GetBinLowEdge( i + 1 ); // look at one Pt bin at a time h3->GetZaxis()->SetRange( i, i ); // Get the 2D projection we want TH2D* proj; proj = (TH2D*)h3->Project3D( "xy" ); string name = proj->GetName(); TH2D* cut = (TH2D*) proj->Clone( (name + "cut").c_str() ); rp->newPage( 1, 2 ); proj->SetTitle( ( ts( pLow, 4 ) + " #leq " + " P #leq" + ts( pHi, 4 ) ).c_str() ); gPad->SetLogz( 1 ); proj->Draw( "colz" ); //nProj->Draw("colz"); // process the square cuts makeSquareCuts( cut, optPath + ".squareCut" ); // draw the distribution after square cuts rp->cd( 1, 2 ); gPad->SetLogz( 1 ); cut->SetTitle( ( "After 1D Cuts : " + ts( pLow, 4 ) + " #leq " + " P #leq" + ts( pHi, 4 ) ).c_str() ); cut->Draw( "colz" ); rp->savePage( ); // fit using the dkl algorithm if ( config->nodeExists( optPath + ".dkl" ) ) runDkl( cut, rp, optPath ); // runs the 2d gaussian fit else if ( config->nodeExists( optPath + ".mgf" ) ) runMultiGauss( cut, rp, species, optPath, i ); } } }
void BasicCase_tests::MyTest() { float fnum = 2.00001f; // CPPUNIT_FAIL("zxczc"); CPPUNIT_ASSERT_DOUBLES_EQUAL( fnum, 2.0f, 0.0005 ); std::string pattern_string("%%d pattern"); std::string test_string("test pattern"); std::string replace_string("test"); TROOT troot("TreeAnalysis","compiled analysisDST macros"); TApplication app(); // h->Draw(); // h->Print(); // hd->Print(); // h->PrintErrors(); // PrintErrors(hd); TH2DA * h2 = (TH2DA *)h->Clone("new h"); // h2->PrintErrors(); h2->Divide(h); // h2->PrintErrors(); CPPUNIT_ASSERT_DOUBLES_EQUAL( sqrt(2), h2->GetBinErrorH(1, 1), 0.0005 ); CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, h2->GetBinContent(1, 1), 0.0005 ); TH2D * hd2 = (TH2D*)hd->Clone("new hd"); hd2->Divide(hd); // PrintErrors(hd2); CPPUNIT_ASSERT_DOUBLES_EQUAL( sqrt(2), hd2->GetBinError(1, 1), 0.0005 ); TH2DA * h3 = (TH2DA *)h->Clone("h3: new h"); TH2DA * h4 = (TH2DA *)h->Clone("h4: new h"); h3->Reset(); h4->Reset(); fill_flat(h3); fill_rising(h4); // h3->PrintErrors(); // h4->PrintErrors(); TH2DA * h5 = TH2DA::Efficiency("h5_eff", h3, h4); // h5->PrintErrors(); // PR(h5->GetTotalErrorU()); // PR(h5->Integral()); // PR(h5->GetTotalErrorL()); CPPUNIT_ASSERT_DOUBLES_EQUAL( (h5->GetTotalErrorH() - h5->GetTotalErrorL()) == 0.0, false, 0.0005 ); // TFile * f = new TFile("/tmp/test.root", "RECREATE"); // if (f->IsOpen()) // { // f->cd(); // h5->Write(); // h5->GetAsymErrorsGraphX(4)->Write("grx"); // h5->GetAsymErrorsGraphY(4)->Write("gry"); // f->Close(); // } }
void SimplePlot2D(){ //string filename = "data/scan_CH1-64_unmasked.root"; //string filename = "data/scan_CH1-50_masked.root"; string filename = "test.root"; string varXname = "VMM #"; string varYname = "CH #"; // delay count stuff int CH = 21; double delays[5]; double count_tot[5]; double count_right[5]; for(int i = 0; i < 5; i++){ delays[i] = double(i)*5.; count_tot[i] = 0.; count_right[i] = 0.; } /////////////////////////////////////////////////////// TChain* tree = new TChain("MMFE8","MMFE8"); tree->AddFile(filename.c_str()); MMFE8Base* base = new MMFE8Base(tree); int N = tree->GetEntries(); TH2D* hist = new TH2D("hist","hist", 8, 0.5, 8.5, 64, 0.5,64.5); TH2D* histN = (TH2D*) hist->Clone("norm"); TH2D* histchch = new TH2D("histchch","histchch", 64, 0.5, 64.5, 64, 0.5,64.5); TH2D* histDelay = new TH2D("histN","histN", 31, 9.5, 40.5, 5,-0.5, 4.5); TH2D* histDelayD = new TH2D("histD","histD", 31, 9.5, 40.5, 5,-0.5, 4.5); for(int i = 0; i < N; i++){ base->GetEntry(i); if(base->CHpulse == CH){ //count_tot[base->Delay] += 1.; count_tot[(base->TPDAC-80)/20] += 1.; if(base->CHpulse == base->CHword) //count_right[base->Delay] += base->TDO; count_right[(base->TPDAC-80)/20] += base->PDO; } //histDelayD->Fill(base->CHpulse,base->Delay); histDelayD->Fill(base->CHpulse,(base->TPDAC-80)/20); if(base->CHpulse == base->CHword) //histDelay->Fill(base->CHpulse,base->Delay,base->TDO); histDelay->Fill(base->CHpulse,(base->TPDAC-80)/20,base->PDO); if((base->CHpulse != base->CHword || true) && base->VMM == 6) histchch->Fill(base->CHpulse,base->CHword); if(base->CHpulse != base->CHword) continue; hist->Fill(base->VMM,base->CHpulse,base->PDO); histN->Fill(base->VMM,base->CHpulse); } for(int x = 0; x < 8; x++){ for(int y = 0; y < 64; y++){ double v = hist->GetBinContent(x+1,y+1); double N = histN->GetBinContent(x+1,y+1); hist->SetBinContent(x+1,y+1,v/max(int(N),1)); } } TLatex l; //l.NDC(); TCanvas* can = new TCanvas("can","can",600,500); can->SetTopMargin(0.05); can->SetLeftMargin(0.12); can->SetRightMargin(0.15); gStyle->SetOptStat(0); gStyle->SetOptTitle(0); can->Draw(); can->SetGridx(); can->SetGridy(); can->cd(); hist->Draw("COLZ"); hist->GetXaxis()->SetTitle(varXname.c_str()); hist->GetXaxis()->CenterTitle(); hist->GetYaxis()->SetTitle(varYname.c_str()); hist->GetYaxis()->CenterTitle(); hist->GetYaxis()->SetTitleOffset(1.4); hist->GetYaxis()->CenterTitle(); //hist->GetYaxis()->SetRangeUser(0.,hist->GetMaximum()*1.1) ; TCanvas* canN = new TCanvas("canN","canN",600,500); canN->SetTopMargin(0.05); canN->SetLeftMargin(0.12); canN->SetRightMargin(0.15); canN->Draw(); canN->SetGridx(); canN->SetGridy(); canN->cd(); histN->Draw("COLZ"); histN->GetXaxis()->SetTitle(varXname.c_str()); histN->GetXaxis()->CenterTitle(); histN->GetYaxis()->SetTitle(varYname.c_str()); histN->GetYaxis()->CenterTitle(); histN->GetYaxis()->SetTitleOffset(1.4); histN->GetYaxis()->CenterTitle(); TCanvas* canchch = new TCanvas("canchch","canchch",600,500); canchch->SetTopMargin(0.05); canchch->SetLeftMargin(0.12); canchch->SetRightMargin(0.15); canchch->Draw(); canchch->SetGridx(); canchch->SetGridy(); canchch->cd(); histchch->Draw("COLZ"); histchch->GetXaxis()->SetTitle("CH pulsed"); histchch->GetXaxis()->CenterTitle(); histchch->GetYaxis()->SetTitle("CH data"); histchch->GetYaxis()->CenterTitle(); histchch->GetYaxis()->SetTitleOffset(1.4); histchch->GetYaxis()->CenterTitle(); histchch->GetZaxis()->SetTitle("Number of data events"); histchch->GetZaxis()->SetTitleOffset(1.4); histchch->GetZaxis()->CenterTitle(); l.DrawLatex(.54,65.2,"VMM 2"); TCanvas* can_delay = new TCanvas("can_delay","can_delay",600,500); can_delay->Draw(); can_delay->cd(); for(int i = 0; i < 5; i++) count_tot[i] = count_right[i]/count_tot[i]; TGraph* gr = new TGraph(5,delays,count_tot); gr->SetMarkerSize(4); gr->SetMarkerStyle(5); gr->Draw("AP"); histDelay->Divide(histDelayD); TCanvas* canDelay = new TCanvas("canDelay","canDelay",600,500); canDelay->SetTopMargin(0.05); canDelay->SetLeftMargin(0.12); canDelay->SetRightMargin(0.15); canDelay->Draw(); canDelay->SetGridx(); canDelay->SetGridy(); canDelay->cd(); histDelay->Draw("COLZ"); histDelay->GetXaxis()->SetTitle("CH pulsed"); histDelay->GetXaxis()->CenterTitle(); histDelay->GetYaxis()->SetTitle("Delay Count"); histDelay->GetYaxis()->CenterTitle(); histDelay->GetYaxis()->SetTitleOffset(1.4); histDelay->GetYaxis()->CenterTitle(); histDelay->GetZaxis()->SetTitle("Fraction zeroes"); histDelay->GetZaxis()->SetTitleOffset(1.4); histDelay->GetZaxis()->CenterTitle(); }
void stdruncorr(int filenum = 0) { string buffer; vector<string> listoffiles; int nlines = 0; ifstream infile("/net/hisrv0001/home/dav2105/corrana/makecorrhists/mcsorted.txt"); if (!infile.is_open()) { cout << "Error opening file. Exiting." << endl; return; } else { while (!infile.eof()) { infile >> buffer; listoffiles.push_back(buffer); nlines++; } } cout<<"opening: "<<listoffiles[filenum].data()<<endl; stdcorrana(listoffiles[filenum].data()); double leadingjetptlow[] = {100,100,100,100,100,100,100,100,100}; double leadingjetpthigh[] = {120,120,120,300,300,300,300,300,300}; double subleadingjetptlow[] = {50 ,50 ,50 ,50 ,50 ,50 ,50 ,50 ,50 }; double subleadingjetpthigh[] = {120,120,120,300,300,300,300,300,300}; double ptasslow[] = {2 ,3 ,5 ,2 ,3 ,3 ,1 ,2 ,3 }; double ptasshigh[] = {3 ,5 ,8 ,3 ,4 ,4 ,2 ,3 ,4 }; int centmin[] = {0,4,12,20}; int centmax[] = {4,12,20,40}; float ajmin[] = { 0.00, 0.13, 0.24, 0.35 }; float ajmax[] = { 0.13, 0.24, 0.35, 1.00 }; TFile * outf = new TFile(Form("stdmcv2_%d.root",filenum),"recreate"); for(int i = 0 ; i < 3 ; ++i) { cout<<"pt iteration "<<i<<endl; for(int cent = 0 ; cent < 4 ; ++cent) { cout<<"cent iteration "<<cent<<endl; for(int aj = 0 ; aj < 4 ; ++aj) { cout<<"aj iteration "<<aj<<endl; TH2D * ljtsig = JetTrackSignal (0, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent],ajmin[aj],ajmax[aj]); TH2D * ljtbak = JetTrackBackground(0, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent],ajmin[aj],ajmax[aj]); TH2D * ljtcorr = (TH2D*)ljtsig->Clone(Form("corr_leadingjet%d_%d_ass%d_%d_cmin%d_cmax%d_ajmin%2.2f_ajmax%2.2f",(int)leadingjetptlow[i],(int)leadingjetpthigh[i],(int)ptasslow[i],(int)ptasshigh[i],centmin[cent],centmax[cent],ajmin[aj],ajmax[aj])); ljtcorr->Divide(ljtbak); ljtcorr->Scale(ljtbak->GetBinContent(ljtbak->FindBin(0,0))); ljtcorr->GetXaxis()->SetRange(ljtcorr->GetXaxis()->FindBin(-1.6),ljtcorr->GetXaxis()->FindBin(1.6)); ljtcorr->GetYaxis()->SetRange(ljtcorr->GetYaxis()->FindBin(-3.1415926/2.0),ljtcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); TH2D * sljtsig = JetTrackSignal (1, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent],ajmin[aj],ajmax[aj]); TH2D * sljtbak = JetTrackBackground(1, leadingjetptlow[i], leadingjetpthigh[i] , subleadingjetptlow[i] , subleadingjetpthigh[i] , ptasslow[i] , ptasshigh[i], centmin[cent], centmax[cent],ajmin[aj],ajmax[aj]); TH2D * sljtcorr = (TH2D*)sljtsig->Clone(Form("corr_subleadingjet%d_%d_ass%d_%d_cmin%d_cmax%d_ajmin%2.2f_ajmax%2.2f",(int)leadingjetptlow[i],(int)leadingjetpthigh[i],(int)ptasslow[i],(int)ptasshigh[i],centmin[cent],centmax[cent],ajmin[aj],ajmax[aj])); sljtcorr->Divide(sljtbak); sljtcorr->Scale(sljtbak->GetBinContent(sljtbak->FindBin(0,0))); sljtcorr->GetXaxis()->SetRange(sljtcorr->GetXaxis()->FindBin(-4.0),sljtcorr->GetXaxis()->FindBin(4.0)); sljtcorr->GetYaxis()->SetRange(sljtcorr->GetYaxis()->FindBin(-3.1415926/2.0),sljtcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); } } } outf->Write(); outf->Close(); }
void runcorr(int condor_iter, int trackqual) { const int nptbins = 2; const int ncentbins = 1; const int najbins = 1; string buffer; vector<string> listoffiles; int nlines = 0; // ifstream infile("sortedforests.txt"); // ifstream infile("doeproposalforests.txt"); // ifstream infile("ppb_unmerged_minbias_forests.txt"); ifstream infile("HIRun2013-PromptReco-v1-HLT_PAPixelTracks_Multiplicity190_v1-forest-v2.txt"); if (!infile.is_open()) { cout << "Error opening file. Exiting." << endl; return; } else { while (!infile.eof()) { infile >> buffer; listoffiles.push_back(buffer); nlines++; } } bool dostdhists = (condor_iter%(nptbins * ncentbins * najbins) == 0); int ptbin = condor_iter % nptbins; int centbin = (condor_iter / nptbins) % ncentbins; int ajbin = (condor_iter / (nptbins * ncentbins)) % najbins; int filenum = (condor_iter / (nptbins * ncentbins * najbins)); cout << "ipt: " << ptbin << " icent: " << centbin << " iaj: " << ajbin << " filenum: " << filenum << " dostdhists: " << dostdhists << " condor_iter "<<condor_iter<< endl; int nmin = 190 , nmax = 1000; //! for first iteration of forest production /* if(filenum==0) { nmin = 110 ; nmax = 1000; } if(filenum==1) { nmin = 90 ; nmax = 110 ; } if(filenum>1 ) { nmin = 0 ; nmax = 35 ; } if(filenum>9 ) { nmin = 35 ; nmax = 90 ; } */ //! for second iteration of forest production // /* // if(filenum<24 ) { nmin = 90 ; nmax = 110 ; } // if(filenum<22 ) { nmin = 35 ; nmax = 90 ; } // if(filenum<12 ) { nmin = 110 ; nmax = 1000; } // if(filenum<10 ) { nmin = 0 ; nmax = 35 ; } // */ //! for second iteration of forest production /* if(filenum<26 ) { nmin = 90 ; nmax = 110 ; } if(filenum<23 ) { nmin = 35 ; nmax = 90 ; } if(filenum<13) { nmin = 110 ; nmax = 1000; } if(filenum<10) { nmin = 0 ; nmax = 35 ; } */ corrana(listoffiles[filenum].data(),trackqual); double pttriglow[] = {1 ,1 ,1 ,3, 1}; double pttrighigh[] = {3 ,3 ,3 ,4, 3}; double ptasslow[] = {0.25 ,2 ,0.25 ,3, 1}; double ptasshigh[] = {0.5 ,3 ,3 ,4, 3}; int centmin[] = {1,0,4,8,12,16,20,24,28,32}; int centmax[] = {1,41,8,12,16,20,24,28,32,36}; TFile * outf = new TFile(Form("corrhists_trkhfminus_trkqaul%d_nmin%d_nmax%d_ptmin%d_ptmax%d_hfmin%d_hfmax%d_%d.root",trackqual,nmin,nmax,(int)pttriglow[ptbin],(int)pttrighigh[ptbin],(int)ptasslow[ptbin],(int)ptasshigh[ptbin],filenum),"recreate"); int i = 0; int cent = 0; cout<<"cent iteration "<<cent<<endl; TH2D * ttsig = HFTrackSignal(pttriglow[ptbin],pttrighigh[ptbin],ptasslow[ptbin],ptasshigh[ptbin],centmin[cent],centmax[cent],nmin,nmax); TH2D * ttbak = HFTrackBackground(pttriglow[ptbin],pttrighigh[ptbin],ptasslow[ptbin],ptasshigh[ptbin],centmin[cent],centmax[cent],nmin,nmax); // TH1I * hntottrig = new TH1I(Form("nttottrig_trg%d_%d_ass%d_%d_cmin%d_cmax%d",(int)pttriglow[ptbin],(int)pttrighigh[ptbin],(int)ptasslow[ptbin],(int)ptasshigh[ptbin],centmin[cent],centmax[cent]),"",1,0.5,1.5); // int myntottrig = GetNTotTrig(); // hntottrig->Fill(1,myntottrig); // cout<<"ntottrig: "<<myntottrig<<endl; TH2D * ttcorr = (TH2D*)ttsig->Clone(Form("corr_trg%d_%d_ass%d_%d_cmin%d_cmax%d",(int)pttriglow[ptbin],(int)pttrighigh[ptbin],(int)ptasslow[ptbin],(int)ptasshigh[ptbin],centmin[cent],centmax[cent])); ttcorr->Divide(ttbak); ttcorr->Scale(ttbak->GetBinContent(ttbak->FindBin(4,0))); ttcorr->Scale(1/0.0594998609); //! bin width ttcorr->GetXaxis()->SetRange(ttcorr->GetXaxis()->FindBin(1),ttcorr->GetXaxis()->FindBin(7)); ttcorr->GetYaxis()->SetRange(ttcorr->GetYaxis()->FindBin(-3.1415926/2.0),ttcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); outf->Write(); outf->Close(); }
//_________________________________________________________________________________________ Int_t checkPullTree(TString pathTree, TString pathNameThetaMap, TString pathNameSigmaMap, TString mapSuffix, const Int_t collType /*0: pp, 1: pPb, 2: PbPb*/, const Bool_t plotPull = kTRUE, const Double_t downScaleFactor = 1, TString pathNameSplinesFile = "", TString prSplinesName = "", TString fileNameTree = "bhess_PIDetaTree.root", TString treeName = "fTree") { const Bool_t isNonPP = collType != 0; const Double_t massProton = AliPID::ParticleMass(AliPID::kProton); Bool_t recalculateExpecteddEdx = pathNameSplinesFile != ""; TFile* f = 0x0; f = TFile::Open(Form("%s/%s", pathTree.Data(), fileNameTree.Data())); if (!f) { std::cout << "Failed to open tree file \"" << Form("%s/%s", pathTree.Data(), fileNameTree.Data()) << "\"!" << std::endl; return -1; } // Extract the data Tree TTree* tree = dynamic_cast<TTree*>(f->Get(treeName.Data())); if (!tree) { std::cout << "Failed to load data tree!" << std::endl; return -1; } // Extract the splines, if desired TSpline3* splPr = 0x0; if (recalculateExpecteddEdx) { std::cout << "Loading splines to recalculate expected dEdx!" << std::endl << std::endl; TFile* fSpl = TFile::Open(pathNameSplinesFile.Data()); if (!fSpl) { std::cout << "Failed to open spline file \"" << pathNameSplinesFile.Data() << "\"!" << std::endl; return 0x0; } TObjArray* TPCPIDResponse = (TObjArray*)fSpl->Get("TPCPIDResponse"); if (!TPCPIDResponse) { splPr = (TSpline3*)fSpl->Get(prSplinesName.Data()); // If splines are in file directly, without TPCPIDResponse object, try to load them if (!splPr) { std::cout << "Failed to load object array from spline file \"" << pathNameSplinesFile.Data() << "\"!" << std::endl; return 0x0; } } else { splPr = (TSpline3*)TPCPIDResponse->FindObject(prSplinesName.Data()); if (!splPr) { std::cout << "Failed to load splines from file \"" << pathNameSplinesFile.Data() << "\"!" << std::endl; return 0x0; } } } else std::cout << "Taking dEdxExpected from Tree..." << std::endl << std::endl; // Extract the correction maps TFile* fMap = TFile::Open(pathNameThetaMap.Data()); if (!fMap) { std::cout << "Failed to open thetaMap file \"" << pathNameThetaMap.Data() << "\"! Will not additionally correct data...." << std::endl; } TH2D* hMap = 0x0; if (fMap) { hMap = dynamic_cast<TH2D*>(fMap->Get(Form("hRefined%s", mapSuffix.Data()))); if (!hMap) { std::cout << "Failed to load theta map!" << std::endl; return -1; } } TFile* fSigmaMap = TFile::Open(pathNameSigmaMap.Data()); if (!fSigmaMap) { std::cout << "Failed to open simgaMap file \"" << pathNameSigmaMap.Data() << "\"!" << std::endl; return -1; } TH2D* hThetaMapSigmaPar1 = dynamic_cast<TH2D*>(fSigmaMap->Get("hThetaMapSigmaPar1")); if (!hThetaMapSigmaPar1) { std::cout << "Failed to load sigma map for par 1!" << std::endl; return -1; } Double_t c0 = -1; TNamed* c0Info = dynamic_cast<TNamed*>(fSigmaMap->Get("c0")); if (!c0Info) { std::cout << "Failed to extract c0 from file with sigma map!" << std::endl; return -1; } TString c0String = c0Info->GetTitle(); c0 = c0String.Atof(); printf("Loaded parameter 0 for sigma: %f\n\n", c0); if (plotPull) std::cout << "Plotting pull..." << std::endl << std::endl; else std::cout << "Plotting delta'..." << std::endl << std::endl; Long64_t nTreeEntries = tree->GetEntriesFast(); Double_t dEdx = 0.; // Measured dE/dx Double_t dEdxExpected = 0.; // Expected dE/dx according to parametrisation Double_t tanTheta = 0.; // Tangens of (local) theta at TPC inner wall Double_t pTPC = 0.; // Momentum at TPC inner wall UShort_t tpcSignalN = 0; // Number of clusters used for dEdx UChar_t pidType = 0; Int_t fMultiplicity = 0; //Double_t phiPrime = 0; // Only activate the branches of interest to save processing time tree->SetBranchStatus("*", 0); // Disable all branches tree->SetBranchStatus("pTPC", 1); tree->SetBranchStatus("dEdx", 1); tree->SetBranchStatus("dEdxExpected", 1); tree->SetBranchStatus("tanTheta", 1); tree->SetBranchStatus("tpcSignalN", 1); tree->SetBranchStatus("pidType", 1); //tree->SetBranchStatus("phiPrime", 1); if (isNonPP) tree->SetBranchStatus("fMultiplicity", 1); tree->SetBranchAddress("dEdx", &dEdx); tree->SetBranchAddress("dEdxExpected", &dEdxExpected); tree->SetBranchAddress("tanTheta", &tanTheta); tree->SetBranchAddress("tpcSignalN", &tpcSignalN); tree->SetBranchAddress("pTPC", &pTPC); tree->SetBranchAddress("pidType", &pidType); //tree->SetBranchAddress("phiPrime", &phiPrime); if (isNonPP) tree->SetBranchAddress("fMultiplicity", &fMultiplicity); // Output file TDatime daTime; TString savefileName = Form("%s%s_checkPullSigma_%04d_%02d_%02d__%02d_%02d.root", fileNameTree.ReplaceAll(".root", "").Data(), recalculateExpecteddEdx ? "_recalcdEdx" : "", daTime.GetYear(), daTime.GetMonth(), daTime.GetDay(), daTime.GetHour(), daTime.GetMinute()); TFile* fSave = TFile::Open(Form("%s/%s", pathTree.Data(), savefileName.Data()), "recreate"); if (!fSave) { std::cout << "Failed to open save file \"" << Form("%s/%s", pathTree.Data(), savefileName.Data()) << "\"!" << std::endl; return -1; } const Double_t pBoundLow = 0.1; const Double_t pBoundUp = 5; const Int_t nBins1 = TMath::Ceil(180 / downScaleFactor); const Int_t nBins2 = TMath::Ceil(100 / downScaleFactor); const Int_t nBins3 = TMath::Ceil(60 / downScaleFactor); const Int_t nPbinsForMap = nBins1 + nBins2 + nBins3; Double_t binsPforMap[nPbinsForMap + 1]; Double_t binWidth1 = (1.0 - pBoundLow) / nBins1; Double_t binWidth2 = (2.0 - 1.0 ) / nBins2; Double_t binWidth3 = (pBoundUp - 2.0) / nBins3; for (Int_t i = 0; i < nBins1; i++) { binsPforMap[i] = pBoundLow + i * binWidth1; } for (Int_t i = nBins1, j = 0; i < nBins1 + nBins2; i++, j++) { binsPforMap[i] = 1.0 + j * binWidth2; } for (Int_t i = nBins1 + nBins2, j = 0; i < nBins1 + nBins2 + nBins3; i++, j++) { binsPforMap[i] = 2.0 + j * binWidth3; } binsPforMap[nPbinsForMap] = pBoundUp; TH2D* hPull = new TH2D("hPull", "Pull vs. p_{TPC} integrated over tan(#Theta);p_{TPC} (GeV/c);Pull", nPbinsForMap, binsPforMap, plotPull ? 120 : 240, plotPull ? -6 : -0.6, plotPull ? 6 : 0.6); TH2D* hPullAdditionalCorr = (TH2D*)hPull->Clone("hPullAdditionalCorr"); hPullAdditionalCorr->SetTitle("Pull vs. p_{TPC} integrated over tan(#Theta) with additional dEdx correction w.r.t. tan(#Theta)"); /* const Int_t nThetaHistos = 3; TH2D* hPullTheta[nThetaHistos]; TH2D* hPullAdditionalCorrTheta[nThetaHistos]; Double_t tThetaLow[nThetaHistos] = { 0.0, 0.4, 0.9 }; Double_t tThetaHigh[nThetaHistos] = { 0.1, 0.5, 1.0 }; */ const Int_t nThetaHistos = 10; TH2D* hPullTheta[nThetaHistos]; TH2D* hPullAdditionalCorrTheta[nThetaHistos]; Double_t tThetaLow[nThetaHistos] = { 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 }; Double_t tThetaHigh[nThetaHistos] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 }; for (Int_t i = 0; i < nThetaHistos; i++) { hPullTheta[i] = new TH2D(Form("hPullTheta_%d", i), Form("Pull vs. p_{TPC} for %.2f <= |tan(#Theta)| < %.2f;p_{TPC} (GeV/c);Pull", tThetaLow[i], tThetaHigh[i]), nPbinsForMap, binsPforMap, plotPull ? 120 : 240, plotPull ? -6 : -0.6, plotPull ? 6 : 0.6); hPullAdditionalCorrTheta[i] = new TH2D(Form("hPullAdditionalCorrTheta_%d", i), Form("Pull vs. p_{TPC} for %.2f <= |tan(#Theta)| < %.2f with additional dEdx correction w.r.t. tan(#Theta);p_{TPC} (GeV/c);Pull", tThetaLow[i], tThetaHigh[i]), nPbinsForMap, binsPforMap, plotPull ? 120 : 240, plotPull ? -6 : -0.6, plotPull ? 6 : 0.6); } TF1 corrFuncMult("corrFuncMult", "[0] + [1]*TMath::Max([4], TMath::Min(x, [3])) + [2] * TMath::Power(TMath::Max([4], TMath::Min(x, [3])), 2)", 0., 0.2); TF1 corrFuncMultTanTheta("corrFuncMultTanTheta", "[0] * (x -[2]) + [1] * (x * x - [2] * [2])", -1.5, 1.5); TF1 corrFuncSigmaMult("corrFuncSigmaMul", "TMath::Max(0, [0] + [1]*TMath::Min(x, [3]) + [2] * TMath::Power(TMath::Min(x, [3]), 2))", 0., 0.2); // LHC13b.pass2 if (isNonPP) printf("Using corr Parameters for 13b.pass2\n!"); corrFuncMult.SetParameter(0, -5.906e-06); corrFuncMult.SetParameter(1, -5.064e-04); corrFuncMult.SetParameter(2, -3.521e-02); corrFuncMult.SetParameter(3, 2.469e-02); corrFuncMult.SetParameter(4, 0); corrFuncMultTanTheta.SetParameter(0, -5.32e-06); corrFuncMultTanTheta.SetParameter(1, 1.177e-05); corrFuncMultTanTheta.SetParameter(2, -0.5); corrFuncSigmaMult.SetParameter(0, 0.); corrFuncSigmaMult.SetParameter(1, 0.); corrFuncSigmaMult.SetParameter(2, 0.); corrFuncSigmaMult.SetParameter(3, 0.); /* OK, but PID task was not very satisfying corrFuncMult.SetParameter(0, -6.27187e-06); corrFuncMult.SetParameter(1, -4.60649e-04); corrFuncMult.SetParameter(2, -4.26450e-02); corrFuncMult.SetParameter(3, 2.40590e-02); corrFuncMult.SetParameter(4, 0); corrFuncMultTanTheta.SetParameter(0, -5.338e-06); corrFuncMultTanTheta.SetParameter(1, 1.220e-05); corrFuncMultTanTheta.SetParameter(2, -0.5); corrFuncSigmaMult.SetParameter(0, 7.89237e-05); corrFuncSigmaMult.SetParameter(1, -1.30662e-02); corrFuncSigmaMult.SetParameter(2, 8.91548e-01); corrFuncSigmaMult.SetParameter(3, 1.47931e-02); */ /* // LHC11a10a if (isNonPP) printf("Using corr Parameters for 11a10a\n!"); corrFuncMult.SetParameter(0, 6.90133e-06); corrFuncMult.SetParameter(1, -1.22123e-03); corrFuncMult.SetParameter(2, 1.80220e-02); corrFuncMult.SetParameter(3, 0.1); corrFuncMult.SetParameter(4, 6.45306e-03); corrFuncMultTanTheta.SetParameter(0, -2.85505e-07); corrFuncMultTanTheta.SetParameter(1, -1.31911e-06); corrFuncMultTanTheta.SetParameter(2, -0.5); corrFuncSigmaMult.SetParameter(0, -4.29665e-05); corrFuncSigmaMult.SetParameter(1, 1.37023e-02); corrFuncSigmaMult.SetParameter(2, -6.36337e-01); corrFuncSigmaMult.SetParameter(3, 1.13479e-02); */ /* OLD without saturation and large error for negative slopes corrFuncSigmaMult.SetParameter(0, -4.79684e-05); corrFuncSigmaMult.SetParameter(1, 1.49938e-02); corrFuncSigmaMult.SetParameter(2, -7.15269e-01); corrFuncSigmaMult.SetParameter(3, 1.06855e-02); */ /* OLD very good try, but with fewer pBins for the fitting corrFuncMult.SetParameter(0, 6.88365e-06); corrFuncMult.SetParameter(1, -1.22324e-03); corrFuncMult.SetParameter(2, 1.81625e-02); corrFuncMult.SetParameter(3, 0.1); corrFuncMult.SetParameter(4, 6.36890e-03); corrFuncMultTanTheta.SetParameter(0, -2.85505e-07); corrFuncMultTanTheta.SetParameter(1, -1.31911e-06); corrFuncMultTanTheta.SetParameter(2, -0.5); corrFuncSigmaMult.SetParameter(0, -4.28401e-05); corrFuncSigmaMult.SetParameter(1, 1.24812e-02); corrFuncSigmaMult.SetParameter(2, -5.28531e-01); corrFuncSigmaMult.SetParameter(3, 1.25147e-02); */ /*OLD good try corrFuncMult.SetParameter(0, 7.50321e-06); corrFuncMult.SetParameter(1, -1.25250e-03); corrFuncMult.SetParameter(2, 1.85437e-02); corrFuncMult.SetParameter(3, 0.1); corrFuncMult.SetParameter(4, 6.21192e-03); corrFuncMultTanTheta.SetParameter(0, -1.43112e-07); corrFuncMultTanTheta.SetParameter(1, -1.53e-06); corrFuncMultTanTheta.SetParameter(2, 0.3); corrFuncSigmaMult.SetParameter(0, -2.54019e-05); corrFuncSigmaMult.SetParameter(1, 8.68883e-03); corrFuncSigmaMult.SetParameter(2, -3.36176e-01); corrFuncSigmaMult.SetParameter(3, 1.29230e-02); */ /* // LHC10h.pass2 if (isNonPP) printf("Using corr Parameters for 10h.pass2\n!"); corrFuncMult.SetParameter(0, 3.21636e-07); corrFuncMult.SetParameter(1, -6.65876e-04); corrFuncMult.SetParameter(2, 1.28786e-03); corrFuncMult.SetParameter(3, 1.47677e-02); corrFuncMult.SetParameter(4, 0.); corrFuncMultTanTheta.SetParameter(0, 7.23591e-08); corrFuncMultTanTheta.SetParameter(1, 2.7469e-06); corrFuncMultTanTheta.SetParameter(2, -0.5); corrFuncSigmaMult.SetParameter(0, -1.22590e-05); corrFuncSigmaMult.SetParameter(1, 6.88888e-03); corrFuncSigmaMult.SetParameter(2, -3.20788e-01); corrFuncSigmaMult.SetParameter(3, 1.07345e-02); */ /*OLD bad try corrFuncMult.SetParameter(0, 2.71514e-07); corrFuncMult.SetParameter(1, -6.92031e-04); corrFuncMult.SetParameter(2, 3.56042e-03); corrFuncMult.SetParameter(3, 1.47497e-02); corrFuncMult.SetParameter(4, 0.); corrFuncMultTanTheta.SetParameter(0, 8.53204e-08); corrFuncMultTanTheta.SetParameter(1, 2.85591e-06); corrFuncMultTanTheta.SetParameter(2, -0.5); corrFuncSigmaMult.SetParameter(0, -6.82477e-06); corrFuncSigmaMult.SetParameter(1, 4.97051e-03); corrFuncSigmaMult.SetParameter(2, -1.64954e-01); corrFuncSigmaMult.SetParameter(3, 9.21061e-03); */ //TODO NOW TF1* fShapeSmallP = new TF1("fShapeSmallP", "pol5", -0.4, 0.4); fShapeSmallP->SetParameters(1.01712, -0.0202725, -0.260692, 0.261623, 0.671854, -1.14014); for (Long64_t i = 0; i < nTreeEntries; i++) { tree->GetEntry(i); if (dEdx <= 0 || dEdxExpected <= 0 || tpcSignalN <= 10) continue; /* Double_t pT = pTPC*TMath::Sin(-TMath::ATan(tanTheta)+TMath::Pi()/2.0); if ((phiPrime > 0.072/pT+TMath::Pi()/18.0-0.035 && phiPrime < 0.07/pT/pT+0.1/pT+TMath::Pi()/18.0+0.035)) continue; */ if (pidType != kMCid) { if (pidType == kTPCid && pTPC > 0.6) continue; if (pidType == kTPCandTOFid && (pTPC < 0.6 || pTPC > 2.0)) continue; if ((collType == 2) && pidType == kTPCandTOFid && pTPC > 1.0) continue;// Only V0's in case of PbPb above 1.0 GeV/c if (pidType == kV0idPlusTOFrejected) //TODO NOW NEW continue; } if (recalculateExpecteddEdx) { dEdxExpected = 50. * splPr->Eval(pTPC / massProton); //WARNING: What, if MIP is different from 50.? Seems not to be used (tested for pp, MC_pp, PbPb and MC_PbPb), but can in principle happen } //TODO NOW /* if (TMath::Abs(tanTheta) <= 0.4) { Double_t p0 = fShapeSmallP->Eval(tanTheta) - 1.0; // Strength of the correction Double_t p1 = -9.0; // How fast the correction is turned off Double_t p2 = -0.209; // Turn off correction around 0.2 GeV/c Double_t p3 = 1.0; // Delta' for large p should be 1 Double_t corrFactor = TMath::Erf((pTPC + p2) * p1) * p0 + p3 + p0; // Add p0 to have 1 for p3 = 1 and large pTPC dEdxExpected *= corrFactor; }*/ /*TODO old unsuccessful try Double_t thetaGlobalTPC = -TMath::ATan(tanTheta) + TMath::Pi() / 2.; Double_t pTtpc = pTPC * TMath::Sin(thetaGlobalTPC); Double_t pTtpcInv = (pTtpc > 0) ? 1. / pTtpc : 0; Double_t p0 = 1.0; Double_t p1 = 1./ 0.5;//TODO 2.0; Double_t p2 = -0.2;//TODO 0.1 Double_t pTcorrFactor = p0 + (pTtpcInv > p1) * p2 * (pTtpcInv - p1); dEdxExpected *= pTcorrFactor; */ // From the momentum (via dEdxExpected) and the tanTheta of the track, the expected dEdx can be calculated (correctedDeDxExpected). // If the splines are correct, this should give in average the same value as dEdx. // Now valid: Maps created from corrected data with splines adopted to corrected data, so lookup should be for dEdxExpected=dEdxSplines (no further // eta correction) or the corrected dEdx from the track (which should ideally be = dEdxSplines) // Tested with corrected data for LHC10d.pass2: using dEdx for the lookup (which is the corrected value and should ideally be = dEdxSplines): // Results almost the same. Maybe slightly better for dEdxExpected. // No longer valid: Note that the maps take always the uncorrected dEdx w.r.t. // tanTheta, so that correctedDeDxExpected is needed here normally. However, the information for the correction will be lost at some point. // Therefore, dEdxExpected can be used instead and should provide a good approximation. Double_t c1FromSigmaMap = hThetaMapSigmaPar1->GetBinContent(getBinX(hThetaMapSigmaPar1, tanTheta), getBinY(hThetaMapSigmaPar1, 1./dEdxExpected)); Double_t expectedSigma = dEdxExpected * TMath::Sqrt( c0 * c0 + (c1FromSigmaMap * c1FromSigmaMap) / tpcSignalN); Double_t pull = (dEdx - dEdxExpected) / (plotPull ? expectedSigma: dEdxExpected); // Fill pull histo hPull->Fill(pTPC, pull); Double_t tanThetaAbs = TMath::Abs(tanTheta); for (Int_t j = 0; j < nThetaHistos; j++) { if (tanThetaAbs >= tThetaLow[j] && tanThetaAbs < tThetaHigh[j]) { hPullTheta[j]->Fill(pTPC, pull); } } if (!hMap) continue; Double_t correctionFactor = 1.; if (isNonPP) { // 1. Correct eta dependence correctionFactor = hMap->GetBinContent(getBinX(hMap, tanTheta), getBinY(hMap, 1./dEdxExpected)); // 2. Correct for multiplicity dependence: Double_t multCorrectionFactor = 1.; if (fMultiplicity > 0) { Double_t relSlope = corrFuncMult.Eval(1. / (dEdxExpected * correctionFactor)); relSlope += corrFuncMultTanTheta.Eval(tanTheta); multCorrectionFactor = 1. + relSlope * fMultiplicity; } c1FromSigmaMap = hThetaMapSigmaPar1->GetBinContent(getBinX(hThetaMapSigmaPar1, tanTheta), getBinY(hThetaMapSigmaPar1, 1./dEdxExpected)); // Multiplicity dependence of sigma depends on the real dEdx at zero multiplicity, i.e. the eta (only) corrected dEdxExpected value has to be used // since all maps etc. have been created for ~zero multiplicity Double_t relSigmaSlope = corrFuncSigmaMult.Eval(1. / (dEdxExpected * correctionFactor)); Double_t multSigmaCorrectionFactor = 1. + relSigmaSlope * fMultiplicity; dEdxExpected *= correctionFactor * multCorrectionFactor; expectedSigma = dEdxExpected * TMath::Sqrt( c0 * c0 + (c1FromSigmaMap * c1FromSigmaMap) / tpcSignalN); expectedSigma *= multSigmaCorrectionFactor; pull = (dEdx - dEdxExpected) / (plotPull ? expectedSigma: dEdxExpected); } else { correctionFactor = hMap->GetBinContent(getBinX(hMap, tanTheta), getBinY(hMap, 1./dEdxExpected)); c1FromSigmaMap = hThetaMapSigmaPar1->GetBinContent(getBinX(hThetaMapSigmaPar1, tanTheta), getBinY(hThetaMapSigmaPar1, 1./dEdxExpected)); dEdxExpected *= correctionFactor; // If data is not corrected, but the sigma map is for corrected data, re-do analysis with corrected dEdx expectedSigma = dEdxExpected * TMath::Sqrt( c0 * c0 + (c1FromSigmaMap * c1FromSigmaMap) / tpcSignalN); pull = (dEdx - dEdxExpected) / (plotPull ? expectedSigma: dEdxExpected); } pull = (dEdx - dEdxExpected) / (plotPull ? expectedSigma: dEdxExpected); hPullAdditionalCorr->Fill(pTPC, pull); for (Int_t j = 0; j < nThetaHistos; j++) { if (tanThetaAbs >= tThetaLow[j] && tanThetaAbs < tThetaHigh[j]) { hPullAdditionalCorrTheta[j]->Fill(pTPC, pull); } } } /* // Mean, Sigma, chi^2/NDF of pull of different theta bins and all in one plot TCanvas* canvPullMean = new TCanvas("canvPullMean", "canvPullMean", 100,10,1380,800); canvPullMean->SetLogx(kTRUE); canvPullMean->SetGridx(kTRUE); canvPullMean->SetGridy(kTRUE); TCanvas* canvPullSigma = new TCanvas("canvPullSigma", "canvPullSigma", 100,10,1380,800); canvPullSigma->SetLogx(kTRUE); canvPullSigma->SetGridx(kTRUE); canvPullSigma->SetGridy(kTRUE); TCanvas* canvPullChi2 = new TCanvas("canvPullChi2", "canvPullChi2", 100,10,1380,800); canvPullChi2->SetLogx(kTRUE); canvPullChi2->SetGridx(kTRUE); canvPullChi2->SetGridy(kTRUE); TCanvas* canvPull[nThetaHistos + 1]; for (Int_t i = 0, j = nThetaHistos; i < nThetaHistos + 1; i++, j--) { canvPull[i] = new TCanvas(Form("canvPull_%d", i), "canvPull", 100,10,1380,800); canvPull[i]->cd(); canvPull[i]->SetLogx(kTRUE); canvPull[i]->SetLogz(kTRUE); canvPull[i]->SetGrid(kTRUE, kTRUE); TH2D* hTemp = 0x0; TString thetaString = ""; if (i == nThetaHistos) { hTemp = hPull; thetaString = "tan(#Theta) integrated"; } else { hTemp = hPullTheta[i]; thetaString = Form("%.2f #leq |tan(#Theta)| < %.2f", tThetaLow[i], tThetaHigh[i]); } normaliseHisto(hTemp); hTemp->FitSlicesY(); hTemp->GetYaxis()->SetNdivisions(12); hTemp->GetXaxis()->SetMoreLogLabels(kTRUE); TH1D* hTempMean = (TH1D*)gDirectory->Get(Form("%s_1", hTemp->GetName())); hTempMean->SetTitle(Form("mean(pull), %s", thetaString.Data())); hTempMean->GetXaxis()->SetMoreLogLabels(kTRUE); hTempMean->SetLineWidth(2); hTempMean->SetMarkerStyle(20); TH1D* hTempSigma = (TH1D*)gDirectory->Get(Form("%s_2", hTemp->GetName())); hTempSigma->SetTitle(Form("#sigma(pull), %s", thetaString.Data())); hTempSigma->GetXaxis()->SetMoreLogLabels(kTRUE); hTempSigma->SetLineColor(kMagenta); hTempSigma->SetMarkerStyle(20); hTempSigma->SetMarkerColor(kMagenta); hTempSigma->SetLineWidth(2); TH1D* hTempChi2 = (TH1D*)gDirectory->Get(Form("%s_chi2", hTemp->GetName())); hTempChi2->SetTitle(Form("#chi^{2} / NDF (pull), %s", thetaString.Data())); hTempChi2->GetXaxis()->SetMoreLogLabels(kTRUE); hTempChi2->SetLineColor(kMagenta + 2); hTempChi2->SetMarkerStyle(20); hTempChi2->SetMarkerColor(kMagenta + 2); hTempChi2->SetLineWidth(2); hTemp->DrawCopy("colz"); hTempMean->DrawCopy("same"); hTempSigma->DrawCopy("same"); hTempChi2->Scale(-1./10.); hTempChi2->DrawCopy("same"); hTempChi2->Scale(-10.); canvPullMean->cd(); hTempMean->SetLineColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempMean->SetMarkerColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempMean->DrawCopy((i == 0 ? "" : "same")); canvPullSigma->cd(); hTempSigma->SetLineColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempSigma->SetMarkerColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempSigma->DrawCopy((i == 0 ? "" : "same")); canvPullChi2->cd(); hTempChi2->SetLineColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempChi2->SetMarkerColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempChi2->DrawCopy((i == 0 ? "" : "same")); } canvPullMean->BuildLegend(); canvPullSigma->BuildLegend(); canvPullChi2->BuildLegend(); */ // Histograms with additional correction TCanvas* canvPullMeanCorr = 0x0; TCanvas* canvPullSigmaCorr = 0x0; TCanvas* canvPullChi2Corr = 0x0; TCanvas* canvPullCorr[nThetaHistos + 1]; for (Int_t i = 0; i < nThetaHistos + 1; i++) canvPullCorr[i] = 0x0; if (hMap) { // Mean, Sigma, chi^2/NDF of pull of different theta bins and all in one plot canvPullMeanCorr = new TCanvas("canvPullMeanCorr", "canvPullMeanCorr", 100,10,1380,800); canvPullMeanCorr->SetLogx(kTRUE); canvPullMeanCorr->SetGridx(kTRUE); canvPullMeanCorr->SetGridy(kTRUE); canvPullSigmaCorr = new TCanvas("canvPullSigmaCorr", "canvPullSigmaCorr", 100,10,1380,800); canvPullSigmaCorr->SetLogx(kTRUE); canvPullSigmaCorr->SetGridx(kTRUE); canvPullSigmaCorr->SetGridy(kTRUE); canvPullChi2Corr = new TCanvas("canvPullChi2Corr", "canvPullChi2Corr", 100,10,1380,800); canvPullChi2Corr->SetLogx(kTRUE); canvPullChi2Corr->SetGridx(kTRUE); canvPullChi2Corr->SetGridy(kTRUE); for (Int_t i = 0, j = nThetaHistos; i < nThetaHistos + 1; i++, j--) { canvPullCorr[i] = new TCanvas(Form("canvPullCorr_%d", i), "canvPullCorr", 100,10,1380,800); canvPullCorr[i]->cd(); canvPullCorr[i]->SetLogx(kTRUE); canvPullCorr[i]->SetLogz(kTRUE); canvPullCorr[i]->SetGrid(kTRUE, kTRUE); TH2D* hTemp = 0x0; TString thetaString = ""; if (i == nThetaHistos) { hTemp = hPullAdditionalCorr; thetaString = "tan(#Theta) integrated"; } else { hTemp = hPullAdditionalCorrTheta[i]; thetaString = Form("%.2f #leq |tan(#Theta)| < %.2f", tThetaLow[i], tThetaHigh[i]); } normaliseHisto(hTemp); hTemp->FitSlicesY(); hTemp->GetYaxis()->SetNdivisions(12); hTemp->GetXaxis()->SetMoreLogLabels(kTRUE); TH1D* hTempMean = (TH1D*)gDirectory->Get(Form("%s_1", hTemp->GetName())); hTempMean->SetTitle(Form("mean(pull), %s", thetaString.Data())); hTempMean->GetXaxis()->SetMoreLogLabels(kTRUE); hTempMean->SetLineWidth(2); hTempMean->SetMarkerStyle(20); TH1D* hTempSigma = (TH1D*)gDirectory->Get(Form("%s_2", hTemp->GetName())); hTempSigma->SetTitle(Form("#sigma(pull), %s", thetaString.Data())); hTempSigma->GetXaxis()->SetMoreLogLabels(kTRUE); hTempSigma->SetLineColor(kMagenta); hTempSigma->SetMarkerStyle(20); hTempSigma->SetMarkerColor(kMagenta); hTempSigma->SetLineWidth(2); TH1D* hTempChi2 = (TH1D*)gDirectory->Get(Form("%s_chi2", hTemp->GetName())); hTempChi2->SetTitle(Form("#chi^{2} / NDF (pull), %s", thetaString.Data())); hTempChi2->GetXaxis()->SetMoreLogLabels(kTRUE); hTempChi2->SetLineColor(kMagenta + 2); hTempChi2->SetMarkerStyle(20); hTempChi2->SetMarkerColor(kMagenta + 2); hTempChi2->SetLineWidth(2); hTemp->DrawCopy("colz"); hTempMean->DrawCopy("same"); hTempSigma->DrawCopy("same"); hTempChi2->Scale(-1./10.); hTempChi2->DrawCopy("same"); hTempChi2->Scale(-10.); canvPullMeanCorr->cd(); hTempMean->SetLineColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempMean->SetMarkerColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempMean->DrawCopy((i == 0 ? "" : "same")); canvPullSigmaCorr->cd(); hTempSigma->SetLineColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempSigma->SetMarkerColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempSigma->DrawCopy((i == 0 ? "" : "same")); canvPullChi2Corr->cd(); hTempChi2->SetLineColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempChi2->SetMarkerColor(1 + ((j >= 9) ? (39 + 2 * (j - 9)) : j)); hTempChi2->DrawCopy((i == 0 ? "" : "same")); } canvPullMeanCorr->BuildLegend(); canvPullSigmaCorr->BuildLegend(); canvPullChi2Corr->BuildLegend(); } fSave->cd(); /*canvPullMean->Write(); canvPullSigma->Write(); canvPullChi2->Write(); for (Int_t i = 0; i < nThetaHistos + 1; i++) { canvPull[i]->Write(); }*/ canvPullMeanCorr->Write(); canvPullSigmaCorr->Write(); canvPullChi2Corr->Write(); for (Int_t i = 0; i < nThetaHistos + 1; i++) { canvPullCorr[i]->Write(); } TNamed* info = new TNamed(Form("Theta map: %s\n\nSigma map: %s\n\nSplines file: %s\n\nSplines name: %s", pathNameThetaMap.Data(), pathNameSigmaMap.Data(), pathNameSplinesFile.Data(), prSplinesName.Data()), "info"); info->Write(); fSave->Close(); return 0; }
void runcorr(int condor_iter, int trackqual, string flist = "", string tag = "", int nmin = 220, int nmax = 1000, float pttrigmin = 1, float pttrigmax = 2, float ptassmin = 1, float ptassmax = 1) { const int nptbins = 1; const int ncentbins = 1; const int najbins = 1; string buffer; vector<string> listoffiles; int nlines = 0; // ifstream infile("sortedforests.txt"); // ifstream infile("doeproposalforests.txt"); // ifstream infile("PA2013_PromptReco_Json_FullTrack12_v84_prod2.txt"); // ifstream infile("PA2013_PromptReco_Json_FullTrack12_v84_prod2_MIT.txt"); // ifstream infile("HIMinBiasUPC_PbPbUPC_pptracking_452p1_forest_v2.txt"); ifstream infile(flist.data()); if (!infile.is_open()) { cout << "Error opening file. Exiting." << endl; return; } else { while (!infile.eof()) { infile >> buffer; listoffiles.push_back(buffer); nlines++; } } bool dostdhists = (condor_iter%(nptbins * ncentbins * najbins) == 0); int ptbin = condor_iter % nptbins; int centbin = (condor_iter / nptbins) % ncentbins; int ajbin = (condor_iter / (nptbins * ncentbins)) % najbins; int filenum = (condor_iter / (nptbins * ncentbins * najbins)); cout << "ipt: " << ptbin << " icent: " << centbin << " iaj: " << ajbin << " filenum: " << filenum << " dostdhists: " << dostdhists << endl; // int nmin = 220 , nmax = 1000, one = 1; //! for first iteration of forest production /* if(filenum==0) { nmin = 110 ; nmax = 1000; } if(filenum==1) { nmin = 90 ; nmax = 110 ; } if(filenum>1 ) { nmin = 0 ; nmax = 35 ; } if(filenum>9 ) { nmin = 35 ; nmax = 90 ; } */ //! for second iteration of forest production // /* // if(filenum<24 ) { nmin = 90 ; nmax = 110 ; } // if(filenum<22 ) { nmin = 35 ; nmax = 90 ; } // if(filenum<12 ) { nmin = 110 ; nmax = 1000; } // if(filenum<10 ) { nmin = 0 ; nmax = 35 ; } // */ //! for second iteration of forest production /* if(filenum<26 ) { nmin = 90 ; nmax = 110 ; } if(filenum<23 ) { nmin = 35 ; nmax = 90 ; } if(filenum<13) { nmin = 110 ; nmax = 1000; } if(filenum<10) { nmin = 0 ; nmax = 35 ; } */ corrana(listoffiles[filenum].data(),trackqual); // double pttriglow[] = {1 ,14 ,16 ,20, 1}; // double pttrighigh[] = {2 ,16 ,20 ,24, 3}; // double ptasslow[] = {1 ,1 ,1 ,1 , 1}; // double ptasshigh[] = {2 ,2 ,2 ,2 , 3}; int centmin[] = {0,4,8,12,16,20,24,28,32}; int centmax[] = {41,8,12,16,20,24,28,32,36}; // TFile * outf = new TFile(Form("%s_trkqaul%d_nmin%d_nmax%d_tptmin%d_tptmax%d_aptmin%d_aptmax%d_%d.root",tag.data(),trackqual,nmin,nmax,(int)pttrigmin/one,(int)pttrigmax/one,(int)ptassmin/one,(int)ptassmax/one,filenum),"recreate"); cout<<Form("%s_trkqaul%d_nmin%d_nmax%d_tptmin%d_tptmax%d_aptmin%d_aptmax%d_%d.root",tag.data(),trackqual,nmin,nmax,(int)pttrigmin,(int)pttrigmax,(int)ptassmin,(int)ptassmax,filenum)<<endl; TFile * outf = new TFile(Form("%s_trkqaul%d_nmin%d_nmax%d_tptmin%d_tptmax%d_aptmin%d_aptmax%d_%d.root",tag.data(),trackqual,nmin,nmax,(int)pttrigmin,(int)pttrigmax,(int)ptassmin,(int)ptassmax,filenum),"recreate"); // int i = 0; int cent = 0; cout<<"cent iteration "<<cent<<endl; TH2D * ttsig = TrackTrackSignal(pttrigmin,pttrigmax,ptassmin,ptassmax,centmin[cent],centmax[cent],nmin,nmax); TH2D * ttbak = TrackTrackBackground(pttrigmin,pttrigmax,ptassmin,ptassmax,centmin[cent],centmax[cent],nmin,nmax); TH1I * hntottrig = new TH1I(Form("nttottrig_trg%d_%d_ass%d_%d_cmin%d_cmax%d",(int)pttrigmin,(int)pttrigmax,(int)ptassmin,(int)ptassmax,centmin[cent],centmax[cent]),"",1,0.5,1.5); int myntottrig = GetNTotTrig(); hntottrig->Fill(1,myntottrig); cout<<"ntottrig: "<<myntottrig<<endl; TH2D * ttcorr = (TH2D*)ttsig->Clone(Form("corr_trg%d_%d_ass%d_%d_cmin%d_cmax%d",(int)pttrigmin,(int)pttrigmax,(int)ptassmin,(int)ptassmax,centmin[cent],centmax[cent])); ttcorr->Divide(ttbak); ttcorr->Scale(ttbak->GetBinContent(ttbak->FindBin(0,0))); ttcorr->Scale(1/0.0594998609); //! bin width ttcorr->GetXaxis()->SetRange(ttcorr->GetXaxis()->FindBin(-4.0),ttcorr->GetXaxis()->FindBin(4.0)); ttcorr->GetYaxis()->SetRange(ttcorr->GetYaxis()->FindBin(-3.1415926/2.0),ttcorr->GetYaxis()->FindBin(3*3.1415926/2.0)); outf->Write(); outf->Close(); }
void sysError( TString inFileName="jfh_HCPR_J50U_Cent30to100_Aj0to100_SubEtaRefl.root", Int_t compMode = 0, // Compare mode: 0 reco-genSig, 1 reco-genAll, 3 genAll-genSig, 4 calo_genp-allGen Int_t sysMode = 0, // Plot mode: 0 for simple plot, 1 for difference TString outdir = ".", TString title = "test" ) { // =============================================== // Inputs // =============================================== TFile *f = new TFile(inFileName); TString inFileNameStrip(inFileName); inFileNameStrip.ReplaceAll(".root",""); TString inFileNameGen(inFileName); if (compMode==0) { inFileNameGen.ReplaceAll("djcalo","djcalo_genp"); inFileNameGen.ReplaceAll("HydjetAll","HydjetSig"); } if (compMode==1) inFileNameGen.ReplaceAll("djcalo","djcalo_genp"); else if (compMode==3) inFileNameGen.ReplaceAll("HydjetAll","HydjetSig"); else if (compMode==5) inFileNameGen.ReplaceAll("djcalo_genp","djgen"); TFile *fgen = new TFile(inFileNameGen); TString inFileNameStripGen(inFileNameGen); inFileNameStripGen.ReplaceAll(".root",""); cout << "==========================================================" << endl; cout << "Compare: " << inFileName << endl << " vs " << endl << " " << inFileNameGen << endl; cout << "==========================================================" << endl; // =============================================== // Setup // =============================================== TString tag=Form("sysError_%s_%s_%d_%d",inFileNameStrip.Data(),title.Data(),compMode,sysMode); // =============================================== // Analyze // =============================================== TH2D * hPtPNDR = (TH2D*) f->Get("hPtPNDR"); TH2D * hPtPADR = (TH2D*) f->Get("hPtPADR"); TH2D * hPtPNDRBg = (TH2D*) f->Get("hPtPNDRBg"); TH2D * hPtPADRBg = (TH2D*) f->Get("hPtPADRBg"); TH2D * hPtPNDRSub = (TH2D*)hPtPNDR->Clone(tag+"hPtPNDRSub"); TH2D * hPtPADRSub = (TH2D*)hPtPADR->Clone(tag+"hPtPADRSub"); hPtPNDRSub->Add(hPtPNDR,hPtPNDRBg,1,-1); hPtPADRSub->Add(hPtPADR,hPtPADRBg,1,-1); TH2D * hPtPNDRGen = (TH2D*) fgen->Get("hPtPNDR"); TH2D * hPtPADRGen = (TH2D*) fgen->Get("hPtPADR"); TH2D * hPtPNDRBgGen = (TH2D*) fgen->Get("hPtPNDRBg"); TH2D * hPtPADRBgGen = (TH2D*) fgen->Get("hPtPADRBg"); TH2D * hPtPNDRSubGen = (TH2D*)hPtPNDRGen->Clone(tag+"hPtPNDRSub"); TH2D * hPtPADRSubGen = (TH2D*)hPtPADRGen->Clone(tag+"hPtPADRSub"); hPtPNDRSubGen->Add(hPtPNDRGen,hPtPNDRBgGen,1,-1); hPtPADRSubGen->Add(hPtPADRGen,hPtPADRBgGen,1,-1); // =============================================== // Draw // =============================================== // Get Pt info Int_t numPtBins=hPtPNDR->GetNbinsX(); TH1D * hPt = (TH1D*)hPtPNDR->ProjectionX("hPt"); /* cout << "Pt bins: " << numPtBins << endl; for (Int_t i=0; i<numPtBins+2; ++i) { cout << "Pt Bin " << i << " Low Edge: " << hPt->GetBinLowEdge(i) << endl; } */ // What pt bins to draw const Int_t numPtBinsDraw=3; TCanvas * c6 = new TCanvas("c"+tag,"c"+tag,1400,500); c6->Divide(3,1); for (Int_t i=0; i<numPtBinsDraw; ++i) { Int_t iBeg,iEnd; if (i==0) { iBeg=2; iEnd=3;} if (i==1) { iBeg=4; iEnd=4;} if (i==2) { iBeg=5; iEnd=numPtBins;} cout << "Bin: " << iBeg << " to " << iEnd << endl; TH1D * hNr = (TH1D*)hPtPNDRSub->ProjectionY(tag+Form("hPNDRSub_%d_%d",iBeg,iEnd),iBeg,iEnd); TH1D * hAw = (TH1D*)hPtPADRSub->ProjectionY(tag+Form("hPADRSub_%d_%d",iBeg,iEnd),iBeg,iEnd); TH1D * hNrGen = (TH1D*)hPtPNDRSubGen->ProjectionY(tag+Form("hPNDRSubGen_%d_%d",iBeg,iEnd),iBeg,iEnd); TH1D * hAwGen = (TH1D*)hPtPADRSubGen->ProjectionY(tag+Form("hPADRSubGen_%d_%d",iBeg,iEnd),iBeg,iEnd); if (sysMode==1) { hNr->Add(hNrGen,-1); hAw->Add(hAwGen,-1); } if (sysMode==2) { hNr->Divide(hNrGen); hAw->Divide(hAwGen); } // Print cout << Form("%.1f < P_{T} < %.1f GeV: ",hPt->GetBinLowEdge(iBeg),hPt->GetBinLowEdge(iEnd+1)) << " SigSubBkg Integral - Nr: " << hNr->Integral() << " Aw: " << hAw->Integral() << endl << " Gen - Nr: " << hNrGen->Integral() << " Aw: " << hAwGen->Integral() << endl; // Styles hNr->SetMarkerColor(kRed); hNr->SetLineColor(kRed); hAw->SetMarkerColor(kBlue); hAw->SetLineColor(kBlue); hAwGen->SetLineStyle(2); // Axis Range if (sysMode==0) { hNr->SetYTitle("Background Subtracted Signal (GeV/c)"); hNr->SetAxisRange(-5,60,"Y"); } if (sysMode==2) { hNr->SetAxisRange(-2,6,"Y"); } // Axis Label if (compMode==0) { if (sysMode==1) { hNr->SetYTitle("(Reco Trk)-(Sig GenP) (GeV/c)"); //hNr->SetAxisRange(-20,20,"Y"); } if (sysMode==2) { hNr->SetYTitle("(Reco Trk)/(Sig GenP) (GeV/c)"); } } if (compMode==3) { if (sysMode==1) { hNr->SetYTitle("All GenP - Sig GenP (GeV/c)"); //hNr->SetAxisRange(-3,3,"Y"); } if (sysMode==2) { hNr->SetYTitle("(All GenP)/(Sig GenP) (GeV/c)"); } } hNr->SetXTitle("#Delta R"); hNr->SetAxisRange(0,0.79999,"X"); hNr->SetTitleOffset(1.5,"X"); hNr->GetXaxis()->CenterTitle(); hNr->GetYaxis()->CenterTitle(); c6->cd(i+1); // Fit if (sysMode>0) { TF1 * f0 = new TF1("f0","pol0"); f0->SetLineStyle(2); f0->SetLineWidth(1); hNr->Fit("f0"); hAw->Fit("f0"); } // Draw to Inspect hNr->Draw(); hAw->Draw("same"); if (sysMode==0) { hNrGen->Draw("hist same"); hAwGen->Draw("hist same"); } if (sysMode==0||sysMode==1) { TLine *l = new TLine(0,0,0.8,0); l->Draw(); } if (sysMode==2) { TLine *l = new TLine(0,1,0.8,1); l->Draw(); } TLegend *leg = new TLegend(0.35,0.7,0.85,0.94); leg->SetBorderSize(0); leg->SetFillStyle(0); leg->AddEntry(hNr,Form("%.1f < P_{T} < %.1f GeV",hPt->GetBinLowEdge(iBeg),hPt->GetBinLowEdge(iEnd+1)),""); if (sysMode==0) { if (compMode==0) { leg->AddEntry(hNr,"Leading (RecoTrk)","pl"); leg->AddEntry(hNrGen,"Leading (Sig. GenP)","l"); leg->AddEntry(hAw,"SubLeading (RecoTrk)","pl"); leg->AddEntry(hAwGen,"SubLeading (Sig. GenP)","l"); } if (compMode==1) { leg->AddEntry(hNr,"Leading (RecoTrk)","pl"); leg->AddEntry(hNrGen,"Leading (All GenP)","l"); leg->AddEntry(hAw,"SubLeading (RecoTrk)","pl"); leg->AddEntry(hAwGen,"SubLeading (All GenP)","l"); } } if (sysMode>0) { leg->AddEntry(hNr,"Leading","pl"); leg->AddEntry(hAw,"SubLeading","pl"); } leg->SetTextSize(0.05); leg->Draw(); } // =============================================== // Save // =============================================== c6->Print(Form("%s/%s.gif",outdir.Data(),tag.Data())); c6->Print(Form("%s/%s.eps",outdir.Data(),tag.Data())); c6->Print(Form("%s/%s.C",outdir.Data(),tag.Data())); }
void signalEff2012_PDF_details(const TString what="CTEQMSTW",const TString sample="T1bbbb",const int minnjets=3,const bool useisr=false) { TString njetsstring="."; if (minnjets==3) { //do nothing } else if (minnjets==5) { njetsstring = ".minnjets5."; } else { cout<<" minnjets = "<<minnjets<<" is not ok"<<endl; return; } TString stub1="eventcounts2x2.mergebbins"; if (sample.Contains("pMSSM") ||sample.Contains("T1ttcc") ||sample.Contains("14TeV")||sample.Contains("TChi")) stub1="eventcounts.mergebbins"; TString stub2=stub1; stub2+=".withpdfs"; if ( useisr) { stub1+=".Isr0"; stub2+=".Isr0"; } // TString nominalstub="CSVM_PF2PATjets_JES0_JER0_PFMETTypeI_METunc0_PUunc0_BTagEff05_HLTEff0."; //old TString nominalstub="JES0_JERbias_PFMETTypeI_METunc0_PUunc0_hpt20."; //new, and with JERbias TString f0file = stub1+njetsstring+nominalstub+sample+".root"; TString fpdffile = stub2+njetsstring+nominalstub+sample+".root"; TFile f0(f0file); TFile fpdf(fpdffile); vector<TH2D*> effratios; for (int ih = 0; ih<fpdf.GetListOfKeys()->GetEntries(); ih++) { TString histname = fpdf.GetListOfKeys()->At(ih)->GetName(); if (! (histname.BeginsWith("events_")&&histname.Contains(what))) continue; TString histnametotal = histname; histnametotal.ReplaceAll("events_","eventstotal_"); TString histname0=histname; histname0.ReplaceAll("_"+what+"0",""); TString histname0total = histnametotal; histname0total.ReplaceAll("_"+what+"0",""); TH2D* h0c = (TH2D*) f0.Get(histname0); TH2D* h0t = (TH2D*) f0.Get(histname0total); TH2D* hpdfc = (TH2D*) fpdf.Get(histname); TH2D* hpdft = (TH2D*) fpdf.Get(histnametotal); //now calculate efficiency TH2D* h0r = (TH2D*) h0c->Clone("h0r_"+histname); h0r->Reset(); h0r->Divide(h0c,h0t); TH2D* hpdfr = (TH2D*) hpdfc->Clone("hpdfr_"+histname); hpdfr->Reset(); hpdfr->Divide(hpdfc,hpdft); //and then the ratio of efficiencies TString rname = histname; rname.ReplaceAll("events_","effratio_"); TH2D* heffratio = (TH2D*) h0r->Clone(rname); heffratio->Reset(); heffratio->Divide(hpdfr,h0r); effratios.push_back(heffratio); } TFile fout("signalsyst_PDF_"+what+"."+sample+njetsstring+"root","recreate"); for (unsigned int ii=0; ii<effratios.size();ii++) { effratios.at(ii)->Write(); } fout.Close(); /* quick and dirty version TH2D* h0c = (TH2D*) f0.Get("events_b1_HT1000to100000_MET350to100000_2x2"); TH2D* h0t = (TH2D*) f0.Get("eventstotal_b1_HT1000to100000_MET350to100000_2x2"); TH2D* h0r = (TH2D*) h0c->Clone("h0r"); h0r->Reset(); h0r->Divide(h0c,h0t); TH2D* hpdfc = (TH2D*) fpdf.Get("events_b1_HT1000to100000_MET350to100000_CTEQMSTW0_2x2"); TH2D* hpdft = (TH2D*) fpdf.Get("eventstotal_b1_HT1000to100000_MET350to100000_CTEQMSTW0_2x2"); TH2D* hpdfr = (TH2D*) hpdfc->Clone("hpdfr"); hpdfr->Reset(); hpdfr->Divide(hpdfc,hpdft); TH2D* heffratio = (TH2D*) h0r->Clone("heffratio"); heffratio->Reset(); heffratio->Divide(hpdfr,h0r); heffratio->Draw("COLZ"); */ }
void drawJetFragBalance_DRDiff( TString inFileName= "plot/jfhCorrEtaPtBin4RBin20v2_HCPR_J50U_djcalo_Cent0to30_Aj0to100_SubEtaRefl.root", TString inFileNameHyPy="plot/jfhCorrEtaPtBin4RBin20v2_Hydjet_djcalo_Cent0to30_Aj0to100_SubEtaRefl.root", TString title = "test", Int_t drawMode=1, Int_t doLeg=1, bool cumulative = 1 ) { TFile *f = new TFile(inFileName); TString inFileNameStrip(inFileName); inFileNameStrip.ReplaceAll(".root",""); TH2D * hPtPNDR = (TH2D*) f->Get("hPtPNDR"); TH2D * hPtPADR = (TH2D*) f->Get("hPtPADR"); TH2D * hPtPNDRBg = (TH2D*) f->Get("hPtPNDRBg"); TH2D * hPtPADRBg = (TH2D*) f->Get("hPtPADRBg"); TH2D * hPtPNDRBgSub = (TH2D*)hPtPNDR->Clone(inFileNameStrip+"hPtPNDRBgSub"); TH2D * hPtPADRBgSub = (TH2D*)hPtPADR->Clone(inFileNameStrip+"hPtPADRBgSub"); hPtPNDRBgSub->Add(hPtPNDR,hPtPNDRBg,1,-1); hPtPADRBgSub->Add(hPtPADR,hPtPADRBg,1,-1); TFile *fhypy = new TFile(inFileNameHyPy); TH2D * hPtPNDRHyPy = (TH2D*) fhypy->Get("hPtPNDR"); TH2D * hPtPADRHyPy = (TH2D*) fhypy->Get("hPtPADR"); TH2D * hPtPNDRBgHyPy = (TH2D*) fhypy->Get("hPtPNDRBg"); TH2D * hPtPADRBgHyPy = (TH2D*) fhypy->Get("hPtPADRBg"); TH2D * hPtPNDRBgSubHyPy = (TH2D*)hPtPNDR->Clone(inFileNameStrip+"hPtPNDRBgSubHyPy"); TH2D * hPtPADRBgSubHyPy = (TH2D*)hPtPADR->Clone(inFileNameStrip+"hPtPADRBgSubHyPy"); hPtPNDRBgSubHyPy->Add(hPtPNDRHyPy,hPtPNDRBgHyPy,1,-1); hPtPADRBgSubHyPy->Add(hPtPADRHyPy,hPtPADRBgHyPy,1,-1); // Get Pt info Int_t numBinsPt=hPtPNDR->GetNbinsX(); Int_t numBinsDR=hPtPNDR->GetNbinsY(); TH1D * hPt = (TH1D*)hPtPNDR->ProjectionX("hPt"); cout << "Pt bins: " << numBinsPt << endl; Double_t totPtBgSubNr=hPtPNDRBgSub->Integral(); Double_t totPtBgSubAw=hPtPADRBgSub->Integral(); Double_t totPtBgSubNrHyPy=hPtPNDRBgSubHyPy->Integral(); Double_t totPtBgSubAwHyPy=hPtPADRBgSubHyPy->Integral(); int ptUp = 2; TH1D * hDRBgSubNr = (TH1D*)hPtPNDRBgSub->ProjectionY(inFileNameStrip+"hDRBgSubNr",1,ptUp); TH1D * hDRBgSubAw = (TH1D*)hPtPADRBgSub->ProjectionY(inFileNameStrip+"hDRBgSubAw",1,ptUp); TH1D * hDRBgSubNrHyPy = (TH1D*)hPtPNDRBgSubHyPy->ProjectionY(inFileNameStrip+"hDRBgSubNrHyPy",1,ptUp); TH1D * hDRBgSubAwHyPy = (TH1D*)hPtPADRBgSubHyPy->ProjectionY(inFileNameStrip+"hDRBgSubAwHyPy",1,ptUp); // Print cout << Form("%.1f < p_{T} < %.1f GeV/c: ",hPt->GetBinLowEdge(1),hPt->GetBinLowEdge(ptUp+1)) << " SigSubBkg Integral - Nr: " << endl; cout << " Data - Nr: " << hDRBgSubNr->Integral() << " Aw: " << hDRBgSubAw->Integral() << endl; cout << " Pythia+Hydjet - Nr: " << hDRBgSubNrHyPy->Integral() << " Aw: " << hDRBgSubAwHyPy->Integral() << endl; if (drawMode==1) TCanvas * c6 = new TCanvas("c6","c6",500,500); hDRBgSubNr->Scale(1./totPtBgSubNr); hDRBgSubAw->Scale(1./totPtBgSubAw); hDRBgSubNrHyPy->Scale(1./totPtBgSubNrHyPy); hDRBgSubAwHyPy->Scale(1./totPtBgSubAwHyPy); if(cumulative){ hDRBgSubNr = IntegrateFromLeft(hDRBgSubNr); hDRBgSubAw = IntegrateFromLeft(hDRBgSubAw); hDRBgSubNrHyPy = IntegrateFromLeft(hDRBgSubNrHyPy); hDRBgSubAwHyPy = IntegrateFromLeft(hDRBgSubAwHyPy); } // Set Styles hDRBgSubNr->SetMarkerStyle(kOpenSquare); mcStyle1(hDRBgSubNrHyPy); mcStyle2(hDRBgSubAwHyPy); hDRBgSubNrHyPy->SetMarkerStyle(0); hDRBgSubAwHyPy->SetMarkerStyle(0); // Draw hDRBgSubNrHyPy->SetTitle(";#DeltaR_{max};F(#DeltaR<#DeltaR_{max})"); hDRBgSubNrHyPy->SetAxisRange(0,0.784,"X"); hDRBgSubNrHyPy->SetAxisRange(0,0.7,"Y"); if(!cumulative){ hDRBgSubNrHyPy->SetAxisRange(0,0.1,"Y"); } fixedFontHist(hDRBgSubNrHyPy); hDRBgSubNrHyPy->DrawCopy("Ehist"); hDRBgSubAwHyPy->DrawCopy("Ehistsame"); hDRBgSubNr->DrawCopy("Esame"); hDRBgSubAw->DrawCopy("Esame"); if (doLeg==1) { TLegend *leg = new TLegend(0.302407,0.67,0.7536548,0.9324599); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(hDRBgSubNr,Form("%.1f < p_{T} < %.1f GeV/c",hPt->GetBinLowEdge(1),hPt->GetBinLowEdge(ptUp+1)),""); leg->AddEntry(hDRBgSubNr,"Data Leading Jet","pl"); leg->AddEntry(hDRBgSubAw,"Data SubLeading Jet","pl"); leg->AddEntry(hDRBgSubNrHyPy,"MC Leading Jet","l"); leg->AddEntry(hDRBgSubAwHyPy,"MC SubLeading Jet","l"); leg->Draw(); } }