]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRawStreamTriggerHP.h
More sharing diagnostics
[u/mrichter/AliRoot.git] / MUON / AliMUONRawStreamTriggerHP.h
index 6b0aa2088e33c174775d9a53784a2c93fc7d74a6..31857550f256b272f41f2159fbeac32ec01c71c5 100644 (file)
@@ -71,7 +71,7 @@ public:
        /// Sets the maximum number of local cards in the DDL.
        virtual void SetMaxLoc(Int_t loc);
        
-       /// Return number of the current DDL being handled.
+       /// Return number of the current DDL being handled in the range [0..1] and -1 if no DDL set.
        virtual Int_t GetDDL() const { return fDDL - 1; }
        
        /// check error/Warning presence
@@ -82,18 +82,42 @@ public:
        /// Set warnings flag to enable warnings on data errors.
        virtual void EnableWarnings() { fDecoder.GetHandler().Warnings(kTRUE); }
        
-       /// Get number of end of DARC word errors.
+       /// Get number of end of DARC word errors in the DDL last decoded.
        UInt_t GetDarcEoWErrors() const {return fDecoder.GetHandler().GetDarcEoWErrors();}
        
-       /// Get number of end of Global word errors.
+       /// Get number of end of Global word errors in the DDL last decoded.
        UInt_t GetGlobalEoWErrors() const {return fDecoder.GetHandler().GetGlobalEoWErrors();}
        
-       /// Get number of end of regional word errors.
+       /// Get number of end of regional word errors in the DDL last decoded.
        UInt_t GetRegEoWErrors() const {return fDecoder.GetHandler().GetRegEoWErrors();}
        
-       /// Get number of end of local word errors.
+       /// Get number of end of local word errors in the DDL last decoded.
        UInt_t GetLocalEoWErrors() const {return fDecoder.GetHandler().GetLocalEoWErrors();}
        
+       /// Number of end of DARC word errors since First() was called.
+       UInt_t NumberOfDarcEoWErrors() const { return fTotalNumberOfDarcEoWErrors; }
+       
+       /// Number of end of global word errors since First() was called.
+       UInt_t NumberOfGlobalEoWErrors() const { return fTotalNumberOfGlobalEoWErrors; }
+       
+       /// Number of end of regional word errors since First() was called.
+       UInt_t NumberOfRegEoWErrors() const { return fTotalNumberOfRegEoWErrors; }
+       
+       /// Number of end of local word errors since First() was called.
+       UInt_t NumberOfLocalEoWErrors() const { return fTotalNumberOfLocalEoWErrors; }
+       
+       /// Whether we got any end of DARC word errors or not since calling First().
+       Bool_t HasDarcEoWError() const { return NumberOfDarcEoWErrors() > 0; }
+       
+       /// Whether we got any end of global word errors or not since calling First().
+       Bool_t HasGlobalEoWError() const { return NumberOfGlobalEoWErrors() > 0; }
+       
+       /// Whether we got any end of regional word errors or not since calling First().
+       Bool_t HasRegEoWError() const { return NumberOfRegEoWErrors() > 0; }
+       
+       /// Whether we got any end of local word errors or not since calling First().
+       Bool_t HasLocalEoWError() const { return NumberOfLocalEoWErrors() > 0; }
+       
        /// Returns the "try to recover from errors" flag.
        Bool_t TryRecover() const { return Bool_t(fDecoder.TryRecover()); }
        
@@ -365,14 +389,16 @@ public:
                                const AliMUONLocalScalarsStruct* scalars = NULL
                        ) :
                        fRegional(regionalHeader), fNext(NULL),
-                       fLocalStruct(localStruct), fScalars(scalars)
+                       fLocalStruct(localStruct), fScalars(scalars),
+                       fCalculatedId(0)
                {
                }
                
                /// Implement shallow copying in the copy constructor.
                AliLocalStruct(const AliLocalStruct& o) :
                        fRegional(o.fRegional), fNext(o.fNext),
-                       fLocalStruct(o.fLocalStruct), fScalars(o.fScalars)
+                       fLocalStruct(o.fLocalStruct), fScalars(o.fScalars),
+                       fCalculatedId(o.fCalculatedId)
                {
                }
                
@@ -426,7 +452,7 @@ public:
                }
        
                /// Return Id
-               UChar_t GetId() const {return AliMUONTriggerDDLDecoderEventHandler::GetLocalId(fLocalStruct);}
+               UChar_t GetId() const {return fgOverrideId ? fCalculatedId : AliMUONTriggerDDLDecoderEventHandler::GetLocalId(fLocalStruct);}
                /// Return Dec
                UChar_t GetDec() const {return AliMUONTriggerDDLDecoderEventHandler::GetLocalDec(fLocalStruct);}
                /// Return TrigY
@@ -513,9 +539,18 @@ public:
                
                /// Sets the next local trigger structure.
                void SetNext(const AliLocalStruct* next) { fNext = next; }
+       
+               /// Sets the calculated ID value to be returned by GetId if fgOverrideId is true.
+               void SetCalculatedId(UChar_t id) { fCalculatedId = id; }
                
                /// Print the contents of the local trigger structure and contents to screen.
                void Print() const;
+               
+               /// Returns the override flag indicating if the GetId method should return the calculated Id value or not.
+               static bool GetOverrideIdFlag() { return fgOverrideId; }
+               
+               /// Sets the override flag to control what value the GetId method returns.
+               static void SetOverrideIdFlag(bool value) { fgOverrideId = value; }
        
        private:
        
@@ -523,6 +558,8 @@ public:
                const AliLocalStruct* fNext;  ///< Next local structure object in the regional structure.
                const AliMUONLocalInfoStruct* fLocalStruct;  ///< Pointer to the local trigger structure data in the DDL payload.
                const AliMUONLocalScalarsStruct* fScalars;  ///< Pointer to the local trigger scalars data in the DDL payload.
+               UChar_t fCalculatedId;  ///< Calculated ID value returned by GetId() if fgOverrideId == true.
+               static bool fgOverrideId; //!< Flag indicating if we should return a calculated number in the GetId method.
        };
        
        /// Returns the DARC and global headers plus scalars if they exist.
@@ -675,8 +712,9 @@ private:
                                           const void* data);
                
                /// Handler for new local card structures.
-               void OnLocalStruct(const AliMUONLocalInfoStruct* localStruct,
-                                  const AliMUONLocalScalarsStruct* scalars);
+               void OnLocalStructV2(UInt_t iLoc,
+                                    const AliMUONLocalInfoStruct* localStruct,
+                                    const AliMUONLocalScalarsStruct* scalars);
                
                /// Error handler.
                void OnError(ErrorCode error, const void* location);
@@ -717,6 +755,10 @@ private:
        Bool_t fHadError;   //!< Flag indicating if there was a decoding error or not.
        Bool_t fDone;       //!< Flag indicating if the iteration is done or not.
        mutable AliMUONDDLTrigger* fDDLObject; //!< Temporary DDL object used by GetDDLTrigger() for caching.
+       UInt_t fTotalNumberOfDarcEoWErrors; //!< The total number of end of DARC word errors since the last call to First().
+       UInt_t fTotalNumberOfGlobalEoWErrors; //!< The total number of end of global word errors since the last call to First().
+       UInt_t fTotalNumberOfRegEoWErrors; //!< The total number of end of regional word errors since the last call to First().
+       UInt_t fTotalNumberOfLocalEoWErrors; //!< The total number of end of local word errors since the last call to First().
        
        static const Int_t  fgkMaxDDL;     //!< Maximum number of DDLs
        
@@ -763,7 +805,8 @@ inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnNewRegionalStru
 }
 
 
-inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnLocalStruct(
+inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnLocalStructV2(
+               UInt_t iLoc,
                const AliMUONLocalInfoStruct* localStruct,
                const AliMUONLocalScalarsStruct* scalars
        )
@@ -787,6 +830,7 @@ inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnLocalStruct(
        
        fCurrentLocal++;
        *fCurrentLocal = AliLocalStruct(fCurrentRegional, localStruct, scalars);
+       fCurrentLocal->SetCalculatedId(iLoc);
        fCurrentRegional->IncLocalStructCount();
 }