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

Comparing UserCode/MPIAnalyzer/src/MPIntuple.cc (file contents):
Revision 1.1 by naodell, Fri May 21 18:20:49 2010 UTC vs.
Revision 1.13 by naodell, Fri Jul 23 12:45:32 2010 UTC

# Line 1 | Line 1
1 /*
2 Description: <one line class summary>
3
4 Implementation:
5     n-tuple creator for jet studies
6 */
7 //
1   // Original Author:  "Nathaniel Odell"
2   // Secondary Author: Steven Won
3 + // With contributions from: Andrey Pozdnyakov
4   //         Created:  Thurs April 22  2010
5   // $Id$
12 //
13 //
14
6  
7   // system include files
8   #include <memory>
# Line 24 | Line 15
15   #include "FWCore/Framework/interface/EventSetup.h"
16   #include "FWCore/Framework/interface/Event.h"
17   #include "FWCore/Framework/interface/MakerMacros.h"
27
18   #include "FWCore/ParameterSet/interface/ParameterSet.h"
29
19   #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
20   #include "Geometry/Records/interface/CaloGeometryRecord.h"
21 + #include "DataFormats/Math/interface/deltaPhi.h"
22  
23 + // Jet and vertex functions
24   #include "DataFormats/JetReco/interface/CaloJet.h"
25   #include "DataFormats/JetReco/interface/CaloJetCollection.h"
26   #include "DataFormats/JetReco/interface/PFJet.h"
# Line 39 | Line 30
30   #include "DataFormats/JetReco/interface/Jet.h"
31   #include "DataFormats/VertexReco/interface/Vertex.h"
32   #include "DataFormats/VertexReco/interface/VertexFwd.h"
33 + #include "DataFormats/BTauReco/interface/JetTag.h"
34 + //#include "RecoVertex/PrimaryVertexProducer/interface/VertexHigherPtSquared.h"
35  
36 + //GenParticles
37 + //#include "DataFormats/HepMCCandidate/interface/GenParticle.h"
38 +
39 + // Need to get correctors
40 + #include "JetMETCorrections/Objects/interface/JetCorrector.h"
41 +
42 + // ntuple storage classes
43 + #include "TCJet.h"
44 + #include "TCPrimaryVtx.h"
45 +
46 + // Need for HLT trigger info:
47 + #include "FWCore/Common/interface/TriggerNames.h"
48 + #include "DataFormats/Common/interface/TriggerResults.h"
49 + #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
50 +
51 + //Root  stuff
52   #include "TROOT.h"
53   #include "TFile.h"
54   #include "TTree.h"
# Line 70 | Line 79 | class MPIntuple : public edm::EDAnalyzer
79        virtual void analyze(const edm::Event&, const edm::EventSetup&);
80        virtual void endJob() ;
81  
82 +  bool triggerDecision(edm::Handle<edm::TriggerResults> &hltR, int iTrigger);
83 +  double sumPtSquared(const Vertex & v);
84 +
85        // ----------member data ---------------------------
86  
87    edm::InputTag PFJetHandle_;
76  edm::InputTag CaloJetHandle_;
77  edm::InputTag PFJetHandle_corr;
78  edm::InputTag CaloJetHandle_corr;
88    edm::InputTag GenJetHandle_;
89    edm::InputTag PrimaryVtxHandle_;
90 <
82 <
90 >  edm::InputTag triggerResultsTag_;
91    //  Counting variables   //
92  
93 <  int eventNumber, runNumber, lumiSection;
93 >  int eventNumber, runNumber, lumiSection, bunchCross;
94  
95 <  TTree *sTree;
95 >  TTree* sTree;
96    TFile* ntupleFile;
97  
98 <  TClonesArray* jetP4_ak5PF;
91 <  TClonesArray* jetP4_ak5PF_corr;
92 <  TClonesArray* jetVtx3_ak5PF;
93 <  TClonesArray* jetVtx3_ak5PF_corr;
94 <  TClonesArray* jetP4_ak5Calo;
95 <  TClonesArray* jetP4_ak5Calo_corr;
96 <  TClonesArray* jetVtx3_ak5Calo;
97 <  TClonesArray* jetVtx3_ak5Calo_corr;
98 >  TClonesArray* jet_ak5PF;
99    TClonesArray* jetP4_ak5Gen;
100 <  TClonesArray* jetVtx3_ak5Gen;
100 <  TClonesArray* PrimaryVtx3;
100 >  TClonesArray* primaryVtx;
101  
102    bool doGenJets_;
103  bool doCaloJets_;
103    bool doPFJets_;
104 <
104 >  bool triggerHLT_;
105 >  bool isRealData;
106    string rootfilename;
107  
108 +  //Triggers
109 +  string hlTriggerResults_, hltName_, triggerName_;
110 +  TriggerNames triggerNames;
111 +  HLTConfigProvider hltConfig_;
112 +  vector<string>  hlNames;
113 +  unsigned int triggerStatus;
114 +
115 +
116   };
117  
118   MPIntuple::MPIntuple(const edm::ParameterSet& iConfig):
119  
120    PFJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag")),
113  CaloJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("CaloJetTag")),
114  PFJetHandle_corr(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag_corr")),
115  CaloJetHandle_corr(iConfig.getUntrackedParameter<edm::InputTag>("CaloJetTag_corr")),
121    GenJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag")),
122    PrimaryVtxHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag")),
123    doGenJets_(iConfig.getUntrackedParameter<bool>("doGenJets")),
119  doCaloJets_(iConfig.getUntrackedParameter<bool>("doCaloJets")),
124    doPFJets_(iConfig.getUntrackedParameter<bool>("doPFJets")),
125 <  rootfilename(iConfig.getUntrackedParameter<string>("rootfilename"))
126 <
125 >  triggerHLT_(iConfig.getUntrackedParameter<bool>("triggerHLT")),
126 >  rootfilename(iConfig.getUntrackedParameter<string>("rootfilename")),
127 >  hlTriggerResults_(iConfig.getUntrackedParameter<string>("HLTriggerResults","TriggerResults")),
128 >  hltName_(iConfig.getUntrackedParameter<string>("hltName","HLT"))
129   {
130  
131 +
132   }
133  
134  
# Line 130 | Line 137 | MPIntuple::~MPIntuple()
137  
138   }
139  
140 + double MPIntuple::sumPtSquared(const Vertex & v)
141 + {
142 +  double sum = 0.;
143 +  double pT;
144 +  for (Vertex::trackRef_iterator it = v.tracks_begin(); it != v.tracks_end(); it++) {
145 +    pT = (**it).pt();
146 +    double epT=(**it).ptError(); pT=pT>epT ? pT-epT : 0;
147 +
148 +    sum += pT*pT;
149 +  }
150 +  return sum;
151 + }
152  
153   //
154   // member functions
# Line 139 | Line 158 | MPIntuple::~MPIntuple()
158   void MPIntuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
159   {
160  
161 <  eventNumber = iEvent.id().event();
162 <  runNumber   = iEvent.id().run();
161 >  eventNumber  = iEvent.id().event();
162 >  runNumber    = iEvent.id().run();
163    lumiSection  = (unsigned int)iEvent.getLuminosityBlock().luminosityBlock();
164 <  
165 <  int PFcount = 0;
166 <  int Calocount = 0;
167 <  int PFcount_corr = 0;
168 <  int Calocount_corr = 0;
169 <  int Gencount = 0;
151 <  int Vtxcount = 0;
164 >  bunchCross   = (unsigned int)iEvent.bunchCrossing();
165 >  isRealData   = iEvent.isRealData();
166 >
167 >  int PFcount   = 0;
168 >  int Gencount  = 0;
169 >  int Vtxcount  = 0;
170  
171    if(doPFJets_){
172 <    
172 >
173 >    edm::Handle<reco::JetTagCollection> bTagHandle1;
174 >    iEvent.getByLabel("trackCountingHighEffBJetTags", bTagHandle1);
175 >    const reco::JetTagCollection & bTags1 = *(bTagHandle1.product());
176 >    reco::JetTagCollection::const_iterator jet_it_1;
177 >
178 >    edm::Handle<reco::JetTagCollection> bTagHandle2;
179 >    iEvent.getByLabel("trackCountingHighPurBJetTags", bTagHandle2);
180 >    const reco::JetTagCollection & bTags2 = *(bTagHandle2.product());
181 >    reco::JetTagCollection::const_iterator jet_it_2;
182 >
183 >    const JetCorrector* correctorL2 = JetCorrector::getJetCorrector ("ak5PFL2Relative",iSetup);
184 >    const JetCorrector* correctorL3 = JetCorrector::getJetCorrector ("ak5PFL3Absolute",iSetup);
185 >
186      Handle<reco::PFJetCollection> PFJets;
187      iEvent.getByLabel(PFJetHandle_, PFJets);
188      
# Line 160 | Line 191 | void MPIntuple::analyze(const edm::Event
191      for(PFJetCollection::const_iterator jet_iter = PFJets->begin(); jet_iter!= PFJets->end(); ++jet_iter){
192        
193        reco::PFJet myJet = reco::PFJet(*jet_iter);
194 <      
195 <      if(myJet.et() > 5){
196 <        
197 <        new ((*jetP4_ak5PF)[PFcount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
167 <        new ((*jetVtx3_ak5PF)[PFcount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
168 <        
169 <        ++PFcount;
170 <      }
171 <      
172 <    }
173 <    
174 <    
175 <    PFcount_corr = 0;
176 <    
177 <    Handle<reco::PFJetCollection> PFJets_corr;
178 <    iEvent.getByLabel(PFJetHandle_corr, PFJets_corr);
179 <    
180 <    for(PFJetCollection::const_iterator jet_iter = PFJets_corr->begin(); jet_iter!= PFJets_corr->end(); ++jet_iter){
181 <      
182 <      reco::PFJet myJet = reco::PFJet(*jet_iter);
183 <      
184 <      if(myJet.et() > 5){
185 <        
186 <        new ((*jetP4_ak5PF_corr)[PFcount_corr]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
187 <        new ((*jetVtx3_ak5PF_corr)[PFcount_corr]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
188 <        
189 <        ++PFcount_corr;
190 <      }
191 <    }
192 <  }
193 <  
194 <  if(doCaloJets_){
195 <    
196 <    Calocount = 0;
197 <    
198 <    Handle<reco::CaloJetCollection> CaloJets;
199 <    iEvent.getByLabel(CaloJetHandle_, CaloJets);
200 <    
201 <    for(CaloJetCollection::const_iterator jet_iter = CaloJets->begin(); jet_iter!= CaloJets->end(); ++jet_iter){
202 <      
203 <      reco::CaloJet myJet = reco::CaloJet(*jet_iter);
204 <      
194 >
195 > //      float scale2 = correctorL2->correction(myJet);
196 > //      float scale3 = correctorL3->correction(myJet);
197 >
198        if(myJet.et() > 5){
199 <        
200 <        new ((*jetP4_ak5Calo)[Calocount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
201 <        new ((*jetVtx3_ak5Calo)[Calocount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
202 <        
203 <        ++Calocount;
204 <        
205 <      }
206 <    }
207 <    
208 <    Handle<reco::CaloJetCollection> CaloJets_corr;
216 <    iEvent.getByLabel(CaloJetHandle_corr, CaloJets_corr);
217 <    
218 <    Calocount_corr = 0;
219 <    
220 <    for(CaloJetCollection::const_iterator jet_iter = CaloJets_corr->begin(); jet_iter!= CaloJets_corr->end(); ++jet_iter){
221 <      
222 <      reco::CaloJet myJet = reco::CaloJet(*jet_iter);
199 >
200 >        for(jet_it_1 = bTags1.begin(); jet_it_1 != bTags1.end(); jet_it_1++) {
201 >           if( (fabs(jet_it_1->first->eta() - myJet.eta()) < .005) && (deltaPhi(jet_it_1->first->phi(),myJet.phi()) < .005)) break;
202 >        }
203 >
204 >        for(jet_it_2 = bTags2.begin(); jet_it_2 != bTags2.end(); jet_it_2++) {
205 >           if( (fabs(jet_it_2->first->eta() - myJet.eta()) < .005) && (deltaPhi(jet_it_2->first->phi(),myJet.phi()) < .005)) break;
206 >        }
207 >                
208 >        TCJet* jetCon = new ((*jet_ak5PF)[PFcount]) TCJet;
209        
210 <      if(myJet.et() > 5){
211 <        
212 <        new ((*jetP4_ak5Calo_corr)[Calocount_corr]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
213 <        new ((*jetVtx3_ak5Calo_corr)[Calocount_corr]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
214 <        
215 <        ++Calocount_corr;
216 <      }
217 <    }
210 >        jetCon->SetP4(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
211 >        jetCon->SetVtx(myJet.vx(), myJet.vy(), myJet.vz());
212 >
213 >        jetCon->SetChHadFrac(myJet.chargedHadronEnergyFraction());
214 >        jetCon->SetNeuHadFrac(myJet.neutralHadronEnergyFraction());
215 >        jetCon->SetChEmFrac(myJet.chargedEmEnergyFraction());
216 >        jetCon->SetNeuEmFrac(myJet.neutralEmEnergyFraction());
217 >
218 >        jetCon->SetNumConstit(myJet.chargedMultiplicity() + myJet.neutralMultiplicity());
219 >        jetCon->SetNumChPart(myJet.chargedMultiplicity());
220 >
221 >        jetCon->SetNumChPart(myJet.chargedMultiplicity());
222 >
223 >        if(jet_it_2 != bTags2.end()) jetCon->SetBDiscrTrkCountHiPure(jet_it_2->second);
224 >        if(jet_it_1 != bTags1.end()) jetCon->SetBDiscrTrkCountHiEff(jet_it_1->second);
225 >
226 >        float scale2 = correctorL2->correction(myJet);
227 >        myJet.scaleEnergy(scale2);
228 >        float scale3 = correctorL3->correction(myJet);
229 >        myJet.scaleEnergy(scale3);
230 >
231 >        //more corrections?
232 >
233 >        jetCon->SetJetCorr(2, scale2);
234 >        jetCon->SetJetCorr(3, scale3);
235 >
236 >        ++PFcount;
237 >      }      
238 >    }  
239    }
240    
241 <  if(doGenJets_){
241 >  if(!isRealData){
242      
243 +
244      Handle<reco::GenJetCollection> GenJets;
245      iEvent.getByLabel(GenJetHandle_, GenJets);
246      
# Line 241 | Line 249 | void MPIntuple::analyze(const edm::Event
249        
250        reco::GenJet myJet = reco::GenJet(*jet_iter);
251        
252 <      if(myJet.et() > 5){
252 >      if(myJet.pt() > 5){
253          
254          new ((*jetP4_ak5Gen)[Gencount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
247        new ((*jetVtx3_ak5Gen)[Gencount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
255          
256          ++Gencount;
257          
258        }
259 <    }
259 >    }    
260    }
261    
262    
263 <  Handle<reco::VertexCollection> primaryVtx;
264 <  iEvent.getByLabel(PrimaryVtxHandle_, primaryVtx);
265 <
266 <  for(VertexCollection::const_iterator vtx_iter = primaryVtx->begin(); vtx_iter!= primaryVtx->end(); ++vtx_iter){
263 >  Handle<reco::VertexCollection> primaryVtcs;
264 >  iEvent.getByLabel(PrimaryVtxHandle_, primaryVtcs);
265 >  
266 >  for(VertexCollection::const_iterator vtx_iter = primaryVtcs->begin(); vtx_iter!= primaryVtcs->end(); ++vtx_iter){
267      
268      reco::Vertex myVtx = reco::Vertex(*vtx_iter);
269 +    if(!myVtx.isValid() || myVtx.isFake()) continue;
270 +    TCPrimaryVtx* vtxCon = new ((*primaryVtx)[Vtxcount]) TCPrimaryVtx;
271 +      
272 +    vtxCon->SetPosition(myVtx.x(), myVtx.y(), myVtx.z());
273 +    vtxCon->SetNDof(myVtx.ndof());
274 +    vtxCon->SetChi2(myVtx.chi2());
275 +    vtxCon->SetNTrks(myVtx.tracksSize());
276 +    vtxCon->SetSumPt2Trks(sumPtSquared(myVtx));
277 +    ++Vtxcount;
278      
279 <    new ((*PrimaryVtx3)[Vtxcount]) TVector3(myVtx.x(), myVtx.y(), myVtx.z());
279 >  }
280 >
281 >
282 >  if(triggerHLT_){
283 >
284 >    //----------  Filling HLT trigger bits!  ------------
285 >
286 >    edm::Handle<TriggerResults> hltR;
287 >    triggerResultsTag_ = InputTag(hlTriggerResults_,"",hltName_);
288 >    iEvent.getByLabel(triggerResultsTag_,hltR);
289      
290 <    ++Vtxcount;
290 >    const TriggerNames & triggerNames = iEvent.triggerNames(*hltR);
291 >    hlNames=triggerNames.triggerNames();
292 >    
293 >    string MPI_TriggerNames[] = {"HLT_PixelTracks_Multiplicity70", "HLT_MinBiasBSC_NoBPTX", "HLT_PixelTracks_Multiplicity40","HLT_L1Tech_HCAL_HF", "HLT_IsoTrackHB_8E29", "HLT_IsoTrackHE_8E29", "HLT_L1Tech_RPC_TTU_RBst1_collisions", "HLT_L1_BscMinBiasOR_BptxPlusORMinus", "HLT_L1Tech_BSC_halo_forPhysicsBackground", "HLT_L1Tech_BSC_HighMultiplicity", "HLT_MinBiasPixel_DoubleIsoTrack5", "HLT_MinBiasPixel_DoubleTrack", "HLT_MinBiasPixel_SingleTrack", "HLT_ZeroBiasPixel_SingleTrack", "HLT_MinBiasBSC", "HLT_StoppedHSCP_8E29", "HLT_Jet15U_HcalNoiseFiltered", "HLT_QuadJet15U", "HLT_DiJetAve30U_8E29", "HLT_DiJetAve15U_8E29", "HLT_FwdJet20U", "HLT_Jet50U", "HLT_Jet30U", "HLT_Jet15U", "HLT_BTagMu_Jet10U", "HLT_DoubleJet15U_ForwardBackward", "HLT_BTagIP_Jet50U", "HLT_DoubleLooseIsoTau15", "HLT_SingleLooseIsoTau20", "HLT_HT100U", "HLT_MET100", "HLT_MET45"};
294      
295 +    bool triggerPassed = false;
296 +    triggerStatus = 0x0;
297 +    
298 +    for (uint i=0; i<hlNames.size(); ++i) {
299 +      
300 +      triggerPassed = triggerDecision(hltR, i);
301 +      
302 +      if(triggerPassed){
303 +        
304 +        for (uint j = 0; j != 32; ++j){
305 +          
306 +          if (hlNames[i] == MPI_TriggerNames[j])
307 +            {
308 +              //            cout<<"trigger name: "<<hlNames[i]<<"list: "<<dec<<j+1<<endl;
309 +              triggerStatus |= 0x01 << j;
310 +              
311 +            }
312 +        }
313 +      }
314 +    }
315    }
316 +  //  cout<< "total status: "<<hex<<triggerStatus<<endl;
317    
318 +  if((PFcount > 3 || Gencount > 3) && Vtxcount > 0)  sTree -> Fill();
319    
320 <  if(Calocount > 0 || Calocount_corr >0 || PFcount_corr > 0 || PFcount > 0 || Gencount > 0)  sTree -> Fill();
321 <
272 <  jetP4_ak5PF->Clear();
273 <  jetP4_ak5PF_corr->Clear();
274 <  jetVtx3_ak5PF->Clear();
275 <  jetP4_ak5Calo->Clear();
276 <  jetP4_ak5Calo_corr->Clear();
277 <  jetVtx3_ak5Calo->Clear();
320 >  jet_ak5PF->Clear();
321 >  primaryVtx->Clear();
322    jetP4_ak5Gen->Clear();
323 <  jetVtx3_ak5Gen->Clear();
280 <  
323 >
324   }
325  
326  
# Line 286 | Line 329 | void  MPIntuple::beginJob()
329   {
330    
331    ntupleFile           = new TFile(rootfilename.c_str(), "RECREATE");
332 <  sTree                = new TTree("dpsTree", "Tree for Jets");
332 >  sTree                = new TTree("mpiTree", "Tree for Jets");
333    
334 <  jetP4_ak5PF          = new TClonesArray("TLorentzVector");
292 <  jetVtx3_ak5PF        = new TClonesArray("TVector3");
293 <  jetP4_ak5Calo        = new TClonesArray("TLorentzVector");
294 <  jetVtx3_ak5Calo      = new TClonesArray("TVector3");
295 <  jetP4_ak5PF_corr     = new TClonesArray("TLorentzVector");
296 <  jetVtx3_ak5PF_corr   = new TClonesArray("TVector3");
297 <  jetP4_ak5Calo_corr   = new TClonesArray("TLorentzVector");
298 <  jetVtx3_ak5Calo_corr = new TClonesArray("TVector3");
334 >  jet_ak5PF            = new TClonesArray("TCJet");
335    jetP4_ak5Gen         = new TClonesArray("TLorentzVector");
336 <  jetVtx3_ak5Gen       = new TClonesArray("TVector3");
301 <  PrimaryVtx3          = new TClonesArray("TVector3");
336 >  primaryVtx           = new TClonesArray("TCPrimaryVtx");
337  
338 <  sTree->Branch("jetP4_ak5PF",&jetP4_ak5PF, 6400, 0);
304 <  sTree->Branch("jetP4_ak5PF_corr",&jetP4_ak5PF_corr, 6400, 0);
305 <  sTree->Branch("jetVtx3_ak5PF",&jetVtx3_ak5PF, 6400, 0);
306 <  sTree->Branch("jetVtx3_ak5PF_corr",&jetVtx3_ak5PF, 6400, 0);
307 <  sTree->Branch("jetP4_ak5Calo",&jetP4_ak5Calo, 6400, 0);
308 <  sTree->Branch("jetP4_ak5Calo_corr",&jetP4_ak5Calo_corr, 6400, 0);
309 <  sTree->Branch("jetVtx3_ak5Calo",&jetVtx3_ak5Calo, 6400, 0);
310 <  sTree->Branch("jetVtx3_ak5Calo_corr",&jetVtx3_ak5Calo, 6400, 0);
338 >  sTree->Branch("jet_ak5PF",&jet_ak5PF, 6400, 0);
339    sTree->Branch("jetP4_ak5Gen",&jetP4_ak5Gen, 6400, 0);
340 <  sTree->Branch("jetVtx3_ak5Gen",&jetVtx3_ak5Gen, 6400, 0);
313 <  sTree->Branch("PrimaryVtx",&PrimaryVtx3, 6400, 0);
340 >  sTree->Branch("primaryVtx",&primaryVtx, 6400, 0);
341  
342    sTree->Branch("eventNumber",&eventNumber, "eventNumber/I");
343    sTree->Branch("runNumber",&runNumber, "runNumber/I");
344    sTree->Branch("lumiSection",&lumiSection, "lumiSection/I");
345 +  sTree->Branch("triggerStatus",&triggerStatus, "triggerStatus/i");
346 +  sTree->Branch("isRealData",&isRealData, "isRealData/i");
347 +  sTree->Branch("bunchCross",&bunchCross, "bunchCross/i");
348  
349   }
350  
# Line 327 | Line 357 | void MPIntuple::endJob()
357   }
358  
359  
360 + bool MPIntuple::triggerDecision(edm::Handle<edm::TriggerResults> &hltR, int iTrigger)
361 + {
362 +    bool triggerPassed = false;
363 +    if(hltR->wasrun(iTrigger) &&
364 +       hltR->accept(iTrigger) &&
365 +       !hltR->error(iTrigger) ){
366 +      triggerPassed = true;
367 +    }
368 +    return triggerPassed;
369 +  }
370 +
371 +
372   //define this as a plug-in
373   DEFINE_FWK_MODULE(MPIntuple);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines