]>
Commit | Line | Data |
---|---|---|
a9e2aefa | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
30178c30 | 16 | /* $Id$ */ |
a9e2aefa | 17 | |
8d7dfec2 | 18 | |
d1525c79 | 19 | |
a9e2aefa | 20 | #include "AliMUONLocalTrigger.h" |
2be06f1e | 21 | #include <assert.h> |
22 | #include "AliLog.h" | |
8d7dfec2 | 23 | #include "AliMUONLocalStruct.h" |
a9e2aefa | 24 | |
925e6570 | 25 | ClassImp(AliMUONLocalTrigger) |
8d7dfec2 | 26 | |
27 | /// ------------------ | |
28 | /// Class AliMUONLocalTrigger | |
29 | /// ------------------ | |
30 | /// Local Trigger algorithm data outputs | |
31 | /// (contains local trigger decision and bit patterns) | |
32 | /// Ph. Crochet | |
33 | /// | |
34 | /// add SetLocalStruct method for rawdata | |
35 | /// Ch. Finck | |
36 | ||
a9e2aefa | 37 | //---------------------------------------------------------------------- |
38 | AliMUONLocalTrigger::AliMUONLocalTrigger() | |
8d7dfec2 | 39 | : TObject(), |
40 | fLoCircuit(0), | |
41 | fLoStripX(0), | |
42 | fLoDev(0), | |
43 | fLoStripY(0), | |
44 | fLoLpt(0), | |
45 | fLoHpt(0), | |
46 | fLoApt(0), | |
47 | ||
48 | fX1Pattern(0), | |
49 | fX2Pattern(0), | |
50 | fX3Pattern(0), | |
51 | fX4Pattern(0), | |
52 | ||
53 | fY1Pattern(0), | |
54 | fY2Pattern(0), | |
55 | fY3Pattern(0), | |
56 | fY4Pattern(0), | |
57 | ||
58 | fLoDecision(0), | |
59 | fDigits(0) | |
a9e2aefa | 60 | { |
8d7dfec2 | 61 | // |
62 | // constructor | |
63 | // | |
a9e2aefa | 64 | } |
e9b63742 | 65 | //---------------------------------------------------------------------- |
30178c30 | 66 | AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig) |
67 | : TObject(theMUONLocalTrig) | |
e9b63742 | 68 | { |
8d7dfec2 | 69 | // |
70 | // copy constructor (useful for TClonesArray) | |
71 | // | |
30178c30 | 72 | fLoCircuit = theMUONLocalTrig.fLoCircuit; |
73 | fLoStripX = theMUONLocalTrig.fLoStripX; | |
74 | fLoDev = theMUONLocalTrig.fLoDev; | |
75 | fLoStripY = theMUONLocalTrig.fLoStripY; | |
76 | fLoLpt = theMUONLocalTrig.fLoLpt; | |
77 | fLoHpt = theMUONLocalTrig.fLoHpt; | |
78 | fLoApt = theMUONLocalTrig.fLoApt; | |
6dc7fcdf | 79 | |
80 | fX1Pattern = theMUONLocalTrig.fX1Pattern; | |
81 | fX2Pattern = theMUONLocalTrig.fX2Pattern; | |
82 | fX3Pattern = theMUONLocalTrig.fX3Pattern; | |
83 | fX4Pattern = theMUONLocalTrig.fX4Pattern; | |
84 | ||
85 | fY1Pattern = theMUONLocalTrig.fY1Pattern; | |
86 | fY2Pattern = theMUONLocalTrig.fY2Pattern; | |
87 | fY3Pattern = theMUONLocalTrig.fY3Pattern; | |
88 | fY4Pattern = theMUONLocalTrig.fY4Pattern; | |
89 | ||
90 | fLoDecision = theMUONLocalTrig.fLoDecision; | |
2be06f1e | 91 | |
92 | fDigits = theMUONLocalTrig.fDigits; | |
e9b63742 | 93 | } |
94 | //---------------------------------------------------------------------- | |
30178c30 | 95 | AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig) |
e9b63742 | 96 | { |
8d7dfec2 | 97 | // assigment operator |
98 | // | |
99 | // equal operator (useful for non-pointer member in TClonesArray) | |
100 | ||
30178c30 | 101 | if (this == &theMUONLocalTrig) |
e9b63742 | 102 | return *this; |
103 | ||
30178c30 | 104 | // base class assignement |
105 | TObject::operator=(theMUONLocalTrig); | |
106 | ||
107 | fLoCircuit = theMUONLocalTrig.fLoCircuit; | |
108 | fLoStripX = theMUONLocalTrig.fLoStripX; | |
109 | fLoDev = theMUONLocalTrig.fLoDev; | |
110 | fLoStripY = theMUONLocalTrig.fLoStripY; | |
111 | fLoLpt = theMUONLocalTrig.fLoLpt; | |
112 | fLoHpt = theMUONLocalTrig.fLoHpt; | |
113 | fLoApt = theMUONLocalTrig.fLoApt; | |
e9b63742 | 114 | |
6dc7fcdf | 115 | fX1Pattern = theMUONLocalTrig.fX1Pattern; |
116 | fX2Pattern = theMUONLocalTrig.fX2Pattern; | |
117 | fX3Pattern = theMUONLocalTrig.fX3Pattern; | |
118 | fX4Pattern = theMUONLocalTrig.fX4Pattern; | |
119 | ||
120 | fY1Pattern = theMUONLocalTrig.fY1Pattern; | |
121 | fY2Pattern = theMUONLocalTrig.fY2Pattern; | |
122 | fY3Pattern = theMUONLocalTrig.fY3Pattern; | |
123 | fY4Pattern = theMUONLocalTrig.fY4Pattern; | |
124 | ||
125 | fLoDecision = theMUONLocalTrig.fLoDecision; | |
126 | ||
2be06f1e | 127 | fDigits = theMUONLocalTrig.fDigits; |
128 | ||
e9b63742 | 129 | return *this; |
130 | } | |
131 | ||
a9e2aefa | 132 | //---------------------------------------------------------------------- |
2be06f1e | 133 | AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) |
a9e2aefa | 134 | { |
8d7dfec2 | 135 | // |
136 | // add a local trigger object | |
137 | // | |
a9e2aefa | 138 | fLoCircuit = localtr[0]; |
139 | fLoStripX = localtr[1]; | |
140 | fLoDev = localtr[2]; | |
141 | fLoStripY = localtr[3]; | |
142 | fLoLpt = localtr[4]; | |
143 | fLoHpt = localtr[5]; | |
144 | fLoApt = localtr[6]; | |
6dc7fcdf | 145 | |
146 | // keep on with this way | |
147 | fX1Pattern = (UShort_t)localtr[7]; | |
148 | fX2Pattern = (UShort_t)localtr[8]; | |
149 | fX3Pattern = (UShort_t)localtr[9]; | |
150 | fX4Pattern = (UShort_t)localtr[10]; | |
151 | ||
152 | fY1Pattern = (UShort_t)localtr[11]; | |
153 | fY2Pattern = (UShort_t)localtr[12]; | |
154 | fY3Pattern = (UShort_t)localtr[13]; | |
155 | fY4Pattern = (UShort_t)localtr[14]; | |
2be06f1e | 156 | |
157 | fDigits = digits; | |
a9e2aefa | 158 | } |
6dc7fcdf | 159 | //---------------------------------------------------------------------- |
160 | Char_t AliMUONLocalTrigger::GetLoDecision() | |
161 | { | |
8d7dfec2 | 162 | // get local decision |
163 | // from H(L)pt | |
164 | // returns local trigger decision | |
165 | ||
6dc7fcdf | 166 | fLoDecision = (fLoLpt & 0x3); |
167 | fLoDecision |= (fLoHpt << 2) & 0xC; | |
402fb06e | 168 | |
6dc7fcdf | 169 | return fLoDecision; |
170 | } | |
2be06f1e | 171 | |
172 | //---------------------------------------------------------------------- | |
173 | void AliMUONLocalTrigger::GetDigit( | |
8d7dfec2 | 174 | Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const |
2be06f1e | 175 | { |
176 | // Returns the i'th digit that fired this circuit. | |
177 | // The number of digits can be found with NumberOfDigits(), that is | |
178 | // i is valid in the range [ 0 , NumberOfDigits() - 1 ] | |
179 | ||
180 | Int_t digitnumber = fDigits[i]; | |
181 | DecodeDigitNumber(digitnumber, chamber, cathode, digit); | |
b8fdc4dd | 182 | } |
2be06f1e | 183 | |
184 | //---------------------------------------------------------------------- | |
8d7dfec2 | 185 | Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, |
186 | Int_t digit) | |
2be06f1e | 187 | { |
188 | // Encodes a 32-bit digit number from digit information to be stored | |
189 | // in internal integer arrays. Note that the value of the digit parameter | |
190 | // can not be larger than 0x07FFFFFF. | |
191 | ||
192 | assert( 0 <= cathode && cathode <= 1 ); | |
193 | assert( 0 <= chamber && chamber <= 13 ); | |
194 | ||
195 | if ((digit & 0xF8000000) != 0) | |
196 | { | |
197 | AliErrorGeneral("AliMUONLocalTrigger", Form( | |
198 | "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.", | |
199 | cathode, chamber, digit | |
200 | )); | |
201 | return -1; | |
202 | }; | |
203 | ||
204 | return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit; | |
b8fdc4dd | 205 | } |
2be06f1e | 206 | |
207 | //---------------------------------------------------------------------- | |
8d7dfec2 | 208 | void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, |
209 | Int_t& cathode, Int_t& digit) | |
2be06f1e | 210 | { |
211 | // Decodes a digit number into information about the digit. | |
212 | // One can subsequently fetch the digit with | |
213 | // AliMUONDataInterface::Digit(chamber, cathode, digit) | |
214 | ||
215 | cathode = (digitnumber >> 31) & 0x1; | |
216 | chamber = (digitnumber >> 27) & 0xF; | |
217 | digit = digitnumber & 0x7FFFFFF; | |
b8fdc4dd | 218 | } |
2be06f1e | 219 | |
8d7dfec2 | 220 | //---------------------------------------------------------------------- |
221 | void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) | |
222 | { | |
223 | // | |
224 | // Set local trigger info from rawdata localStruct | |
225 | // | |
226 | ||
227 | // set id' | |
228 | SetLoCircuit(loCircuit); | |
229 | ||
230 | // set X, Y dev | |
231 | SetLoStripX((Int_t)localStruct.GetXPos()); | |
232 | SetLoStripY((Int_t)localStruct.GetYPos()); | |
233 | SetLoDev((Int_t)localStruct.GetXDev()); | |
234 | ||
235 | // set L(H)pt | |
236 | SetLoLpt(localStruct.GetLpt()); | |
237 | SetLoHpt(localStruct.GetHpt()); | |
238 | ||
239 | // set pattern X | |
240 | SetX1Pattern(localStruct.GetX1()); | |
241 | SetX2Pattern(localStruct.GetX2()); | |
242 | SetX3Pattern(localStruct.GetX3()); | |
243 | SetX4Pattern(localStruct.GetX4()); | |
244 | ||
245 | // set pattern Y | |
246 | SetY1Pattern(localStruct.GetY1()); | |
247 | SetY2Pattern(localStruct.GetY2()); | |
248 | SetY3Pattern(localStruct.GetY3()); | |
249 | SetY4Pattern(localStruct.GetY4()); | |
250 | ||
251 | } |