00001 #ifndef PIXELHITMATCHER_H
00002 #define PIXELHITMATCHER_H
00003
00004
00005
00006
00007
00008
00017
00018
00019
00020
00021
00022
00023
00024 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00025 #include "TrackingTools/MaterialEffects/interface/PropagatorWithMaterial.h"
00026
00027 #include "RecoEgamma/EgammaElectronAlgos/interface/BarrelMeasurementEstimator.h"
00028 #include "RecoEgamma/EgammaElectronAlgos/interface/ForwardMeasurementEstimator.h"
00029 #include "RecoEgamma/EgammaElectronAlgos/interface/PixelMatchStartLayers.h"
00030 #include "RecoEgamma/EgammaElectronAlgos/interface/FTSFromVertexToPointFactory.h"
00031
00032 #include "DataFormats/TrajectorySeed/interface/TrajectorySeedCollection.h"
00033 #include "DataFormats/EgammaReco/interface/ElectronSeed.h"
00034
00035 #include "RecoTracker/TransientTrackingRecHit/interface/TSiPixelRecHit.h"
00036 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
00037
00038 #include "CLHEP/Vector/ThreeVector.h"
00039 #include <vector>
00040 #include <limits>
00041
00046 class MeasurementTracker;
00047 class MagneticField;
00048 class GeometricSearchTracker;
00049 class LayerMeasurements;
00050 class TrackerGeometry;
00051
00052 class RecHitWithDist
00053 {
00054 public :
00055
00056 typedef TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer;
00057 typedef TransientTrackingRecHit::RecHitPointer RecHitPointer;
00058 typedef TransientTrackingRecHit::RecHitContainer RecHitContainer;
00059
00060 RecHitWithDist( ConstRecHitPointer rh, float & dphi )
00061 : rh_(rh), dphi_(dphi)
00062 {}
00063
00064 ConstRecHitPointer recHit() const { return rh_ ; }
00065 float dPhi() const { return dphi_ ; }
00066
00067 void invert() { dphi_*=-1. ; }
00068
00069 private :
00070
00071 ConstRecHitPointer rh_ ;
00072 float dphi_ ;
00073
00074 } ;
00075
00076
00077 class RecHitWithInfo
00078 {
00079 public :
00080
00081 typedef TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer ;
00082 typedef TransientTrackingRecHit::RecHitPointer RecHitPointer ;
00083 typedef TransientTrackingRecHit::RecHitContainer RecHitContainer ;
00084
00085 RecHitWithInfo( ConstRecHitPointer rh, int subDet =0,
00086 float dRz = std::numeric_limits<float>::infinity(),
00087 float dPhi = std::numeric_limits<float>::infinity() )
00088 : rh_(rh), subDet_(subDet), dRz_(dRz), dPhi_(dPhi)
00089 {}
00090
00091 ConstRecHitPointer recHit() const { return rh_; }
00092 int subDet() const { return subDet_ ; }
00093 float dRz() const { return dRz_ ; }
00094 float dPhi() const { return dPhi_ ; }
00095
00096 void invert() { dPhi_*=-1. ; }
00097
00098 private:
00099
00100 ConstRecHitPointer rh_;
00101 int subDet_ ;
00102 float dRz_ ;
00103 float dPhi_ ;
00104
00105 } ;
00106
00107 class SeedWithInfo
00108 {
00109 public :
00110
00111 SeedWithInfo( TrajectorySeed seed, unsigned char hitsMask, int subDet2, float dRz2, float dPhi2 , int subDet1, float dRz1, float dPhi1)
00112 : seed_(seed), hitsMask_(hitsMask),
00113 subDet2_(subDet2), dRz2_(dRz2), dPhi2_(dPhi2),
00114 subDet1_(subDet1), dRz1_(dRz1), dPhi1_(dPhi1)
00115 {}
00116
00117 const TrajectorySeed & seed() const { return seed_ ; }
00118 unsigned char hitsMask() const { return hitsMask_ ; }
00119
00120 int subDet2() const { return subDet2_ ; }
00121 float dRz2() const { return dRz2_ ; }
00122 float dPhi2() const { return dPhi2_ ; }
00123
00124 int subDet1() const { return subDet1_ ; }
00125 float dRz1() const { return dRz1_ ; }
00126 float dPhi1() const { return dPhi1_ ; }
00127
00128 private :
00129
00130 TrajectorySeed seed_ ;
00131 unsigned char hitsMask_ ;
00132 int subDet2_ ;
00133 float dRz2_ ;
00134 float dPhi2_ ;
00135 int subDet1_ ;
00136 float dRz1_ ;
00137 float dPhi1_ ;
00138 } ;
00139
00140 class PixelHitMatcher
00141 {
00142 public :
00143
00144 typedef TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer;
00145 typedef TransientTrackingRecHit::RecHitPointer RecHitPointer;
00146 typedef TransientTrackingRecHit::RecHitContainer RecHitContainer;
00147
00148 PixelHitMatcher
00149 ( float phi1min, float phi1max,
00150
00151 float phi2minB, float phi2maxB, float phi2minF, float phi2maxF,
00152 float z2minB, float z2maxB, float r2minF, float r2maxF,
00153 float rMinI, float rMaxI, bool searchInTIDTEC ) ;
00154
00155 virtual ~PixelHitMatcher() ;
00156 void setES( const MagneticField *, const MeasurementTracker * theMeasurementTracker, const TrackerGeometry * trackerGeometry ) ;
00157
00158 std::vector<std::pair<RecHitWithDist,ConstRecHitPointer> >
00159 compatibleHits(const GlobalPoint& xmeas, const GlobalPoint& vprim, float energy, float charge ) ;
00160
00161
00162 std::vector<SeedWithInfo>
00163 compatibleSeeds
00164 ( TrajectorySeedCollection * seeds, const GlobalPoint & xmeas,
00165 const GlobalPoint & vprim, float energy, float charge ) ;
00166
00167 std::vector<CLHEP::Hep3Vector> predicted1Hits() ;
00168 std::vector<CLHEP::Hep3Vector> predicted2Hits();
00169
00170 void set1stLayer( float dummyphi1min, float dummyphi1max ) ;
00171 void set1stLayerZRange( float zmin1, float zmax1 ) ;
00172
00173 void set2ndLayer( float dummyphi2minB, float dummyphi2maxB, float dummyphi2minF, float dummyphi2maxF ) ;
00174
00175 float getVertex() ;
00176 void setUseRecoVertex( bool val ) ;
00177
00178 private :
00179
00180 RecHitContainer hitsInTrack ;
00181
00182 std::vector<CLHEP::Hep3Vector> pred1Meas ;
00183 std::vector<CLHEP::Hep3Vector> pred2Meas ;
00184 FTSFromVertexToPointFactory myFTS ;
00185 BarrelMeasurementEstimator meas1stBLayer ;
00186 BarrelMeasurementEstimator meas2ndBLayer ;
00187 ForwardMeasurementEstimator meas1stFLayer ;
00188 ForwardMeasurementEstimator meas2ndFLayer ;
00189 PixelMatchStartLayers startLayers ;
00190 PropagatorWithMaterial * prop1stLayer ;
00191 PropagatorWithMaterial * prop2ndLayer ;
00192 const GeometricSearchTracker * theGeometricSearchTracker ;
00193 const LayerMeasurements * theLayerMeasurements ;
00194 const MagneticField* theMagField ;
00195 const TrackerGeometry * theTrackerGeometry ;
00196
00197 float vertex_;
00198
00199 bool searchInTIDTEC_ ;
00200 bool useRecoVertex_ ;
00201 std::vector<std::pair<const GeomDet*, TrajectoryStateOnSurface> > mapTsos_ ;
00202 std::vector<std::pair<std::pair<const GeomDet*,GlobalPoint>, TrajectoryStateOnSurface> > mapTsos2_ ;
00203
00204 } ;
00205
00206 #endif
00207
00208
00209
00210
00211
00212
00213
00214