File indexing completed on 2024-04-06 12:28:28
0001 #ifndef RecoTracker_PixelLowPtUtilities_ThirdHitPrediction_h
0002 #define RecoTracker_PixelLowPtUtilities_ThirdHitPrediction_h
0003
0004
0005
0006
0007
0008
0009 #include "RecoTracker/TkMSParametrization/interface/PixelRecoRange.h"
0010 #include "RecoTracker/TkMSParametrization/interface/PixelRecoLineRZ.h"
0011 #include "RecoTracker/TkTrackingRegions/interface/TkTrackingRegionsMargin.h"
0012 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegion.h"
0013
0014 #include "DataFormats/GeometryVector/interface/GlobalTag.h"
0015 #include "DataFormats/GeometryVector/interface/Vector2DBase.h"
0016 typedef Vector2DBase<float, GlobalTag> Global2DVector;
0017
0018 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0019 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0020
0021 class DetLayer;
0022 class OrderedHitPair;
0023 class TrackingRecHit;
0024
0025 class MagneticField;
0026 class TransientTrackingRecHitBuilder;
0027 class MultipleScatteringParametrisationMaker;
0028
0029 #include "FWCore/Framework/interface/EventSetup.h"
0030 #include "FWCore/Framework/interface/ESHandle.h"
0031
0032 #include <vector>
0033 #include <utility>
0034
0035 class ThirdHitPrediction {
0036 public:
0037 typedef PixelRecoRange<float> Range;
0038 typedef TkTrackingRegionsMargin<float> Margin;
0039
0040 ThirdHitPrediction(const TrackingRegion& region,
0041 GlobalPoint inner,
0042 GlobalPoint outer,
0043 const MagneticField& magfield,
0044 const TransientTrackingRecHitBuilder& ttrhBuilder,
0045 double nSigMultipleScattering,
0046 double maxAngleRatio);
0047 ~ThirdHitPrediction();
0048
0049 void getRanges(const DetLayer* layer, float phi[], float rz[]);
0050 void getRanges(float rORz, float phi[], float rz[]);
0051
0052 bool isCompatibleWithMultipleScattering(GlobalPoint g3,
0053 const std::vector<const TrackingRecHit*>& h,
0054 std::vector<GlobalVector>& localDirs,
0055 const MultipleScatteringParametrisationMaker& msmaker);
0056
0057 private:
0058 void initLayer(const DetLayer* layer);
0059
0060 void printOut(char* text);
0061
0062 void invertCircle(Global2DVector& c, float& r);
0063 void invertPoint(Global2DVector& p);
0064
0065 std::pair<float, float> findMinimalCircles(float r);
0066 std::pair<float, float> findTouchingCircles(float r);
0067
0068 std::pair<float, float> findArcIntersection(std::pair<float, float> a, std::pair<float, float> b, bool& keep);
0069
0070 void fitParabola(const float x[3], const float y[3], float par[3]);
0071 void findRectangle(const float x[3], const float y[3], const float par[3], float phi[2], float z[2]);
0072
0073 float areaParallelogram(const Global2DVector& a, const Global2DVector& b);
0074 float angleRatio(const Global2DVector& p3, const Global2DVector& c);
0075
0076 void spinCloser(float phi[3]);
0077
0078 void calculateRangesBarrel(float r3, float phi[2], float z[2], bool keep);
0079 void calculateRangesForward(float z3, float phi[2], float r[2], bool keep);
0080 void calculateRanges(float rz3, float phi[2], float rz[2]);
0081
0082 bool theBarrel, theForward;
0083 Range theDetRange;
0084 Margin theTolerance;
0085 PixelRecoLineRZ theLine;
0086
0087 const DetLayer* theLayer;
0088
0089 const TransientTrackingRecHitBuilder* theTTRecHitBuilder;
0090
0091
0092 float Bz, r0, rm;
0093 GlobalPoint g1, g2;
0094 Global2DVector c0, p1, p2, dif;
0095 std::pair<float, float> arc_0m;
0096
0097 bool keep;
0098
0099 double nSigma;
0100 double maxRatio;
0101 };
0102 #endif