/* * Make SvtxTrack from PHGenFit::Track and SvtxTrack */ SvtxTrack* PHG4TrackKalmanFitter::MakeSvtxTrack(const SvtxTrack* svtx_track, const PHGenFit::Track* phgf_track) { double chi2 = phgf_track->get_chi2(); double ndf = phgf_track->get_ndf(); genfit::MeasuredStateOnPlane* gf_state = phgf_track->extrapolateToLine(TVector3(0.,0.,0.), TVector3(0.,0.,1.)); TVector3 mom = gf_state->getMom(); TVector3 pos = gf_state->getPos(); TMatrixDSym cov = gf_state->get6DCov(); //const SvtxTrack_v1* temp_track = static_cast<const SvtxTrack_v1*> (svtx_track); SvtxTrack_v1* out_track = new SvtxTrack_v1(*static_cast<const SvtxTrack_v1*> (svtx_track)); /*! * 1/p, u'/z', v'/z', u, v * u is defined as mom X beam line at POCA * so u is the dca2d direction */ double dca2d = gf_state->getState()[3]; out_track->set_dca2d(dca2d); if(gf_state->getCov()[3][3] > 0) out_track->set_dca2d_error(sqrt(gf_state->getCov()[3][3])); else { out_track->set_dca2d_error(-9999); if(verbosity >= 1) LogWarning("gf_state->getCov()[3][3] <= 0"); } double dca3d = sqrt( dca2d*dca2d + gf_state->getState()[4]*gf_state->getState()[4]); out_track->set_dca(dca3d); out_track->set_chisq(chi2); out_track->set_ndf(ndf); out_track->set_charge((_reverse_mag_field) ? -1.*phgf_track->get_charge() : phgf_track->get_charge()); out_track->set_px(mom.Px()); out_track->set_py(mom.Py()); out_track->set_pz(mom.Pz()); out_track->set_x(pos.X()); out_track->set_y(pos.Y()); out_track->set_z(pos.Z()); for(int i=0;i<6;i++) { for(int j=i;j<6;j++) { out_track->set_error(i,j,cov[i][j]); } } for (SvtxTrack::ConstClusterIter iter = svtx_track->begin_clusters(); iter != svtx_track->end_clusters(); ++iter) { unsigned int cluster_id = *iter; SvtxCluster* cluster = _clustermap->get(cluster_id); if(!cluster) { LogError("No cluster Found!"); continue; } //cluster->identify(); //DEBUG //unsigned int l = cluster->get_layer(); TVector3 pos(cluster->get_x(), cluster->get_y(), cluster->get_z()); double radius = pos.Pt(); //TODO add exception handling genfit::MeasuredStateOnPlane* gf_state = phgf_track->extrapolateToCylinder(radius,TVector3(0,0,0),TVector3(0,0,1), 0); if (!gf_state) { if (verbosity > 1) LogWarning("Exrapolation failed!"); continue; } SvtxTrackState* state = new SvtxTrackState_v1(radius); state->set_x(gf_state->getPos().x()); state->set_y(gf_state->getPos().y()); state->set_z(gf_state->getPos().z()); state->set_px(gf_state->getMom().x()); state->set_py(gf_state->getMom().y()); state->set_pz(gf_state->getMom().z()); //gf_state->getCov().Print(); for(int i=0;i<6;i++) { for(int j=i;j<6;j++) { out_track->set_error(i,j, gf_state->get6DCov()[i][j]); } } out_track->insert_state(state); // std::cout<<"===============\n"; // LogDebug(radius); // std::cout<<"---------------\n"; // TVector3 temp_vec(state->get_x(),state->get_y(),state->get_z()); // LogDebug(temp_vec.Pt()); // //state->identify(); // std::cout<<"---------------\n"; // //out_track->get_state(radius)->identify(); } return out_track; }
int main(int argc, char* argv[]) { TApplication theApp(srcName.Data(), &argc, argv); //============================================================================= if (argc<5) return -1; TString sPath = argv[1]; if (sPath.IsNull()) return -1; TString sFile = argv[2]; if (sFile.IsNull()) return -1; TString sJetR = argv[3]; if (sJetR.IsNull()) return -1; TString sSjeR = argv[4]; if (sSjeR.IsNull()) return -1; //============================================================================= sPath.ReplaceAll("#", "/"); //============================================================================= double dJetR = -1.; if (sJetR=="JetR02") dJetR = 0.2; if (sJetR=="JetR03") dJetR = 0.3; if (sJetR=="JetR04") dJetR = 0.4; if (sJetR=="JetR05") dJetR = 0.5; if (dJetR<0.) return -1; cout << "Jet R = " << dJetR << endl; //============================================================================= double dSjeR = -1.; if (sSjeR=="SjeR01") dSjeR = 0.1; if (sSjeR=="SjeR02") dSjeR = 0.2; if (sSjeR=="SjeR03") dSjeR = 0.3; if (sSjeR=="SjeR04") dSjeR = 0.4; if (dSjeR<0.) return -1; cout << "Sub-jet R = " << dSjeR << endl; //============================================================================= const double dJetsPtMin = 0.001; const double dCutEtaMax = 1.6; const double dJetEtaMax = 1.; const double dJetAreaRef = TMath::Pi() * dJetR * dJetR; fastjet::GhostedAreaSpec areaSpc(dCutEtaMax); fastjet::JetDefinition jetsDef(fastjet::antikt_algorithm, dJetR, fastjet::BIpt_scheme, fastjet::Best); fastjet::AreaDefinition areaDef(fastjet::active_area_explicit_ghosts,areaSpc); fastjet::Selector selectJet = fastjet::SelectorAbsEtaMax(dJetEtaMax); fastjet::JetDefinition subjDef(fastjet::kt_algorithm, dSjeR, fastjet::BIpt_scheme, fastjet::Best); //============================================================================= std::vector<fastjet::PseudoJet> fjInput; const Double_t dCut = TMath::TwoPi() / 3.; //============================================================================= enum { kWgt, kXsc, kLje, kLjr, kLtk, kLtr, kJet, kAje, kMje, k1sz, k1sA, k1sm, k1sr, k2sz, k2sA, k2sm, k2sr, kDsm, kDsr, kVar }; TFile *file = TFile::Open(Form("%s.root",sFile.Data()), "NEW"); TNtuple *nt = new TNtuple("nt", "", "fWgt:fXsc:fLje:fLjr:fLtk:fLtr:fJet:fAje:fMje:f1sj:f1sA:f1sm:f1sr:f2sj:f2sA:f2sm:f2sr:fDsm:fDsr"); //============================================================================= HepMC::IO_GenEvent ascii_in(Form("%s/%s.hepmc",sPath.Data(),sFile.Data()), std::ios::in); HepMC::GenEvent *evt = ascii_in.read_next_event(); while (evt) { fjInput.resize(0); double dLtk = -1.; TVector3 vPar, vLtk; for (HepMC::GenEvent::particle_const_iterator p=evt->particles_begin(); p!=evt->particles_end(); ++p) if ((*p)->status()==1) { double dEta = (*p)->momentum().eta(); if (TMath::Abs(dEta)>dCutEtaMax) continue; double dTrk = (*p)->momentum().perp(); double dPhi = (*p)->momentum().phi(); vPar.SetPtEtaPhi(dTrk, dEta, dPhi); fjInput.push_back(fastjet::PseudoJet(vPar.Px(), vPar.Py(), vPar.Pz(), vPar.Mag())); if (dTrk>dLtk) { dLtk = dTrk; vLtk.SetPtEtaPhi(dTrk, dEta, dPhi); } } //============================================================================= fastjet::ClusterSequenceArea clustSeq(fjInput, jetsDef, areaDef); std::vector<fastjet::PseudoJet> includJets = clustSeq.inclusive_jets(dJetsPtMin); std::vector<fastjet::PseudoJet> selectJets = selectJet(includJets); //============================================================================= if (selectJets.size()>0) { std::vector<fastjet::PseudoJet> sortedJets = fastjet::sorted_by_pt(selectJets); TVector3 vLje; vLje.SetPtEtaPhi(sortedJets[0].pt(), sortedJets[0].eta(), sortedJets[0].phi()); TVector3 vJet; int kJrl = -1; double dJrl = -1.; int kTrl = -1; double dTrl = -1.; for (int j=0; j<sortedJets.size(); j++) { double dJet = sortedJets[j].pt(); sortedJets[j].set_user_index(-1); vJet.SetPtEtaPhi(dJet, sortedJets[j].eta(), sortedJets[j].phi()); if (TMath::Abs(vJet.DeltaPhi(vLje))>dCut) { sortedJets[j].set_user_index(1); if (dJet>dJrl) { dJrl = dJet; kJrl = j; } } if (TMath::Abs(vJet.DeltaPhi(vLtk))>dCut) { sortedJets[j].set_user_index(2); if (dJet>dTrl) { dTrl = dJet; kTrl = j; } } } //============================================================================= TVector3 v1sj, v2sj; for (int j=0; j<sortedJets.size(); j++) { Float_t dVar[kVar]; for (Int_t i=0; i<kVar; i++) dVar[i] = -1.; dVar[kWgt] = 1.; dVar[kXsc] = 1.; vJet.SetPtEtaPhi(sortedJets[j].pt(), sortedJets[j].eta(), sortedJets[j].phi()); //============================================================================= dVar[kLje] = vLje.Pt(); if (sortedJets[j].user_index()==1) { dVar[kLjr] = ((kJrl==j) ? 1.5 : 0.5); } dVar[kLtk] = vLtk.Pt(); if (sortedJets[j].user_index()==2) { dVar[kLtr] = ((kTrl==j) ? 1.5 : 0.5); } //============================================================================= dVar[kJet] = sortedJets[j].pt(); dVar[kAje] = sortedJets[j].area(); dVar[kMje] = sortedJets[j].m(); //============================================================================= fastjet::Filter trimmer(subjDef, fastjet::SelectorPtFractionMin(0.)); fastjet::PseudoJet trimmdJet = trimmer(sortedJets[j]); std::vector<fastjet::PseudoJet> trimmdSj = trimmdJet.pieces(); double d1sj = -1.; int k1sj = -1; double d2sj = -1.; int k2sj = -1; for (int i=0; i<trimmdSj.size(); i++) { double dIsj = trimmdSj[i].pt(); if (dIsj<0.001) continue; if (dIsj>d1sj) { d2sj = d1sj; k2sj = k1sj; d1sj = dIsj; k1sj = i; } else if (dIsj>d2sj) { d2sj = dIsj; k2sj = i; } } //============================================================================= if (d1sj>0.) { v1sj.SetPtEtaPhi(d1sj, trimmdSj[k1sj].eta(), trimmdSj[k1sj].phi()); dVar[k1sz] = d1sj; dVar[k1sA] = trimmdSj[k1sj].area(); dVar[k1sm] = trimmdSj[k1sj].m(); dVar[k1sr] = v1sj.DeltaR(vJet); } if (d2sj>0.) { v2sj.SetPtEtaPhi(d2sj, trimmdSj[k2sj].eta(), trimmdSj[k2sj].phi()); dVar[k2sz] = d2sj; dVar[k2sA] = trimmdSj[k2sj].area(); dVar[k2sm] = trimmdSj[k2sj].m(); dVar[k2sr] = v2sj.DeltaR(vJet); } if ((d1sj>0.) && (d2sj>0.)) dVar[kDsr] = v2sj.DeltaR(v1sj); nt->Fill(dVar); } } //============================================================================= delete evt; ascii_in >> evt; } //============================================================================= file->cd(); nt->Write(); file->Close(); //============================================================================= TString sXsec = sFile; sXsec.ReplaceAll("out", "xsecs"); file = TFile::Open(Form("%s/xsecs/%s.root",sPath.Data(),sXsec.Data()), "READ"); TH1D *hPtHat = (TH1D*)file->Get("hPtHat"); hPtHat->SetDirectory(0); TH1D *hWeightSum = (TH1D*)file->Get("hWeightSum"); hWeightSum->SetDirectory(0); TProfile *hSigmaGen = (TProfile*)file->Get("hSigmaGen"); hSigmaGen->SetDirectory(0); file->Close(); //============================================================================= sFile.ReplaceAll("out", "wgt"); file = TFile::Open(Form("%s.root",sFile.Data()), "NEW"); hPtHat->Write(); hWeightSum->Write(); hSigmaGen->Write(); file->Close(); //============================================================================= cout << "DONE" << endl; //============================================================================= return 0; }
void selectEleHZZHCP2012IDGivenIsoWithTightTagPerFile(const string inputfile, // input file const string outputfile, // output directory const Bool_t matchGen = kFALSE, // match to generator muons Int_t dataType = 0, // del = 0, sel = 1, mc = -1 Int_t DataEraInput = 2 ) { gBenchmark->Start("selectEleMVAIsoTightGivenID"); //-------------------------------------------------------------------------------------------------------------- // Settings //============================================================================================================== UInt_t DataEra = kDataEra_NONE; if (DataEraInput == 1) DataEra = kDataEra_2011_MC; if (DataEraInput == 2) DataEra = kDataEra_2012_MC; if (DataEraInput == 11) DataEra = kDataEra_2011_Data; if (DataEraInput == 12) DataEra = kDataEra_2012_Data; //***************************************************************************************** //Setup MVA //***************************************************************************************** EGammaMvaEleEstimator *eleIDMVA = new EGammaMvaEleEstimator(); vector<string> weightFiles; weightFiles.push_back((string(getenv("CMSSW_BASE"))+string("/src/HiggsAna/HZZ4l/data/ElectronIDMVAWeights/Electrons_BDTG_NonTrigV0_Cat1.weights.xml")).c_str()); weightFiles.push_back((string(getenv("CMSSW_BASE"))+string("/src/HiggsAna/HZZ4l/data/ElectronIDMVAWeights/Electrons_BDTG_NonTrigV0_Cat2.weights.xml")).c_str()); weightFiles.push_back((string(getenv("CMSSW_BASE"))+string("/src/HiggsAna/HZZ4l/data/ElectronIDMVAWeights/Electrons_BDTG_NonTrigV0_Cat3.weights.xml")).c_str()); weightFiles.push_back((string(getenv("CMSSW_BASE"))+string("/src/HiggsAna/HZZ4l/data/ElectronIDMVAWeights/Electrons_BDTG_NonTrigV0_Cat4.weights.xml")).c_str()); weightFiles.push_back((string(getenv("CMSSW_BASE"))+string("/src/HiggsAna/HZZ4l/data/ElectronIDMVAWeights/Electrons_BDTG_NonTrigV0_Cat5.weights.xml")).c_str()); weightFiles.push_back((string(getenv("CMSSW_BASE"))+string("/src/HiggsAna/HZZ4l/data/ElectronIDMVAWeights/Electrons_BDTG_NonTrigV0_Cat6.weights.xml")).c_str()); eleIDMVA->initialize( "BDT", EGammaMvaEleEstimator::kNonTrig, kTRUE, weightFiles); // mass region Double_t massLo = 40; Double_t massHi = 200; //-------------------------------------------------------------------------------------------------------------- // Main analysis code //============================================================================================================== Double_t nProbes = 0; // // Set up output ntuple // TFile *outFile = new TFile(outputfile.c_str(),"RECREATE"); TTree *outTree = new TTree("Events","Events"); EffData data; outTree->Branch("Events",&data.mass,"mass/F:pt:eta:phi:weight:q/I:npv/i:npu:pass:runNum:lumiSec:evtNum:rho/F"); TFile *infile=0; TTree *eventTree=0; // Data structures to store info from TTrees higgsana::TEventInfo *info = new higgsana::TEventInfo(); higgsana::TGenInfo *gen = new higgsana::TGenInfo(); TClonesArray *electronArr = new TClonesArray("higgsana::TElectron"); TClonesArray *pfcandidateArr = new TClonesArray("higgsana::TPFCandidate"); TClonesArray *muonArr = new TClonesArray("higgsana::TMuon"); // Read input file and get the TTrees cout << "Processing " << inputfile << "..." << endl; infile = TFile::Open(inputfile.c_str(),"read"); assert(infile); //******************************************************** // Good RunLumi Selection //******************************************************** Bool_t hasJSON = kFALSE; mithep::RunLumiRangeMap rlrm; if (!matchGen) { hasJSON = kTRUE; rlrm.AddJSONFile("/afs/cern.ch/work/s/sixie/public/HZZ4l/auxiliar/2012/Cert_Full2012_53X_JSON.txt"); rlrm.AddJSONFile("/afs/cern.ch/work/s/sixie/public/HZZ4l/auxiliar/2011/2011Combined.json"); } eventTree = (TTree*)infile->Get("Events"); assert(eventTree); eventTree->SetBranchAddress("Info", &info); TBranch *infoBr = eventTree->GetBranch("Info"); eventTree->SetBranchAddress("Electron", &electronArr); TBranch *electronBr = eventTree->GetBranch("Electron"); eventTree->SetBranchAddress("Muon", &muonArr); TBranch *muonBr = eventTree->GetBranch("Muon"); eventTree->SetBranchAddress("PFCandidate", &pfcandidateArr); TBranch *pfcandidateBr = eventTree->GetBranch("PFCandidate"); cout << "NEvents = " << eventTree->GetEntries() << endl; TBranch *genBr = 0; if(matchGen) { eventTree->SetBranchAddress("Gen", &gen); genBr = eventTree->GetBranch("Gen"); } Double_t weight = 1; // loop over events for(UInt_t ientry=0; ientry<eventTree->GetEntries(); ientry++) { if (ientry % 100000 == 0) cout << "Processed Event " << ientry << endl; infoBr->GetEntry(ientry); // check for certified runs mithep::RunLumiRangeMap::RunLumiPairType rl(info->runNum, info->lumiSec); if(hasJSON && !rlrm.HasRunLumi(rl)) continue; //*********************************************************** // Definition of Pileup Energy density //*********************************************************** Double_t rhoEleIso = 0; UInt_t EleEAEra = 0; if (DataEra == kDataEra_2011_MC) { if (!(isnan(info->RhoKt6PFJetsForIso25) || isinf(info->RhoKt6PFJetsForIso25))) { rhoEleIso = info->RhoKt6PFJetsForIso25; } EleEAEra = kDataEra_2011_Data; } else if (DataEra == kDataEra_2012_MC) { if (!(isnan(info->RhoKt6PFJets) || isinf(info->RhoKt6PFJets))) { rhoEleIso = info->RhoKt6PFJets; } EleEAEra = kDataEra_2012_Data; } //use only odd numbered events to evaluate efficiency for data. even numbered events were used for training //if (info->evtNum % 2 == 0 && !matchGen) continue; // trigger requirement Bool_t passTrigger = kFALSE; if(dataType == 0) { if ((info->triggerBits & kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50) == kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50) passTrigger = kTRUE; if ((info->triggerBits & kHLT_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC8_Mass30) == kHLT_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC8_Mass30) passTrigger = kTRUE; if ((info->triggerBits & kHLT_Ele32_CaloIdL_CaloIsoVL_SC17) == kHLT_Ele32_CaloIdL_CaloIsoVL_SC17) passTrigger = kTRUE; } else if(dataType == 1) { if(DataEraInput == 2) { if(info->triggerBits & kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50) continue; if(info->triggerBits & kHLT_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC8_Mass30) continue; if(info->triggerBits & kHLT_Ele32_CaloIdL_CaloIsoVL_SC17) continue; } if ((info->triggerBits & kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) == kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) passTrigger = kTRUE; } if(dataType != -1 && !passTrigger) continue; // good vertex requirement if(!(info->hasGoodPV)) continue; if(matchGen) genBr->GetEntry(ientry); electronArr->Clear(); muonArr->Clear(); pfcandidateArr->Clear(); electronBr->GetEntry(ientry); muonBr->GetEntry(ientry); pfcandidateBr->GetEntry(ientry); //******************************************************** //Low Met Requirement //******************************************************** TVector3 met; if(info->pfMEx!=0 || info->pfMEy!=0) { met.SetXYZ(info->pfMEx, info->pfMEy, 0); } if (met.Pt() > 25) continue; //******************************************************** //Loop over TAG electrons //******************************************************** for(Int_t i=0; i<electronArr->GetEntriesFast(); i++) { const higgsana::TElectron *tag = (higgsana::TElectron*)((*electronArr)[i]); if(matchGen) { Bool_t match1 = (higgsana::deltaR(tag->eta, tag->phi, gen->eta_1, gen->phi_1) < 0.5); Bool_t match2 = (higgsana::deltaR(tag->eta, tag->phi, gen->eta_2, gen->phi_2) < 0.5); if(!match1 && !match2) continue; } if(tag->pt < 20) continue; if(fabs(tag->scEta) > 2.5) continue; if (!PassEleSimpleCutsVeryTight(tag,pfcandidateArr,rhoEleIso,EleEAEra)) continue; if(dataType == 0 && !((info->triggerBits & kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50) && (tag->hltMatchBits & kHLTObject_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT)) && !((info->triggerBits & kHLT_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC8_Mass30) && (tag->hltMatchBits & kHLTObject_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT)) && !((info->triggerBits & kHLT_Ele32_CaloIdL_CaloIsoVL_SC17) && (tag->hltMatchBits & kHLTObject_Ele32_CaloIdL_CaloIsoVL)) && !((info->triggerBits & kHLT_Ele32_CaloIdL_CaloIsoVL_SC17) && (tag->hltMatchBits & kHLTObject_Ele32_CaloIdT_CaloIsoT_TrkIdT_TrkIsoT)) && !((info->triggerBits & kHLT_Ele17_CaloIdL_CaloIsoVL) && (tag->hltMatchBits & kHLTObject_Ele17_CaloIdL_CaloIsoVL)) ) continue; if (dataType == 1) { if(dataType == 1 && !((info->triggerBits & kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && (tag->hltMatchBits & kHLTObject_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && tag->pt > 30) && !((info->triggerBits & kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && (tag->hltMatchBits & kHLTObject_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && tag->pt > 35) && !((info->triggerBits & kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && (tag->hltMatchBits & kHLTObject_Ele52_CaloIdVT_TrkIdT) && tag->pt > 60) && !((info->triggerBits & kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && (tag->hltMatchBits & kHLTObject_Ele27_WP80) && tag->pt > 30) && !((info->triggerBits & kHLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT) && (tag->hltMatchBits & kHLTObject_Ele32_WP70) && tag->pt > 35) ) continue; } const Double_t m = 0.000511; TLorentzVector vtag; vtag.SetPtEtaPhiM(tag->pt, tag->eta, tag->phi, m); for(Int_t j=0; j<electronArr->GetEntriesFast(); j++) { if(i==j) continue; const higgsana::TElectron *probe = (higgsana::TElectron*)((*electronArr)[j]); if(probe->q == tag->q) continue; // if(typev[ifile]==eDiEl && // !((info->triggerBits & kHLT_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC8_Mass30) && (probe->hltMatchBits & kHLTObject_SC8)) && // !((info->triggerBits & kHLT_Ele17_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC8_Mass30) && (probe->hltMatchBits & kHLTObject_Ele8)) && // !((info->triggerBits & kHLT_Ele32_CaloIdL_CaloIsoVL_SC17) && (probe->hltMatchBits & kHLTObject_SC17))) // continue; if(matchGen) { Bool_t match1 = (higgsana::deltaR(probe->eta, probe->phi, gen->eta_1, gen->phi_1) < 0.5); Bool_t match2 = (higgsana::deltaR(probe->eta, probe->phi, gen->eta_2, gen->phi_2) < 0.5); if(!match1 && !match2) continue; } if(fabs(probe->scEta) > 2.5) continue; TLorentzVector vprobe; vprobe.SetPtEtaPhiM(probe->pt, probe->eta, probe->phi, m); TLorentzVector vdielectron = vtag + vprobe; if((vdielectron.M()<massLo) || (vdielectron.M()>massHi)) continue; //for probes with pT < 10, require the Ele20_SC4 trigger if (probe->pt < 10) { if(dataType == 0) { if (!((info->triggerBits & kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50) == kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50)) continue; if (!((info->triggerBits & kHLT_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT_SC4_Mass50) && (tag->hltMatchBits & kHLTObject_Ele20_CaloIdVT_CaloIsoVT_TrkIdT_TrkIsoVT))) continue; } } nProbes++; Bool_t passID = (PassEleHZZ4lPreselection(probe) && PassEleHZZ4lICHEP2012ID(probe, eleIDMVA)); vector<const higgsana::TPFCandidate*> photonsToVeto; Bool_t passIsolation = PassEleHZZ4lICHEP2012Iso(probe,j,pfcandidateArr,rhoEleIso,EleEAEra,photonsToVeto); if (!passIsolation) continue; //****************** //PASS //****************** Bool_t pass = passID && passIsolation; // Fill tree data.mass = vdielectron.M(); data.pt = probe->pt; data.eta = probe->scEta; data.phi = probe->phi; data.weight = weight; data.q = probe->q; data.npv = info->nPV0; data.npu = info->nPUEvents; data.pass = (pass) ? 1 : 0; data.rho = rhoEleIso; data.runNum = info->runNum; data.lumiSec = info->lumiSec; data.evtNum = info->evtNum; outTree->Fill(); } } } delete infile; infile=0, eventTree=0; delete info; delete gen; delete electronArr; //-------------------------------------------------------------------------------------------------------------- // Output //============================================================================================================== cout << "*" << endl; cout << "* SUMMARY" << endl; cout << "*--------------------------------------------------" << endl; cout << endl; cout << " Number of probes selected: " << nProbes << endl; outFile->Write(); outFile->Close(); delete outFile; cout << endl; cout << " <> Output saved in " << outputfile << endl; cout << endl; gBenchmark->Show("selectEleLHEffTP"); }
void readTrigger() { TLorentzVector eplus[50], eminus[50]; TLorentzVector momentum, momentum_pair; TVector3 mom; Float_t px, py, pz; Int_t pdg; Int_t nplus=0, nminus=0, njpsi=0; TH1F *hEl = new TH1F("hEl","number of electrons", 10,0,10); TH1F *hPtel = new TH1F("hPtel"," dN/dPt ",100,0,4); TH1F *hPel = new TH1F("hPel"," dN/dP ",100,0,30); // Load basic libraries gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C"); basiclibs(); gSystem->Load("libPhysics"); gSystem->Load("libGeoBase"); gSystem->Load("libParBase"); gSystem->Load("libBase"); gSystem->Load("libCbmBase"); gSystem->Load("libCbmData"); gSystem->Load("libJpsi.so"); Char_t fileName[100]; Int_t fNevents = 0; Int_t fElectronEvents=0; for (Int_t ifile=0; ifile<1; ifile++) { TFile *f1 = new TFile(Form("jpsitrigger.25gev.pure.0000.root",ifile)); TTree* t1 =(TTree*) f1->Get("cbmsim"); TFolder *fd1 =(TFolder*) f1->Get("cbmout"); TClonesArray* fJpsi = (TClonesArray*)fd1->FindObjectAny("CbmJpsiTriggerElectron"); t1->SetBranchAddress("CbmJpsiTriggerElectron",&fJpsi); Int_t nevent = t1->GetEntries(); cout<<nevent<<endl; nplus=0; nminus=0; for(Int_t i=0; i<nevent; i++) { nplus = 0; nminus = 0; fNevents++; t1->GetEntry(i); Int_t nel = fJpsi->GetEntries(); for ( Int_t iel=0; iel<nel; iel++) { CbmJpsiTriggerElectron *jel = (CbmJpsiTriggerElectron*)fJpsi->At(iel); mom = jel->GetMomentum(); hPel->Fill(mom.Mag()); hPtel->Fill(mom.Pt()); if (mom.Pt() < 1.2) continue; momentum.SetVectM(mom,0.000511); pdg = jel -> GetPdg(); Double_t ann = jel -> GetAnn(); Double_t like = jel -> GetLike(); Double_t wkn = jel -> GetWkn(); Double_t ran = gRandom->Rndm(); if(ann > 0.8 ) { eplus[nplus]=momentum; nplus++; eplus[nplus].SetXYZT(0,0,0,0); } } hEl->Fill(nplus); if ( nplus>1 ) fElectronEvents++; } // event loop f1->Close(); } cout<< " ElectronEvents "<< fElectronEvents<<endl; TFile *fmass = new TFile("jpsiTrigger.hist.root","RECREATE"); hEl->Scale(1./Float_t (fNevents)); hEl->Write(); hPel->Scale(1./Float_t (fNevents )); hPel->Write(); hPtel->Scale(1./Float_t (fNevents)); hPtel->Write(); }
void HwwDYBkgEstimate(const string inputFilename, Double_t mHiggs, const string Label) { gBenchmark->Start("WWTemplate"); //-------------------------------------------------------------------------------------------------------------- // Settings //============================================================================================================== Double_t lumi = 35.5; // luminosity (pb^-1) Int_t ChargeSelection = 0; // ChargeSelection = 1; Double_t fPtMaxLowerCut; Double_t fPtMinLowerCut; Double_t fDileptonMassUpperCut; Double_t fDeltaPhiCut; Double_t fHiggsMass = mHiggs; //Configure Higgs Mass Dependant Cuts if (fHiggsMass == 120) { fPtMaxLowerCut = 20.0; fPtMinLowerCut = 20.0; fDileptonMassUpperCut = 40.0; fDeltaPhiCut = 60.0; } if (fHiggsMass == 130) { fPtMaxLowerCut = 25.0; fPtMinLowerCut = 20.0; fDileptonMassUpperCut = 45.0; fDeltaPhiCut = 60.0; } if (fHiggsMass == 140) { fPtMaxLowerCut = 25.0; fPtMinLowerCut = 20.0; fDileptonMassUpperCut = 45.0; fDeltaPhiCut = 60.0; } if (fHiggsMass == 150) { fPtMaxLowerCut = 27.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 50.0; fDeltaPhiCut = 60.0; } if (fHiggsMass == 160) { fPtMaxLowerCut = 30.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 50.0; fDeltaPhiCut = 60.0; } if (fHiggsMass == 170) { fPtMaxLowerCut = 34.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 50.0; fDeltaPhiCut = 60.0; } if (fHiggsMass == 180) { fPtMaxLowerCut = 36.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 60.0; fDeltaPhiCut = 70.0; } if (fHiggsMass == 190) { fPtMaxLowerCut = 38.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 80.0; fDeltaPhiCut = 90.0; } if (fHiggsMass == 200) { fPtMaxLowerCut = 40.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 90.0; fDeltaPhiCut = 100.0; } if (fHiggsMass == 210) { fPtMaxLowerCut = 44.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 110.0; fDeltaPhiCut = 110.0; } if (fHiggsMass == 220) { fPtMaxLowerCut = 48.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 120.0; fDeltaPhiCut = 120.0; } if (fHiggsMass == 230) { fPtMaxLowerCut = 52.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 130.0; fDeltaPhiCut = 130.0; } if (fHiggsMass == 250) { fPtMaxLowerCut = 55.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 150.0; fDeltaPhiCut = 140.0; } if (fHiggsMass == 300) { fPtMaxLowerCut = 70.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 200.0; fDeltaPhiCut = 175.0; } if (fHiggsMass == 350) { fPtMaxLowerCut = 80.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 250.0; fDeltaPhiCut = 175.0; } if (fHiggsMass == 400) { fPtMaxLowerCut = 90.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 300.0; fDeltaPhiCut = 175.0; } if (fHiggsMass == 450) { fPtMaxLowerCut = 110.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 350.0; fDeltaPhiCut = 175.0; } if (fHiggsMass == 500) { fPtMaxLowerCut = 120.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 400.0; fDeltaPhiCut = 175.0; } if (fHiggsMass == 550) { fPtMaxLowerCut = 130.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 450.0; fDeltaPhiCut = 175.0; } if (fHiggsMass == 600) { fPtMaxLowerCut = 140.0; fPtMinLowerCut = 25.0; fDileptonMassUpperCut = 500.0; fDeltaPhiCut = 175.0; } //-------------------------------------------------------------------------------------------------------------- // Histograms //============================================================================================================== TH1D *DileptonMass_allOtherCuts_ee = new TH1D("DileptonMass_allOtherCuts_ee", ";Mass_{ll};Number of Events",150,0.,300.); TH1D *DileptonMass_allOtherCuts_emu = new TH1D("DileptonMass_allOtherCuts_emu", ";Mass_{ll};Number of Events",150,0.,300.); TH1D *DileptonMass_allOtherCuts_mumu = new TH1D("DileptonMass_allOtherCuts_mumu", ";Mass_{ll};Number of Events",150,0.,300.); TH1D *DileptonMass_allOtherCutsExceptMetCut_ee = new TH1D("DileptonMass_allOtherCutsExceptMetCut_ee", ";Mass_{ll};Number of Events",150,0.,300.); TH1D *DileptonMass_allOtherCutsExceptMetCut_emu = new TH1D("DileptonMass_allOtherCutsExceptMetCut_emu", ";Mass_{ll};Number of Events",150,0.,300.); TH1D *DileptonMass_allOtherCutsExceptMetCut_mumu = new TH1D("DileptonMass_allOtherCutsExceptMetCut_mumu", ";Mass_{ll};Number of Events",150,0.,300.); Double_t NEventsIn_BeforeMetCut_ee = 0; Double_t NEventsIn_BeforeMetCut_em = 0; Double_t NEventsIn_BeforeMetCut_mm = 0; Double_t NEventsOut_BeforeMetCut_ee = 0; Double_t NEventsOut_BeforeMetCut_em = 0; Double_t NEventsOut_BeforeMetCut_mm = 0; Double_t NEventsIn_AfterMetCut_ee = 0; Double_t NEventsIn_AfterMetCut_em = 0; Double_t NEventsIn_AfterMetCut_mm = 0; Double_t NEventsOut_AfterMetCut_ee = 0; Double_t NEventsOut_AfterMetCut_em = 0; Double_t NEventsOut_AfterMetCut_mm = 0; //-------------------------------------------------------------------------------------------------------------- // Main analysis code //============================================================================================================== // // Access samples and fill histograms TFile *inputFile=0; TTree *eventTree=0; // Data structures to store info from TTrees mithep::TEventInfo *info = new mithep::TEventInfo(); TClonesArray *electronArr = new TClonesArray("mithep::TElectron"); TClonesArray *muonArr = new TClonesArray("mithep::TMuon"); TClonesArray *jetArr = new TClonesArray("mithep::TJet"); //******************************************************** // Good RunLumi Selection //******************************************************** Bool_t hasJSON = kTRUE; mithep::RunLumiRangeMap rlrm; // rlrm.AddJSONFile("Cert_TopOct22_Merged_135821-148058_allPVT.txt"); rlrm.AddJSONFile("Cert_136033-149442_7TeV_Dec22ReReco_Collisions10_JSON_v3.txt"); hasJSON = kFALSE; //******************************************************** // Get Tree //******************************************************** eventTree = getTreeFromFile(inputFilename.c_str(),"Events"); TBranch *infoBr; TBranch *electronBr; TBranch *muonBr; TBranch *jetBr; //***************************************************************************************** //Loop over muon Data Tree //***************************************************************************************** // Set branch address to structures that will store the info eventTree->SetBranchAddress("Info", &info); infoBr = eventTree->GetBranch("Info"); eventTree->SetBranchAddress("Electron", &electronArr); electronBr = eventTree->GetBranch("Electron"); eventTree->SetBranchAddress("Muon", &muonArr); muonBr = eventTree->GetBranch("Muon"); eventTree->SetBranchAddress("PFJet", &jetArr); jetBr = eventTree->GetBranch("PFJet"); for(UInt_t ientry=0; ientry<eventTree->GetEntries(); ientry++) { infoBr->GetEntry(ientry); if (ientry % 100000 == 0) cout << "Event " << ientry << endl; mithep::RunLumiRangeMap::RunLumiPairType rl(info->runNum, info->lumiSec); if(hasJSON && !rlrm.HasRunLumi(rl)) continue; // not certified run? Skip to next event... //for the skimmed input, I already required the HLT bits. // if (!passHLT(info->triggerBits, info->runNum, kTRUE)) continue; //******************************************************** // Load the branches //******************************************************** electronArr->Clear(); muonArr->Clear(); jetArr->Clear(); electronBr->GetEntry(ientry); muonBr->GetEntry(ientry); jetBr->GetEntry(ientry); //event weight Double_t eventweight = info->eventweight * lumi; //******************************************************** // TcMet //******************************************************** TVector3 met; if(info->tcMEx!=0 || info->tcMEy!=0) { met.SetXYZ(info->tcMEx, info->tcMEy, 0); } //******************************************************** // TcMet //******************************************************** Int_t NSoftMuons = 0; Int_t NLeptons = 0; vector<Int_t> leptonType; vector<Int_t> leptonIndex; vector<Double_t> leptonPt; vector<Double_t> leptonEta; vector<Double_t> leptonPhi; vector<Int_t> leptonCharge; Int_t NJets = 0; const mithep::TJet *leadingJet = 0; for(Int_t i=0; i<muonArr->GetEntries(); i++) { const mithep::TMuon *mu = (mithep::TMuon*)((*muonArr)[i]); if ( (0==0) && passMuonCuts(mu) && fabs(mu->eta) < 2.4 && mu->pt > 10.0 ) { leptonPt.push_back(mu->pt); leptonEta.push_back(mu->eta); leptonPhi.push_back(mu->phi); leptonType.push_back(13); leptonIndex.push_back(i); leptonCharge.push_back(mu->q); } } //soft muons for(Int_t i=0; i<muonArr->GetEntries(); i++) { const mithep::TMuon *mu = (mithep::TMuon*)((*muonArr)[i]); Bool_t isCleanMuon = kFALSE; for (int k=0; k<leptonPt.size(); ++k) { if ( leptonType[k] == 13 && mithep::MathUtils::DeltaR(mu->phi, mu->eta, leptonPhi[k],leptonEta[k]) < 0.1 ) { isCleanMuon = kTRUE; break; } } if ( mu->pt > 3.0 && (mu->qualityBits & kTMLastStationAngTight) && mu->nTkHits > 10 && fabs(mu->d0) < 0.2 && (mu->typeBits & kTracker) && !isCleanMuon ) { NSoftMuons++; } } for(Int_t i=0; i<electronArr->GetEntries(); i++) { const mithep::TElectron *ele = (mithep::TElectron*)((*electronArr)[i]); Bool_t isMuonOverlap = kFALSE; for (int k=0; k<leptonPt.size(); ++k) { if ( leptonType[k] == 13 && mithep::MathUtils::DeltaR(ele->phi, ele->eta, leptonPhi[k],leptonEta[k]) < 0.1 ) { isMuonOverlap = kTRUE; break; } } if ( (0==0) && passElectronCuts(ele) && fabs(ele->eta) < 2.5 && ele->pt > 10.0 && !isMuonOverlap ) { leptonPt.push_back(ele->pt); leptonEta.push_back(ele->eta); leptonPhi.push_back(ele->phi); leptonType.push_back(11); leptonIndex.push_back(i); leptonCharge.push_back(ele->q); } } //sort leptons Int_t tempType; Int_t tempIndex; Double_t tempPt; Double_t tempEta; Double_t tempPhi; Int_t tempCharge; for (int l=0; l<leptonIndex.size(); l++) { for (int k=0; k < leptonIndex.size() - 1; k++) { if (leptonPt[k+1] > leptonPt[k]) { tempType = leptonType[k]; tempIndex = leptonIndex[k]; tempPt = leptonPt[k]; tempEta = leptonEta[k]; tempPhi = leptonPhi[k]; tempCharge = leptonCharge[k]; leptonType[k] = leptonType[k+1]; leptonIndex[k] = leptonIndex[k+1]; leptonPt[k] = leptonPt[k+1]; leptonEta[k] = leptonEta[k+1]; leptonPhi[k] = leptonPhi[k+1]; leptonCharge[k] = leptonCharge[k+1]; leptonType[k+1] = tempType; leptonIndex[k+1] = tempIndex; leptonPt[k+1] = tempPt; leptonEta[k+1] = tempEta; leptonPhi[k+1] = tempPhi; leptonCharge[k+1] = tempCharge; } } } double maxBtag = -99999; for(Int_t i=0; i<jetArr->GetEntries(); i++) { const mithep::TJet *jet = (mithep::TJet*)((*jetArr)[i]); Bool_t leptonOverlap = kFALSE; for (int k=0; k<leptonPt.size(); ++k) { if (mithep::MathUtils::DeltaR(jet->phi, jet->eta, leptonPhi[k],leptonEta[k]) < 0.3) { leptonOverlap = kTRUE; } } if (!leptonOverlap) { if (jet->pt > 25 && fabs(jet->eta) < 5.0 ) { if (!leadingJet || jet->pt > leadingJet->pt) { leadingJet = jet; } NJets++; } else { if (jet->TrackCountingHighEffBJetTagsDisc > maxBtag ) maxBtag = jet->TrackCountingHighEffBJetTagsDisc; } } } //****************************************************************************** //dilepton preselection //****************************************************************************** if (leptonPt.size() < 2) continue; if (!(leptonPt[0] > 20.0 && leptonPt[1] > 10.0)) continue; for(int i = 0; i < leptonPt.size(); ++i) { for(int j = i+1; j < leptonPt.size(); ++j) { //require opposite sign if ((ChargeSelection == 0 && leptonCharge[i] == leptonCharge[j]) || (ChargeSelection == 1 && leptonCharge[0] != leptonCharge[j])) continue; Int_t finalState = -1; if (leptonType[i] == 11 && leptonType[j] == 11) { finalState = 0; } else if (leptonType[i] == 13 && leptonType[j] == 13) { finalState = 1; } else if (leptonType[i] == 11 && leptonType[j] == 13) { finalState = 2; } else if (leptonType[i] == 13 && leptonType[j] == 11) { finalState = 3; } //*********************************************************************************************** //|Z_vert-Z_l| maximum //*********************************************************************************************** double zDiffMax = 0.0; double dz_i = 0; if (leptonType[0] == 11) { dz_i = ((mithep::TElectron*)((*electronArr)[leptonIndex[i]]))->dz; } else { dz_i = ((mithep::TMuon*)((*muonArr)[leptonIndex[i]]))->dz; } if (dz_i > zDiffMax) zDiffMax = dz_i; double dz_j; if (leptonType[j] == 11) { dz_j = ((mithep::TElectron*)((*electronArr)[leptonIndex[j]]))->dz; } else { dz_j = ((mithep::TMuon*)((*muonArr)[leptonIndex[j]]))->dz; } if (dz_j > zDiffMax) zDiffMax = dz_j; //szDiffMax = fabs(dz_i - dz_j); //****************************************************************************** //construct event variables //****************************************************************************** mithep::FourVectorM lepton1; mithep::FourVectorM lepton2; if (leptonType[i] == 11) { lepton1.SetCoordinates(leptonPt[i], leptonEta[i], leptonPhi[i], 0.51099892e-3 ); } else { lepton1.SetCoordinates(leptonPt[i], leptonEta[i], leptonPhi[i], 105.658369e-3 ); } if (leptonType[j] == 11) { lepton2.SetCoordinates(leptonPt[j], leptonEta[j], leptonPhi[j], 0.51099892e-3 ); } else { lepton2.SetCoordinates(leptonPt[j], leptonEta[j], leptonPhi[j], 105.658369e-3 ); } mithep::FourVectorM dilepton = lepton1+lepton2; double deltaPhiLeptons = mithep::MathUtils::DeltaPhi(lepton1.Phi(), lepton2.Phi())* 180.0 / TMath::Pi(); double deltaPhiDileptonMet = mithep::MathUtils::DeltaPhi(met.Phi(), dilepton.Phi())*180.0 / TMath::Pi(); double mtHiggs = TMath::Sqrt(2.0*dilepton.Pt() * met.Phi()* (1.0 - cos(deltaPhiDileptonMet * TMath::Pi() / 180.0))); //angle between MET and closest lepton double deltaPhiMetLepton[2] = {mithep::MathUtils::DeltaPhi(met.Phi(), lepton1.Phi()), mithep::MathUtils::DeltaPhi(met.Phi(), lepton2.Phi())}; double mTW[2] = {TMath::Sqrt(2.0*lepton1.Pt()*met.Pt()* (1.0 - cos(deltaPhiMetLepton[0]))), TMath::Sqrt(2.0*lepton2.Pt()*met.Pt()* (1.0 - cos(deltaPhiMetLepton[1])))}; double minDeltaPhiMetLepton = (deltaPhiMetLepton[0] < deltaPhiMetLepton[1])? deltaPhiMetLepton[0]:deltaPhiMetLepton[1]; double METdeltaPhilEt = met.Pt(); if(minDeltaPhiMetLepton < TMath::Pi()/2.) METdeltaPhilEt = METdeltaPhilEt * sin(minDeltaPhiMetLepton); //********************************************************************************************* //Define Cuts //********************************************************************************************* const int nCuts = 14; bool passCut[nCuts] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false}; if(lepton1.Pt() > 20.0 && lepton2.Pt() >= 10.0) passCut[0] = true; if(zDiffMax < 1.0) passCut[1] = true; if(met.Pt() > 20.0) passCut[2] = true; if(dilepton.M() > 12.0) passCut[3] = true; if (finalState == 0 || finalState == 1){ // mumu/ee if(fabs(dilepton.M()-91.1876) > 15.0) passCut[4] = true; if(METdeltaPhilEt > 35) passCut[5] = true; } else if(finalState == 2 ||finalState == 3 ) { // emu passCut[4] = true; if(METdeltaPhilEt > 35) passCut[5] = true; } if(NJets < 1) passCut[6] = true; if (NSoftMuons == 0 ) passCut[7] = true; if (!(leptonPt.size() >= 3 && leptonPt[2] > 10.0)) passCut[8] = true; if(maxBtag < 2.1) passCut[9] = true; if (lepton1.Pt() > fPtMaxLowerCut) passCut[10] = true; if (lepton2.Pt() > fPtMinLowerCut) passCut[11] = true; if (dilepton.M() < fDileptonMassUpperCut) passCut[12] = true; if (deltaPhiLeptons < fDeltaPhiCut) passCut[13] = true; //********************************************************************************************* //Make Selection Histograms. Number of events passing each level of cut //********************************************************************************************* bool passAllCuts = true; for(int c=0; c<nCuts; c++) passAllCuts = passAllCuts & passCut[c]; //***************************************************************************************** //Make Histograms Before Met Cut //***************************************************************************************** if (passCut[0] && passCut[1] && passCut[3] && passCut[6] &&passCut[7] && passCut[8] && passCut[9] // && passCut[10] && passCut[11] && passCut[13] ) { if (finalState == 0) { DileptonMass_allOtherCutsExceptMetCut_ee->Fill(dilepton.M()); if(fabs(dilepton.M()-91.1876) > 15.0) { NEventsOut_BeforeMetCut_ee++; } else { NEventsIn_BeforeMetCut_ee++; } } else if (finalState == 1) { DileptonMass_allOtherCutsExceptMetCut_mumu->Fill(dilepton.M()); if(fabs(dilepton.M()-91.1876) > 15.0) { NEventsOut_BeforeMetCut_mm++; } else { NEventsIn_BeforeMetCut_mm++; } } else { DileptonMass_allOtherCutsExceptMetCut_emu->Fill(dilepton.M()); if(fabs(dilepton.M()-91.1876) > 15.0) { NEventsOut_BeforeMetCut_em++; } else { NEventsIn_BeforeMetCut_em++; } } } //***************************************************************************************** //Make Histograms //***************************************************************************************** if (passCut[0] && passCut[1] && passCut[2] && passCut[3] && passCut[5] &&passCut[6] &&passCut[7] && passCut[8] && passCut[9] // && passCut[10] && passCut[11] && passCut[13] ) { if (finalState == 0) { DileptonMass_allOtherCuts_ee->Fill(dilepton.M()); if(fabs(dilepton.M()-91.1876) > 15.0) { NEventsOut_AfterMetCut_ee++; } else { NEventsIn_AfterMetCut_ee++; cout << info->runNum << " " << info->lumiSec << " " << info->evtNum << " : " << dilepton.M() << " " << finalState << " : " << lepton1.Pt() << " " << lepton1.Eta() << " " << lepton1.Phi() << " : " << " : " << lepton2.Pt() << " " << lepton2.Eta() << " " << lepton2.Phi() << " \n" ; } } else if (finalState == 1) { DileptonMass_allOtherCuts_mumu->Fill(dilepton.M()); if(fabs(dilepton.M()-91.1876) > 15.0) { NEventsOut_AfterMetCut_mm++; } else { NEventsIn_AfterMetCut_mm++; cout << info->runNum << " " << info->lumiSec << " " << info->evtNum << " : " << dilepton.M() << " " << finalState << " : " << lepton1.Pt() << " " << lepton1.Eta() << " " << lepton1.Phi() << " : " << " : " << lepton2.Pt() << " " << lepton2.Eta() << " " << lepton2.Phi() << " \n" ; } } else { DileptonMass_allOtherCuts_emu->Fill(dilepton.M()); if(fabs(dilepton.M()-91.1876) > 15.0) { NEventsOut_AfterMetCut_em++; } else { NEventsIn_AfterMetCut_em++; cout << info->runNum << " " << info->lumiSec << " " << info->evtNum << " : " << dilepton.M() << " " << finalState << " : " << lepton1.Pt() << " " << lepton1.Eta() << " " << lepton1.Phi() << " : " << " : " << lepton2.Pt() << " " << lepton2.Eta() << " " << lepton2.Phi() << " \n" ; } } } } } } //end loop over data delete info; delete electronArr; delete muonArr; delete jetArr; //-------------------------------------------------------------------------------------------------------------- // Make plots //============================================================================================================== TCanvas *cv = new TCanvas("cv","cv", 800,600); //-------------------------------------------------------------------------------------------------------------- // Summary print out //============================================================================================================== cout << "Before Met Cut\n"; cout << "Number of Events in Z window : (ee) " << NEventsIn_BeforeMetCut_ee << " (mm) " << NEventsIn_BeforeMetCut_mm << endl; cout << "Number of Events out of Z window : (ee) " << NEventsOut_BeforeMetCut_ee << " (mm) " << NEventsOut_BeforeMetCut_mm << endl; cout << "Ratio Out/In : (ee) " << NEventsOut_BeforeMetCut_ee / NEventsIn_BeforeMetCut_ee << " (mm) " << NEventsOut_BeforeMetCut_mm / NEventsIn_BeforeMetCut_mm << endl; cout << "After Met Cut\n"; cout << "Number of Events in Z window : (ee) " << NEventsIn_AfterMetCut_ee << " (mm) " << NEventsIn_AfterMetCut_mm << " (em) " << NEventsIn_AfterMetCut_em << endl; cout << "Number of Events out of Z window : (ee) " << NEventsOut_AfterMetCut_ee << " (mm) " << NEventsOut_AfterMetCut_mm << " (em) " << NEventsOut_AfterMetCut_em << endl; //-------------------------------------------------------------------------------------------------------------- // Save Histograms; //============================================================================================================== TFile *file = new TFile("HwwSelectionPlots.root", "RECREATE"); file->WriteTObject(DileptonMass_allOtherCuts_ee ,DileptonMass_allOtherCuts_ee->GetName(), "WriteDelete"); file->WriteTObject(DileptonMass_allOtherCuts_mumu ,DileptonMass_allOtherCuts_mumu->GetName(), "WriteDelete"); file->WriteTObject(DileptonMass_allOtherCuts_emu ,DileptonMass_allOtherCuts_emu->GetName(), "WriteDelete"); file->WriteTObject(DileptonMass_allOtherCutsExceptMetCut_ee ,DileptonMass_allOtherCutsExceptMetCut_ee->GetName(), "WriteDelete"); file->WriteTObject(DileptonMass_allOtherCutsExceptMetCut_mumu ,DileptonMass_allOtherCutsExceptMetCut_mumu->GetName(), "WriteDelete"); file->WriteTObject(DileptonMass_allOtherCutsExceptMetCut_emu ,DileptonMass_allOtherCutsExceptMetCut_emu->GetName(), "WriteDelete"); file->Close(); delete file; gBenchmark->Show("WWTemplate"); }
// Main macro function //-------------------------------------------------------------------------------------------------- void SkimMultipleFiles_fakes(string inputFilename, string outputFilename) { gBenchmark->Start("SkimNtuples"); TTree::SetMaxTreeSize(kMaxLong64); // Don't write TObject part of the objects mithep::TEventInfo::Class()->IgnoreTObjectStreamer(); mithep::TMuon::Class()->IgnoreTObjectStreamer(); mithep::TElectron::Class()->IgnoreTObjectStreamer(); mithep::TJet::Class()->IgnoreTObjectStreamer(); mithep::TPhoton::Class()->IgnoreTObjectStreamer(); // Data structures to store info from TTrees mithep::TEventInfo *info = new mithep::TEventInfo(); TClonesArray *muonArr = new TClonesArray("mithep::TMuon"); TClonesArray *electronArr = new TClonesArray("mithep::TElectron"); TClonesArray *jetArr = new TClonesArray("mithep::TJet"); TClonesArray *photonArr = new TClonesArray("mithep::TPhoton"); UInt_t nInputEvts = 0; UInt_t nPassEvts = 0; UInt_t nEventsTotal = 0; TFile* outfile = new TFile(outputFilename.c_str(), "RECREATE"); // // Initialize data trees and structs // TTree *outEventTree = new TTree("Events","Events"); outEventTree->Branch("Info", &info); outEventTree->Branch("Muon", &muonArr); outEventTree->Branch("Electron", &electronArr); outEventTree->Branch("PFJet", &jetArr); outEventTree->Branch("Photon", &photonArr); // list input ntuple files to be skimmed vector<string> infilenames; ifstream ifs; ifs.open(inputFilename.c_str()); assert(ifs.is_open()); string line; while(getline(ifs,line)) { infilenames.push_back(line); } ifs.close(); for(UInt_t ifile=0; ifile<infilenames.size(); ifile++) { cout << "Skimming " << infilenames[ifile] << "..." << endl; TTree *eventTree = getTreeFromFile(infilenames[ifile].c_str(),"Events"); nEventsTotal += getNEvents(infilenames[ifile].c_str()); assert(eventTree); // Set branch address to structures that will store the info eventTree->SetBranchAddress("Info", &info); TBranch *infoBr = eventTree->GetBranch("Info"); eventTree->SetBranchAddress("Muon", &muonArr); TBranch *muonBr = eventTree->GetBranch("Muon"); eventTree->SetBranchAddress("Electron", &electronArr); TBranch *electronBr = eventTree->GetBranch("Electron"); eventTree->SetBranchAddress("PFJet", &jetArr); TBranch *jetBr = eventTree->GetBranch("PFJet"); eventTree->SetBranchAddress("Photon", &photonArr); TBranch *photonBr = eventTree->GetBranch("Photon"); for(UInt_t ientry=0; ientry<eventTree->GetEntries(); ientry++) { infoBr->GetEntry(ientry); muonArr->Clear(); muonBr->GetEntry(ientry); electronArr->Clear(); electronBr->GetEntry(ientry); jetArr->Clear(); jetBr->GetEntry(ientry); if (ientry % 100000 == 0) cout << "Events: " << ientry << endl; nInputEvts++; //******************************************************** // TcMet //******************************************************** TVector3 met; if(info->tcMEx!=0 || info->tcMEy!=0) { met.SetXYZ(info->tcMEx, info->tcMEy, 0); } Double_t tempLeadingJetPt = 0; for(Int_t i=0; i<jetArr->GetEntries(); i++) { const mithep::TJet *jet = (mithep::TJet*)((*jetArr)[i]); if( jet->pt > tempLeadingJetPt) tempLeadingJetPt = jet->pt; } Bool_t keep = kTRUE; Int_t NRecoMuon = 0; Int_t NDenominatorMuon = 0; Int_t NMuons = 0; for(Int_t i=0; i<muonArr->GetEntries(); i++) { const mithep::TMuon *mu = (mithep::TMuon*)((*muonArr)[i]); if (fabs(mu->eta) < 2.4 && mu->pt > 10.0) { NRecoMuon++; if (passMuonDenominatorCuts(mu)) { NDenominatorMuon++; } } } Int_t NRecoElectrons = 0; Int_t NDenominatorElectrons = 0; for(Int_t i=0; i<electronArr->GetEntries(); i++) { const mithep::TElectron *ele = (mithep::TElectron*)((*electronArr)[i]); if ( fabs(ele->eta) < 2.5 && ele->pt > 10.0 ) { NRecoElectrons++; if (passElectronDenominatorCuts(ele) ) { NDenominatorElectrons++; } } } //Skim Lepton + Jet if (!( (NRecoMuon == 1 || NRecoElectrons == 1) && tempLeadingJetPt > 15.0 && met.Pt() < 20 ) ) { keep = kFALSE; } if(keep) { outEventTree->Fill(); nPassEvts++; } } } outfile->Write(); outfile->Close(); delete info; delete muonArr; delete electronArr; delete jetArr; std::cout << outputFilename << " created!" << std::endl; std::cout << " >>> Total Number of Events: " << nEventsTotal << std::endl; std::cout << " >>> Events processed: " << nInputEvts << std::endl; std::cout << " >>> Events passing: " << nPassEvts << std::endl; gBenchmark->Show("SkimNtuples"); }
void MakeNtuple(const string inputFilename, const string outputFilename, Int_t Option) { gBenchmark->Start("WWTemplate"); //***************************************************************************************** //Setup //***************************************************************************************** TFile *outputFile = new TFile(outputFilename.c_str(), "RECREATE"); ElectronTree *eleTree = new ElectronTree; eleTree->CreateTree(); eleTree->tree_->SetAutoFlush(0); UInt_t NElectronsFilled = 0; //-------------------------------------------------------------------------------------------------------------- // Main analysis code //============================================================================================================== // // Access samples and fill histograms TTree *eventTree=0; // Data structures to store info from TTrees higgsana::TEventInfo *info = new higgsana::TEventInfo(); TClonesArray *electronArr = new TClonesArray("higgsana::TElectron"); TClonesArray *muonArr = new TClonesArray("higgsana::TMuon"); TClonesArray *jetArr = new TClonesArray("higgsana::TJet"); TClonesArray *photonArr = new TClonesArray("higgsana::TPhoton"); TClonesArray *pfcandidateArr = new TClonesArray("higgsana::TPFCandidate"); //******************************************************** // Good RunLumi Selection //******************************************************** Bool_t hasJSON = kTRUE; mithep::RunLumiRangeMap rlrm; rlrm.AddJSONFile("/data/smurf/data/Winter11_4700ipb/auxiliar/hww.Full2011.json"); rlrm.AddJSONFile("/data/blue/sixie/HZZ4l/auxiliar/2012/Cert_190456-196531_8TeV_PromptReco_Collisions12_JSON.txt"); Int_t NEvents = 0; UInt_t DataEra = kDataEra_NONE; vector<string> inputfiles; if (inputFilename == "LIST") { inputfiles.push_back("/home/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r11a-del-m10-v1.FakeTriggerSkim.root"); inputfiles.push_back("/home/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r11a-del-pr-v4.FakeTriggerSkim.root"); inputfiles.push_back("/home/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r11a-del-a05-v1.FakeTriggerSkim.root"); inputfiles.push_back("/home/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r11a-del-o03-v1.FakeTriggerSkim.root"); inputfiles.push_back("/home/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r11b-del-pr-v1.FakeTriggerSkim.root"); } else if (inputFilename == "2012Data") { inputfiles.push_back("/data/smurf/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r12a-del-pr-v1_FakeRateTriggerSkimmed.root"); inputfiles.push_back("/data/smurf/sixie/hist/HZZ4lNtuples/data/AllNtuple_HZZ4lNtuple_r12b-del-pr-v1_FakeRateTriggerSkimmed.root"); DataEra = kDataEra_2012_MC; } else { inputfiles.push_back(inputFilename); } for (UInt_t f = 0; f < inputfiles.size(); ++f) { //******************************************************** // Get Tree //******************************************************** eventTree = getTreeFromFile(inputfiles[f].c_str(),"Events"); TBranch *infoBr; TBranch *electronBr; TBranch *muonBr; TBranch *jetBr; TBranch *photonBr; TBranch *pfcandidateBr; //***************************************************************************************** //Loop over Data Tree //***************************************************************************************** // Set branch address to structures that will store the info eventTree->SetBranchAddress("Info", &info); infoBr = eventTree->GetBranch("Info"); eventTree->SetBranchAddress("Electron", &electronArr); electronBr = eventTree->GetBranch("Electron"); eventTree->SetBranchAddress("Muon", &muonArr); muonBr = eventTree->GetBranch("Muon"); eventTree->SetBranchAddress("Photon", &photonArr); photonBr = eventTree->GetBranch("Photon"); eventTree->SetBranchAddress("PFJet", &jetArr); jetBr = eventTree->GetBranch("PFJet"); eventTree->SetBranchAddress("PFCandidate", &pfcandidateArr); pfcandidateBr = eventTree->GetBranch("PFCandidate"); cout << "InputFile " << inputfiles[f] << " --- Total Events : " << eventTree->GetEntries() << endl; for(UInt_t ientry=0; ientry < eventTree->GetEntries(); ientry++) { infoBr->GetEntry(ientry); if (ientry % 100000 == 0) cout << "Event " << ientry << endl; Double_t eventweight = info->eventweight; mithep::RunLumiRangeMap::RunLumiPairType rl(info->runNum, info->lumiSec); if(hasJSON && !rlrm.HasRunLumi(rl)) continue; // not certified run? Skip to next event... NEvents++; //******************************************************** // Load the branches //******************************************************** electronArr->Clear(); muonArr->Clear(); photonArr->Clear(); jetArr->Clear(); pfcandidateArr->Clear(); electronBr->GetEntry(ientry); muonBr->GetEntry(ientry); photonBr->GetEntry(ientry); jetBr->GetEntry(ientry); pfcandidateBr->GetEntry(ientry); //******************************************************** // Pileup Energy Density //******************************************************** Double_t rhoEleIso = 0; UInt_t EleEAEra = 0; if (DataEra == kDataEra_2011_MC) { if (!(isnan(info->RhoKt6PFJetsForIso25) || isinf(info->RhoKt6PFJetsForIso25))) { rhoEleIso = info->RhoKt6PFJetsForIso25; } EleEAEra = kDataEra_2011_Data; } else if (DataEra == kDataEra_2012_MC) { if (!(isnan(info->RhoKt6PFJets) || isinf(info->RhoKt6PFJets))) { rhoEleIso = info->RhoKt6PFJets; } EleEAEra = kDataEra_2012_Data; } //******************************************************** // TcMet //******************************************************** TVector3 pfMet; if(info->pfMEx!=0 || info->pfMEy!=0) { pfMet.SetXYZ(info->pfMEx, info->pfMEy, 0); } Double_t met = pfMet.Pt(); Int_t NElectrons = electronArr->GetEntries(); //******************************************************** // Event Selection Cuts //******************************************************** //veto events with more than 1 reco electron if (NElectrons > 1) continue; //met cut removed W events if (met > 20) continue; //****************************************************************************** //loop over electrons //****************************************************************************** for(Int_t i=0; i<electronArr->GetEntries(); i++) { const higgsana::TElectron *ele = (higgsana::TElectron*)((*electronArr)[i]); //make cut on dz if (fabs(ele->dz) > 0.1) continue; //protect against pathologies if (TMath::IsNaN(ele->sigiPhiiPhi)) { cout << "Pathological SigmaIPhiIPhi : " << info->runNum << " " << info->lumiSec << " " << info->evtNum << endl; continue; } //******************************************************** //find leading jet in the event //******************************************************** Double_t leadingJetPt = -1; //pass event selection for(Int_t j=0; j<jetArr->GetEntries(); j++) { const higgsana::TJet *jet = (higgsana::TJet*)((*jetArr)[j]); if (jet->pt > leadingJetPt && higgsana::deltaR(jet->eta, jet->phi, ele->eta, ele->phi) > 1.0) { leadingJetPt = jet->pt; } } //Fill These Electrons NElectronsFilled++; if (Option == 0) { FillElectronTree( eleTree, ele, pfcandidateArr, rhoEleIso, EleEAEra, info->nPV0, info->runNum, info->lumiSec, info->evtNum); } else if (Option == 1) { FillElectronTree( eleTree, ele, pfcandidateArr, rhoEleIso, kDataEra_NONE, info->nPV0, info->runNum, info->lumiSec, info->evtNum); } } //loop over electrons } //end loop over data cout << "Total Electrons: " << NElectronsFilled << endl; } //end loop over files delete info; delete electronArr; delete muonArr; delete jetArr; cout << "Total Electrons: " << NElectronsFilled << endl; outputFile->Write(); outputFile->Close(); gBenchmark->Show("WWTemplate"); }
int RecoInfoExport::process_event(PHCompositeNode *topNode) { ++_event; stringstream fname; fname << _file_prefix << "_Event" << _event << ".dat"; fstream fdata(fname.str(), ios_base::out); for (auto & calo_name : _calo_names) { string towernodename = "TOWER_CALIB_" + calo_name; // Grab the towers RawTowerContainer* towers = findNode::getClass<RawTowerContainer>(topNode, towernodename.c_str()); if (!towers) { std::cout << PHWHERE << ": Could not find node " << towernodename.c_str() << std::endl; return Fun4AllReturnCodes::ABORTRUN; } string towergeomnodename = "TOWERGEOM_" + calo_name; RawTowerGeomContainer *towergeom = findNode::getClass< RawTowerGeomContainer>(topNode, towergeomnodename.c_str()); if (!towergeom) { cout << PHWHERE << ": Could not find node " << towergeomnodename.c_str() << endl; return Fun4AllReturnCodes::ABORTRUN; } set<const RawTower *> good_towers; RawTowerContainer::ConstRange begin_end = towers->getTowers(); RawTowerContainer::ConstIterator rtiter; for (rtiter = begin_end.first; rtiter != begin_end.second; ++rtiter) { const RawTower *tower = rtiter->second; assert(tower); if (tower->get_energy() > _tower_threshold) { good_towers.insert(tower); } } fdata << (boost::format("%1% (1..%2% hits)") % calo_name % good_towers.size()) << endl; bool first = true; for (const auto & tower : good_towers) { assert(tower); float eta = towergeom->get_etacenter(tower->get_bineta()); float phi = towergeom->get_phicenter(tower->get_binphi()); phi = atan2(cos(phi), sin(phi)); if (first) { first = false; } else fdata << ","; fdata << (boost::format("[%1%,%2%,%3%]") % eta % phi % tower->get_energy()); } fdata << endl; } { fdata << "Track list" << endl; // need things off of the DST... PHG4TruthInfoContainer* truthinfo = findNode::getClass< PHG4TruthInfoContainer>(topNode, "G4TruthInfo"); if (!truthinfo) { cerr << PHWHERE << " ERROR: Can't find G4TruthInfo" << endl; exit(-1); } // create SVTX eval stack SvtxEvalStack svtxevalstack(topNode); // SvtxVertexEval* vertexeval = svtxevalstack.get_vertex_eval(); // SvtxTrackEval* trackeval = svtxevalstack.get_track_eval(); SvtxTruthEval* trutheval = svtxevalstack.get_truth_eval(); // loop over all truth particles PHG4TruthInfoContainer::Range range = truthinfo->GetPrimaryParticleRange(); for (PHG4TruthInfoContainer::ConstIterator iter = range.first; iter != range.second; ++iter) { PHG4Particle* g4particle = iter->second; const TVector3 mom(g4particle->get_px(), g4particle->get_py(), g4particle->get_pz()); std::set<PHG4Hit*> g4hits = trutheval->all_truth_hits(g4particle); map<float, PHG4Hit *> time_sort; map<float, PHG4Hit *> layer_sort; for (auto & hit : g4hits) { if (hit) { time_sort[hit->get_avg_t()] = hit; } } for (auto & hit_pair : time_sort) { if (hit_pair.second->get_layer() != UINT_MAX and layer_sort.find(hit_pair.second->get_layer()) == layer_sort.end()) { layer_sort[hit_pair.second->get_layer()] = hit_pair.second; } } if (layer_sort.size() > 5 and mom.Pt() > _pT_threshold) // minimal track length cut { stringstream spts; TVector3 last_pos(0, 0, 0); bool first = true; for (auto & hit_pair : layer_sort) { TVector3 pos(hit_pair.second->get_avg_x(), hit_pair.second->get_avg_y(), hit_pair.second->get_avg_z()); // hit step cuts if ((pos - last_pos).Mag() < _min_track_hit_dist and hit_pair.first != (layer_sort.rbegin()->first) and hit_pair.first != (layer_sort.begin()->first)) continue; last_pos = pos; if (first) { first = false; } else spts << ","; spts << "["; spts << pos.x(); spts << ","; spts << pos.y(); spts << ","; spts << pos.z(); spts << "]"; } const int abs_pid = abs(g4particle->get_pid()); int t = 5; if (abs_pid == TDatabasePDG::Instance()->GetParticle("pi+")->PdgCode()) { t = 1; } else if (abs_pid == TDatabasePDG::Instance()->GetParticle("proton")->PdgCode()) { t = 2; } else if (abs_pid == TDatabasePDG::Instance()->GetParticle("K+")->PdgCode()) { t = 3; } else if (abs_pid == TDatabasePDG::Instance()->GetParticle("e-")->PdgCode()) { t = 3; } const TParticlePDG * pdg_part = TDatabasePDG::Instance()->GetParticle(11); const int c = (pdg_part != nullptr) ? (copysign(1, pdg_part->Charge())) : 0; fdata << (boost::format( "{ \"pt\": %1%, \"t\": %2%, \"e\": %3%, \"p\": %4%, \"c\": %5%, \"pts\":[ %6% ]}") % mom.Pt() % t % mom.PseudoRapidity() % mom.Phi() % c % spts.str()) << endl; } } } fdata.close(); return 0; }