- Adding alternate versions of methods for handling regional structures and
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 26 Jun 2008 13:15:23 +0000 (13:15 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 26 Jun 2008 13:15:23 +0000 (13:15 +0000)
  local structures. The new versions indicate which regional or local structure
  number is being processed.
- Fixing the decoding of regional header bits.
(Artur)

MUON/AliMUONTriggerDDLDecoder.h
MUON/AliMUONTriggerDDLDecoderEventHandler.h

index 55697bc..2e05505 100644 (file)
@@ -635,10 +635,14 @@ void AliMUONTriggerDDLDecoder<EventHandler>::DecodeRegionalStructs(
                
                // Tell the handler that we have a new regional block and decode it.
                // When done, tell the handler again.
+               // We call both versions of OnNewRegionalStruct so that user event
+               // handlers can implement the one they prefer to use.
                const UChar_t* startOfLocals = current;
                fHandler.OnNewRegionalStruct(regionalHeader, regionalScalars, startOfLocals);
+               fHandler.OnNewRegionalStructV2(iReg, regionalHeader, regionalScalars, startOfLocals);
                current = DecodeLocalStructs(current, end, scalarEvent);
                fHandler.OnEndOfRegionalStruct(regionalHeader, regionalScalars, startOfLocals);
+               fHandler.OnEndOfRegionalStructV2(iReg, regionalHeader, regionalScalars, startOfLocals);
        }
        
        // Now just check that there is no extra rubbish at the end of the DDL.
@@ -785,7 +789,10 @@ const UChar_t* AliMUONTriggerDDLDecoder<EventHandler>::DecodeLocalStructs(
                        }
                }
                
+               // Call both handlers for local structures so that the user decoder event
+               // handler class can implement the one it prefers to use.
                fHandler.OnLocalStruct(localStruct, localScalars);
+               fHandler.OnLocalStructV2(iLocal, localStruct, localScalars);
        }
        
        return current;
index 794220b..9a089a1 100644 (file)
@@ -242,6 +242,28 @@ public:
        {
        }
        
+       /// The OnNewRegionalStructV2 method will be called for each regional header
+       /// found in the DDL payload.
+       /// The default behaviour of this method is to do nothing.
+       /// This method is an alternate version to OnNewRegionalStruct and an
+       /// inheriting class needs only implement one or the other version.
+       /// - param UInt_t  The structure index number of the regional structure.
+       /// - param const AliMUONRegionalHeaderStruct*  A pointer to the regional
+       ///       structure header.
+       /// - param const AliMUONRegionalScalarsStruct*  The regional scalars found
+       ///       in the raw data. If there are no scalars in the data then this
+       ///       pointer is set to NULL.
+       /// - param const void*  A pointer to the start of the local trigger
+       ///       structures data for this regional block.
+       void OnNewRegionalStructV2(
+                       UInt_t /*num*/,
+                       const AliMUONRegionalHeaderStruct* /*regionalStruct*/,
+                       const AliMUONRegionalScalarsStruct* /*scalars*/,
+                       const void* /*data*/
+               )
+       {
+       }
+       
        /// The OnEndOfRegionalStruct method will be called whenever a regional
        /// structure has been processed. For each OnNewRegionalStruct method
        /// call a symmetric call to OnEndOfRegionalStruct is made after processing
@@ -262,6 +284,30 @@ public:
        {
        }
        
+       /// The OnEndOfRegionalStructV2 method will be called whenever a regional
+       /// structure has been processed. For each OnNewRegionalStruct method
+       /// call a symmetric call to OnEndOfRegionalStruct is made after processing
+       /// of the regional structure is done (after the last call to OnLocalStruct
+       /// for that regional structure).
+       /// This method is an alternate version to OnEndOfRegionalStruct and an
+       /// inheriting class needs only implement one or the other version.
+       /// - param UInt_t  The structure index number of the regional structure.
+       /// - param const AliMUONRegionalHeaderStruct*  A pointer to the regional
+       ///       structure header.
+       /// - param const AliMUONRegionalScalarsStruct*  The regional scalars found
+       ///       in the raw data. If there are no scalars in the data then this
+       ///       pointer is set to NULL.
+       /// - param const void*  A pointer to the start of the local trigger
+       ///       structures data for this regional block.
+       void OnEndOfRegionalStructV2(
+                       UInt_t /*num*/,
+                       const AliMUONRegionalHeaderStruct* /*regionalStruct*/,
+                       const AliMUONRegionalScalarsStruct* /*scalars*/,
+                       const void* /*data*/
+               )
+       {
+       }
+       
        /// The OnLocalStruct method will be called for each local trigger
        /// structure found in the DDL payload. The user must overload this
        /// method to process the local structures as needed.
@@ -278,6 +324,26 @@ public:
        {
        }
        
+       /// The OnLocalStructV2 method will be called for each local trigger
+       /// structure found in the DDL payload. The user must overload this
+       /// method to process the local structures as needed.
+       /// The default behaviour of this method is to do nothing.
+       /// This method is an alternate version to OnLocalStruct and an
+       /// inheriting class needs only implement one or the other version.
+       /// - param UInt_t  The structure index number of the local structure.
+       /// - param const AliMUONRegionalHeaderStruct*  A pointer to the local
+       ///       trigger structure found.
+       /// - param const AliMUONRegionalScalarsStruct*  The local scalars found
+       ///       in the raw data. If there are no scalars in the data then this
+       ///       pointer is set to NULL.
+       void OnLocalStructV2(
+                       UInt_t /*num*/,
+                       const AliMUONLocalInfoStruct* /*localStruct*/,
+                       const AliMUONLocalScalarsStruct* /*scalars*/
+               )
+       {
+       }
+       
        // The following static methods are helper routines for decoding the
        // DARC header bits.
        
@@ -345,7 +411,7 @@ public:
        static UChar_t GetRegionalResetNb(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (UChar_t)(header->fWord >> 25) &  0x20;
+               return (UChar_t)(header->fWord >> 25) &  0x3F;
        }
        
        /// Return SerialNb
@@ -380,70 +446,70 @@ public:
        static UShort_t GetRegionalErrorBits(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (UShort_t)(header->fDarcWord >> 21) &  0x3FF;
+               return (UShort_t)(header->fDarcWord >> 22) &  0x3FF;
        }
        
        /// Return FPGANumber
        static UChar_t GetRegionalFPGANumber(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (UChar_t)  (header->fDarcWord >> 18) &  0x7;
+               return (UChar_t)  (header->fDarcWord >> 19) &  0x7;
        }
        
        /// Return DarcPhysFlag
        static bool GetRegionalDarcPhysFlag(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x1000) != 0;
+               return (header->fDarcWord  &  0x8000) != 0;
        }
        
        /// Return PresentFlag
        static bool GetRegionalPresentFlag(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x800) != 0;
+               return (header->fDarcWord  &  0x4000) != 0;
        }
        
        /// Return RamNotFullFlag
        static bool GetRegionalRamNotFullFlag(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x400) != 0;
+               return (header->fDarcWord  &  0x2000) != 0;
        }
        
        /// Return RamNotEmptyFlag
        static bool GetRegionalRamNotEmptyFlag(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x200) != 0;
+               return (header->fDarcWord  &  0x1000) != 0;
        }
        
        /// Return L2RejStatus
        static bool GetRegionalL2RejStatus(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x100) != 0;
+               return (header->fDarcWord  &  0x800) != 0;
        }
        
        /// Return L2AccStatus
        static bool GetRegionalL2AccStatus(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x80) != 0;
+               return (header->fDarcWord  &  0x400) != 0;
        }
        
        /// Return L1Status
        static bool GetRegionalL1Status(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x40) != 0;
+               return (header->fDarcWord  &  0x200) != 0;
        }
        
        /// Return L0Status
        static bool GetRegionalL0Status(const AliMUONRegionalHeaderStruct* header)
        {
                assert( header != NULL );
-               return (header->fDarcWord  &  0x20) != 0;
+               return (header->fDarcWord  &  0x100) != 0;
        }
        
        /// Return EventInRam