void forest2yskim_jetSkim_forestV3_noEleRejection(TString inputFile_="forestFiles/pA/pA_photonSkimForest_v85_skimPhotonPt50_eta1.5.root", std::string MinbiasFname = "skim_trackJet_minbiasTrackJet_mc.root", float cutphotonPt = 35, // default value dropped to 35GeV for later photon energy smearing/scaling std::string outname = "testPhotonSkim.root", sampleType colli=kPADATA, bool doMix = false, bool doJetResCorrection = 1, // = L2L3 * MC nonclosure correction jet energy correction is done by default from Oct 19th (YS) int smearingCentBin = -1, //0=0-10%, 1=10-30%, 2=30-50%, 3=50-100%, 4=0-30%, 5=30-100% : Jet pT and phi smearing! float jetEnergyScale = 1.0, float addFlatJetEnergyRes = 0.0, bool useGenJetColl = 0 ) { bool isMC=true; if ((colli==kPPDATA)||(colli==kPADATA)||(colli==kHIDATA)) isMC=false; int seconds = time(NULL); cout << " time = " <<seconds%10000<< endl; TRandom3 rand(seconds%10000); TString datafname = ""; float cutphotonEta = 1.44; float preCutPhotonEt = 30; const int nMaxPho = 100; HiForest *c; if((colli==kPADATA)||(colli==kPAMC)) { c = new HiForest(inputFile_.Data(), "forest", cPPb, isMC ); } else if ((colli==kPPDATA)||(colli==kPPMC)) { c = new HiForest(inputFile_.Data(), "forest", cPP, isMC ); } else if ((colli==kHIDATA)||(colli==kHIMC)) { c = new HiForest(inputFile_.Data(), "forest", cPbPb, isMC ); c->GetEnergyScaleTable("../photonEnergyScaleTable_lowPt_v6.root"); } else { cout << " Error! No such collision type" << endl; return; } c->InitTree(); // vertex and centrality vtxCentWeighting TFile* fWeight = new TFile("../vertexReweightingHistogram_pthatweighted.root"); TH1D* hWeight_vtx_data_pp = (TH1D*)fWeight->Get("vertexHistoData_pp"); TH1D* hWeight_vtx_mc_pp = (TH1D*)fWeight->Get("vertexHistoMC_pp"); TH1D* hWeight_vtx_data_ppb = (TH1D*)fWeight->Get("vertexHistoData_ppb"); TH1D* hWeight_vtx_mc_ppb = (TH1D*)fWeight->Get("vertexHistoMC_ppb"); TH1D* hWeight_vtx_data_pbpb = (TH1D*)fWeight->Get("vertexHistoData_pbpb"); TH1D* hWeight_vtx_mc_pbpb = (TH1D*)fWeight->Get("vertexHistoMC_pbpb"); TH1D* hWeight_cent_data_pbpb = (TH1D*)fWeight->Get("centBinHistoData_pbpb"); TH1D* hWeight_cent_mc_pbpb = (TH1D*)fWeight->Get("centBinHistoMC_pbpb"); // L2L3 correction TFile* fL2L3pp = new TFile("../corrL2L3/Casym_pp_double_hcalbins_algo_ak3PF_pt100_140_jet80_alphahigh_20_phicut250.root"); TH1D * c_etapp=(TH1D*)fL2L3pp->Get("C_asym"); TF1* fptpp = new TF1("fptpp","1-[0]/pow(x,[1])",20,300); fptpp->SetParameters(0.06971,0.8167); TFile* fL2L3pA = new TFile("../corrL2L3/Casym_pPb_double_hcalbins_algo_akPu3PF_pt100_140_jet80_alphahigh_20_phicut250.root"); TH1D * c_etapA=(TH1D*)fL2L3pA->Get("C_asym"); TF1* fptpA = new TF1("fptpA","1-[0]/pow(x,[1])",20,300); fptpA->SetParameters(0.3015, 0.8913); TFile* fL2L3Ap = new TFile("../corrL2L3/Casym_Pbp_double_hcalbins_algo_akPu3PF_pt100_140_jet80_alphahigh_20_phicut250.root"); TH1D * c_etaAp=(TH1D*)fL2L3Ap->Get("C_asym"); TF1* fptAp = new TF1("fptAp","1-[0]/pow(x,[1])",20,300); fptAp->SetParameters(0.3015, 0.8913); // pA MC TF1 * fgaus=new TF1("fgaus_pA","gaus(0)",-20,20); fgaus->SetParameters(1,0,1); TF1 * fsmear_pA = new TF1("fsmear_pA","[0]/pow(x,[1])",50,300); fsmear_pA->SetParameters(1.052,0.5261); /* TCanvas* c11 = new TCanvas("c11","",1200,400); // valiation of smearing factors c11->Divide(3,1); c11->cd(1); c_etapp->Draw(); c11->cd(2); c_etaAp->Draw(); c11->cd(3); c_etapA->Draw(); c11->SaveAs("f1.gif"); */ // Create a new root file TFile* newfile_data = new TFile(outname.data(),"recreate"); TTree* newtreePhoton; float newPt[nMaxPho]; // <<= temporary space int order[nMaxPho]; float corrPt[nMaxPho]; newtreePhoton = c->photonTree->CloneTree(0); newtreePhoton->SetName("yPhotonTree"); newtreePhoton->SetMaxTreeSize(MAXTREESIZE); newtreePhoton->Branch("order", order, "order[nPhotons]/I"); newtreePhoton->Branch("corrPt", corrPt,"corrPt[nPhotons]/F"); TTree* treeFullJet; if ( (colli==kPPDATA) || (colli==kPPMC) ) { //treeFullJet = c->ak3jetTree->CloneTree(0); treeFullJet = c->ak3PFJetTree->CloneTree(0); cout << "pp collision. Using ak3PF Jet Algo" << endl<<endl; } else { //treeFullJet = c->akPu3jetTree->CloneTree(0); treeFullJet = c->akPu3PFJetTree->CloneTree(0); cout << "PbPb or pPb collision. Using akPu3PF Jet Algo" << endl<<endl; } treeFullJet->SetName("fullJet"); treeFullJet->SetMaxTreeSize(MAXTREESIZE); #if 1 TTree* treeGenp; if ( (colli==kHIMC ) || (colli==kPPMC) || (colli==kPAMC) ) { treeGenp = c->genParticleTree->CloneTree(0); treeGenp->SetName("genparTree"); //treeGenp = c->genpTree->CloneTree(0); //treeGenp->SetName("genparTree"); treeGenp->SetMaxTreeSize(MAXTREESIZE); } #endif // jet tree! int nJet; const int MAXJET = 50000; // to accomodate 100 smeared jets, need to be careful with ram float jetPt[MAXJET]; float jetEta[MAXJET]; float jetPhi[MAXJET]; float jetDphi[MAXJET]; int jetSubid[MAXJET]; float jetRefPt[MAXJET]; float jetRefEta[MAXJET]; float jetRefPhi[MAXJET]; float jetRefDphi[MAXJET]; float jetRefPartonPt[MAXJET]; int jetRefPartonFlv[MAXJET]; TTree *newtreeJet = new TTree("yJet","jets"); newtreeJet->SetMaxTreeSize(MAXTREESIZE); newtreeJet->Branch("nJet",&nJet,"nJet/I"); newtreeJet->Branch("pt",jetPt,"pt[nJet]/F"); newtreeJet->Branch("eta",jetEta,"eta[nJet]/F"); newtreeJet->Branch("phi",jetPhi,"phi[nJet]/F"); newtreeJet->Branch("dphi",jetDphi,"dphi[nJet]/F"); if ( isMC ) { newtreeJet->Branch("subid",jetSubid,"subid[nJet]/I"); newtreeJet->Branch("refPt",jetRefPt,"refPt[nJet]/F"); newtreeJet->Branch("refEta",jetRefEta,"refEta[nJet]/F"); newtreeJet->Branch("refPhi",jetRefPhi,"refPhi[nJet]/F"); newtreeJet->Branch("refDphi",jetRefDphi,"refDphi[nJet]/F"); newtreeJet->Branch("refPartonPt",jetRefPartonPt,"refPartonPt[nJet]/F"); newtreeJet->Branch("refPartonFlv",jetRefPartonFlv,"refPartonFlv[nJet]/I"); } int nMjet; float mJetPt[MAXMJET]; float mJetEta[MAXMJET]; float mJetPhi[MAXMJET]; float mJetDphi[MAXMJET]; TTree * tmixJet = new TTree("mJet","Jet from minbias events"); tmixJet->SetMaxTreeSize(MAXTREESIZE); tmixJet->Branch("nJet",&nMjet,"nJet/I"); tmixJet->Branch("pt",mJetPt,"pt[nJet]/F"); tmixJet->Branch("eta",mJetEta,"eta[nJet]/F"); tmixJet->Branch("phi",mJetPhi,"phi[nJet]/F"); tmixJet->Branch("dphi", mJetDphi, "dphi[nJet]/F"); // Imb = Input MinBias events EvtSel evtImb; Int_t nJetImb; Float_t jetPtImb[100]; Float_t jetEtaImb[100]; Float_t jetPhiImb[100]; TBranch *b_evt; TBranch *b_nJetImb; TBranch *b_jetPtImb; TBranch *b_jetEtaImb; TBranch *b_jetPhiImb; int nCentBins = nCentBinSkim; if ((colli==kPADATA)||(colli==kPAMC)) { nCentBins = nCentBinSkimPA; } TChain *tjmb[100][nVtxBin+1]; int nMB[100][nVtxBin+1] ; //= 199109; int mbItr[100][nVtxBin+1]; if ( doMix ) { cout <<" Tree initialization for MinBias mixing" << endl; for( int icent = 0 ; icent< nCentBins ; icent++) { for( int ivz = 1 ; ivz<=nVtxBin ; ivz++) { tjmb[icent][ivz] = new TChain(Form("trkAndJets_first_cBin2icent%d_ivz%d",icent,ivz)); tjmb[icent][ivz]->Add(MinbiasFname.data()); tjmb[icent][ivz]->SetBranchAddress("evt", &evtImb,&b_evt); tjmb[icent][ivz]->SetBranchAddress("nJet", &nJetImb, &b_nJetImb); tjmb[icent][ivz]->SetBranchAddress("jetPt", &jetPtImb, &b_jetPtImb); tjmb[icent][ivz]->SetBranchAddress("jetEta", &jetEtaImb, &b_jetEtaImb); tjmb[icent][ivz]->SetBranchAddress("jetPhi", &jetPhiImb, &b_jetPhiImb); nMB[icent][ivz] = tjmb[icent][ivz]->GetEntries(); cout << "number of evetns in (icent = " << icent << ", ivtxZ = "<< ivz << ") = " << nMB[icent][ivz] << endl; int primeSeed = rand.Integer(37324); mbItr[icent][ivz] = primeSeed%(nMB[icent][ivz]); cout <<" initial itr = " << mbItr[icent][ivz] << endl; } } } else cout << endl << endl << " Mixing process is skipped" << endl << endl << endl ; // reweighting factor should go here int eTot(0), eSel(0); EvtSel evt; GammaJet gj; Isolation isol; TTree *tgj; tgj = new TTree("tgj","gamma jet tree"); tgj->SetMaxTreeSize(MAXTREESIZE); tgj->Branch("evt",&evt.run,"run/I:evt:cBin:pBin:trig/O:offlSel:noiseFilt:anaEvtSel:vz/F:vtxCentWeight/F:hf4Pos:hf4Neg:hf4Sum:ptHat:ptHatWeight"); tgj->Branch("lpho",&gj.photonEt,"photonEt/F:photonRawEt:photonEta:photonPhi:hovere:r9:sigmaIetaIeta:sumIso:genIso:genPhotonEt:genMomId/I:lJetPt/F:lJetEta:lJetPhi:lJetDphi:lJetSubid/I"); tgj->Branch("isolation",&isol.cc1,"cc1:cc2:cc3:cc4:cc5:cr1:cr2:cr3:cr4:cr5:ct1PtCut20:ct2PtCut20:ct3PtCut20:ct4PtCut20:ct5PtCut20:ecalIso:hcalIso:trackIso"); // ecalIso,hcalIso,trackIso are the pp style isolation float vzCut = vtxCutPhotonAna; TH1F* hvz = new TH1F("hvz","",nVtxBin,-vzCut,vzCut); // event plane hitogram TH1F* hEvtPlnBin = new TH1F("hEvtPlnBin", "", nPlnBin, -PI/2., PI/2.); // jet algos Jets* theJet; Jets* genJetTree; if ( (colli==kPPDATA) || (colli==kPPMC) ) { theJet = &(c->ak3PF) ; cout << "pp collision. Using ak3PF Jet Algo" << endl<<endl; } else { theJet = &(c->akPu3PF) ; cout << "PbPb or pPb collision. Using akPu3PF Jet Algo" << endl<<endl; } genJetTree = &(c->akPu3PF); //////// Kaya's modificiation //////// EventMatchingCMS* eventMatcher=new EventMatchingCMS(); bool eventAdded; Long64_t duplicateEvents = 0; //////// Kaya's modificiation - END //////// // Loop starts. int nentries = c->GetEntries(); cout << "number of entries = " << nentries << endl; for (Long64_t jentry = 0 ; jentry < nentries; jentry++) { eTot++; if (jentry% 2000 == 0) { cout <<jentry<<" / "<<nentries<<" "<<setprecision(2)<<(double)jentry/nentries*100<<endl; } c->GetEntry(jentry); //////// Kaya's modificiation //////// eventAdded = eventMatcher->addEvent(c->evt.evt, c->evt.lumi, c->evt.run, jentry); if(!eventAdded) // this event is duplicate, skip this one. { duplicateEvents++; continue; } //////// Kaya's modificiation - END //////// // Select events with a generated photon in mid-rapidity bool genPhotonFlag=false; if ( !isMC ) // fixed the most stupid error genPhotonFlag = true; else { #if 0 // there is no genp tree, but is higentree for ( int g=0 ; g< c->genp.nPar ; g++) if ( c->genp.id[g] != 22 ) continue; if ( fabs( c->genp.momId[g] ) > 22 ) continue; if ( fabs( c->genp.status[g] ) != 1 ) continue; if ( fabs( c->genp.eta[g] ) > cutphotonEta ) continue; if ( c->genp.et[g] < 35 ) continue; #endif for ( int g=0 ; g< c->genparticle.mult ; g++) { if ( c->genparticle.pdg[g] != 22 ) continue; // if ( fabs( c->genparticle.momId[g] ) > 22 ) // continue; // if ( fabs( c->genparticle.status[g] ) != 1 ) // continue; if ( fabs( c->genparticle.eta[g] ) > cutphotonEta ) continue; if ( c->genparticle.pt[g] < cutphotonPt ) continue; genPhotonFlag = true; } } if ( !genPhotonFlag) continue; evt.clear(); evt.run = c->evt.run; evt.evt = c->evt.evt; evt.hf4Pos = c->evt.hiHFplusEta4; evt.hf4Neg = c->evt.hiHFminusEta4; evt.hf4Sum = evt.hf4Pos + evt.hf4Neg; evt.cBin = -99; evt.pBin = -99 ; if ((colli==kHIDATA)||(colli==kHIMC)) { evt.cBin = c->evt.hiBin; evt.pBin = hEvtPlnBin->FindBin( c->evt.hiEvtPlanes[theEvtPlNumber] ) ; } else if ((colli==kPADATA)||(colli==kPAMC)) { evt.cBin = getHfBin(evt.hf4Sum); // if ( ((evt.cBin) < 0) || (evt.cBin) > 18 ) // cout << " Check the pA centrality.. cbin = " << evt.cBin << endl; } evt.trig = 0; evt.offlSel = (c->skim.pcollisionEventSelection > 0); evt.noiseFilt = (c->skim.pHBHENoiseFilter > 0); evt.anaEvtSel = c->selectEvent() && evt.trig; evt.vz = c->evt.vz; int cBin = evt.cBin; int vzBin = hvz->FindBin(evt.vz) ; hvz->Fill(evt.vz) ; // this was the problem!!! all c->selectEvent() are 0 //if ( ( (colli==kHIDATA)||(colli==kHIMC)||(colli==kPADATA)||(colli==kPAMC) || (colli==kPPMC) ) && ( c->selectEvent() == 0 )) if ( ( (colli==kHIDATA)||(colli==kHIMC) ) && ( c->skim.pcollisionEventSelection == 0 )) continue; if ( ( (colli==kPADATA)||(colli==kPAMC)||(colli==kPPDATA)||(colli==kPPMC)) && ( c->skim.pPAcollisionEventSelectionPA == 0 )) // yeonju included pp data and pp mc continue; // if ( ( (colli==kPPMC) ) && ( c->skim.pcollisionEventSelection == 0 )) // continue; // if ( ( (colli==kPADATA)||(colli==kPPDATA) ) && ( c->skim.pVertexFilterCutGplus ==0 ) ) // No Pile up events // continue; if ( (vzBin<1) || ( vzBin > nVtxBin) ) continue; eSel++; // OK. This event is a collisional and no-noise event. // Reweight for vertex and centrality of MC evt.vtxCentWeight = 1; double wVtx=1; double wCent=1; if (colli ==kHIMC) { int vBin = hWeight_vtx_data_pbpb->FindBin(evt.vz); wVtx = hWeight_vtx_data_pbpb->GetBinContent(vBin) / hWeight_vtx_mc_pbpb->GetBinContent(vBin) ; wCent = hWeight_cent_data_pbpb->GetBinContent(evt.cBin+1) / hWeight_cent_mc_pbpb->GetBinContent(evt.cBin+1) ; } else if ( colli ==kPPMC) { int vBin = hWeight_vtx_data_pp->FindBin(evt.vz); wVtx = hWeight_vtx_data_pp->GetBinContent(vBin) / hWeight_vtx_mc_pp->GetBinContent(vBin) ; } else if ( colli ==kPAMC) { int vBin = hWeight_vtx_data_ppb->FindBin(evt.vz); wVtx = hWeight_vtx_data_ppb->GetBinContent(vBin) / hWeight_vtx_mc_ppb->GetBinContent(vBin) ; } evt.vtxCentWeight = wVtx * wCent; evt.ptHat = -1; evt.ptHatWeight = 1; evt.ptHat = c->photon.ptHat; // if( colli == kPAMC && evt.ptHat > maxpthat ) // pA samples don't use ptHatCutter.C. // continue; if (colli ==kHIMC) { if ( evt.ptHat < 50 ) evt.ptHatWeight = 9008/16237. ; else if ( evt.ptHat < 80 ) evt.ptHatWeight = 3750/85438. ; else evt.ptHatWeight = 1191/140432. ; } else if ( colli == kPPMC) { // pp has only 4 pthat samples if ( evt.ptHat > 30 && evt.ptHat < 50 ) evt.ptHatWeight = 156861/156861. ; else if ( evt.ptHat > 50 && evt.ptHat < 80 ) evt.ptHatWeight = 33610/193462. ; else if ( evt.ptHat > 80 && evt.ptHat < 120 ) evt.ptHatWeight = 5757/195174. ; else evt.ptHatWeight = 1272/236703. ; // if ( evt.ptHat < 50 ) evt.ptHatWeight = 9008/9008. ; // else if ( evt.ptHat < 80 ) evt.ptHatWeight = 3750/40109. ; // else evt.ptHatWeight = 1191/66934. ; } else if ( colli == kPAMC) { if ( evt.ptHat > 30 && evt.ptHat < 50 ) evt.ptHatWeight = 62744/62744. ; else if ( evt.ptHat > 50 && evt.ptHat < 80 ) evt.ptHatWeight = 29499/107309. ; else if ( evt.ptHat > 80 && evt.ptHat < 120 ) evt.ptHatWeight = 7640/106817. ; else if ( evt.ptHat > 120 && evt.ptHat < 170 ) evt.ptHatWeight = 1868/104443. ; else evt.ptHatWeight = 649/139647. ; } for (int j=0;j< c->photon.nPhotons;j++) { if ( ( c->photon.pt[j] > preCutPhotonEt ) && ( fabs( c->photon.eta[j] ) < cutphotonEta ) ) { newPt[j] = c->getCorrEt(j); } else newPt[j] = c->photon.pt[j] - 10000; // if ( (c->isSpike(j)) || (c->photon.hadronicOverEm[j]>0.2) || (c->photon.isEle[j])) // Electron Rejection should be default. if ( (c->isSpike(j)) || (c->photon.hadronicOverEm[j]>0.2) ) //|| (c->photon.isEle[j]) // This is for no Electron Rejection case. newPt[j] = newPt[j] - 20000; if (c->photon.seedTime[j] ==0 ) // clustering bug newPt[j] = newPt[j] - 30000; corrPt[j] = newPt[j]; } TMath::Sort(c->photon.nPhotons, newPt, order); // Select the leading photon gj.clear(); int leadingIndex=-1; for (int j=0;j<c->photon.nPhotons;j++) { if ( c->photon.pt[j] < preCutPhotonEt ) continue; if ( fabs(c->photon.eta[j]) > cutphotonEta ) continue; if (c->isSpike(j)) continue; // if (!(c->isLoosePhoton(j))) continue; if (c->photon.hadronicOverEm[j]>0.1) continue; if ((c->photon.rawEnergy[j]/c->photon.energy[j])<0.5) continue; // sort using corrected photon pt float theCorrPt= corrPt[j]; if ( theCorrPt > gj.photonEt) { gj.photonEt = theCorrPt; leadingIndex = j; } } // if ( (gj.photonEt < cutphotonPt) ) <== This cut ruins the ptHat weighting factor // continue; /// Save leading photons if (leadingIndex!=-1) { gj.photonRawEt=c->photon.pt[leadingIndex]; gj.photonEta=c->photon.eta[leadingIndex]; gj.photonPhi=c->photon.phi[leadingIndex]; gj.hovere=c->photon.hadronicOverEm[leadingIndex]; gj.r9=c->photon.r9[leadingIndex]; gj.sigmaIetaIeta=c->photon.sigmaIetaIeta[leadingIndex]; gj.sumIsol = (c->photon.cr4[leadingIndex]+c->photon.cc4[leadingIndex]+c->photon.ct4PtCut20[leadingIndex]) / 0.9; gj.genIso = c->photon.genCalIsoDR04[leadingIndex]; gj.genPhotonEt = c->photon.genMatchedPt[leadingIndex]; gj.genMomId = c->photon.genMomId[leadingIndex]; isol.Set(c,leadingIndex); } else { gj.clear(); } if ( (colli==kPADATA) && ( evt.run > 211256 ) ) { gj.photonEta = - gj.photonEta; } ///////////////////// Skimmed Jet tree /////////////////////////////////// nJet = 0 ; int jetEntries = 0; if (useGenJetColl ) jetEntries = theJet->ngen; else jetEntries = theJet->nref; int nSmear = 1; if(smearingCentBin != -1) nSmear = 100; for(int iSmear =0; iSmear < nSmear; iSmear++){ // iSmear loop have to be here, before Jet loop. mis-ordered for loops ruins jetrefpt values. for (int ij=0; ij< jetEntries ; ij++) { if ( gj.photonEt < 0 ) continue ; // If there is no photon in this event if ( useGenJetColl ) { jetPt[nJet] = theJet->genpt[ij]; jetEta[nJet] = theJet->geneta[ij]; jetPhi[nJet] = theJet->genphi[ij]; } else { jetPt[nJet] = theJet->jtpt[ij]; jetEta[nJet] = theJet->jteta[ij]; jetPhi[nJet] = theJet->jtphi[ij]; } // Smear phi Double_t newPhi = jetPhi[nJet] ; if( smearingCentBin != -1 ) { Double_t phiSmear = TMath::Sqrt((cphi_pbpb[smearingCentBin]*cphi_pbpb[smearingCentBin] - cphi_pp*cphi_pp) + (sphi_pbpb[smearingCentBin]*sphi_pbpb[smearingCentBin] - sphi_pp*sphi_pp)/jetPt[nJet] + (nphi_pbpb[smearingCentBin]*nphi_pbpb[smearingCentBin] - nphi_pp*nphi_pp)/(jetPt[nJet]*jetPt[nJet])); newPhi = jetPhi[nJet] + rand.Gaus(0, phiSmear); while ( fabs(newPhi) > PI ) { if ( newPhi > PI ) newPhi = newPhi - 2*PI; if ( newPhi < -PI ) newPhi = newPhi + 2*PI; } } jetPhi[nJet] = newPhi; // smear the jet pT //float smeared = jetPt[nJet] * rand.Gaus(1,addJetEnergyRes/jetPt[nJet]) * rand.Gaus(1, addFlatJetEnergyRes) ; Double_t smeared = jetPt[nJet] * rand.Gaus(1, addFlatJetEnergyRes); if( smearingCentBin != -1 ) { Double_t smearSigma = TMath::Sqrt((c_pbpb[smearingCentBin]*c_pbpb[smearingCentBin] - c_pp*c_pp) + (s_pbpb[smearingCentBin]*s_pbpb[smearingCentBin] - s_pp*s_pp)/jetPt[nJet] + (n_pbpb[smearingCentBin]*n_pbpb[smearingCentBin] - n_pp*n_pp)/(jetPt[nJet]*jetPt[nJet])); smeared = jetPt[nJet] * rand.Gaus(1, smearSigma); } // then multiply jet energy sclae // resCorrection float resCorrection =1. ; float l2l3Corr =1 ; if (doJetResCorrection) { // L2L3 correction! if ( colli == kPPDATA) { l2l3Corr = c_etapp->GetBinContent(c_etapp->FindBin(jetEta[nJet])) * fptpp->Eval( jetPt[nJet]); } else if ( colli == kPADATA) { if ( evt.run > 211256 ) l2l3Corr = c_etapA->GetBinContent(c_etapA->FindBin(jetEta[nJet])) * fptpA->Eval( jetPt[nJet]); else l2l3Corr = c_etaAp->GetBinContent(c_etaAp->FindBin(jetEta[nJet])) * fptAp->Eval( jetPt[nJet]); } else if ( colli == kPAMC) l2l3Corr = 1 + (fsmear_pA->Eval( jetPt[nJet] )) * fgaus->GetRandom() ; // do the residual correction if ((colli==kHIDATA)||(colli==kHIMC)) { if ( evt.cBin < 12 ) // central resCorrection = 1.04503 -1.6122 /(sqrt(jetPt[nJet])) + 9.27212 / (jetPt[nJet]); //1.04503 -1.6122 9.27212 else // peripheral resCorrection = 1.00596 -0.653191/(sqrt(jetPt[nJet])) + 4.35373 / (jetPt[nJet]); //1.00596 -0.653191 4.35373 } else if ((colli==kPPDATA)||(colli==kPPMC)){ // do the residual correction resCorrection = 0.993609 +0.158418/(sqrt(jetPt[nJet])) + 0.335479 / (jetPt[nJet]);// 0.993609 0.158418 0.335479 } else if ((colli==kPADATA)||(colli==kPAMC)){ resCorrection = 0.997738 + 0.0221806/(sqrt(jetPt[nJet])) - 0.877999/ (jetPt[nJet]); //C : 0.997738, S : 0.0221806, N : -0.877999 //function derived as a function of gen pt //resCorrection = 0.981365 + 0.342746/(sqrt(jetPt[nJet])) - 2.63018 / (jetPt[nJet]); //C : 0.981365, S : 0.342746, N : -2.63018 //function derived as a function of gen pt //derived from l2l3 corrected sample. //resCorrection = 0.745753 + 6.91646/(sqrt(jetPt[nJet])) - 33.0167 / (jetPt[nJet]); //C : 0.745753, S : 6.91646, N : -33.0167 //function derived as a function of reco pt } } // doJetResCorrection // reflect eta! if ( (colli==kPADATA) && ( evt.run > 211256 ) ) { jetEta[nJet] = -jetEta[nJet]; } jetPt[nJet] = smeared * l2l3Corr /resCorrection *jetEnergyScale; if ( jetPt[nJet] < cutjetPtSkim) // double cutjetPtSkim = 15; Oct 19th continue; if ( fabs( jetEta[nJet] ) > cutjetEtaSkim ) // double cutjetEtaSkim = 3.0; Oct 19th continue; if ( getDR( jetEta[nJet], jetPhi[nJet], gj.photonEta, gj.photonPhi) < 0.5 ) continue; if (jetPt[nJet] >0) jetDphi[nJet] = getAbsDphi( jetPhi[nJet], gj.photonPhi) ; else jetDphi[nJet] = -1; if ( useGenJetColl ) { jetSubid[nJet] = -9999; jetRefPt[nJet] = -9999; jetRefEta[nJet] = -9999; jetRefPhi[nJet] = -9999; jetRefPt[nJet] = -9999; jetRefPartonPt[nJet] = -9999; jetRefPartonFlv[nJet] = -9999; } else { jetRefPt[nJet] = theJet->refpt[ij]; jetRefEta[nJet] = theJet->refeta[ij]; jetRefPhi[nJet] = theJet->refphi[ij]; if (jetRefPt[nJet] >0) jetRefDphi[nJet] = getAbsDphi( jetRefPhi[nJet] , gj.photonPhi) ; else jetRefDphi[nJet] = -1; jetRefPartonPt[nJet] = theJet->refparton_pt[ij]; jetRefPartonFlv[nJet] = theJet->refparton_flavor[ij]; jetSubid[nJet] = -9999; if (jetRefPt[nJet] >0) { // Find the collisional subid of this gen jet!! for ( int igen=0; igen < genJetTree->ngen ; igen++) { if ( jetRefPt[nJet] == genJetTree->genpt[igen] ) jetSubid[nJet] = genJetTree->gensubid[igen] ; } if ( jetSubid[nJet] == -9999 ) // No genJet matched! cout << " WARNING! This reco jet was not matched to anyone in the gen jet collection!!! " << endl; } } nJet++ ; }// ij for loop }// iSmear for loop //////// Leading jet kinematics in dphi>7pi/8 float maxJpt = 0; int jetLeadingIndex = -1; for (int ij=0; ij< nJet ; ij++) { if ( jetDphi[ij] < awayRange ) // const float awayRange= PI * 7./8.; continue; if ( fabs( jetEta[ij] ) > cutjetEta ) // double cutjetEta = 1.6; continue; if ( jetPt[ij] > maxJpt) { maxJpt = jetPt[ij] ; jetLeadingIndex = ij; } } if ( jetLeadingIndex > -1 ) { gj.lJetPt = jetPt[jetLeadingIndex]; gj.lJetEta = jetEta[jetLeadingIndex]; gj.lJetPhi = jetPhi[jetLeadingIndex]; gj.lJetDphi = jetDphi[jetLeadingIndex]; gj.lJetSubid= jetSubid[jetLeadingIndex]; } else { gj.lJetPt = -1; gj.lJetEta = 999; gj.lJetPhi = 999; gj.lJetDphi = 0; gj.lJetSubid= -99; } int nMixing = nMixing1; nMjet = 0; bool noSuchEvent = false; int iMix=0; int loopCounter=0; if ( !doMix ) iMix = nMixing+1; // Mixing step will be skipped while (iMix<nMixing) { loopCounter++; if ( loopCounter > nMB[cBin][vzBin]+1) { iMix = 999999 ; noSuchEvent = true; cout << " no such event!! : icent = " << cBin << ", vzBin = " << vzBin << ", pBin = " << evt.pBin << endl; continue; } mbItr[cBin][vzBin] = mbItr[cBin][vzBin] + 1; if ( mbItr[cBin][vzBin] == nMB[cBin][vzBin] ) mbItr[cBin][vzBin] = mbItr[cBin][vzBin] - nMB[cBin][vzBin]; /// Load the minbias tracks!! tjmb[cBin][vzBin]->GetEntry(mbItr[cBin][vzBin]); // ok found the event!! /////////// loopCounter =0; // Re-initiate loopCounter // Jet mixing for (int it = 0 ; it < nJetImb ; it++) { if ( gj.photonEt < 0 ) continue; // Smear phi Double_t newPhi = jetPhiImb[it]; if( smearingCentBin != -1 ) { Double_t phiSmear = TMath::Sqrt((cphi_pbpb[smearingCentBin]*cphi_pbpb[smearingCentBin] - cphi_pp*cphi_pp) + (sphi_pbpb[smearingCentBin]*sphi_pbpb[smearingCentBin] - sphi_pp*sphi_pp)/jetPtImb[it] + (nphi_pbpb[smearingCentBin]*nphi_pbpb[smearingCentBin] - nphi_pp*nphi_pp)/(jetPtImb[it]*jetPtImb[it])); newPhi = jetPhiImb[it] + rand.Gaus(0, phiSmear); while ( fabs(newPhi) > PI ) { if ( newPhi > PI ) newPhi = newPhi - 2*PI; if ( newPhi < -PI ) newPhi = newPhi + 2*PI; } } jetPhiImb[it] = newPhi; // smear the jet pT //float smeared = jetPtImb[it] * rand.Gaus(1,addJetEnergyRes/jetPtImb[it]) * rand.Gaus(1, addFlatJetEnergyRes) ; Double_t smeared = jetPtImb[it] * rand.Gaus(1, addFlatJetEnergyRes); if( smearingCentBin != -1 ) { Double_t smearSigma = TMath::Sqrt((c_pbpb[smearingCentBin]*c_pbpb[smearingCentBin] - c_pp*c_pp) + (s_pbpb[smearingCentBin]*s_pbpb[smearingCentBin] - s_pp*s_pp)/jetPtImb[it] + (n_pbpb[smearingCentBin]*n_pbpb[smearingCentBin] - n_pp*n_pp)/(jetPtImb[it]*jetPtImb[it])); smeared = jetPtImb[it] * rand.Gaus(1, smearSigma); } float resCorrection =1. ; float l2l3Corr =1 ; if (doJetResCorrection) { // L2L3 if ( colli == kPPDATA) { l2l3Corr = c_etapp->GetBinContent(c_etapp->FindBin(jetEtaImb[it])) * fptpp->Eval( jetPtImb[it]); } else if ( colli == kPADATA) { if ( evt.run > 211256 ) l2l3Corr = c_etapA->GetBinContent(c_etapA->FindBin(jetEtaImb[it])) * fptpA->Eval( jetPtImb[it]); else l2l3Corr = c_etaAp->GetBinContent(c_etaAp->FindBin(jetEtaImb[it])) * fptAp->Eval( jetPtImb[it]); } else if ( colli == kPAMC) l2l3Corr = 1 + (fsmear_pA->Eval( jetPtImb[it] )) * fgaus->GetRandom() ; // Correction from MC closure if ((colli==kHIDATA)||(colli==kHIMC)) { // do the residual correction if ( evt.cBin < 12 ) // central resCorrection = 1.04503 -1.6122 /(sqrt(jetPtImb[it])) + 9.27212 / (jetPtImb[it]); //1.04503 -1.6122 9.27212 else // peripheral resCorrection = 1.00596 -0.653191/(sqrt(jetPtImb[it])) + 4.35373 / (jetPtImb[it]); //1.00596 -0.653191 4.35373 } else if ((colli==kPPDATA)||(colli==kPPMC)){ // do the residual correction resCorrection = 0.993609 +0.158418/(sqrt(jetPtImb[it])) + 0.335479 / (jetPtImb[it]);// 0.993609 0.158418 0.335479 } else if ((colli==kPADATA)||(colli==kPAMC)){ resCorrection = 0.997738 + 0.0221806/(sqrt(jetPtImb[it])) - 0.877999 / (jetPtImb[it]); //C : 0.997738, S : 0.0221806, N : -0.877999 //function derived as a function of gen pt //resCorrection = 0.981365 + 0.342746/(sqrt(jetPtImb[it])) - 2.63018 / (jetPtImb[it]); //C : 0.981365, S : 0.342746, N : -2.63018 //function derived as a function of gen pt//derived from l2l3 corrected sample. //resCorrection = 0.745753 + 6.91646/(sqrt(jetPtImb[it])) - 33.0167 / (jetPtImb[it]); //C : 0.745753, S : 6.91646, N : -33.0167//function derived as a function of reco pt } } float smearedCorrected = smeared *l2l3Corr / resCorrection *jetEnergyScale; // residual correction if ( smearedCorrected < cutjetPtSkim ) // double cutjetPtSkim = 15; Oct 19th continue; if ( fabs( jetEtaImb[it] ) > cutjetEtaSkim ) // double cutjetEtaSkim = 3.0; Oct 19th continue; if ( getDR( jetEtaImb[it], jetPhiImb[it], gj.photonEta, gj.photonPhi) < 0.5 ) // This cut added for consistency ; Oct 19th continue; mJetPt[nMjet] = smearedCorrected; mJetEta[nMjet] = jetEtaImb[it]; mJetPhi[nMjet] = jetPhiImb[it]; if ( mJetPt[nMjet]>0 ) mJetDphi[nMjet] = getAbsDphi(mJetPhi[nMjet], gj.photonPhi) ; else mJetDphi[nMjet]=-1; nMjet++; // < == Important! } iMix++; } if ( noSuchEvent ) continue; tgj->Fill(); newtreeJet->Fill(); tmixJet->Fill(); newtreePhoton->Fill(); treeFullJet->Fill(); if ( (colli==kHIMC ) || (colli==kPPMC) || (colli==kPAMC) ) treeGenp->Fill(); } newfile_data->Write(); // newfile_data->Close(); // <<=== If there is close() function. writing stucks in the middle of looping.. I don't know why!! cout << " Done! "<< endl; cout << " " << eSel<<" out of total "<<eTot<<" events were analyzed."<<endl; cout << "Duplicate events = " << duplicateEvents << endl; }
void test(char * tag= "0", char *infName = "/d102/yjlee/hiForest2MC/Pythia80_HydjetDrum_mix01_HiForest2_v22_simTrack05.root") { // Define the input file and HiForest HiForest *c = new HiForest(infName,"",cPPb); c->hasPFTree=0; c->hasPhotonTree=0; c->hasTowerTree=0; c->hasHbheTree=0; c->hasEbTree=0; c->hasGenpTree=0; c->hasGenParticleTree=0; c->hasAkPu2CaloJetTree=0; c->hasAkPu3CaloJetTree=0; c->hasAkPu4CaloJetTree=0; // c->doTrackCorrections=1; // c->InitTree(); // Output file TFile *output = new TFile(Form("output-%s.root",tag),"recreate"); // Output TTree * t = new TTree("t","gammajet"); JetData data(t,1); HistoData histos_MergedGeneralCalo("MergedGeneral"); HistoData histos2_MergedGeneral("MergedGeneral2"); // phi dependent corr TH1D *hWeight = new TH1D("hWeight","",1000,0,100); TH1D *hWeight2 = new TH1D("hWeight2","",1000,0,100); TH1D *hPt = new TH1D("hPt","",100,0,100); TH1D *hNoWPt = new TH1D("hNoWPt","",100,0,100); TNtuple *nt = new TNtuple("nt","","m:eta:phi:pt:pt1:pt2:ch1:ch2:phi1:phi2:dxy1:dxy2:hiBin:N"); TNtuple *ntEvt = new TNtuple("ntEvt","","N"); nt->SetAutoFlush(30000); cout <<nt->GetAutoFlush()<<endl; TCanvas *cc = new TCanvas("cc","",600,600); // nt->SetCircular(1000); // Main loop TLorentzVector *v2 = new TLorentzVector; TLorentzVector *v = new TLorentzVector; TLorentzVector phi; for (int i=0;i<c->GetEntries()/1.;i++) { c->GetEntry(i); if (!c->selectEvent()) continue; if (i%1000==0){ cout <<i<<" / "<<c->GetEntries()<<endl; } int N=0; for (int j=0;j<c->track.nTrk;j++) { if (!c->selectTrack(j)) continue; if (fabs(c->track.trkEta[j])>2.4) continue; if (fabs(c->track.trkPt[j])<0.4) continue; N++; } ntEvt->Fill(N); for (int j=0;j<c->track.nTrk;j++) { if (!c->selectTrack(j)) continue; if (fabs(c->track.trkPt[j])<1) continue; // if (fabs(c->track.trkDxy1[j]/c->track.trkDxyError1[j])<1) continue; for (int k=j+1;k<c->track.nTrk;k++) { if (j==k) continue; if (!c->selectTrack(k)) continue; // if (c->track.trkCharge[k]==c->track.trkCharge[j]) continue; if (fabs(c->track.trkPt[k])<1) continue; v->SetPtEtaPhiM(c->track.trkPt[j],c->track.trkEta[j],c->track.trkPhi[j],0.493677); v2->SetPtEtaPhiM(c->track.trkPt[k],c->track.trkEta[k],c->track.trkPhi[k],0.493677); // v2->SetPtEtaPhiM(c->track.trkPt[k],c->track.trkEta[k],c->track.trkPhi[k],0.13957); // v->SetPtEtaPhiM(c->track.trkPt[j],c->track.trkEta[j],c->track.trkPhi[j],0.938272); // v->SetPtEtaPhiM(c->track.trkPt[j],c->track.trkEta[j],c->track.trkPhi[j],0.13957); // v2->SetPtEtaPhiM(c->track.trkPt[k],c->track.trkEta[k],c->track.trkPhi[k],0.13957); phi = (*v) + (*v2); // if ((phi.M())>5) { if ((phi.M())>1.2||phi.M()<0.0) { // phi.Delete(); continue; } nt->Fill(phi.M(),phi.Eta(),phi.Phi(),phi.Pt(),v->Pt(),v2->Pt(),c->track.trkCharge[j],c->track.trkCharge[k],v->Phi(),v2->Phi(),c->track.trkDxy1[j],c->track.trkDxy1[k],c->evt.hiBin,N); // phi.Delete(); } } //cout <<data.mpt<<endl; t->Fill(); } // t->Write(); histos_MergedGeneralCalo.calcEff(); histos2_MergedGeneral.calcEff(); output->Write(); output->Close(); }