CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
TkGluedMeasurementDet Class Referencefinal

#include <TkGluedMeasurementDet.h>

Inheritance diagram for TkGluedMeasurementDet:
MeasurementDet

Classes

class  HitCollectorForFastMeasurements
 
class  HitCollectorForRecHits
 
class  HitCollectorForSimpleHits
 

Public Member Functions

bool hasBadComponents (const TrajectoryStateOnSurface &tsos, const MeasurementTrackerEvent &data) const override
 return TRUE if at least one of the mono and stereo components has badChannels More...
 
void init (const MeasurementDet *monoDet, const MeasurementDet *stereoDet, const TrackerTopology *tTopo)
 
bool isActive (const MeasurementTrackerEvent &data) const override
 return TRUE if both mono and stereo components are active More...
 
bool measurements (const TrajectoryStateOnSurface &stateOnThisDet, const MeasurementEstimator &est, const MeasurementTrackerEvent &data, TempMeasurements &result) const override
 
const TkStripMeasurementDetmonoDet () const
 
template<typename Collector >
void projectOnGluedDet (Collector &collector, const RecHitContainer &hits, const GlobalVector &gdir) const
 
template<typename Collector >
void projectOnGluedDet (Collector &collector, std::vector< SiStripRecHit2D > const &hits, const GlobalVector &gdir) const
 
unsigned int rawId () const
 
RecHitContainer recHits (const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data) const override
 
bool recHits (SimpleHitContainer &result, const TrajectoryStateOnSurface &stateOnThisDet, const MeasurementEstimator &, const MeasurementTrackerEvent &data) const override
 
const GluedGeomDetspecificGeomDet () const
 
const TkStripMeasurementDetstereoDet () const
 
 TkGluedMeasurementDet (const GluedGeomDet *gdet, const SiStripRecHitMatcher *matcher, const StripClusterParameterEstimator *cpe)
 
- Public Member Functions inherited from MeasurementDet
const GeomDetfastGeomDet () const
 
std::vector< TrajectoryMeasurementfastMeasurements (const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &est, const MeasurementTrackerEvent &data) const
 
virtual const GeomDetgeomDet () const
 
 MeasurementDet (const GeomDet *gdet)
 
const Surface::PositionTypeposition () const
 
virtual bool recHits (const TrajectoryStateOnSurface &stateOnThisDet, const MeasurementEstimator &, const MeasurementTrackerEvent &data, RecHitContainer &result, std::vector< float > &) const
 
const Surfacesurface () const
 
virtual ~MeasurementDet ()=default
 

Private Member Functions

void checkHitProjection (const TrackingRecHit &hit, const TrajectoryStateOnSurface &ts, const GeomDet &det) const
 
void checkProjection (const TrajectoryStateOnSurface &ts, const RecHitContainer &monoHits, const RecHitContainer &stereoHits) const
 
template<typename Collector >
void collectRecHits (const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data, Collector &coll) const
 
template<typename Collector >
void doubleMatch (const TrajectoryStateOnSurface &ts, const MeasurementTrackerEvent &data, Collector &collector) const
 
RecHitContainer projectOnGluedDet (const std::vector< SiStripRecHit2D > &hits, const TrajectoryStateOnSurface &ts) const
 
template<typename HitCollector >
void projectOnGluedDet (HitCollector &collector, const std::vector< SiStripRecHit2D > &hits, const GlobalVector &gdir) const
 
RecHitContainer projectOnGluedDet (const RecHitContainer &hits, const TrajectoryStateOnSurface &ts) const
 
template<typename HitCollector >
void projectOnGluedDet (HitCollector &collector, const RecHitContainer &hits, const GlobalVector &gdir) const
 
bool testStrips (const TrajectoryStateOnSurface &tsos, const BoundPlane &gluedPlane, const TkStripMeasurementDet &mdet) const
 Test the strips on one of the two dets with projection. More...
 

Private Attributes

const StripClusterParameterEstimatortheCPE
 
const SiStripRecHitMatchertheMatcher
 
const TkStripMeasurementDettheMonoDet
 
const TkStripMeasurementDettheStereoDet
 
const TrackerTopologytheTopology
 

Additional Inherited Members

- Public Types inherited from MeasurementDet
typedef TrackingRecHit::ConstRecHitContainer RecHitContainer
 
using SimpleHitContainer = std::vector< BaseTrackerRecHit * >
 
typedef tracking::TempMeasurements TempMeasurements
 
- Protected Attributes inherited from MeasurementDet
TrackingRecHit::ConstRecHitPointer theInactiveHit
 
TrackingRecHit::ConstRecHitPointer theMissingHit
 

Detailed Description

Definition at line 17 of file TkGluedMeasurementDet.h.

Constructor & Destructor Documentation

◆ TkGluedMeasurementDet()

TkGluedMeasurementDet::TkGluedMeasurementDet ( const GluedGeomDet gdet,
const SiStripRecHitMatcher matcher,
const StripClusterParameterEstimator cpe 
)

Definition at line 62 of file TkGluedMeasurementDet.cc.

65  : MeasurementDet(gdet),
66  theMatcher(matcher),
67  theCPE(cpe),
68  theMonoDet(nullptr),
69  theStereoDet(nullptr),
70  theTopology(nullptr) {}
const TkStripMeasurementDet * theMonoDet
MeasurementDet(const GeomDet *gdet)
const SiStripRecHitMatcher * theMatcher
const TkStripMeasurementDet * theStereoDet
const TrackerTopology * theTopology
const StripClusterParameterEstimator * theCPE

Member Function Documentation

◆ checkHitProjection()

void TkGluedMeasurementDet::checkHitProjection ( const TrackingRecHit hit,
const TrajectoryStateOnSurface ts,
const GeomDet det 
) const
private

Definition at line 347 of file TkGluedMeasurementDet.cc.

References gather_cfg::cout, EcalSCDynamicDPhiParametersESProducer_cfi::cutoff, HLT_2023v12_cff::eps, TrajectoryStateOnSurface::globalParameters(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localPosition(), mag(), SiStripPI::max, GlobalTrajectoryParameters::momentum(), LocalTrajectoryError::positionError(), RecHitPropagator::propagate(), GeomDet::surface(), theCPE, LocalError::xx(), LocalError::xy(), and LocalError::yy().

Referenced by checkProjection().

349  {
350  auto&& vl = projectedPos(hit, det, ts.globalParameters().momentum(), theCPE);
351  ProjectedSiStripRecHit2D projectedHit(vl.first, vl.second, det, static_cast<SiStripRecHit2D const&>(hit));
352 
353  RecHitPropagator prop;
354  TrajectoryStateOnSurface propState = prop.propagate(hit, det.surface(), ts);
355 
356  if ((projectedHit.localPosition() - propState.localPosition()).mag() > 0.0001f) {
357  std::cout << "PROBLEM: projected and propagated hit positions differ by "
358  << (projectedHit.localPosition() - propState.localPosition()).mag() << std::endl;
359  }
360 
361  LocalError le1 = projectedHit.localPositionError();
362  LocalError le2 = propState.localError().positionError();
363  double eps = 1.e-5;
364  double cutoff = 1.e-4; // if element below cutoff, use absolute instead of relative accuracy
365  double maxdiff = std::max(
366  std::max(fabs(le1.xx() - le2.xx()) / (cutoff + le1.xx()), fabs(le1.xy() - le2.xy()) / (cutoff + fabs(le1.xy()))),
367  fabs(le1.yy() - le2.yy()) / (cutoff + le1.xx()));
368  if (maxdiff > eps) {
369  std::cout << "PROBLEM: projected and propagated hit errors differ by " << maxdiff << std::endl;
370  }
371 }
const LocalTrajectoryError & localError() const
const GlobalTrajectoryParameters & globalParameters() const
LocalError positionError() const
TrajectoryStateOnSurface propagate(const TrackingRecHit &hit, const Plane &plane, const TrajectoryStateOnSurface &ts) const
float yy() const
Definition: LocalError.h:24
float xy() const
Definition: LocalError.h:23
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
const StripClusterParameterEstimator * theCPE
float xx() const
Definition: LocalError.h:22

◆ checkProjection()

void TkGluedMeasurementDet::checkProjection ( const TrajectoryStateOnSurface ts,
const RecHitContainer monoHits,
const RecHitContainer stereoHits 
) const
private

Definition at line 336 of file TkGluedMeasurementDet.cc.

References checkHitProjection(), MeasurementDet::fastGeomDet(), and mps_fire::i.

338  {
339  for (RecHitContainer::const_iterator i = monoHits.begin(); i != monoHits.end(); ++i) {
340  checkHitProjection(**i, ts, fastGeomDet());
341  }
342  for (RecHitContainer::const_iterator i = stereoHits.begin(); i != stereoHits.end(); ++i) {
343  checkHitProjection(**i, ts, fastGeomDet());
344  }
345 }
void checkHitProjection(const TrackingRecHit &hit, const TrajectoryStateOnSurface &ts, const GeomDet &det) const
const GeomDet & fastGeomDet() const

◆ collectRecHits()

template<typename Collector >
void TkGluedMeasurementDet::collectRecHits ( const TrajectoryStateOnSurface ts,
const MeasurementTrackerEvent data,
Collector &  coll 
) const
private

Definition at line 170 of file TkGluedMeasurementDet.cc.

References data, TrajectoryStateOnSurface::globalParameters(), TrackingRecHit::hit(), TrajectoryStateOnSurface::isValid(), TrajectoryStateOnSurface::localDirection(), SiStripRecHitMatcher::match(), GlobalTrajectoryParameters::momentum(), MeasurementDet::position(), projectOnGluedDet(), TkStripMeasurementDet::recHits(), TkStripMeasurementDet::simpleRecHits(), specificGeomDet(), MeasurementDet::surface(), theMatcher, theMonoDet, theStereoDet, GloballyPositioned< T >::toLocal(), and HcalDetIdTransform::transform().

Referenced by measurements(), and recHits().

172  {
173  //------ WARNING: here ts is used as it is on the mono/stereo surface.
174  //----- A further propagation is necessary.
175  //----- To limit the problem, the SimpleCPE should be used
176  RecHitContainer monoHits = theMonoDet->recHits(ts, data);
177  GlobalVector glbDir = (ts.isValid() ? ts.globalParameters().momentum() : position() - GlobalPoint(0, 0, 0));
178 
179  //edm::LogWarning("TkGluedMeasurementDet::recHits") << "Query-for-detid-" << theGeomDet->geographicalId().rawId();
180 
181  //checkProjection(ts, monoHits, stereoHits);
182 
183  if (monoHits.empty()) {
184  // make stereo TTRHs and project them
185  projectOnGluedDet(collector, theStereoDet->recHits(ts, data), glbDir);
186  } else {
187  // collect simple stereo hits
188  std::vector<SiStripRecHit2D> simpleSteroHitsByValue;
189  theStereoDet->simpleRecHits(ts, data, simpleSteroHitsByValue);
190 
191  if (simpleSteroHitsByValue.empty()) {
192  projectOnGluedDet(collector, monoHits, glbDir);
193  } else {
194  LocalVector tkDir = (ts.isValid() ? ts.localDirection() : surface().toLocal(position() - GlobalPoint(0, 0, 0)));
196  vsStereoHits.resize(simpleSteroHitsByValue.size());
198  simpleSteroHitsByValue.begin(), simpleSteroHitsByValue.end(), vsStereoHits.begin(), take_address());
199 
200  // convert mono hits to type expected by matcher
201  for (RecHitContainer::const_iterator monoHit = monoHits.begin(); monoHit != monoHits.end(); ++monoHit) {
202  const TrackingRecHit* tkhit = (**monoHit).hit();
203  const SiStripRecHit2D* verySpecificMonoHit = reinterpret_cast<const SiStripRecHit2D*>(tkhit);
204  theMatcher->match(verySpecificMonoHit,
205  vsStereoHits.begin(),
206  vsStereoHits.end(),
207  collector.collector(),
208  &specificGeomDet(),
209  tkDir);
210 
211  if (collector.hasNewMatchedHits()) {
212  collector.clearNewMatchedHitsFlag();
213  } else {
214  collector.addProjected(**monoHit, glbDir);
215  }
216  } // loop on mono hit
217  }
218  //GIO// std::cerr << "TkGluedMeasurementDet hits " << monoHits.size() << "/" << stereoHits.size() << " => " << result.size() << std::endl;
219  }
220 }
const TkStripMeasurementDet * theMonoDet
std::unique_ptr< SiStripMatchedRecHit2D > match(const SiStripRecHit2D *monoRH, const SiStripRecHit2D *stereoRH, const GluedGeomDet *gluedDet, LocalVector trackdirection, bool force) const
const GlobalTrajectoryParameters & globalParameters() const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
RecHitContainer recHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data) const override
void simpleRecHits(const TrajectoryStateOnSurface &ts, const MeasurementTrackerEvent &data, std::vector< SiStripRecHit2D > &result) const
const GluedGeomDet & specificGeomDet() const
LocalPoint toLocal(const GlobalPoint &gp) const
const Surface::PositionType & position() const
LocalVector localDirection() const
RecHitContainer projectOnGluedDet(const std::vector< SiStripRecHit2D > &hits, const TrajectoryStateOnSurface &ts) const
const SiStripRecHitMatcher * theMatcher
std::vector< const SiStripRecHit2D * > SimpleHitCollection
const TkStripMeasurementDet * theStereoDet
const Surface & surface() const
TrackingRecHit::ConstRecHitContainer RecHitContainer
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
virtual TrackingRecHit const * hit() const
unsigned transform(const HcalDetId &id, unsigned transformCode)

◆ doubleMatch()

template<typename Collector >
void TkGluedMeasurementDet::doubleMatch ( const TrajectoryStateOnSurface ts,
const MeasurementTrackerEvent data,
Collector &  collector 
) const
private

◆ hasBadComponents()

bool TkGluedMeasurementDet::hasBadComponents ( const TrajectoryStateOnSurface tsos,
const MeasurementTrackerEvent data 
) const
inlineoverridevirtual

return TRUE if at least one of the mono and stereo components has badChannels

Implements MeasurementDet.

Definition at line 50 of file TkGluedMeasurementDet.h.

References data, and MeasurementDet::hasBadComponents().

50  {
51  return (monoDet()->hasBadComponents(tsos, data) || stereoDet()->hasBadComponents(tsos, data));
52  }
const TkStripMeasurementDet * stereoDet() const
bool hasBadComponents(const TrajectoryStateOnSurface &tsos, const MeasurementTrackerEvent &data) const override
return TRUE if at least one of the mono and stereo components has badChannels
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
const TkStripMeasurementDet * monoDet() const

◆ init()

void TkGluedMeasurementDet::init ( const MeasurementDet monoDet,
const MeasurementDet stereoDet,
const TrackerTopology tTopo 
)

Definition at line 72 of file TkGluedMeasurementDet.cc.

References monoDet(), stereoDet(), theMonoDet, theStereoDet, and theTopology.

Referenced by MeasurementTrackerImpl::initGluedDet().

74  {
75  theMonoDet = dynamic_cast<const TkStripMeasurementDet*>(monoDet);
76  theStereoDet = dynamic_cast<const TkStripMeasurementDet*>(stereoDet);
77  theTopology = tTopo;
78 
79  if ((theMonoDet == nullptr) || (theStereoDet == nullptr)) {
81  "TkGluedMeasurementDet ERROR: Trying to glue a det which is not a TkStripMeasurementDet");
82  }
83 }
const TkStripMeasurementDet * theMonoDet
const TkStripMeasurementDet * stereoDet() const
const TkStripMeasurementDet * theStereoDet
const TrackerTopology * theTopology
const TkStripMeasurementDet * monoDet() const

◆ isActive()

bool TkGluedMeasurementDet::isActive ( const MeasurementTrackerEvent data) const
inlineoverridevirtual

return TRUE if both mono and stereo components are active

Implements MeasurementDet.

Definition at line 45 of file TkGluedMeasurementDet.h.

References data, and MeasurementDet::isActive().

45  {
46  return monoDet()->isActive(data) && stereoDet()->isActive(data);
47  }
bool isActive(const MeasurementTrackerEvent &data) const override
Is this module active in reconstruction? It must be both &#39;setActiveThisEvent&#39; and &#39;setActive&#39;...
const TkStripMeasurementDet * stereoDet() const
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
const TkStripMeasurementDet * monoDet() const

◆ measurements()

bool TkGluedMeasurementDet::measurements ( const TrajectoryStateOnSurface stateOnThisDet,
const MeasurementEstimator est,
const MeasurementTrackerEvent data,
TempMeasurements result 
) const
overridevirtual

Implements MeasurementDet.

Definition at line 107 of file TkGluedMeasurementDet.cc.

References collectRecHits(), data, F(), MeasurementDet::fastGeomDet(), GeomDet::geographicalId(), MeasurementDet::geomDet(), TrajectoryStateOnSurface::globalMomentum(), TkStripMeasurementDet::hasAllGoodChannels(), TrajectoryStateOnSurface::hasError(), TkStripMeasurementDet::isActive(), MainPageGenerator::l, MeasurementEstimator::minPt2ForHitRecoveryInGluedDet(), PV3DBase< T, PVType, FrameType >::perp2(), mps_fire::result, DetId::subdetId(), GeomDet::surface(), testStrips(), theCPE, MeasurementDet::theInactiveHit, theMatcher, MeasurementDet::theMissingHit, theMonoDet, theStereoDet, theTopology, TrackerTopology::tobLayer(), and UNLIKELY.

110  {
112  // LogDebug("TkStripMeasurementDet") << " DetID " << geomDet().geographicalId().rawId() << " (glued) fully inactive";
113  result.add(theInactiveHit, 0.F);
114  return true;
115  }
116 
117  auto oldSize = result.size();
118 
119  HitCollectorForFastMeasurements collector(&fastGeomDet(), theMatcher, theCPE, stateOnThisDet, est, result);
120  collectRecHits(stateOnThisDet, data, collector);
121 
122  if (result.size() > oldSize)
123  return true;
124 
125  auto id = geomDet().geographicalId().subdetId() - 3;
126  auto l = theTopology->tobLayer(geomDet().geographicalId());
127  bool killHIP = (1 == l) && (2 == id); //TOB1
128  killHIP &= stateOnThisDet.globalMomentum().perp2() > est.minPt2ForHitRecoveryInGluedDet();
129  if (killHIP) {
130  result.add(theInactiveHit, 0.F);
131  return true;
132  }
133 
134  //LogDebug("TkStripMeasurementDet") << "No hit found on TkGlued. Testing strips... ";
135  const BoundPlane& gluedPlane = geomDet().surface();
136  if ( // sorry for the big IF, but I want to exploit short-circuiting of logic
137  stateOnThisDet.hasError() &&
138  (/* do this only if the state has uncertainties, otherwise it will throw
139  (states without uncertainties are passed to this code from seeding */
140  (theMonoDet->isActive(data) &&
141  (theMonoDet->hasAllGoodChannels() || testStrips(stateOnThisDet, gluedPlane, *theMonoDet))) /*Mono OK*/
142  && // was ||
144  (theStereoDet->hasAllGoodChannels() || testStrips(stateOnThisDet, gluedPlane, *theStereoDet))) /*Stereo OK*/
145  ) /* State has errors */
146  ) {
147  result.add(theMissingHit, 0.F);
148  return false;
149  }
150  result.add(theInactiveHit, 0.F);
151  return true;
152 }
void collectRecHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data, Collector &coll) const
const TkStripMeasurementDet * theMonoDet
unsigned int tobLayer(const DetId &id) const
bool isActive(const MeasurementTrackerEvent &data) const override
Is this module active in reconstruction? It must be both &#39;setActiveThisEvent&#39; and &#39;setActive&#39;...
virtual const GeomDet & geomDet() const
TrackingRecHit::ConstRecHitPointer theMissingHit
bool hasAllGoodChannels() const
does this module have at least one bad strip, APV or channel?
float minPt2ForHitRecoveryInGluedDet() const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
const SiStripRecHitMatcher * theMatcher
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrackingRecHit::ConstRecHitPointer theInactiveHit
const GeomDet & fastGeomDet() const
const TkStripMeasurementDet * theStereoDet
GlobalVector globalMomentum() const
T perp2() const
Definition: PV3DBase.h:68
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
const TrackerTopology * theTopology
#define UNLIKELY(x)
Definition: Likely.h:21
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
const StripClusterParameterEstimator * theCPE
bool testStrips(const TrajectoryStateOnSurface &tsos, const BoundPlane &gluedPlane, const TkStripMeasurementDet &mdet) const
Test the strips on one of the two dets with projection.

◆ monoDet()

const TkStripMeasurementDet* TkGluedMeasurementDet::monoDet ( ) const
inline

Definition at line 39 of file TkGluedMeasurementDet.h.

Referenced by init().

39 { return theMonoDet; }
const TkStripMeasurementDet * theMonoDet

◆ projectOnGluedDet() [1/6]

TkGluedMeasurementDet::RecHitContainer TkGluedMeasurementDet::projectOnGluedDet ( const std::vector< SiStripRecHit2D > &  hits,
const TrajectoryStateOnSurface ts 
) const
private

Definition at line 316 of file TkGluedMeasurementDet.cc.

References runTheMatrix::const, MeasurementDet::fastGeomDet(), TrajectoryStateOnSurface::globalParameters(), hfClusterShapes_cfi::hits, GlobalTrajectoryParameters::momentum(), eostools::move(), mps_fire::result, and theCPE.

Referenced by collectRecHits().

317  {
319  for (auto const& hit : hits) {
320  auto&& vl = projectedPos(hit, fastGeomDet(), ts.globalParameters().momentum(), theCPE);
321  auto&& phit = std::make_shared<ProjectedSiStripRecHit2D>(
322  vl.first, vl.second, fastGeomDet(), static_cast<SiStripRecHit2D const&>(hit));
323  result.push_back(std::move(phit));
324  }
325  return result;
326 }
const GlobalTrajectoryParameters & globalParameters() const
const GeomDet & fastGeomDet() const
TrackingRecHit::ConstRecHitContainer RecHitContainer
const StripClusterParameterEstimator * theCPE
def move(src, dest)
Definition: eostools.py:511

◆ projectOnGluedDet() [2/6]

template<typename HitCollector >
void TkGluedMeasurementDet::projectOnGluedDet ( HitCollector &  collector,
const std::vector< SiStripRecHit2D > &  hits,
const GlobalVector gdir 
) const
private

◆ projectOnGluedDet() [3/6]

TkGluedMeasurementDet::RecHitContainer TkGluedMeasurementDet::projectOnGluedDet ( const RecHitContainer hits,
const TrajectoryStateOnSurface ts 
) const
private

Definition at line 295 of file TkGluedMeasurementDet.cc.

References runTheMatrix::const, MeasurementDet::fastGeomDet(), TrajectoryStateOnSurface::globalParameters(), hfClusterShapes_cfi::hits, GlobalTrajectoryParameters::momentum(), eostools::move(), mps_fire::result, and theCPE.

296  {
298  for (auto const& hit : hits) {
299  auto&& vl = projectedPos(*hit, fastGeomDet(), ts.globalParameters().momentum(), theCPE);
300  auto&& phit = std::make_shared<ProjectedSiStripRecHit2D>(
301  vl.first, vl.second, fastGeomDet(), static_cast<SiStripRecHit2D const&>(*hit));
302  result.push_back(std::move(phit));
303  }
304  return result;
305 }
const GlobalTrajectoryParameters & globalParameters() const
const GeomDet & fastGeomDet() const
TrackingRecHit::ConstRecHitContainer RecHitContainer
const StripClusterParameterEstimator * theCPE
def move(src, dest)
Definition: eostools.py:511

◆ projectOnGluedDet() [4/6]

template<typename HitCollector >
void TkGluedMeasurementDet::projectOnGluedDet ( HitCollector &  collector,
const RecHitContainer hits,
const GlobalVector gdir 
) const
private

◆ projectOnGluedDet() [5/6]

template<typename Collector >
void TkGluedMeasurementDet::projectOnGluedDet ( Collector &  collector,
const RecHitContainer hits,
const GlobalVector gdir 
) const

Definition at line 308 of file TkGluedMeasurementDet.cc.

References hfClusterShapes_cfi::hits.

310  {
311  for (RecHitContainer::const_iterator ihit = hits.begin(); ihit != hits.end(); ihit++) {
312  collector.addProjected(**ihit, gdir);
313  }
314 }

◆ projectOnGluedDet() [6/6]

template<typename Collector >
void TkGluedMeasurementDet::projectOnGluedDet ( Collector &  collector,
std::vector< SiStripRecHit2D > const &  hits,
const GlobalVector gdir 
) const

Definition at line 329 of file TkGluedMeasurementDet.cc.

References hfClusterShapes_cfi::hits.

331  {
332  for (auto const& hit : hits)
333  collector.addProjected(hit, gdir);
334 }

◆ rawId()

unsigned int TkGluedMeasurementDet::rawId ( ) const
inline

Definition at line 42 of file TkGluedMeasurementDet.h.

References MeasurementDet::fastGeomDet(), and GeomDet::geographicalId().

42 { return fastGeomDet().geographicalId(); }
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
const GeomDet & fastGeomDet() const

◆ recHits() [1/2]

TkGluedMeasurementDet::RecHitContainer TkGluedMeasurementDet::recHits ( const TrajectoryStateOnSurface ts,
const MeasurementTrackerEvent data 
) const
overridevirtual

Implements MeasurementDet.

Definition at line 85 of file TkGluedMeasurementDet.cc.

References collectRecHits(), data, MeasurementDet::fastGeomDet(), mps_fire::result, theCPE, and theMatcher.

86  {
88  HitCollectorForRecHits collector(&fastGeomDet(), theMatcher, theCPE, result);
89  collectRecHits(ts, data, collector);
90  return result;
91 }
void collectRecHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data, Collector &coll) const
const SiStripRecHitMatcher * theMatcher
const GeomDet & fastGeomDet() const
TrackingRecHit::ConstRecHitContainer RecHitContainer
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
const StripClusterParameterEstimator * theCPE

◆ recHits() [2/2]

bool TkGluedMeasurementDet::recHits ( SimpleHitContainer result,
const TrajectoryStateOnSurface stateOnThisDet,
const MeasurementEstimator est,
const MeasurementTrackerEvent data 
) const
overridevirtual

Reimplemented from MeasurementDet.

Definition at line 94 of file TkGluedMeasurementDet.cc.

References collectRecHits(), data, MeasurementDet::fastGeomDet(), TkStripMeasurementDet::isActive(), mps_fire::result, theCPE, theMatcher, theMonoDet, theStereoDet, and UNLIKELY.

97  {
99  return false;
100  auto oldSize = result.size();
101  HitCollectorForSimpleHits collector(&fastGeomDet(), theMatcher, theCPE, stateOnThisDet, est, result);
102  collectRecHits(stateOnThisDet, data, collector);
103 
104  return result.size() > oldSize;
105 }
void collectRecHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data, Collector &coll) const
const TkStripMeasurementDet * theMonoDet
bool isActive(const MeasurementTrackerEvent &data) const override
Is this module active in reconstruction? It must be both &#39;setActiveThisEvent&#39; and &#39;setActive&#39;...
const SiStripRecHitMatcher * theMatcher
const GeomDet & fastGeomDet() const
const TkStripMeasurementDet * theStereoDet
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
#define UNLIKELY(x)
Definition: Likely.h:21
const StripClusterParameterEstimator * theCPE

◆ specificGeomDet()

const GluedGeomDet& TkGluedMeasurementDet::specificGeomDet ( ) const
inline

Definition at line 32 of file TkGluedMeasurementDet.h.

References runTheMatrix::const, and MeasurementDet::fastGeomDet().

Referenced by collectRecHits(), and MeasurementTrackerImpl::initGluedDet().

32 { return static_cast<GluedGeomDet const&>(fastGeomDet()); }
const GeomDet & fastGeomDet() const

◆ stereoDet()

const TkStripMeasurementDet* TkGluedMeasurementDet::stereoDet ( ) const
inline

Definition at line 40 of file TkGluedMeasurementDet.h.

Referenced by init().

40 { return theStereoDet; }
const TkStripMeasurementDet * theStereoDet

◆ testStrips()

bool TkGluedMeasurementDet::testStrips ( const TrajectoryStateOnSurface tsos,
const BoundPlane gluedPlane,
const TkStripMeasurementDet mdet 
) const
private

Test the strips on one of the two dets with projection.

Definition at line 373 of file TkGluedMeasurementDet.cc.

References dumpMFGeometry_cfg::delta, submitPVResolutionJobs::err, MeasurementDet::fastGeomDet(), TrajectoryStateOnSurface::globalParameters(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::localError(), Topology::measurementError(), Topology::measurementPosition(), GlobalTrajectoryParameters::momentum(), LocalTrajectoryError::positionError(), TkStripMeasurementDet::specificGeomDet(), StripGeomDetUnit::specificTopology(), mathSSE::sqrt(), GeomDet::surface(), TkStripMeasurementDet::testStrips(), MeasurementError::uu(), PV2DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by measurements().

375  {
376  // from TrackingRecHitProjector
377  const GeomDet& det = mdet.fastGeomDet();
378  const BoundPlane& stripPlane = det.surface();
379 
380  //LocalPoint glp = tsos.localPosition();
382  /*LogDebug("TkStripMeasurementDet") <<
383  "Testing local pos glued: " << glp <<
384  " local err glued: " << tsos.localError().positionError() <<
385  " in? " << gluedPlane.bounds().inside(glp) <<
386  " in(3s)? " << gluedPlane.bounds().inside(glp, err, 3.0f);*/
387 
388  GlobalVector gdir = tsos.globalParameters().momentum();
389 
390  LocalPoint slp = stripPlane.toLocal(tsos.globalPosition());
391  LocalVector sld = stripPlane.toLocal(gdir);
392 
393  double delta = stripPlane.localZ(tsos.globalPosition());
394  LocalPoint pos = slp - sld * delta / sld.z();
395 
396  // now the error
397  LocalVector hitXAxis = stripPlane.toLocal(gluedPlane.toGlobal(LocalVector(1, 0, 0)));
398  if (stripPlane.normalVector().dot(gluedPlane.normalVector()) < 0) {
399  // the two planes are inverted, and the correlation element must change sign
400  err = LocalError(err.xx(), -err.xy(), err.yy());
401  }
402  LocalError rotatedError = err.rotate(hitXAxis.x(), hitXAxis.y());
403 
404  /* // This is probably meaningless
405  LogDebug("TkStripMeasurementDet") <<
406  "Testing local pos on strip (SLP): " << slp <<
407  " in? :" << stripPlane.bounds().inside(slp) <<
408  " in(3s)? :" << stripPlane.bounds().inside(slp, rotatedError, 3.0f);
409  // but it helps to test bugs in the formula for POS */
410  /*LogDebug("TkStripMeasurementDet") <<
411  "Testing local pos strip: " << pos <<
412  " in? " << stripPlane.bounds().inside(pos) <<
413  " in(3s)? " << stripPlane.bounds().inside(pos, rotatedError, 3.0f);*/
414 
415  // now we need to convert to MeasurementFrame
416  const StripTopology& topo = mdet.specificGeomDet().specificTopology();
417  float utraj = topo.measurementPosition(pos).x();
418  float uerr = std::sqrt(topo.measurementError(pos, rotatedError).uu());
419  return mdet.testStrips(utraj, uerr);
420 }
float uu() const
bool testStrips(float utraj, float uerr) const
return true if there are &#39;enough&#39; good strips in the utraj +/- 3 uerr range.
const StripGeomDetUnit & specificGeomDet() const
const LocalTrajectoryError & localError() const
T z() const
Definition: PV3DBase.h:61
const GlobalTrajectoryParameters & globalParameters() const
T x() const
Definition: PV2DBase.h:43
LocalError positionError() const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
GlobalPoint globalPosition() const
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
T sqrt(T t)
Definition: SSEVec.h:19
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
const GeomDet & fastGeomDet() const

Member Data Documentation

◆ theCPE

const StripClusterParameterEstimator* TkGluedMeasurementDet::theCPE
private

◆ theMatcher

const SiStripRecHitMatcher* TkGluedMeasurementDet::theMatcher
private

Definition at line 55 of file TkGluedMeasurementDet.h.

Referenced by collectRecHits(), measurements(), and recHits().

◆ theMonoDet

const TkStripMeasurementDet* TkGluedMeasurementDet::theMonoDet
private

Definition at line 57 of file TkGluedMeasurementDet.h.

Referenced by collectRecHits(), init(), measurements(), and recHits().

◆ theStereoDet

const TkStripMeasurementDet* TkGluedMeasurementDet::theStereoDet
private

Definition at line 58 of file TkGluedMeasurementDet.h.

Referenced by collectRecHits(), init(), measurements(), and recHits().

◆ theTopology

const TrackerTopology* TkGluedMeasurementDet::theTopology
private

Definition at line 59 of file TkGluedMeasurementDet.h.

Referenced by init(), and measurements().