]>
Commit | Line | Data |
---|---|---|
52c19022 | 1 | #ifndef ALITRDTRACKLETMCM_H |
2 | #define ALITRDTRACKLETMCM_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id: AliTRDtrackletMCM.h 27496 2008-07-22 08:35:45Z cblume $ */ | |
7 | ||
8 | //----------------------------------- | |
9 | // | |
10 | // TRD tracklet word (as from FEE) | |
11 | // only 32-bit of information + detector ID | |
12 | // | |
13 | //---------------------------------- | |
14 | ||
15 | #include "AliTRDtrackletBase.h" | |
4cc89512 | 16 | #include "AliTRDgeometry.h" |
17 | #include "AliTRDpadPlane.h" | |
52c19022 | 18 | |
19 | class AliTRDtrackletMCM : public AliTRDtrackletBase { | |
20 | public: | |
4cc89512 | 21 | AliTRDtrackletMCM(UInt_t trackletWord = 0); |
22 | AliTRDtrackletMCM(UInt_t trackletWword, Int_t hcid); | |
b0a41e80 | 23 | AliTRDtrackletMCM(UInt_t trackletWword, Int_t hcid, Int_t rob, Int_t mcm); |
52c19022 | 24 | AliTRDtrackletMCM(const AliTRDtrackletMCM &rhs); |
25 | ~AliTRDtrackletMCM(); | |
26 | ||
27 | // ----- Getters for contents of tracklet word ----- | |
5f006bd7 | 28 | Int_t GetYbin() const; |
29 | Int_t GetdY() const; | |
52c19022 | 30 | Int_t GetZbin() const { return ((fTrackletWord >> 20) & 0xf); } |
31 | Int_t GetPID() const { return ((fTrackletWord >> 24) & 0xff); } | |
32 | ||
33 | // ----- Getters for MCM-tracklet information ----- | |
34 | Int_t GetMCM() const { return fMCM; } | |
35 | Int_t GetROB() const { return fROB; } | |
25b41f6f | 36 | Int_t GetLabel() const { return fLabel[0]; } |
37 | Int_t GetLabel(const Int_t i) const { return fLabel[i]; } | |
38 | Bool_t HasLabel(const Int_t label) const { return (fLabel[0] == label || fLabel[1] == label || fLabel[2] == label); } | |
52c19022 | 39 | |
40 | // ----- Getters for offline corresponding values ----- | |
41 | Bool_t CookPID() { return kFALSE; } | |
36dc3337 | 42 | Double_t GetPID(Int_t /* is */) const { return GetPID()/255.; } |
52c19022 | 43 | Int_t GetDetector() const { return fHCId / 2; } |
44 | Int_t GetHCId() const { return fHCId; } | |
45 | Float_t GetdYdX() const { return (GetdY() * 140e-4 / 3.); } | |
4cc89512 | 46 | Float_t GetX() const { return fGeo->GetTime0((fHCId % 12) / 2); } |
52c19022 | 47 | Float_t GetY() const { return (GetYbin() * 160e-4); } |
5f006bd7 | 48 | Float_t GetZ() const { return fGeo->GetPadPlane((fHCId % 12) / 2, (fHCId / 12) % 5)->GetRowPos( 4 * (fROB / 2) + fMCM / 4) - |
f061fb9d | 49 | fGeo->GetPadPlane((fHCId % 12) / 2, (fHCId /12) % 5)->GetRowSize(4 * (fROB / 2) + fMCM / 4) * .5; } |
5f006bd7 | 50 | Float_t GetLocalZ() const { return GetZ() - |
25b41f6f | 51 | (fGeo->GetPadPlane((fHCId % 12) / 2, (fHCId / 12) % 5)->GetRow0()+fGeo->GetPadPlane((fHCId % 12) / 2, (fHCId / 12) % 5)->GetRowEnd())/2.; } |
52c19022 | 52 | |
48e5462a | 53 | Int_t GetQ0() const { return fQ0; } |
54 | Int_t GetQ1() const { return fQ1; } | |
4ff7ed2b | 55 | Int_t GetNHits() const { return fNHits; } |
56 | Int_t GetNHits0() const { return fNHits0; } | |
57 | Int_t GetNHits1() const { return fNHits1; } | |
48e5462a | 58 | |
52c19022 | 59 | UInt_t GetTrackletWord() const { return fTrackletWord; } |
60 | void SetTrackletWord(UInt_t trackletWord) { fTrackletWord = trackletWord; } | |
61 | ||
62 | void SetDetector(Int_t id) { fHCId = 2 * id + (GetYbin() < 0 ? 0 : 1); } | |
63 | void SetHCId(Int_t id) { fHCId = id; } | |
64 | void SetMCM(Int_t mcm) { fMCM = mcm; } | |
65 | void SetROB(Int_t rob) { fROB = rob; } | |
25b41f6f | 66 | void SetLabel(Int_t label[]); |
48e5462a | 67 | void SetQ0(Int_t charge) { fQ0 = charge; } |
68 | void SetQ1(Int_t charge) { fQ1 = charge; } | |
4ff7ed2b | 69 | void SetNHits(Int_t nhits) { fNHits = nhits; } |
70 | void SetNHits0(Int_t nhits) { fNHits0 = nhits; } | |
71 | void SetNHits1(Int_t nhits) { fNHits1 = nhits; } | |
52c19022 | 72 | |
ce51199c | 73 | void SetSlope(Float_t slope) { fSlope = slope; } |
74 | void SetOffset(Float_t offset) { fOffset = offset; } | |
75 | void SetError(Float_t error) { fError = error; } | |
76 | void SetClusters(Float_t *res, Float_t *q, Int_t n); | |
77 | ||
78 | Float_t GetSlope() const { return fSlope; } | |
79 | Float_t GetOffset() const { return fOffset; } | |
80 | Float_t GetError() const { return fError; } | |
81 | Int_t GetNClusters() const { return fNClusters; } | |
82 | Float_t *GetResiduals() const { return fResiduals; } | |
83 | Float_t *GetClsCharges() const { return fClsCharges; } | |
84 | ||
52c19022 | 85 | protected: |
4cc89512 | 86 | AliTRDgeometry *fGeo; //! TRD geometry |
87 | ||
52c19022 | 88 | Int_t fHCId; // half-chamber ID (only transient) |
5f006bd7 | 89 | UInt_t fTrackletWord; // tracklet word: PID | Z | deflection length | Y |
52c19022 | 90 | // bits: 12 4 7 13 |
4cc89512 | 91 | Int_t fMCM; // MCM no. in which the tracklet was found |
92 | Int_t fROB; // ROB no. on which the tracklet was found | |
93 | ||
48e5462a | 94 | Int_t fQ0; // accumulated charge in the first time window |
95 | Int_t fQ1; // accumulated charge in the second time window | |
96 | ||
4ff7ed2b | 97 | Int_t fNHits; // no. of contributing clusters |
98 | Int_t fNHits0; // no. of contributing clusters in window 0 | |
99 | Int_t fNHits1; // no. of contributing clusters in window 1 | |
100 | ||
25b41f6f | 101 | Int_t fLabel[3]; // up to 3 labels for MC track |
5f006bd7 | 102 | |
ce51199c | 103 | Float_t fSlope; // tracklet slope |
104 | Float_t fOffset; // tracklet offset | |
105 | Float_t fError; // tracklet error | |
106 | Int_t fNClusters; // no. of clusters | |
107 | Float_t *fResiduals; //[fNClusters] cluster to tracklet residuals | |
108 | Float_t *fClsCharges; //[fNClusters] cluster charge | |
4cc89512 | 109 | |
110 | private: | |
111 | AliTRDtrackletMCM& operator=(const AliTRDtrackletMCM &rhs); // not implemented | |
52c19022 | 112 | |
48e5462a | 113 | ClassDef(AliTRDtrackletMCM, 2); |
52c19022 | 114 | }; |
115 | ||
116 | #endif |