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::RadialTracker.
0004  
0005  \author    Will Foreman
0006  \date      2011-08-19
0007  \copyright 2011 Brookhaven National Lab
0008  */
0009 
0010 #ifndef INCLUDE_EICSMEAR_SMEAR_RADIALTRACKER_H_
0011 #define INCLUDE_EICSMEAR_SMEAR_RADIALTRACKER_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 RadialTracker : 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   RadialTracker();
0040 
0041   /**
0042    Constructor for a tracker with arbitrary positioning along z.
0043    */
0044   RadialTracker(double innerRadius, double outerRadius,
0045                 double zMin, double zMax,
0046                 double magneticField, double numberOfRadiationLengths,
0047                 double sigmaRPhi, double numberOfPoints);
0048 
0049   /**
0050    Destructor.
0051    */
0052   virtual ~RadialTracker();
0053 
0054   /**
0055    Returns a new copy of this Tracker.
0056    The argument is not used.
0057    */
0058   virtual RadialTracker* 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    */
0079   virtual int NPoints(const erhic::VirtualParticle&) const;
0080 
0081   /**
0082    Returns true if the particle falls within the angular acceptance
0083    defined via the input parameters.
0084    This is defined as the particle's transverse path length being
0085    greater than half of (outer radius - inner radius) / number of fit points
0086    i.e. the particle has to pass through enough of the detector to cause
0087    at least one measureable point.
0088    */
0089   virtual bool Accepts(const erhic::VirtualParticle&) const;
0090 
0091   /**
0092    Returns the minimum theta of particles accepted by the tracker (radians).
0093    */
0094   virtual double GetThetaMin() const;
0095 
0096   /**
0097    Returns the maximum theta of particles accepted by the tracker (radians).
0098    */
0099   virtual double GetThetaMax() const;
0100 
0101  protected:
0102   /**
0103    Compute the intersection point of the particle with a radial surface.
0104    Returns the 3-vector of the intersection point if the z of the
0105    intersection is within (zmin, zmax) of this detector,
0106    or (0, 0, NaN) if not.
0107    */
0108   TVector3 ComputeIntersectionWithRadius(const erhic::VirtualParticle&,
0109                                          double radius) const;
0110 
0111   /**
0112    Compute the intersection point of the particle with an x-y plane at z.
0113    Returns the 3-vector of the intersetion point if the radius of the
0114    intersection is within (inner radius, outer radius), or
0115    (0, 0, NaN) if not.
0116    */
0117   TVector3 ComputeIntersectionWithPlane(const erhic::VirtualParticle&,
0118                                         double z) const;
0119 
0120   /**
0121    Computes the path vector, defined as (v2 - v1), where v1 and v2
0122    are the position vectors of the particle's intersections with
0123    the cylinder's surface.
0124    Returns (0, 0, 0) for particles that don't intersect, or if
0125    something goes wrong.
0126    */
0127   TVector3 ComputePath(const erhic::VirtualParticle&) const;
0128 
0129   double mNFitPoints;  ///< Number of fit points
0130   double mInnerRadius;  ///< Inner radius (m)
0131   double mOuterRadius;  ///< Outer radius (m)
0132   double mZMin;  ///< Lower (most negative) z face
0133   double mZMax;  ///< Upper (most positive) z face
0134 
0135   ClassDef(Smear::RadialTracker, 1)
0136 };
0137 
0138 inline RadialTracker* RadialTracker::Clone(const char*) const {
0139   return new RadialTracker(*this);
0140 }
0141 
0142 }  // namespace Smear
0143 
0144 #endif  // INCLUDE_EICSMEAR_SMEAR_RADIALTRACKER_H_