void mZHLimit(string inputFile, string outputFile, string channel, int cat, int mzh=0){ // setup calibration and reader BTagCalibration calib("csvv1", "/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/CSVV1.csv"); BTagCalibrationReader reader_l(BTagEntry::OP_LOOSE, "central"); BTagCalibrationReader reader_c(BTagEntry::OP_LOOSE, "central"); BTagCalibrationReader reader_b(BTagEntry::OP_LOOSE, "central"); reader_l.load(calib, BTagEntry::FLAV_UDSG, "comb"); reader_c.load(calib, BTagEntry::FLAV_C, "mujets"); reader_b.load(calib, BTagEntry::FLAV_B, "mujets"); // to read b-tag effinciency TFile* f_l = TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_udsgflavor_zjetsBtagEff.root", channel.data())); TFile* f_c = TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_cflavor_zjetsBtagEff.root", channel.data())); TFile* f_b = mzh==0 ? TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_bflavor_zjetsBtagEff.root", channel.data())) : TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_bflavor_signalBtagEff.root", channel.data())); TH1F* h_l = (TH1F*)(f_l->Get(Form("%s_udsgflavor", channel.data()))); TH1F* h_c = (TH1F*)(f_c->Get(Form("%s_cflavor", channel.data()))); TH1F* h_b = mzh==0 ? (TH1F*)(f_b->Get(Form("%s_bflavor", channel.data()))) : (TH1F*)(f_b->Get(Form("%s_bflavor_m%i", channel.data(), mzh))); // to read lepton scale factor / trigger TFile* f_ele = TFile::Open("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/leptonSFroot/CutBasedID_LooseWP_fromTemplates_withSyst_Final.txt_SF2D.root"); TFile* f_muScal = TFile::Open("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/leptonSFroot/MuonHighPt_Z_RunCD_Reco74X_Dec17.root"); TFile* f_muTrig = TFile::Open("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/leptonSFroot/SingleMuonTrigger_Z_RunCD_Reco74X_Dec1.root"); TH2F* h2_ele = (TH2F*)(f_ele->Get("EGamma_SF2D")); TH2F* h2_muPt20 = (TH2F*)(f_muScal->Get("HighPtID_PtEtaBins_Pt20/abseta_pTtuneP_ratio")); TH2F* h2_muPt53 = (TH2F*)(f_muScal->Get("HighPtID_PtEtaBins_Pt53/abseta_pTtuneP_ratio")); TH2F* h2_muRunD = (TH2F*)(f_muTrig->Get("runD_Mu45_eta2p1_PtEtaBins/abseta_pt_ratio")); // read the ntuples (in pcncu) TreeReader data(inputFile.data()); TFile f(inputFile.data()); // Declare the histogram TH1D* h_totalEv = (TH1D*)f.Get("h_totalEv"); TH1D* h_mZH = new TH1D("h_mZH", "", 71, 750, 4300); h_mZH->Sumw2(); // begin of event loop fprintf(stdout, "Total events %lli\n", data.GetEntriesFast()); for( Long64_t ev = data.GetEntriesFast()-1; ev >= 0; --ev ){ if( (unsigned)ev % 100000 == 0 ) fprintf(stdout, "Still left events %lli\n", ev); data.GetEntry(ev); Bool_t isData = data.GetBool("isData"); Float_t eventWeight = data.GetFloat("ev_weight"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); TClonesArray* eleP4 = (TClonesArray*) data.GetPtrTObject("eleP4"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); vector<bool>& isHighPtMuon = *((vector<bool>*) data.GetPtr("isHighPtMuon")); // select good reco level events // select good leptons vector<int> goodLepID; if( channel == "ele" && !isPassZee(data,goodLepID) ) continue; if( channel == "mu" && !isPassZmumu(data,goodLepID) ) continue; TLorentzVector* thisLep = (channel=="ele") ? (TLorentzVector*)eleP4->At(goodLepID[0]) : (TLorentzVector*)muP4->At(goodLepID[0]); TLorentzVector* thatLep = (channel=="ele") ? (TLorentzVector*)eleP4->At(goodLepID[1]) : (TLorentzVector*)muP4->At(goodLepID[1]); // calculate lepton weight float thisLepWeight = 1; float thatLepWeight = 1; if( mzh != 0){ if( channel == "ele" ){ thisLepWeight = leptonWeight(h2_ele, thisLep, false); thatLepWeight = leptonWeight(h2_ele, thatLep, false); } else if( channel == "mu" ){ if( isHighPtMuon[goodLepID[0]] ) thisLepWeight = (thisLep->Pt() < 53) ? leptonWeight(h2_muPt20, thisLep) : leptonWeight(h2_muPt53, thisLep); else thisLepWeight = 1; if( isHighPtMuon[goodLepID[1]] ) thatLepWeight = (thatLep->Pt() < 53) ? leptonWeight(h2_muPt20, thatLep) : leptonWeight(h2_muPt53, thatLep); else thatLepWeight = 1; } } // only signal samples // calculate trigger weight for muon float muTrigWeight = 1; if( mzh != 0 ){ if( channel=="mu" ){ if( thisLep->Pt() > thatLep->Pt() ) muTrigWeight = (fabs(thisLep->Eta()) < 2.1) ? leptonWeight(h2_muRunD, thisLep) : 1; else muTrigWeight = (fabs(thatLep->Eta()) < 2.1) ? leptonWeight(h2_muRunD, thatLep) : 1; } else muTrigWeight = 1; } // only signal samples // select good FATjet int goodFATJetID = -1; if( !isPassJet(data, &goodFATJetID, thisLep, thatLep) ) continue; TLorentzVector* thisJet = (TLorentzVector*)FATjetP4->At(goodFATJetID); float mllbb; if( !noiseCleaning(thisLep, thatLep, thisJet, &mllbb) ) continue; // b-tag cut int nsubBjet = 0; float btagWeight = bTagWeight(data, goodFATJetID, &nsubBjet, h_l, h_c, h_b, reader_l, reader_c, reader_b); if( cat == 1 && nsubBjet != 1 ) continue; if( cat == 2 && nsubBjet != 2 ) continue; float finalWeight = isData ? 1 : eventWeight * btagWeight * thisLepWeight * thatLepWeight * muTrigWeight; h_mZH->Fill(mllbb, finalWeight); } // end of event loop fprintf(stderr, "Processed all events\n"); TFile* outFile = new TFile(Form("%s_mZHLimit.root", outputFile.data()), "recreate"); h_mZH ->Write("mZH"); h_totalEv->Write("totalEvents"); outFile->Write(); delete outFile; }
void muJetVariable_NoWeightNoFilter(std::string inputFile, std::string outputFile){ // read the ntuples (in pcncu) std::vector<string> infiles; readSample(inputFile, infiles); TreeReader data(infiles); // Declare the histogram Int_t nBin = 20; TH1D* h_nVtx = new TH1D("h_nVtx", "nVtx", 100, -1, 99); TH1D* h_FATjetPt = new TH1D("h_FATjetPt", "FATjetPt", nBin, 100, 1000); TH1D* h_FATjetEta = new TH1D("h_FATjetEta", "FATjetEta", nBin, -4, 4); TH1D* h_FATjetCISVV2 = new TH1D("h_FATjetCISVV2", "FATjetCISVV2", nBin, 0, 1.2); TH1D* h_FATjetSDmass = new TH1D("h_FATjetSDmass", "FATjetSDmass", nBin, 0, 200); TH1D* h_FATjetPRmass = new TH1D("h_FATjetPRmass", "FATjetPRmass", nBin, 0, 200); TH1D* h_FATjetPRmassCorr = new TH1D("h_FATjetPRmassCorr", "FATjetPRmassCorr", nBin, 0, 200); TH1D* h_FATjetTau1 = new TH1D("h_FATjetTau1", "FATjetTau1", nBin, 0, 1); TH1D* h_FATjetTau2 = new TH1D("h_FATjetTau2", "FATjetTau2", nBin, 0, 1); TH1D* h_FATjetTau2dvTau1 = new TH1D("h_FATjetTau2dvTau1", "FATjetTau2dvTau1", nBin, 0, 1); TH1D* h_FATsubjetPt = new TH1D("h_FATsubjetPt", "FATsubjetPt", nBin, 0, 800); TH1D* h_FATsubjetEta = new TH1D("h_FATsubjetEta", "FATsubjetEta", nBin, -4, 4); TH1D* h_FATsubjetSDCSV = new TH1D("h_FATsubjetSDCSV", "FATsubjetSDCSV", nBin, 0, 1.2); TH1D* h_eventWeight = new TH1D("h_eventWeight", "eventWeight", 2, -1, 1); h_nVtx ->Sumw2(); h_FATjetPt ->Sumw2(); h_FATjetEta ->Sumw2(); h_FATjetCISVV2 ->Sumw2(); h_FATjetSDmass ->Sumw2(); h_FATjetPRmass ->Sumw2(); h_FATjetPRmassCorr->Sumw2(); h_FATjetTau1 ->Sumw2(); h_FATjetTau2 ->Sumw2(); h_FATjetTau2dvTau1->Sumw2(); h_FATsubjetPt ->Sumw2(); h_FATsubjetEta ->Sumw2(); h_FATsubjetSDCSV ->Sumw2(); h_nVtx ->GetXaxis()->SetTitle("nVtx"); h_FATjetPt ->GetXaxis()->SetTitle("FATjetPt"); h_FATjetEta ->GetXaxis()->SetTitle("FATjetEta"); h_FATjetCISVV2 ->GetXaxis()->SetTitle("FATjetCISVV2"); h_FATjetSDmass ->GetXaxis()->SetTitle("FATjetSDmass"); h_FATjetPRmass ->GetXaxis()->SetTitle("FATjetPRmass"); h_FATjetPRmassCorr->GetXaxis()->SetTitle("FATjetPRmassL2L3Corr"); h_FATjetTau1 ->GetXaxis()->SetTitle("FATjetTau1"); h_FATjetTau2 ->GetXaxis()->SetTitle("FATjetTau2"); h_FATjetTau2dvTau1->GetXaxis()->SetTitle("FATjetTau2dvTau1"); h_FATsubjetPt ->GetXaxis()->SetTitle("FATsubjetPt"); h_FATsubjetEta ->GetXaxis()->SetTitle("FATsubjetEta"); h_FATsubjetSDCSV ->GetXaxis()->SetTitle("FATsubjetSDCSV"); // begin of event loop for( Long64_t ev = 0; ev < data.GetEntriesFast(); ev++ ){ if( ev % 1000000 == 0 ) fprintf(stderr, "Processing event %lli of %lli\n", ev + 1, data.GetEntriesFast()); data.GetEntry(ev); Int_t nVtx = data.GetInt("nVtx"); Bool_t isData = data.GetBool("isData"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); Int_t FATnJet = data.GetInt("FATnJet"); Int_t* FATnSubSDJet = data.GetPtrInt("FATnSubSDJet"); Float_t* FATjetCISVV2 = data.GetPtrFloat("FATjetCISVV2"); Float_t* FATjetSDmass = data.GetPtrFloat("FATjetSDmass"); Float_t* FATjetPRmass = data.GetPtrFloat("FATjetPRmass"); Float_t* FATjetPRmassCorr = data.GetPtrFloat("FATjetPRmassL2L3Corr"); Float_t* FATjetTau1 = data.GetPtrFloat("FATjetTau1"); Float_t* FATjetTau2 = data.GetPtrFloat("FATjetTau2"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); vector<bool>& FATjetPassIDLoose = *((vector<bool>*) data.GetPtr("FATjetPassIDLoose")); vector<float>* FATsubjetSDPx = data.GetPtrVectorFloat("FATsubjetSDPx", FATnJet); vector<float>* FATsubjetSDPy = data.GetPtrVectorFloat("FATsubjetSDPy", FATnJet); vector<float>* FATsubjetSDPz = data.GetPtrVectorFloat("FATsubjetSDPz", FATnJet); vector<float>* FATsubjetSDE = data.GetPtrVectorFloat("FATsubjetSDE", FATnJet); vector<float>* FATsubjetSDCSV = data.GetPtrVectorFloat("FATsubjetSDCSV", FATnJet); // remove event which is no hard interaction (noise) if( nVtx < 1 ) continue; // Correct the pile-up shape of MC //Double_t eventWeight = correctMCWeight(isData, nVtx); Float_t mcWeight = data.GetFloat("mcWeight"); Double_t eventWeight = mcWeight; if( inputFile.find("DYJets") != std::string::npos ){ if( eventWeight > 0 ) eventWeight = 1; else if( eventWeight < 0 ) eventWeight = -1; } else eventWeight = 1; h_eventWeight->Fill(0.,eventWeight); // data filter and trigger cut bool muTrigger = TriggerStatus(data, "HLT_Mu45"); bool CSCT = FilterStatus(data, "Flag_CSCTightHaloFilter"); bool eeBadSc = FilterStatus(data, "Flag_eeBadScFilter"); bool Noise = FilterStatus(data, "Flag_HBHENoiseFilter"); bool NoiseIso = FilterStatus(data, "Flag_HBHENoiseIsoFilter"); if( !muTrigger ) continue; // if( isData && !CSCT ) continue; // if( isData && !eeBadSc ) continue; // if( isData && !Noise ) continue; // if( isData && !NoiseIso ) continue; // select good muons vector<Int_t> goodMuID; if( !isPassZmumu(data, goodMuID) ) continue; TLorentzVector* thisMu = (TLorentzVector*)muP4->At(goodMuID[0]); TLorentzVector* thatMu = (TLorentzVector*)muP4->At(goodMuID[1]); // select good FATjet Int_t goodFATJetID = -1; TLorentzVector* thisJet = NULL; for(Int_t ij = 0; ij < FATnJet; ij++){ thisJet = (TLorentzVector*)FATjetP4->At(ij); if( thisJet->Pt() < 200 ) continue; if( fabs(thisJet->Eta()) > 2.4 ) continue; if( !FATjetPassIDLoose[ij] ) continue; if( thisJet->DeltaR(*thisMu) < 0.8 || thisJet->DeltaR(*thatMu) < 0.8 ) continue; if( FATjetPRmassCorr[ij] > 65 && FATjetPRmassCorr[ij] < 145 ) continue; goodFATJetID = ij; break; } if( goodFATJetID < 0 ) continue; h_nVtx ->Fill(nVtx,eventWeight); h_FATjetPt ->Fill(thisJet->Pt(),eventWeight); h_FATjetEta ->Fill(thisJet->Eta(),eventWeight); h_FATjetCISVV2 ->Fill(FATjetCISVV2[goodFATJetID],eventWeight); h_FATjetSDmass ->Fill(FATjetSDmass[goodFATJetID],eventWeight); h_FATjetPRmass ->Fill(FATjetPRmass[goodFATJetID],eventWeight); h_FATjetPRmassCorr->Fill(FATjetPRmassCorr[goodFATJetID],eventWeight); h_FATjetTau1 ->Fill(FATjetTau1[goodFATJetID],eventWeight); h_FATjetTau2 ->Fill(FATjetTau2[goodFATJetID],eventWeight); h_FATjetTau2dvTau1->Fill(FATjetTau2[goodFATJetID]/FATjetTau1[goodFATJetID],eventWeight); for(Int_t is = 0; is < FATnSubSDJet[goodFATJetID]; is++){ TLorentzVector l4_subjet(0,0,0,0); l4_subjet.SetPxPyPzE(FATsubjetSDPx[goodFATJetID][is], FATsubjetSDPy[goodFATJetID][is], FATsubjetSDPz[goodFATJetID][is], FATsubjetSDE [goodFATJetID][is]); h_FATsubjetPt ->Fill(l4_subjet.Pt(),eventWeight); h_FATsubjetEta ->Fill(l4_subjet.Eta(),eventWeight); h_FATsubjetSDCSV->Fill(FATsubjetSDCSV[goodFATJetID][is],eventWeight); } } // end of event loop fprintf(stderr, "Processed all events\n"); TFile* outFile = new TFile(Form("%s_jetmumuVariableNoWeightNoFilter.root",outputFile.c_str()), "recreate"); h_nVtx ->Write("nVtx"); h_FATjetPt ->Write("FATjetPt"); h_FATjetEta ->Write("FATjetEta"); h_FATjetCISVV2 ->Write("FATjetCISVV2"); h_FATjetSDmass ->Write("FATjetSDmass"); h_FATjetPRmass ->Write("FATjetPRmass"); h_FATjetPRmassCorr->Write("FATjetPRmassCorr"); h_FATjetTau1 ->Write("FATjetTau1"); h_FATjetTau2 ->Write("FATjetTau2"); h_FATjetTau2dvTau1->Write("FATjetTau2dvTau1"); h_FATsubjetPt ->Write("FATsubjetPt"); h_FATsubjetEta ->Write("FATsubjetEta"); h_FATsubjetSDCSV ->Write("FATsubjetSDCSV"); h_eventWeight ->Write("eventWeight"); outFile->Write(); }
void bTagUncTree(string inputFile, string outputFile, string region, string channel){ // setup calibration and reader BTagCalibration calib("csvv1", "/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/CSVV1.csv"); BTagCalibrationReader reader_l(BTagEntry::OP_LOOSE, region.data()); BTagCalibrationReader reader_c(BTagEntry::OP_LOOSE, region.data()); BTagCalibrationReader reader_b(BTagEntry::OP_LOOSE, region.data()); reader_l.load(calib, BTagEntry::FLAV_UDSG, "comb"); reader_c.load(calib, BTagEntry::FLAV_C, "mujets"); reader_b.load(calib, BTagEntry::FLAV_B, "mujets"); // to read b-tag effinciency TFile* f_l = TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_udsgflavor_zjetsBtagEff.root", channel.data())); TFile* f_c = TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_cflavor_zjetsBtagEff.root", channel.data())); TFile* f_b = TFile::Open(Form("/afs/cern.ch/work/h/htong/ZpZHllbb_13TeV/bTagEffroot/%s_bflavor_zjetsBtagEff.root", channel.data())); TH1F* h_l = (TH1F*)(f_l->Get(Form("%s_udsgflavor", channel.data()))); TH1F* h_c = (TH1F*)(f_c->Get(Form("%s_cflavor", channel.data()))); TH1F* h_b = (TH1F*)(f_b->Get(Form("%s_bflavor", channel.data()))); // read the ntuples (in pcncu) TreeReader data(inputFile.data()); TFile f(inputFile.data()); // Create a tree to store variables TFile* outFile = new TFile(Form("%s_%s_%sMiniTree.root", outputFile.data(), region.data(), channel.data()), "recreate"); TTree* tree = new TTree("tree", "TreeForRooFit"); Int_t cat; Float_t mllbb, prmass, evweight; tree->Branch("cat", &cat, "cat/I"); tree->Branch("mllbb", &mllbb, "mllbb/F"); tree->Branch("prmass", &prmass, "prmass/F"); tree->Branch("evweight", &evweight, "evweight/F"); // Calculate the scale correspond to inputFile float scale = 2512.*readHist::crossSection(outputFile.data())/((TH1F*)f.Get("h_totalEv"))->Integral(); // begin of event loop fprintf(stdout, "Total events %lli\n", data.GetEntriesFast()); for( Long64_t ev = data.GetEntriesFast()-1; ev >= 0; --ev ){ if( (unsigned)ev % 100000 == 0 ) fprintf(stdout, "Still left events %lli\n", ev); data.GetEntry(ev); Float_t eventWeight = data.GetFloat("ev_weight"); Float_t* FATjetPRmassCorr = data.GetPtrFloat("FATjetPRmassL2L3Corr"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); TClonesArray* eleP4 = (TClonesArray*) data.GetPtrTObject("eleP4"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); // select good reco level events // select good leptons vector<int> goodLepID; if( channel == "ele" && !isPassZee(data,goodLepID) ) continue; if( channel == "mu" && !isPassZmumu(data,goodLepID) ) continue; TLorentzVector* thisLep = (channel=="ele") ? (TLorentzVector*)eleP4->At(goodLepID[0]) : (TLorentzVector*)muP4->At(goodLepID[0]); TLorentzVector* thatLep = (channel=="ele") ? (TLorentzVector*)eleP4->At(goodLepID[1]) : (TLorentzVector*)muP4->At(goodLepID[1]); // select good FATjet int goodFATJetID = -1; if( !isPassJet(data, &goodFATJetID, thisLep, thatLep, false) ) continue; TLorentzVector* thisJet = (TLorentzVector*)FATjetP4->At(goodFATJetID); if( !noiseCleaning(thisLep, thatLep, thisJet, &mllbb) ) continue; // b-tag cut int nsubBjet = 0; float btagWeight = bTagWeight(data, goodFATJetID, &nsubBjet, h_l, h_c, h_b, reader_l, reader_c, reader_b, region.data()); if ( nsubBjet == 1 ) cat = 1; else if( nsubBjet == 2 ) cat = 2; else continue; prmass = FATjetPRmassCorr[goodFATJetID]; evweight = eventWeight * scale * btagWeight; tree->Fill(); } // end of event loop fprintf(stdout, "Processed all events\n"); tree->Write(); outFile->Write(); delete outFile; }
void mZHmu(std::string inputFile, std::string outputFile){ // read the ntuples (in pcncu) TreeReader data(inputFile.data()); // Declare the histogram TFile* f = new TFile(inputFile.data()); TH1D* h_totalEvents = (TH1D*)f->Get("h_totalEv"); TH1D* h_mZprime = new TH1D("h_mZprime", "mZprime", 20, 0, 5000); TH1D* h_mZ = new TH1D("h_mZ", "mZ", 30, 60, 120); TH1D* h_ptZ = new TH1D("h_ptZ", "ptZ", 50, 0, 1000); TH1D* h_FATjetPt = new TH1D("h_FATjetPt", "FATjetPt", 20, 100, 1000); TH1D* h_FATjetSDmass = new TH1D("h_FATjetSDmass", "FATjetSDmass", 15, 50, 200); TH1D* h_FATjetPRmass = new TH1D("h_FATjetPRmass", "FATjetPRmass", 15, 50, 200); TH1D* h_FATjetTau2dvTau1 = new TH1D("h_FATjetTau2dvTau1", "FATjetTau2dvTau1", 20, 0, 1); h_mZprime ->Sumw2(); h_mZ ->Sumw2(); h_ptZ ->Sumw2(); h_FATjetPt ->Sumw2(); h_FATjetSDmass ->Sumw2(); h_FATjetPRmass ->Sumw2(); h_FATjetTau2dvTau1->Sumw2(); h_mZprime ->GetXaxis()->SetTitle("mZprime"); h_mZ ->GetXaxis()->SetTitle("mZ"); h_ptZ ->GetXaxis()->SetTitle("ptZ"); h_FATjetPt ->GetXaxis()->SetTitle("FATjetPt"); h_FATjetSDmass ->GetXaxis()->SetTitle("FATjetSDmass"); h_FATjetPRmass ->GetXaxis()->SetTitle("FATjetPRmass"); h_FATjetTau2dvTau1->GetXaxis()->SetTitle("FATjetTau2dvTau1"); // begin of event loop for( Long64_t ev = 0; ev < data.GetEntriesFast(); ev++ ){ if( ev % 1000000 == 0 ) fprintf(stderr, "Processing event %lli of %lli\n", ev + 1, data.GetEntriesFast()); data.GetEntry(ev); Float_t eventWeight = data.GetFloat("ev_weight"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); Int_t FATnJet = data.GetInt("FATnJet"); Int_t* FATnSubSDJet = data.GetPtrInt("FATnSubSDJet"); Float_t* FATjetSDmass = data.GetPtrFloat("FATjetSDmass"); Float_t* corrPRmass = data.GetPtrFloat("FATjetPRmassL2L3Corr"); Float_t* FATjetTau1 = data.GetPtrFloat("FATjetTau1"); Float_t* FATjetTau2 = data.GetPtrFloat("FATjetTau2"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); vector<bool>& FATjetPassIDLoose = *((vector<bool>*) data.GetPtr("FATjetPassIDLoose")); vector<float>* FATsubjetSDCSV = data.GetPtrVectorFloat("FATsubjetSDCSV", FATnJet); // select good muons vector<Int_t> goodMuID; if( !isPassZmumu(data, goodMuID) ) continue; TLorentzVector* thisMu = (TLorentzVector*)muP4->At(goodMuID[0]); TLorentzVector* thatMu = (TLorentzVector*)muP4->At(goodMuID[1]); Float_t mll = (*thisMu+*thatMu).M(); Float_t ptll = (*thisMu+*thatMu).Pt(); h_mZ ->Fill(mll,eventWeight); h_ptZ->Fill(ptll,eventWeight); // select good FATjet Int_t goodFATJetID = -1; TLorentzVector* thisJet = NULL; for(Int_t ij = 0; ij < FATnJet; ij++){ thisJet = (TLorentzVector*)FATjetP4->At(ij); if( thisJet->Pt() < 200 ) continue; if( fabs(thisJet->Eta()) > 2.4 ) continue; if( corrPRmass[ij] < 105 || corrPRmass[ij] > 135 ) continue; if( !FATjetPassIDLoose[ij] ) continue; if( FATnSubSDJet[ij] != 2 ) continue; if( FATsubjetSDCSV[ij][0] < 0.605 || FATsubjetSDCSV[ij][1] < 0.605 ) continue; if( thisJet->DeltaR(*thisMu) < 0.8 || thisJet->DeltaR(*thatMu) < 0.8 ) continue; goodFATJetID = ij; break; } if( goodFATJetID < 0 ) continue; h_FATjetPt ->Fill(thisJet->Pt(),eventWeight); h_FATjetSDmass ->Fill(FATjetSDmass[goodFATJetID],eventWeight); h_FATjetPRmass ->Fill(corrPRmass[goodFATJetID],eventWeight); h_FATjetTau2dvTau1->Fill(FATjetTau2[goodFATJetID]/FATjetTau1[goodFATJetID],eventWeight); Float_t mllbb = (*thisMu+*thatMu+*thisJet).M(); if( mllbb < 700 ) continue; h_mZprime->Fill(mllbb,eventWeight); } // end of event loop fprintf(stderr, "Processed all events\n"); TFile* outFile = new TFile(Form("%s_mZHmu.root",outputFile.c_str()), "recreate"); h_mZprime ->Write("mZprime"); h_mZ ->Write("mZ"); h_ptZ ->Write("ptZ"); h_FATjetPt ->Write("FATjetPt"); h_FATjetSDmass ->Write("FATjetSDmass"); h_FATjetPRmass ->Write("FATjetPRmass"); h_FATjetTau2dvTau1->Write("FATjetTau2dvTau1"); h_totalEvents ->Write("totalEvents"); outFile->Write(); delete f; delete outFile; }
void toyMCnew_mu(std::string inputFile, std::string outputFile){ // read the ntuples (in pcncu) TreeReader data(inputFile.data()); TFile* f = new TFile(inputFile.data()); TH1D* h_totalEvents = (TH1D*)f->Get("h_totalEv"); // Create a tree to store variables TFile* outFile = new TFile(Form("%s_toyMCnew.root",outputFile.c_str()), "recreate"); TTree* tree = new TTree("tree", "TreeForRooFit"); Int_t cat = 0; Float_t mllbb, prmass, evweight; tree->Branch("cat", &cat, "cat/I"); tree->Branch("mllbb", &mllbb, "mllbb/F"); tree->Branch("prmass", &prmass, "prmass/F"); tree->Branch("evweight", &evweight, "evweight/F"); // Calculate the scale correspond to inputFile Double_t totalEvents = h_totalEvents->Integral(); Double_t crossSection = CrossSection(inputFile.data()); Double_t scale = 3000./(totalEvents/crossSection); // dataLumi = 3000/pb // Mark minor backgounds Int_t minor = 1; if( (inputFile.find("WW") != std::string::npos) || (inputFile.find("WZ") != std::string::npos) || (inputFile.find("ZZ") != std::string::npos) || (inputFile.find("TT") != std::string::npos) ) minor = -1; // begin of event loop Long64_t nentries = data.GetEntriesFast(); for(Long64_t ev = 0; ev < nentries; ev++){ if( ev % 1000000 == 0 ) fprintf(stderr, "Processing event %lli of %lli\n", ev + 1, nentries); data.GetEntry(ev); Bool_t isData = data.GetBool("isData"); Float_t eventWeight = data.GetFloat("ev_weight"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); Int_t FATnJet = data.GetInt("FATnJet"); Int_t* FATnSubSDJet = data.GetPtrInt("FATnSubSDJet"); Float_t* corrPRmass = data.GetPtrFloat("FATjetPRmassL2L3Corr"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); vector<bool>& FATjetPassIDLoose = *((vector<bool>*) data.GetPtr("FATjetPassIDLoose")); vector<float>* FATsubjetSDPx = data.GetPtrVectorFloat("FATsubjetSDPx", FATnJet); vector<float>* FATsubjetSDPy = data.GetPtrVectorFloat("FATsubjetSDPy", FATnJet); vector<float>* FATsubjetSDPz = data.GetPtrVectorFloat("FATsubjetSDPz", FATnJet); vector<float>* FATsubjetSDE = data.GetPtrVectorFloat("FATsubjetSDE", FATnJet); vector<float>* FATsubjetSDCSV = data.GetPtrVectorFloat("FATsubjetSDCSV", FATnJet); // select good leptons vector<Int_t> goodLepID; TLorentzVector* thisLep = NULL; TLorentzVector* thatLep = NULL; if( !isPassZmumu(data,goodLepID) ) continue; thisLep = (TLorentzVector*)muP4->At(goodLepID[0]); thatLep = (TLorentzVector*)muP4->At(goodLepID[1]); // select good FATjet Int_t goodFATJetID = -1; TLorentzVector* thisJet = NULL; for(Int_t ij = 0; ij < FATnJet; ij++){ thisJet = (TLorentzVector*)FATjetP4->At(ij); if( thisJet->Pt() < 200 ) continue; if( fabs(thisJet->Eta()) > 2.4 ) continue; if( !FATjetPassIDLoose[ij] ) continue; if( thisJet->DeltaR(*thisLep) < 0.8 || thisJet->DeltaR(*thatLep) < 0.8 ) continue; Int_t nsubBjet = 0; for(Int_t is = 0; is < FATnSubSDJet[ij]; is++){ if( FATsubjetSDCSV[ij][is] > 0.605 ) nsubBjet++; } Double_t subjetDeltaR = -1; if( nsubBjet == 2 ){ TLorentzVector l4_subjet0(0,0,0,0); TLorentzVector l4_subjet1(0,0,0,0); l4_subjet0.SetPxPyPzE(FATsubjetSDPx[ij][0], FATsubjetSDPy[ij][0], FATsubjetSDPz[ij][0], FATsubjetSDE [ij][0]); l4_subjet1.SetPxPyPzE(FATsubjetSDPx[ij][1], FATsubjetSDPy[ij][1], FATsubjetSDPz[ij][1], FATsubjetSDE [ij][1]); subjetDeltaR = l4_subjet0.DeltaR(l4_subjet1); } // deltaR depends loose cut if ( subjetDeltaR < 0.3 && nsubBjet > 0 ) cat = 1; else if( subjetDeltaR > 0.3 && nsubBjet > 1 ) cat = 2; else continue; goodFATJetID = ij; break; } // end of FatnJet loop if( goodFATJetID < 0 ) continue; mllbb = (*thisLep+*thatLep+*thisJet).M(); if( mllbb < 750 ) continue; prmass = corrPRmass[goodFATJetID]; if( isData ) evweight = 1; else evweight = eventWeight * scale * minor; tree->Fill(); } // end of event loop fprintf(stderr, "Processed all events\n"); tree->Write(); outFile->Write(); delete f; delete outFile; }
void mZHmuLimitV1C1(std::string inputFile, std::string outputFile){ // read the ntuples (in pcncu) std::vector<string> infiles; readSample(inputFile, infiles); TreeReader data(infiles); // Declare the histogram TH1D* h_mZprime = new TH1D("h_mZprime", "mZprime", 100, 400, 5000); TH1D* h_eventWeight = new TH1D("h_eventWeight", "eventWeight", 2, -1, 1); h_mZprime->Sumw2(); h_mZprime->GetXaxis()->SetTitle("mZprime"); // begin of event loop for( Long64_t ev = 0; ev < data.GetEntriesFast(); ev++){ if( ev % 1000000 == 0 ) fprintf(stderr, "Processing event %lli of %lli\n", ev + 1, data.GetEntriesFast()); data.GetEntry(ev); Int_t nVtx = data.GetInt("nVtx"); Bool_t isData = data.GetBool("isData"); Float_t pu_nTrueInt = data.GetFloat("pu_nTrueInt"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); Int_t FATnJet = data.GetInt("FATnJet"); Int_t* FATnSubSDJet = data.GetPtrInt("FATnSubSDJet"); Float_t* corrPRmass = data.GetPtrFloat("FATjetPRmassL2L3Corr"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); vector<bool>& FATjetPassIDLoose = *((vector<bool>*) data.GetPtr("FATjetPassIDLoose")); vector<float>* FATsubjetSDPx = data.GetPtrVectorFloat("FATsubjetSDPx", FATnJet); vector<float>* FATsubjetSDPy = data.GetPtrVectorFloat("FATsubjetSDPy", FATnJet); vector<float>* FATsubjetSDPz = data.GetPtrVectorFloat("FATsubjetSDPz", FATnJet); vector<float>* FATsubjetSDE = data.GetPtrVectorFloat("FATsubjetSDE", FATnJet); vector<float>* FATsubjetSDCSV = data.GetPtrVectorFloat("FATsubjetSDCSV", FATnJet); // remove event which is no hard interaction (noise) if( nVtx < 1 ) continue; // Correct the pile-up shape of MC Double_t eventWeight = pileupWeight(isData, (Int_t)pu_nTrueInt); h_eventWeight->Fill(0.,eventWeight); // data filter (to filter non-collision bkg (ECAL/HCAL noise)) and trigger cut bool muTrigger = TriggerStatus(data, "HLT_Mu45"); bool CSCT = FilterStatus(data, "Flag_CSCTightHaloFilter"); bool eeBadSc = FilterStatus(data, "Flag_eeBadScFilter"); bool Noise = FilterStatus(data, "Flag_HBHENoiseFilter"); bool NoiseIso = FilterStatus(data, "Flag_HBHENoiseIsoFilter"); if( !muTrigger ) continue; if( isData && !CSCT ) continue; if( isData && !eeBadSc ) continue; if( isData && !Noise ) continue; if( isData && !NoiseIso ) continue; // select good muons vector<Int_t> goodMuID; if( !isPassZmumu(data, goodMuID) ) continue; TLorentzVector* thisMu = (TLorentzVector*)muP4->At(goodMuID[0]); TLorentzVector* thatMu = (TLorentzVector*)muP4->At(goodMuID[1]); // select good FATjet Int_t goodJetID = -1; TLorentzVector* thisJet = NULL; for(Int_t ij = 0; ij < FATnJet; ij++){ thisJet = (TLorentzVector*)FATjetP4->At(ij); if( thisJet->Pt() < 200 ) continue; if( fabs(thisJet->Eta()) > 2.4 ) continue; if( corrPRmass[ij] < 105 || corrPRmass[ij] > 135 ) continue; if( !FATjetPassIDLoose[ij] ) continue; if( thisJet->DeltaR(*thisMu) < 0.8 || thisJet->DeltaR(*thatMu) < 0.8 ) continue; Int_t nsubBjet = 0; for(Int_t is = 0; is < FATnSubSDJet[ij]; is++){ if( FATsubjetSDCSV[ij][is] > 0.605 ) nsubBjet++; } Double_t subjetDeltaR = -1; if( nsubBjet == 2 ){ TLorentzVector l4_subjet0(0,0,0,0); TLorentzVector l4_subjet1(0,0,0,0); l4_subjet0.SetPxPyPzE(FATsubjetSDPx[ij][0], FATsubjetSDPy[ij][0], FATsubjetSDPz[ij][0], FATsubjetSDE [ij][0]); l4_subjet1.SetPxPyPzE(FATsubjetSDPx[ij][1], FATsubjetSDPy[ij][1], FATsubjetSDPz[ij][1], FATsubjetSDE [ij][1]); subjetDeltaR = l4_subjet0.DeltaR(l4_subjet1); } // deltaR depends loose cut // if( subjetDeltaR < 0.3 && nsubBjet < 1 ) continue; // if( subjetDeltaR > 0.3 && nsubBjet < 2 ) continue; // category one if( subjetDeltaR > 0.3 ) continue; if( nsubBjet < 1 ) continue; goodJetID = ij; break; } if( goodJetID < 0 ) continue; Float_t mllbb = (*thisMu+*thatMu+*thisJet).M(); if( mllbb < 700 ) continue; h_mZprime->Fill(mllbb,eventWeight); } // end of event loop fprintf(stderr, "Processed all events\n"); TFile* outFile = new TFile(Form("%s_mZHmuSignal_catOne.root",outputFile.c_str()), "recreate"); h_mZprime ->Write("mZprime"); h_eventWeight->Write("eventWeight"); outFile->Write(); }
void muJetVariable(std::string inputFile, std::string outputFile){ // read the ntuples (in pcncu) TreeReader data(inputFile.data()); // Declare the histogram TFile* f = new TFile(inputFile.data()); TH1D* h_totalEvents = (TH1D*)f->Get("h_totalEv"); TH1D* h_nVtx = new TH1D("h_nVtx", "nVtx", 30, -0.5, 29.5); TH1D* h_FATjetPt = new TH1D("h_FATjetPt", "FATjetPt", 20, 100, 1000); TH1D* h_FATjetEta = new TH1D("h_FATjetEta", "FATjetEta", 20, -4, 4); TH1D* h_FATjetCISVV2 = new TH1D("h_FATjetCISVV2", "FATjetCISVV2", 20, 0, 1.2); TH1D* h_FATjetSDmass = new TH1D("h_FATjetSDmass", "FATjetSDmass", 20, 0, 200); TH1D* h_FATjetPRmass = new TH1D("h_FATjetPRmass", "FATjetPRmass", 20, 0, 200); TH1D* h_FATjetPRmassCorr = new TH1D("h_FATjetPRmassCorr", "FATjetPRmassCorr", 20, 0, 200); TH1D* h_FATjetTau1 = new TH1D("h_FATjetTau1", "FATjetTau1", 20, 0, 1); TH1D* h_FATjetTau2 = new TH1D("h_FATjetTau2", "FATjetTau2", 20, 0, 1); TH1D* h_FATjetTau2dvTau1 = new TH1D("h_FATjetTau2dvTau1", "FATjetTau2dvTau1", 20, 0, 1); TH1D* h_FATsubjetPt = new TH1D("h_FATsubjetPt", "FATsubjetPt", 20, 0, 800); TH1D* h_FATsubjetEta = new TH1D("h_FATsubjetEta", "FATsubjetEta", 20, -4, 4); TH1D* h_FATsubjetSDCSV = new TH1D("h_FATsubjetSDCSV", "FATsubjetSDCSV", 20, 0, 1.2); h_nVtx ->Sumw2(); h_FATjetPt ->Sumw2(); h_FATjetEta ->Sumw2(); h_FATjetCISVV2 ->Sumw2(); h_FATjetSDmass ->Sumw2(); h_FATjetPRmass ->Sumw2(); h_FATjetPRmassCorr->Sumw2(); h_FATjetTau1 ->Sumw2(); h_FATjetTau2 ->Sumw2(); h_FATjetTau2dvTau1->Sumw2(); h_FATsubjetPt ->Sumw2(); h_FATsubjetEta ->Sumw2(); h_FATsubjetSDCSV ->Sumw2(); h_nVtx ->GetXaxis()->SetTitle("nVtx"); h_FATjetPt ->GetXaxis()->SetTitle("FATjetPt"); h_FATjetEta ->GetXaxis()->SetTitle("FATjetEta"); h_FATjetCISVV2 ->GetXaxis()->SetTitle("FATjetCISVV2"); h_FATjetSDmass ->GetXaxis()->SetTitle("FATjetSDmass"); h_FATjetPRmass ->GetXaxis()->SetTitle("FATjetPRmass"); h_FATjetPRmassCorr->GetXaxis()->SetTitle("FATjetPRmassL2L3Corr"); h_FATjetTau1 ->GetXaxis()->SetTitle("FATjetTau1"); h_FATjetTau2 ->GetXaxis()->SetTitle("FATjetTau2"); h_FATjetTau2dvTau1->GetXaxis()->SetTitle("FATjetTau2dvTau1"); h_FATsubjetPt ->GetXaxis()->SetTitle("FATsubjetPt"); h_FATsubjetEta ->GetXaxis()->SetTitle("FATsubjetEta"); h_FATsubjetSDCSV ->GetXaxis()->SetTitle("FATsubjetSDCSV"); // begin of event loop for( Long64_t ev = 0; ev < data.GetEntriesFast(); ev++ ){ if( ev % 1000000 == 0 ) fprintf(stderr, "Processing event %lli of %lli\n", ev + 1, data.GetEntriesFast()); data.GetEntry(ev); Int_t nVtx = data.GetInt("nVtx"); Float_t eventWeight = data.GetFloat("ev_weight"); TClonesArray* muP4 = (TClonesArray*) data.GetPtrTObject("muP4"); Int_t FATnJet = data.GetInt("FATnJet"); Int_t* FATnSubSDJet = data.GetPtrInt("FATnSubSDJet"); Float_t* FATjetCISVV2 = data.GetPtrFloat("FATjetCISVV2"); Float_t* FATjetSDmass = data.GetPtrFloat("FATjetSDmass"); Float_t* FATjetPRmass = data.GetPtrFloat("FATjetPRmass"); Float_t* FATjetPRmassCorr = data.GetPtrFloat("FATjetPRmassL2L3Corr"); Float_t* FATjetTau1 = data.GetPtrFloat("FATjetTau1"); Float_t* FATjetTau2 = data.GetPtrFloat("FATjetTau2"); TClonesArray* FATjetP4 = (TClonesArray*) data.GetPtrTObject("FATjetP4"); vector<bool>& FATjetPassIDLoose = *((vector<bool>*) data.GetPtr("FATjetPassIDLoose")); vector<float>* FATsubjetSDPx = data.GetPtrVectorFloat("FATsubjetSDPx", FATnJet); vector<float>* FATsubjetSDPy = data.GetPtrVectorFloat("FATsubjetSDPy", FATnJet); vector<float>* FATsubjetSDPz = data.GetPtrVectorFloat("FATsubjetSDPz", FATnJet); vector<float>* FATsubjetSDE = data.GetPtrVectorFloat("FATsubjetSDE", FATnJet); vector<float>* FATsubjetSDCSV = data.GetPtrVectorFloat("FATsubjetSDCSV", FATnJet); // select good muons vector<Int_t> goodMuID; if( !isPassZmumu(data, goodMuID) ) continue; TLorentzVector* thisMu = (TLorentzVector*)muP4->At(goodMuID[0]); TLorentzVector* thatMu = (TLorentzVector*)muP4->At(goodMuID[1]); // select good FATjet Int_t goodFATJetID = -1; TLorentzVector* thisJet = NULL; for(Int_t ij = 0; ij < FATnJet; ij++){ thisJet = (TLorentzVector*)FATjetP4->At(ij); if( thisJet->Pt() < 200 ) continue; if( fabs(thisJet->Eta()) > 2.4 ) continue; if( !FATjetPassIDLoose[ij] ) continue; if( thisJet->DeltaR(*thisMu) < 0.8 || thisJet->DeltaR(*thatMu) < 0.8 ) continue; if( FATjetPRmassCorr[ij] > 65 && FATjetPRmassCorr[ij] < 145 ) continue; goodFATJetID = ij; break; } if( goodFATJetID < 0 ) continue; h_nVtx ->Fill(nVtx,eventWeight); h_FATjetPt ->Fill(thisJet->Pt(),eventWeight); h_FATjetEta ->Fill(thisJet->Eta(),eventWeight); h_FATjetCISVV2 ->Fill(FATjetCISVV2[goodFATJetID],eventWeight); h_FATjetSDmass ->Fill(FATjetSDmass[goodFATJetID],eventWeight); h_FATjetPRmass ->Fill(FATjetPRmass[goodFATJetID],eventWeight); h_FATjetPRmassCorr->Fill(FATjetPRmassCorr[goodFATJetID],eventWeight); h_FATjetTau1 ->Fill(FATjetTau1[goodFATJetID],eventWeight); h_FATjetTau2 ->Fill(FATjetTau2[goodFATJetID],eventWeight); h_FATjetTau2dvTau1->Fill(FATjetTau2[goodFATJetID]/FATjetTau1[goodFATJetID],eventWeight); for(Int_t is = 0; is < FATnSubSDJet[goodFATJetID]; is++){ TLorentzVector l4_subjet(0,0,0,0); l4_subjet.SetPxPyPzE(FATsubjetSDPx[goodFATJetID][is], FATsubjetSDPy[goodFATJetID][is], FATsubjetSDPz[goodFATJetID][is], FATsubjetSDE [goodFATJetID][is]); h_FATsubjetPt ->Fill(l4_subjet.Pt(),eventWeight); h_FATsubjetEta ->Fill(l4_subjet.Eta(),eventWeight); h_FATsubjetSDCSV->Fill(FATsubjetSDCSV[goodFATJetID][is],eventWeight); } } // end of event loop fprintf(stderr, "Processed all events\n"); TFile* outFile = new TFile(Form("%s_jetmumuVariable.root",outputFile.c_str()), "recreate"); h_nVtx ->Write("nVtx"); h_FATjetPt ->Write("FATjetPt"); h_FATjetEta ->Write("FATjetEta"); h_FATjetCISVV2 ->Write("FATjetCISVV2"); h_FATjetSDmass ->Write("FATjetSDmass"); h_FATjetPRmass ->Write("FATjetPRmass"); h_FATjetPRmassCorr->Write("FATjetPRmassCorr"); h_FATjetTau1 ->Write("FATjetTau1"); h_FATjetTau2 ->Write("FATjetTau2"); h_FATjetTau2dvTau1->Write("FATjetTau2dvTau1"); h_FATsubjetPt ->Write("FATsubjetPt"); h_FATsubjetEta ->Write("FATsubjetEta"); h_FATsubjetSDCSV ->Write("FATsubjetSDCSV"); h_totalEvents ->Write("totalEvents"); outFile->Write(); delete f; delete outFile; }