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::Tracker.
0004  
0005  \author    Will Foreman
0006  \date      2011-08-19
0007  \copyright 2011 Brookhaven National Lab
0008  */
0009 
0010 #ifndef INCLUDE_EICSMEAR_SMEAR_TRACKER_H_
0011 #define INCLUDE_EICSMEAR_SMEAR_TRACKER_H_
0012 
0013 #include <Rtypes.h>  // For ClassDef
0014 
0015 #include "eicsmear/smear/Distributor.h"
0016 #include "eicsmear/smear/Smear.h"  // KinType
0017 #include "eicsmear/smear/Smearer.h"
0018 
0019 namespace erhic {
0020 
0021 class VirtualParticle;
0022 
0023 }  // namespace erhic
0024 
0025 namespace Smear {
0026 
0027 class ParticleMCS;
0028 
0029 /**
0030  A cylindrical tracking detector.
0031  Implements both intrinsic and multiple-scattering resolution.
0032  Abstract base class: inheriting classes must implement L(), LPrime(),
0033  NPoints() and Accepts().
0034  */
0035 class Tracker : public Smearer {
0036  public:
0037   /**
0038    Constructor.
0039    */
0040   Tracker(double magneticField = 2., double nRadiationLengths = 0.01,
0041           double resolution = 0.001);
0042 
0043   /**
0044    Destructor.
0045    */
0046   virtual ~Tracker();
0047 
0048   /**
0049    Returns the resolution at the kinematics of this particle.
0050    */
0051   virtual double Resolution(const erhic::VirtualParticle&) const;
0052 
0053   /**
0054    Smear the properties of the input particle and store the
0055    smeared values in the ParticleMCS.
0056    */
0057   void Smear(const erhic::VirtualParticle&, ParticleMCS&);
0058 
0059   /**
0060    Returns the path length of the particle through the tracker in metres.
0061    */
0062   virtual double L(const erhic::VirtualParticle&) const = 0;
0063 
0064   /**
0065    Returns the transverse path length of the particle through the
0066    tracker in metres.
0067    */
0068   virtual double LPrime(const erhic::VirtualParticle&) const = 0;
0069 
0070   /**
0071    Returns the number of measurement points for the particle.
0072    */
0073   virtual int NPoints(const erhic::VirtualParticle&) const = 0;
0074 
0075   /**
0076    Returns true if the particle falls within the angular acceptance
0077    of the detector.
0078    */
0079   virtual bool Accepts(const erhic::VirtualParticle&) const = 0;
0080 
0081   /**
0082    Returns the minimum theta of particles accepted by the tracker (radians).
0083    */
0084   virtual double GetThetaMin() const = 0;
0085 
0086   /**
0087    Returns the maximum theta of particles accepted by the tracker (radians).
0088    */
0089   virtual double GetThetaMax() const = 0;
0090 
0091   /**
0092    Set whether a vertex constraint should be used when calculating the
0093    intrinsic resolution. Without it a factor of sqrt(720) is included in
0094    the resolution; with it the factor is sqrt(320). By defuault no
0095    constraint is assumed.
0096    */
0097   void SetVertexConstraint(bool constrain);
0098 
0099  protected:
0100   /**
0101    Multiple scattering contribution, given by
0102    delta(p)/p = 0.0136 * z * sqrt(NRL) / (0.3 * B * L * beta)
0103    z = charge, NRL = # radiation lengths, B = mag field, L = track length,
0104    beta = particle velocity.
0105    */
0106   virtual double MultipleScatteringContribution(
0107     const erhic::VirtualParticle&) const;
0108 
0109   /**
0110    The intrinsic resolution of the detector, depending on momentum,
0111    magnetic field, the detector dimensions, the number of fit points
0112    and the point resolution.
0113    */
0114   virtual double IntrinsicContribution(const erhic::VirtualParticle&) const;
0115 
0116   Int_t mFactor;  ///< Factor in intrinsic resolution calculation
0117                   ///< dependent on vertex constraint.
0118   double mMagField;  ///< Magnetic field strength in Tesla
0119   double mNRadLengths;  ///< Number of radiation lengths (dimensionless)
0120   double mSigmaRPhi;  ///< Point resolution
0121   Distributor Distribution;  ///< Random distribution
0122 
0123   ClassDef(Smear::Tracker, 1)
0124 };
0125 
0126 }  // namespace Smear
0127 
0128 #endif  // INCLUDE_EICSMEAR_SMEAR_TRACKER_H_