Go to the documentation of this file.00001 #ifndef ConeDefinition_h
00002 #define ConeDefinition_h
00003
00004 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00005 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00006
00007 #include "CommonTools/UtilAlgos/interface/DeltaR.h"
00008
00009 inline double getDistInPlaneSimple(const GlobalPoint caloPoint,
00010 const GlobalPoint rechitPoint)
00011 {
00012
00013
00014
00015
00016 const GlobalVector caloIntersectVector(caloPoint.x(),
00017 caloPoint.y(),
00018 caloPoint.z());
00019
00020 const GlobalVector caloIntersectUnitVector = caloIntersectVector.unit();
00021
00022 const GlobalVector rechitVector(rechitPoint.x(),
00023 rechitPoint.y(),
00024 rechitPoint.z());
00025
00026 const GlobalVector rechitUnitVector = rechitVector.unit();
00027 double dotprod = caloIntersectUnitVector.dot(rechitUnitVector);
00028 double rechitdist = caloIntersectVector.mag()/dotprod;
00029
00030
00031 const GlobalVector effectiveRechitVector = rechitdist*rechitUnitVector;
00032 const GlobalPoint effectiveRechitPoint(effectiveRechitVector.x(),
00033 effectiveRechitVector.y(),
00034 effectiveRechitVector.z());
00035
00036
00037 GlobalVector distance_vector = effectiveRechitPoint-caloPoint;
00038
00039 if (dotprod > 0.)
00040 {
00041 return distance_vector.mag();
00042 }
00043 else
00044 {
00045 return 999999.;
00046
00047 }
00048
00049 }
00050
00051 inline double getDistInPlaneTrackDir(const GlobalPoint caloPoint,
00052 const GlobalVector caloVector,
00053 const GlobalPoint rechitPoint)
00054 {
00055
00056
00057
00058
00059 const GlobalVector caloIntersectVector(caloPoint.x(),
00060 caloPoint.y(),
00061 caloPoint.z());
00062
00063 const GlobalVector caloUnitVector = caloVector.unit();
00064 const GlobalVector rechitVector(rechitPoint.x(),
00065 rechitPoint.y(),
00066 rechitPoint.z());
00067 const GlobalVector rechitUnitVector = rechitVector.unit();
00068 double dotprod_denominator = caloUnitVector.dot(rechitUnitVector);
00069 double dotprod_numerator = caloUnitVector.dot(caloIntersectVector);
00070 double rechitdist = dotprod_numerator/dotprod_denominator;
00071
00072 const GlobalVector effectiveRechitVector = rechitdist*rechitUnitVector;
00073 const GlobalPoint effectiveRechitPoint(effectiveRechitVector.x(),
00074 effectiveRechitVector.y(),
00075 effectiveRechitVector.z());
00076 GlobalVector distance_vector = effectiveRechitPoint-caloPoint;
00077 if (dotprod_denominator > 0. && dotprod_numerator > 0.)
00078 {
00079
00080 return distance_vector.mag();
00081 }
00082 else
00083 {
00084 return 999999.;
00085 }
00086 }
00087
00088
00089
00090 inline double getDistInPlane(const GlobalVector trackDirection,
00091 const GlobalPoint caloPoint,
00092 const GlobalPoint rechitPoint,
00093 double coneHeight)
00094 {
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 const GlobalVector heightVector = trackDirection*coneHeight;
00118
00119
00120
00121 const GlobalVector caloIntersectVector(caloPoint.x(),
00122 caloPoint.y(),
00123 caloPoint.z());
00124
00125
00126 const GlobalVector coneBaseVector = heightVector+caloIntersectVector;
00127
00128
00129 const GlobalPoint coneBasePoint(coneBaseVector.x(),
00130 coneBaseVector.y(),
00131 coneBaseVector.z());
00132
00133
00134 const GlobalVector rechitVector(rechitPoint.x(),
00135 rechitPoint.y(),
00136 rechitPoint.z());
00137 const GlobalVector rechitDirection = rechitVector.unit();
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155 double rechitdist = trackDirection.dot(coneBaseVector)/trackDirection.dot(rechitDirection);
00156
00157
00158
00159
00160 const GlobalVector effectiveRechitVector = rechitdist*rechitDirection;
00161 const GlobalPoint effectiveRechitPoint(effectiveRechitVector.x(),
00162 effectiveRechitVector.y(),
00163 effectiveRechitVector.z());
00164
00165
00166 GlobalVector distance_vector = effectiveRechitPoint-coneBasePoint;
00167 return distance_vector.mag();
00168 }
00169
00170 #endif
00171