File indexing completed on 2024-04-06 12:31:33
0001 #ifndef MeasurementDet_H
0002 #define MeasurementDet_H
0003
0004 #include "TrackingTools/MeasurementDet/interface/TempMeasurements.h"
0005
0006 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0007 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
0008 #include "DataFormats/TrackerRecHit2D/interface/BaseTrackerRecHit.h"
0009 #include "DataFormats/TrackingRecHit/interface/InvalidTrackingRecHit.h"
0010
0011 class TrajectoryStateOnSurface;
0012 class Propagator;
0013 class MeasurementEstimator;
0014 class MeasurementTrackerEvent;
0015
0016 class MeasurementDet {
0017 public:
0018 typedef tracking::TempMeasurements TempMeasurements;
0019 typedef TrackingRecHit::ConstRecHitContainer RecHitContainer;
0020
0021 using SimpleHitContainer = std::vector<BaseTrackerRecHit*>;
0022
0023 MeasurementDet(const GeomDet* gdet)
0024 : theGeomDet(gdet),
0025 theMissingHit(std::make_shared<InvalidTrackingRecHit>(fastGeomDet(), TrackingRecHit::missing)),
0026 theInactiveHit(std::make_shared<InvalidTrackingRecHit>(fastGeomDet(), TrackingRecHit::inactive)) {}
0027
0028 virtual ~MeasurementDet() = default;
0029 virtual RecHitContainer recHits(const TrajectoryStateOnSurface&, const MeasurementTrackerEvent&) const = 0;
0030
0031
0032
0033 virtual bool recHits(const TrajectoryStateOnSurface& stateOnThisDet,
0034 const MeasurementEstimator&,
0035 const MeasurementTrackerEvent& data,
0036 RecHitContainer& result,
0037 std::vector<float>&) const {
0038 result = recHits(stateOnThisDet, data);
0039 return !result.empty();
0040 }
0041
0042
0043 virtual bool recHits(SimpleHitContainer& result,
0044 const TrajectoryStateOnSurface& stateOnThisDet,
0045 const MeasurementEstimator&,
0046 const MeasurementTrackerEvent& data) const {
0047 return false;
0048 }
0049
0050
0051
0052
0053
0054
0055
0056 std::vector<TrajectoryMeasurement> fastMeasurements(const TrajectoryStateOnSurface& stateOnThisDet,
0057 const TrajectoryStateOnSurface&,
0058 const Propagator&,
0059 const MeasurementEstimator& est,
0060 const MeasurementTrackerEvent& data) const {
0061 TempMeasurements tmps;
0062 measurements(stateOnThisDet, est, data, tmps);
0063 std::vector<TrajectoryMeasurement> result;
0064 result.reserve(tmps.size());
0065 int index[tmps.size()];
0066 tmps.sortIndex(index);
0067 for (std::size_t i = 0; i != tmps.size(); ++i) {
0068 auto j = index[i];
0069 result.emplace_back(stateOnThisDet, std::move(tmps.hits[j]), tmps.distances[j]);
0070 }
0071 return result;
0072 }
0073
0074
0075 virtual bool measurements(const TrajectoryStateOnSurface& stateOnThisDet,
0076 const MeasurementEstimator& est,
0077 const MeasurementTrackerEvent& data,
0078 TempMeasurements& result) const = 0;
0079
0080 const GeomDet& fastGeomDet() const { return *theGeomDet; }
0081 virtual const GeomDet& geomDet() const { return *theGeomDet; }
0082
0083 const Surface& surface() const { return geomDet().surface(); }
0084
0085 const Surface::PositionType& position() const { return geomDet().position(); }
0086
0087 virtual bool isActive(const MeasurementTrackerEvent& data) const = 0;
0088 virtual bool hasBadComponents(const TrajectoryStateOnSurface& tsos, const MeasurementTrackerEvent& data) const = 0;
0089
0090 private:
0091 const GeomDet* theGeomDet;
0092
0093 protected:
0094 TrackingRecHit::ConstRecHitPointer theMissingHit;
0095 TrackingRecHit::ConstRecHitPointer theInactiveHit;
0096 };
0097
0098 #endif