]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRawStreamTriggerHP.h
Adding MUONChamberMaterialBudget.C:
[u/mrichter/AliRoot.git] / MUON / AliMUONRawStreamTriggerHP.h
index 0ea377215855c54749a55e359579cb96f5c0f41b..123244e46a580012071dfbc1f718c6061c361638 100644 (file)
@@ -60,13 +60,10 @@ public:
        virtual Int_t GetMaxDDL() const { return fgkMaxDDL; }
        
        /// Return maximum number of regional cards in the DDL.
-       virtual Int_t GetMaxReg() const { return (Int_t) fDecoder.RegionalsDecoded(); }
+       virtual Int_t GetMaxReg() const { return (Int_t) fDecoder.MaxRegionals(); }
        
-       /// Return maximum allowed number of regional cards in the DDL.
-       virtual Int_t GetMaxRegAllowed() const { return (Int_t) fDecoder.MaxRegionals(); }
-       
-       /// Set the maximum allowed number of regional cards in the DDL.
-       virtual void SetMaxRegAllowed(Int_t reg);
+       /// Set the maximum number of regional cards in the DDL.
+       virtual void SetMaxReg(Int_t reg);
        
        /// Return maximum number of local cards in the DDL.
        virtual Int_t GetMaxLoc() const { return (Int_t) fDecoder.MaxLocals(); }
@@ -141,7 +138,7 @@ public:
                /// Return first word
                UInt_t   GetWord()               const {return GetDarcHeader();}
                /// Return global input
-               Int_t    GetGlobalInput(Int_t n) const {return fGlobalHeader->fInput[n];}
+               UInt_t   GetGlobalInput(Int_t n) const {return fGlobalHeader->fInput[n];}
                /// Return global output
                UChar_t  GetGlobalOutput() const {return AliMUONTriggerDDLDecoderEventHandler::GetGlobalOutput(fGlobalHeader);}
                /// Return global config
@@ -368,14 +365,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)
                {
                }
                
@@ -429,7 +428,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
@@ -516,9 +515,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:
        
@@ -526,6 +534,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.
@@ -672,13 +682,15 @@ private:
                }
                
                /// Handler for new regional card structures.
-               void OnNewRegionalStruct(const AliMUONRegionalHeaderStruct* header,
-                                        const AliMUONRegionalScalarsStruct* scalars,
-                                        const void* data);
+               void OnNewRegionalStructV2(UInt_t iReg,
+                                          const AliMUONRegionalHeaderStruct* header,
+                                          const AliMUONRegionalScalarsStruct* scalars,
+                                          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);
@@ -707,6 +719,8 @@ private:
                UInt_t fRegEoWErrors;     //!< Number of end of regional word errors.
                UInt_t fLocalEoWErrors;   //!< Number of end of local word errors.
                Bool_t fWarnings;       //!< Flag indicating if we should generate a warning for errors.
+               
+               static const AliMUONRegionalHeaderStruct fgkEmptyHeader;  //!< Empty header for skipped regional structures.
        };
        
        AliMUONTriggerDDLDecoder<AliDecoderEventHandler> fDecoder;  //!< The decoder for the DDL payload.
@@ -738,7 +752,8 @@ inline const AliMUONRawStreamTriggerHP::AliLocalStruct* AliMUONRawStreamTriggerH
 }
 
 
-inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnNewRegionalStruct(
+inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnNewRegionalStructV2(
+               UInt_t iReg,
                const AliMUONRegionalHeaderStruct* header,
                const AliMUONRegionalScalarsStruct* scalars,
                const void* /*data*/
@@ -749,22 +764,21 @@ inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnNewRegionalStru
        /// the appropriate counters.
        
        assert( header != NULL );
-       assert( fCurrentRegional != NULL );
-       assert( fRegionalsCount < (UInt_t)fRawStream->GetMaxReg() );
+       assert( iReg < fRegionalsCount );
+       
+       fCurrentRegional = fRegionals+iReg;
+       *fCurrentRegional = AliRegionalHeader(fCurrentLocal+1, header, scalars);
        
-       // Link the previous regional structure unless it is the first one.
-       if (fRegionalsCount > 0)
+       // Link to the next regional structure unless this is the last one.
+       if (iReg+1 < fRegionalsCount)
        {
                fCurrentRegional->SetNext(fCurrentRegional+1);
        }
-       
-       fCurrentRegional++;
-       *fCurrentRegional = AliRegionalHeader(fCurrentLocal+1, header, scalars);
-       fRegionalsCount++;
 }
 
 
-inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnLocalStruct(
+inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnLocalStructV2(
+               UInt_t iLoc,
                const AliMUONLocalInfoStruct* localStruct,
                const AliMUONLocalScalarsStruct* scalars
        )
@@ -788,6 +802,7 @@ inline void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnLocalStruct(
        
        fCurrentLocal++;
        *fCurrentLocal = AliLocalStruct(fCurrentRegional, localStruct, scalars);
+       fCurrentLocal->SetCalculatedId(iLoc);
        fCurrentRegional->IncLocalStructCount();
 }