ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/ShallowTools/plugins/ShallowTrackClustersProducer.cc
Revision: 1.10
Committed: Tue Sep 29 10:16:31 2009 UTC (15 years, 7 months ago) by bbetchar
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.9: +1 -0 lines
Error occurred while calculating annotation data.
Log Message:
updates for CMSSW_3_3_X

File Contents

# Content
1 #include "UserCode/ShallowTools/interface/ShallowTrackClustersProducer.h"
2
3 #include "UserCode/ShallowTools/interface/ShallowTools.h"
4
5 #include "TrackingTools/PatternTools/interface/Trajectory.h"
6 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
7 #include "TrackingTools/TrackFitters/interface/TrajectoryStateCombiner.h"
8 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
9
10 #include "MagneticField/Engine/interface/MagneticField.h"
11 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
12 #include "CondFormats/SiStripObjects/interface/SiStripLorentzAngle.h"
13 #include "CondFormats/DataRecord/interface/SiStripLorentzAngleRcd.h"
14 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
15 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
16 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
17 #include "Geometry/CommonTopologies/interface/StripTopology.h"
18 #include "FWCore/Framework/interface/ESHandle.h"
19 #include "FWCore/Framework/interface/Event.h"
20 #include "boost/foreach.hpp"
21
22
23 ShallowTrackClustersProducer::ShallowTrackClustersProducer(const edm::ParameterSet& iConfig)
24 : theTracksLabel( iConfig.getParameter<edm::InputTag>("Tracks") ),
25 theClustersLabel( iConfig.getParameter<edm::InputTag>("Clusters") ),
26 Suffix ( iConfig.getParameter<std::string>("Suffix") ),
27 Prefix ( iConfig.getParameter<std::string>("Prefix") )
28 {
29 produces <std::vector<unsigned int> > ( Prefix + "trackmulti" + Suffix );
30 produces <std::vector<int> > ( Prefix + "trackindex" + Suffix );
31 produces <std::vector<float> > ( Prefix + "localtheta" + Suffix );
32 produces <std::vector<float> > ( Prefix + "localphi" + Suffix );
33 produces <std::vector<float> > ( Prefix + "localpitch" + Suffix );
34 produces <std::vector<float> > ( Prefix + "localx" + Suffix );
35 produces <std::vector<float> > ( Prefix + "localy" + Suffix );
36 produces <std::vector<float> > ( Prefix + "localz" + Suffix );
37 produces <std::vector<float> > ( Prefix + "strip" + Suffix );
38 produces <std::vector<float> > ( Prefix + "globaltheta" + Suffix );
39 produces <std::vector<float> > ( Prefix + "globalphi" + Suffix );
40 produces <std::vector<float> > ( Prefix + "globalx" + Suffix );
41 produces <std::vector<float> > ( Prefix + "globaly" + Suffix );
42 produces <std::vector<float> > ( Prefix + "globalz" + Suffix );
43 produces <std::vector<float> > ( Prefix + "insidistance"+ Suffix );
44 produces <std::vector<float> > ( Prefix + "covered" + Suffix );
45 produces <std::vector<float> > ( Prefix + "projwidth" + Suffix );
46 produces <std::vector<float> > ( Prefix + "BdotY" + Suffix );
47
48 produces <std::vector<float> > ( Prefix + "rhlocalx" + Suffix );
49 produces <std::vector<float> > ( Prefix + "rhlocaly" + Suffix );
50 produces <std::vector<float> > ( Prefix + "rhlocalxerr" + Suffix );
51 produces <std::vector<float> > ( Prefix + "rhlocalyerr" + Suffix );
52 produces <std::vector<float> > ( Prefix + "rhglobalx" + Suffix );
53 produces <std::vector<float> > ( Prefix + "rhglobaly" + Suffix );
54 produces <std::vector<float> > ( Prefix + "rhglobalz" + Suffix );
55 produces <std::vector<float> > ( Prefix + "rhstrip" + Suffix );
56 produces <std::vector<float> > ( Prefix + "rhmerr" + Suffix );
57
58 produces <std::vector<float> > ( Prefix + "ubstrip" + Suffix );
59 produces <std::vector<float> > ( Prefix + "ubmerr" + Suffix );
60
61 produces <std::vector<float> > ( Prefix + "driftx" + Suffix );
62 produces <std::vector<float> > ( Prefix + "drifty" + Suffix );
63 produces <std::vector<float> > ( Prefix + "driftz" + Suffix );
64 produces <std::vector<float> > ( Prefix + "globalZofunitlocalY" + Suffix );
65 }
66
67 void ShallowTrackClustersProducer::
68 produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
69 shallow::CLUSTERMAP clustermap = shallow::make_cluster_map(iEvent,theClustersLabel);
70
71 int size = clustermap.size();
72 std::auto_ptr<std::vector<unsigned int> > trackmulti ( new std::vector<unsigned int>(size, 0) );
73 std::auto_ptr<std::vector<int> > trackindex ( new std::vector<int> (size, -1) );
74 std::auto_ptr<std::vector<float> > localtheta ( new std::vector<float> (size, -100) );
75 std::auto_ptr<std::vector<float> > localphi ( new std::vector<float> (size, -100) );
76 std::auto_ptr<std::vector<float> > localpitch ( new std::vector<float> (size, -100) );
77 std::auto_ptr<std::vector<float> > localx ( new std::vector<float> (size, -100) );
78 std::auto_ptr<std::vector<float> > localy ( new std::vector<float> (size, -100) );
79 std::auto_ptr<std::vector<float> > localz ( new std::vector<float> (size, -100) );
80 std::auto_ptr<std::vector<float> > strip ( new std::vector<float> (size, -100) );
81 std::auto_ptr<std::vector<float> > globaltheta ( new std::vector<float> (size, -100) );
82 std::auto_ptr<std::vector<float> > globalphi ( new std::vector<float> (size, -100) );
83 std::auto_ptr<std::vector<float> > globalx ( new std::vector<float> (size, -10000) );
84 std::auto_ptr<std::vector<float> > globaly ( new std::vector<float> (size, -10000) );
85 std::auto_ptr<std::vector<float> > globalz ( new std::vector<float> (size, -10000) );
86 std::auto_ptr<std::vector<float> > insidistance ( new std::vector<float> (size, -1) );
87 std::auto_ptr<std::vector<float> > projwidth ( new std::vector<float> (size, -1000) );
88 std::auto_ptr<std::vector<float> > BdotY ( new std::vector<float> (size, -1000) );
89 std::auto_ptr<std::vector<float> > covered ( new std::vector<float> (size, -1000) );
90 std::auto_ptr<std::vector<float> > rhlocalx ( new std::vector<float>(size, -10000 ));
91 std::auto_ptr<std::vector<float> > rhlocaly ( new std::vector<float>(size, -10000 ));
92 std::auto_ptr<std::vector<float> > rhlocalxerr ( new std::vector<float>(size, -1 ));
93 std::auto_ptr<std::vector<float> > rhlocalyerr ( new std::vector<float>(size, -1 ));
94 std::auto_ptr<std::vector<float> > rhglobalx ( new std::vector<float>(size, -10000 ));
95 std::auto_ptr<std::vector<float> > rhglobaly ( new std::vector<float>(size, -10000 ));
96 std::auto_ptr<std::vector<float> > rhglobalz ( new std::vector<float>(size, -10000 ));
97 std::auto_ptr<std::vector<float> > rhstrip ( new std::vector<float>(size, -10000 ));
98 std::auto_ptr<std::vector<float> > rhmerr ( new std::vector<float>(size, -10000 ));
99 std::auto_ptr<std::vector<float> > ubstrip ( new std::vector<float>(size, -10000 ));
100 std::auto_ptr<std::vector<float> > ubmerr ( new std::vector<float>(size, -10000 ));
101 std::auto_ptr<std::vector<float> > driftx ( new std::vector<float>(size, -10000 ));
102 std::auto_ptr<std::vector<float> > drifty ( new std::vector<float>(size, -10000 ));
103 std::auto_ptr<std::vector<float> > driftz ( new std::vector<float>(size, -10000 ));
104 std::auto_ptr<std::vector<float> > globalZofunitlocalY ( new std::vector<float>(size, -1000));
105
106 edm::ESHandle<TrackerGeometry> theTrackerGeometry; iSetup.get<TrackerDigiGeometryRecord>().get( theTrackerGeometry );
107 edm::ESHandle<MagneticField> magfield; iSetup.get<IdealMagneticFieldRecord>().get(magfield);
108 edm::ESHandle<SiStripLorentzAngle> SiStripLorentzAngle; iSetup.get<SiStripLorentzAngleRcd>().get(SiStripLorentzAngle);
109
110 edm::Handle<edm::View<reco::Track> > tracks; iEvent.getByLabel(theTracksLabel, tracks);
111 edm::Handle<TrajTrackAssociationCollection> associations; iEvent.getByLabel(theTracksLabel, associations);
112
113 TrajectoryStateCombiner combiner;
114
115 for( TrajTrackAssociationCollection::const_iterator association = associations->begin();
116 association != associations->end(); association++) {
117 const Trajectory* traj = association->key.get();
118 const reco::Track* track = association->val.get();
119
120 BOOST_FOREACH( const TrajectoryMeasurement measurement, traj->measurements() ) {
121 const TrajectoryStateOnSurface tsos = measurement.updatedState();
122 const TrajectoryStateOnSurface unbiased = combiner(measurement.forwardPredictedState(), measurement.backwardPredictedState());
123 const SiStripRecHit2D* hit = dynamic_cast<const SiStripRecHit2D*> ( measurement.recHit()->hit() );
124
125 if(!hit) continue;
126 shallow::CLUSTERMAP::const_iterator cluster = clustermap.find( std::make_pair(hit->geographicalId().rawId(), hit->cluster()->firstStrip() ));
127 if(cluster == clustermap.end() ) throw cms::Exception("Logic Error") << "Cluster not found: this could be a configuration error" << std::endl;
128
129 unsigned i = cluster->second;
130 if( 0 == (trackmulti->at(i))++ ) {
131 const StripGeomDetUnit* theStripDet = dynamic_cast<const StripGeomDetUnit*>( theTrackerGeometry->idToDet( hit->geographicalId() ) );
132 LocalVector drift = shallow::drift( theStripDet, *magfield, *SiStripLorentzAngle);
133
134 trackindex->at(i) = shallow::findTrackIndex(tracks, track);
135 localtheta->at(i) = (theStripDet->toLocal(tsos.globalDirection())).theta();
136 localphi->at(i) = (theStripDet->toLocal(tsos.globalDirection())).phi();
137 localpitch->at(i) = (theStripDet->specificTopology()).localPitch(theStripDet->toLocal(tsos.globalPosition()));
138 localx->at(i) = (theStripDet->toLocal(tsos.globalPosition())).x();
139 localy->at(i) = (theStripDet->toLocal(tsos.globalPosition())).y();
140 localz->at(i) = (theStripDet->toLocal(tsos.globalPosition())).z();
141 strip->at(i) = (theStripDet->specificTopology()).strip(theStripDet->toLocal(tsos.globalPosition()));
142 globaltheta->at(i) = tsos.globalDirection().theta();
143 globalphi->at(i) = tsos.globalDirection().phi();
144 globalx->at(i) = tsos.globalPosition().x();
145 globaly->at(i) = tsos.globalPosition().y();
146 globalz->at(i) = tsos.globalPosition().z();
147 insidistance->at(i) = 1./fabs(cos(localtheta->at(i)));
148 projwidth->at(i) = tan(localtheta->at(i))*cos(localphi->at(i));
149 BdotY->at(i) = (theStripDet->surface()).toLocal( magfield->inTesla(theStripDet->surface().position())).y();
150 covered->at(i) = drift.z()/localpitch->at(i) * fabs(projwidth->at(i) - drift.x()/drift.z());
151 rhlocalx->at(i) = hit->localPosition().x();
152 rhlocaly->at(i) = hit->localPosition().y();
153 rhlocalxerr->at(i) = sqrt(hit->localPositionError().xx());
154 rhlocalyerr->at(i) = sqrt(hit->localPositionError().yy());
155 rhglobalx->at(i) = theStripDet->toGlobal(hit->localPosition()).x();
156 rhglobaly->at(i) = theStripDet->toGlobal(hit->localPosition()).y();
157 rhglobalz->at(i) = theStripDet->toGlobal(hit->localPosition()).z();
158 rhstrip->at(i) = theStripDet->specificTopology().strip(hit->localPosition());
159 rhmerr->at(i) = sqrt(theStripDet->specificTopology().measurementError(hit->localPosition(), hit->localPositionError()).uu());
160 ubstrip->at(i) = theStripDet->specificTopology().strip(unbiased.localPosition());
161 ubmerr->at(i) = sqrt(theStripDet->specificTopology().measurementError(unbiased.localPosition(), unbiased.localError().positionError()).uu());
162 driftx->at(i) = drift.x();
163 drifty->at(i) = drift.y();
164 driftz->at(i) = drift.z();
165 globalZofunitlocalY->at(i) = (theStripDet->toGlobal(LocalVector(0,1,0))).z();
166 }
167 }
168 }
169
170 iEvent.put(trackmulti, Prefix + "trackmulti" + Suffix );
171 iEvent.put(trackindex, Prefix + "trackindex" + Suffix );
172 iEvent.put(localtheta, Prefix + "localtheta" + Suffix );
173 iEvent.put(localphi, Prefix + "localphi" + Suffix );
174 iEvent.put(localpitch, Prefix + "localpitch" + Suffix );
175 iEvent.put(localx, Prefix + "localx" + Suffix );
176 iEvent.put(localy, Prefix + "localy" + Suffix );
177 iEvent.put(localz, Prefix + "localz" + Suffix );
178 iEvent.put(strip, Prefix + "strip" + Suffix );
179 iEvent.put(globaltheta, Prefix + "globaltheta" + Suffix );
180 iEvent.put(globalphi, Prefix + "globalphi" + Suffix );
181 iEvent.put(globalx, Prefix + "globalx" + Suffix );
182 iEvent.put(globaly, Prefix + "globaly" + Suffix );
183 iEvent.put(globalz, Prefix + "globalz" + Suffix );
184 iEvent.put(insidistance,Prefix + "insidistance"+ Suffix );
185 iEvent.put(covered, Prefix + "covered" + Suffix );
186 iEvent.put(projwidth, Prefix + "projwidth" + Suffix );
187 iEvent.put(BdotY, Prefix + "BdotY" + Suffix );
188 iEvent.put(rhlocalx, Prefix + "rhlocalx" + Suffix );
189 iEvent.put(rhlocaly, Prefix + "rhlocaly" + Suffix );
190 iEvent.put(rhlocalxerr, Prefix + "rhlocalxerr" + Suffix );
191 iEvent.put(rhlocalyerr, Prefix + "rhlocalyerr" + Suffix );
192 iEvent.put(rhglobalx, Prefix + "rhglobalx" + Suffix );
193 iEvent.put(rhglobaly, Prefix + "rhglobaly" + Suffix );
194 iEvent.put(rhglobalz, Prefix + "rhglobalz" + Suffix );
195 iEvent.put(rhstrip, Prefix + "rhstrip" + Suffix );
196 iEvent.put(rhmerr, Prefix + "rhmerr" + Suffix );
197 iEvent.put(ubstrip, Prefix + "ubstrip" + Suffix );
198 iEvent.put(ubmerr, Prefix + "ubmerr" + Suffix );
199 iEvent.put( driftx, Prefix + "driftx" + Suffix );
200 iEvent.put( drifty, Prefix + "drifty" + Suffix );
201 iEvent.put( driftz, Prefix + "driftz" + Suffix );
202 iEvent.put( globalZofunitlocalY, Prefix + "globalZofunitlocalY" + Suffix );
203 }