00001 #ifndef RecoLocalTracker_SiPixelRecHits_PixelCPETemplateReco_H 00002 #define RecoLocalTracker_SiPixelRecHits_PixelCPETemplateReco_H 00003 00004 #include "PixelCPEBase.h" 00005 00006 // Already in the base class 00007 //#include "Geometry/CommonDetUnit/interface/GeomDetType.h" 00008 //#include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h" 00009 //#include "Geometry/TrackerGeometryBuilder/interface/RectangularPixelTopology.h" 00010 //#include "Geometry/CommonDetAlgo/interface/MeasurementPoint.h" 00011 //#include "Geometry/CommonDetAlgo/interface/MeasurementError.h" 00012 //#include "Geometry/Surface/interface/GloballyPositioned.h" 00013 //#include "FWCore/ParameterSet/interface/ParameterSet.h" 00014 00015 00016 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 00017 #include "SiPixelTemplate.h" 00018 #else 00019 #include "SiPixelTemplate.h" 00020 #endif 00021 00022 #include <utility> 00023 #include <vector> 00024 00025 00026 #if 0 00027 00031 #endif 00032 00033 class MagneticField; 00034 class PixelCPETemplateReco : public PixelCPEBase 00035 { 00036 public: 00037 // PixelCPETemplateReco( const DetUnit& det ); 00038 PixelCPETemplateReco(edm::ParameterSet const& conf, const MagneticField *, const SiPixelLorentzAngle *, const SiPixelTemplateDBObject *); 00039 ~PixelCPETemplateReco(); 00040 00041 // We only need to implement measurementPosition, since localPosition() from 00042 // PixelCPEBase will call it and do the transformation 00043 // Gavril : put it back 00044 LocalPoint localPosition (const SiPixelCluster& cluster, const GeomDetUnit & det) const; 00045 00046 // However, we do need to implement localError(). 00047 LocalError localError (const SiPixelCluster& cl, const GeomDetUnit & det) const; 00048 00049 MeasurementPoint measurementPosition ( const SiPixelCluster&, const GeomDetUnit & det) const; 00050 00051 // &&& Do we need to overload measurementError() ? 00052 00053 protected: 00054 //--- These functions are no longer needed, yet they are declared 00055 //--- pure virtual in the base class. 00056 float xpos( const SiPixelCluster& ) const { return -999000.0; } // &&& should abort 00057 float ypos( const SiPixelCluster& ) const { return -999000.0; } // &&& should abort 00058 00059 private: 00060 // Template storage 00061 mutable SiPixelTemplate templ_ ; 00062 //--------------------------- 00063 // [Morris, 6/25/08] 00064 // Cache the template ID number 00065 mutable int templID_; // in general this will change in time and via DetID 00066 00067 // The result of PixelTemplateReco2D 00068 mutable float templXrec_ ; 00069 mutable float templYrec_ ; 00070 mutable float templSigmaX_ ; 00071 mutable float templSigmaY_ ; 00072 // Add new information produced by SiPixelTemplateReco::PixelTempReco2D &&& 00073 // These can only be accessed if we change silicon pixel data formats and add them to the rechit 00074 mutable float templProbX_ ; 00075 mutable float templProbY_ ; 00076 00077 mutable float templProbQ_; 00078 00079 mutable int templQbin_ ; 00080 00081 mutable int speed_ ; 00082 00083 mutable int ierr; 00084 00085 mutable bool UseClusterSplitter_; 00086 00087 mutable bool DoCosmics_; 00088 00089 mutable bool LoadTemplatesFromDB_; 00090 00091 }; 00092 00093 #endif 00094 00095 00096 00097