]>
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 | //---------------------------------------------------------------------- |
2be06f1e | 125 | AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) |
a9e2aefa | 126 | { |
5398f946 | 127 | /// Add a local trigger object |
128 | ||
a9e2aefa | 129 | fLoCircuit = localtr[0]; |
130 | fLoStripX = localtr[1]; | |
131 | fLoDev = localtr[2]; | |
132 | fLoStripY = localtr[3]; | |
133 | fLoLpt = localtr[4]; | |
134 | fLoHpt = localtr[5]; | |
135 | fLoApt = localtr[6]; | |
6dc7fcdf | 136 | |
137 | // keep on with this way | |
138 | fX1Pattern = (UShort_t)localtr[7]; | |
139 | fX2Pattern = (UShort_t)localtr[8]; | |
140 | fX3Pattern = (UShort_t)localtr[9]; | |
141 | fX4Pattern = (UShort_t)localtr[10]; | |
142 | ||
143 | fY1Pattern = (UShort_t)localtr[11]; | |
144 | fY2Pattern = (UShort_t)localtr[12]; | |
145 | fY3Pattern = (UShort_t)localtr[13]; | |
146 | fY4Pattern = (UShort_t)localtr[14]; | |
2be06f1e | 147 | |
148 | fDigits = digits; | |
a9e2aefa | 149 | } |
1657f946 | 150 | |
6dc7fcdf | 151 | //---------------------------------------------------------------------- |
152 | Char_t AliMUONLocalTrigger::GetLoDecision() | |
153 | { | |
5398f946 | 154 | /// Get local decision |
155 | /// from H(L)pt; | |
156 | /// returns local trigger decision | |
8d7dfec2 | 157 | |
6dc7fcdf | 158 | fLoDecision = (fLoLpt & 0x3); |
159 | fLoDecision |= (fLoHpt << 2) & 0xC; | |
402fb06e | 160 | |
6dc7fcdf | 161 | return fLoDecision; |
162 | } | |
2be06f1e | 163 | |
164 | //---------------------------------------------------------------------- | |
165 | void AliMUONLocalTrigger::GetDigit( | |
8d7dfec2 | 166 | Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const |
2be06f1e | 167 | { |
5398f946 | 168 | /// Returns the i'th digit that fired this circuit. |
169 | /// The number of digits can be found with NumberOfDigits(), that is | |
170 | /// i is valid in the range [ 0 , NumberOfDigits() - 1 ] | |
2be06f1e | 171 | |
172 | Int_t digitnumber = fDigits[i]; | |
173 | DecodeDigitNumber(digitnumber, chamber, cathode, digit); | |
b8fdc4dd | 174 | } |
2be06f1e | 175 | |
176 | //---------------------------------------------------------------------- | |
8d7dfec2 | 177 | Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, |
178 | Int_t digit) | |
2be06f1e | 179 | { |
5398f946 | 180 | /// Encodes a 32-bit digit number from digit information to be stored |
181 | /// in internal integer arrays. Note that the value of the digit parameter | |
182 | /// can not be larger than 0x07FFFFFF. | |
2be06f1e | 183 | |
184 | assert( 0 <= cathode && cathode <= 1 ); | |
185 | assert( 0 <= chamber && chamber <= 13 ); | |
186 | ||
187 | if ((digit & 0xF8000000) != 0) | |
188 | { | |
189 | AliErrorGeneral("AliMUONLocalTrigger", Form( | |
190 | "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.", | |
191 | cathode, chamber, digit | |
192 | )); | |
193 | return -1; | |
194 | }; | |
195 | ||
196 | return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit; | |
b8fdc4dd | 197 | } |
2be06f1e | 198 | |
199 | //---------------------------------------------------------------------- | |
8d7dfec2 | 200 | void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, |
201 | Int_t& cathode, Int_t& digit) | |
2be06f1e | 202 | { |
5398f946 | 203 | /// Decodes a digit number into information about the digit. |
204 | /// One can subsequently fetch the digit with | |
205 | /// AliMUONDataInterface::Digit(chamber, cathode, digit) | |
2be06f1e | 206 | |
207 | cathode = (digitnumber >> 31) & 0x1; | |
208 | chamber = (digitnumber >> 27) & 0xF; | |
209 | digit = digitnumber & 0x7FFFFFF; | |
b8fdc4dd | 210 | } |
2be06f1e | 211 | |
8d7dfec2 | 212 | //---------------------------------------------------------------------- |
213 | void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) | |
214 | { | |
5398f946 | 215 | /// Set local trigger info from rawdata localStruct |
8d7dfec2 | 216 | |
217 | // set id' | |
218 | SetLoCircuit(loCircuit); | |
219 | ||
220 | // set X, Y dev | |
221 | SetLoStripX((Int_t)localStruct.GetXPos()); | |
222 | SetLoStripY((Int_t)localStruct.GetYPos()); | |
223 | SetLoDev((Int_t)localStruct.GetXDev()); | |
224 | ||
225 | // set L(H)pt | |
226 | SetLoLpt(localStruct.GetLpt()); | |
227 | SetLoHpt(localStruct.GetHpt()); | |
228 | ||
229 | // set pattern X | |
230 | SetX1Pattern(localStruct.GetX1()); | |
231 | SetX2Pattern(localStruct.GetX2()); | |
232 | SetX3Pattern(localStruct.GetX3()); | |
233 | SetX4Pattern(localStruct.GetX4()); | |
234 | ||
235 | // set pattern Y | |
236 | SetY1Pattern(localStruct.GetY1()); | |
237 | SetY2Pattern(localStruct.GetY2()); | |
238 | SetY3Pattern(localStruct.GetY3()); | |
239 | SetY4Pattern(localStruct.GetY4()); | |
240 | ||
241 | } | |
eba3379e | 242 | |
243 | //---------------------------------------------------------------------- | |
244 | void AliMUONLocalTrigger::Print(Option_t* opt) const | |
245 | { | |
246 | // | |
247 | // Printing Local Trigger information | |
248 | // | |
249 | TString sopt(opt); | |
250 | sopt.ToUpper(); | |
251 | ||
252 | if ( sopt.Contains("FULL") ) { | |
253 | ||
254 | printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d Apt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt(),LoApt()); | |
255 | ||
256 | } | |
257 | } | |
258 |