ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Jeng/PVStudy/plugins/LhcTrackAnalyzer.cc
Revision: 1.1
Committed: Thu Oct 8 14:57:59 2009 UTC (15 years, 7 months ago) by yygao
Content type: text/plain
Branch: MAIN
CVS Tags: PASPlot_27Feb2010, CMSSW_3_3_6_patch3_Dec19thReReco, V00-01-01, V00-01-00, CMSSW_3_1_2_PileUp_v2, CMSSW_3_1_2_PileUp_v1, V00-00-00, CMSSW_3_1_2_20091015, CMSSW_3_1_2_Yanyan
Branch point for: CMSSW_3_1_2_RecoVtxMatch
Log Message:
Add simple track paramter analyzer (not used in pvtx study)

File Contents

# User Rev Content
1 yygao 1.1 // -*- C++ -*-
2     //
3     // Package: LhcTrackAnalyzer
4     // Class: LhcTrackAnalyzer
5     //
6     /**\class LhcTrackAnalyzer LhcTrackAnalyzer.cc MySub/LhcTrackAnalyzer/src/LhcTrackAnalyzer.cc
7    
8     Description: <one line class summary>
9    
10     Implementation:
11     <Notes on implementation>
12     */
13     //
14    
15     // updated to 25/2/2009 5.30 pm
16    
17     //
18     //
19    
20     // system include files
21     #include <memory>
22    
23    
24     // user include files
25     #include "UserCode/PVStudy/interface/LhcTrackAnalyzer.h"
26     #include "FWCore/Framework/interface/Frameworkfwd.h"
27     #include "FWCore/Framework/interface/EDAnalyzer.h"
28    
29     #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
30     #include "FWCore/Framework/interface/Event.h"
31     #include <FWCore/Framework/interface/ESHandle.h>
32     #include "FWCore/Framework/interface/MakerMacros.h"
33    
34     #include "FWCore/ParameterSet/interface/ParameterSet.h"
35    
36    
37     #include <SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h>
38     #include <SimDataFormats/TrackingHit/interface/PSimHit.h>
39    
40     #include "TH1F.h"
41     #include "TH2F.h"
42     #include "TFile.h"
43     #include "TROOT.h"
44     #include "TChain.h"
45     #include "TNtuple.h"
46     #include "FWCore/ServiceRegistry/interface/Service.h"
47     #include "PhysicsTools/UtilAlgos/interface/TFileService.h"
48     #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
49     #include <Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h>
50     #include <DataFormats/GeometrySurface/interface/Surface.h>
51     #include <DataFormats/GeometrySurface/interface/GloballyPositioned.h>
52     #include <Geometry/CommonDetUnit/interface/GeomDet.h>
53     #include "MagneticField/Engine/interface/MagneticField.h"
54     #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
55    
56     #include "DataFormats/TrackReco/interface/Track.h"
57     #include "DataFormats/TrackReco/interface/TrackFwd.h"
58    
59     // Constructor
60    
61     LhcTrackAnalyzer::LhcTrackAnalyzer(const edm::ParameterSet& iConfig)
62    
63     {
64     //now do what ever initialization is needed
65     debug_ = iConfig.getParameter<bool> ("Debug");
66     TrackCollectionTag_ = iConfig.getParameter<edm::InputTag>("TrackCollectionTag");
67     filename_ = iConfig.getParameter<std::string>("OutputFileName");
68     }
69    
70     // Destructor
71     LhcTrackAnalyzer::~LhcTrackAnalyzer()
72     {
73    
74     // do anything here that needs to be done at desctruction time
75     // (e.g. close files, deallocate resources etc.)
76    
77     }
78    
79    
80     //
81     // member functions
82     //
83    
84     // ------------ method called to for each event ------------
85     void
86     LhcTrackAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
87     {
88     using namespace edm;
89     using namespace reco;
90     using namespace std;
91    
92     //=======================================================
93     // Initialize Root-tuple variables
94     //=======================================================
95    
96     SetVarToZero();
97    
98     //=======================================================
99     // Retrieve the Track information
100     //=======================================================
101    
102     Handle< TrackCollection> trackCollectionHandle;
103     iEvent.getByLabel(TrackCollectionTag_, trackCollectionHandle);
104    
105     if(debug_)
106     cout<<"LhcTrackAnalyzer::analyze() looping over "<< trackCollectionHandle->size()<< "tracks." << endl;
107     unsigned int i = 0;
108     for(TrackCollection::const_iterator track = trackCollectionHandle->begin(); track!= trackCollectionHandle->end(); ++track, ++i)
109     {
110     if ( nTracks_ >= nMaxtracks_ ) {
111     std::cout << " LhcTrackAnalyzer::analyze() : Warning - Number of tracks: " << nTracks_ << " , greater than " << nMaxtracks_ << std::endl;
112     continue;
113     }
114     pt_[nTracks_] = track->pt();
115     eta_[nTracks_] = track->eta();
116     phi_[nTracks_] = track->phi();
117     chi2_[nTracks_] = track->chi2();
118     chi2ndof_[nTracks_] = track->normalizedChi2();
119     charge_[nTracks_] = track->charge();
120     qoverp_[nTracks_] = track->qoverp();
121     dz_[nTracks_] = track->dz();
122     dxy_[nTracks_] = track->dxy();
123     xPCA_[nTracks_] = track->vertex().x();
124     yPCA_[nTracks_] = track->vertex().y();
125     zPCA_[nTracks_] = track->vertex().z();
126     ++nTracks_;
127    
128     if(debug_)
129     cout<< "Track "<<i<<" : pT = "<<track->pt()<<endl;
130     }
131     rootTree_->Fill();
132     }
133    
134    
135     // ------------ method called once each job before begining the event loop ------------
136     void LhcTrackAnalyzer::beginJob(const edm::EventSetup&)
137     {
138     edm::LogInfo("beginJob") << "Begin Job" << std::endl;
139     // Define TTree for output
140     rootFile_ = new TFile(filename_.c_str(),"recreate");
141     rootTree_ = new TTree("tree","Lhc Track tree");
142    
143     // Track Paramters
144     rootTree_->Branch("nTracks",&nTracks_,"nTracks/I");
145     rootTree_->Branch("pt",&pt_,"pt[nTracks]/D");
146     rootTree_->Branch("eta",&eta_,"eta[nTracks]/D");
147     rootTree_->Branch("phi",&phi_,"phi[nTracks]/D");
148     rootTree_->Branch("chi2",&chi2_,"chi2[nTracks]/D");
149     rootTree_->Branch("chi2ndof",&chi2ndof_,"chi2ndof[nTracks]/D");
150     rootTree_->Branch("charge",&charge_,"charge[nTracks]/I");
151     rootTree_->Branch("qoverp",&qoverp_,"qoverp[nTracks]/D");
152     rootTree_->Branch("dz",&dz_,"dz[nTracks]/D");
153     rootTree_->Branch("dxy",&dxy_,"dxy[nTracks]/D");
154     rootTree_->Branch("xPCA",&xPCA_,"xPCA[nTracks]/D");
155     rootTree_->Branch("yPCA",&yPCA_,"yPCA[nTracks]/D");
156     rootTree_->Branch("zPCA",&zPCA_,"zPCA[nTracks]/D");
157    
158     }
159    
160     // ------------ method called once each job just after ending the event loop ------------
161     void LhcTrackAnalyzer::endJob()
162     {
163     if ( rootFile_ ) {
164     rootFile_->Write();
165     rootFile_->Close();
166     }
167    
168    
169    
170     }
171    
172     void LhcTrackAnalyzer::SetVarToZero() {
173    
174     nTracks_ = 0;
175     for ( int i=0; i<nMaxtracks_; ++i ) {
176     pt_[i] = 0;
177     eta_[i] = 0;
178     phi_[i] = 0;
179     chi2_[i] = 0;
180     chi2ndof_[i] = 0;
181     charge_[i] = 0;
182     qoverp_[i] = 0;
183     dz_[i] = 0;
184     dxy_[i] = 0;
185     xPCA_[i] = 0;
186     yPCA_[i] = 0;
187     zPCA_[i] = 0;
188     }
189    
190    
191     }
192    
193     //define this as a plug-in
194     //DEFINE_FWK_MODULE(LhcTrackAnalyzer);