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.4 by peiffer, Mon Apr 2 15:10:03 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");
62  
63    // initialization of tree variables
64  
# Line 63 | 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 103 | 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 125 | Line 142 | NtupleWriter::NtupleWriter(const edm::Pa
142      tr->Branch("genInfo","GenInfo",&genInfo);
143      tr->Branch("GenParticles","std::vector<GenParticle>", &genps);
144    }
145 <
146 <  trigger_prefixes = iConfig.getParameter<std::vector<std::string> >("trigger_prefixes");
147 <  //tr->Branch("triggerResults","std::map<std::string, bool>",&triggerResults);
148 <  tr->Branch("triggerNames", "std::vector<std::string>", &triggerNames);  
149 <  tr->Branch("triggerResults", "std::vector<bool>", &triggerResults);
150 <  tr->Branch("L1_prescale", "std::vector<int>", &L1_prescale);
151 <  tr->Branch("HLT_prescale", "std::vector<int>", &HLT_prescale);
152 <
145 >  if(doTrigger){
146 >    trigger_prefixes = iConfig.getParameter<std::vector<std::string> >("trigger_prefixes");
147 >    //tr->Branch("triggerResults","std::map<std::string, bool>",&triggerResults);
148 >    tr->Branch("triggerNames", "std::vector<std::string>", &triggerNames);  
149 >    tr->Branch("triggerResults", "std::vector<bool>", &triggerResults);
150 >    tr->Branch("L1_prescale", "std::vector<int>", &L1_prescale);
151 >    tr->Branch("HLT_prescale", "std::vector<int>", &HLT_prescale);
152 >  }
153    newrun = true;
154   }
155  
# Line 171 | Line 188 | NtupleWriter::analyze(const edm::Event&
188     }
189     else HBHENoiseFilterResult = false;
190  
191 +   // ------------- primary vertices and beamspot  -------------
192 +
193 +   if(doPV){
194 +     for(size_t j=0; j< pv_sources.size(); ++j){
195 +       pvs[j].clear();
196 +      
197 +       edm::Handle< std::vector<reco::Vertex> > pv_handle;
198 +       iEvent.getByLabel(pv_sources[j], pv_handle);
199 +       const std::vector<reco::Vertex>& reco_pvs = *(pv_handle.product());
200 +      
201 +       for (unsigned int i = 0; i <  reco_pvs.size(); ++i) {
202 +         reco::Vertex reco_pv = reco_pvs[i];
203 +
204 +         PrimaryVertex pv;
205 +         pv.x =  reco_pv.x();
206 +         pv.y =  reco_pv.y();
207 +         pv.z =  reco_pv.z();
208 +         pv.nTracks =  reco_pv.nTracks();
209 +         //pv.isValid =  reco_pv.isValid();
210 +         pv.chi2 =  reco_pv.chi2();
211 +         pv.ndof =  reco_pv.ndof();      
212 +
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 +   }
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 198 | 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();
265 +         ele.gsfTrack_py= pat_ele.gsfTrack()->py();
266 +         ele.gsfTrack_pz= pat_ele.gsfTrack()->pz();
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         }
# Line 231 | 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 261 | 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 269 | 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 314 | 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 364 | Line 470 | NtupleWriter::analyze(const edm::Event&
470             jet.electronMultiplicity =pat_jet.electronMultiplicity();
471             jet.photonMultiplicity =pat_jet.photonMultiplicity();
472           }
473 +
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");
481           jet.btag_combinedSecondaryVertex=pat_jet.bDiscriminator("combinedSecondaryVertexBJetTags");
# Line 371 | 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 387 | 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 414 | Line 535 | NtupleWriter::analyze(const edm::Event&
535   //       topjet.electronMultiplicity =pat_topjet.electronMultiplicity();
536   //       topjet.photonMultiplicity =pat_topjet.photonMultiplicity();
537  
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");
545           topjet.btag_combinedSecondaryVertex=pat_topjet.bDiscriminator("combinedSecondaryVertexBJetTags");
# Line 421 | 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 434 | 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 487 | Line 659 | NtupleWriter::analyze(const edm::Event&
659     }
660  
661     // ------------- trigger -------------
662 <  
663 <   edm::InputTag triggerEvent = edm::InputTag("hltTriggerSummaryAOD");
664 <   edm::Handle< trigger::TriggerEvent > dummy_TriggerEvent;
665 <   iEvent.getByLabel( edm::InputTag(triggerEvent.label(), triggerEvent.instance()), dummy_TriggerEvent );
666 <  
667 <   const edm::Provenance *meta = dummy_TriggerEvent.provenance();
668 <   std::string nameProcess = meta->processName();
669 <   edm::InputTag triggerResultTag = edm::InputTag("TriggerResults");
670 <   triggerResultTag = edm::InputTag( triggerResultTag.label(), triggerResultTag.instance(), nameProcess );
671 <  
672 <   edm::Handle<edm::TriggerResults> trigger;
673 <   iEvent.getByLabel(triggerResultTag, trigger);
674 <   const edm::TriggerResults& trig = *(trigger.product());
675 <  
676 <   triggerResults.clear();
677 <   triggerNames.clear();
678 <   L1_prescale.clear();
679 <   HLT_prescale.clear();
680 <
681 <   edm::Service<edm::service::TriggerNamesService> tns;
682 <   std::vector<std::string> triggerNames_all;
683 <   tns->getTrigPaths(trig,triggerNames_all);
684 <
685 <   if (trig.size()!=triggerNames_all.size()) std::cout <<"ERROR: length of names and paths not the same: "<<triggerNames_all.size()<<","<<trig.size()<< std::endl;
686 <   for(unsigned int i=0; i<trig.size(); ++i){
687 <     std::vector<std::string>::const_iterator it = trigger_prefixes.begin();
688 <     for(; it!=trigger_prefixes.end(); ++it){
689 <       if(triggerNames_all[i].substr(0, it->size()) == *it)break;
690 <     }
691 <     if(it==trigger_prefixes.end()) continue;
692 <
693 <     //triggerResults.insert(std::pair<std::string, bool>(triggerNames[i],trig.accept(i)));
694 <     triggerResults.push_back(trig.accept(i));
695 <     if(newrun) triggerNames.push_back(triggerNames_all[i]);
696 <     if(isRealData){
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 <     }
701 <   }
702 < //    for(std::map<std::string, bool>::const_iterator iter = triggerResults.begin(); iter!=triggerResults.end(); iter++){
703 < //      std::cout << (*iter).first << "   " << (*iter).second << std::endl;
704 < //    }
705 <   newrun=false;
662 >   if(doTrigger){
663 >     edm::InputTag triggerEvent = edm::InputTag("hltTriggerSummaryAOD");
664 >     edm::Handle< trigger::TriggerEvent > dummy_TriggerEvent;
665 >     iEvent.getByLabel( edm::InputTag(triggerEvent.label(), triggerEvent.instance()), dummy_TriggerEvent );
666 >    
667 >     const edm::Provenance *meta = dummy_TriggerEvent.provenance();
668 >     std::string nameProcess = meta->processName();
669 >     edm::InputTag triggerResultTag = edm::InputTag("TriggerResults");
670 >     triggerResultTag = edm::InputTag( triggerResultTag.label(), triggerResultTag.instance(), nameProcess );
671 >    
672 >     edm::Handle<edm::TriggerResults> trigger;
673 >     iEvent.getByLabel(triggerResultTag, trigger);
674 >     const edm::TriggerResults& trig = *(trigger.product());
675 >    
676 >     triggerResults.clear();
677 >     triggerNames.clear();
678 >     L1_prescale.clear();
679 >     HLT_prescale.clear();
680 >    
681 >     edm::Service<edm::service::TriggerNamesService> tns;
682 >     std::vector<std::string> triggerNames_all;
683 >     tns->getTrigPaths(trig,triggerNames_all);
684 >    
685 >     if (trig.size()!=triggerNames_all.size()) std::cout <<"ERROR: length of names and paths not the same: "<<triggerNames_all.size()<<","<<trig.size()<< std::endl;
686 >     for(unsigned int i=0; i<trig.size(); ++i){
687 >       std::vector<std::string>::const_iterator it = trigger_prefixes.begin();
688 >       for(; it!=trigger_prefixes.end(); ++it){
689 >         if(triggerNames_all[i].substr(0, it->size()) == *it)break;
690 >       }
691 >       if(it==trigger_prefixes.end()) continue;
692 >      
693 >       //triggerResults.insert(std::pair<std::string, bool>(triggerNames[i],trig.accept(i)));
694 >       triggerResults.push_back(trig.accept(i));
695 >       if(newrun) triggerNames.push_back(triggerNames_all[i]);
696 >       if(isRealData){
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++){
704 >     //      std::cout << (*iter).first << "   " << (*iter).second << std::endl;
705 >     //    }
706 >     newrun=false;
707 >   }
708  
709     // ------------- generator info -------------
710    
# Line 595 | 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 613 | 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  
628   // ------------- primary vertices and beamspot  -------------
629
630   if(doPV){
631     for(size_t j=0; j< pv_sources.size(); ++j){
632       pvs[j].clear();
633      
634       edm::Handle< std::vector<reco::Vertex> > pv_handle;
635       iEvent.getByLabel(pv_sources[j], pv_handle);
636       const std::vector<reco::Vertex>& reco_pvs = *(pv_handle.product());
637      
638       for (unsigned int i = 0; i <  reco_pvs.size(); ++i) {
639         reco::Vertex reco_pv = reco_pvs[i];
640
641         PrimaryVertex pv;
642         pv.x =  reco_pv.x();
643         pv.y =  reco_pv.y();
644         pv.z =  reco_pv.z();
645         pv.nTracks =  reco_pv.nTracks();
646         //pv.isValid =  reco_pv.isValid();
647         pv.chi2 =  reco_pv.chi2();
648         pv.ndof =  reco_pv.ndof();      
649
650         pvs[j].push_back(pv);
651       }
652     }
653   }
654  
655   edm::Handle<reco::BeamSpot> beamSpot;
656   iEvent.getByLabel(edm::InputTag("offlineBeamSpot"), beamSpot);
657   const reco::BeamSpot & bsp = *beamSpot;
658  
659   beamspot_x0 = bsp.x0();
660   beamspot_y0 = bsp.y0();
661   beamspot_z0 = bsp.z0();
662
803     tr->Fill();
804 <
804 >   if(doLumiInfo)
805 >     previouslumiblockwasfilled=true;
806   }
807  
808  
# Line 669 | 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 684 | Line 830 | NtupleWriter::endJob()
830   void
831   NtupleWriter::beginRun(edm::Run const& iRun, edm::EventSetup const&  iSetup)
832   {
833 <  bool setup_changed = false;
834 <  hlt_cfg.init(iRun, iSetup, "HLT", setup_changed);
835 <  newrun=true;
833 >  if(doTrigger){
834 >    bool setup_changed = false;
835 >    hlt_cfg.init(iRun, iSetup, "HLT", setup_changed);
836 >    newrun=true;
837 >  }
838 >
839 >  if(doJets || doTopJets){
840 >    edm::ESHandle<JetCorrectorParametersCollection> JetCorParColl;
841 >    iSetup.get<JetCorrectionsRecord>().get("AK5PF",JetCorParColl);
842 >    JetCorrectorParameters const & JetCorPar = (*JetCorParColl)["Uncertainty"];
843 >    jecUnc = new JetCorrectionUncertainty(JetCorPar);
844 >  }
845   }
846  
847   // ------------ method called when ending the processing of a run  ------------
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