X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTrigger.cxx;h=4e81712167c5d777ffefc991897e40686da36d26;hb=3c196b38a4ebb5035e7957054fce391487111d02;hp=2a5a466a80cbc819be455418a7d5289850f89bb0;hpb=71a2d3aa63e94daa0244d8d6d1c7c162ae29a374;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTrigger.cxx b/MUON/AliMUONLocalTrigger.cxx index 2a5a466a80c..4e81712167c 100644 --- a/MUON/AliMUONLocalTrigger.cxx +++ b/MUON/AliMUONLocalTrigger.cxx @@ -19,12 +19,17 @@ #include "AliMUONLocalTrigger.h" #include "AliLog.h" #include "AliMUONLocalStruct.h" +#include "AliMUONRawStreamTriggerHP.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) @@ -36,7 +41,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fLoCircuit(0), fLoStripX(0), fLoDev(0), - fLoStripY(0), + fLoSdev(1), + fLoTrigY(1), + fLoStripY(15), fLoLpt(0), fLoHpt(0), @@ -49,8 +56,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fY2Pattern(0), fY3Pattern(0), fY4Pattern(0), - - fLoDecision(0) + + fHitPatternFromResponse(0xFF), + fTriggerWithoutChamber(0) { /// Default constructor } @@ -60,6 +68,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), @@ -73,8 +83,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger(const AliMUONLocalTrigger& theMUONLocal fY2Pattern(theMUONLocalTrig.fY2Pattern), fY3Pattern(theMUONLocalTrig.fY3Pattern), fY4Pattern(theMUONLocalTrig.fY4Pattern), - - fLoDecision(theMUONLocalTrig.fLoDecision) + + fHitPatternFromResponse(theMUONLocalTrig.fHitPatternFromResponse), + fTriggerWithoutChamber(theMUONLocalTrig.fTriggerWithoutChamber) { /// Copy constructor (useful for TClonesArray) @@ -101,6 +112,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; @@ -115,25 +128,56 @@ AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& t fY3Pattern = theMUONLocalTrig.fY3Pattern; fY4Pattern = theMUONLocalTrig.fY4Pattern; - fLoDecision = theMUONLocalTrig.fLoDecision; + fHitPatternFromResponse = theMUONLocalTrig.fHitPatternFromResponse; + fTriggerWithoutChamber = theMUONLocalTrig.fTriggerWithoutChamber; return *this; } //---------------------------------------------------------------------- -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::GetXPattern(TArrayS& array) const +{ + /// return array of X pattern + Short_t vec[4] = {GetX1Pattern(), GetX2Pattern(), GetX3Pattern(), GetX4Pattern()}; + array.Set(4, vec); +} + +//___________________________________________ +void AliMUONLocalTrigger::GetYPattern(TArrayS& array) const +{ + /// return array of Y pattern + Short_t vec[4] = {GetY1Pattern(), GetY2Pattern(), GetY3Pattern(), GetY4Pattern()}; + array.Set(4, vec); +} + +//___________________________________________ +Bool_t +AliMUONLocalTrigger::IsNull() const +{ + /// 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::SetLocalStruct(Int_t loCircuit, AliMUONLocalStruct& localStruct) @@ -143,10 +187,45 @@ 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.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()); + +} + +//---------------------------------------------------------------------- +void AliMUONLocalTrigger::SetLocalStruct(Int_t loCircuit, const AliMUONRawStreamTriggerHP::AliLocalStruct& localStruct) +{ +/// Set local trigger info from rawdata localStruct (new raw reader) + + // 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()); @@ -166,6 +245,31 @@ 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 { @@ -173,11 +277,80 @@ void AliMUONLocalTrigger::Print(Option_t* opt) const 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 \n",LoCircuit(),LoStripX(),LoDev(),LoStripY(),LoLpt(),LoHpt()); + 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; +}