]>
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 | |
a9e2aefa | 19 | #include "AliMUONLocalTrigger.h" |
2be06f1e | 20 | #include <assert.h> |
21 | #include "AliLog.h" | |
8d7dfec2 | 22 | #include "AliMUONLocalStruct.h" |
a9e2aefa | 23 | |
5398f946 | 24 | /// \class AliMUONLocalTrigger |
8d7dfec2 | 25 | /// Local Trigger algorithm data outputs |
5398f946 | 26 | /// (contains local trigger decision and bit patterns) \n |
27 | /// Add SetLocalStruct method for rawdata (Ch. Finck) | |
28 | /// \author Ph. Crochet | |
29 | ||
30 | /// \cond CLASSIMP | |
31 | ClassImp(AliMUONLocalTrigger) | |
32 | /// \endcond | |
8d7dfec2 | 33 | |
a9e2aefa | 34 | //---------------------------------------------------------------------- |
35 | AliMUONLocalTrigger::AliMUONLocalTrigger() | |
8d7dfec2 | 36 | : TObject(), |
37 | fLoCircuit(0), | |
38 | fLoStripX(0), | |
39 | fLoDev(0), | |
40 | fLoStripY(0), | |
41 | fLoLpt(0), | |
42 | fLoHpt(0), | |
43 | fLoApt(0), | |
44 | ||
45 | fX1Pattern(0), | |
46 | fX2Pattern(0), | |
47 | fX3Pattern(0), | |
48 | fX4Pattern(0), | |
49 | ||
50 | fY1Pattern(0), | |
51 | fY2Pattern(0), | |
52 | fY3Pattern(0), | |
53 | fY4Pattern(0), | |
54 | ||
55 | fLoDecision(0), | |
56 | fDigits(0) | |
a9e2aefa | 57 | { |
5398f946 | 58 | /// Default constructor |
a9e2aefa | 59 | } |
e9b63742 | 60 | //---------------------------------------------------------------------- |
30178c30 | 61 | AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig) |
1657f946 | 62 | : TObject(theMUONLocalTrig), |
63 | fLoCircuit(theMUONLocalTrig.fLoCircuit), | |
64 | fLoStripX(theMUONLocalTrig.fLoStripX), | |
65 | fLoDev(theMUONLocalTrig.fLoDev), | |
66 | fLoStripY(theMUONLocalTrig.fLoStripY), | |
67 | fLoLpt(theMUONLocalTrig.fLoLpt), | |
68 | fLoHpt(theMUONLocalTrig.fLoHpt), | |
69 | fLoApt(theMUONLocalTrig.fLoApt), | |
70 | ||
71 | fX1Pattern(theMUONLocalTrig.fX1Pattern), | |
72 | fX2Pattern(theMUONLocalTrig.fX2Pattern), | |
73 | fX3Pattern(theMUONLocalTrig.fX3Pattern), | |
74 | fX4Pattern(theMUONLocalTrig.fX4Pattern), | |
75 | ||
76 | fY1Pattern(theMUONLocalTrig.fY1Pattern), | |
77 | fY2Pattern(theMUONLocalTrig.fY2Pattern), | |
78 | fY3Pattern(theMUONLocalTrig.fY3Pattern), | |
79 | fY4Pattern(theMUONLocalTrig.fY4Pattern), | |
80 | ||
81 | fLoDecision(theMUONLocalTrig.fLoDecision), | |
82 | fDigits(theMUONLocalTrig.fDigits) | |
e9b63742 | 83 | { |
5398f946 | 84 | /// Copy constructor (useful for TClonesArray) |
85 | ||
e9b63742 | 86 | } |
87 | //---------------------------------------------------------------------- | |
30178c30 | 88 | AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig) |
e9b63742 | 89 | { |
5398f946 | 90 | /// Assigment operator; |
91 | /// equal operator (useful for non-pointer member in TClonesArray) | |
8d7dfec2 | 92 | |
30178c30 | 93 | if (this == &theMUONLocalTrig) |
e9b63742 | 94 | return *this; |
95 | ||
30178c30 | 96 | // base class assignement |
97 | TObject::operator=(theMUONLocalTrig); | |
98 | ||
99 | fLoCircuit = theMUONLocalTrig.fLoCircuit; | |
100 | fLoStripX = theMUONLocalTrig.fLoStripX; | |
101 | fLoDev = theMUONLocalTrig.fLoDev; | |
102 | fLoStripY = theMUONLocalTrig.fLoStripY; | |
103 | fLoLpt = theMUONLocalTrig.fLoLpt; | |
104 | fLoHpt = theMUONLocalTrig.fLoHpt; | |
105 | fLoApt = theMUONLocalTrig.fLoApt; | |
e9b63742 | 106 | |
6dc7fcdf | 107 | fX1Pattern = theMUONLocalTrig.fX1Pattern; |
108 | fX2Pattern = theMUONLocalTrig.fX2Pattern; | |
109 | fX3Pattern = theMUONLocalTrig.fX3Pattern; | |
110 | fX4Pattern = theMUONLocalTrig.fX4Pattern; | |
111 | ||
112 | fY1Pattern = theMUONLocalTrig.fY1Pattern; | |
113 | fY2Pattern = theMUONLocalTrig.fY2Pattern; | |
114 | fY3Pattern = theMUONLocalTrig.fY3Pattern; | |
115 | fY4Pattern = theMUONLocalTrig.fY4Pattern; | |
116 | ||
117 | fLoDecision = theMUONLocalTrig.fLoDecision; | |
118 | ||
2be06f1e | 119 | fDigits = theMUONLocalTrig.fDigits; |
120 | ||
e9b63742 | 121 | return *this; |
122 | } | |
123 | ||
a9e2aefa | 124 | //---------------------------------------------------------------------- |
da3d7180 | 125 | AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) : |
126 | fLoCircuit(localtr[0]), | |
127 | fLoStripX(localtr[1]), | |
128 | fLoDev(localtr[2]), | |
129 | fLoStripY(localtr[3]), | |
130 | fLoLpt(localtr[4]), | |
131 | fLoHpt(localtr[5]), | |
132 | fLoApt(localtr[6]), | |
133 | // keep on with this way | |
134 | fX1Pattern((UShort_t)localtr[7]), | |
135 | fX2Pattern((UShort_t)localtr[8]), | |
136 | fX3Pattern((UShort_t)localtr[9]), | |
137 | fX4Pattern((UShort_t)localtr[10]), | |
138 | ||
139 | fY1Pattern((UShort_t)localtr[11]), | |
140 | fY2Pattern((UShort_t)localtr[12]), | |
141 | fY3Pattern((UShort_t)localtr[13]), | |
142 | fY4Pattern((UShort_t)localtr[14]), | |
143 | ||
144 | fLoDecision(0), | |
145 | fDigits(digits) | |
a9e2aefa | 146 | { |
da3d7180 | 147 | /// Add a local trigger object |
a9e2aefa | 148 | } |
1657f946 | 149 | |
6dc7fcdf | 150 | //---------------------------------------------------------------------- |
151 | Char_t AliMUONLocalTrigger::GetLoDecision() | |
152 | { | |
5398f946 | 153 | /// Get local decision |
154 | /// from H(L)pt; | |
155 | /// returns local trigger decision | |
8d7dfec2 | 156 | |
6dc7fcdf | 157 | fLoDecision = (fLoLpt & 0x3); |
158 | fLoDecision |= (fLoHpt << 2) & 0xC; | |
402fb06e | 159 | |
6dc7fcdf | 160 | return fLoDecision; |
161 | } | |
2be06f1e | 162 | |
163 | //---------------------------------------------------------------------- | |
164 | void AliMUONLocalTrigger::GetDigit( | |
8d7dfec2 | 165 | Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const |
2be06f1e | 166 | { |
5398f946 | 167 | /// Returns the i'th digit that fired this circuit. |
168 | /// The number of digits can be found with NumberOfDigits(), that is | |
169 | /// i is valid in the range [ 0 , NumberOfDigits() - 1 ] | |
2be06f1e | 170 | |
171 | Int_t digitnumber = fDigits[i]; | |
172 | DecodeDigitNumber(digitnumber, chamber, cathode, digit); | |
b8fdc4dd | 173 | } |
2be06f1e | 174 | |
175 | //---------------------------------------------------------------------- | |
8d7dfec2 | 176 | Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, |
177 | Int_t digit) | |
2be06f1e | 178 | { |
5398f946 | 179 | /// Encodes a 32-bit digit number from digit information to be stored |
180 | /// in internal integer arrays. Note that the value of the digit parameter | |
181 | /// can not be larger than 0x07FFFFFF. | |
2be06f1e | 182 | |
183 | assert( 0 <= cathode && cathode <= 1 ); | |
184 | assert( 0 <= chamber && chamber <= 13 ); | |
185 | ||
186 | if ((digit & 0xF8000000) != 0) | |
187 | { | |
188 | AliErrorGeneral("AliMUONLocalTrigger", Form( | |
189 | "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.", | |
190 | cathode, chamber, digit | |
191 | )); | |
192 | return -1; | |
193 | }; | |
194 | ||
195 | return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit; | |
b8fdc4dd | 196 | } |
2be06f1e | 197 | |
198 | //---------------------------------------------------------------------- | |
8d7dfec2 | 199 | void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, |
200 | Int_t& cathode, Int_t& digit) | |
2be06f1e | 201 | { |
5398f946 | 202 | /// Decodes a digit number into information about the digit. |
203 | /// One can subsequently fetch the digit with | |
204 | /// AliMUONDataInterface::Digit(chamber, cathode, digit) | |
2be06f1e | 205 | |
206 | cathode = (digitnumber >> 31) & 0x1; | |
207 | chamber = (digitnumber >> 27) & 0xF; | |
208 | digit = digitnumber & 0x7FFFFFF; | |
b8fdc4dd | 209 | } |
2be06f1e | 210 | |
8d7dfec2 | 211 | //---------------------------------------------------------------------- |
212 | void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) | |
213 | { | |
5398f946 | 214 | /// Set local trigger info from rawdata localStruct |
8d7dfec2 | 215 | |
216 | // set id' | |
217 | SetLoCircuit(loCircuit); | |
218 | ||
219 | // set X, Y dev | |
220 | SetLoStripX((Int_t)localStruct.GetXPos()); | |
221 | SetLoStripY((Int_t)localStruct.GetYPos()); | |
222 | SetLoDev((Int_t)localStruct.GetXDev()); | |
223 | ||
224 | // set L(H)pt | |
225 | SetLoLpt(localStruct.GetLpt()); | |
226 | SetLoHpt(localStruct.GetHpt()); | |
227 | ||
228 | // set pattern X | |
229 | SetX1Pattern(localStruct.GetX1()); | |
230 | SetX2Pattern(localStruct.GetX2()); | |
231 | SetX3Pattern(localStruct.GetX3()); | |
232 | SetX4Pattern(localStruct.GetX4()); | |
233 | ||
234 | // set pattern Y | |
235 | SetY1Pattern(localStruct.GetY1()); | |
236 | SetY2Pattern(localStruct.GetY2()); | |
237 | SetY3Pattern(localStruct.GetY3()); | |
238 | SetY4Pattern(localStruct.GetY4()); | |
239 | ||
240 | } | |
eba3379e | 241 | |
242 | //---------------------------------------------------------------------- | |
243 | void AliMUONLocalTrigger::Print(Option_t* opt) const | |
244 | { | |
245 | // | |
246 | // Printing Local Trigger information | |
247 | // | |
248 | TString sopt(opt); | |
249 | sopt.ToUpper(); | |
250 | ||
251 | if ( sopt.Contains("FULL") ) { | |
252 | ||
253 | printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d Apt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt(),LoApt()); | |
254 | ||
255 | } | |
256 | } | |
257 |