X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONRegionalTriggerBoard.cxx;h=4d5c22dcf9c66a8f89a3f4500adde1d2e95aac82;hb=8f33c656f081b63c726ee40931347ffdcb72cb5d;hp=586153be5688ac7b06e5b1aca962612cfeeecb41;hpb=41922e78375f8ff3c10997001f461b7d14b26b1a;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONRegionalTriggerBoard.cxx b/MUON/AliMUONRegionalTriggerBoard.cxx index 586153be568..4d5c22dcf9c 100644 --- a/MUON/AliMUONRegionalTriggerBoard.cxx +++ b/MUON/AliMUONRegionalTriggerBoard.cxx @@ -15,7 +15,16 @@ /* $Id$ */ -//*-- Author: Rachid Guernane (LPCCFd) +//----------------------------------------------------------------------------- +/// \class AliMUONRegionalTriggerBoard +/// Dimuon regional trigger implementation: +/// - entry are local board responses +/// - output is 12-bit word +/// - algorithm is similar to the global one +/// +/// \author Rachid Guernane (LPCCFd) +/// Corrected by Christian Finck (Subatech) +//----------------------------------------------------------------------------- #include "AliMUONRegionalTriggerBoard.h" @@ -25,42 +34,67 @@ #include +/// \cond CLASSIMP ClassImp(AliMUONRegionalTriggerBoard) +/// \endcond //___________________________________________ AliMUONRegionalTriggerBoard::AliMUONRegionalTriggerBoard() + : AliMUONTriggerBoard(), + fMask(0x0) { +/// Default constructor for (Int_t i=0; i<16; i++) fLocalResponse[i] = 0; } //___________________________________________ -AliMUONRegionalTriggerBoard::AliMUONRegionalTriggerBoard(const char *name, Int_t a) : AliMUONTriggerBoard(name, a) +AliMUONRegionalTriggerBoard::AliMUONRegionalTriggerBoard(const char *name, Int_t a) + : AliMUONTriggerBoard(name, a), + fMask(0x0) { +/// Standard constructor for (Int_t i=0; i<16; i++) fLocalResponse[i] = 0; } +//___________________________________________ +AliMUONRegionalTriggerBoard::~AliMUONRegionalTriggerBoard() +{ +/// Destructor +} + //___________________________________________ void AliMUONRegionalTriggerBoard::Response() { - Int_t t[16]; +/// response is given following the regional algorithm +// output from local trigger algorithm +// [+, -] * [Hpt, Lpt] +// transformed to [+, -, US, LS] * [Hpt, Lpt] + + if ( IsNull() ) return; // Do nothing if all local responses are null - for (Int_t i=0;i<16;i++) t[i] = fLocalResponse[i] & fMask[i]; + Int_t t[16]; + for (Int_t i = 0; i < 16; ++i) + { + if ((fMask >> i) & 0x1) + t[i] = fLocalResponse[i]; + else + t[i] = 0; + } + Int_t rank = 8; - for (Int_t i=0;i<4;i++) + for (Int_t i = 0; i < 4; ++i) { Int_t ip = 0; - for (Int_t j=0;j 0 a ,b = reg response = Hpt (+|-|us|ls) | Lpt (+|-|us|ls) + + TBits a(8), b(8); a.Set(8,&i); b.Set(8,&j); TBits trg1(2), trg2(2), trg(2); - if (!strcmp(thres,"APT")) + if (!strcmp(thres,"LPT")) { - if (!level) + + if (!level) { trg1[0] = a[0]; trg1[1] = a[1]; trg2[0] = b[0]; trg2[1] = b[1]; @@ -91,7 +133,7 @@ UShort_t AliMUONRegionalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres, trg2[0] = b[2]; trg2[1] = b[3]; } } - else if (!strcmp(thres,"LPT")) + else { if (!level) { @@ -101,20 +143,7 @@ UShort_t AliMUONRegionalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres, else { trg1[0] = a[6]; trg1[1] = a[7]; - trg2[0] = b[6]; trg2[1] = b[7]; - } - } - else - { - if (!level) - { - trg1[0] = a[4]; trg1[1] = a[5]; - trg2[0] = b[4]; trg2[1] = b[5]; - } - else - { - trg1[0] = a[10]; trg1[1] = a[11]; - trg2[0] = b[10]; trg2[1] = b[11]; + trg2[0] = b[6]; trg2[1] = b[7]; } } @@ -126,20 +155,19 @@ UShort_t AliMUONRegionalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres, } else { - if (!strcmp(thres,"APT")) + if (!strcmp(thres,"LPT")) { - trgLS1[0] = a[1]; trgUS1[0] = a[0]; - trgLS2[0] = b[1]; trgUS2[0] = b[0]; - } - else if (!strcmp(thres,"LPT")) - { - trgLS1[0] = a[5]; trgUS1[0] = a[4]; - trgLS2[0] = b[5]; trgUS2[0] = b[4]; + //trgLS1[0] = a[1]; trgUS1[0] = a[0]; + //trgLS2[0] = b[1]; trgUS2[0] = b[0]; + trgLS1[0] = a[0]; trgUS1[0] = a[1]; + trgLS2[0] = b[0]; trgUS2[0] = b[1]; } else { - trgLS1[0] = a[9]; trgUS1[0] = a[8]; - trgLS2[0] = b[9]; trgUS2[0] = b[8]; + //trgLS1[0] = a[5]; trgUS1[0] = a[4]; + //trgLS2[0] = b[5]; trgUS2[0] = b[4]; + trgLS1[0] = a[4]; trgUS1[0] = a[5]; + trgLS2[0] = b[4]; trgUS2[0] = b[5]; } } @@ -151,20 +179,23 @@ UShort_t AliMUONRegionalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres, TBits v(4); - v[0] = trgUS[0]; - v[1] = trgLS[0]; + //v[0] = trgUS[0]; + //v[1] = trgLS[0]; + v[0] = trgLS[0]; + v[1] = trgUS[0]; v[2] = trg[0]; v[3] = trg[1]; - UShort_t rv = 0; v.Get(&rv); - return rv; } + //___________________________________________ -void AliMUONRegionalTriggerBoard::Scan(Option_t*) +void AliMUONRegionalTriggerBoard::Scan(Option_t*) const { - for (Int_t i=0; i<16; i++) +/// scan local board entries + + for (Int_t i=0; i<16; i++) { TBits b; b.Set(6,&fLocalResponse[i]); @@ -174,18 +205,32 @@ void AliMUONRegionalTriggerBoard::Scan(Option_t*) } } +//___________________________________________ +void AliMUONRegionalTriggerBoard::Mask(UShort_t mask) +{ +/// mask entry index + + fMask = mask; +} //___________________________________________ -void AliMUONRegionalTriggerBoard::Mask(Int_t index, UShort_t mask) +Bool_t AliMUONRegionalTriggerBoard::IsNull() { - if ( index>=0 && index < 16 ) - { - fMask[index]=mask; - } - else - { - AliError(Form("Index %d out of bounds (max %d)",index,16)); + /// Check if all local response are null + for (Int_t i=0; i<16; i++) { + if ( fLocalResponse[i] ) return kFALSE; } + return kTRUE; } -ClassImp(AliMUONRegionalTriggerBoard) + +//___________________________________________ +void AliMUONRegionalTriggerBoard::Reset() +{ + /// Reset board + + for (Int_t i=0; i<16; ++i) fLocalResponse[i] = 0; + + fResponse = 0; + +}