Go to the documentation of this file.00001 #ifndef DetLayers_GeometricSearchDet_h
00002 #define DetLayers_GeometricSearchDet_h
00003
00004 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00005 #include "DataFormats/GeometrySurface/interface/BoundSurface.h"
00006
00007 #include "TrackingTools/DetLayers/interface/DetGroup.h"
00008 #include "DataFormats/GeometrySurface/interface/Surface.h"
00009 #include "TrackingTools/DetLayers/interface/GeomDetCompatibilityChecker.h"
00010
00011 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00012
00013 #include <vector>
00014
00015 #include "FWCore/Utilities/interface/GCC11Compatibility.h"
00016
00017 class MeasurementEstimator;
00018
00019 class GeometricSearchDet {
00020 public:
00021 typedef std::pair<const GeomDet*,TrajectoryStateOnSurface> DetWithState;
00022 typedef BoundSurface::PositionType PositionType;
00023 typedef BoundSurface::RotationType RotationType;
00024 typedef TrajectoryStateOnSurface TrajectoryState;
00025
00026 GeometricSearchDet() : theCompatibilityChecker(){}
00027 virtual ~GeometricSearchDet();
00028
00030 virtual const BoundSurface& surface() const = 0;
00031
00033 virtual const Surface::PositionType& position() const {return surface().position();}
00034
00036
00037
00039 virtual const std::vector<const GeometricSearchDet*>& components() const = 0;
00040
00041
00042
00043
00044 virtual const std::vector<const GeomDet*>& basicComponents() const = 0;
00045
00046
00055 virtual std::pair<bool, TrajectoryStateOnSurface>
00056 compatible( const TrajectoryStateOnSurface& ts, const Propagator&,
00057 const MeasurementEstimator&) const=0;
00058
00066 virtual std::vector<DetWithState>
00067 compatibleDets( const TrajectoryStateOnSurface& startingState,
00068 const Propagator& prop,
00069 const MeasurementEstimator& est) const;
00070 virtual void
00071 compatibleDetsV( const TrajectoryStateOnSurface& startingState,
00072 const Propagator& prop,
00073 const MeasurementEstimator& est,
00074 std::vector<DetWithState>& result) const;
00075
00095 virtual std::vector<DetGroup>
00096 groupedCompatibleDets( const TrajectoryStateOnSurface& startingState,
00097 const Propagator& prop,
00098 const MeasurementEstimator& est) const;
00099
00100 virtual void
00101 groupedCompatibleDetsV( const TrajectoryStateOnSurface& startingState,
00102 const Propagator& prop,
00103 const MeasurementEstimator& est,
00104 std::vector<DetGroup> & result) const;
00105
00106
00107 virtual bool hasGroups() const = 0;
00108
00109 protected:
00110 GeomDetCompatibilityChecker theCompatibilityChecker;
00111
00112
00113 };
00114
00115
00116 class GeometricSearchDetWithGroups : public virtual GeometricSearchDet {
00117 public:
00118 typedef GeometricSearchDet::DetWithState DetWithState;
00119
00120 void
00121 compatibleDetsV( const TrajectoryStateOnSurface& startingState,
00122 const Propagator& prop,
00123 const MeasurementEstimator& est,
00124 std::vector<DetWithState> & result) const;
00125
00126 bool hasGroups() const {return true;}
00127
00128 };
00129
00130 #endif