001
002
003
004
005
006
007
008
009
010 #ifndef SMARTERSIPATHFINDER_HH_
011 #define SMARTERSIPATHFINDER_HH_ 1
012
013 #include "TrackingSI/PathFinder/SiPathFinder.hh"
014 #include "Trajectory/Trajectory.hh"
015 #include "CLHEP/Vector/ThreeVector.h"
016 #include <vector>
017 class AbsSiDetectorNode;
018 class SimpleReconstructedTrack;
019 class AbsSiNumerology;
020 class SiWaferIntersectionSet;
021 class CdfHalfLadder;
022 class Trajectory;
023
024 class SmarterSiPathFinder : public SiPathFinder {
025
026 public:
027
028
029 SmarterSiPathFinder(const SmarterSiPathFinder &right);
030
031
032 SmarterSiPathFinder(const AbsSiDetectorNode *theDetector);
033
034
035 virtual ~SmarterSiPathFinder();
036
037
038 const SmarterSiPathFinder & operator=(const SmarterSiPathFinder &right);
039
040
041 virtual SiWaferIntersectionSet * newIntersectionSet(const Trajectory &theTrajectory) const;
042
043
044 virtual SiWaferIntersectionSet * newIntersectionSet(const Trajectory &theTrajectory, const int layer) const;
045
046
047
048
049
050
051
052
053 virtual SiWaferIntersectionSet * newIntersectionSet(const SimpleReconstructedTrack &track,
054 double phiMargin, double zMargin) const;
055 virtual SiWaferIntersectionSet * newIntersectionSet(const SimpleReconstructedTrack &track,
056 const int layer,
057 double phiMargin, double zMargin) const;
058
059 private:
060
061
062
063
064
065
066
067 void initFILimits( void ) const;
068
069
070
071
072 void findIntersections( const SimpleReconstructedTrack &track,
073 const int layer,
074 double phiMargin, double zMargin,
075 SiWaferIntersectionSet * iSet ) const;
076
077
078
079 float phiBranch( float phi ) const;
080
081
082
083
084 int getPhiAddr( float phi, int barrel, int layer ) const;
085
086
087
088
089
090 Hep3Vector getSigmaLoc( const Trajectory::Location * loc,
091 const SimpleReconstructedTrack & track,
092 const CdfHalfLadder & wafer ) const;
093
094
095
096
097
098 void evaluateIntersection( const Trajectory::Location * intersection,
099 const CdfHalfLadder & wafer,
100 const Hep3Vector & margin,
101 Hep3Vector & deltaLocFromCenter,
102 bool & validIntersect, bool & nominalIntersect,
103 bool & endIntersect ) const;
104
105
106
107
108 mutable bool _firstFICall;
109 mutable std::vector<float> _zMin;
110 mutable std::vector<float> _phiMin[3];
111 mutable std::vector<float> _halfLadLen;
112 mutable std::vector<float> _layerRad;
113 mutable std::vector<int> _nLadSeg;
114 mutable std::vector<int> _nLadSegmax;
115
116
117
118
119
120
121 const AbsSiDetectorNode *_theSiDetector;
122 const AbsSiNumerology *_theSiNumerology;
123 int _nPhiISL7;
124 int _nPhiISL6C;
125 int _nPhiISL6F;
126 int _nPhiSVX;
127
128 };
129
130 #endif
131
132
Send problems or questions to cdfcode@fnal.gov