CMS 3D CMS Logo

TrajectoryAtInvalidHit.cc
Go to the documentation of this file.
13 // #include "RecoTracker/MeasurementDet/interface/RecHitPropagator.h"
16 
17 using namespace std;
19  const TrackerTopology* tTopo,
20  const TrackerGeometry* tracker,
21  const Propagator& propagator,
22  const unsigned int mono)
23 {
24  if ( tm.backwardPredictedState().isValid() )
25  theCombinedPredictedState = TrajectoryStateCombiner().combine( tm.forwardPredictedState(),
27  else
28  theCombinedPredictedState = tm.forwardPredictedState();
29 
30  if (!theCombinedPredictedState.isValid()) {
31  return;
32  }
33  theHit = tm.recHit();
34  iidd = theHit->geographicalId().rawId();
36  unsigned int subid=strip.subdetId();
37  // xB and yB are for absolute borders on the trajectories included in the study, sigmaX sigmaY are
38  // significance cuts on the distance from the detector surface
39  float xB = 0.; float sigmaX = 5.0;
40  float yB = 0.; float sigmaY = 5.0;
41  float sigmaYBond = 0.;
42  //set bounds for point to be within to be counted in the study
43  if (subid == StripSubdetector::TOB) {
44  sigmaYBond = 5.0;
45  }
46  const GeomDetUnit * monodet;
47 
48  // if module is from a double sided layer, write out info for either the
49  // rphi surface (mono = 1) or the stereo surface (mono = 2)--not the matched hit surface
50  if (( mono > 0 ) && isDoubleSided(iidd, tTopo) ) {
51  // find matched det id, that is the matched hit surface between the two sensors
52  unsigned int matched_iidd = iidd-(iidd & 0x3);
53  DetId matched_id(matched_iidd);
54 
55  GluedGeomDet * gdet=(GluedGeomDet *)tracker->idToDet(matched_id);
56 
57  // get the sensor det indicated by mono
58  if (mono == 1) monodet=gdet->stereoDet();
59  else monodet=gdet->monoDet(); // this should only be mono == 2
60 
61  // set theCombinedPredictedState to be on the sensor surface, not the matched surface
62  DetId mono_id = monodet->geographicalId();
63  const Surface &surface = tracker->idToDet(mono_id)->surface();
64  theCombinedPredictedState = propagator.propagate(theCombinedPredictedState,
65  surface);
66 
67  if (!theCombinedPredictedState.isValid()) {
68  cout << "found invalid combinedpredictedstate after propagation"<< endl;
69  return;
70  }
71 
72  //check if hit on trajectory is valid for this sensor
73  if ((iidd & 0x3)==0) {
74  // passed id is on matched surface (ie neither rphi, nor stereo surface)
75  // so the rechits on both sensors should be invalid
76  hasValidHit = theHit->isValid();
77  //cout << "should always be invalid = " << theHit->isValid() << endl;
78  } else {
79  if (iidd==mono_id) {
80  //mono sensor for this TrajAtInvalidHit is same as originally passed in from trajectory
81  //normally should only happen for valid hits, but sometimes is invalid
82  hasValidHit = theHit->isValid();
83  //cout << "check always true = " << theHit->isValid() << endl;
84  } else {
85  // mono sensor for this TrajAtInvalidHit is not as originally passed in from trajectory
86  // so this is a partner missing from the trajectory and is thus invalid
87  hasValidHit = false;
88  //cout << "setting invalid by fiat" << endl;
89  }
90  }
91 
92  //set module id to be mono det
93  iidd = monodet->geographicalId().rawId();
94  } else {
95  monodet = (GeomDetUnit*)theHit->det();
96  hasValidHit = theHit->isValid();
97  }
98 
99  locX = theCombinedPredictedState.localPosition().x();
100  locY = theCombinedPredictedState.localPosition().y();
101  locZ = theCombinedPredictedState.localPosition().z();
102  locXError = sqrt(theCombinedPredictedState.localError().positionError().xx());
103  locYError = sqrt(theCombinedPredictedState.localError().positionError().yy());
104  locDxDz = theCombinedPredictedState.localParameters().vector()[1];
105  locDyDz = theCombinedPredictedState.localParameters().vector()[2];
106  globX = theCombinedPredictedState.globalPosition().x();
107  globY = theCombinedPredictedState.globalPosition().y();
108  globZ = theCombinedPredictedState.globalPosition().z();
109 
110  // this should never be a glued det, only rphi or stero
111  //cout << "From TrajAtValidHit module " << iidd << " matched/stereo/rphi = " << ((iidd & 0x3)==0) << "/" << ((iidd & 0x3)==1) << "/" << ((iidd & 0x3)==2) << endl;
112 
113  // Restrict the bound regions for better understanding of the modul assignment.
114 
115  LocalPoint BoundedPoint;
116  float xx, yy ,zz;
117 
118  // Insert the bounded values
119  if (locX < 0. ) xx = min(locX - xB,locX - sigmaX*locXError);
120  else xx = max(locX + xB, locX + sigmaX*locXError);
121 
122  if (locY < 0. ) yy = min(locY - yB,locY - sigmaY*locYError);
123  else yy = max(locY + yB, locY + sigmaY*locYError);
124 
125  zz = theCombinedPredictedState.localPosition().z();
126 
127  BoundedPoint = LocalPoint(xx,yy,zz);
128 
129  if ( monodet->surface().bounds().inside(BoundedPoint) && abs(locY) > sigmaYBond*locYError ){
130  acceptance = true;
131  }
132  else {
133  // hit is within xB, yB from the edge of the detector, so throw it out
134  acceptance = false;
135  }
136 }
137 
139 {
140  return locX;
141 }
143 {
144  return locY;
145 }
147 {
148  return locZ;
149 }
151 {
152  return locXError;
153 }
155 {
156  return locYError;
157 }
159  return locDxDz;
160 }
162  return locDyDz;
163 }
165 {
166  return globX;
167 }
169 {
170  return globY;
171 }
173 {
174  return globZ;
175 }
176 
178 {
179  return iidd;
180 }
181 
183 {
184  return acceptance;
185 }
186 
188 {
189  return hasValidHit;
190 }
191 
192 bool TrajectoryAtInvalidHit::isDoubleSided(unsigned int iidd, const TrackerTopology* tTopo) const {
194  unsigned int subid=strip.subdetId();
195  unsigned int layer = 0;
196  if (subid == StripSubdetector::TIB) {
197 
198  layer = tTopo->tibLayer(iidd);
199  if (layer == 1 || layer == 2) return true;
200  else return false;
201  }
202  else if (subid == StripSubdetector::TOB) {
203 
204  layer = tTopo->tobLayer(iidd) + 4 ;
205  if (layer == 5 || layer == 6) return true;
206  else return false;
207  }
208  else if (subid == StripSubdetector::TID) {
209 
210  layer = tTopo->tidRing(iidd) + 10;
211  if (layer == 11 || layer == 12) return true;
212  else return false;
213  }
214  else if (subid == StripSubdetector::TEC) {
215 
216  layer = tTopo->tecRing(iidd) + 13 ;
217  if (layer == 14 || layer == 15 || layer == 18) return true;
218  else return false;
219  }
220  else
221  return false;
222 }
223 
225  return theCombinedPredictedState;
226 }
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:32
unsigned int tibLayer(const DetId &id) const
ConstRecHitPointer const & recHit() const
unsigned int tidRing(const DetId &id) const
const GeomDetUnit * monoDet() const
Definition: GluedGeomDet.h:20
unsigned int monodet_id() const
TSOS combine(const TSOS &pTsos1, const TSOS &pTsos2) const
unsigned int tecRing(const DetId &id) const
ring id
const Bounds & bounds() const
Definition: Surface.h:120
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
virtual bool inside(const Local3DPoint &) const =0
Determine if the point is inside the bounds.
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:79
T min(T a, T b)
Definition: MathUtil.h:58
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
TrajectoryAtInvalidHit(const TrajectoryMeasurement &, const TrackerTopology *tTopo, const TrackerGeometry *tracker, const Propagator &propagator, const unsigned int mono=0)
bool isDoubleSided(unsigned int iidd, const TrackerTopology *tTopo) const
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
Definition: DetId.h:18
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:53
TrajectoryStateOnSurface tsos() const
const GeomDetUnit * stereoDet() const
Definition: GluedGeomDet.h:21
unsigned int tobLayer(const DetId &id) const
TrajectoryStateOnSurface const & backwardPredictedState() const
Access to backward predicted state (from smoother)
const TrackerGeomDet * idToDet(DetId) const