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 /// \class AliMUONLocalTrigger
25 /// Local Trigger algorithm data outputs
26 /// (contains local trigger decision and bit patterns) \n
27 /// Add SetLocalStruct method for rawdata (Ch. Finck)
28 /// \author Ph. Crochet
31 ClassImp(AliMUONLocalTrigger)
34 //----------------------------------------------------------------------
35 AliMUONLocalTrigger::AliMUONLocalTrigger()
58 /// Default constructor
60 //----------------------------------------------------------------------
61 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
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),
71 fX1Pattern(theMUONLocalTrig.fX1Pattern),
72 fX2Pattern(theMUONLocalTrig.fX2Pattern),
73 fX3Pattern(theMUONLocalTrig.fX3Pattern),
74 fX4Pattern(theMUONLocalTrig.fX4Pattern),
76 fY1Pattern(theMUONLocalTrig.fY1Pattern),
77 fY2Pattern(theMUONLocalTrig.fY2Pattern),
78 fY3Pattern(theMUONLocalTrig.fY3Pattern),
79 fY4Pattern(theMUONLocalTrig.fY4Pattern),
81 fLoDecision(theMUONLocalTrig.fLoDecision),
82 fDigits(theMUONLocalTrig.fDigits)
84 /// Copy constructor (useful for TClonesArray)
87 //----------------------------------------------------------------------
88 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
90 /// Assigment operator;
91 /// equal operator (useful for non-pointer member in TClonesArray)
93 if (this == &theMUONLocalTrig)
96 // base class assignement
97 TObject::operator=(theMUONLocalTrig);
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;
107 fX1Pattern = theMUONLocalTrig.fX1Pattern;
108 fX2Pattern = theMUONLocalTrig.fX2Pattern;
109 fX3Pattern = theMUONLocalTrig.fX3Pattern;
110 fX4Pattern = theMUONLocalTrig.fX4Pattern;
112 fY1Pattern = theMUONLocalTrig.fY1Pattern;
113 fY2Pattern = theMUONLocalTrig.fY2Pattern;
114 fY3Pattern = theMUONLocalTrig.fY3Pattern;
115 fY4Pattern = theMUONLocalTrig.fY4Pattern;
117 fLoDecision = theMUONLocalTrig.fLoDecision;
119 fDigits = theMUONLocalTrig.fDigits;
124 //----------------------------------------------------------------------
125 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) :
126 fLoCircuit(localtr[0]),
127 fLoStripX(localtr[1]),
129 fLoStripY(localtr[3]),
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]),
139 fY1Pattern((UShort_t)localtr[11]),
140 fY2Pattern((UShort_t)localtr[12]),
141 fY3Pattern((UShort_t)localtr[13]),
142 fY4Pattern((UShort_t)localtr[14]),
147 /// Add a local trigger object
150 //----------------------------------------------------------------------
151 Char_t AliMUONLocalTrigger::GetLoDecision()
153 /// Get local decision
155 /// returns local trigger decision
157 fLoDecision = (fLoLpt & 0x3);
158 fLoDecision |= (fLoHpt << 2) & 0xC;
163 //----------------------------------------------------------------------
164 void AliMUONLocalTrigger::GetDigit(
165 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const
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 ]
171 Int_t digitnumber = fDigits[i];
172 DecodeDigitNumber(digitnumber, chamber, cathode, digit);
175 //----------------------------------------------------------------------
176 Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode,
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.
183 assert( 0 <= cathode && cathode <= 1 );
184 assert( 0 <= chamber && chamber <= 13 );
186 if ((digit & 0xF8000000) != 0)
188 AliErrorGeneral("AliMUONLocalTrigger", Form(
189 "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
190 cathode, chamber, digit
195 return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
198 //----------------------------------------------------------------------
199 void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber,
200 Int_t& cathode, Int_t& digit)
202 /// Decodes a digit number into information about the digit.
203 /// One can subsequently fetch the digit with
204 /// AliMUONDataInterface::Digit(chamber, cathode, digit)
206 cathode = (digitnumber >> 31) & 0x1;
207 chamber = (digitnumber >> 27) & 0xF;
208 digit = digitnumber & 0x7FFFFFF;
211 //----------------------------------------------------------------------
212 void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct)
214 /// Set local trigger info from rawdata localStruct
217 SetLoCircuit(loCircuit);
220 SetLoStripX((Int_t)localStruct.GetXPos());
221 SetLoStripY((Int_t)localStruct.GetYPos());
222 SetLoDev((Int_t)localStruct.GetXDev());
225 SetLoLpt(localStruct.GetLpt());
226 SetLoHpt(localStruct.GetHpt());
229 SetX1Pattern(localStruct.GetX1());
230 SetX2Pattern(localStruct.GetX2());
231 SetX3Pattern(localStruct.GetX3());
232 SetX4Pattern(localStruct.GetX4());
235 SetY1Pattern(localStruct.GetY1());
236 SetY2Pattern(localStruct.GetY2());
237 SetY3Pattern(localStruct.GetY3());
238 SetY4Pattern(localStruct.GetY4());
242 //----------------------------------------------------------------------
243 void AliMUONLocalTrigger::Print(Option_t* opt) const
246 // Printing Local Trigger information
251 if ( sopt.Contains("FULL") ) {
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());