#include #include #include "TFile.h" #include "TChain.h" #include "TTree.h" #include "TFileCollection.h" #include "TCollection.h" #include "THashList.h" #include "TStopwatch.h" #include "TMath.h" #include "TH1D.h" #include "TH2D.h" #include "TVector3.h" #include "TString.h" #include "Event.h" #include "Event.cxx" #include "myAnaConsts.h" using namespace std; void corr2D(std::string datalist) { std::cout << datalist << std::endl; TFile fout(TString::Format("fout%s.root", datalist.c_str()), "recreate"); TChain *chain_d0 = new TChain("npd0ana1/VertexCompositeNtuple"); TChain *chain_tracks = new TChain("track_ana/trackTree"); TFileCollection* fcData = new TFileCollection(datalist.c_str(), "", datalist.c_str()); chain_d0->AddFileInfoList(fcData->GetList()); std::cout << "d0 ready" << std::endl; chain_tracks->AddFileInfoList(fcData->GetList()); std::cout << "tracks ready" << std::endl; Event* evt = new Event(chain_d0, chain_tracks); // declare hists // map hSignal_D0[ana::nMass][ana::nPt]; for(int ipt=0; iptSetCanExtend(0); std::cout << "xmax of y axis" << h.second->GetYaxis()->GetXmax() << std::endl;; } } } // declare vectors vector pVect_trg_d0[ana::nMass][ana::nPt]; vector pVect_dau1_d0[ana::nMass][ana::nPt]; vector pVect_dau2_d0[ana::nMass][ana::nPt]; vector pVect_ass; // start timing TStopwatch ts; ts.Start(); // loop // // temporary vectors TVector3 p_dau1(0, 0, 0), p_dau2(0, 0, 0), p_d0(0, 0, 0), p_ass(0, 0, 0); std::cout << evt->GetEntries() << std::endl; long int nentries = evt->GetEntries(); int percent = 0; long int skip = 0; for(long int ientry=0; ientryGetEntry(ientry); if(bytes == 0 || bytes == -1) { skip++; continue; } for(int id0=0; id0CandSize(); id0++){ int imass = ana::findMassBin(evt->Mass(id0)); int ipt = ana::findPtBin(evt->Pt(id0)); int iy = ana::findYBin(evt->Y(id0)); if(imass == -1) continue; if(ipt == -1) continue; if(iy == -1) continue; p_dau1.SetPtEtaPhi(evt->PtD1(id0), evt->etaD1(id0), evt->phiD1(id0)); p_dau2.SetPtEtaPhi(evt->PtD2(id0), evt->etaD2(id0), evt->phiD2(id0)); p_d0 = p_dau1 + p_dau2; pVect_trg_d0[imass][ipt].push_back(p_d0); pVect_dau1_d0[imass][ipt].push_back(p_dau1); pVect_dau2_d0[imass][ipt].push_back(p_dau2); } for(unsigned int itrack=0; itrackCandSizeTrk(); itrack++){ p_ass.SetPtEtaPhi(evt->PtTrk(itrack), evt->EtaTrk(itrack), evt->PhiTrk(itrack)); pVect_ass.push_back(p_ass); } // calculate signal unsigned int nMult_ass = (unsigned int) pVect_ass.size(); unsigned int nMult_trg_raw_d0[ana::nMass][ana::nPt] = {0}; // Ntrig for mass & pt bins double nMult_trg_eff_d0[ana::nMass][ana::nPt] = {0.}; // eff corrected Ntrig for mass & pt bins for(int imass=0; imassWeightTrk(iass); double deltaEta = pvector_ass.Eta() - pVect_trg_d0[imass][ipt].at(id0).Eta(); double deltaPhi = pvector_ass.DeltaPhi(pVect_trg_d0[imass][ipt].at(id0)); if(deltaPhi>-ana::PI && deltaPhi<-ana::PI/2.) deltaPhi += 2*ana::PI; (hSignal_D0[imass][ipt])["largeDCA"]->Fill(deltaEta, deltaPhi, 1./nMult_trg_eff_d0[imass][ipt]/effks/effweight_ass); } } } } if(ientry==nentries/2){ for(int imass=0; imassGetYaxis()->GetXmax() << std::endl;; } } } } // clear all p_dau1.SetXYZ(0, 0, 0); p_dau2.SetXYZ(0, 0, 0); p_d0.SetXYZ(0, 0, 0); p_ass.SetXYZ(0, 0, 0); for(int imass=0; imassWrite(); } } for(int ipt=0; iptGetYaxis()->GetXmax() << std::endl;; delete h.second; } } } delete evt; return ; }