40 double delta = gluedPlane.localZ( hitPlane.position());
43 LocalPoint projectedHitPos = lhitPos - ldir * delta/ldir.
z();
47 if (gluedPlane.normalVector().dot( hitPlane.normalVector()) < 0) {
53 return std::make_pair(projectedHitPos, rotatedError);
58 std::pair<LocalPoint,LocalError> projectedPos(
const TrackingRecHit& hit,
62 return projectedPos(hit, det, gdir, cpe);
75 theMatcher(matcher), theCPE(cpe),
88 throw MeasurementDetException(
"TkGluedMeasurementDet ERROR: Trying to glue a det which is not a TkStripMeasurementDet");
108 auto oldSize = result.size();
112 return result.size()>oldSize;
130 auto oldSize = result.
size();
136 if (result.
size()>oldSize)
return true;
140 bool killHIP = (1==
l) && (2==
id);
178 template<
typename Collector>
185 template<
typename Collector>
199 if (monoHits.empty()) {
204 std::vector<SiStripRecHit2D> simpleSteroHitsByValue;
207 if (simpleSteroHitsByValue.empty()) {
213 vsStereoHits.resize(simpleSteroHitsByValue.size());
217 for (RecHitContainer::const_iterator monoHit = monoHits.begin();
218 monoHit != monoHits.end(); ++monoHit) {
221 theMatcher->
match( verySpecificMonoHit, vsStereoHits.begin(), vsStereoHits.end(),
224 if (collector.hasNewMatchedHits()) {
225 collector.clearNewMatchedHitsFlag();
227 collector.addProjected( **monoHit, glbDir );
271 if(fm!=0&&fs!=0) ++matchF;
272 if(fm!=0||fs!=0) ++singleF;
276 printf(
"Matches:%d/%d/%d/%d/%d/%d : %f/%f/%f/%f/%f/%f/%f\n",
277 int(totCall),
int(matchF),
int(singleF-matchF),
int(matchT),
int(zeroM),
int(zeroS),
278 totMono/totCall,totStereo/totCall,totComb/totCall,totMatched/matchT,
279 filtMono/totCall,filtStereo/totCall,filtComb/matchF);
301 for (
auto const & hit : hits) {
303 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,
fastGeomDet(),
static_cast<SiStripRecHit2D const &
>(*hit));
309 template<
typename Collector>
315 for ( RecHitContainer::const_iterator ihit = hits.begin(); ihit!=hits.end(); ihit++) {
316 collector.addProjected( **ihit, gdir );
325 for (
auto const & hit : hits) {
327 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,
fastGeomDet(),
static_cast<SiStripRecHit2D const &
>(hit));
333 template<
typename Collector>
336 std::vector<SiStripRecHit2D>
const & hits,
339 for (
auto const & hit : hits)
340 collector.addProjected(hit, gdir );
351 for (RecHitContainer::const_iterator
i=monoHits.begin();
i != monoHits.end(); ++
i) {
354 for (RecHitContainer::const_iterator
i=stereoHits.begin();
i != stereoHits.end(); ++
i) {
369 if ((projectedHit.localPosition()-propState.
localPosition()).
mag() > 0.0001f) {
370 std::cout <<
"PROBLEM: projected and propagated hit positions differ by " 371 << (projectedHit.localPosition()-propState.
localPosition()).
mag() << std::endl;
374 LocalError le1 = projectedHit.localPositionError();
379 fabs(le1.
xy() - le2.
xy())/(cutoff+fabs(le1.
xy()))),
380 fabs(le1.
yy() - le2.
yy())/(cutoff+le1.
xx()));
382 std::cout <<
"PROBLEM: projected and propagated hit errors differ by " 383 << maxdiff << std::endl;
415 if (stripPlane.normalVector().dot( gluedPlane.normalVector()) < 0) {
439 #include<boost/bind.hpp> 443 geomDet_(geomDet), matcher_(matcher), cpe_(cpe),target_(target),
468 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,*
geomDet_,
static_cast<SiStripRecHit2D const &
>(hit));
498 if ( diffEst.first) {
499 target_.emplace_back(phit.release());
542 auto && phit = std::make_shared<ProjectedSiStripRecHit2D> (vl.first,vl.second,*
geomDet_,
static_cast<SiStripRecHit2D const &
>(hit));
545 if ( diffEst.first) {
546 target_.add(phit, diffEst.second);
553 #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
const StripClusterParameterEstimator * cpe_
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
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
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
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
void init(const MeasurementDet *monoDet, const MeasurementDet *stereoDet, const TrackerTopology *tTopo)
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
const TrackerTopology * theTopology
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)
unsigned int tobLayer(const DetId &id) const
SimpleHitContainer & target_