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.3 by andrey, Sat May 22 00:51:59 2010 UTC vs.
Revision 1.17 by naodell, Mon Oct 25 09:17:02 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$
13 //
14 //
15
6  
7   // system include files
8   #include <memory>
# Line 25 | Line 15
15   #include "FWCore/Framework/interface/EventSetup.h"
16   #include "FWCore/Framework/interface/Event.h"
17   #include "FWCore/Framework/interface/MakerMacros.h"
28
18   #include "FWCore/ParameterSet/interface/ParameterSet.h"
30
19   #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
20   #include "Geometry/Records/interface/CaloGeometryRecord.h"
21 + #include "DataFormats/Math/interface/deltaPhi.h"
22  
23 + // Libraries for objects
24   #include "DataFormats/JetReco/interface/CaloJet.h"
25   #include "DataFormats/JetReco/interface/CaloJetCollection.h"
26   #include "DataFormats/JetReco/interface/PFJet.h"
# Line 40 | 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 "DataFormats/TrackReco/interface/Track.h"
35 + #include "DataFormats/BeamSpot/interface/BeamSpot.h"
36 + //#include "RecoVertex/PrimaryVertexProducer/interface/VertexHigherPtSquared.h"
37 +
38 + //GenParticles
39 + //#include "DataFormats/HepMCCandidate/interface/GenParticle.h"
40 +
41 + // Need to get correctors
42 + #include "JetMETCorrections/Objects/interface/JetCorrector.h"
43 +
44 + // ntuple storage classes
45 + #include "TCJet.h"
46 + #include "TCPrimaryVtx.h"
47  
48   // Need for HLT trigger info:
49   #include "FWCore/Common/interface/TriggerNames.h"
50   #include "DataFormats/Common/interface/TriggerResults.h"
51   #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
48 //
52  
53 + //Root  stuff
54   #include "TROOT.h"
55 + #include "TH1.h"
56 + #include "TH2.h"
57 + #include "TProfile.h"
58   #include "TFile.h"
59   #include "TTree.h"
60   #include "TString.h"
# Line 78 | Line 85 | class MPIntuple : public edm::EDAnalyzer
85        virtual void endJob() ;
86  
87    bool triggerDecision(edm::Handle<edm::TriggerResults> &hltR, int iTrigger);
88 +  double sumPtSquared(const Vertex & v);
89  
90        // ----------member data ---------------------------
91  
92    edm::InputTag PFJetHandle_;
85  edm::InputTag CaloJetHandle_;
86  edm::InputTag PFJetHandle_corr;
87  edm::InputTag CaloJetHandle_corr;
93    edm::InputTag GenJetHandle_;
94    edm::InputTag PrimaryVtxHandle_;
95 <
91 <
95 >  edm::InputTag triggerResultsTag_;
96    //  Counting variables   //
97  
98 <  int eventNumber, runNumber, lumiSection;
98 >  int eventNumber, runNumber, lumiSection, bunchCross;
99  
100 <  TTree *sTree;
100 >  TTree* sTree;
101    TFile* ntupleFile;
102  
103 <  TClonesArray* jetP4_ak5PF;
100 <  TClonesArray* jetP4_ak5PF_corr;
101 <  TClonesArray* jetVtx3_ak5PF;
102 <  TClonesArray* jetVtx3_ak5PF_corr;
103 <  TClonesArray* jetP4_ak5Calo;
104 <  TClonesArray* jetP4_ak5Calo_corr;
105 <  TClonesArray* jetVtx3_ak5Calo;
106 <  TClonesArray* jetVtx3_ak5Calo_corr;
103 >  TClonesArray* jet_ak5PF;
104    TClonesArray* jetP4_ak5Gen;
105 <  TClonesArray* jetVtx3_ak5Gen;
109 <  TClonesArray* PrimaryVtx3;
105 >  TClonesArray* primaryVtx;
106  
107    bool doGenJets_;
112  bool doCaloJets_;
108    bool doPFJets_;
109 <
109 >  bool triggerHLT_;
110 >  bool isRealData;
111    string rootfilename;
112  
113    //Triggers
114 <  std::string hlTriggerResults_;
115 <  edm::TriggerNames triggerNames;
120 <  std::string hltName_;
121 <  std::string  triggerName_;
114 >  string hlTriggerResults_, hltName_, triggerName_;
115 >  TriggerNames triggerNames;
116    HLTConfigProvider hltConfig_;
117 <  edm::InputTag triggerResultsTag_;
118 <  std::vector<std::string>  hlNames;
117 >  vector<string>  hlNames;
118 >  unsigned int triggerStatus;
119 >
120 >  //Histograms
121 >  TH1F * h1_nAssociatedTracks;
122 >  TH1F * h1_trackZ;
123 >  TH1F * h1_trackDxy;
124 >  TH1F * h1_allTrackDeltaZ_PV;
125 >  TH1F * h1_allTrackDeltaZ_LJ;
126 >  TH2F * h2_nAssTracksVsJetPt;
127 >  TProfile * p1_nVtcs;
128 >
129  
130  
131   };
# Line 129 | Line 133 | class MPIntuple : public edm::EDAnalyzer
133   MPIntuple::MPIntuple(const edm::ParameterSet& iConfig):
134  
135    PFJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag")),
132  CaloJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("CaloJetTag")),
133  PFJetHandle_corr(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag_corr")),
134  CaloJetHandle_corr(iConfig.getUntrackedParameter<edm::InputTag>("CaloJetTag_corr")),
136    GenJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag")),
137    PrimaryVtxHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag")),
138    doGenJets_(iConfig.getUntrackedParameter<bool>("doGenJets")),
138  doCaloJets_(iConfig.getUntrackedParameter<bool>("doCaloJets")),
139    doPFJets_(iConfig.getUntrackedParameter<bool>("doPFJets")),
140 +  triggerHLT_(iConfig.getUntrackedParameter<bool>("triggerHLT")),
141    rootfilename(iConfig.getUntrackedParameter<string>("rootfilename")),
142    hlTriggerResults_(iConfig.getUntrackedParameter<string>("HLTriggerResults","TriggerResults")),
143    hltName_(iConfig.getUntrackedParameter<string>("hltName","HLT"))
144   {
144  //edm::TriggerNames
145  // triggerNames(iConfig);
146
145   }
146  
149
147   MPIntuple::~MPIntuple()
148   {
149  
150   }
151  
155
152   //
153   // member functions
154   //
# Line 161 | Line 157 | MPIntuple::~MPIntuple()
157   void MPIntuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
158   {
159  
160 <  eventNumber = iEvent.id().event();
161 <  runNumber   = iEvent.id().run();
160 >
161 >  eventNumber  = iEvent.id().event();
162 >  runNumber    = iEvent.id().run();
163    lumiSection  = (unsigned int)iEvent.getLuminosityBlock().luminosityBlock();
164 +  bunchCross   = (unsigned int)iEvent.bunchCrossing();
165 +  isRealData   = iEvent.isRealData();
166 +
167 +  edm::Handle<reco::BeamSpot> beamSpotHandle;
168 +  iEvent.getByLabel("offlineBeamSpot", beamSpotHandle);
169 +  reco::BeamSpot vertexBeamSpot = *beamSpotHandle;
170 +
171 +  int pfCount   = 0;
172 +  int genCount  = 0;
173 +  int vtxCount  = 0;
174 +  float ljVertexZ = -999;
175 +  float primaryVertexZ = -999;
176 +
177 +  //////////////////////////
178 +  //Get vertex information//
179 +  //////////////////////////
180 +
181 +  Handle<reco::VertexCollection> primaryVtcs;
182 +  iEvent.getByLabel(PrimaryVtxHandle_, primaryVtcs);
183    
184 <  int PFcount = 0;
185 <  int Calocount = 0;
186 <  int PFcount_corr = 0;
187 <  int Calocount_corr = 0;
188 <  int Gencount = 0;
189 <  int Vtxcount = 0;
184 >  for(VertexCollection::const_iterator vtx_iter = primaryVtcs->begin(); vtx_iter!= primaryVtcs->end(); ++vtx_iter){
185 >    
186 >    reco::Vertex myVtx = reco::Vertex(*vtx_iter);
187 >    if(!myVtx.isValid() || myVtx.isFake()) continue;
188 >    TCPrimaryVtx* vtxCon = new ((*primaryVtx)[vtxCount]) TCPrimaryVtx;
189 >      
190 >    vtxCon->SetPosition(myVtx.x(), myVtx.y(), myVtx.z());
191 >    vtxCon->SetNDof(myVtx.ndof());
192 >    vtxCon->SetChi2(myVtx.chi2());
193 >    vtxCon->SetNTrks(myVtx.tracksSize());
194 >    vtxCon->SetSumPt2Trks(sumPtSquared(myVtx));
195  
196 <  if(doPFJets_){
196 >    if(vtxCount == 0) primaryVertexZ = myVtx.z();
197 >
198 >    ++vtxCount;
199      
200 +  }
201 +
202 +  p1_nVtcs->Fill(runNumber, vtxCount);
203 +
204 +  ///////////////////////
205 +  //get jet information//
206 +  ///////////////////////
207 +
208 +  if(doPFJets_){
209 +
210 +    edm::Handle<reco::JetTagCollection> bTagHandle1;
211 +    iEvent.getByLabel("trackCountingHighEffBJetTags", bTagHandle1);
212 +    const reco::JetTagCollection & bTags1 = *(bTagHandle1.product());
213 +    reco::JetTagCollection::const_iterator jet_it_1;
214 +
215 +    edm::Handle<reco::JetTagCollection> bTagHandle2;
216 +    iEvent.getByLabel("trackCountingHighPurBJetTags", bTagHandle2);
217 +    const reco::JetTagCollection & bTags2 = *(bTagHandle2.product());
218 +    reco::JetTagCollection::const_iterator jet_it_2;
219 +
220 +
221 +    const JetCorrector* correctorL2 = JetCorrector::getJetCorrector ("ak5PFL2Relative",iSetup);
222 +    const JetCorrector* correctorL3 = JetCorrector::getJetCorrector ("ak5PFL3Absolute",iSetup);
223 +
224      Handle<reco::PFJetCollection> PFJets;
225      iEvent.getByLabel(PFJetHandle_, PFJets);
226 <    
180 <    PFcount = 0;
181 <    
226 >        
227      for(PFJetCollection::const_iterator jet_iter = PFJets->begin(); jet_iter!= PFJets->end(); ++jet_iter){
228        
229        reco::PFJet myJet = reco::PFJet(*jet_iter);
185      
186      if(myJet.et() > 5){
187        
188        new ((*jetP4_ak5PF)[PFcount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
189        new ((*jetVtx3_ak5PF)[PFcount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
190        
191        ++PFcount;
192      }
193      
194    }
195    
196    
197    PFcount_corr = 0;
198    
199    Handle<reco::PFJetCollection> PFJets_corr;
200    iEvent.getByLabel(PFJetHandle_corr, PFJets_corr);
201    
202    for(PFJetCollection::const_iterator jet_iter = PFJets_corr->begin(); jet_iter!= PFJets_corr->end(); ++jet_iter){
203      
204      reco::PFJet myJet = reco::PFJet(*jet_iter);
205      
206      if(myJet.et() > 5){
207        
208        new ((*jetP4_ak5PF_corr)[PFcount_corr]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
209        new ((*jetVtx3_ak5PF_corr)[PFcount_corr]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
210        
211        ++PFcount_corr;
212      }
213    }
214  }
215  
216  if(doCaloJets_){
217    
218    Calocount = 0;
219    
220    Handle<reco::CaloJetCollection> CaloJets;
221    iEvent.getByLabel(CaloJetHandle_, CaloJets);
222    
223    for(CaloJetCollection::const_iterator jet_iter = CaloJets->begin(); jet_iter!= CaloJets->end(); ++jet_iter){
224      
225      reco::CaloJet myJet = reco::CaloJet(*jet_iter);
226      
227      if(myJet.et() > 5){
228        
229        new ((*jetP4_ak5Calo)[Calocount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
230        new ((*jetVtx3_ak5Calo)[Calocount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
231        
232        ++Calocount;
233        
234      }
235    }
236    
237    Handle<reco::CaloJetCollection> CaloJets_corr;
238    iEvent.getByLabel(CaloJetHandle_corr, CaloJets_corr);
239    
240    Calocount_corr = 0;
241    
242    for(CaloJetCollection::const_iterator jet_iter = CaloJets_corr->begin(); jet_iter!= CaloJets_corr->end(); ++jet_iter){
243      
244      reco::CaloJet myJet = reco::CaloJet(*jet_iter);
245      
230        if(myJet.et() > 5){
231 <        
232 <        new ((*jetP4_ak5Calo_corr)[Calocount_corr]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
233 <        new ((*jetVtx3_ak5Calo_corr)[Calocount_corr]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
234 <        
235 <        ++Calocount_corr;
236 <      }
237 <    }
231 >
232 >        for(jet_it_1 = bTags1.begin(); jet_it_1 != bTags1.end(); jet_it_1++) {
233 >           if( (fabs(jet_it_1->first->eta() - myJet.eta()) < .005) && (deltaPhi(jet_it_1->first->phi(),myJet.phi()) < .005)) break;
234 >        }
235 >
236 >        for(jet_it_2 = bTags2.begin(); jet_it_2 != bTags2.end(); jet_it_2++) {
237 >           if( (fabs(jet_it_2->first->eta() - myJet.eta()) < .005) && (deltaPhi(jet_it_2->first->phi(),myJet.phi()) < .005)) break;
238 >        }
239 >                
240 >        TCJet* jetCon = new ((*jet_ak5PF)[pfCount]) TCJet;
241 >      
242 >        jetCon->SetP4(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
243 >        jetCon->SetVtx(-999.0, -999.0, -999.0);
244 >
245 >        jetCon->SetChHadFrac(myJet.chargedHadronEnergyFraction());
246 >        jetCon->SetNeuHadFrac(myJet.neutralHadronEnergyFraction());
247 >        jetCon->SetChEmFrac(myJet.chargedEmEnergyFraction());
248 >        jetCon->SetNeuEmFrac(myJet.neutralEmEnergyFraction());
249 >
250 >        jetCon->SetNumConstit(myJet.chargedMultiplicity() + myJet.neutralMultiplicity());
251 >        jetCon->SetNumChPart(myJet.chargedMultiplicity());
252 >
253 >        jetCon->SetNumChPart(myJet.chargedMultiplicity());
254 >
255 >        if(jet_it_2 != bTags2.end()) jetCon->SetBDiscrTrkCountHiPure(jet_it_2->second);
256 >        if(jet_it_1 != bTags1.end()) jetCon->SetBDiscrTrkCountHiEff(jet_it_1->second);
257 >
258 >        float scale2 = correctorL2->correction(myJet);
259 >        myJet.scaleEnergy(scale2);
260 >        float scale3 = correctorL3->correction(myJet);
261 >        myJet.scaleEnergy(scale3);
262 >
263 >        //more corrections?
264 >
265 >        jetCon->SetJetCorr(2, scale2);
266 >        jetCon->SetJetCorr(3, scale3);
267 >
268 >        /////////////////////////
269 >        //get associated tracks//
270 >        /////////////////////////
271 >
272 >        const reco::TrackRefVector &tracks = myJet.getTrackRefs();
273 >
274 >        float sumTrackZ, sumTrackIP;
275 >        float meanTrackZ, meanTrackIP;
276 >        int   nAssociatedTracks = -1;
277 >
278 >        sumTrackZ  = sumTrackIP  = 0;
279 >        meanTrackZ = meanTrackIP = -999;
280 >
281 >        if(myJet.pt() > 20 && fabs(myJet.eta()) < 2.4){
282 >
283 >          nAssociatedTracks = 0;
284 >
285 >          for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){
286 >
287 >            const reco::Track& myTrack = **iTrack;
288 >
289 >            sumTrackZ += myTrack.vz();
290 >            sumTrackIP += myTrack.dxy(vertexBeamSpot.position());
291 >            ++nAssociatedTracks;
292 >            
293 >          }
294 >          
295 >          meanTrackZ = sumTrackZ/nAssociatedTracks;
296 >          h1_nAssociatedTracks->Fill(nAssociatedTracks);
297 >          h2_nAssTracksVsJetPt->Fill(myJet.pt(), nAssociatedTracks);
298 >          
299 >          for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){
300 >            
301 >            const reco::Track& myTrack = **iTrack;
302 >            
303 >            h1_trackZ->Fill(meanTrackZ - myTrack.vz());
304 >            h1_trackDxy->Fill(myTrack.dxy(vertexBeamSpot.position()));
305 >            
306 >          }    
307 >          
308 >          if(pfCount == 0){
309 >            
310 >            ljVertexZ = meanTrackZ;
311 >            
312 >          }else{
313 >            
314 >            h1_allTrackDeltaZ_LJ->Fill(ljVertexZ - meanTrackZ);
315 >            
316 >          }
317 >          
318 >          h1_allTrackDeltaZ_PV->Fill(primaryVertexZ - meanTrackZ);
319 >          
320 >        }
321 >        
322 >        jetCon->SetVtx(0, 0, meanTrackZ);      
323 >        
324 >        ++pfCount;
325 >      }      
326 >    }  
327    }
328    
329 <  if(doGenJets_){
329 >  if(!isRealData){
330      
331      Handle<reco::GenJetCollection> GenJets;
332      iEvent.getByLabel(GenJetHandle_, GenJets);
333 <    
261 <    
333 >        
334      for(GenJetCollection::const_iterator jet_iter = GenJets->begin(); jet_iter!= GenJets->end(); ++jet_iter){
335        
336        reco::GenJet myJet = reco::GenJet(*jet_iter);
337        
338 <      if(myJet.et() > 5){
338 >      if(myJet.pt() > 5){
339          
340 <        new ((*jetP4_ak5Gen)[Gencount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
269 <        new ((*jetVtx3_ak5Gen)[Gencount]) TVector3(myJet.vx(), myJet.vy(), myJet.vz());
340 >        new ((*jetP4_ak5Gen)[genCount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
341          
342 <        ++Gencount;
342 >        ++genCount;
343          
344        }
345 <    }
345 >    }    
346    }
347    
348 <  
349 <  Handle<reco::VertexCollection> primaryVtx;
350 <  iEvent.getByLabel(PrimaryVtxHandle_, primaryVtx);
348 >  ///////////////////////////  
349 >  //get trigger information//
350 >  ///////////////////////////
351  
352 <  for(VertexCollection::const_iterator vtx_iter = primaryVtx->begin(); vtx_iter!= primaryVtx->end(); ++vtx_iter){
352 >  if(triggerHLT_){
353 >
354 >    edm::Handle<TriggerResults> hltR;
355 >    triggerResultsTag_ = InputTag(hlTriggerResults_,"",hltName_);
356 >    iEvent.getByLabel(triggerResultsTag_,hltR);
357      
358 <    reco::Vertex myVtx = reco::Vertex(*vtx_iter);
358 >    const TriggerNames & triggerNames = iEvent.triggerNames(*hltR);
359 >    hlNames=triggerNames.triggerNames();
360      
361 <    new ((*PrimaryVtx3)[Vtxcount]) TVector3(myVtx.x(), myVtx.y(), myVtx.z());
361 >    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"};
362      
363 <    ++Vtxcount;
363 >    bool triggerPassed = false;
364 >    triggerStatus = 0x0;
365      
366 <  }
290 <  
291 <  
292 <  if(Calocount > 0 || Calocount_corr >0 || PFcount_corr > 0 || PFcount > 0 || Gencount > 0)  sTree -> Fill();
293 <
294 <  jetP4_ak5PF->Clear();
295 <  jetP4_ak5PF_corr->Clear();
296 <  jetVtx3_ak5PF->Clear();
297 <  jetP4_ak5Calo->Clear();
298 <  jetP4_ak5Calo_corr->Clear();
299 <  jetVtx3_ak5Calo->Clear();
300 <  jetP4_ak5Gen->Clear();
301 <  jetVtx3_ak5Gen->Clear();
302 <  
303 <
304 <
305 <  //----------  Filling HLT trigger bits!  ------------
306 <
307 <  edm::Handle<TriggerResults> hltR;
308 <  triggerResultsTag_ = InputTag(hlTriggerResults_,"",hltName_);
309 <  iEvent.getByLabel(triggerResultsTag_,hltR);
310 <  const edm::TriggerNames & triggerNames = iEvent.triggerNames(*hltR);
311 <  hlNames=triggerNames.triggerNames();
312 <  bool triggerPassed = false;
313 <  
314 <  for (uint iT=0; iT<hlNames.size(); ++iT)
315 <    {
316 <      triggerPassed = triggerDecision(hltR, iT);
317 <
318 < if (hlNames[iT]=="HLT_PixelTracks_Multiplicity70")
319 < {
320 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
321 < //And fill the bit here
322 < }
323 <
324 < if (hlNames[iT]=="HLT_MinBiasBSC_NoBPTX")
325 < {
326 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
327 < //And fill the bit here
328 < }
329 <
330 < if (hlNames[iT]=="HLT_PixelTracks_Multiplicity40")
331 < {
332 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
333 < }
334 < if (hlNames[iT]=="HLT_L1Tech_HCAL_HF")
335 < {
336 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
337 < }
338 < if (hlNames[iT]=="HLT_IsoTrackHB_8E29")
339 < {
340 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
341 < }
342 < if (hlNames[iT]=="HLT_IsoTrackHE_8E29")
343 < {
344 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
345 < }
346 < if (hlNames[iT]=="HLT_L1Tech_RPC_TTU_RBst1_collisions")
347 < {
348 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
349 < }
350 < if (hlNames[iT]=="HLT_L1_BscMinBiasOR_BptxPlusORMinus")
351 < {
352 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
353 < }
354 < if (hlNames[iT]=="HLT_L1Tech_BSC_halo_forPhysicsBackground")
355 < {
356 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
357 < }
358 < if (hlNames[iT]=="HLT_L1Tech_BSC_HighMultiplicity")
359 < {
360 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
361 < }
362 < if (hlNames[iT]=="HLT_MinBiasPixel_DoubleIsoTrack5")
363 < {
364 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
365 < }
366 < if (hlNames[iT]=="HLT_MinBiasPixel_DoubleTrack")
367 < {
368 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
369 < }
370 < if (hlNames[iT]=="HLT_MinBiasPixel_SingleTrack")
371 < {
372 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
373 < }
374 < if (hlNames[iT]=="HLT_ZeroBiasPixel_SingleTrack")
375 < {
376 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
377 < }
378 < if (hlNames[iT]=="HLT_MinBiasBSC")
379 < {
380 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
381 < }
382 < if (hlNames[iT]=="HLT_StoppedHSCP_8E29")
383 < {
384 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
385 < }
386 < if (hlNames[iT]=="HLT_Jet15U_HcalNoiseFiltered")
387 < {
388 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
389 < }
390 < if (hlNames[iT]=="HLT_QuadJet15U")
391 < {
392 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
393 < }
394 < if (hlNames[iT]=="HLT_DiJetAve30U_8E29")
395 < {
396 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
397 < }
398 < if (hlNames[iT]=="HLT_DiJetAve15U_8E29")
399 < {
400 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
401 < }
402 < if (hlNames[iT]=="HLT_FwdJet20U")
403 < {
404 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
405 < }
406 < if (hlNames[iT]=="HLT_Jet50U")
407 < {
408 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
409 < }
410 < if (hlNames[iT]=="HLT_Jet30U")
411 < {
412 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
413 < }
414 < if (hlNames[iT]=="HLT_Jet15U")
415 < {
416 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
417 < }
418 < if (hlNames[iT]=="HLT_BTagMu_Jet10U")
419 < {
420 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
421 < }
422 < if (hlNames[iT]=="HLT_DoubleJet15U_ForwardBackward")
423 < {
424 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
425 < }
426 < if (hlNames[iT]=="HLT_BTagIP_Jet50U")
427 < {
428 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
429 < }
430 < if (hlNames[iT]=="HLT_DoubleLooseIsoTau15")
431 < {
432 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
433 < }
434 < if (hlNames[iT]=="HLT_SingleLooseIsoTau20")
435 < {
436 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
437 < }
438 < if (hlNames[iT]=="HLT_HT100U")
439 < {
440 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
441 < }
442 < if (hlNames[iT]=="HLT_MET100")
443 < {
444 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
445 < }
446 < if (hlNames[iT]=="HLT_MET45")
447 < {
448 <      cout<<"trigger name: "<<hlNames[iT]<<"  status: "<<triggerPassed<<endl;
449 < }
450 <        
366 >    for (uint i=0; i<hlNames.size(); ++i) {
367        
368 <      // ----------->> Fill them Here! <<----------------------
369 <    }
370 <  //----------         ------------------   ---------------  
368 >      triggerPassed = triggerDecision(hltR, i);
369 >      
370 >      if(triggerPassed){
371 >        
372 >        for (uint j = 0; j != 32; ++j){
373 >          
374 >          if (hlNames[i] == MPI_TriggerNames[j])
375 >            {
376 >              //cout<<"trigger name: "<<hlNames[i]<<"list: "<<dec<<j+1<<endl;
377 >              triggerStatus |= 0x01 << j;
378 >              
379 >            }
380 >        }
381 >      }
382 >    }
383 >  }
384 >  //cout<< "total status: "<<hex<<triggerStatus<<endl;
385 >
386  
387 +
388 +  if((pfCount > 3 || genCount > 3) && vtxCount > 0) sTree -> Fill();
389  
390 +  jet_ak5PF->Clear();
391 +  primaryVtx->Clear();
392 +  jetP4_ak5Gen->Clear();
393  
394   }
395  
# Line 463 | Line 399 | void  MPIntuple::beginJob()
399   {
400    
401    ntupleFile           = new TFile(rootfilename.c_str(), "RECREATE");
402 <  sTree                = new TTree("dpsTree", "Tree for Jets");
403 <  
404 <  jetP4_ak5PF          = new TClonesArray("TLorentzVector");
405 <  jetVtx3_ak5PF        = new TClonesArray("TVector3");
406 <  jetP4_ak5Calo        = new TClonesArray("TLorentzVector");
407 <  jetVtx3_ak5Calo      = new TClonesArray("TVector3");
408 <  jetP4_ak5PF_corr     = new TClonesArray("TLorentzVector");
409 <  jetVtx3_ak5PF_corr   = new TClonesArray("TVector3");
410 <  jetP4_ak5Calo_corr   = new TClonesArray("TLorentzVector");
411 <  jetVtx3_ak5Calo_corr = new TClonesArray("TVector3");
402 >  sTree                = new TTree("mpiTree", "Tree for Jets");
403 >
404 >  h1_trackZ            = new TH1F("h1_trackZ", "#Delta z for associated tracks", 60, -0.3, 0.3);
405 >  h1_nAssociatedTracks = new TH1F("h1_nAssociatedTracks", "Number of tracks associated to jet", 20, -0.5, 19.5);
406 >  h1_trackDxy          = new TH1F("h1_trackDxy", "dxy for all associated tracks", 50, -0.4, 0.4);
407 >  h1_allTrackDeltaZ_PV = new TH1F("h1_allTrackDeltaZ_PV", "#Delta z between jet and primary vertex", 60, -0.3, 0.3);
408 >  h1_allTrackDeltaZ_LJ = new TH1F("h1_allTrackDeltaZ_LJ", "#Delta z between leading jet and other jet vertices", 60, -0.3, 0.3);
409 >  h2_nAssTracksVsJetPt = new TH2F("h2_nAssTracksVsJetPt", "nTracks vs Jet p_{T}", 50, 0, 100, 20, -0.5, 19.5);
410 >  p1_nVtcs             = new TProfile("p1_nVtcs", "<N> per run", 5200.0, 132300.0, 137500.0, 0.0, 6.0);
411 >
412 >  jet_ak5PF            = new TClonesArray("TCJet");
413    jetP4_ak5Gen         = new TClonesArray("TLorentzVector");
414 <  jetVtx3_ak5Gen       = new TClonesArray("TVector3");
415 <  PrimaryVtx3          = new TClonesArray("TVector3");
414 >  primaryVtx           = new TClonesArray("TCPrimaryVtx");
415 >
416  
417 <  sTree->Branch("jetP4_ak5PF",&jetP4_ak5PF, 6400, 0);
481 <  sTree->Branch("jetP4_ak5PF_corr",&jetP4_ak5PF_corr, 6400, 0);
482 <  sTree->Branch("jetVtx3_ak5PF",&jetVtx3_ak5PF, 6400, 0);
483 <  sTree->Branch("jetVtx3_ak5PF_corr",&jetVtx3_ak5PF, 6400, 0);
484 <  sTree->Branch("jetP4_ak5Calo",&jetP4_ak5Calo, 6400, 0);
485 <  sTree->Branch("jetP4_ak5Calo_corr",&jetP4_ak5Calo_corr, 6400, 0);
486 <  sTree->Branch("jetVtx3_ak5Calo",&jetVtx3_ak5Calo, 6400, 0);
487 <  sTree->Branch("jetVtx3_ak5Calo_corr",&jetVtx3_ak5Calo, 6400, 0);
417 >  sTree->Branch("jet_ak5PF",&jet_ak5PF, 6400, 0);
418    sTree->Branch("jetP4_ak5Gen",&jetP4_ak5Gen, 6400, 0);
419 <  sTree->Branch("jetVtx3_ak5Gen",&jetVtx3_ak5Gen, 6400, 0);
490 <  sTree->Branch("PrimaryVtx",&PrimaryVtx3, 6400, 0);
419 >  sTree->Branch("primaryVtx",&primaryVtx, 6400, 0);
420  
421    sTree->Branch("eventNumber",&eventNumber, "eventNumber/I");
422    sTree->Branch("runNumber",&runNumber, "runNumber/I");
423    sTree->Branch("lumiSection",&lumiSection, "lumiSection/I");
424 +  sTree->Branch("triggerStatus",&triggerStatus, "triggerStatus/i");
425 +  sTree->Branch("isRealData",&isRealData, "isRealData/i");
426 +  sTree->Branch("bunchCross",&bunchCross, "bunchCross/i");
427  
428   }
429  
430   // ------------ method called once each job just after ending the event loop  ------------
431   void MPIntuple::endJob()
432   {
433 +
434 +  ntupleFile->cd();
435 +
436 +  h1_trackZ->Write();
437 +  h1_nAssociatedTracks->Write();
438 +  h1_trackDxy->Write();
439 +  h1_allTrackDeltaZ_PV->Write();
440 +  h1_allTrackDeltaZ_LJ->Write();
441 +  h2_nAssTracksVsJetPt->Write();
442 +  p1_nVtcs->Write();
443 +
444    ntupleFile->Write();
445    ntupleFile->Close();
446  
# Line 513 | Line 456 | bool MPIntuple::triggerDecision(edm::Han
456        triggerPassed = true;
457      }
458      return triggerPassed;
459 <  }
459 > }
460 >
461 > double MPIntuple::sumPtSquared(const Vertex & v)
462 > {
463 >  double sum = 0.;
464 >  double pT;
465 >  for (Vertex::trackRef_iterator it = v.tracks_begin(); it != v.tracks_end(); it++) {
466 >    pT = (**it).pt();
467 >    double epT=(**it).ptError(); pT=pT>epT ? pT-epT : 0;
468  
469 +    sum += pT*pT;
470 +  }
471 +  return sum;
472 + }
473  
474   //define this as a plug-in
475   DEFINE_FWK_MODULE(MPIntuple);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines