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 **************************************************************************/
18 #include "AliMUONLocalTrigger.h"
22 ClassImp(AliMUONLocalTrigger)
23 //----------------------------------------------------------------------
24 AliMUONLocalTrigger::AliMUONLocalTrigger()
25 : TObject(), fDigits(0)
48 //----------------------------------------------------------------------
49 AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
50 : TObject(theMUONLocalTrig)
52 // copy constructor (useful for TClonesArray)
53 fLoCircuit = theMUONLocalTrig.fLoCircuit;
54 fLoStripX = theMUONLocalTrig.fLoStripX;
55 fLoDev = theMUONLocalTrig.fLoDev;
56 fLoStripY = theMUONLocalTrig.fLoStripY;
57 fLoLpt = theMUONLocalTrig.fLoLpt;
58 fLoHpt = theMUONLocalTrig.fLoHpt;
59 fLoApt = theMUONLocalTrig.fLoApt;
61 fX1Pattern = theMUONLocalTrig.fX1Pattern;
62 fX2Pattern = theMUONLocalTrig.fX2Pattern;
63 fX3Pattern = theMUONLocalTrig.fX3Pattern;
64 fX4Pattern = theMUONLocalTrig.fX4Pattern;
66 fY1Pattern = theMUONLocalTrig.fY1Pattern;
67 fY2Pattern = theMUONLocalTrig.fY2Pattern;
68 fY3Pattern = theMUONLocalTrig.fY3Pattern;
69 fY4Pattern = theMUONLocalTrig.fY4Pattern;
71 fLoDecision = theMUONLocalTrig.fLoDecision;
73 fDigits = theMUONLocalTrig.fDigits;
75 //----------------------------------------------------------------------
76 AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
78 // equal operator (useful for non-pointer member in TClonesArray)
79 if (this == &theMUONLocalTrig)
82 // base class assignement
83 TObject::operator=(theMUONLocalTrig);
85 fLoCircuit = theMUONLocalTrig.fLoCircuit;
86 fLoStripX = theMUONLocalTrig.fLoStripX;
87 fLoDev = theMUONLocalTrig.fLoDev;
88 fLoStripY = theMUONLocalTrig.fLoStripY;
89 fLoLpt = theMUONLocalTrig.fLoLpt;
90 fLoHpt = theMUONLocalTrig.fLoHpt;
91 fLoApt = theMUONLocalTrig.fLoApt;
93 fX1Pattern = theMUONLocalTrig.fX1Pattern;
94 fX2Pattern = theMUONLocalTrig.fX2Pattern;
95 fX3Pattern = theMUONLocalTrig.fX3Pattern;
96 fX4Pattern = theMUONLocalTrig.fX4Pattern;
98 fY1Pattern = theMUONLocalTrig.fY1Pattern;
99 fY2Pattern = theMUONLocalTrig.fY2Pattern;
100 fY3Pattern = theMUONLocalTrig.fY3Pattern;
101 fY4Pattern = theMUONLocalTrig.fY4Pattern;
103 fLoDecision = theMUONLocalTrig.fLoDecision;
105 fDigits = theMUONLocalTrig.fDigits;
110 //----------------------------------------------------------------------
111 AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
113 // add a local trigger object
114 fLoCircuit = localtr[0];
115 fLoStripX = localtr[1];
117 fLoStripY = localtr[3];
122 // keep on with this way
123 fX1Pattern = (UShort_t)localtr[7];
124 fX2Pattern = (UShort_t)localtr[8];
125 fX3Pattern = (UShort_t)localtr[9];
126 fX4Pattern = (UShort_t)localtr[10];
128 fY1Pattern = (UShort_t)localtr[11];
129 fY2Pattern = (UShort_t)localtr[12];
130 fY3Pattern = (UShort_t)localtr[13];
131 fY4Pattern = (UShort_t)localtr[14];
135 //----------------------------------------------------------------------
136 Char_t AliMUONLocalTrigger::GetLoDecision()
138 fLoDecision = (fLoLpt & 0x3);
139 fLoDecision |= (fLoHpt << 2) & 0xC;
144 //----------------------------------------------------------------------
145 void AliMUONLocalTrigger::GetDigit(
146 Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit
149 // Returns the i'th digit that fired this circuit.
150 // The number of digits can be found with NumberOfDigits(), that is
151 // i is valid in the range [ 0 , NumberOfDigits() - 1 ]
153 Int_t digitnumber = fDigits[i];
154 DecodeDigitNumber(digitnumber, chamber, cathode, digit);
157 //----------------------------------------------------------------------
158 Int_t AliMUONLocalTrigger::EncodeDigitNumber(
159 Int_t chamber, Int_t cathode, Int_t digit
162 // Encodes a 32-bit digit number from digit information to be stored
163 // in internal integer arrays. Note that the value of the digit parameter
164 // can not be larger than 0x07FFFFFF.
166 assert( 0 <= cathode && cathode <= 1 );
167 assert( 0 <= chamber && chamber <= 13 );
169 if ((digit & 0xF8000000) != 0)
171 AliErrorGeneral("AliMUONLocalTrigger", Form(
172 "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
173 cathode, chamber, digit
178 return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
181 //----------------------------------------------------------------------
182 void AliMUONLocalTrigger::DecodeDigitNumber(
184 Int_t& chamber, Int_t& cathode, Int_t& digit
187 // Decodes a digit number into information about the digit.
188 // One can subsequently fetch the digit with
189 // AliMUONDataInterface::Digit(chamber, cathode, digit)
191 cathode = (digitnumber >> 31) & 0x1;
192 chamber = (digitnumber >> 27) & 0xF;
193 digit = digitnumber & 0x7FFFFFF;