e6744d33ea196d931e5568eed5a5e097752a7a9d
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackletGTU.h
1 #ifndef ALITRDTRACKLETGTU_H
2 #define ALITRDTRACKLETGTU_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id: AliTRDtrackletGTU.h 27496 2008-07-22 08:35:45Z cblume $ */
7
8 // --------------------------------------------------------
9 //
10 // GTU tracklet
11 //
12 //
13 // --------------------------------------------------------
14
15 #include "AliTRDtrackletBase.h"
16 #include "AliLog.h"
17
18 class AliTRDgtuParam;
19
20 class AliTRDtrackletGTU : public AliTRDtrackletBase {
21  public:
22   AliTRDtrackletGTU();
23   AliTRDtrackletGTU(AliTRDtrackletBase *tracklet);
24   AliTRDtrackletGTU(const AliTRDtrackletGTU& trk);
25
26   ~AliTRDtrackletGTU();
27
28   AliTRDtrackletGTU& operator=(const AliTRDtrackletGTU &rhs);
29
30   Bool_t IsSortable() const { return kTRUE; }
31   Int_t Compare(const TObject *o) const;
32
33   // ----- Getters for information from the tracklet word -----
34   Int_t GetYbin() const { return fTracklet->GetYbin(); }
35   Int_t GetdY() const { return fTracklet->GetdY(); }
36   Int_t GetZbin() const { return fTracklet->GetZbin(); }
37   Int_t GetPID() const { return ((Int_t) (255 * fTracklet->GetPID())); }
38   Double_t GetPID(Int_t is) const { return fTracklet->GetPID(is); }
39
40   // ----- Getters for calculated properties -----
41   Int_t GetYProj() const { return fYProj; }
42   Int_t GetAlpha() const { return fAlpha; }
43   Int_t GetYPrime() const { return fYPrime; }
44   Int_t GetSubChannel(Int_t zch) const;
45
46   // ----- Getters for offline corresponding values -----
47   Bool_t CookPID() { return kFALSE; }
48   Int_t GetDetector() const { return fTracklet->GetDetector(); }
49   Int_t GetIndex() const { return fIndex; }
50
51   Float_t GetdYdX() const { return (GetdY() * 140e-4 / 3.); }
52   Float_t GetX() const { return 0; }
53   Float_t GetY() const { return (GetYbin() * 160e-4); }
54   Float_t GetZ() const { return 0; }
55
56 //  AliTRDtrackletBase* GetTracklet() const { return fTracklet; }
57   UInt_t GetTrackletWord() const { return fTracklet->GetTrackletWord(); }
58
59   Int_t GetSide() const { return GetYbin() < 0 ? 0 : 1; }
60
61   Int_t GetLabel() const; // { return fLabel; }
62
63   // ----- Setters -----
64   void SetAlpha(Int_t alpha) { fAlpha = alpha; }
65   void SetYProj(Int_t yproj) { fYProj = yproj; }
66   void SetYPrime(Int_t yprime) { fYPrime = yprime; }
67
68   void SetSubChannel(Int_t zch, Int_t subch);
69   void SetDetector(Int_t /* id */ ) { AliError("Cannot change base tracklet"); }
70   void SetIndex(Int_t idx) { fIndex = idx; }
71
72   void RemoveTracklet() { fTracklet = fgkDummyTracklet; }
73
74  protected:
75   AliTRDgtuParam *fGtuParam;     //!
76   AliTRDtrackletBase *fTracklet; // pointer to the underlying tracklet
77
78   Int_t *fSubChannel;           //! [AliTRDgtuParam::GetNZChannels()]
79   Bool_t fAssignedZ;            // tracklet assigned to a Z-channel
80
81   Int_t fAlpha;                 // calculated value for alpha
82   Int_t fYProj;                 // calculated value for y_proj
83   Int_t fYPrime;                // calculated value for y'
84   Int_t fIndex;                 // index of tracklet in the sequence after the input units
85
86   static AliTRDtrackletBase* fgkDummyTracklet; // dummy tracklet, used in case no tracklet is given
87
88  private:
89
90   ClassDef(AliTRDtrackletGTU, 1);
91 };
92
93 #endif