From c05673c991f1897ec6e0dc86c16cdf097cab2177 Mon Sep 17 00:00:00 2001 From: ivana Date: Fri, 16 Nov 2007 18:36:38 +0000 Subject: [PATCH] - Changed the mask format accordingly to real life - Added/changed comments (Christian) --- MUON/AliMUONCDB.cxx | 22 ++++++------ MUON/AliMUONGlobalTriggerBoard.cxx | 35 ++++++++++++------- MUON/AliMUONGlobalTriggerBoard.h | 7 ++-- MUON/AliMUONRegionalTriggerBoard.cxx | 51 +++++++++++++++------------- MUON/AliMUONRegionalTriggerBoard.h | 6 ++-- MUON/AliMUONTriggerBoard.h | 3 -- MUON/AliMUONTriggerElectronics.cxx | 10 +++--- 7 files changed, 75 insertions(+), 59 deletions(-) diff --git a/MUON/AliMUONCDB.cxx b/MUON/AliMUONCDB.cxx index 149a73df39b..d14074f32ea 100644 --- a/MUON/AliMUONCDB.cxx +++ b/MUON/AliMUONCDB.cxx @@ -74,6 +74,7 @@ #include #include + /// \cond CLASSIMP ClassImp(AliMUONCDB) /// \endcond @@ -695,19 +696,18 @@ AliMUONCDB::MakeLocalTriggerMaskStore(AliMUONVStore& localBoardMasks) const Int_t AliMUONCDB::MakeRegionalTriggerMaskStore(AliMUONVStore& rtm) const { - /// Make a regional trigger masks store. All masks are set to 3F + /// Make a regional trigger masks store. Mask is set to FFFF for each local board (Ch.F.) AliCodeTimerAuto(""); Int_t ngenerated(0); for ( Int_t i = 0; i < 16; ++i ) { - AliMUONVCalibParam* regionalBoard = new AliMUONCalibParamNI(1,16,i,0,0); - for ( Int_t j = 0; j < 16; ++j ) - { - regionalBoard->SetValueAsInt(j,0,0x3F); - ++ngenerated; - } + AliMUONVCalibParam* regionalBoard = new AliMUONCalibParamNI(1,1,i,0,0); + + regionalBoard->SetValueAsInt(0,0,0xFFFF); + ++ngenerated; + rtm.Add(regionalBoard); } @@ -718,15 +718,15 @@ AliMUONCDB::MakeRegionalTriggerMaskStore(AliMUONVStore& rtm) const Int_t AliMUONCDB::MakeGlobalTriggerMaskStore(AliMUONVCalibParam& gtm) const { - /// Make a global trigger masks store. All masks set to FFF + /// Make a global trigger masks store. All masks (disable) set to 0x00 for each Darc board (Ch.F.) AliCodeTimerAuto(""); Int_t ngenerated(0); - for ( Int_t j = 0; j < 16; ++j ) + for ( Int_t j = 0; j < 2; ++j ) { - gtm.SetValueAsInt(j,0,0xFFF); + gtm.SetValueAsInt(j,0,0x00); ++ngenerated; } return ngenerated; @@ -920,7 +920,7 @@ AliMUONCDB::WriteGlobalTriggerMasks(Int_t startRun, Int_t endRun) { /// Write global trigger masks to OCDB - AliMUONVCalibParam* gtm = new AliMUONCalibParamNI(1,16,1,0,0); + AliMUONVCalibParam* gtm = new AliMUONCalibParamNI(1,2,1,0,0); Int_t ngenerated = MakeGlobalTriggerMaskStore(*gtm); AliInfo(Form("Ngenerated = %d",ngenerated)); diff --git a/MUON/AliMUONGlobalTriggerBoard.cxx b/MUON/AliMUONGlobalTriggerBoard.cxx index 0882d83ab04..61e0f4a7f33 100644 --- a/MUON/AliMUONGlobalTriggerBoard.cxx +++ b/MUON/AliMUONGlobalTriggerBoard.cxx @@ -21,9 +21,9 @@ /// - inputs are regional responses /// - output is a 12-bit word /// - 4 bits per trigger level -/// \todo Change member functions comments in capital letters to normal text /// -/// \author Rachid Guernane (LPCCFd) +/// \author Rachid Guernane (LPCCFd), +/// Corrected by Christian Finck (Subatech) //----------------------------------------------------------------------------- #include "AliMUONGlobalTriggerBoard.h" @@ -32,10 +32,12 @@ #include +/// \cond CLASSIMP ClassImp(AliMUONGlobalTriggerBoard) +/// \endcond //___________________________________________ -AliMUONGlobalTriggerBoard::AliMUONGlobalTriggerBoard() +AliMUONGlobalTriggerBoard::AliMUONGlobalTriggerBoard(): AliMUONTriggerBoard() { /// Default constructor @@ -59,30 +61,40 @@ AliMUONGlobalTriggerBoard::~AliMUONGlobalTriggerBoard() //___________________________________________ void AliMUONGlobalTriggerBoard::Mask(Int_t index, UShort_t mask) { - /// MASK GLOBAL TRIGGER BOARD INPUT index WITH VALUE mask - if ( index>=0 && index < 16 ) + /// mask global trigger board input index with value mask + if ( index>=0 && index < 2 ) { fMask[index]=mask; } else { - AliError(Form("Index %d out of bounds (max %d)",index,16)); + AliError(Form("Index %d out of bounds (max %d)",index,2)); } } //___________________________________________ void AliMUONGlobalTriggerBoard::Response() { - /// COMPUTE THE GLOBAL TRIGGER BOARD - /// RESPONSE ACCORDING TO THE Algo() METHOD + /// compute the global trigger board + /// response according to the algo() method // output from global trigger algorithm // [+, -, LS, US] * [Hpt, Lpt] // transformed to [usHpt, usLpt, lsHpt, lsLpt, sHpt, sLpt] according // to Global Trigger Unit user manual Int_t t[16]; - for (Int_t i=0;i<16;i++) t[i] = fRegionalResponse[i] & fMask[i]; + for (Int_t i = 0; i < 16; ++i) + { + Int_t index = i/8; + Int_t shift = i % 8; + UShort_t enable = !((fMask[index] >> shift) & 0x1); + if (enable) + t[i] = fRegionalResponse[i]; + else + t[i] = 0; + } + Int_t rank = 8; for (Int_t i=0;i<4;i++) @@ -122,7 +134,7 @@ void AliMUONGlobalTriggerBoard::Response() //___________________________________________ UShort_t AliMUONGlobalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres) { - /// GLOBAL TRIGGER ALGORITHM + /// global trigger algorithm TBits a(8), b(8); a.Set(8,&i); b.Set(8,&j); TBits trg1(2), trg2(2), trg(2); @@ -173,7 +185,7 @@ UShort_t AliMUONGlobalTriggerBoard::Algo(UShort_t i, UShort_t j, char *thres) //___________________________________________ void AliMUONGlobalTriggerBoard::Scan(Option_t*) const { - /// PRINT GLOBAL TRIGGER OUTPUT + /// print global trigger output TBits w(8); w.Set(8,&fResponse); // TRG[1:0] @@ -230,4 +242,3 @@ void AliMUONGlobalTriggerBoard::Scan(Option_t*) const printf("\n"); } -ClassImp(AliMUONGlobalTriggerBoard) diff --git a/MUON/AliMUONGlobalTriggerBoard.h b/MUON/AliMUONGlobalTriggerBoard.h index f2ce4fb1a19..28ba145ba7a 100644 --- a/MUON/AliMUONGlobalTriggerBoard.h +++ b/MUON/AliMUONGlobalTriggerBoard.h @@ -26,22 +26,25 @@ class AliMUONGlobalTriggerBoard : public AliMUONTriggerBoard virtual void Response(); + /// response of the algorithm virtual UShort_t Algo(UShort_t i, UShort_t j, char *thres); /// Reset regional board responses virtual void Reset() {for (Int_t i=0; i<16; i++) fRegionalResponse[i] = 0;} + /// scan response of regional boards virtual void Scan(Option_t *option) const; /// \todo add comment virtual void Resp(Option_t*) const {} + /// Set mask (disable) for regional boards void Mask(Int_t index, UShort_t mask); private: - UShort_t fRegionalResponse[16]; ///< REGIONAL BOARD RESPONSES - UShort_t fMask[16]; ///< MASK + UShort_t fRegionalResponse[16]; ///< Regional board responses + UShort_t fMask[2]; ///< Mask ClassDef(AliMUONGlobalTriggerBoard,1) //Global trigger board }; diff --git a/MUON/AliMUONRegionalTriggerBoard.cxx b/MUON/AliMUONRegionalTriggerBoard.cxx index 556eb9350c8..c19cf1c6ec6 100644 --- a/MUON/AliMUONRegionalTriggerBoard.cxx +++ b/MUON/AliMUONRegionalTriggerBoard.cxx @@ -21,9 +21,9 @@ /// - entry are local board responses /// - output is 12-bit word /// - algorithm is similar to the global one -/// \todo Change member functions comments in capital letters to normal text /// /// \author Rachid Guernane (LPCCFd) +/// Corrected by Christian Finck (Subatech) //----------------------------------------------------------------------------- #include "AliMUONRegionalTriggerBoard.h" @@ -40,13 +40,17 @@ ClassImp(AliMUONRegionalTriggerBoard) //___________________________________________ 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; @@ -61,19 +65,25 @@ AliMUONRegionalTriggerBoard::~AliMUONRegionalTriggerBoard() //___________________________________________ void AliMUONRegionalTriggerBoard::Response() { -/// RESPONSE IS GIVEN FOLLOWING THE REGIONAL ALGORITHM +/// response is given following the regional algorithm Int_t t[16]; - for (Int_t i=0;i<16;i++) t[i] = fLocalResponse[i] & fMask[i]; - + 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 && index < 16 ) - { - fMask[index]=mask; - } - else - { - AliError(Form("Index %d out of bounds (max %d)",index,16)); - } +/// mask entry index + + fMask = mask; } + + + diff --git a/MUON/AliMUONRegionalTriggerBoard.h b/MUON/AliMUONRegionalTriggerBoard.h index 8a18555cee7..67761cc7de3 100644 --- a/MUON/AliMUONRegionalTriggerBoard.h +++ b/MUON/AliMUONRegionalTriggerBoard.h @@ -33,13 +33,15 @@ class AliMUONRegionalTriggerBoard : public AliMUONTriggerBoard /// Set Local trigger inputs virtual void SetLocalResponse(UShort_t val[16]) {for (Int_t i=0;i<16;i++) fLocalResponse[i] = val[i];} + /// response of the algorithm virtual UShort_t Algo(UShort_t i, UShort_t j, char *thres, Int_t level); - void Mask(Int_t index, UShort_t mask); + /// set local boards enable + void Mask(UShort_t mask); private: UShort_t fLocalResponse[16]; ///< Local trigger inputs - UShort_t fMask[16]; ///< Entry mask + UShort_t fMask; ///< Entry mask ClassDef(AliMUONRegionalTriggerBoard,1) // Regional trigger - real HW algorithm is implemented }; diff --git a/MUON/AliMUONTriggerBoard.h b/MUON/AliMUONTriggerBoard.h index 3077d05089d..017da71998b 100644 --- a/MUON/AliMUONTriggerBoard.h +++ b/MUON/AliMUONTriggerBoard.h @@ -35,9 +35,6 @@ class AliMUONTriggerBoard : public TNamed /// Return response virtual UShort_t GetResponse() const {return fResponse;} - /// \todo add comment - virtual void Mask(Int_t index, UShort_t mask) = 0; - protected: Int_t fSlot; ///< SLOT NUMBER IN CRATE diff --git a/MUON/AliMUONTriggerElectronics.cxx b/MUON/AliMUONTriggerElectronics.cxx index c7c3909560a..518a8dcb3ec 100644 --- a/MUON/AliMUONTriggerElectronics.cxx +++ b/MUON/AliMUONTriggerElectronics.cxx @@ -451,11 +451,9 @@ void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData) AliMUONVCalibParam* regionalBoardMasks = calibData->RegionalTriggerBoardMasks(irb); - for ( Int_t i = 0; i < regionalBoardMasks->Size(); ++i ) - { - UShort_t rmask = static_cast(regionalBoardMasks->ValueAsInt(i) & 0x3F); - regb->Mask(i,rmask); - } + UShort_t rmask = static_cast(regionalBoardMasks->ValueAsInt(0) & 0xFFFF); + + regb->Mask(rmask); for (Int_t j = 1; j < boards->GetEntries(); j++) { @@ -479,7 +477,7 @@ void AliMUONTriggerElectronics::LoadMasks(AliMUONCalibrationData* calibData) AliMUONVCalibParam* globalBoardMasks = calibData->GlobalTriggerBoardMasks(); for ( Int_t i = 0; i < globalBoardMasks->Size(); ++i ) { - UShort_t gmask = static_cast(globalBoardMasks->ValueAsInt(i) & 0xFFF); + UShort_t gmask = static_cast(globalBoardMasks->ValueAsInt(i) & 0xFF); fGlobalTriggerBoard->Mask(i,gmask); } } -- 2.43.0