CMS 3D CMS Logo

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

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   // use a MeasurementEstimator to filter the hits (same algo as below..)
00026   // default as above 
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   // return false if missing ( if inactive is true and one hit)
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