1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
19 #include "AliMUONLocalTrigger.h"
22 #include "AliMUONLocalStruct.h"
24 ClassImp(AliMUONLocalTrigger)
26 /// ------------------
27 /// Class AliMUONLocalTrigger
28 /// ------------------
29 /// Local Trigger algorithm data outputs
30 /// (contains local trigger decision and bit patterns)
33 /// add SetLocalStruct method for rawdata
36 //----------------------------------------------------------------------
37 AliMUONLocalTrigger::AliMUONLocalTrigger()
64 //----------------------------------------------------------------------
65 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
66 : TObject(theMUONLocalTrig)
69 // copy constructor (useful for TClonesArray)
71 fLoCircuit = theMUONLocalTrig.fLoCircuit;
72 fLoStripX = theMUONLocalTrig.fLoStripX;
73 fLoDev = theMUONLocalTrig.fLoDev;
74 fLoStripY = theMUONLocalTrig.fLoStripY;
75 fLoLpt = theMUONLocalTrig.fLoLpt;
76 fLoHpt = theMUONLocalTrig.fLoHpt;
77 fLoApt = theMUONLocalTrig.fLoApt;
79 fX1Pattern = theMUONLocalTrig.fX1Pattern;
80 fX2Pattern = theMUONLocalTrig.fX2Pattern;
81 fX3Pattern = theMUONLocalTrig.fX3Pattern;
82 fX4Pattern = theMUONLocalTrig.fX4Pattern;
84 fY1Pattern = theMUONLocalTrig.fY1Pattern;
85 fY2Pattern = theMUONLocalTrig.fY2Pattern;
86 fY3Pattern = theMUONLocalTrig.fY3Pattern;
87 fY4Pattern = theMUONLocalTrig.fY4Pattern;
89 fLoDecision = theMUONLocalTrig.fLoDecision;
91 fDigits = theMUONLocalTrig.fDigits;
93 //----------------------------------------------------------------------
94 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
98 // equal operator (useful for non-pointer member in TClonesArray)
100 if (this == &theMUONLocalTrig)
103 // base class assignement
104 TObject::operator=(theMUONLocalTrig);
106 fLoCircuit = theMUONLocalTrig.fLoCircuit;
107 fLoStripX = theMUONLocalTrig.fLoStripX;
108 fLoDev = theMUONLocalTrig.fLoDev;
109 fLoStripY = theMUONLocalTrig.fLoStripY;
110 fLoLpt = theMUONLocalTrig.fLoLpt;
111 fLoHpt = theMUONLocalTrig.fLoHpt;
112 fLoApt = theMUONLocalTrig.fLoApt;
114 fX1Pattern = theMUONLocalTrig.fX1Pattern;
115 fX2Pattern = theMUONLocalTrig.fX2Pattern;
116 fX3Pattern = theMUONLocalTrig.fX3Pattern;
117 fX4Pattern = theMUONLocalTrig.fX4Pattern;
119 fY1Pattern = theMUONLocalTrig.fY1Pattern;
120 fY2Pattern = theMUONLocalTrig.fY2Pattern;
121 fY3Pattern = theMUONLocalTrig.fY3Pattern;
122 fY4Pattern = theMUONLocalTrig.fY4Pattern;
124 fLoDecision = theMUONLocalTrig.fLoDecision;
126 fDigits = theMUONLocalTrig.fDigits;
131 //----------------------------------------------------------------------
132 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
135 // add a local trigger object
137 fLoCircuit = localtr[0];
138 fLoStripX = localtr[1];
140 fLoStripY = localtr[3];
145 // keep on with this way
146 fX1Pattern = (UShort_t)localtr[7];
147 fX2Pattern = (UShort_t)localtr[8];
148 fX3Pattern = (UShort_t)localtr[9];
149 fX4Pattern = (UShort_t)localtr[10];
151 fY1Pattern = (UShort_t)localtr[11];
152 fY2Pattern = (UShort_t)localtr[12];
153 fY3Pattern = (UShort_t)localtr[13];
154 fY4Pattern = (UShort_t)localtr[14];
158 //----------------------------------------------------------------------
159 Char_t AliMUONLocalTrigger::GetLoDecision()
161 // get local decision
163 // returns local trigger decision
165 fLoDecision = (fLoLpt & 0x3);
166 fLoDecision |= (fLoHpt << 2) & 0xC;
171 //----------------------------------------------------------------------
172 void AliMUONLocalTrigger::GetDigit(
173 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const
175 // Returns the i'th digit that fired this circuit.
176 // The number of digits can be found with NumberOfDigits(), that is
177 // i is valid in the range [ 0 , NumberOfDigits() - 1 ]
179 Int_t digitnumber = fDigits[i];
180 DecodeDigitNumber(digitnumber, chamber, cathode, digit);
183 //----------------------------------------------------------------------
184 Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode,
187 // Encodes a 32-bit digit number from digit information to be stored
188 // in internal integer arrays. Note that the value of the digit parameter
189 // can not be larger than 0x07FFFFFF.
191 assert( 0 <= cathode && cathode <= 1 );
192 assert( 0 <= chamber && chamber <= 13 );
194 if ((digit & 0xF8000000) != 0)
196 AliErrorGeneral("AliMUONLocalTrigger", Form(
197 "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
198 cathode, chamber, digit
203 return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
206 //----------------------------------------------------------------------
207 void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber,
208 Int_t& cathode, Int_t& digit)
210 // Decodes a digit number into information about the digit.
211 // One can subsequently fetch the digit with
212 // AliMUONDataInterface::Digit(chamber, cathode, digit)
214 cathode = (digitnumber >> 31) & 0x1;
215 chamber = (digitnumber >> 27) & 0xF;
216 digit = digitnumber & 0x7FFFFFF;
219 //----------------------------------------------------------------------
220 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
223 // Set local trigger info from rawdata localStruct
227 SetLoCircuit(loCircuit);
230 SetLoStripX((Int_t)localStruct.GetXPos());
231 SetLoStripY((Int_t)localStruct.GetYPos());
232 SetLoDev((Int_t)localStruct.GetXDev());
235 SetLoLpt(localStruct.GetLpt());
236 SetLoHpt(localStruct.GetHpt());
239 SetX1Pattern(localStruct.GetX1());
240 SetX2Pattern(localStruct.GetX2());
241 SetX3Pattern(localStruct.GetX3());
242 SetX4Pattern(localStruct.GetX4());
245 SetY1Pattern(localStruct.GetY1());
246 SetY2Pattern(localStruct.GetY2());
247 SetY3Pattern(localStruct.GetY3());
248 SetY4Pattern(localStruct.GetY4());
252 //----------------------------------------------------------------------
253 void AliMUONLocalTrigger::Print(Option_t* opt) const
256 // Printing Local Trigger information
261 if ( sopt.Contains("FULL") ) {
263 printf("<AliMUONLocalTrigger> Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d Apt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt(),LoApt());