* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-
-*/
+/* $Id$ */
#include "AliMUONLocalTrigger.h"
+#include <assert.h>
+#include "AliLog.h"
-ClassImp(AliMUONLocalTrigger);
+ClassImp(AliMUONLocalTrigger)
//----------------------------------------------------------------------
AliMUONLocalTrigger::AliMUONLocalTrigger()
+ : TObject(), fDigits(0)
{
// constructor
fLoCircuit = 0;
fLoLpt = 0;
fLoHpt = 0;
fLoApt = 0;
+
+ fX1Pattern = 0;
+ fX2Pattern = 0;
+ fX3Pattern = 0;
+ fX4Pattern = 0;
+
+ fY1Pattern = 0;
+ fY2Pattern = 0;
+ fY3Pattern = 0;
+ fY4Pattern = 0;
+
+ fLoDecision = 0;
}
//----------------------------------------------------------------------
-AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& MUONLocalTrig):TObject(MUONLocalTrig)
+AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig)
+ : TObject(theMUONLocalTrig)
{
// copy constructor (useful for TClonesArray)
- fLoCircuit = MUONLocalTrig.fLoCircuit;
- fLoStripX = MUONLocalTrig.fLoStripX;
- fLoDev = MUONLocalTrig.fLoDev;
- fLoStripY = MUONLocalTrig.fLoStripY;
- fLoLpt = MUONLocalTrig.fLoLpt;
- fLoHpt = MUONLocalTrig.fLoHpt;
- fLoApt = MUONLocalTrig.fLoApt;
+ fLoCircuit = theMUONLocalTrig.fLoCircuit;
+ fLoStripX = theMUONLocalTrig.fLoStripX;
+ fLoDev = theMUONLocalTrig.fLoDev;
+ fLoStripY = theMUONLocalTrig.fLoStripY;
+ fLoLpt = theMUONLocalTrig.fLoLpt;
+ fLoHpt = theMUONLocalTrig.fLoHpt;
+ fLoApt = theMUONLocalTrig.fLoApt;
+
+ fX1Pattern = theMUONLocalTrig.fX1Pattern;
+ fX2Pattern = theMUONLocalTrig.fX2Pattern;
+ fX3Pattern = theMUONLocalTrig.fX3Pattern;
+ fX4Pattern = theMUONLocalTrig.fX4Pattern;
+
+ fY1Pattern = theMUONLocalTrig.fY1Pattern;
+ fY2Pattern = theMUONLocalTrig.fY2Pattern;
+ fY3Pattern = theMUONLocalTrig.fY3Pattern;
+ fY4Pattern = theMUONLocalTrig.fY4Pattern;
+
+ fLoDecision = theMUONLocalTrig.fLoDecision;
+
+ fDigits = theMUONLocalTrig.fDigits;
}
//----------------------------------------------------------------------
-AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& MUONLocalTrig)
+AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig)
{
// equal operator (useful for non-pointer member in TClonesArray)
- if (this == &MUONLocalTrig)
+ if (this == &theMUONLocalTrig)
return *this;
- fLoCircuit = MUONLocalTrig.fLoCircuit;
- fLoStripX = MUONLocalTrig.fLoStripX;
- fLoDev = MUONLocalTrig.fLoDev;
- fLoStripY = MUONLocalTrig.fLoStripY;
- fLoLpt = MUONLocalTrig.fLoLpt;
- fLoHpt = MUONLocalTrig.fLoHpt;
- fLoApt = MUONLocalTrig.fLoApt;
+ // base class assignement
+ TObject::operator=(theMUONLocalTrig);
+
+ fLoCircuit = theMUONLocalTrig.fLoCircuit;
+ fLoStripX = theMUONLocalTrig.fLoStripX;
+ fLoDev = theMUONLocalTrig.fLoDev;
+ fLoStripY = theMUONLocalTrig.fLoStripY;
+ fLoLpt = theMUONLocalTrig.fLoLpt;
+ fLoHpt = theMUONLocalTrig.fLoHpt;
+ fLoApt = theMUONLocalTrig.fLoApt;
+
+ fX1Pattern = theMUONLocalTrig.fX1Pattern;
+ fX2Pattern = theMUONLocalTrig.fX2Pattern;
+ fX3Pattern = theMUONLocalTrig.fX3Pattern;
+ fX4Pattern = theMUONLocalTrig.fX4Pattern;
+
+ fY1Pattern = theMUONLocalTrig.fY1Pattern;
+ fY2Pattern = theMUONLocalTrig.fY2Pattern;
+ fY3Pattern = theMUONLocalTrig.fY3Pattern;
+ fY4Pattern = theMUONLocalTrig.fY4Pattern;
+
+ fLoDecision = theMUONLocalTrig.fLoDecision;
+
+ fDigits = theMUONLocalTrig.fDigits;
return *this;
}
//----------------------------------------------------------------------
-AliMUONLocalTrigger::AliMUONLocalTrigger(Int_t *localtr)
+AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits)
{
// add a local trigger object
fLoCircuit = localtr[0];
fLoLpt = localtr[4];
fLoHpt = localtr[5];
fLoApt = localtr[6];
-}
-//----------------------------------------------------------------------
-//--- methods which return member data related info
-//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoCircuit(){
-// returns circuit number
-return fLoCircuit;
-}
-//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoStripX(){
-// returns X strip in MT11
-return fLoStripX;
-}
-//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoDev(){
-// returns deviation
-return fLoDev;
+ // keep on with this way
+ fX1Pattern = (UShort_t)localtr[7];
+ fX2Pattern = (UShort_t)localtr[8];
+ fX3Pattern = (UShort_t)localtr[9];
+ fX4Pattern = (UShort_t)localtr[10];
+
+ fY1Pattern = (UShort_t)localtr[11];
+ fY2Pattern = (UShort_t)localtr[12];
+ fY3Pattern = (UShort_t)localtr[13];
+ fY4Pattern = (UShort_t)localtr[14];
+
+ fDigits = digits;
}
//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoStripY(){
-// returns Y strip in MT11
-return fLoStripY;
+Char_t AliMUONLocalTrigger::GetLoDecision()
+{
+ fLoDecision = (fLoLpt & 0x3);
+ fLoDecision |= (fLoHpt << 2) & 0xC;
+
+ return fLoDecision;
}
+
//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoLpt(){
-// returns Low pt 0 : nothing, 1 : Minus, 2 : Plus, 3 : Undef
-return fLoLpt;
+void AliMUONLocalTrigger::GetDigit(
+ Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit
+ ) const
+{
+// Returns the i'th digit that fired this circuit.
+// The number of digits can be found with NumberOfDigits(), that is
+// i is valid in the range [ 0 , NumberOfDigits() - 1 ]
+
+ Int_t digitnumber = fDigits[i];
+ DecodeDigitNumber(digitnumber, chamber, cathode, digit);
}
+
//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoHpt(){
-// returns High pt 0 : nothing, 1 : Minus, 2 : Plus, 3 : Undef
-return fLoHpt;
+Int_t AliMUONLocalTrigger::EncodeDigitNumber(
+ Int_t chamber, Int_t cathode, Int_t digit
+ )
+{
+// Encodes a 32-bit digit number from digit information to be stored
+// in internal integer arrays. Note that the value of the digit parameter
+// can not be larger than 0x07FFFFFF.
+
+ assert( 0 <= cathode && cathode <= 1 );
+ assert( 0 <= chamber && chamber <= 13 );
+
+ if ((digit & 0xF8000000) != 0)
+ {
+ AliErrorGeneral("AliMUONLocalTrigger", Form(
+ "Digit index value is to large: 0x%8.8X. Maximum supported value is 0x07FFFFFF.",
+ cathode, chamber, digit
+ ));
+ return -1;
+ };
+
+ return ((cathode & 0x1) << 31) | ((chamber & 0xF) << 27) | digit;
}
+
//----------------------------------------------------------------------
-Int_t AliMUONLocalTrigger::LoApt(){
-// returns All pt 0 : nothing, 1 : Minus, 2 : Plus, 3 : Undef
-return fLoApt;
+void AliMUONLocalTrigger::DecodeDigitNumber(
+ Int_t digitnumber,
+ Int_t& chamber, Int_t& cathode, Int_t& digit
+ )
+{
+// Decodes a digit number into information about the digit.
+// One can subsequently fetch the digit with
+// AliMUONDataInterface::Digit(chamber, cathode, digit)
+
+ cathode = (digitnumber >> 31) & 0x1;
+ chamber = (digitnumber >> 27) & 0xF;
+ digit = digitnumber & 0x7FFFFFF;
}
+