X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTrigger.cxx;h=f7a4577bfcad377254875deed50a387f62d2f80d;hb=e29a165da3598f5021996a6968b79fdff2f51975;hp=53e4bb5ca21722173b02f4febe30b827bb958207;hpb=ad705f3013be0b1f1f50dd9be1e5ffd69adae6d0;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTrigger.cxx b/MUON/AliMUONLocalTrigger.cxx index 53e4bb5ca21..f7a4577bfca 100644 --- a/MUON/AliMUONLocalTrigger.cxx +++ b/MUON/AliMUONLocalTrigger.cxx @@ -17,15 +17,18 @@ #include "AliMUONLocalTrigger.h" -#include #include "AliLog.h" #include "AliMUONLocalStruct.h" +#include +#include +//----------------------------------------------------------------------------- /// \class AliMUONLocalTrigger /// Local Trigger algorithm data outputs /// (contains local trigger decision and bit patterns) \n /// Add SetLocalStruct method for rawdata (Ch. Finck) /// \author Ph. Crochet +//----------------------------------------------------------------------------- /// \cond CLASSIMP ClassImp(AliMUONLocalTrigger) @@ -37,7 +40,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fLoCircuit(0), fLoStripX(0), fLoDev(0), - fLoStripY(0), + fLoSdev(1), + fLoTrigY(1), + fLoStripY(15), fLoLpt(0), fLoHpt(0), @@ -49,10 +54,7 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fY1Pattern(0), fY2Pattern(0), fY3Pattern(0), - fY4Pattern(0), - - fLoDecision(0), - fDigits(0) + fY4Pattern(0) { /// Default constructor } @@ -62,6 +64,8 @@ AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocal fLoCircuit(theMUONLocalTrig.fLoCircuit), fLoStripX(theMUONLocalTrig.fLoStripX), fLoDev(theMUONLocalTrig.fLoDev), + fLoSdev(theMUONLocalTrig.fLoSdev), + fLoTrigY(theMUONLocalTrig.fLoTrigY), fLoStripY(theMUONLocalTrig.fLoStripY), fLoLpt(theMUONLocalTrig.fLoLpt), fLoHpt(theMUONLocalTrig.fLoHpt), @@ -74,14 +78,18 @@ AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocal fY1Pattern(theMUONLocalTrig.fY1Pattern), fY2Pattern(theMUONLocalTrig.fY2Pattern), fY3Pattern(theMUONLocalTrig.fY3Pattern), - fY4Pattern(theMUONLocalTrig.fY4Pattern), - - fLoDecision(theMUONLocalTrig.fLoDecision), - fDigits(theMUONLocalTrig.fDigits) + fY4Pattern(theMUONLocalTrig.fY4Pattern) { /// Copy constructor (useful for TClonesArray) } + +//---------------------------------------------------------------------- +AliMUONLocalTrigger::~AliMUONLocalTrigger() +{ +/// Destructor +} + //---------------------------------------------------------------------- AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig) { @@ -97,6 +105,8 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t fLoCircuit = theMUONLocalTrig.fLoCircuit; fLoStripX = theMUONLocalTrig.fLoStripX; fLoDev = theMUONLocalTrig.fLoDev; + fLoSdev = theMUONLocalTrig.fLoSdev; + fLoTrigY = theMUONLocalTrig.fLoTrigY; fLoStripY = theMUONLocalTrig.fLoStripY; fLoLpt = theMUONLocalTrig.fLoLpt; fLoHpt = theMUONLocalTrig.fLoHpt; @@ -111,97 +121,52 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t fY3Pattern = theMUONLocalTrig.fY3Pattern; fY4Pattern = theMUONLocalTrig.fY4Pattern; - fLoDecision = theMUONLocalTrig.fLoDecision; - - fDigits = theMUONLocalTrig.fDigits; - return *this; } -//---------------------------------------------------------------------- -AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) : - fLoCircuit(localtr[0]), - fLoStripX(localtr[1]), - fLoDev(localtr[2]), - fLoStripY(localtr[3]), - fLoLpt(localtr[4]), - fLoHpt(localtr[5]), - // 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]), - - fLoDecision(0), - fDigits(digits) -{ -/// Add a local trigger object -} //---------------------------------------------------------------------- -Char_t AliMUONLocalTrigger::GetLoDecision() +Char_t AliMUONLocalTrigger::GetLoDecision() const { /// Get local decision /// from H(L)pt; /// returns local trigger decision - fLoDecision = (fLoLpt & 0x3); - fLoDecision |= (fLoHpt << 2) & 0xC; + Char_t rv = (fLoLpt & 0x3); + rv |= (fLoHpt << 2) & 0xC; - return fLoDecision; + return rv; } -//---------------------------------------------------------------------- -void AliMUONLocalTrigger::GetDigit( - Int_t i, Int_t& chamber, Int_t& cathode, Int_t& digit) const +//___________________________________________ +void AliMUONLocalTrigger::GetXPattern(TArrayS& array) 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); + /// return array of X pattern + Short_t vec[4] = {GetX1Pattern(), GetX2Pattern(), GetX3Pattern(), GetX4Pattern()}; + array.Set(4, vec); } -//---------------------------------------------------------------------- -Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, - Int_t digit) +//___________________________________________ +void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const { -/// 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; + /// return array of Y pattern + Short_t vec[4] = {GetY1Pattern(), GetY2Pattern(), GetY3Pattern(), GetY4Pattern()}; + array.Set(4, vec); } -//---------------------------------------------------------------------- -void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, - Int_t& cathode, Int_t& digit) +//___________________________________________ +Bool_t +AliMUONLocalTrigger::IsNull() const { -/// 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; + /// Whether or not this card has something usefull to say or not + return ( fX1Pattern == 0 && + fX2Pattern == 0 && + fX3Pattern == 0 && + fX4Pattern == 0 && + fY1Pattern == 0 && + fY2Pattern == 0 && + fY3Pattern == 0 && + fY4Pattern == 0 ); } //---------------------------------------------------------------------- @@ -212,10 +177,12 @@ void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& lo // set id' SetLoCircuit(loCircuit); - // set X, Y dev + // set X, Y, dev, Sdev and TrigY SetLoStripX((Int_t)localStruct.GetXPos()); SetLoStripY((Int_t)localStruct.GetYPos()); SetLoDev((Int_t)localStruct.GetXDev()); + SetLoSdev((Int_t)localStruct.GetSXDev()); + SetLoTrigY((Int_t)localStruct.GetTriggerY()); // set L(H)pt SetLoLpt(localStruct.GetLpt()); @@ -235,19 +202,58 @@ void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& lo } +namespace +{ + const char* AsString(Int_t t) + { + switch (t) + { + case 0: + return "no"; + break; + case 1: + return "minus"; + break; + case 2: + return "plus"; + break; + case 3: + return "undef"; + break; + default: + return ""; + break; + } + } +} + //---------------------------------------------------------------------- void AliMUONLocalTrigger::Print(Option_t* opt) const { - // - // Printing Local Trigger information - // +/// Printing Local Trigger information + TString sopt(opt); sopt.ToUpper(); - - if ( sopt.Contains("FULL") ) { - printf(" Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt()); + cout << Form("Circuit %3d Decision %2d StripX %2d Dev %2d(%1d) StripY %2d Lpt %6s Hpt %6s", + LoCircuit(), GetLoDecision(), + LoStripX(), LoDev(), LoSdev(), LoStripY(), + AsString(LoLpt()),AsString(LoHpt()),IsNull()) << endl; + + if ( sopt.Contains("FULL") ) { + cout << Form("Xpatterns = 0x %04x %04x %04x %04x", + fX1Pattern,fX2Pattern,fX3Pattern,fX4Pattern) << endl; + cout << Form("Ypatterns = 0x %04x %04x %04x %04x", + fY1Pattern,fY2Pattern,fY3Pattern,fY4Pattern) << endl; } } +//---------------------------------------------------------------------- +const char* +AliMUONLocalTrigger::GetName() const +{ +/// Generate name + + return Form("LocalBoard%3d",LoCircuit()); +}