Go to the documentation of this file.00001 #ifndef CommonDet_HICMeasurementEstimator_H
00002 #define CommonDet_HICMeasurementEstimator_H
00003
00015 #include "TrackingTools/KalmanUpdators/interface/Chi2MeasurementEstimatorBase.h"
00016 #include "TrackingTools/DetLayers/interface/DetLayer.h"
00017 #include "TrackingTools/PatternTools/interface/Trajectory.h"
00018 #include "RecoTracker/TkDetLayers/interface/GeometricSearchTracker.h"
00019 #include "RecoHI/HiMuonAlgos/interface/HICConst.h"
00020 #include "MagneticField/Engine/interface/MagneticField.h"
00021
00022 class HICMeasurementEstimator : public Chi2MeasurementEstimatorBase{
00023 public:
00024
00030 explicit HICMeasurementEstimator(const GeometricSearchTracker* theTracker0,
00031 const MagneticField * mf, double maxChi2, double nSigma = 3.):
00032 Chi2MeasurementEstimatorBase(maxChi2,nSigma)
00033 {
00034 theTracker = theTracker0;
00035 bl = theTracker->barrelLayers();
00036 fpos = theTracker->posForwardLayers();
00037 fneg = theTracker->negForwardLayers();
00038 field = mf;
00039 setHICDetMap();
00040 }
00041
00042 virtual std::pair<bool,double> estimate(const TrajectoryStateOnSurface&,
00043 const TransientTrackingRecHit&) const;
00044
00045 template <unsigned int D> std::pair<bool,double> estimate(const TrajectoryStateOnSurface&,
00046 const TransientTrackingRecHit&) const;
00047
00048 bool estimate( const TrajectoryStateOnSurface& ts,
00049 const BoundPlane& plane) const;
00050
00051 virtual std::vector<double> setCuts( Trajectory& traj, const DetLayer* theCurrentLayer );
00052
00053 virtual void setHICDetMap();
00054
00055 cms::HICConst* getHICConst(){return theHICConst;}
00056
00057 void setHICConst(cms::HICConst* hh) {theHICConst = hh;}
00058
00059 virtual void setLastLayer( DetLayer*& ll){theLastLayer = ll;};
00060
00061 virtual int getDetectorCode(const DetLayer* a);
00062
00063 virtual void chooseCuts(int& i);
00064
00065 virtual void setMult(int aMult=1) {theLowMult=aMult;}
00066
00067 virtual void setSign(int& i){theSign=i;}
00068
00069 const MagneticField* getField() {return field;}
00070
00071 virtual HICMeasurementEstimator* clone() const {
00072 return new HICMeasurementEstimator(*this);
00073 }
00074
00075 private:
00076 cms::HICConst* theHICConst;
00077 double theMaxChi2;
00078 int theNSigma;
00079 std::map<const DetLayer*,int> theBarrel;
00080 std::map<const DetLayer*,int> theForward;
00081 std::map<const DetLayer*,int> theBackward;
00082
00083 double thePhiBound;
00084 double theZBound;
00085 double thePhiBoundMean;
00086 double theZBoundMean;
00087 const DetLayer* theLastLayer;
00088 const DetLayer* theLayer;
00089 const DetLayer* theFirstLayer;
00090 int theTrajectorySize;
00091 double thePhiWin;
00092 double theZWin;
00093 double thePhiWinMean;
00094 double theZWinMean;
00095
00096 double thePhiWinB;
00097 double theZWinB;
00098 double thePhiWinMeanB;
00099 double theZWinMeanB;
00100
00101 double thePhiCut;
00102 double theZCut;
00103 double thePhiCutMean;
00104 double theZCutMean;
00105 double theChi2Cut;
00106 double theNewCut;
00107 double theNewCutB;
00108
00109 int theLowMult;
00110 int theCutType;
00111 const GeometricSearchTracker* theTracker;
00112 std::vector<BarrelDetLayer*> bl;
00113 std::vector<ForwardDetLayer*> fpos;
00114 std::vector<ForwardDetLayer*> fneg;
00115 int theSign;
00116 const MagneticField * field;
00117 };
00118
00119 #endif