X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTrigger.cxx;h=39a6a1594930427430637fe76d02bfebfe5d1f09;hb=7ee3992ce705e7756367a340047907f4eacb7821;hp=b47b8e787096fec5c295d263395d1e23d728f49e;hpb=eba3379e102435a50f04656bc3352343fc366425;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTrigger.cxx b/MUON/AliMUONLocalTrigger.cxx index b47b8e78709..39a6a159493 100644 --- a/MUON/AliMUONLocalTrigger.cxx +++ b/MUON/AliMUONLocalTrigger.cxx @@ -17,21 +17,25 @@ #include "AliMUONLocalTrigger.h" -#include #include "AliLog.h" #include "AliMUONLocalStruct.h" +#include "AliMUONRawStreamTriggerHP.h" +#include +#include -ClassImp(AliMUONLocalTrigger) - -/// ------------------ -/// Class AliMUONLocalTrigger -/// ------------------ +//----------------------------------------------------------------------------- +/// \class AliMUONLocalTrigger /// Local Trigger algorithm data outputs -/// (contains local trigger decision and bit patterns) -/// Ph. Crochet -/// -/// add SetLocalStruct method for rawdata -/// Ch. Finck +/// (contains local trigger decision and bit patterns) \n +/// Add SetLocalStruct method for rawdata (Ch. Finck) +/// \author Ph. Crochet +//----------------------------------------------------------------------------- + +using std::endl; +using std::cout; +/// \cond CLASSIMP +ClassImp(AliMUONLocalTrigger) +/// \endcond //---------------------------------------------------------------------- AliMUONLocalTrigger::AliMUONLocalTrigger() @@ -39,10 +43,11 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fLoCircuit(0), fLoStripX(0), fLoDev(0), - fLoStripY(0), + fLoSdev(1), + fLoTrigY(1), + fLoStripY(15), fLoLpt(0), fLoHpt(0), - fLoApt(0), fX1Pattern(0), fX2Pattern(0), @@ -53,49 +58,52 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fY2Pattern(0), fY3Pattern(0), fY4Pattern(0), - - fLoDecision(0), - fDigits(0) + + fHitPatternFromResponse(0xFF), + fTriggerWithoutChamber(0) { - // - // constructor - // +/// Default constructor } //---------------------------------------------------------------------- AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocalTrig) - : TObject(theMUONLocalTrig) + : TObject(theMUONLocalTrig), + fLoCircuit(theMUONLocalTrig.fLoCircuit), + fLoStripX(theMUONLocalTrig.fLoStripX), + fLoDev(theMUONLocalTrig.fLoDev), + fLoSdev(theMUONLocalTrig.fLoSdev), + fLoTrigY(theMUONLocalTrig.fLoTrigY), + fLoStripY(theMUONLocalTrig.fLoStripY), + fLoLpt(theMUONLocalTrig.fLoLpt), + fLoHpt(theMUONLocalTrig.fLoHpt), + + fX1Pattern(theMUONLocalTrig.fX1Pattern), + fX2Pattern(theMUONLocalTrig.fX2Pattern), + fX3Pattern(theMUONLocalTrig.fX3Pattern), + fX4Pattern(theMUONLocalTrig.fX4Pattern), + + fY1Pattern(theMUONLocalTrig.fY1Pattern), + fY2Pattern(theMUONLocalTrig.fY2Pattern), + fY3Pattern(theMUONLocalTrig.fY3Pattern), + fY4Pattern(theMUONLocalTrig.fY4Pattern), + + fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse), + fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber) { - // - // copy constructor (useful for TClonesArray) - // - fLoCircuit = theMUONLocalTrig.fLoCircuit; - fLoStripX = theMUONLocalTrig.fLoStripX; - fLoDev = theMUONLocalTrig.fLoDev; - fLoStripY = theMUONLocalTrig.fLoStripY; - fLoLpt = theMUONLocalTrig.fLoLpt; - fLoHpt = theMUONLocalTrig.fLoHpt; - fLoApt = theMUONLocalTrig.fLoApt; +/// Copy constructor (useful for TClonesArray) - 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() +{ +/// Destructor } + //---------------------------------------------------------------------- AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig) { - // assigment operator - // - // equal operator (useful for non-pointer member in TClonesArray) +/// Assigment operator; +/// equal operator (useful for non-pointer member in TClonesArray) if (this == &theMUONLocalTrig) return *this; @@ -106,10 +114,11 @@ 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; - fLoApt = theMUONLocalTrig.fLoApt; fX1Pattern = theMUONLocalTrig.fX1Pattern; fX2Pattern = theMUONLocalTrig.fX2Pattern; @@ -121,115 +130,104 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t fY3Pattern = theMUONLocalTrig.fY3Pattern; fY4Pattern = theMUONLocalTrig.fY4Pattern; - fLoDecision = theMUONLocalTrig.fLoDecision; - - fDigits = theMUONLocalTrig.fDigits; + fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse; + fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber; return *this; } + //---------------------------------------------------------------------- -AliMUONLocalTrigger::AliMUONLocalTrigger(const Int_t* localtr, const TArrayI& digits) -{ - // - // add a local trigger object - // - fLoCircuit = localtr[0]; - fLoStripX = localtr[1]; - fLoDev = localtr[2]; - fLoStripY = localtr[3]; - fLoLpt = localtr[4]; - fLoHpt = localtr[5]; - fLoApt = localtr[6]; - - // 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; -} -//---------------------------------------------------------------------- -Char_t AliMUONLocalTrigger::GetLoDecision() +Char_t AliMUONLocalTrigger::GetLoDecision() const { - // get local decision - // from H(L)pt - // returns local trigger decision +/// 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 ] + /// return array of X pattern + Short_t vec[4] = {static_cast(GetX1Pattern()), static_cast(GetX2Pattern()), static_cast(GetX3Pattern()), static_cast(GetX4Pattern())}; + array.Set(4, vec); +} - Int_t digitnumber = fDigits[i]; - DecodeDigitNumber(digitnumber, chamber, cathode, digit); +//___________________________________________ +void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const +{ + /// return array of Y pattern + Short_t vec[4] = {static_cast(GetY1Pattern()), static_cast(GetY2Pattern()), static_cast(GetY3Pattern()), static_cast(GetY4Pattern())}; + array.Set(4, vec); } -//---------------------------------------------------------------------- -Int_t AliMUONLocalTrigger::EncodeDigitNumber(Int_t chamber, Int_t cathode, - Int_t digit) +//___________________________________________ +Bool_t +AliMUONLocalTrigger::IsNull() 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; + /// 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 ); } //---------------------------------------------------------------------- -void AliMUONLocalTrigger::DecodeDigitNumber(Int_t digitnumber, Int_t& chamber, - Int_t& cathode, Int_t& digit) +void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) { -// Decodes a digit number into information about the digit. -// One can subsequently fetch the digit with -// AliMUONDataInterface::Digit(chamber, cathode, digit) +/// Set local trigger info from rawdata localStruct + + // set id' + SetLoCircuit(loCircuit); + + // 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.GetTrigY()); + + // set L(H)pt + SetLoLpt(localStruct.GetLpt()); + SetLoHpt(localStruct.GetHpt()); + + // set pattern X + SetX1Pattern(localStruct.GetX1()); + SetX2Pattern(localStruct.GetX2()); + SetX3Pattern(localStruct.GetX3()); + SetX4Pattern(localStruct.GetX4()); + + // set pattern Y + SetY1Pattern(localStruct.GetY1()); + SetY2Pattern(localStruct.GetY2()); + SetY3Pattern(localStruct.GetY3()); + SetY4Pattern(localStruct.GetY4()); - cathode = (digitnumber >> 31) & 0x1; - chamber = (digitnumber >> 27) & 0xF; - digit = digitnumber & 0x7FFFFFF; } //---------------------------------------------------------------------- -void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) +void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct) { - // - // Set local trigger info from rawdata localStruct - // +/// Set local trigger info from rawdata localStruct (new raw reader) // 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.GetTrigY()); // set L(H)pt SetLoLpt(localStruct.GetLpt()); @@ -249,19 +247,112 @@ 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(); - + + 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())) << endl; + if ( sopt.Contains("FULL") ) { - printf(" Circuit %d StripX %d Dev %d StripY %d Lpt %d Hpt %d Apt %d \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt(),LoApt()); + 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; + } +} + +//---------------------------------------------------------------------- +Int_t AliMUONLocalTrigger::GetDeviation() const +{ + /// return deviation + + Int_t deviation = LoDev(); + Int_t sign = 0; + if ( !LoSdev() && deviation ) sign=-1; + if ( !LoSdev() && !deviation ) sign= 0; + if ( LoSdev() == 1 ) sign=+1; + deviation *= sign; + deviation += 15; + return deviation; +} +//---------------------------------------------------------------------- +void AliMUONLocalTrigger::SetDeviation(Int_t deviation) +{ + /// set LoDev and LoSDev according to deviation + + deviation -= 15; + if (deviation > 0) { + SetLoDev(deviation); + SetLoSdev(1); + } else { + SetLoDev(-deviation); + SetLoSdev(0); } } +//---------------------------------------------------------------------- +const char* +AliMUONLocalTrigger::GetName() const +{ +/// Generate name + + return Form("LocalBoard%3d",LoCircuit()); +} + + +//---------------------------------------------------------------------- +Bool_t AliMUONLocalTrigger::IsTrigX() const +{ +/// Trigger response X strips + Bool_t xTrig; + if ( LoSdev()==1 && LoDev()==0 && + LoStripX()==0) xTrig=kFALSE; // no trigger in X + else xTrig = kTRUE; // trigger in X + return xTrig; +} + + +//---------------------------------------------------------------------- +Bool_t AliMUONLocalTrigger::IsTrigY() const +{ +/// Trigger response Y strips + Bool_t yTrig; + if ( LoTrigY()==1 && + LoStripY()==15 ) yTrig = kFALSE; // no trigger in Y + else yTrig = kTRUE; // trigger in Y + return yTrig; +}