Line data Source code
1 : #ifndef ALIMUONLOCALSTRUCT_H
2 : #define ALIMUONLOCALSTRUCT_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 : * See cxx source for full Copyright notice */
5 :
6 : /*$Id$*/
7 :
8 : /// \ingroup raw
9 : /// \class AliMUONLocalStruct
10 : /// \brief Rawdata local card structure for trigger
11 : ///
12 : // Author Christian Finck
13 :
14 : #include <TObject.h>
15 : #include <TMath.h>
16 : #include <TArrayS.h>
17 :
18 :
19 : class AliMUONLocalStruct : public TObject{
20 :
21 : public:
22 : AliMUONLocalStruct();
23 : AliMUONLocalStruct(const AliMUONLocalStruct& event);
24 : AliMUONLocalStruct& operator=(const AliMUONLocalStruct& event);
25 :
26 :
27 : virtual ~AliMUONLocalStruct();
28 :
29 : // local board info
30 : /// Return local data
31 0 : UInt_t GetData(Int_t n) const {return fData[n];}
32 :
33 : /// Return X2
34 0 : UShort_t GetX2() const {return (fData[0] >> 16) & 0xFFFF;}
35 : /// Return X1
36 0 : UShort_t GetX1() const {return (fData[0]) & 0xFFFF;}
37 : /// Return X4
38 0 : UShort_t GetX4() const {return (fData[1] >> 16) & 0xFFFF;}
39 : /// Return X3
40 0 : UShort_t GetX3() const {return (fData[1]) & 0xFFFF;}
41 : /// return X pattern array
42 : void GetXPattern(TArrayS& array) const;
43 : /// return Y pattern array
44 : void GetYPattern(TArrayS& array) const;
45 :
46 : /// Return Y2
47 0 : UShort_t GetY2() const {return (fData[2] >> 16) & 0xFFFF;}
48 : /// Return Y1
49 0 : UShort_t GetY1() const {return (fData[2]) & 0xFFFF;}
50 : /// Return Y4
51 0 : UShort_t GetY4() const {return (fData[3] >> 16) & 0xFFFF;}
52 : /// Return Y3
53 0 : UShort_t GetY3() const {return (fData[3]) & 0xFFFF;}
54 :
55 : /// Return Id
56 0 : UChar_t GetId() const {return fData[4] >> 19 & 0xF;}
57 : /// Return Dec
58 0 : UChar_t GetDec() const {return fData[4] >> 15 & 0xF;}
59 : /// Return TrigY
60 0 : Bool_t GetTrigY() const {return (fData[4] >> 14 & 0x1);}
61 : /// Return TriggerY
62 0 : Bool_t GetTriggerY() const {return !(GetTrigY() && GetYPos()==15);}
63 : /// Return Upos
64 0 : UChar_t GetYPos() const {return fData[4] >> 10 & 0xF;}
65 : /// Get Sign of X deviation
66 0 : UChar_t GetSXDev() const {return fData[4] >> 9 & 0x1;}
67 : /// Get X deviation
68 0 : UChar_t GetXDev() const {return fData[4] >> 5 & 0xF;}
69 : /// Return TriggerX
70 0 : Bool_t GetTriggerX() const {return !(GetSXDev() &&
71 0 : !GetXDev() &&
72 0 : GetXPos()==0);}
73 : /// Return Xpos
74 0 : UChar_t GetXPos() const {return fData[4] & 0x1F;}
75 :
76 : /// Return LPT
77 0 : Int_t GetLpt() const {return (GetDec() & 0x3);}
78 : /// Return HPT
79 0 : Int_t GetHpt() const {return (GetDec() >> 2) & 0x3;}
80 :
81 : /// Set local data
82 0 : void SetData(UInt_t d, Int_t n) {fData[n] = d;}
83 :
84 : /// Return data
85 0 : UInt_t* GetData() {return &fData[0];}
86 :
87 : // Scaler methods
88 : /// Return local L0
89 0 : UInt_t GetL0() const {return fL0;}
90 : /// Return local hold (dead time)
91 0 : UInt_t GetHold() const {return fHold;}
92 : /// Return local clock
93 0 : UInt_t GetClock() const {return fClk;}
94 : /// Return switch
95 0 : UShort_t GetSwitch() const {return (fEOS >> 1) & 0x3FF;}
96 : /// Return ComptXY
97 0 : UChar_t GetComptXY() const {return fEOS & 1;}
98 :
99 : /// Return XY1
100 0 : UShort_t GetXY1(Int_t n) const {return (n % 2 == 1) ?
101 0 : (fScaler[TMath::Nint(Float_t(n/2))] & 0xFFFF) :
102 0 : (fScaler[TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;}
103 :
104 : /// Return XY2
105 0 : UShort_t GetXY2(Int_t n) const {return (n % 2 == 1) ?
106 0 : (fScaler[8 + TMath::Nint(Float_t(n/2))] & 0xFFFF) :
107 0 : (fScaler[8 + TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;}
108 :
109 : /// Return XY3
110 0 : UShort_t GetXY3(Int_t n) const {return (n % 2 == 1) ?
111 0 : (fScaler[8*2 + TMath::Nint(Float_t(n/2))] & 0xFFFF) :
112 0 : (fScaler[8*2 + TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;}
113 :
114 : /// Return XY4
115 0 : UShort_t GetXY4(Int_t n) const {return (n % 2 == 1) ?
116 0 : (fScaler[8*3 + TMath::Nint(Float_t(n/2))] & 0xFFFF) :
117 0 : (fScaler[8*3 + TMath::Nint(Float_t(n/2))] >> 16) & 0xFFFF;}
118 :
119 : /// Return scalers
120 0 : UInt_t* GetScalers() {return &fL0;}
121 :
122 : // get length
123 : /// Return scaler length in word
124 2 : Int_t GetScalerLength() const {return fgkScalerLength;}
125 : /// Return local info length in word
126 674 : Int_t GetLength() const {return fgkLength;}
127 : /// Return end of local info word
128 2048 : UInt_t GetEndOfLocal() const {return fgkEndOfLocal;}
129 : /// Return Word for "empty" slots
130 560 : UInt_t GetDisableWord() const {return fgkDisableWord;}
131 :
132 : // set random numbers to fill variable
133 : void SetScalersNumbers();
134 :
135 : private:
136 :
137 : // local info
138 : UInt_t fData[5]; ///< local data
139 :
140 : // local card scalers
141 : UInt_t fL0; ///< local L0
142 : UInt_t fHold; ///< local hold (dead time)
143 : UInt_t fClk; ///< local clock
144 :
145 : UInt_t fLPtNTrig; ///< local low Pt no trigger
146 : UInt_t fHPtNTrig; ///< local high Pt no trigger
147 :
148 : UInt_t fLPtRTrig; ///< local low Pt right trigger
149 : UInt_t fHPtRTrig; ///< local high Pt right trigger
150 :
151 : UInt_t fLPtLTrig; ///< local low Pt left trigger
152 : UInt_t fHPtLTrig; ///< local high Pt left trigger
153 :
154 : UInt_t fLPtSTrig; ///< local low Pt straight trigger
155 : UInt_t fHPtSTrig; ///< local high Pt straight trigger
156 :
157 : UInt_t fScaler[8*4]; ///< local data
158 : UInt_t fEOS; ///< contains switches conf. & flag for reading X (0) or Y (1) in fScaler
159 : UInt_t fReset; ///< reset signal
160 :
161 : static const Int_t fgkLength; ///< local info length in word
162 : static const Int_t fgkScalerLength; ///< scaler length in word
163 : static const UInt_t fgkEndOfLocal; ///< end of local info word
164 : static const UInt_t fgkDisableWord; ///< Word for "empty" slots
165 :
166 18 : ClassDef(AliMUONLocalStruct,3) //Rawdata local card structure for trigger
167 : };
168 : #endif
|