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 // Class AliMUONLocalTrigger
21 // Local Trigger algorithm data outputs
22 // (contains local trigger decision and bit patterns)
24 #include "AliMUONLocalTrigger.h"
28 ClassImp(AliMUONLocalTrigger)
29 //----------------------------------------------------------------------
30 AliMUONLocalTrigger::AliMUONLocalTrigger()
31 : TObject(), fDigits(0)
54 //----------------------------------------------------------------------
55 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
56 : TObject(theMUONLocalTrig)
58 // copy constructor (useful for TClonesArray)
59 fLoCircuit = theMUONLocalTrig.fLoCircuit;
60 fLoStripX = theMUONLocalTrig.fLoStripX;
61 fLoDev = theMUONLocalTrig.fLoDev;
62 fLoStripY = theMUONLocalTrig.fLoStripY;
63 fLoLpt = theMUONLocalTrig.fLoLpt;
64 fLoHpt = theMUONLocalTrig.fLoHpt;
65 fLoApt = theMUONLocalTrig.fLoApt;
67 fX1Pattern = theMUONLocalTrig.fX1Pattern;
68 fX2Pattern = theMUONLocalTrig.fX2Pattern;
69 fX3Pattern = theMUONLocalTrig.fX3Pattern;
70 fX4Pattern = theMUONLocalTrig.fX4Pattern;
72 fY1Pattern = theMUONLocalTrig.fY1Pattern;
73 fY2Pattern = theMUONLocalTrig.fY2Pattern;
74 fY3Pattern = theMUONLocalTrig.fY3Pattern;
75 fY4Pattern = theMUONLocalTrig.fY4Pattern;
77 fLoDecision = theMUONLocalTrig.fLoDecision;
79 fDigits = theMUONLocalTrig.fDigits;
81 //----------------------------------------------------------------------
82 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
84 // equal operator (useful for non-pointer member in TClonesArray)
85 if (this == &theMUONLocalTrig)
88 // base class assignement
89 TObject::operator=(theMUONLocalTrig);
91 fLoCircuit = theMUONLocalTrig.fLoCircuit;
92 fLoStripX = theMUONLocalTrig.fLoStripX;
93 fLoDev = theMUONLocalTrig.fLoDev;
94 fLoStripY = theMUONLocalTrig.fLoStripY;
95 fLoLpt = theMUONLocalTrig.fLoLpt;
96 fLoHpt = theMUONLocalTrig.fLoHpt;
97 fLoApt = theMUONLocalTrig.fLoApt;
99 fX1Pattern = theMUONLocalTrig.fX1Pattern;
100 fX2Pattern = theMUONLocalTrig.fX2Pattern;
101 fX3Pattern = theMUONLocalTrig.fX3Pattern;
102 fX4Pattern = theMUONLocalTrig.fX4Pattern;
104 fY1Pattern = theMUONLocalTrig.fY1Pattern;
105 fY2Pattern = theMUONLocalTrig.fY2Pattern;
106 fY3Pattern = theMUONLocalTrig.fY3Pattern;
107 fY4Pattern = theMUONLocalTrig.fY4Pattern;
109 fLoDecision = theMUONLocalTrig.fLoDecision;
111 fDigits = theMUONLocalTrig.fDigits;
116 //----------------------------------------------------------------------
117 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
119 // add a local trigger object
120 fLoCircuit = localtr[0];
121 fLoStripX = localtr[1];
123 fLoStripY = localtr[3];
128 // keep on with this way
129 fX1Pattern = (UShort_t)localtr[7];
130 fX2Pattern = (UShort_t)localtr[8];
131 fX3Pattern = (UShort_t)localtr[9];
132 fX4Pattern = (UShort_t)localtr[10];
134 fY1Pattern = (UShort_t)localtr[11];
135 fY2Pattern = (UShort_t)localtr[12];
136 fY3Pattern = (UShort_t)localtr[13];
137 fY4Pattern = (UShort_t)localtr[14];
141 //----------------------------------------------------------------------
142 Char_t AliMUONLocalTrigger::GetLoDecision()
144 // returns local trigger decision
145 fLoDecision = (fLoLpt & 0x3);
146 fLoDecision |= (fLoHpt << 2) & 0xC;
151 //----------------------------------------------------------------------
152 void AliMUONLocalTrigger::GetDigit(
153 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit
156 // Returns the i'th digit that fired this circuit.
157 // The number of digits can be found with NumberOfDigits(), that is
158 // i is valid in the range [ 0 , NumberOfDigits() - 1 ]
160 Int_t digitnumber = fDigits[i];
161 DecodeDigitNumber(digitnumber, chamber, cathode, digit);
164 //----------------------------------------------------------------------
165 Int_t AliMUONLocalTrigger::EncodeDigitNumber(
166 Int_t chamber, Int_t cathode, Int_t digit
169 // Encodes a 32-bit digit number from digit information to be stored
170 // in internal integer arrays. Note that the value of the digit parameter
171 // can not be larger than 0x07FFFFFF.
173 assert( 0 <= cathode && cathode <= 1 );
174 assert( 0 <= chamber && chamber <= 13 );
176 if ((digit & 0xF8000000) != 0)
178 AliErrorGeneral("AliMUONLocalTrigger", Form(
179 "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
180 cathode, chamber, digit
185 return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
188 //----------------------------------------------------------------------
189 void AliMUONLocalTrigger::DecodeDigitNumber(
191 Int_t& chamber, Int_t& cathode, Int_t& digit
194 // Decodes a digit number into information about the digit.
195 // One can subsequently fetch the digit with
196 // AliMUONDataInterface::Digit(chamber, cathode, digit)
198 cathode = (digitnumber >> 31) & 0x1;
199 chamber = (digitnumber >> 27) & 0xF;
200 digit = digitnumber & 0x7FFFFFF;