00001 #ifndef RectangularEtaPhiTrackingRegion_H
00002 #define RectangularEtaPhiTrackingRegion_H
00003
00011 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegionBase.h"
00012 #include "RecoTracker/TkTrackingRegions/interface/TkTrackingRegionsMargin.h"
00013
00014 #include "RecoTracker/TkTrackingRegions/interface/HitRZConstraint.h"
00015 #include "RecoTracker/TkTrackingRegions/interface/OuterHitPhiPrediction.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 class OuterEstimator;
00018 class BarrelDetLayer;
00019 class ForwardDetLayer;
00020
00021 class RectangularEtaPhiTrackingRegion : public TrackingRegionBase {
00022 public:
00023
00024 typedef TkTrackingRegionsMargin<float> Margin;
00025
00027 RectangularEtaPhiTrackingRegion() { }
00028
00053 RectangularEtaPhiTrackingRegion( const GlobalVector & dir,
00054 const GlobalPoint & vertexPos,
00055 float ptMin, float rVertex, float zVertex,
00056 float deltaEta, float deltaPhi,
00057 float dummy = 0.,
00058 bool precise = true)
00059 : TrackingRegionBase( dir, vertexPos, Range( -1/ptMin, 1/ptMin),
00060 rVertex, zVertex),
00061 thePhiMargin( Margin( fabs(deltaPhi),fabs(deltaPhi))),
00062 theTemporaryFix(dummy), thePrecise(precise)
00063 { initEtaRange(dir, Margin( fabs(deltaEta),fabs(deltaEta))); }
00064
00071 RectangularEtaPhiTrackingRegion( const GlobalVector & dir,
00072 const GlobalPoint & vertexPos,
00073 float ptMin, float rVertex, float zVertex,
00074 Margin etaMargin,
00075 Margin phiMargin,
00076 float dummy = 0., bool precise = true)
00077 : TrackingRegionBase( dir, vertexPos, Range( -1/ptMin, 1/ptMin),
00078 rVertex, zVertex), thePhiMargin( phiMargin), theTemporaryFix(dummy), thePrecise(precise)
00079 { initEtaRange(dir, etaMargin); }
00080
00085 RectangularEtaPhiTrackingRegion( const GlobalVector & dir,
00086 const GlobalPoint & vertexPos,
00087 Range invPtRange,
00088 float rVertex, float zVertex,
00089 Margin etaMargin,
00090 Margin phiMargin,
00091 float dummy = 0.,
00092 bool precise = true)
00093 : TrackingRegionBase( dir, vertexPos, invPtRange, rVertex, zVertex),
00094 thePhiMargin( phiMargin), theTemporaryFix(dummy), thePrecise(precise)
00095 { initEtaRange(dir, etaMargin); }
00096
00097
00099 const Range & etaRange() const { return theEtaRange; }
00100
00103 const Margin & phiMargin() const { return thePhiMargin; }
00104
00106 bool isPrecise() const { return thePrecise; }
00107
00108 virtual std::vector<ctfseeding::SeedingHit> hits(
00109 const edm::Event& ev,
00110 const edm::EventSetup& es,
00111 const ctfseeding::SeedingLayer* layer) const;
00112
00113 virtual HitRZCompatibility* checkRZ(
00114 const DetLayer* layer,
00115 const TrackingRecHit* outerHit,
00116 const edm::EventSetup& iSetup) const;
00117
00118 virtual RectangularEtaPhiTrackingRegion* clone() const {
00119 return new RectangularEtaPhiTrackingRegion(*this);
00120 }
00121
00122 virtual std::string name() const { return "RectangularEtaPhiTrackingRegion"; }
00123 virtual std::string print() const;
00124
00125 private:
00126
00127 OuterEstimator * estimator(const BarrelDetLayer* layer,const edm::EventSetup& iSetup) const;
00128 OuterEstimator * estimator(const ForwardDetLayer* layer,const edm::EventSetup& iSetup) const;
00129
00130 OuterHitPhiPrediction phiWindow(const edm::EventSetup& iSetup) const;
00131 HitRZConstraint rzConstraint() const;
00132
00133 void initEtaRange( const GlobalVector & dir, const Margin& margin);
00134
00135 private:
00136
00137 Range theEtaRange;
00138 Margin thePhiMargin;
00139 double theTemporaryFix;
00140 bool thePrecise;
00141
00142 };
00143
00144 #endif