From 94df6faa60daf53d7c80b94544d689943233bab3 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 17 Sep 2017 15:30:42 +0200 Subject: [PATCH 01/12] missing only if well inside for pt>0.9 --- .../MeasurementDet/src/LayerMeasurements.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/TrackingTools/MeasurementDet/src/LayerMeasurements.cc b/TrackingTools/MeasurementDet/src/LayerMeasurements.cc index 882c417ae182e..3f3e926dbb025 100644 --- a/TrackingTools/MeasurementDet/src/LayerMeasurements.cc +++ b/TrackingTools/MeasurementDet/src/LayerMeasurements.cc @@ -192,7 +192,15 @@ void LayerMeasurements::addInvalidMeas( vector& measVec, } else if (!group.empty()) { // invalid state on first compatible Det - measVec.emplace_back(group.front().trajectoryState(), - std::make_shared(*group.front().det(), TrackingRecHit::missing), 0.,&layer); + auto const & ts = group.front().trajectoryState(); + if (ts.globalMomentum().perp2()<0.81f || + group.front().det()->surface().bounds().inside(ts.localPosition(), + ts.localError().positionError(),-3)) + measVec.emplace_back(group.front().trajectoryState(), + std::make_shared(*group.front().det(), TrackingRecHit::missing), 0.,&layer); + else + measVec.emplace_back(group.front().trajectoryState(), + std::make_shared(*group.front().det(), TrackingRecHit::inactive), 0.,&layer); + } } From 8bf877b16c1159196ef1de87ef87bd2fcda5686c Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Tue, 19 Sep 2017 11:12:47 +0200 Subject: [PATCH 02/12] compute and use howmuchinside --- DataFormats/GeometrySurface/interface/Bounds.h | 2 ++ .../interface/RectangularPlaneBounds.h | 3 +++ .../interface/TrapezoidalPlaneBounds.h | 3 +++ .../src/RectangularPlaneBounds.cc | 6 ++++++ .../src/TrapezoidalPlaneBounds.cc | 9 +++++++++ .../MeasurementDet/src/LayerMeasurements.cc | 16 ++++++---------- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/DataFormats/GeometrySurface/interface/Bounds.h b/DataFormats/GeometrySurface/interface/Bounds.h index dde787fe6e9a3..e7279552b12d1 100644 --- a/DataFormats/GeometrySurface/interface/Bounds.h +++ b/DataFormats/GeometrySurface/interface/Bounds.h @@ -65,6 +65,8 @@ class Bounds { return inside( Local3DPoint(p.x(), p.y(), 0), err, scale); } + virtual float howMuchInside(const Local3DPoint&, const LocalError&) const; + virtual Bounds* clone() const = 0; std::pair const & phiSpan() const { return m_span.phiSpan(); } diff --git a/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h b/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h index 789b2ed22ffc1..6181d92ab2471 100644 --- a/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h +++ b/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h @@ -55,6 +55,9 @@ class RectangularPlaneBounds final : public Bounds { virtual bool inside( const Local2DPoint& p, const LocalError& err, float scale=1.f) const; + float howMuchInside(const Local3DPoint&, const LocalError&) const; + + // compatible of being inside or outside... std::pair inout( const Local3DPoint& p, const LocalError& err, float scale=1.f) const; diff --git a/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h b/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h index abf6bdfe569a6..fe5926d8b3339 100644 --- a/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h +++ b/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h @@ -51,6 +51,9 @@ class TrapezoidalPlaneBounds /* final */ : public Bounds { virtual bool inside( const Local2DPoint& p, const LocalError& err, float scale) const; + float howMuchInside(const Local3DPoint&, const LocalError&) const; + + /** 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! diff --git a/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc b/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc index f871a835eedf0..893dc81a7b10a 100644 --- a/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc +++ b/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc @@ -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::howMuchInside(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 RectangularPlaneBounds::inout( const Local3DPoint& p, const LocalError& err, float scale) const { float xl = std::abs(p.x()) - std::sqrt(err.xx())*scale; diff --git a/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc b/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc index 424e6e853a728..105945a0ce224 100644 --- a/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc +++ b/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc @@ -44,6 +44,15 @@ bool TrapezoidalPlaneBounds::inside( const Local2DPoint& p, const LocalError& er return Bounds::inside(p,err,scale); } +float TrapezoidalPlaneBounds::howMuchInside(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.yy()) + ); +} + + + Bounds* TrapezoidalPlaneBounds::clone() const { return new TrapezoidalPlaneBounds(*this); } diff --git a/TrackingTools/MeasurementDet/src/LayerMeasurements.cc b/TrackingTools/MeasurementDet/src/LayerMeasurements.cc index 3f3e926dbb025..52f213d8ce5c6 100644 --- a/TrackingTools/MeasurementDet/src/LayerMeasurements.cc +++ b/TrackingTools/MeasurementDet/src/LayerMeasurements.cc @@ -186,21 +186,17 @@ void LayerMeasurements::addInvalidMeas( vector& 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().howMuchInside(ts.localPosition(),ts.localError().positionError()); measVec.emplace_back(measVec.front().predictedState(), - std::make_shared(*measVec.front().recHit()->det(), TrackingRecHit::missing), - 0.,&layer); + std::make_shared(*measVec.front().recHitR().det(), TrackingRecHit::missing), + toll,&layer); } else if (!group.empty()) { // invalid state on first compatible Det auto const & ts = group.front().trajectoryState(); - if (ts.globalMomentum().perp2()<0.81f || - group.front().det()->surface().bounds().inside(ts.localPosition(), - ts.localError().positionError(),-3)) + auto toll = group.front().det()->surface().bounds().howMuchInside(ts.localPosition(),ts.localError().positionError()); measVec.emplace_back(group.front().trajectoryState(), - std::make_shared(*group.front().det(), TrackingRecHit::missing), 0.,&layer); - else - measVec.emplace_back(group.front().trajectoryState(), - std::make_shared(*group.front().det(), TrackingRecHit::inactive), 0.,&layer); - + std::make_shared(*group.front().det(), TrackingRecHit::missing), toll,&layer); } } From 7f66ab0068810472a9ae2281d6773ce487b2ea30 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Mon, 30 Oct 2017 12:06:32 +0100 Subject: [PATCH 03/12] default implementation --- DataFormats/GeometrySurface/src/Bounds.cc | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 DataFormats/GeometrySurface/src/Bounds.cc diff --git a/DataFormats/GeometrySurface/src/Bounds.cc b/DataFormats/GeometrySurface/src/Bounds.cc new file mode 100644 index 0000000000000..664d94c86ee64 --- /dev/null +++ b/DataFormats/GeometrySurface/src/Bounds.cc @@ -0,0 +1,7 @@ +#include "DataFormats/GeometrySurface/interface/Bounds.h" +#include "DataFormats/GeometrySurface/interface/GeomExceptions.h" + +float Bounds::howMuchInside(const Local3DPoint&, const LocalError&) const { + throw GeometryError("howMuchInside not implemented"); +} + From 26ab6f04d3a466c5d16cc37ddb1a79011e4894c1 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Mon, 30 Oct 2017 16:22:29 +0100 Subject: [PATCH 04/12] fix error in trap --- DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc b/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc index 105945a0ce224..b47a1edbb741d 100644 --- a/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc +++ b/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc @@ -47,7 +47,7 @@ bool TrapezoidalPlaneBounds::inside( const Local2DPoint& p, const LocalError& er float TrapezoidalPlaneBounds::howMuchInside(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.yy()) + (std::abs(p.x())-tan_a*std::abs(p.y()+offset))/std::sqrt(err.xx()) ); } From 3b727252d8d8b376a49eb232fd196fe77da35064 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Fri, 3 Nov 2017 10:37:32 +0100 Subject: [PATCH 05/12] code check --- DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h | 2 +- DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h b/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h index b2288c6d7c809..98a11cb17a5d5 100644 --- a/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h +++ b/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h @@ -55,7 +55,7 @@ class RectangularPlaneBounds final : public Bounds { bool inside( const Local2DPoint& p, const LocalError& err, float scale=1.f) const override; - float howMuchInside(const Local3DPoint&, const LocalError&) const; + float howMuchInside(const Local3DPoint&, const LocalError&) const override; // compatible of being inside or outside... diff --git a/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h b/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h index 7eb9270545d27..5108cfd015005 100644 --- a/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h +++ b/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h @@ -51,7 +51,7 @@ class TrapezoidalPlaneBounds /* final */ : public Bounds { bool inside( const Local2DPoint& p, const LocalError& err, float scale) const override; - float howMuchInside(const Local3DPoint&, const LocalError&) const; + float howMuchInside(const Local3DPoint&, const LocalError&) const override; /** returns the 4 parameters needed for construction, in the order From 77e86dfe2102b38f5a9208b29b4da90a51b093ab Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:16:16 +0100 Subject: [PATCH 06/12] Update Bounds.h --- DataFormats/GeometrySurface/interface/Bounds.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/interface/Bounds.h b/DataFormats/GeometrySurface/interface/Bounds.h index e7279552b12d1..06f4f0d5f6ce7 100644 --- a/DataFormats/GeometrySurface/interface/Bounds.h +++ b/DataFormats/GeometrySurface/interface/Bounds.h @@ -65,7 +65,7 @@ class Bounds { return inside( Local3DPoint(p.x(), p.y(), 0), err, scale); } - virtual float howMuchInside(const Local3DPoint&, const LocalError&) const; + virtual float significanceInside(const Local3DPoint&, const LocalError&) const; virtual Bounds* clone() const = 0; From 5cff60b0b881c9ec1220f5b2d53158472f2cbe6a Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:16:41 +0100 Subject: [PATCH 07/12] Update RectangularPlaneBounds.h --- DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h b/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h index 98a11cb17a5d5..30e2ad24d87e2 100644 --- a/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h +++ b/DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h @@ -55,7 +55,7 @@ class RectangularPlaneBounds final : public Bounds { bool inside( const Local2DPoint& p, const LocalError& err, float scale=1.f) const override; - float howMuchInside(const Local3DPoint&, const LocalError&) const override; + float significanceInside(const Local3DPoint&, const LocalError&) const override; // compatible of being inside or outside... From fb5a583c12764bd479bff49b222f67f5f10797a5 Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:18:08 +0100 Subject: [PATCH 08/12] Update TrapezoidalPlaneBounds.h --- DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h b/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h index 5108cfd015005..928106c2db1b8 100644 --- a/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h +++ b/DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h @@ -51,7 +51,7 @@ class TrapezoidalPlaneBounds /* final */ : public Bounds { bool inside( const Local2DPoint& p, const LocalError& err, float scale) const override; - float howMuchInside(const Local3DPoint&, const LocalError&) const override; + float significanceInside(const Local3DPoint&, const LocalError&) const override; /** returns the 4 parameters needed for construction, in the order From 79b684d5b884a8c64f45b844112ec189b388645b Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:18:25 +0100 Subject: [PATCH 09/12] Update Bounds.cc --- DataFormats/GeometrySurface/src/Bounds.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/src/Bounds.cc b/DataFormats/GeometrySurface/src/Bounds.cc index 664d94c86ee64..2db2f1f9b8543 100644 --- a/DataFormats/GeometrySurface/src/Bounds.cc +++ b/DataFormats/GeometrySurface/src/Bounds.cc @@ -1,7 +1,7 @@ #include "DataFormats/GeometrySurface/interface/Bounds.h" #include "DataFormats/GeometrySurface/interface/GeomExceptions.h" -float Bounds::howMuchInside(const Local3DPoint&, const LocalError&) const { +float Bounds::significanceInside(const Local3DPoint&, const LocalError&) const { throw GeometryError("howMuchInside not implemented"); } From 5b02fe39abb947ccd921b08c9e6500ef2d8c097b Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:18:47 +0100 Subject: [PATCH 10/12] Update RectangularPlaneBounds.cc --- DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc b/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc index 893dc81a7b10a..78f7396a9aa0a 100644 --- a/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc +++ b/DataFormats/GeometrySurface/src/RectangularPlaneBounds.cc @@ -25,7 +25,7 @@ bool RectangularPlaneBounds::inside( const Local2DPoint& p, const LocalError& er (std::abs(p.y()) < halfLength + std::sqrt(err.yy())*scale); } -float RectangularPlaneBounds::howMuchInside(const Local3DPoint& p, const LocalError& err) const { +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()) ); From 2283fa4ccac0a3a281181f60c53ec120db2e472b Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:19:06 +0100 Subject: [PATCH 11/12] Update TrapezoidalPlaneBounds.cc --- DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc b/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc index b47a1edbb741d..c8eb88bf08d49 100644 --- a/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc +++ b/DataFormats/GeometrySurface/src/TrapezoidalPlaneBounds.cc @@ -44,7 +44,7 @@ bool TrapezoidalPlaneBounds::inside( const Local2DPoint& p, const LocalError& er return Bounds::inside(p,err,scale); } -float TrapezoidalPlaneBounds::howMuchInside(const Local3DPoint& p, const LocalError& err) const { +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()) From c83121b950ac5333d96ecd6bafce9f0f31c03feb Mon Sep 17 00:00:00 2001 From: Vincenzo Innocente Date: Sun, 12 Nov 2017 13:20:27 +0100 Subject: [PATCH 12/12] Update LayerMeasurements.cc --- TrackingTools/MeasurementDet/src/LayerMeasurements.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TrackingTools/MeasurementDet/src/LayerMeasurements.cc b/TrackingTools/MeasurementDet/src/LayerMeasurements.cc index 52f213d8ce5c6..2834c0dd7b809 100644 --- a/TrackingTools/MeasurementDet/src/LayerMeasurements.cc +++ b/TrackingTools/MeasurementDet/src/LayerMeasurements.cc @@ -187,7 +187,7 @@ void LayerMeasurements::addInvalidMeas( vector& 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().howMuchInside(ts.localPosition(),ts.localError().positionError()); + auto toll = measVec.front().recHitR().det()->surface().bounds().significanceInside(ts.localPosition(),ts.localError().positionError()); measVec.emplace_back(measVec.front().predictedState(), std::make_shared(*measVec.front().recHitR().det(), TrackingRecHit::missing), toll,&layer); @@ -195,7 +195,7 @@ void LayerMeasurements::addInvalidMeas( vector& measVec, else if (!group.empty()) { // invalid state on first compatible Det auto const & ts = group.front().trajectoryState(); - auto toll = group.front().det()->surface().bounds().howMuchInside(ts.localPosition(),ts.localError().positionError()); + auto toll = group.front().det()->surface().bounds().significanceInside(ts.localPosition(),ts.localError().positionError()); measVec.emplace_back(group.front().trajectoryState(), std::make_shared(*group.front().det(), TrackingRecHit::missing), toll,&layer); }