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.14 by naodell, Tue Oct 5 21:27:59 2010 UTC vs.
Revision 1.22 by naodell, Fri Nov 5 13:47:05 2010 UTC

# Line 20 | Line 20
20   #include "Geometry/Records/interface/CaloGeometryRecord.h"
21   #include "DataFormats/Math/interface/deltaPhi.h"
22  
23 < // Jet and vertex functions
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 31 | Line 31
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 "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
37 +
38   //#include "RecoVertex/PrimaryVertexProducer/interface/VertexHigherPtSquared.h"
39  
40   //GenParticles
# Line 50 | Line 54
54  
55   //Root  stuff
56   #include "TROOT.h"
57 + #include "TH1.h"
58 + #include "TH2.h"
59 + #include "TProfile.h"
60   #include "TFile.h"
61   #include "TTree.h"
62   #include "TString.h"
# Line 91 | Line 98 | class MPIntuple : public edm::EDAnalyzer
98    //  Counting variables   //
99  
100    int eventNumber, runNumber, lumiSection, bunchCross;
101 <
101 >  double ptHat, qScale;
102 >  
103    TTree* sTree;
104    TFile* ntupleFile;
105  
# Line 112 | Line 120 | class MPIntuple : public edm::EDAnalyzer
120    vector<string>  hlNames;
121    unsigned int triggerStatus;
122  
123 +  //Histograms
124 +  TH1F * h1_nAssociatedTracks;
125 +  TH1F * h1_trackZ;
126 +  TH1F * h1_trackDxy;
127 +  TH1F * h1_allTrackDeltaZ_PV;
128 +  TH1F * h1_allTrackDeltaZ_LJ;
129 +  TH2F * h2_nAssTracksVsJetPt;
130 +  TProfile * p1_nVtcs;
131  
116 };
132  
133 < MPIntuple::MPIntuple(const edm::ParameterSet& iConfig):
133 > };
134  
135 <  PFJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag")),
121 <  GenJetHandle_(iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag")),
122 <  PrimaryVtxHandle_(iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag")),
123 <  doGenJets_(iConfig.getUntrackedParameter<bool>("doGenJets")),
124 <  doPFJets_(iConfig.getUntrackedParameter<bool>("doPFJets")),
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"))
135 > MPIntuple::MPIntuple(const edm::ParameterSet& iConfig)
136   {
137 <
138 <
137 >  PFJetHandle_ = iConfig.getUntrackedParameter<edm::InputTag>("PFJetTag");
138 >  GenJetHandle_ = iConfig.getUntrackedParameter<edm::InputTag>("GenJetTag");
139 >  PrimaryVtxHandle_ = iConfig.getUntrackedParameter<edm::InputTag>("PrimaryVtxTag");
140 >  doGenJets_ = iConfig.getUntrackedParameter<bool>("doGenJets");
141 >  doPFJets_ = iConfig.getUntrackedParameter<bool>("doPFJets");
142 >  triggerHLT_ = iConfig.getUntrackedParameter<bool>("triggerHLT");
143 >  rootfilename = iConfig.getUntrackedParameter<string>("rootfilename");
144 >  hlTriggerResults_ = iConfig.getUntrackedParameter<string>("HLTriggerResults","TriggerResults");
145 >  hltName_ = iConfig.getUntrackedParameter<string>("hltName","HLT");
146   }
147  
134
148   MPIntuple::~MPIntuple()
149   {
150  
151   }
152  
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
155   //
# Line 158 | Line 158 | double MPIntuple::sumPtSquared(const Ver
158   void MPIntuple::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
159   {
160  
161
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 <  int PFcount   = 0;
168 <  int Gencount  = 0;
169 <  int Vtxcount  = 0;
167 >
168 >  edm::Handle<reco::BeamSpot> beamSpotHandle;
169 >  iEvent.getByLabel("offlineBeamSpot", beamSpotHandle);
170 >  reco::BeamSpot vertexBeamSpot = *beamSpotHandle;
171 >
172 >  int pfCount   = 0;
173 >  int genCount  = 0;
174 >  int vtxCount  = 0;
175 >  float ljVertexZ = -999;
176 >  float primaryVertexZ = -999;
177 >
178 >  //////////////////////////
179 >  //Get vertex information//
180 >  //////////////////////////
181 >
182 >  Handle<reco::VertexCollection> primaryVtcs;
183 >  iEvent.getByLabel(PrimaryVtxHandle_, primaryVtcs);
184 >  
185 >  for(VertexCollection::const_iterator vtx_iter = primaryVtcs->begin(); vtx_iter!= primaryVtcs->end(); ++vtx_iter){
186 >    
187 >    reco::Vertex myVtx = reco::Vertex(*vtx_iter);
188 >    if(!myVtx.isValid() || myVtx.isFake()) continue;
189 >    TCPrimaryVtx* vtxCon = new ((*primaryVtx)[vtxCount]) TCPrimaryVtx;
190 >      
191 >    vtxCon->SetPosition(myVtx.x(), myVtx.y(), myVtx.z());
192 >    vtxCon->SetNDof(myVtx.ndof());
193 >    vtxCon->SetChi2(myVtx.chi2());
194 >    vtxCon->SetNTrks(myVtx.tracksSize());
195 >    vtxCon->SetSumPt2Trks(sumPtSquared(myVtx));
196 >
197 >    if(vtxCount == 0) primaryVertexZ = myVtx.z();
198 >
199 >    ++vtxCount;
200 >    
201 >  }
202 >
203 >  p1_nVtcs->Fill(runNumber, vtxCount);
204 >
205 >  ///////////////////////
206 >  //get jet information//
207 >  ///////////////////////
208  
209    if(doPFJets_){
210  
# Line 187 | Line 224 | void MPIntuple::analyze(const edm::Event
224  
225      Handle<reco::PFJetCollection> PFJets;
226      iEvent.getByLabel(PFJetHandle_, PFJets);
227 <    
191 <    PFcount = 0;
192 <    
227 >        
228      for(PFJetCollection::const_iterator jet_iter = PFJets->begin(); jet_iter!= PFJets->end(); ++jet_iter){
229        
230        reco::PFJet myJet = reco::PFJet(*jet_iter);
231 <      if(myJet.et() > 5){
231 >      if(myJet.pt() > 5){
232  
233          for(jet_it_1 = bTags1.begin(); jet_it_1 != bTags1.end(); jet_it_1++) {
234             if( (fabs(jet_it_1->first->eta() - myJet.eta()) < .005) && (deltaPhi(jet_it_1->first->phi(),myJet.phi()) < .005)) break;
# Line 203 | Line 238 | void MPIntuple::analyze(const edm::Event
238             if( (fabs(jet_it_2->first->eta() - myJet.eta()) < .005) && (deltaPhi(jet_it_2->first->phi(),myJet.phi()) < .005)) break;
239          }
240                  
241 <        TCJet* jetCon = new ((*jet_ak5PF)[PFcount]) TCJet;
241 >        TCJet* jetCon = new ((*jet_ak5PF)[pfCount]) TCJet;
242        
243          jetCon->SetP4(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
244 <        jetCon->SetVtx(myJet.vx(), myJet.vy(), myJet.vz());
244 >        jetCon->SetVtx(-999.0, -999.0, -999.0);
245  
246          jetCon->SetChHadFrac(myJet.chargedHadronEnergyFraction());
247          jetCon->SetNeuHadFrac(myJet.neutralHadronEnergyFraction());
# Line 231 | Line 266 | void MPIntuple::analyze(const edm::Event
266          jetCon->SetJetCorr(2, scale2);
267          jetCon->SetJetCorr(3, scale3);
268  
269 <        ++PFcount;
269 >        /////////////////////////
270 >        //get associated tracks//
271 >        /////////////////////////
272 >
273 >        const reco::TrackRefVector &tracks = myJet.getTrackRefs();
274 >
275 >        float sumTrackZ, sumTrackIP;
276 >        float meanTrackZ, meanTrackIP;
277 >        int   nAssociatedTracks = -1;
278 >
279 >        sumTrackZ  = sumTrackIP  = 0;
280 >        meanTrackZ = meanTrackIP = -999;
281 >
282 >        if(myJet.pt() > 20 && fabs(myJet.eta()) < 2.4){
283 >
284 >          nAssociatedTracks = 0;
285 >
286 >          for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){
287 >
288 >            const reco::Track    &myJetTrack = **iTrack;
289 >            //const reco::TrackRef &myTrackRef = *iTrack;
290 >
291 >            sumTrackZ += myJetTrack.vz();
292 >            sumTrackIP += myJetTrack.dxy(vertexBeamSpot.position());
293 >            ++nAssociatedTracks;
294 >
295 >            for(VertexCollection::const_iterator vtx_iter = primaryVtcs->begin(); vtx_iter!= primaryVtcs->end(); ++vtx_iter){
296 >              
297 >              reco::Vertex myVtx = reco::Vertex(*vtx_iter);
298 >              if(!myVtx.isValid() || myVtx.isFake()) continue;
299 >              
300 >              for(Vertex::trackRef_iterator iTrackRef = myVtx.tracks_begin(); iTrackRef != myVtx.tracks_end(); ++iTrackRef){
301 >
302 >                const edm::RefToBase<reco::Track> &myTrackRef = *iTrackRef;
303 >
304 >                if(myTrackRef.isAvailable()){
305 >
306 >                  const reco::Track &myVertexTrack = *myTrackRef.get();
307 >                                
308 >                
309 >                }
310 >              }      
311 >            }              
312 >          }
313 >          
314 >          meanTrackZ = sumTrackZ/nAssociatedTracks;
315 >          h1_nAssociatedTracks->Fill(nAssociatedTracks);
316 >          h2_nAssTracksVsJetPt->Fill(myJet.pt(), nAssociatedTracks);
317 >          
318 >          for(TrackRefVector::const_iterator iTrack = tracks.begin(); iTrack != tracks.end(); ++iTrack){
319 >            
320 >            const reco::Track &myJetTrack = **iTrack;
321 >            
322 >            if(nAssociatedTracks == 3) h1_trackZ->Fill(meanTrackZ - myJetTrack.vz());
323 >            h1_trackDxy->Fill(myJetTrack.dxy(vertexBeamSpot.position()));
324 >            
325 >          }    
326 >          
327 >          if(pfCount == 0){
328 >            
329 >            ljVertexZ = meanTrackZ;
330 >            
331 >          }else{
332 >            
333 >            h1_allTrackDeltaZ_LJ->Fill(ljVertexZ - meanTrackZ);
334 >            
335 >          }
336 >          
337 >          h1_allTrackDeltaZ_PV->Fill(primaryVertexZ - meanTrackZ);
338 >          
339 >        }
340 >        
341 >        jetCon->SetVtx(0, 0, meanTrackZ);      
342 >        
343 >        ++pfCount;
344        }      
345      }  
346    }
347    
348    if(!isRealData){
349      
350 +    Handle<GenEventInfoProduct> GenInfoHandle;
351 +    iEvent.getByLabel("generator", GenInfoHandle);
352  
353      Handle<reco::GenJetCollection> GenJets;
354      iEvent.getByLabel(GenJetHandle_, GenJets);
355 <    
356 <    
355 >
356 >    ptHat = qScale = -1;
357 >
358 >    if(GenInfoHandle.isValid()){
359 >
360 >      qScale = GenInfoHandle->qScale();
361 >      ptHat  = (GenInfoHandle->hasBinningValues() ? GenInfoHandle->binningValues()[0] : 0.0);
362 >
363 >    }
364 >        
365      for(GenJetCollection::const_iterator jet_iter = GenJets->begin(); jet_iter!= GenJets->end(); ++jet_iter){
366        
367        reco::GenJet myJet = reco::GenJet(*jet_iter);
368        
369        if(myJet.pt() > 5){
370          
371 <        new ((*jetP4_ak5Gen)[Gencount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
371 >        new ((*jetP4_ak5Gen)[genCount]) TLorentzVector(myJet.px(), myJet.py(), myJet.pz(), myJet.energy());
372          
373 <        ++Gencount;
373 >        ++genCount;
374          
375        }
376      }    
377    }
378    
379 <  
380 <  Handle<reco::VertexCollection> primaryVtcs;
381 <  iEvent.getByLabel(PrimaryVtxHandle_, primaryVtcs);
263 <  
264 <  for(VertexCollection::const_iterator vtx_iter = primaryVtcs->begin(); vtx_iter!= primaryVtcs->end(); ++vtx_iter){
265 <    
266 <    reco::Vertex myVtx = reco::Vertex(*vtx_iter);
267 <    if(!myVtx.isValid() || myVtx.isFake()) continue;
268 <    TCPrimaryVtx* vtxCon = new ((*primaryVtx)[Vtxcount]) TCPrimaryVtx;
269 <      
270 <    vtxCon->SetPosition(myVtx.x(), myVtx.y(), myVtx.z());
271 <    vtxCon->SetNDof(myVtx.ndof());
272 <    vtxCon->SetChi2(myVtx.chi2());
273 <    vtxCon->SetNTrks(myVtx.tracksSize());
274 <    vtxCon->SetSumPt2Trks(sumPtSquared(myVtx));
275 <    ++Vtxcount;
276 <    
277 <  }
278 <
379 >  ///////////////////////////  
380 >  //get trigger information//
381 >  ///////////////////////////
382  
383    if(triggerHLT_){
384  
282    //----------  Filling HLT trigger bits!  ------------
283
385      edm::Handle<TriggerResults> hltR;
386      triggerResultsTag_ = InputTag(hlTriggerResults_,"",hltName_);
387      iEvent.getByLabel(triggerResultsTag_,hltR);
# Line 303 | Line 404 | void MPIntuple::analyze(const edm::Event
404            
405            if (hlNames[i] == MPI_TriggerNames[j])
406              {
407 <              //            cout<<"trigger name: "<<hlNames[i]<<"list: "<<dec<<j+1<<endl;
407 >              //cout<<"trigger name: "<<hlNames[i]<<"list: "<<dec<<j+1<<endl;
408                triggerStatus |= 0x01 << j;
409                
410              }
# Line 311 | Line 412 | void MPIntuple::analyze(const edm::Event
412        }
413      }
414    }
415 <  //  cout<< "total status: "<<hex<<triggerStatus<<endl;
416 <
415 >  //cout<< "total status: "<<hex<<triggerStatus<<endl;
416 >
417  
418  
419 <  if((PFcount > 3 || Gencount > 3) && Vtxcount > 0)  sTree -> Fill();
420 <  
419 >  if((pfCount > 3 || genCount > 3) && vtxCount > 0) sTree -> Fill();
420 >
421    jet_ak5PF->Clear();
422    primaryVtx->Clear();
423    jetP4_ak5Gen->Clear();
# Line 330 | Line 431 | void  MPIntuple::beginJob()
431    
432    ntupleFile           = new TFile(rootfilename.c_str(), "RECREATE");
433    sTree                = new TTree("mpiTree", "Tree for Jets");
434 <  
434 >
435 >  h1_trackZ            = new TH1F("h1_trackZ", "#Delta z for associated tracks", 60, -0.3, 0.3);
436 >  h1_nAssociatedTracks = new TH1F("h1_nAssociatedTracks", "Number of tracks associated to jet", 20, -0.5, 19.5);
437 >  h1_trackDxy          = new TH1F("h1_trackDxy", "dxy for all associated tracks", 50, -0.4, 0.4);
438 >  h1_allTrackDeltaZ_PV = new TH1F("h1_allTrackDeltaZ_PV", "#Delta z between jet and primary vertex", 60, -0.3, 0.3);
439 >  h1_allTrackDeltaZ_LJ = new TH1F("h1_allTrackDeltaZ_LJ", "#Delta z between leading jet and other jet vertices", 60, -0.3, 0.3);
440 >  h2_nAssTracksVsJetPt = new TH2F("h2_nAssTracksVsJetPt", "nTracks vs Jet p_{T}", 50, 0, 100, 20, -0.5, 19.5);
441 >  p1_nVtcs             = new TProfile("p1_nVtcs", "<N> per run", 5200.0, 132300.0, 137500.0, 0.0, 6.0);
442 >
443    jet_ak5PF            = new TClonesArray("TCJet");
444    jetP4_ak5Gen         = new TClonesArray("TLorentzVector");
445    primaryVtx           = new TClonesArray("TCPrimaryVtx");
446  
447 +
448    sTree->Branch("jet_ak5PF",&jet_ak5PF, 6400, 0);
449    sTree->Branch("jetP4_ak5Gen",&jetP4_ak5Gen, 6400, 0);
450    sTree->Branch("primaryVtx",&primaryVtx, 6400, 0);
# Line 345 | Line 455 | void  MPIntuple::beginJob()
455    sTree->Branch("triggerStatus",&triggerStatus, "triggerStatus/i");
456    sTree->Branch("isRealData",&isRealData, "isRealData/i");
457    sTree->Branch("bunchCross",&bunchCross, "bunchCross/i");
458 +  sTree->Branch("ptHat",&ptHat, "ptHat/d");
459  
460   }
461  
462   // ------------ method called once each job just after ending the event loop  ------------
463   void MPIntuple::endJob()
464   {
465 +
466 +  ntupleFile->cd();
467 +
468 +  h1_trackZ->Write();
469 +  h1_nAssociatedTracks->Write();
470 +  h1_trackDxy->Write();
471 +  h1_allTrackDeltaZ_PV->Write();
472 +  h1_allTrackDeltaZ_LJ->Write();
473 +  h2_nAssTracksVsJetPt->Write();
474 +  p1_nVtcs->Write();
475 +
476    ntupleFile->Write();
477    ntupleFile->Close();
478  
# Line 366 | Line 488 | bool MPIntuple::triggerDecision(edm::Han
488        triggerPassed = true;
489      }
490      return triggerPassed;
491 <  }
491 > }
492 >
493 > double MPIntuple::sumPtSquared(const Vertex & v)
494 > {
495 >  double sum = 0.;
496 >  double pT;
497 >  for (Vertex::trackRef_iterator it = v.tracks_begin(); it != v.tracks_end(); it++) {
498 >    pT = (**it).pt();
499 >    double epT=(**it).ptError(); pT=pT>epT ? pT-epT : 0;
500  
501 +    sum += pT*pT;
502 +  }
503 +  return sum;
504 + }
505  
506   //define this as a plug-in
507   DEFINE_FWK_MODULE(MPIntuple);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines