CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ClusterShapeTrajectoryFilter.cc
Go to the documentation of this file.
1 // VI January 2012: needs to be migrated to use cluster directly
2 
3 
5 
7 
13 
16 
24 
27 
29 
32 
34 
35 #include <vector>
36 using namespace std;
37 
38 /*****************************************************************************/
40  theCacheToken(iC.consumes<SiPixelClusterShapeCache>(iConfig.getParameter<edm::InputTag>("cacheSrc"))),
41  theFilter(nullptr)
42 {}
43 
45 {
46 }
47 
50  iSetup.get<TrajectoryFilter::Record>().get("ClusterShapeHitFilter", shape);
51  theFilter = shape.product();
52 
54  iEvent.getByToken(theCacheToken, cache);
55  theCache = cache.product();
56 }
57 
58 /*****************************************************************************/
60  (Trajectory& trajectory) const
61 {
62  assert(theCache);
63  vector<TrajectoryMeasurement> tms = trajectory.measurements();
64 
65  for(vector<TrajectoryMeasurement>::const_iterator
66  tm = tms.begin(); tm!= tms.end(); tm++)
67  {
68  const TrackingRecHit* ttRecHit = &(*((*tm).recHit()));
69 
70  if(ttRecHit->isValid())
71  {
72  const TrackingRecHit * tRecHit = ttRecHit->hit();
73 
74  TrajectoryStateOnSurface ts = (*tm).updatedState();
75  const GlobalVector gdir = ts.globalDirection();
76 
82  { // pixel
83  const SiPixelRecHit* recHit =
84  dynamic_cast<const SiPixelRecHit *>(tRecHit);
85 
86  if(recHit != 0)
87  return theFilter->isCompatible(*recHit, gdir, *theCache);
88  }
89  else if(GeomDetEnumerators::isTrackerStrip(ttRecHit->det()->subDetector()))
90  { // strip
91  if(dynamic_cast<const SiStripMatchedRecHit2D *>(tRecHit) != 0)
92  { // glued
93  const SiStripMatchedRecHit2D* recHit =
94  dynamic_cast<const SiStripMatchedRecHit2D *>(tRecHit);
95 
96  if(recHit != 0)
97  {
98  return (theFilter->isCompatible(recHit->monoHit() , gdir) &&
99  theFilter->isCompatible(recHit->stereoHit(), gdir));
100  }
101  }
102  else
103  { // single
104  if(dynamic_cast<const SiStripRecHit2D *>(tRecHit) != 0)
105  { // normal
106  const SiStripRecHit2D* recHit =
107  dynamic_cast<const SiStripRecHit2D *>(tRecHit);
108 
109  if(recHit != 0)
110  return theFilter->isCompatible(*recHit, gdir);
111  }
112  else
113  { // projected
114  const ProjectedSiStripRecHit2D* recHit =
115  dynamic_cast<const ProjectedSiStripRecHit2D *>(tRecHit);
116 
117  if(recHit != 0)
118  return theFilter->isCompatible(recHit->originalHit(), gdir);
119  }
120  }
121  }
122  }
123  }
124 
125  return true;
126 }
127 
128 /*****************************************************************************/
130  (TempTrajectory& trajectory) const
131 {
132  assert(theCache);
133  TempTrajectory::DataContainer tms = trajectory.measurements();
134 
136  tm = tms.rbegin(); tm!= tms.rend(); --tm)
137  {
138  const TrackingRecHit* ttRecHit = &(*((*tm).recHit()));
139 
140  if(ttRecHit->isValid())
141  {
142  const TrackingRecHit * tRecHit = ttRecHit->hit();
143 
144  TrajectoryStateOnSurface ts = (*tm).updatedState();
145  GlobalVector gdir = ts.globalDirection();
146 
152  { // pixel
153  const SiPixelRecHit* recHit =
154  dynamic_cast<const SiPixelRecHit *>(tRecHit);
155 
156  if(recHit != 0)
157  if(! theFilter->isCompatible(*recHit, gdir, *theCache))
158  {
159  LogTrace("TrajectFilter")
160  << " [TrajectFilter] fail pixel";
161  return false;
162  }
163  }
164  else if(GeomDetEnumerators::isTrackerStrip(ttRecHit->det()->subDetector()))
165  { // strip
166  if(dynamic_cast<const SiStripMatchedRecHit2D *>(tRecHit) != 0)
167  { // glued
168  const SiStripMatchedRecHit2D* recHit =
169  dynamic_cast<const SiStripMatchedRecHit2D *>(tRecHit);
170 
171  if(recHit != 0)
172  {
173  if(! theFilter->isCompatible(recHit->monoHit(), gdir))
174  {
175  LogTrace("TrajectFilter")
176  << " [TrajectFilter] fail strip matched 1st";
177  return false;
178  }
179 
180  if(! theFilter->isCompatible(recHit->stereoHit(), gdir))
181  {
182  LogTrace("TrajectFilter")
183  << " [TrajectFilter] fail strip matched 2nd";
184  return false;
185  }
186  }
187  }
188  else
189  { // single
190  if(dynamic_cast<const SiStripRecHit2D *>(tRecHit) != 0)
191  { // normal
192  const SiStripRecHit2D* recHit =
193  dynamic_cast<const SiStripRecHit2D *>(tRecHit);
194 
195  if(recHit != 0)
196  if(! theFilter->isCompatible(*recHit, gdir))
197  {
198  LogTrace("TrajectFilter")
199  << " [TrajectFilter] fail strip single";
200  return false;
201  }
202  }
203  else
204  { // projected
205  const ProjectedSiStripRecHit2D* recHit =
206  dynamic_cast<const ProjectedSiStripRecHit2D *>(tRecHit);
207 
208  if(recHit != 0)
209  if(! theFilter->isCompatible(recHit->originalHit(), gdir))
210  {
211  LogTrace("TrajectFilter")
212  << " [TrajectFilter] fail strip projected";
213  return false;
214  }
215  }
216  }
217  }
218  }
219  }
220 
221  return true;
222 }
223 
224 /*****************************************************************************/
226  (const Trajectory& trajectory) const
227 {
228  return true;
229 }
230 
231 /*****************************************************************************/
233  (const TempTrajectory& trajectory) const
234 {
235  TempTrajectory t = trajectory;
236 
237  // Check if ok
238  if(toBeContinued(t)) return true;
239 
240  // Should take out last
241  if(t.measurements().size() <= 3) return false;
242 
243  return true;
244 }
245 
edm::EDGetTokenT< SiPixelClusterShapeCache > theCacheToken
const_iterator rend() const
Definition: bqueue.h:164
ClusterShapeTrajectoryFilter(const edm::ParameterSet &iConfig, edm::ConsumesCollector &iC)
void setEvent(const edm::Event &iEvent, const edm::EventSetup &iSetup) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
assert(m_qm.get())
const DataContainer & measurements() const
const ClusterShapeHitFilter * theFilter
virtual bool toBeContinued(TempTrajectory &) const
#define nullptr
bool isTrackerStrip(const GeomDetEnumerators::SubDetector m)
DataContainer const & measurements() const
Definition: Trajectory.h:203
int iEvent
Definition: GenABIO.cc:230
const GeomDet * det() const
virtual bool qualityFilter(const TempTrajectory &) const
const SiPixelClusterShapeCache * theCache
#define LogTrace(id)
const_iterator rbegin() const
Definition: bqueue.h:163
SiStripRecHit2D originalHit() const
virtual TrackingRecHit const * hit() const
SiStripRecHit2D stereoHit() const
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
bool isValid() const
SiStripRecHit2D monoHit() const
size_type size() const
Definition: bqueue.h:167
virtual SubDetector subDetector() const
Which subdetector.
Definition: GeomDet.cc:49
GlobalVector globalDirection() const
Our base class.
Definition: SiPixelRecHit.h:23