CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_13_patch3/src/RecoTracker/TkMSParametrization/interface/MSLayer.h

Go to the documentation of this file.
00001 #ifndef MSLayer_H
00002 #define MSLayer_H
00003 #include "TrackingTools/DetLayers/interface/DetLayer.h"
00004 #include "RecoTracker/TkMSParametrization/interface/PixelRecoPointRZ.h"
00005 #include "RecoTracker/TkMSParametrization/interface/PixelRecoLineRZ.h"
00006 #include "RecoTracker/TkMSParametrization/interface/PixelRecoRange.h"
00007 #include <iosfwd>
00008 
00009 class DetLayer;
00010 class MSLayersKeeper;
00011 
00012 class MSLayer {
00013 public:
00014   typedef PixelRecoRange<float> Range;
00015 
00016   struct DataX0 { 
00017     DataX0(const MSLayersKeeper *al = 0) 
00018       : hasX0(false), allLayers(al) { }
00019     DataX0(float ax0, float asX0D, float aCotTheta) 
00020       : hasX0(true), hasFSlope(false), x0(ax0), sumX0D(asX0D), 
00021         cotTheta(aCotTheta), allLayers(0) { }
00022     void setForwardSumX0DSlope(float aSlope) 
00023         { hasFSlope= true; slopeSumX0D = aSlope; }
00024     bool hasX0, hasFSlope;
00025     float x0, sumX0D, cotTheta, slopeSumX0D;
00026     const MSLayersKeeper *allLayers; 
00027   };
00028 
00029 public:
00030   MSLayer(const DetLayer* layer, DataX0 dataX0 = DataX0(0) );
00031   MSLayer() { }
00032 
00033   MSLayer(GeomDetEnumerators::Location part, float position, Range range, 
00034            float halfThickness = 0., 
00035            DataX0 dataX0 = DataX0(0) );
00036 
00037   const Range & range() const  { return theRange; }
00038  
00039   const GeomDetEnumerators::Location & face() const  { return theFace; }
00040   float position() const { return thePosition; }
00041   float halfThickness() const { return theHalfThickness; }
00042 
00043   float x0(float cotTheta) const;
00044   float sumX0D(float cotTheta) const; 
00045 
00046   bool operator== (const MSLayer &o) const;
00047   bool operator<  (const MSLayer &o) const;
00048   std::pair<PixelRecoPointRZ,bool> crossing(
00049       const PixelRecoLineRZ &line) const;
00050   float distance(const PixelRecoPointRZ & point) const;
00051 
00052 private:
00053 
00054   GeomDetEnumerators::Location theFace;
00055   float thePosition;
00056   Range theRange;
00057   float theHalfThickness;
00058   DataX0 theX0Data;
00059 
00060   friend struct MSLayersKeeper;
00061   friend std::ostream& operator<<( std::ostream& s, const MSLayer & l);
00062 
00063 };
00064 
00065 std::ostream& operator<<( std::ostream& s, const MSLayer & l);
00066 std::ostream& operator<<( std::ostream& s, const MSLayer::DataX0 & d);
00067 #endif