![]() |
|
|||
File indexing completed on 2025-04-02 08:47:07
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_
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |