Go to the documentation of this file.00001 #ifndef MeasurementDet_H
00002 #define MeasurementDet_H
00003
00004 #include "TrackingTools/MeasurementDet/interface/TempMeasurements.h"
00005
00006 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00007 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00008 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
00009
00010 #include "FWCore/Utilities/interface/GCC11Compatibility.h"
00011
00012 class TrajectoryStateOnSurface;
00013 class Propagator;
00014 class MeasurementEstimator;
00015
00016 class MeasurementDet {
00017 public:
00018 typedef tracking::TempMeasurements TempMeasurements;
00019 typedef TransientTrackingRecHit::ConstRecHitContainer RecHitContainer;
00020
00021 MeasurementDet( const GeomDet* gdet) : theGeomDet(gdet) {}
00022
00023 virtual RecHitContainer recHits( const TrajectoryStateOnSurface&) const = 0;
00024
00025
00026
00027 virtual bool recHits( const TrajectoryStateOnSurface& stateOnThisDet, const MeasurementEstimator&,
00028 RecHitContainer & result, std::vector<float> &) const {
00029 result = recHits(stateOnThisDet);
00030 return !result.empty();
00031 }
00032
00039 std::vector<TrajectoryMeasurement>
00040 fastMeasurements( const TrajectoryStateOnSurface& stateOnThisDet,
00041 const TrajectoryStateOnSurface&,
00042 const Propagator&,
00043 const MeasurementEstimator& est) const {
00044
00045 TempMeasurements tmps;
00046 measurements(stateOnThisDet, est, tmps);
00047 std::vector<TrajectoryMeasurement> result;
00048 result.reserve(tmps.size());
00049 int index[tmps.size()]; tmps.sortIndex(index);
00050 for (std::size_t i=0; i!=tmps.size(); ++i) {
00051 auto j=index[i];
00052 result.emplace_back(stateOnThisDet,std::move(tmps.hits[j]),tmps.distances[j]);
00053 }
00054 return result;
00055 }
00056
00057
00058 virtual bool measurements( const TrajectoryStateOnSurface& stateOnThisDet,
00059 const MeasurementEstimator& est,
00060 TempMeasurements & result) const =0;
00061
00062
00063 const GeomDet& fastGeomDet() const { return *theGeomDet;}
00064 virtual const GeomDet& geomDet() const { return *theGeomDet;}
00065
00066 const Surface& surface() const {return geomDet().surface();}
00067
00068 const Surface::PositionType& position() const {return geomDet().position();}
00069
00070 virtual bool isActive() const=0;
00071 virtual bool hasBadComponents(const TrajectoryStateOnSurface &tsos) const=0;
00072
00073 private:
00074
00075 const GeomDet* theGeomDet;
00076
00077 };
00078
00079
00080 #endif