Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-28 07:02:49

0001 /**
0002  \file
0003  Declaration of class Smear::PlanarTracker.
0004  
0005  \author    Will Foreman
0006  \date      2011-08-19
0007  \copyright 2011 Brookhaven National Lab
0008  */
0009 
0010 #ifndef INCLUDE_EICSMEAR_SMEAR_PLANARTRACKER_H_
0011 #define INCLUDE_EICSMEAR_SMEAR_PLANARTRACKER_H_
0012 
0013 #include <Rtypes.h>  // For ClassDef
0014 
0015 #include "eicsmear/smear/Smear.h"  // KinType
0016 #include "eicsmear/smear/Tracker.h"
0017 
0018 namespace erhic {
0019 
0020 class VirtualParticle;
0021 
0022 }  // namespace erhic
0023 
0024 namespace Smear {
0025 
0026 class ParticleMCS;
0027 
0028 /**
0029  A cylindrical tracking detector.
0030  Implements both intrinsic and multiple-scattering resolution.
0031  */
0032 class PlanarTracker : public Tracker {
0033  public:
0034   /**
0035    Default constructor.
0036    B = 2, NRL = 0.03, sigma(r-phi) = 0.001, N = 25, inner radius = 0.25 m,
0037    outer radius = 1 m, length = 6 m.
0038    */
0039   PlanarTracker();
0040 
0041   /**
0042    Constructor for a tracker with arbitrary positioning along z.
0043    */
0044   PlanarTracker(double innerRadius, double outerRadius,
0045                 double zMin, double zMax,
0046                 double magneticField, double nRadiationLengths,
0047                 double sigmaRPhi, double nPlanes);
0048 
0049   /**
0050    Destructor.
0051    */
0052   virtual ~PlanarTracker();
0053 
0054   /**
0055    Returns a new copy of this Tracker.
0056    The argument is not used.
0057    */
0058   virtual PlanarTracker* Clone(const char* = "") const;
0059 
0060   /**
0061    Print information about this device to standard output.
0062    */
0063   virtual void Print(Option_t* = "") const;
0064 
0065   /**
0066    Returns the path length of the particle through the tracker in metres.
0067    */
0068   double L(const erhic::VirtualParticle&) const;
0069 
0070   /**
0071    Returns the transverse path length of the particle through the
0072    tracker in metres.
0073    */
0074   double LPrime(const erhic::VirtualParticle&) const;
0075 
0076   /**
0077    Returns the number of measurement points for the particle.
0078    This is the number of planes hit in the planar tracker for the particle.
0079    */
0080   virtual int NPoints(const erhic::VirtualParticle&) const;
0081 
0082   /**
0083    Returns true if the particle falls within the angular acceptance
0084    defined via the input parameters.
0085    This is defined as the particle's transverse path length being
0086    greater than half of (outer radius - inner radius) / number of fit points
0087    i.e. the particle has to pass through enough of the detector to cause
0088    at least one measureable point.
0089    */
0090   virtual bool Accepts(const erhic::VirtualParticle&) const;
0091 
0092   /**
0093    Returns the minimum theta of particles accepted by the tracker (radians).
0094    */
0095   virtual double GetThetaMin() const;
0096 
0097   /**
0098    Returns the maximum theta of particles accepted by the tracker (radians).
0099    */
0100   virtual double GetThetaMax() const;
0101 
0102  protected:
0103   /** 
0104    Compute the intersection point of the particle with a radial surface. 
0105    Returns the 3-vector of the intersection point if the z of the 
0106    intersection is within (zmin, zmax) of this detector, 
0107    or (0, 0, NaN) if not. 
0108    */ 
0109   TVector3 ComputeIntersectionWithRadius(const erhic::VirtualParticle&,
0110                                          double radius) const;
0111   TVector3 ComputeIntersectionWithPlane(const erhic::VirtualParticle&,
0112                                         double z) const;
0113   TVector3 ComputePath(const erhic::VirtualParticle&) const;
0114 
0115   double mNPlanes;  ///< Number of planes
0116   double mInnerRadius;  ///< Inner radius (m)
0117   double mOuterRadius;  ///< Outer radius (m)
0118   double mZMin;  ///< Lower (most negative) z face
0119   double mZMax;  ///< Upper (most positive) z face
0120 
0121   ClassDef(Smear::PlanarTracker, 1)
0122 };
0123 
0124 inline PlanarTracker* PlanarTracker::Clone(const char*) const {
0125   return new PlanarTracker(*this);
0126 }
0127 
0128 }  // namespace Smear
0129 
0130 #endif  // INCLUDE_EICSMEAR_SMEAR_PLANARTRACKER_H_