]>
Commit | Line | Data |
---|---|---|
7f572c00 | 1 | #ifndef ALIHELIX_H |
2 | #define ALIHELIX_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | ||
8 | //------------------------------------------------------------------------- | |
9 | // Class AliHelix | |
10 | // | |
11 | // Origin: Marian Ivanov marian.ivanov@cern.ch | |
12 | //------------------------------------------------------------------------- | |
13 | ||
14 | #include <TObject.h> | |
15 | #include <TMath.h> | |
16 | ||
17 | ||
18 | class AliCluster; | |
19 | class AliKalmanTrack; | |
51ad6848 | 20 | class AliExternalTrackParam; |
7f572c00 | 21 | |
22 | class AliHelix : public TObject { | |
23 | public: | |
24 | AliHelix(); | |
25 | AliHelix(const AliHelix &t); | |
26 | AliHelix(const AliKalmanTrack &t); | |
51ad6848 | 27 | AliHelix(const AliExternalTrackParam &t); |
7f572c00 | 28 | AliHelix(Double_t x[3], Double_t p[3], Double_t charge=1, Double_t conversion=0.); |
29 | virtual ~AliHelix(){}; | |
30 | inline void Evaluate(Double_t t, Double_t r[3]); | |
31 | void Evaluate(Double_t t, Double_t r[3], //radius vector | |
32 | Double_t g[3], //first defivatives | |
33 | Double_t gg[3]); //second derivatives | |
81e97e0d | 34 | void GetMomentum(Double_t phase, Double_t p[4], Double_t conversion=0., Double_t *xr=0); // return momentum |
7f572c00 | 35 | void GetAngle(Double_t t1, AliHelix &h, Double_t t2, Double_t angle[3]); |
36 | inline Double_t GetHelixR(Double_t phase=0); | |
37 | inline Double_t GetHelixZ(Double_t phase=0); | |
38 | ||
39 | Double_t GetPhase(Double_t x0, Double_t y0); //return phase for nearest point | |
40 | Double_t GetPhaseZ(Double_t z0); // return phase for given z | |
41 | Int_t GetPhase(Double_t r0, Double_t t[2]); //return phase for the nearest point | |
42 | Int_t GetRPHIintersections(AliHelix &h, Double_t phase[2][2], Double_t ri[2], Double_t cut=3.); | |
9be2fe3a | 43 | Int_t GetClosestPhases(AliHelix &h, Double_t phase[2][2]); |
81e97e0d | 44 | Double_t GetPointAngle(AliHelix &h, Double_t phase[2],const Float_t *vertex); |
7f572c00 | 45 | Int_t LinearDCA(AliHelix &h, Double_t &t1, Double_t &t2, |
46 | Double_t &R, Double_t &dist); | |
47 | // | |
48 | Int_t ParabolicDCA(AliHelix&h, //helixes | |
49 | Double_t &t1, Double_t &t2, | |
50 | Double_t &R, Double_t &dist, Int_t iter=1); | |
9be2fe3a | 51 | Int_t ParabolicDCA2(AliHelix&h, //helixes |
52 | Double_t &t1, Double_t &t2, | |
53 | Double_t &R, Double_t &dist, Double_t err[3], Int_t iter=1); | |
54 | Double_t GetHelix(Int_t i) const{return fHelix[i];} | |
55 | public: | |
7f572c00 | 56 | Double_t fHelix[9]; //helix parameters |
57 | private: | |
58 | ClassDef(AliHelix,1) // AliHelix | |
59 | }; | |
60 | ||
61 | void AliHelix::Evaluate(Double_t t, Double_t r[3]){ | |
62 | // | |
63 | // calculate poitition at given phase t | |
64 | Double_t phase=fHelix[4]*t+fHelix[2]; | |
65 | r[0] = fHelix[5] + TMath::Sin(phase)/fHelix[4]; | |
66 | r[1] = fHelix[0] - TMath::Cos(phase)/fHelix[4]; | |
67 | r[2] = fHelix[1] + fHelix[3]*t; | |
68 | } | |
69 | ||
70 | inline Double_t AliHelix::GetHelixR(Double_t phase) | |
71 | { | |
72 | Double_t x[3]; | |
73 | Evaluate(phase,x); | |
74 | return TMath::Sqrt(x[0]*x[0]+x[1]*x[1]); | |
75 | } | |
76 | ||
77 | inline Double_t AliHelix::GetHelixZ(Double_t phase) | |
78 | { | |
79 | Double_t x[3]; | |
80 | Evaluate(phase,x); | |
81 | return x[2]; | |
82 | } | |
83 | ||
84 | ||
85 | #endif | |
86 | ||
87 |