41 double delta = gluedPlane.localZ( hitPlane.position());
44 LocalPoint projectedHitPos = lhitPos - ldir * delta/ldir.
z();
48 if (gluedPlane.normalVector().dot( hitPlane.normalVector()) < 0) {
54 return std::make_pair(projectedHitPos, rotatedError);
59 std::pair<LocalPoint,LocalError> projectedPos(
const TrackingRecHit& hit,
63 return projectedPos(hit, det, gdir, cpe);
76 theMatcher(matcher), theCPE(cpe),
86 throw MeasurementDetException(
"TkGluedMeasurementDet ERROR: Trying to glue a det which is not a TkStripMeasurementDet");
106 auto oldSize = result.size();
110 return result.size()>oldSize;
128 auto oldSize = result.
size();
134 if (result.
size()>oldSize)
return true;
138 bool killHIP = (1==
l) && (2==
id);
176 template<
typename Collector>
183 template<
typename Collector>
197 if (monoHits.empty()) {
202 std::vector<SiStripRecHit2D> simpleSteroHitsByValue;
205 if (simpleSteroHitsByValue.empty()) {
211 vsStereoHits.resize(simpleSteroHitsByValue.size());
215 for (RecHitContainer::const_iterator monoHit = monoHits.begin();
216 monoHit != monoHits.end(); ++monoHit) {
219 theMatcher->
match( verySpecificMonoHit, vsStereoHits.begin(), vsStereoHits.end(),
222 if (collector.hasNewMatchedHits()) {
223 collector.clearNewMatchedHitsFlag();
225 collector.addProjected( **monoHit, glbDir );
269 if(fm!=0&&fs!=0) ++matchF;
270 if(fm!=0||fs!=0) ++singleF;
274 printf(
"Matches:%d/%d/%d/%d/%d/%d : %f/%f/%f/%f/%f/%f/%f\n",
275 int(totCall),
int(matchF),
int(singleF-matchF),
int(matchT),
int(zeroM),
int(zeroS),
276 totMono/totCall,totStereo/totCall,totComb/totCall,totMatched/matchT,
277 filtMono/totCall,filtStereo/totCall,filtComb/matchF);
299 for (
auto const & hit : hits) {
301 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,
fastGeomDet(),
static_cast<SiStripRecHit2D const &
>(*hit));
307 template<
typename Collector>
313 for ( RecHitContainer::const_iterator ihit = hits.begin(); ihit!=hits.end(); ihit++) {
314 collector.addProjected( **ihit, gdir );
323 for (
auto const & hit : hits) {
325 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,
fastGeomDet(),
static_cast<SiStripRecHit2D const &
>(hit));
331 template<
typename Collector>
334 std::vector<SiStripRecHit2D>
const & hits,
337 for (
auto const & hit : hits)
338 collector.addProjected(hit, gdir );
349 for (RecHitContainer::const_iterator
i=monoHits.begin();
i != monoHits.end(); ++
i) {
352 for (RecHitContainer::const_iterator
i=stereoHits.begin();
i != stereoHits.end(); ++
i) {
367 if ((projectedHit.localPosition()-propState.
localPosition()).
mag() > 0.0001f) {
368 std::cout <<
"PROBLEM: projected and propagated hit positions differ by " 369 << (projectedHit.localPosition()-propState.
localPosition()).
mag() << std::endl;
372 LocalError le1 = projectedHit.localPositionError();
377 fabs(le1.
xy() - le2.
xy())/(cutoff+fabs(le1.
xy()))),
378 fabs(le1.
yy() - le2.
yy())/(cutoff+le1.
xx()));
380 std::cout <<
"PROBLEM: projected and propagated hit errors differ by " 381 << maxdiff << std::endl;
413 if (stripPlane.normalVector().dot( gluedPlane.normalVector()) < 0) {
437 #include<boost/bind.hpp> 441 geomDet_(geomDet), matcher_(matcher), cpe_(cpe),target_(target),
466 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,*
geomDet_,
static_cast<SiStripRecHit2D const &
>(hit));
496 if ( diffEst.first) {
497 target_.emplace_back(phit.release());
540 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,*
geomDet_,
static_cast<SiStripRecHit2D const &
>(hit));
543 if ( diffEst.first) {
544 target_.add(phit, diffEst.second);
551 #include "doubleMatch.icc"
virtual RecHitContainer recHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data) const
bool testStrips(const TrajectoryStateOnSurface &tsos, const BoundPlane &gluedPlane, const TkStripMeasurementDet &mdet) const
Test the strips on one of the two dets with projection.
const TkStripMeasurementDet * theMonoDet
void init(const MeasurementDet *monoDet, const MeasurementDet *stereoDet)
const StripClusterParameterEstimator * cpe_
unsigned int layer() const
layer id
void add(SiStripMatchedRecHit2D const &hit)
virtual bool preFilter(const TrajectoryStateOnSurface &, OpaquePayload const &) const
void checkProjection(const TrajectoryStateOnSurface &ts, const RecHitContainer &monoHits, const RecHitContainer &stereoHits) const
SiStripRecHitMatcher::Collector collector_
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
SiStripCluster const & monoCluster() const
LocalVector localDirection() const
LocalPoint localPosition() const
float minPt2ForHitRecoveryInGluedDet() const
virtual const GeomDet & geomDet() const
Global3DPoint GlobalPoint
const TrajectoryStateOnSurface & stateOnThisDet_
GlobalPoint globalPosition() const
void add(const std::vector< const T * > &source, std::vector< const T * > &dest)
const TkStripMeasurementDet * monoDet() const
void simpleRecHits(const TrajectoryStateOnSurface &ts, const MeasurementTrackerEvent &data, std::vector< SiStripRecHit2D > &result) const
const Surface & surface() const
void addProjected(const TrackingRecHit &hit, const GlobalVector &gdir)
virtual GlobalPoint globalPosition() const
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
const Plane & surface() const
The nominal surface of the GeomDet.
LocalError positionError() const
void addProjected(const TrackingRecHit &hit, const GlobalVector &gdir)
TkGluedMeasurementDet(const GluedGeomDet *gdet, const SiStripRecHitMatcher *matcher, const StripClusterParameterEstimator *cpe)
TrackingRecHit::ConstRecHitPointer theMissingHit
const GeomDet & fastGeomDet() const
RecHitContainer & target_
virtual RecHitContainer recHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data) const
TrajectoryStateOnSurface propagate(const TrackingRecHit &hit, const Plane &plane, const TrajectoryStateOnSurface &ts) const
virtual RecHitPointer cloneSH() const
const GeomDet * det() const
std::unique_ptr< SiStripMatchedRecHit2D > match(const SiStripRecHit2D *monoRH, const SiStripRecHit2D *stereoRH, const GluedGeomDet *gluedDet, LocalVector trackdirection, bool force) const
LocalPoint toLocal(const GlobalPoint &gp) const
void add(ConstRecHitPointer const &h, float d)
const GluedGeomDet & specificGeomDet() const
GlobalVector momentum() const
virtual MeasurementPoint measurementPosition(const LocalPoint &) const =0
virtual bool measurements(const TrajectoryStateOnSurface &stateOnThisDet, const MeasurementEstimator &est, const MeasurementTrackerEvent &data, TempMeasurements &result) const
DetId geographicalId() const
The label of this GeomDet.
HitCollectorForSimpleHits(const GeomDet *geomDet, const SiStripRecHitMatcher *matcher, const StripClusterParameterEstimator *cpe, const TrajectoryStateOnSurface &stateOnThisDet, const MeasurementEstimator &est, SimpleHitContainer &target)
const MeasurementEstimator & est_
const LocalTrajectoryError & localError() const
bool hasAllGoodChannels() const
does this module have at least one bad strip, APV or channel?
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
void collectRecHits(const TrajectoryStateOnSurface &, const MeasurementTrackerEvent &data, Collector &coll) const
const T * operator()(const T &val) const
const Surface::PositionType & position() const
void doubleMatch(const TrajectoryStateOnSurface &ts, const MeasurementTrackerEvent &data, Collector &collector) const
const SiStripRecHitMatcher * matcher_
void add(SiStripMatchedRecHit2D const &hit)
const StripClusterParameterEstimator * cpe_
const SiStripRecHitMatcher * theMatcher
virtual TrackingRecHit const * hit() const
RecHitContainer projectOnGluedDet(const std::vector< SiStripRecHit2D > &hits, const TrajectoryStateOnSurface &ts) const
HitCollectorForFastMeasurements(const GeomDet *geomDet, const SiStripRecHitMatcher *matcher, const StripClusterParameterEstimator *cpe, const TrajectoryStateOnSurface &stateOnThisDet, const MeasurementEstimator &est, TempMeasurements &target)
unsigned long long uint64_t
const GlobalTrajectoryParameters & globalParameters() const
std::vector< const SiStripRecHit2D * > SimpleHitCollection
TrackingRecHit::ConstRecHitPointer theInactiveHit
void checkHitProjection(const TrackingRecHit &hit, const TrajectoryStateOnSurface &ts, const GeomDet &det) const
bool isActive(const MeasurementTrackerEvent &data) const
Is this module active in reconstruction? It must be both 'setActiveThisEvent' and 'setActive'...
const TkStripMeasurementDet * theStereoDet
const StripGeomDetUnit & specificGeomDet() const
TrackingRecHit::ConstRecHitContainer RecHitContainer
SiStripCluster const & stereoCluster() const
std::vector< BaseTrackerRecHit * > SimpleHitContainer
void addProjected(const TrackingRecHit &hit, const GlobalVector &gdir)
char data[epos_bytes_allocation]
GlobalVector globalMomentum() const
bool testStrips(float utraj, float uerr) const
return true if there are 'enough' good strips in the utraj +/- 3 uerr range.
void add(SiStripMatchedRecHit2D const &hit)
virtual HitReturnType estimate(const TrajectoryStateOnSurface &ts, const TrackingRecHit &hit) const =0
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
const TkStripMeasurementDet * stereoDet() const
DetId geographicalId() const
virtual LocalError localPositionError() const =0
virtual MeasurementError measurementError(const LocalPoint &, const LocalError &) const =0
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
LocalError rotate(float x, float y) const
Return a new LocalError, rotated by an angle defined by the direction (x,y)
const SiStripRecHitMatcher * matcher_
const StripClusterParameterEstimator * theCPE
SiStripRecHitMatcher::Collector collector_
HitCollectorForRecHits(const GeomDet *geomDet, const SiStripRecHitMatcher *matcher, const StripClusterParameterEstimator *cpe, RecHitContainer &target)
SimpleHitContainer & target_