Skip to content

Commit

Permalink
Merge pull request #21147 from VinInn/HowMuchInside
Browse files Browse the repository at this point in the history
Add method to return the significance of a track inside a Det
  • Loading branch information
cmsbuild committed Nov 15, 2017
2 parents c620eaf + c83121b commit c900841
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 4 deletions.
2 changes: 2 additions & 0 deletions DataFormats/GeometrySurface/interface/Bounds.h
Expand Up @@ -65,6 +65,8 @@ class Bounds {
return inside( Local3DPoint(p.x(), p.y(), 0), err, scale);
}

virtual float significanceInside(const Local3DPoint&, const LocalError&) const;

virtual Bounds* clone() const = 0;

std::pair<float,float> const & phiSpan() const { return m_span.phiSpan(); }
Expand Down
Expand Up @@ -55,6 +55,9 @@ class RectangularPlaneBounds final : public Bounds {

bool inside( const Local2DPoint& p, const LocalError& err, float scale=1.f) const override;

float significanceInside(const Local3DPoint&, const LocalError&) const override;


// compatible of being inside or outside...
std::pair<bool,bool> inout( const Local3DPoint& p, const LocalError& err, float scale=1.f) const;

Expand Down
Expand Up @@ -51,6 +51,9 @@ class TrapezoidalPlaneBounds /* final */ : public Bounds {

bool inside( const Local2DPoint& p, const LocalError& err, float scale) const override;

float significanceInside(const Local3DPoint&, const LocalError&) const override;


/** returns the 4 parameters needed for construction, in the order
* ( half bottom edge, half top edge, half thickness, half apothem).
* Beware! This order is different from the one in the constructor!
Expand Down
7 changes: 7 additions & 0 deletions DataFormats/GeometrySurface/src/Bounds.cc
@@ -0,0 +1,7 @@
#include "DataFormats/GeometrySurface/interface/Bounds.h"
#include "DataFormats/GeometrySurface/interface/GeomExceptions.h"

float Bounds::significanceInside(const Local3DPoint&, const LocalError&) const {
throw GeometryError("howMuchInside not implemented");
}

6 changes: 6 additions & 0 deletions DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc
Expand Up @@ -25,6 +25,12 @@ bool RectangularPlaneBounds::inside( const Local2DPoint& p, const LocalError& er
(std::abs(p.y()) < halfLength + std::sqrt(err.yy())*scale);
}

float RectangularPlaneBounds::significanceInside(const Local3DPoint& p, const LocalError& err) const {
return std::max((std::abs(p.x()) - halfWidth )/std::sqrt(err.xx()),
(std::abs(p.y()) - halfLength)/std::sqrt(err.yy())
);
}


std::pair<bool,bool> RectangularPlaneBounds::inout( const Local3DPoint& p, const LocalError& err, float scale) const {
float xl = std::abs(p.x()) - std::sqrt(err.xx())*scale;
Expand Down
9 changes: 9 additions & 0 deletions DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc
Expand Up @@ -44,6 +44,15 @@ bool TrapezoidalPlaneBounds::inside( const Local2DPoint& p, const LocalError& er
return Bounds::inside(p,err,scale);
}

float TrapezoidalPlaneBounds::significanceInside(const Local3DPoint& p, const LocalError& err) const {
return std::max(
(std::abs(p.y())-hapothem)/std::sqrt(err.yy()),
(std::abs(p.x())-tan_a*std::abs(p.y()+offset))/std::sqrt(err.xx())
);
}



Bounds* TrapezoidalPlaneBounds::clone() const {
return new TrapezoidalPlaneBounds(*this);
}
Expand Down
12 changes: 8 additions & 4 deletions TrackingTools/MeasurementDet/src/LayerMeasurements.cc
Expand Up @@ -186,13 +186,17 @@ void LayerMeasurements::addInvalidMeas( vector<TrajectoryMeasurement>& measVec,
{
if (!measVec.empty()) {
// invalidMeas on Det of most compatible hit
auto const & ts = measVec.front().predictedState();
auto toll = measVec.front().recHitR().det()->surface().bounds().significanceInside(ts.localPosition(),ts.localError().positionError());
measVec.emplace_back(measVec.front().predictedState(),
std::make_shared<InvalidTrackingRecHit>(*measVec.front().recHit()->det(), TrackingRecHit::missing),
0.,&layer);
std::make_shared<InvalidTrackingRecHit>(*measVec.front().recHitR().det(), TrackingRecHit::missing),
toll,&layer);
}
else if (!group.empty()) {
// invalid state on first compatible Det
measVec.emplace_back(group.front().trajectoryState(),
std::make_shared<InvalidTrackingRecHit>(*group.front().det(), TrackingRecHit::missing), 0.,&layer);
auto const & ts = group.front().trajectoryState();
auto toll = group.front().det()->surface().bounds().significanceInside(ts.localPosition(),ts.localError().positionError());
measVec.emplace_back(group.front().trajectoryState(),
std::make_shared<InvalidTrackingRecHit>(*group.front().det(), TrackingRecHit::missing), toll,&layer);
}
}

0 comments on commit c900841

Please sign in to comment.