00001 #ifndef RECOLOCALTRACKER_SISTRIPCLUSTERIZER_SISTRIPRECHITMATCH_H
00002 #define RECOLOCALTRACKER_SISTRIPCLUSTERIZER_SISTRIPRECHITMATCH_H
00003
00004 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
00005 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2DCollection.h"
00006 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
00007 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2DCollection.h"
00008 #include "DataFormats/DetId/interface/DetId.h"
00009 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00010 #include "Geometry/CommonTopologies/interface/StripTopology.h"
00011
00012 #include "DataFormats/CLHEP/interface/AlgebraicObjects.h"
00013
00014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00015
00016 class GluedGeomDet;
00017
00018 #include <cfloat>
00019
00020
00021 #include <boost/function.hpp>
00022
00023 class SiStripRecHitMatcher {
00024 public:
00025
00026
00027 typedef SiStripMatchedRecHit2DCollectionNew::FastFiller CollectorMatched;
00028
00029 typedef SiStripRecHit2DCollectionNew::DetSet::const_iterator RecHitIterator;
00030 typedef std::vector<const SiStripRecHit2D *> SimpleHitCollection;
00031 typedef SimpleHitCollection::const_iterator SimpleHitIterator;
00032
00033 typedef boost::function<void(SiStripMatchedRecHit2D const&)> Collector;
00034
00035
00036 typedef std::pair<LocalPoint,LocalPoint> StripPosition;
00037
00038 SiStripRecHitMatcher(const edm::ParameterSet& conf);
00039 SiStripRecHitMatcher(const double theScale);
00040
00041
00042
00043 SiStripMatchedRecHit2D * match(const SiStripRecHit2D *monoRH,
00044 const SiStripRecHit2D *stereoRH,
00045 const GluedGeomDet* gluedDet,
00046 LocalVector trackdirection) const;
00047
00048 SiStripMatchedRecHit2D* match(const SiStripMatchedRecHit2D *originalRH,
00049 const GluedGeomDet* gluedDet,
00050 LocalVector trackdirection) const;
00051
00052 edm::OwnVector<SiStripMatchedRecHit2D>
00053 match( const SiStripRecHit2D *monoRH,
00054 RecHitIterator begin, RecHitIterator end,
00055 const GluedGeomDet* gluedDet) const {
00056 return match(monoRH,begin, end, gluedDet,LocalVector(0.,0.,0.));
00057 }
00058
00059 edm::OwnVector<SiStripMatchedRecHit2D>
00060 match( const SiStripRecHit2D *monoRH,
00061 RecHitIterator begin, RecHitIterator end,
00062 const GluedGeomDet* gluedDet,
00063 LocalVector trackdirection) const;
00064
00065 edm::OwnVector<SiStripMatchedRecHit2D>
00066 match( const SiStripRecHit2D *monoRH,
00067 SimpleHitIterator begin, SimpleHitIterator end,
00068 const GluedGeomDet* gluedDet,
00069 LocalVector trackdirection) const;
00070
00071 void
00072 match( const SiStripRecHit2D *monoRH,
00073 RecHitIterator begin, RecHitIterator end,
00074 CollectorMatched & collector,
00075 const GluedGeomDet* gluedDet,
00076 LocalVector trackdirection) const;
00077
00078 void
00079 match( const SiStripRecHit2D *monoRH,
00080 SimpleHitIterator begin, SimpleHitIterator end,
00081 CollectorMatched & collector,
00082 const GluedGeomDet* gluedDet,
00083 LocalVector trackdirection) const;
00084
00085
00086
00087
00088
00089
00090 StripPosition project(const GeomDetUnit *det,const GluedGeomDet* glueddet,StripPosition strip,LocalVector trackdirection) const;
00091
00092
00093
00094
00095
00096 void
00097 match( const SiStripRecHit2D *monoRH,
00098 SimpleHitIterator begin, SimpleHitIterator end,
00099 edm::OwnVector<SiStripMatchedRecHit2D> & collector,
00100 const GluedGeomDet* gluedDet,
00101 LocalVector trackdirection) const;
00102
00103
00104 void
00105 match( const SiStripRecHit2D *monoRH,
00106 SimpleHitIterator begin, SimpleHitIterator end,
00107 std::vector<SiStripMatchedRecHit2D*> & collector,
00108 const GluedGeomDet* gluedDet,
00109 LocalVector trackdirection) const;
00110
00111
00113
00114 void
00115 match( const SiStripRecHit2D *monoRH,
00116 SimpleHitIterator begin, SimpleHitIterator end,
00117 Collector & collector,
00118 const GluedGeomDet* gluedDet,
00119 LocalVector trackdirection) const;
00120
00121
00122 float scale_;
00123
00124 };
00125
00126 #endif