ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/LJMet/Tracking/Cosmics/src/LayerEff.cc
Revision: 1.1
Committed: Tue Jul 6 19:33:58 2010 UTC (14 years, 10 months ago) by msegala
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Error occurred while calculating annotation data.
Log Message:
*** empty log message ***

File Contents

# Content
1 // -*- C++ -*-
2 //
3 // Package: LayerEff
4 // Class: LayerEff
5 //
6 /**\class LayerEff LayerEff.cc TrackingAnalysis/Cosmics/src/LayerEff.cc
7
8 Description: <one line class summary>
9
10 Implementation:
11 <Notes on implementation>
12 */
13 //
14 // Original Author: "Keith Ulmer"
15 // Created: Fri Mar 20 03:16:50 CDT 2009
16 // $Id: LayerEff.cc,v 1.2 2009/06/22 19:44:44 kaulmer Exp $
17 //
18 //
19
20
21 // system include files
22 #include <memory>
23
24 // user include files
25 #include "FWCore/Framework/interface/Frameworkfwd.h"
26 #include "FWCore/Framework/interface/EDAnalyzer.h"
27 #include "FWCore/ServiceRegistry/interface/Service.h"
28 #include "CommonTools/UtilAlgos/interface/TFileService.h"
29
30
31 #include "DataFormats/Common/interface/Handle.h"
32 #include "FWCore/Framework/interface/ESHandle.h"
33 #include "CalibTracker/Records/interface/SiStripQualityRcd.h"
34 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
35 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
36
37 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
38 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
39 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
40 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
41 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHitBuilder.h"
42 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
43 #include "TrackingTools/Records/interface/TransientRecHitRecord.h"
44 #include "TrackingAnalysis/Cosmics/interface/TrajectoryAtValidHit.h"
45 #include "TrackingTools/PatternTools/interface/Trajectory.h"
46
47 #include "FWCore/Framework/interface/Event.h"
48 #include "FWCore/Framework/interface/MakerMacros.h"
49
50 #include "FWCore/ParameterSet/interface/ParameterSet.h"
51
52 #include "DataFormats/TrackReco/interface/Track.h"
53 #include "DataFormats/TrackReco/interface/TrackFwd.h"
54 #include "DataFormats/TrackReco/interface/TrackExtra.h"
55
56 #include "TFile.h"
57 #include "TTree.h"
58 //
59 // class decleration
60 //
61
62 class LayerEff : public edm::EDAnalyzer {
63 public:
64 explicit LayerEff(const edm::ParameterSet&);
65 ~LayerEff();
66
67
68 private:
69 virtual void beginJob(const edm::EventSetup&) ;
70 virtual void analyze(const edm::Event&, const edm::EventSetup&);
71 virtual void endJob() ;
72
73 // ----------member data ---------------------------
74 edm::ParameterSet config_;
75 edm::InputTag trackTag_;
76 TTree* rootTree_;
77 uint layer_;
78 uint valid_;
79 uint module_;
80 uint qualBad_;
81 float TrajGlbX, TrajGlbY, TrajGlbZ;
82 float TrajLocX, TrajLocY, TrajLocErrX, TrajLocErrY, TrajLocAngleX, TrajLocAngleY;
83 };
84
85 //
86 // constants, enums and typedefs
87 //
88
89 //
90 // static data member definitions
91 //
92
93 //
94 // constructors and destructor
95 //
96 LayerEff::LayerEff(const edm::ParameterSet& iConfig) :
97 config_(iConfig), rootTree_(0)
98 {
99 //now do what ever initialization is needed
100 trackTag_ = iConfig.getParameter<edm::InputTag>("tracks");
101 }
102
103
104 LayerEff::~LayerEff()
105 {
106
107 // do anything here that needs to be done at desctruction time
108 // (e.g. close files, deallocate resources etc.)
109
110 }
111
112
113 //
114 // member functions
115 //
116
117 // ------------ method called to for each event ------------
118 void
119 LayerEff::analyze(const edm::Event& e, const edm::EventSetup& es)
120 {
121 using namespace edm;
122 using namespace std;
123
124 // edm::ParameterSet config_;
125
126 //Combinatorial Tracks
127 Handle<reco::TrackCollection> trackCollectionCKF;
128 edm::InputTag TkTagCKF = config_.getParameter<edm::InputTag>("tracks");
129 e.getByLabel(TkTagCKF,trackCollectionCKF);
130
131 //Trajectories
132 edm::Handle<std::vector<Trajectory> > TrajectoryCollectionCKF;
133 edm::InputTag TkTrajCKF = config_.getParameter<edm::InputTag>("trajectories");
134 e.getByLabel(TkTrajCKF,TrajectoryCollectionCKF);
135
136 // get the SiStripQuality records
137 edm::ESHandle<SiStripQuality> SiStripQuality_;
138 es.get<SiStripQualityRcd>().get(SiStripQuality_);
139
140 //get tracker geometry
141 edm::ESHandle<TrackerGeometry> tracker;
142 es.get<TrackerDigiGeometryRecord>().get(tracker);
143 const TrackerGeometry * tkgeom=&(* tracker);
144
145 edm::ESHandle<MagneticField> magFieldHandle;
146 es.get<IdealMagneticFieldRecord>().get(magFieldHandle);
147 const MagneticField* magField_ = magFieldHandle.product();
148
149
150 const reco::TrackCollection *tracksCKF=trackCollectionCKF.product();
151 if (tracksCKF->size() == 1 ){
152 reco::TrackCollection::const_iterator iCKF=trackCollectionCKF.product()->begin();
153 uint previousLayer = 0;
154
155 const Trajectory traject = *(TrajectoryCollectionCKF.product()->begin());
156 std::vector<TrajectoryMeasurement> TMeas=traject.measurements();
157 vector<TrajectoryMeasurement>::iterator itm;
158 TrajGlbX = 0.0; TrajGlbY = 0.0; TrajGlbZ = 0.0;
159 TrajLocX = 0.0; TrajLocY = 0.0; TrajLocErrX = 0.0; TrajLocErrY = 0.0;
160 TrajLocAngleX = -999.0; TrajLocAngleY = -999.0;
161
162 for (itm=TMeas.begin();itm!=TMeas.end();itm++){
163 if(! itm->updatedState().isValid()) continue;
164
165 ConstReferenceCountingPointer<TransientTrackingRecHit> theHit;
166 theHit = (*itm).recHit();
167
168 uint iidd = theHit->geographicalId().rawId();
169
170 StripSubdetector strip=StripSubdetector(iidd);
171 unsigned int subid=strip.subdetId();
172 uint TKlayers = 0;
173 if (subid == StripSubdetector::TIB) {
174 TIBDetId tibid(iidd);
175 TKlayers = tibid.layer();
176 }
177 if (subid == StripSubdetector::TOB) {
178 TOBDetId tobid(iidd);
179 TKlayers = tobid.layer() + 4 ;
180 }
181 if (subid == StripSubdetector::TID) {
182 TIDDetId tidid(iidd);
183 TKlayers = tidid.wheel() + 10;
184 }
185 if (subid == StripSubdetector::TEC) {
186 TECDetId tecid(iidd);
187 TKlayers = tecid.wheel() + 13 ;
188 }
189
190 if ( SiStripQuality_->getBadApvs(iidd)!=0 ) {
191 qualBad_ = 1;
192 } else {
193 qualBad_ = 0;
194 }
195
196 cout << "rechit in layer = " << TKlayers << " with valid status = " << theHit->isValid() << " and previous layer = " << previousLayer << endl;
197
198
199 // Make AnalyticalPropagator to use in TAVH constructor
200 AnalyticalPropagator propagator(magField_,anyDirection);
201 TrajectoryAtValidHit TM(*itm,tkgeom, propagator, 1);
202
203 layer_ = TKlayers;
204 valid_ = theHit->isValid();
205 module_ = iidd;
206
207 TrajGlbX = TM.globalX();
208 TrajGlbY = TM.globalY();
209 TrajGlbZ = TM.globalZ();
210 TrajLocX = TM.localX();
211 TrajLocY = TM.localY();
212 TrajLocErrX = TM.localErrorX();
213 TrajLocErrY = TM.localErrorY();
214 TrajLocAngleX = atan( TM.localDxDz() );
215 TrajLocAngleY = atan( TM.localDyDz() );
216
217 if (TKlayers!=previousLayer) rootTree_->Fill();
218
219 previousLayer = TKlayers;
220 }
221 }
222 }
223
224
225 // ------------ method called once each job just before starting event loop ------------
226 void
227 LayerEff::beginJob(const edm::EventSetup&)
228 {
229 edm::Service<TFileService> fs;
230 //
231 // root output
232 //
233 rootTree_ = fs->make<TTree>("LayerEff","LayerEff");
234 rootTree_->Branch("layer",&layer_,"layer/i");
235 rootTree_->Branch("valid",&valid_,"valid/i");
236 rootTree_->Branch("modules",&module_,"module/i");
237 rootTree_->Branch("qualBad",&qualBad_,"qualBad/i");
238 rootTree_->Branch("TrajGlbX",&TrajGlbX,"TrajGlbX/F");
239 rootTree_->Branch("TrajGlbY",&TrajGlbY,"TrajGlbY/F");
240 rootTree_->Branch("TrajGlbZ",&TrajGlbZ,"TrajGlbZ/F");
241 rootTree_->Branch("TrajLocX",&TrajLocX,"TrajLocX/F");
242 rootTree_->Branch("TrajLocY",&TrajLocY,"TrajLocY/F");
243 rootTree_->Branch("TrajLocErrX",&TrajLocErrX,"TrajLocErrX/F");
244 rootTree_->Branch("TrajLocErrY",&TrajLocErrY,"TrajLocErrY/F");
245 rootTree_->Branch("TrajLocAngleX",&TrajLocAngleX,"TrajLocAngleX/F");
246 rootTree_->Branch("TrajLocAngleY",&TrajLocAngleY,"TrajLocAngleY/F");
247 }
248
249 // ------------ method called once each job just after ending the event loop ------------
250 void
251 LayerEff::endJob() {
252 if ( rootTree_ ) {
253 rootTree_->GetDirectory()->cd();
254 rootTree_->Write();
255 delete rootTree_;
256 }
257 }
258
259 //define this as a plug-in
260 DEFINE_FWK_MODULE(LayerEff);