ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/UHHAnalysis/NtupleWriter/src/NtupleWriter.cc
(Generate patch)

Comparing UserCode/UHHAnalysis/NtupleWriter/src/NtupleWriter.cc (file contents):
Revision 1.7 by peiffer, Wed Apr 11 15:32:13 2012 UTC vs.
Revision 1.14 by peiffer, Mon Apr 23 14:26:23 2012 UTC

# Line 50 | Line 50 | NtupleWriter::NtupleWriter(const edm::Pa
50    doMuons = iConfig.getParameter<bool>("doMuons");
51    doTaus = iConfig.getParameter<bool>("doTaus");
52    doJets = iConfig.getParameter<bool>("doJets");
53 +  doGenTopJets = iConfig.getParameter<bool>("doGenTopJets");  
54    doPhotons = iConfig.getParameter<bool>("doPhotons");
55    doMET = iConfig.getParameter<bool>("doMET");
56    doGenInfo = iConfig.getParameter<bool>("doGenInfo");
57 +  doAllGenParticles = iConfig.getParameter<bool>("doAllGenParticles");
58 +  doLumiInfo = iConfig.getParameter<bool>("doLumiInfo");
59    doPV = iConfig.getParameter<bool>("doPV");
60    doTopJets = iConfig.getParameter<bool>("doTopJets");
61    doTrigger = iConfig.getParameter<bool>("doTrigger");
# Line 64 | Line 67 | NtupleWriter::NtupleWriter(const edm::Pa
67    tr->Branch("luminosityBlock",&luminosityBlock);
68    tr->Branch("isRealData",&isRealData);
69    tr->Branch("HBHENoiseFilterResult",&HBHENoiseFilterResult);
70 <  tr->Branch("beamspot_x0",&beamspot_x0);
71 <  tr->Branch("beamspot_y0",&beamspot_y0);
72 <  tr->Branch("beamspot_z0",&beamspot_z0);
73 <
70 >  if(doLumiInfo){
71 >    tr->Branch("intgRecLumi",&intgRecLumi);
72 >    tr->Branch("intgDelLumi",&intgDelLumi);
73 >  }
74 >  if(doPV){
75 >    tr->Branch("beamspot_x0",&beamspot_x0);
76 >    tr->Branch("beamspot_y0",&beamspot_y0);
77 >    tr->Branch("beamspot_z0",&beamspot_z0);
78 >  }
79    if(doElectrons){
80      electron_sources = iConfig.getParameter<std::vector<std::string> >("electron_sources");
81      for(size_t j=0; j< electron_sources.size(); ++j){  
# Line 104 | Line 112 | NtupleWriter::NtupleWriter(const edm::Pa
112        tr->Branch( topjet_sources[j].c_str(), "std::vector<TopJet>", &topjets[j]);
113      }
114    }
115 +  if(doGenTopJets){
116 +    gentopjet_sources = iConfig.getParameter<std::vector<std::string> >("gentopjet_sources");
117 +    gentopjet_ptmin = iConfig.getParameter<double> ("gentopjet_ptmin");
118 +    gentopjet_etamax = iConfig.getParameter<double> ("gentopjet_etamax");
119 +    for(size_t j=0; j< gentopjet_sources.size(); ++j){  
120 +      tr->Branch( gentopjet_sources[j].c_str(), "std::vector<TopJet>", &gentopjets[j]);
121 +    }
122 +  }
123    if(doPhotons){
124      photon_sources = iConfig.getParameter<std::vector<std::string> >("photon_sources");
125      for(size_t j=0; j< photon_sources.size(); ++j){  
# Line 197 | Line 213 | NtupleWriter::analyze(const edm::Event&
213           pvs[j].push_back(pv);
214         }
215       }
216 +      
217 +     edm::Handle<reco::BeamSpot> beamSpot;
218 +     iEvent.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot);
219 +     const reco::BeamSpot & bsp = *beamSpot;
220 +    
221 +     beamspot_x0 = bsp.x0();
222 +     beamspot_y0 = bsp.y0();
223 +     beamspot_z0 = bsp.z0();
224     }
201  
202   edm::Handle<reco::BeamSpot> beamSpot;
203   iEvent.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot);
204   const reco::BeamSpot & bsp = *beamSpot;
205  
206   beamspot_x0 = bsp.x0();
207   beamspot_y0 = bsp.y0();
208   beamspot_z0 = bsp.z0();
225  
226     // ------------- electrons -------------  
227     if(doElectrons){
228 +
229 +     edm::Handle<reco::ConversionCollection> hConversions;
230 +     iEvent.getByLabel("allConversions", hConversions);
231 +
232 +     edm::Handle<reco::BeamSpot> beamSpot;
233 +     iEvent.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot);
234 +     const reco::BeamSpot & bsp = *beamSpot;
235 +
236       for(size_t j=0; j< electron_sources.size(); ++j){
237         eles[j].clear();
238         edm::Handle< std::vector<pat::Electron> > ele_handle;
# Line 234 | Line 258 | NtupleWriter::analyze(const edm::Event&
258           ele.neutralHadronIso = pat_ele.neutralHadronIso();
259           ele.chargedHadronIso = pat_ele.chargedHadronIso();
260           ele.trackIso = pat_ele.trackIso();
261 +         ele.photonIso = pat_ele.photonIso();
262           ele.puChargedHadronIso = pat_ele.puChargedHadronIso();
263           ele.gsfTrack_trackerExpectedHitsInner_numberOfLostHits = pat_ele.gsfTrack()->trackerExpectedHitsInner().numberOfLostHits();
264           ele.gsfTrack_px= pat_ele.gsfTrack()->px();
# Line 242 | Line 267 | NtupleWriter::analyze(const edm::Event&
267           ele.gsfTrack_vx= pat_ele.gsfTrack()->vx();
268           ele.gsfTrack_vy= pat_ele.gsfTrack()->vy();
269           ele.gsfTrack_vz= pat_ele.gsfTrack()->vz();
270 +         ele.passconversionveto = !ConversionTools::hasMatchedConversion(pat_ele,hConversions,bsp.position());
271 +         ele.dEtaIn=pat_ele.deltaEtaSuperClusterTrackAtVtx();
272 +         ele.dPhiIn=pat_ele.deltaPhiSuperClusterTrackAtVtx();
273 +         ele.sigmaIEtaIEta=pat_ele.sigmaIetaIeta();
274 +         ele.HoverE=pat_ele.hadronicOverEm();
275 +         ele.fbrem=pat_ele.fbrem();
276 +         ele.EoverPIn=pat_ele.eSuperClusterOverP();
277 +         ele.EcalEnergy=pat_ele.ecalEnergy();
278 +         //ele.mvaTrigV0=pat_ele.electronID("mvaTrigV0");
279 +         //ele.mvaNonTrigV0=pat_ele.electronID("mvaNonTrigV0");
280 +
281           eles[j].push_back(ele);
282         }
283       }
# Line 273 | Line 309 | NtupleWriter::analyze(const edm::Event&
309           mu.neutralHadronIso = pat_mu.neutralHadronIso();
310           mu.chargedHadronIso = pat_mu.chargedHadronIso();
311           mu.trackIso = pat_mu.trackIso();
312 +         mu.photonIso = pat_mu.photonIso();
313           mu.puChargedHadronIso = pat_mu.puChargedHadronIso();
314           mu.isGlobalMuon = pat_mu.isGlobalMuon();
315           mu.isStandAloneMuon = pat_mu.isStandAloneMuon();
# Line 303 | Line 340 | NtupleWriter::analyze(const edm::Event&
340             mu.innerTrack_d0Error = innerTrack->d0Error();
341             mu.innerTrack_numberOfValidHits = innerTrack->numberOfValidHits();
342             mu.innerTrack_numberOfLostHits = innerTrack->numberOfLostHits();
343 +           mu.innerTrack_trackerLayersWithMeasurement = innerTrack->hitPattern().trackerLayersWithMeasurement();
344 +           mu.innerTrack_numberOfValidPixelHits = innerTrack->hitPattern().numberOfValidPixelHits();
345           }
346           else{
347             mu.innerTrack_chi2 = 0;
# Line 311 | Line 350 | NtupleWriter::analyze(const edm::Event&
350             mu.innerTrack_d0Error = 0;
351             mu.innerTrack_numberOfValidHits = 0;
352             mu.innerTrack_numberOfLostHits = 0;
353 +           mu.innerTrack_trackerLayersWithMeasurement = 0;
354 +           mu.innerTrack_numberOfValidPixelHits = 0;
355           }
356           reco::TrackRef outerTrack = pat_mu.outerTrack();
357           if(!outerTrack.isNull()){
# Line 356 | Line 397 | NtupleWriter::analyze(const edm::Event&
397           tau.eta =  pat_tau.eta();
398           tau.phi =  pat_tau.phi();
399           tau.energy =  pat_tau.energy();
400 <
400 >         tau.decayModeFinding = pat_tau.tauID("decayModeFinding")>0.5;
401 >         tau.byVLooseCombinedIsolationDeltaBetaCorr  = pat_tau.tauID("byVLooseCombinedIsolationDeltaBetaCorr")>0.5;
402 >         tau.byLooseCombinedIsolationDeltaBetaCorr = pat_tau.tauID("byLooseCombinedIsolationDeltaBetaCorr")>0.5;
403 >         tau.byMediumCombinedIsolationDeltaBetaCorr = pat_tau.tauID("byMediumCombinedIsolationDeltaBetaCorr")>0.5;
404 >         tau.byTightCombinedIsolationDeltaBetaCorr = pat_tau.tauID("byTightCombinedIsolationDeltaBetaCorr")>0.5;
405 >         tau.againstElectronLoose  = pat_tau.tauID("againstElectronLoose")>0.5;
406 >         tau.againstElectronMedium = pat_tau.tauID("againstElectronMedium")>0.5;
407 >         tau.againstElectronTight = pat_tau.tauID("againstElectronTight")>0.5;
408 >         tau.againstElectronMVA  = pat_tau.tauID("againstElectronMVA")>0.5;
409 >         tau.againstMuonLoose = pat_tau.tauID("againstMuonLoose")>0.5;
410 >         tau.againstMuonMedium = pat_tau.tauID("againstMuonMedium")>0.5;
411 >         tau.againstMuonTight = pat_tau.tauID("againstMuonTight")>0.5;
412 >
413 >         reco::PFCandidateRef leadPFCand = pat_tau.leadPFCand();
414 >         if(!leadPFCand.isNull()){
415 >           tau.leadPFCand_px = leadPFCand->px();
416 >           tau.leadPFCand_py = leadPFCand->py();
417 >           tau.leadPFCand_pz = leadPFCand->pz();
418 >         }
419 >         else{
420 >           tau.leadPFCand_px = 0;
421 >           tau.leadPFCand_py = 0;
422 >           tau.leadPFCand_pz = 0;
423 >         }
424           taus[j].push_back(tau);
425         }
426       }
# Line 410 | Line 474 | NtupleWriter::analyze(const edm::Event&
474           jecUnc->setJetEta(pat_jet.eta());
475           jecUnc->setJetPt(pat_jet.pt());
476           jet.JEC_uncertainty = jecUnc->getUncertainty(true);
477 +         jet.JEC_factor_raw = pat_jet.jecFactor("Uncorrected");
478  
479           jet.btag_simpleSecondaryVertexHighEff=pat_jet.bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
480           jet.btag_simpleSecondaryVertexHighPur=pat_jet.bDiscriminator("simpleSecondaryVertexHighPurBJetTags");
# Line 418 | Line 483 | NtupleWriter::analyze(const edm::Event&
483           jet.btag_jetBProbability=pat_jet.bDiscriminator("jetBProbabilityBJetTags");
484           jet.btag_jetProbability=pat_jet.bDiscriminator("jetProbabilityBJetTags");
485  
486 +         const reco::GenJet *genj = pat_jet.genJet();
487 +         if(genj){
488 +           jet.genjet_pt = genj->pt();
489 +           jet.genjet_eta = genj->eta();
490 +           jet.genjet_phi = genj->phi();
491 +           jet.genjet_energy = genj->energy();
492 +         }
493 +
494           jets[j].push_back(jet);
495         }
496       }
# Line 434 | Line 507 | NtupleWriter::analyze(const edm::Event&
507         iEvent.getByLabel(topjet_sources[j], pat_topjets);
508  
509         for (unsigned int i = 0; i < pat_topjets->size(); i++) {
510 +
511           const pat::Jet  pat_topjet =  * dynamic_cast<pat::Jet const *>(&pat_topjets->at(i));
512           if(pat_topjet.pt() < topjet_ptmin) continue;
513           if(fabs(pat_topjet.eta()) > topjet_etamax) continue;
# Line 464 | Line 538 | NtupleWriter::analyze(const edm::Event&
538           jecUnc->setJetEta(pat_topjet.eta());
539           jecUnc->setJetPt(pat_topjet.pt());
540           topjet.JEC_uncertainty = jecUnc->getUncertainty(true);
541 +         topjet.JEC_factor_raw = pat_topjet.jecFactor("Uncorrected");
542  
543           topjet.btag_simpleSecondaryVertexHighEff=pat_topjet.bDiscriminator("simpleSecondaryVertexHighEffBJetTags");
544           topjet.btag_simpleSecondaryVertexHighPur=pat_topjet.bDiscriminator("simpleSecondaryVertexHighPurBJetTags");
# Line 472 | Line 547 | NtupleWriter::analyze(const edm::Event&
547           topjet.btag_jetBProbability=pat_topjet.bDiscriminator("jetBProbabilityBJetTags");
548           topjet.btag_jetProbability=pat_topjet.bDiscriminator("jetProbabilityBJetTags");
549  
550 +         const reco::GenJet *genj = pat_topjet.genJet();
551 +         if(genj){
552 +           topjet.genjet_pt = genj->pt();
553 +           topjet.genjet_eta = genj->eta();
554 +           topjet.genjet_phi = genj->phi();
555 +           topjet.genjet_energy = genj->energy();
556 +         }
557 +
558           for (unsigned int k = 0; k < pat_topjet.numberOfDaughters(); k++) {
559             Particle subjet_v4;
560             subjet_v4.pt = pat_topjet.daughter(k)->p4().pt();
# Line 485 | Line 568 | NtupleWriter::analyze(const edm::Event&
568       }
569     }
570  
571 +
572 +   // ------------- generator top jets -------------
573 +   if(doGenTopJets){
574 +     for(size_t j=0; j< gentopjet_sources.size(); ++j){
575 +      
576 +       gentopjets[j].clear();
577 +
578 +       edm::Handle<reco::BasicJetCollection> reco_gentopjets;
579 +       //edm::Handle<std::vector<reco::Jet> > reco_gentopjets;
580 +       iEvent.getByLabel(gentopjet_sources[j], reco_gentopjets);
581 +
582 +       for (unsigned int i = 0; i < reco_gentopjets->size(); i++) {
583 +        
584 +         const reco::BasicJet  reco_gentopjet =  reco_gentopjets->at(i);
585 +         if(reco_gentopjet.pt() < gentopjet_ptmin) continue;
586 +         if(fabs(reco_gentopjet.eta()) > gentopjet_etamax) continue;
587 +
588 +         TopJet gentopjet;
589 +         gentopjet.charge = reco_gentopjet.charge();
590 +         gentopjet.pt = reco_gentopjet.pt();
591 +         gentopjet.eta = reco_gentopjet.eta();
592 +         gentopjet.phi = reco_gentopjet.phi();
593 +         gentopjet.energy = reco_gentopjet.energy();
594 +         gentopjet.numberOfDaughters =reco_gentopjet.numberOfDaughters();
595 +
596 +         for (unsigned int k = 0; k < reco_gentopjet.numberOfDaughters(); k++) {
597 +           Particle subjet_v4;
598 +           subjet_v4.pt = reco_gentopjet.daughter(k)->p4().pt();
599 +           subjet_v4.eta = reco_gentopjet.daughter(k)->p4().eta();
600 +           subjet_v4.phi = reco_gentopjet.daughter(k)->p4().phi();
601 +           subjet_v4.energy = reco_gentopjet.daughter(k)->p4().E();
602 +           gentopjet.subjets.push_back(subjet_v4);
603 +         }
604 +         gentopjets[j].push_back(gentopjet);
605 +       }
606 +     }
607 +   }
608 +
609     // ------------- photons -------------
610     if(doPhotons){
611       for(size_t j=0; j< photon_sources.size(); ++j){
# Line 576 | Line 697 | NtupleWriter::analyze(const edm::Event&
697           std::pair<int, int> pre=hlt_cfg.prescaleValues(iEvent, iSetup, triggerNames_all[i]);
698           L1_prescale.push_back(pre.first);
699           HLT_prescale.push_back(pre.second);
700 +         //std::cout <<  triggerNames_all[i] << " " << pre.first << " " <<pre.second << "   " << hlt_cfg.prescaleValue(iEvent, iSetup, triggerNames_all[i]) << std::endl;
701         }
702       }
703       //    for(std::map<std::string, bool>::const_iterator iter = triggerResults.begin(); iter!=triggerResults.end(); iter++){
# Line 647 | Line 769 | NtupleWriter::analyze(const edm::Event&
769         index++;
770        
771         //write out only top quarks and status 3 particles (works fine only for MadGraph)
772 <       if(abs(iter->pdgId())==6 || iter->status()==3){
772 >       if(abs(iter->pdgId())==6 || iter->status()==3 || doAllGenParticles){
773           GenParticle genp;
774           genp.charge = iter->charge();;
775           genp.pt = iter->p4().pt();
# Line 665 | Line 787 | NtupleWriter::analyze(const edm::Event&
787          
788           int nm=iter->numberOfMothers();
789           int nd=iter->numberOfDaughters();
790 +
791          
792           if (nm>0) genp.mother1 = iter->motherRef(0).key();
793 <         if (nm>1) genp.mother2 = iter->motherRef(nm-1).key();
793 >         if (nm>1) genp.mother2 = iter->motherRef(1).key();
794           if (nd>0) genp.daughter1 = iter->daughterRef(0).key();
795 <         if (nd>1) genp.daughter2 = iter->daughterRef(nd-1).key();
796 <        
795 >         if (nd>1) genp.daughter2 = iter->daughterRef(1).key();
796 >         //std::cout << genp.index <<"  pdgId = " << genp.pdgId << "  mo1 = " << genp.mother1 << "  mo2 = " << genp.mother2 <<"  da1 = " << genp.daughter1 << "  da2 = " << genp.daughter2 <<std::endl;
797           genps.push_back(genp);
798         }
799       }
800  
801     }
802  
680
803     tr->Fill();
804 <
804 >   if(doLumiInfo)
805 >     previouslumiblockwasfilled=true;
806   }
807  
808  
# Line 687 | Line 810 | NtupleWriter::analyze(const edm::Event&
810   void
811   NtupleWriter::beginJob()
812   {
813 +  if(doLumiInfo){
814 +    totalRecLumi=0;
815 +    totalDelLumi=0;
816 +    previouslumiblockwasfilled=false;
817 +  }
818   }
819  
820   // ------------ method called once each job just after ending the event loop  ------------
# Line 720 | Line 848 | NtupleWriter::beginRun(edm::Run const& i
848   void
849   NtupleWriter::endRun(edm::Run const&, edm::EventSetup const&)
850   {
851 +  if(doLumiInfo)
852 +    std::cout << "total integ. luminosity: " << totalDelLumi <<"(del) " << totalRecLumi << "(rec)" << std::endl;
853   }
854  
855   // ------------ method called when starting to processes a luminosity block  ------------
856   void
857 < NtupleWriter::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&)
857 > NtupleWriter::beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const&)
858   {
859 +  if(doLumiInfo){
860 +    edm::Handle<LumiSummary> l;
861 +    lumi.getByLabel("lumiProducer", l);
862 +    
863 +    //add lumi of lumi blocks without any event to next lumiblock
864 +    if(previouslumiblockwasfilled){
865 +      intgRecLumi=0;
866 +      intgDelLumi=0;
867 +    }
868 +    previouslumiblockwasfilled=false;
869 +    
870 +    if (l.isValid()){;
871 +      intgRecLumi+=l->intgRecLumi()*6.37;
872 +      intgDelLumi+=l->intgDelLumi()*6.37;
873 +      totalRecLumi+=l->intgRecLumi()*6.37;
874 +      totalDelLumi+=l->intgDelLumi()*6.37;
875 +    }
876 +    //std::cout << "this lb: " <<l->intgRecLumi()*6.37 <<"   " << l->intgDelLumi()*6.37<<std::endl;
877 +    //std::cout << "summed:  "<< intgRecLumi << "   " << intgDelLumi << std::endl;
878 +  }
879   }
880  
881   // ------------ method called when ending the processing of a luminosity block  ------------

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines