CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/TrackingTools/DetLayers/interface/GeometricSearchDet.h

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   //virtual std::vector< const GeomDet*> basicComponents() const = 0;
00037 
00039   virtual const std::vector<const GeometricSearchDet*>& components() const = 0;
00040 
00041   /* Returns basic components. For the moment they are GeomDet, 
00042    * but they could become MeasurementDet
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; //=0;
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; // = 0;
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