]>
Commit | Line | Data |
---|---|---|
364df03a | 1 | #ifndef ALIHLTMUONCALCULATIONS_H |
2 | #define ALIHLTMUONCALCULATIONS_H | |
3 | /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
1d8ae082 | 6 | // $Id$ |
364df03a | 7 | |
8 | //////////////////////////////////////////////////////////////////////////////// | |
9 | // | |
10 | // Author: Artur Szostak | |
11 | // Email: artur@alice.phy.uct.ac.za | artursz@iafrica.com | |
12 | // | |
13 | //////////////////////////////////////////////////////////////////////////////// | |
14 | ||
15 | #include "AliHLTMUONDataTypes.h" | |
16 | ||
a3d4b6ba | 17 | extern "C" struct AliHLTMUONTriggerRecordStruct; |
18 | ||
b92524d0 | 19 | /* |
c9537879 | 20 | * Note: this class uses static global variables so thread protection must be |
a3d4b6ba | 21 | * explicit in any multi-threaded usage. Or the class should be rewritten. |
364df03a | 22 | */ |
e6357f88 | 23 | class AliHLTMUONCalculations |
24 | { | |
25 | public: | |
26 | ||
a3d4b6ba | 27 | /// Calculates the momentum estimate given two track points behind the |
28 | /// dipole magnet and assuming origin is the interaction point. | |
e6357f88 | 29 | static bool ComputeMomentum( |
30 | AliHLTFloat32_t x1, | |
31 | AliHLTFloat32_t y1, AliHLTFloat32_t y2, | |
32 | AliHLTFloat32_t z1, AliHLTFloat32_t z2 | |
33 | ); | |
34 | ||
35 | static AliHLTFloat32_t Zf() { return fgZf; } | |
36 | static void Zf(AliHLTFloat32_t value) { fgZf = value; } | |
b92524d0 | 37 | static AliHLTFloat32_t QBL(); |
38 | static void QBL(AliHLTFloat32_t value); | |
e6357f88 | 39 | |
40 | static AliHLTMUONParticleSign Sign() { return fgSign; } | |
41 | static AliHLTFloat32_t Px() { return fgPx; } | |
42 | static AliHLTFloat32_t Py() { return fgPy; } | |
43 | static AliHLTFloat32_t Pz() { return fgPz; } | |
c9537879 | 44 | |
45 | /// Calculates the invariant mass for a pair of particles. | |
46 | static AliHLTFloat32_t ComputeMass( | |
47 | AliHLTFloat32_t massA, | |
48 | AliHLTFloat32_t pxA, | |
49 | AliHLTFloat32_t pyA, | |
50 | AliHLTFloat32_t pzA, | |
51 | AliHLTFloat32_t massB, | |
52 | AliHLTFloat32_t pxB, | |
53 | AliHLTFloat32_t pyB, | |
54 | AliHLTFloat32_t pzB | |
55 | ); | |
56 | ||
a3d4b6ba | 57 | static bool FitLineToTriggerRecord(const AliHLTMUONTriggerRecordStruct& trigger); |
58 | ||
59 | static bool FitLineToTriggerRecord( | |
60 | const AliHLTMUONTriggerRecordStruct& trigger, | |
61 | const bool hitset[4] | |
62 | ); | |
63 | ||
bc5cb6d6 | 64 | static bool FitLine( |
65 | const AliHLTMUONTriggerRecordStruct& trigger, | |
66 | const bool hitset[4] | |
67 | ); | |
68 | ||
a3d4b6ba | 69 | static AliHLTFloat32_t IdealZ1() { return fgIdealZ1; } |
70 | static void IdealZ1(AliHLTFloat32_t value) { fgIdealZ1 = value; } | |
71 | static AliHLTFloat32_t IdealZ2() { return fgIdealZ2; } | |
72 | static void IdealZ2(AliHLTFloat32_t value) { fgIdealZ2 = value; } | |
73 | ||
74 | static AliHLTFloat32_t IdealX1() { return fgIdealX1; } | |
75 | static AliHLTFloat32_t IdealY1() { return fgIdealY1; } | |
76 | static AliHLTFloat32_t IdealX2() { return fgIdealX2; } | |
77 | static AliHLTFloat32_t IdealY2() { return fgIdealY2; } | |
78 | ||
79 | static bool FitLineToData( | |
80 | const AliHLTFloat32_t* x, const AliHLTFloat32_t* y, | |
81 | const AliHLTFloat32_t* z, AliHLTUInt32_t n | |
82 | ); | |
83 | ||
462e3880 | 84 | static bool FitLineToData( |
85 | const AliHLTFloat32_t* x, const AliHLTFloat32_t* z, | |
86 | AliHLTUInt32_t n | |
87 | ); | |
88 | ||
a3d4b6ba | 89 | static AliHLTFloat32_t Mzx() { return fgMzx; } |
90 | static AliHLTFloat32_t Mzy() { return fgMzy; } | |
91 | static AliHLTFloat32_t Czx() { return fgCzx; } | |
92 | static AliHLTFloat32_t Czy() { return fgCzy; } | |
93 | ||
94 | static AliHLTFloat32_t ComputeChi2( | |
95 | const AliHLTFloat32_t* x, const AliHLTFloat32_t* y, | |
96 | const AliHLTFloat32_t* z, AliHLTUInt32_t n | |
97 | ); | |
98 | ||
bc5cb6d6 | 99 | static AliHLTFloat32_t ComputeChi2( |
100 | const AliHLTMUONTriggerRecordStruct& trigger, | |
101 | const bool hitset[4] | |
102 | ); | |
103 | ||
a3d4b6ba | 104 | static AliHLTFloat32_t SigmaX2() { return fgSigmaX2; } |
105 | static void SigmaX2(AliHLTFloat32_t value) { fgSigmaX2 = (value != 0 ? value : 1.); } | |
106 | static AliHLTFloat32_t SigmaY2() { return fgSigmaY2; } | |
107 | static void SigmaY2(AliHLTFloat32_t value) { fgSigmaY2 = (value != 0 ? value : 1.); } | |
108 | ||
e6357f88 | 109 | private: |
110 | ||
111 | // Prevent destroying or creating of this object. | |
112 | AliHLTMUONCalculations(); | |
113 | ~AliHLTMUONCalculations(); | |
114 | ||
a3d4b6ba | 115 | static AliHLTFloat32_t fgZf; /// The Z coordinate of the middle of the dipole magnetic field. |
116 | static AliHLTFloat32_t fgQBLScaled; /// The integrated field strength times units of charge (T.m.*c/1e9) | |
117 | ||
118 | static AliHLTMUONParticleSign fgSign; /// The calculated sign. | |
119 | static AliHLTFloat32_t fgPx; /// The calculated X momentum (GeV/c). | |
120 | static AliHLTFloat32_t fgPy; /// The calculated Y momentum (GeV/c). | |
121 | static AliHLTFloat32_t fgPz; /// The calculated Z momentum (GeV/c). | |
122 | ||
123 | static AliHLTFloat32_t fgSigmaX2; /// The sigma squared value for the variance / uncertainty in X coordinates. | |
124 | static AliHLTFloat32_t fgSigmaY2; /// The sigma squared value for the variance / uncertainty in Y coordinates. | |
125 | ||
126 | static AliHLTFloat32_t fgMzx; /// Calculated slope of the line fitted to the ZX plane. (x = fgMzx * z + fgCzx) | |
127 | static AliHLTFloat32_t fgMzy; /// Calculated slope of the line fitted to the ZY plane. (y = fgMzy * z + fgCzy) | |
128 | static AliHLTFloat32_t fgCzx; /// Calculated coefficient of the line fitted to the ZX plane. (x = fgMzx * z + fgCzx) | |
129 | static AliHLTFloat32_t fgCzy; /// Calculated coefficient of the line fitted to the ZY plane. (y = fgMzy * z + fgCzy) | |
e6357f88 | 130 | |
a3d4b6ba | 131 | static AliHLTFloat32_t fgIdealX1; /// Ideal X coordinate of the point on MT1 |
132 | static AliHLTFloat32_t fgIdealY1; /// Ideal Y coordinate of the point on MT1 | |
133 | static AliHLTFloat32_t fgIdealZ1; /// Ideal Z coordinate of the point on MT1 | |
134 | static AliHLTFloat32_t fgIdealX2; /// Ideal X coordinate of the point on MT2 | |
135 | static AliHLTFloat32_t fgIdealY2; /// Ideal Y coordinate of the point on MT2 | |
136 | static AliHLTFloat32_t fgIdealZ2; /// Ideal Z coordinate of the point on MT2 | |
e6357f88 | 137 | }; |
364df03a | 138 | |
139 | #endif // ALIHLTMUONCALCULATIONS_H |