CDF II
CDF KITS
source navigation ]
diff markup ]
identifier search ]
freetext search ]
file search ]
 
Architecture: i386 ]
Version: 4.10.4 ] [ 4.10.5 ] [ 4.8.4 ] [ 4.8.4l3s ] [ 4.8.5 ] [ 4.9.0 ] [ 4.9.1 ] [ 4.9.1.hpt3 ] [ 4.9.1hpt3 ] [ 4.9.1top1 ] [ 5.0.0 ] [ 5.1.0 ] [ 5.1.0beamonly ] [ 5.1.1 ] [ 5.2.0 ] [ 5.3.0 ] [ 5.3.1 ] [ 5.3.1dsp ] [ 5.3.3 ] [ 5.3.3_nt ] [ 5.3.4 ] [ 6.1.1 ] [ 6.1.1b ] [ 6.1.2 ] [ 6.1.3 ] [ 6.1.4 ] [ 6.1.4int3 ] [ 6.1.4mc ] [ 6.1.4mc_a ] [ 6.1.6 ] [ development ]

001 // --------------------------------------------------------------//
002 // Smarter SiPathFinder:  this class is an implementation of a   //
003 // SiPathFinder.  Based on Homemade SiPathFinder, this one       //
004 // spends less time searching blindly for intersections with     //
005 // wafers. Be aware that it is making the assumption that the    //
006 // helix curvature is small compared to the radius of the SVX    //
007 //                                                               //
008 // Author:  George Pope                                          //
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   // Copy constructor
029   SmarterSiPathFinder(const SmarterSiPathFinder &right);
030 
031   // Construct from a silicon detector
032   SmarterSiPathFinder(const AbsSiDetectorNode *theDetector);
033 
034   // Destructor
035   virtual ~SmarterSiPathFinder();
036 
037   // assignment
038   const SmarterSiPathFinder & operator=(const SmarterSiPathFinder &right);
039 
040   // retreive intersection set
041   virtual SiWaferIntersectionSet * newIntersectionSet(const Trajectory &theTrajectory) const;
042 
043   // return intersection set for single layer only
044   virtual SiWaferIntersectionSet * newIntersectionSet(const Trajectory &theTrajectory, const int layer) const;
045 
046   // Compute the intersection allowing for uncertainty in the 
047   // trajectory. Require that the intersection be inside (margin * sigma)
048   // of the boundary of the active region in order to be included in the
049   // intersection set. Margin > 0 => allow intersections outside the nominal
050   // active area. Margin < 0 => require the intersection be inside the
051   // nominal active area AND at least (margin * sigma) from the boundary.
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   // Private utility functions
063   //----------------------------
064   
065   // Initialize some geometry variables used in findIntersections
066   //
067   void initFILimits( void ) const;
068   
069   // Fill the wafer intersection set with intersections within the
070   // specified margins
071   //
072   void findIntersections( const SimpleReconstructedTrack &track, 
073                           const int layer,
074                           double phiMargin, double zMargin,
075                           SiWaferIntersectionSet * iSet ) const;
076   
077   // Keeps azimuthal angles within the same branch
078   //
079   float phiBranch( float phi ) const;
080   
081   // Return the phi address of the ladder closest in phi to the 
082   // specified value
083   //
084   int   getPhiAddr( float phi, int barrel, int layer ) const;
085   
086   // Return distance **in local coordinates** equal to one sigma
087   // in the estimated track intersection in the plane of the 
088   // detector
089   //
090   Hep3Vector getSigmaLoc( const Trajectory::Location * loc, 
091                           const SimpleReconstructedTrack & track,
092                           const CdfHalfLadder & wafer ) const;
093                          
094   // Determine if the specified intersection is within the specified 
095   // margins (in local coordinates). Also returns the vector 
096   // from the center to the intersection point in local coordinates.
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   // Cache for geometry values used by 
106   // FI methods: 
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   // Private data
118   //----------------------------
119 
120   // The detector:
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 // SMARTERSIPATHFINDER_HH_
131 
132 

source navigation ] diff markup ] identifier search ] freetext search ] file search ]

This page was automatically generated by the LXR engine.
The LXR team
Valid HTML 4.01!

Send problems or questions to cdfcode@fnal.gov