X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONLocalTrigger.cxx;h=39a6a1594930427430637fe76d02bfebfe5d1f09;hb=e742b9b00f6e8da7fdce797baf9a99a41d3fb407;hp=12e664b293f933c64d09f42b8c5eb4eb01dd2e6e;hpb=2f013ecd641c8df6d896ec8b5df149e21eb2ab27;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONLocalTrigger.cxx b/MUON/AliMUONLocalTrigger.cxx index 12e664b293f..39a6a159493 100644 --- a/MUON/AliMUONLocalTrigger.cxx +++ b/MUON/AliMUONLocalTrigger.cxx @@ -17,16 +17,22 @@ #include "AliMUONLocalTrigger.h" -#include #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 +//----------------------------------------------------------------------------- +using std::endl; +using std::cout; /// \cond CLASSIMP ClassImp(AliMUONLocalTrigger) /// \endcond @@ -37,7 +43,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fLoCircuit(0), fLoStripX(0), fLoDev(0), - fLoStripY(0), + fLoSdev(1), + fLoTrigY(1), + fLoStripY(15), fLoLpt(0), fLoHpt(0), @@ -50,8 +58,9 @@ AliMUONLocalTrigger::AliMUONLocalTrigger() fY2Pattern(0), fY3Pattern(0), fY4Pattern(0), - - fLoDecision(0) + + fHitPatternFromResponse(0xFF), + fTriggerWithoutChamber(0) { /// Default constructor } @@ -61,6 +70,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,12 +85,20 @@ 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) } + +//---------------------------------------------------------------------- +AliMUONLocalTrigger::~AliMUONLocalTrigger() +{ +/// Destructor +} + //---------------------------------------------------------------------- AliMUONLocalTrigger& AliMUONLocalTrigger::operator=(const AliMUONLocalTrigger& theMUONLocalTrig) { @@ -95,6 +114,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; @@ -109,25 +130,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] = {static_cast(GetX1Pattern()), static_cast(GetX2Pattern()), static_cast(GetX3Pattern()), static_cast(GetX4Pattern())}; + array.Set(4, vec); +} + +//___________________________________________ +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); +} + +//___________________________________________ +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) @@ -137,10 +189,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()); @@ -160,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 \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; +}