CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/RecoHI/HiMuonAlgos/interface/HICMeasurementEstimator.h

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 // Multiplicity  
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