00001 #include "CLHEP/Units/PhysicalConstants.h"
00002 #include "RecoEgamma/EgammaPhotonAlgos/interface/ConversionBarrelEstimator.h"
00003 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00004 #include "TrackingTools/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h"
00005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00006 #include "TrackingTools/DetLayers/interface/PhiLess.h"
00007 #include "TrackingTools/DetLayers/interface/rangesIntersect.h"
00008 #include "DataFormats/GeometrySurface/interface/BoundPlane.h"
00009 #include "RecoTracker/TkTrackingRegions/interface/GlobalDetRangeZPhi.h"
00010
00011
00012
00013 std::pair<bool,double> ConversionBarrelEstimator::estimate( const TrajectoryStateOnSurface& ts,
00014 const TransientTrackingRecHit& hit) const {
00015 std::pair<bool,double> result;
00016
00017
00018
00019 float tsPhi = ts.globalParameters().position().phi();
00020 GlobalPoint gp = hit.globalPosition();
00021 float rhPhi = gp.phi();
00022
00023
00024 float dz = 2. * sqrt(hit.localPositionError().yy()) ;
00025 float zDiff = ts.globalParameters().position().z() - gp.z();
00026 float phiDiff = tsPhi - rhPhi;
00027 if (phiDiff > pi) phiDiff -= twopi;
00028 if (phiDiff < -pi) phiDiff += twopi;
00029
00030
00031 float zrange = sqrt(theZRangeMax*theZRangeMax + dz*dz);
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 if ( phiDiff < thePhiRangeMax && phiDiff > thePhiRangeMin &&
00044 zDiff < zrange && zDiff > -zrange) {
00045
00046
00047
00048
00049
00050
00051 result.first=true;
00052 result.second=phiDiff;
00053 } else {
00054
00055
00056
00057
00058 result.first=false;
00059 result.second=0;
00060
00061 }
00062
00063 return result;
00064
00065 }
00066
00067
00068
00069 bool ConversionBarrelEstimator::estimate( const TrajectoryStateOnSurface& ts,
00070 const BoundPlane& plane) const {
00071
00072 typedef std::pair<float,float> Range;
00073
00074
00075 GlobalPoint trajPos(ts.globalParameters().position());
00076 GlobalDetRangeZPhi detRange(plane);
00077 Range trajZRange(trajPos.z() - 2.*theZRangeMax, trajPos.z() + 2.*theZRangeMax);
00078 Range trajPhiRange(trajPos.phi() + thePhiRangeMin, trajPos.phi() + thePhiRangeMax);
00079
00080
00081 if(rangesIntersect(trajZRange, detRange.zRange()) &&
00082 rangesIntersect(trajPhiRange, detRange.phiRange(), PhiLess())) {
00083
00084 return true;
00085
00086
00087
00088 } else {
00089
00090
00091 return false;
00092
00093 }
00094
00095
00096 }
00097
00098
00099 MeasurementEstimator::Local2DVector
00100 ConversionBarrelEstimator::maximalLocalDisplacement( const TrajectoryStateOnSurface& ts,
00101 const BoundPlane& plane) const
00102 {
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 return Local2DVector(9999,9999);
00116
00117 }
00118
00119