LCOV - code coverage report
Current view: top level - HLT/MUON - AliHLTMUONUtils.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 103 1.0 %
Date: 2016-06-14 17:26:59 Functions: 1 46 2.2 %

          Line data    Source code
       1             : #ifndef ALIHLTMUONUTILS_H
       2             : #define ALIHLTMUONUTILS_H
       3             : /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
       4             :  * See cxx source for full Copyright notice                               */
       5             : 
       6             : // $Id$
       7             : 
       8             : ///
       9             : /// @file   AliHLTMUONUtils.h
      10             : /// @author Artur Szostak <artursz@iafrica.com>
      11             : /// @date   17 May 2007
      12             : /// @brief  Class containing various dimuon HLT utility routines and macros.
      13             : ///
      14             : 
      15             : #include "TObject.h"
      16             : #include "AliHLTMUONDataTypes.h"
      17             : #include <ostream>
      18             : 
      19             : // Forward declare structures.
      20             : extern "C" {
      21             : struct AliHLTMUONTriggerRecordStruct;
      22             : struct AliHLTMUONTriggerRecordsBlockStruct;
      23             : struct AliHLTMUONTrigRecInfoStruct;
      24             : struct AliHLTMUONTrigRecsDebugBlockStruct;
      25             : struct AliHLTMUONRecHitStruct;
      26             : struct AliHLTMUONRecHitsBlockStruct;
      27             : struct AliHLTMUONClusterStruct;
      28             : struct AliHLTMUONClustersBlockStruct;
      29             : struct AliHLTMUONChannelStruct;
      30             : struct AliHLTMUONChannelsBlockStruct;
      31             : struct AliHLTMUONMansoTrackStruct;
      32             : struct AliHLTMUONMansoTracksBlockStruct;
      33             : struct AliHLTMUONMansoCandidateStruct;
      34             : struct AliHLTMUONMansoCandidatesBlockStruct;
      35             : struct AliHLTMUONTrackStruct;
      36             : struct AliHLTMUONTracksBlockStruct;
      37             : struct AliHLTMUONTrackDecisionStruct;
      38             : struct AliHLTMUONSinglesDecisionBlockStruct;
      39             : struct AliHLTMUONPairDecisionStruct;
      40             : struct AliHLTMUONPairsDecisionBlockStruct;
      41             : } // extern "C"
      42             : 
      43             : /**
      44             :  * AliHLTMUONUtils contains arbitrary utility methods to be used in various
      45             :  * parts of the dimuon HLT system.
      46             :  * These include methods to perform basic sanity checks on the integrity of
      47             :  * data blocks.
      48             :  */
      49             : class AliHLTMUONUtils
      50             : {
      51             : public:
      52             :         /**
      53             :          * This packs the given parameters into the bits of a word appropriate
      54             :          * for AliHLTMUONTriggerRecordStruct::fFlags.
      55             :          * @param sign    The particle sign.
      56             :          * @param hitset  Flags to indicate if the corresponding fHits[i] elements
      57             :          *                was set/filled.
      58             :          * @return  Returns the 32 bit packed word.
      59             :          */
      60             :         static AliHLTUInt32_t PackTriggerRecordFlags(
      61             :                         AliHLTMUONParticleSign sign, const bool hitset[4]
      62             :                 );
      63             : 
      64             :         /**
      65             :          * This unpacks the AliHLTMUONTriggerRecordStruct::fFlags bits into
      66             :          * its component fields.
      67             :          * @param [in]  flags  The flags from an AliHLTMUONTriggerRecordStruct structure.
      68             :          * @param [out] sign    Sets this to the particle sign.
      69             :          * @param [out] hitset  Sets the array elements to indicate if the corresponding
      70             :          *                fHits[i] element was set/filled.
      71             :          */
      72             :         static void UnpackTriggerRecordFlags(
      73             :                         AliHLTUInt32_t flags, // [in]
      74             :                         AliHLTMUONParticleSign& sign, // [out]
      75             :                         bool hitset[4] // [out]
      76             :                 );
      77             :         
      78             :         /**
      79             :          * This packs the given parameters into the bits of a word appropriate
      80             :          * for AliHLTMUONRecHitStruct::fFlags.
      81             :          * @param chamber    The chamber number in the range [0..13].
      82             :          * @param detElemId  Detector element ID number.
      83             :          * @return  Returns the 32 bit packed word.
      84             :          */
      85             :         static AliHLTUInt32_t PackRecHitFlags(
      86             :                         AliHLTUInt8_t chamber, AliHLTUInt16_t detElemId
      87             :                 );
      88             : 
      89             :         /**
      90             :          * This unpacks the AliHLTMUONRecHitStruct::fFlags bits into
      91             :          * its component fields.
      92             :          * @param [in]  flags  The flags from an AliHLTMUONRecHitStruct structure.
      93             :          * @param [out] chamber    Sets the chamber number in the range [0..13].
      94             :          * @param [out] detElemId  Sets the detector element ID number.
      95             :          */
      96             :         static void UnpackRecHitFlags(
      97             :                         AliHLTUInt32_t flags, // [in]
      98             :                         AliHLTUInt8_t& chamber, // [out]
      99             :                         AliHLTUInt16_t& detElemId // [out]
     100             :                 );
     101             : 
     102             :         /**
     103             :          * Returns the detector element ID from the flags bits.
     104             :          * @param [in]  flags  The flags from an AliHLTMUONRecHitStruct structure.
     105             :          */
     106             :         static AliHLTUInt16_t GetDetElemIdFromFlags(AliHLTUInt32_t flags)
     107             :         {
     108           0 :                 return flags & 0xFFF;
     109             :         }
     110             : 
     111             :         /**
     112             :          * This packs the given parameters into the bits of a word appropriate
     113             :          * for AliHLTMUONMansoTrackStruct::fFlags.
     114             :          * @param sign    The particle sign.
     115             :          * @param hitset  Flags to indicate if the corresponding fHits[i] elements
     116             :          *                was set/filled.
     117             :          * @return  Returns the 32 bit packed word.
     118             :          */
     119             :         static AliHLTUInt32_t PackMansoTrackFlags(
     120             :                         AliHLTMUONParticleSign sign, const bool hitset[4]
     121             :                 )
     122             :         {
     123           0 :                 return PackTriggerRecordFlags(sign, hitset);
     124             :         }
     125             : 
     126             :         /**
     127             :          * This unpacks the AliHLTMUONMansoTrackStruct::fFlags bits into
     128             :          * its component fields.
     129             :          * @param [in]  flags  The flags from an AliHLTMUONMansoTrackStruct structure.
     130             :          * @param [out] sign    Sets this to the particle sign.
     131             :          * @param [out] hitset  Sets the array elements to indicate if the corresponding
     132             :          *                fHits[i] element was set/filled.
     133             :          */
     134             :         static void UnpackMansoTrackFlags(
     135             :                         AliHLTUInt32_t flags, // [in]
     136             :                         AliHLTMUONParticleSign& sign, // [out]
     137             :                         bool hitset[4] // [out]
     138             :                 )
     139             :         {
     140           0 :                 UnpackTriggerRecordFlags(flags, sign, hitset);
     141           0 :         }
     142             : 
     143             :         /**
     144             :          * This packs the given parameters into the bits of a word appropriate
     145             :          * for AliHLTMUONTrackStruct::fFlags.
     146             :          * @param sign    The particle sign.
     147             :          * @param hitset  Flags to indicate if the corresponding fHits[i] elements
     148             :          *                was set/filled.
     149             :          * @return  Returns the 32 bit packed word.
     150             :          */
     151             :         static AliHLTUInt32_t PackTrackFlags(
     152             :                         AliHLTMUONParticleSign sign, const bool hitset[16]
     153             :                 );
     154             : 
     155             :         /**
     156             :          * This unpacks the AliHLTMUONTrackStruct::fFlags bits into
     157             :          * its component fields.
     158             :          * @param [in]  flags  The flags from an AliHLTMUONTrackStruct structure.
     159             :          * @param [out] sign    Sets this to the particle sign.
     160             :          * @param [out] hitset  Sets the array elements to indicate if the corresponding
     161             :          *                fHits[i] element was set/filled.
     162             :          */
     163             :         static void UnpackTrackFlags(
     164             :                         AliHLTUInt32_t flags, // [in]
     165             :                         AliHLTMUONParticleSign& sign, // [out]
     166             :                         bool hitset[16] // [out]
     167             :                 );
     168             :         
     169             :         /**
     170             :          * This packs the given parameters into the bits of a word appropriate
     171             :          * for AliHLTMUONTrackDecisionStruct::fTriggerBits.
     172             :          * @param highPt  Has the track passed the high pt cut.
     173             :          * @param lowPt   Has the track passed the low pt cut.
     174             :          * @return  Returns the 32 bit packed word.
     175             :          */
     176             :         static AliHLTUInt32_t PackTrackDecisionBits(bool highPt, bool lowPt);
     177             :         
     178             :         /**
     179             :          * This unpacks the AliHLTMUONTrackDecisionStruct::fTriggerBits bits into
     180             :          * its component fields.
     181             :          * @param [in] bits  The trigger bits from an AliHLTMUONTrackDecisionStruct
     182             :          *              structure.
     183             :          * @param [out] highPt Sets this to the value of the high pt cut bit.
     184             :          * @param [out] lowPt  Sets this to the value of the low pt cut bit.
     185             :          */
     186             :         static void UnpackTrackDecisionBits(
     187             :                         AliHLTUInt32_t bits, // [in]
     188             :                         bool& highPt, // [out]
     189             :                         bool& lowPt // [out]
     190             :                 );
     191             :         
     192             :         /**
     193             :          * This packs the given parameters into the bits of a word appropriate
     194             :          * for AliHLTMUONPairDecisionStruct::fTriggerBits.
     195             :          *
     196             :          * @param highMass Has the track pair passed the high invariant mass cut.
     197             :          * @param lowMass  Has the track pair passed the low invariant mass cut.
     198             :          * @param unlike   Does the track pair have unlike signs.
     199             :          * @param highPtCount The number of tracks that passed the high pt cut
     200             :          *                    in the pair.
     201             :          * @param lowPtCount  The number of tracks that passed the low pt cut
     202             :          *                    in the pair.
     203             :          * @return  Returns the 32 bit packed word.
     204             :          *
     205             :          * Note: Must have highPtCount + lowPtCount <= 2 and unlike == true if
     206             :          * highMass or lowMass is true.
     207             :          */
     208             :         static AliHLTUInt32_t PackPairDecisionBits(
     209             :                         bool highMass, bool lowMass, bool unlike,
     210             :                         AliHLTUInt8_t highPtCount, AliHLTUInt8_t lowPtCount
     211             :                 );
     212             :         
     213             :         /**
     214             :          * This unpacks the AliHLTMUONPairDecisionStruct::fTriggerBits bits into
     215             :          * its component fields.
     216             :          * @param [in]  bits  The trigger bits from an AliHLTMUONPairDecisionStruct
     217             :          *              structure.
     218             :          * @param [out] highMass Sets this to the value of the high invariant mass cut bit.
     219             :          * @param [out] lowMass  Sets this to the value of the low invariant mass cut bit.
     220             :          * @param [out] unlike   Sets this if the pair is unlike sign.
     221             :          * @param [out] highPtCount Sets this to the high pt count bits.
     222             :          * @param [out] lowPtCount  Sets this to the low pt count bits.
     223             :          */
     224             :         static void UnpackPairDecisionBits(
     225             :                         AliHLTUInt32_t bits, // [in]
     226             :                         bool& highMass, // [out]
     227             :                         bool& lowMass, // [out]
     228             :                         bool& unlike, // [out]
     229             :                         AliHLTUInt8_t& highPtCount, // [out]
     230             :                         AliHLTUInt8_t& lowPtCount // [out]
     231             :                 );
     232             :         
     233             :         /**
     234             :          * This packs the given parameters into the 32bit Pub/Sub specification
     235             :          * word in the data block descriptor.
     236             :          *
     237             :          * @param ddl  The list of DDLs forming part of the readout. ddl[0]
     238             :          *             indicates DDL number 2560, ddl[1] is for DDL 2561 and so
     239             :          *             on up to ddl[19]. ddl[20] and ddl[21] will be for the
     240             :          *             trigger DDLs 2816 and 2817 respectively.
     241             :          * @return  Returns the 32 bit packed specification word.
     242             :          */
     243             :         static AliHLTUInt32_t PackSpecBits(
     244             :                         const bool ddl[22]
     245             :                 );
     246             :         
     247             :         /**
     248             :          * This unpacks the AliHLTMUONPairDecisionStruct::fTriggerBits bits into
     249             :          * its component fields.
     250             :          * @param [in]  bits  The Pub/Sub specification word from a data block descriptor.
     251             :          * @param [out] ddl  The output list of DDLs forming part of the readout. ddl[0]
     252             :          *             indicates DDL number 2560, ddl[1] is for DDL 2561 and so
     253             :          *             on up to ddl[19]. ddl[20] and ddl[21] will be for the
     254             :          *             trigger DDLs 2816 and 2817 respectively.
     255             :          */
     256             :         static void UnpackSpecBits(
     257             :                         AliHLTUInt32_t bits, // [in]
     258             :                         bool ddl[22] // [out]
     259             :                 );
     260             : 
     261             :         /**
     262             :          * This method converts the DDL number for the muon spectrometer in the
     263             :          * range [0..21] to the equipment ID number.
     264             :          * @param ddlNo  The DDL number in the range [0..21].
     265             :          * @return  Returns the equipment ID number or -1 if ddlNo was invalid.
     266             :          */
     267             :         static AliHLTInt32_t DDLNumberToEquipId(AliHLTInt32_t ddlNo);
     268             :         
     269             :         /**
     270             :          * This method converts the equipment ID number for a muon spectrometer
     271             :          * DDL to the DDL number in the range [0..21].
     272             :          * @param id  The equipment ID of the DDL.
     273             :          * @return  Returns the DDL number in the range [0..21] or -1 if the
     274             :          *          equipment ID was invalid.
     275             :          */
     276             :         static AliHLTInt32_t EquipIdToDDLNumber(AliHLTInt32_t id);
     277             :         
     278             :         /**
     279             :          * This method converts a 32 bit data block specification for a MUON-HLT
     280             :          * data block into its corresponding DDL equipment ID number.
     281             :          * It is assumed that the specification is for a data block comming from
     282             :          * a single DDL source. If more than one DDL contributed to the data block
     283             :          * then -1 is returned.
     284             :          * @param spec  The 32 bit specification for a data block.
     285             :          * @return  Returns the equipment ID corresponding to the specification
     286             :          *          or -1 if the specification was invalid.
     287             :          */
     288             :         static AliHLTInt32_t SpecToEquipId(AliHLTUInt32_t spec);
     289             :         
     290             :         /**
     291             :          * This method converts a equipment ID number for a DDL into its corresponding
     292             :          * 32 bit data block specification for the MUON-HLT.
     293             :          * @param id  The equipment ID number of the DDL.
     294             :          * @return  Returns the 32 bit data block specification or 0x0 if the
     295             :          *          equipment ID was invalid.
     296             :          */
     297             :         static AliHLTUInt32_t EquipIdToSpec(AliHLTInt32_t id);
     298             :         
     299             :         /**
     300             :          * This method converts a 32 bit data block specification for a MUON-HLT
     301             :          * data block into its corresponding DDL number in the range [0..21].
     302             :          * It is assumed that the specification is for a data block comming from
     303             :          * a single DDL source. If more than one DDL contributed to the data block
     304             :          * then -1 is returned.
     305             :          * @param spec  The 32 bit specification for a data block.
     306             :          * @return  Returns the corresponding DDL number for the specification
     307             :          *          or -1 if the specification was invalid.
     308             :          */
     309             :         static AliHLTInt32_t SpecToDDLNumber(AliHLTUInt32_t spec);
     310             :         
     311             :         /**
     312             :          * This method converts a DDL number in the range [0..21] into its
     313             :          * corresponding 32 bit data block specification for the MUON-HLT.
     314             :          * @param ddlNo  The equipment ID number of the DDL.
     315             :          * @return  Returns the 32 bit data block specification or 0x0 if the
     316             :          *          DDL number was invalid (out of range).
     317             :          */
     318             :         static AliHLTUInt32_t DDLNumberToSpec(AliHLTInt32_t ddlNo);
     319             : 
     320             :         /**
     321             :          * Returns true if the given specification was for a single trigger DDL.
     322             :          */
     323             :         static bool IsTriggerDDL(AliHLTUInt32_t spec)
     324             :         {
     325           0 :                 AliHLTInt32_t ddl = SpecToDDLNumber(spec);
     326           0 :                 return (20 <= ddl and ddl <= 21);
     327             :         }
     328             : 
     329             :         /**
     330             :          * Returns true if the given specification was for a single tracker DDL.
     331             :          */
     332             :         static bool IsTrackerDDL(AliHLTUInt32_t spec)
     333             :         {
     334           0 :                 AliHLTInt32_t ddl = SpecToDDLNumber(spec);
     335           0 :                 return (0 <= ddl and ddl <= 19);
     336             :         }
     337             : 
     338             :         /**
     339             :          * Returns true if the given specification is in principle valid.
     340             :          * It checks if the bits that should be zero are indeed zero.
     341             :          */
     342             :         static bool IsSpecValid(AliHLTUInt32_t spec)
     343             :         {
     344             :                 AliHLTUInt32_t mask = ~AliHLTUInt32_t((1 << 22) - 1);  // First 22 bits indicate DDL number.
     345           0 :                 return (spec & mask) == 0x0;
     346             :         }
     347             : 
     348             :         /**
     349             :          * Returns true if the data specification indicates the data block contains
     350             :          * information generated from a trigger DDL or data fragments thereof.
     351             :          */
     352             :         static bool ContainsDataFromTrigger(AliHLTUInt32_t spec)
     353             :         {
     354             :                 AliHLTUInt32_t mask = AliHLTUInt32_t((1 << 22) - 1) & ~AliHLTUInt32_t((1 << 20) - 1);
     355           0 :                 return (spec & mask) != 0x0;
     356             :         }
     357             : 
     358             :         /**
     359             :          * Returns true if the data specification indicates the data block contains
     360             :          * information generated from a tracker DDL or data fragments thereof.
     361             :          */
     362             :         static bool ContainsDataFromTracker(AliHLTUInt32_t spec)
     363             :         {
     364             :                 AliHLTUInt32_t mask = AliHLTUInt32_t((1 << 20) - 1);
     365           0 :                 return (spec & mask) != 0x0;
     366             :         }
     367             :         
     368             :         /**
     369             :          * Parses the string containing the type name of a dHLT data block and
     370             :          * returns the corresponding AliHLTMUONDataBlockType value.
     371             :          * \param  type  The string containing the type name.
     372             :          * \returns  The data block type or kUnknownDataBlock if the type name
     373             :          *      is invalid.
     374             :          */
     375             :         static AliHLTMUONDataBlockType ParseCommandLineTypeString(const char* type);
     376             :         
     377             :         /**
     378             :          * Converts a type ID to a type string to be used for the dHLT FilePublisher
     379             :          * component configuration parameters for example.
     380             :          */
     381             :         static const char* DataBlockTypeToString(AliHLTMUONDataBlockType type);
     382             :         
     383             :         /**
     384             :          * These codes indicate the reason why a data block failed its
     385             :          * validity check.
     386             :          */
     387             :         enum WhyNotValid
     388             :         {
     389             :                 kNoReason,   ///< There was no reason for failure.
     390             :                 kHeaderContainsWrongType,  ///< The common header contains an incorrect type ID.
     391             :                 kHeaderContainsWrongRecordWidth,  ///< The common header contains an incorrect data record width.
     392             :                 kInvalidIdValue,  ///< The structure identifier does not have a valid value.
     393             :                 kInvalidTriggerIdValue,  ///< The trigger structure identifier does not have a valid value.
     394             :                 kInvalidTrackIdValue,  ///< The track structure identifier does not have a valid value.
     395             :                 kReservedBitsNotZero,  ///< Reserved bits have not been set to zero.
     396             :                 kParticleSignBitsNotValid,  ///< The particle sign bits are not a valid value.
     397             :                 kHitNotMarkedAsNil,  ///< A hit was marked as not found, but the corresponding hit structure was not set to nil.
     398             :                 kInvalidDetElementNumber,  ///< An invalid detector element ID was found.
     399             :                 kInvalidChamberNumber,  ///< An invalid chamber number was found.
     400             :                 kHitIsNil,  ///< The hit cannot be set to a nil value.
     401             :                 kInvalidChannelCountB,  ///< The number of channels in the bending plane indicated is zero or outside the valid range.
     402             :                 kInvalidChannelCountNB,  ///< The number of channels in the non-bending plane indicated is zero or outside the valid range.
     403             :                 kInvalidChargeB, ///< The charge for the bending plane does not have a valid value.
     404             :                 kInvalidChargeNB, ///< The charge for the non-bending plane does not have a valid value.
     405             :                 kInvalidBusPatchId,  ///< The bus patch ID is outside the valid range.
     406             :                 kInvalidManuId,  ///< The MANU ID is outside the valid range.
     407             :                 kInvalidChannelAddress,  ///< The MANU channel address is outside the valid range.
     408             :                 kInvalidSignal,  ///< The ADC signal value is outside the valid range.
     409             :                 kDataWordDifferent, ///< The raw data word is different from the unpacked values.
     410             :                 kChiSquareInvalid,  ///< The chi squared value must be a positive value or -1 indicating a fitting error.
     411             :                 kMomentumVectorNotZero, ///< The chi sqaured value is set to -1, but momentum vector not zero.
     412             :                 kMomentumParamsNotZero, ///< The chi sqaured value is set to -1, but fitted momentum parameters are not zero.
     413             :                 kDCAVertexNotZero, ///< The chi sqaured value is set to -1, but DCA vertex is not zero.
     414             :                 kRoiRadiusInvalid, ///< The region of interest radius is invalid.
     415             :                 kHitNotWithinRoi, ///< A tracks hit is not within the corresponding region of interest.
     416             :                 kPtValueNotValid,  ///< The pT value is not positive nor -1 indicating an invalid value.
     417             :                 kPairTrackIdsAreIdentical,  ///< The track IDs of the track pair are identical.
     418             :                 kMassValueNotValid,  ///< The invariant mass value is not positive nor -1 indicating an invalid value.
     419             :                 kLowPtCountInvalid,  ///< The low pT trigger count is greater than 2, which is invalid.
     420             :                 kHighPtCountInvalid,  ///< The high pT trigger count is greater than 2, which is invalid.
     421             :                 kFoundDuplicateIDs,  ///< Found duplicate identifiers, but they should all be unique.
     422             :                 kFoundDuplicateHits,  ///< Found duplicate hits.
     423             :                 kFoundDuplicateTriggers  ///< Found duplicate trigger decisions.
     424             :         };
     425             :         
     426             :         /**
     427             :          * This method converts the WhyNotValid enumeration to a string representation.
     428             :          */
     429             :         static const char* FailureReasonToString(WhyNotValid reason);
     430             :         
     431             :         /**
     432             :          * This method returns a string containing a user readable message explaining
     433             :          * the reason for failure described by the WhyNotValid enumeration.
     434             :          */
     435             :         static const char* FailureReasonToMessage(WhyNotValid reason);
     436             : 
     437             :         /**
     438             :          * Method used to check if the header information corresponds to the
     439             :          * supposed type of the trigger records data block.
     440             :          * This method will return either kHeaderContainsWrongType or
     441             :          * kHeaderContainsWrongRecordWidth as the reason code.
     442             :          * \param [in]  block  The data block to check.
     443             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     444             :          *      by this pointer will be filled with the reason code describing why
     445             :          *      the header is not valid, if and only if a problem is found with
     446             :          *      the data.
     447             :          * \returns  true if there is no problem with the header and false otherwise.
     448             :          */
     449             :         static bool HeaderOk(const AliHLTMUONTriggerRecordsBlockStruct& block, WhyNotValid* reason = NULL)
     450             :         {
     451           0 :                 AliHLTUInt32_t count = 1;
     452           0 :                 return HeaderOk(block, reason, count);
     453           0 :         }
     454             :         
     455             :         /**
     456             :          * Method used to check if the header information corresponds to the
     457             :          * supposed type of the trigger debug information data block.
     458             :          * This method will return either kHeaderContainsWrongType or
     459             :          * kHeaderContainsWrongRecordWidth as the reason code.
     460             :          * \param [in]  block  The data block to check.
     461             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     462             :          *      by this pointer will be filled with the reason code describing why
     463             :          *      the header is not valid, if and only if a problem is found with
     464             :          *      the data.
     465             :          * \returns  true if there is no problem with the header and false otherwise.
     466             :          */
     467             :         static bool HeaderOk(const AliHLTMUONTrigRecsDebugBlockStruct& block, WhyNotValid* reason = NULL)
     468             :         {
     469           0 :                 AliHLTUInt32_t count = 1;
     470           0 :                 return HeaderOk(block, reason, count);
     471           0 :         }
     472             :         
     473             :         /**
     474             :          * Method used to check if the header information corresponds to the
     475             :          * supposed type of the reconstructed hits data block.
     476             :          * This method will return either kHeaderContainsWrongType or
     477             :          * kHeaderContainsWrongRecordWidth as the reason code.
     478             :          * \param [in]  block  The data block to check.
     479             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     480             :          *      by this pointer will be filled with the reason code describing why
     481             :          *      the header is not valid, if and only if a problem is found with
     482             :          *      the data.
     483             :          * \returns  true if there is no problem with the header and false otherwise.
     484             :          */
     485             :         static bool HeaderOk(const AliHLTMUONRecHitsBlockStruct& block, WhyNotValid* reason = NULL)
     486             :         {
     487           0 :                 AliHLTUInt32_t count = 1;
     488           0 :                 return HeaderOk(block, reason, count);
     489           0 :         }
     490             :         
     491             :         /**
     492             :          * Method used to check if the header information corresponds to the
     493             :          * supposed type of the clusters data block.
     494             :          * This method will return either kHeaderContainsWrongType or
     495             :          * kHeaderContainsWrongRecordWidth as the reason code.
     496             :          * \param [in]  block  The data block to check.
     497             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     498             :          *      by this pointer will be filled with the reason code describing why
     499             :          *      the header is not valid, if and only if a problem is found with
     500             :          *      the data.
     501             :          * \returns  true if there is no problem with the header and false otherwise.
     502             :          */
     503             :         static bool HeaderOk(const AliHLTMUONClustersBlockStruct& block, WhyNotValid* reason = NULL)
     504             :         {
     505           0 :                 AliHLTUInt32_t count = 1;
     506           0 :                 return HeaderOk(block, reason, count);
     507           0 :         }
     508             :         
     509             :         /**
     510             :          * Method used to check if the header information corresponds to the
     511             :          * supposed type of the channels data block.
     512             :          * This method will return either kHeaderContainsWrongType or
     513             :          * kHeaderContainsWrongRecordWidth as the reason code.
     514             :          * \param [in]  block  The data block to check.
     515             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     516             :          *      by this pointer will be filled with the reason code describing why
     517             :          *      the header is not valid, if and only if a problem is found with
     518             :          *      the data.
     519             :          * \returns  true if there is no problem with the header and false otherwise.
     520             :          */
     521             :         static bool HeaderOk(const AliHLTMUONChannelsBlockStruct& block, WhyNotValid* reason = NULL)
     522             :         {
     523           0 :                 AliHLTUInt32_t count = 1;
     524           0 :                 return HeaderOk(block, reason, count);
     525           0 :         }
     526             :         
     527             :         /**
     528             :          * Method used to check if the header information corresponds to the
     529             :          * supposed type of the Manso tracks data block.
     530             :          * This method will return either kHeaderContainsWrongType or
     531             :          * kHeaderContainsWrongRecordWidth as the reason code.
     532             :          * \param [in]  block  The data block to check.
     533             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     534             :          *      by this pointer will be filled with the reason code describing why
     535             :          *      the header is not valid, if and only if a problem is found with
     536             :          *      the data.
     537             :          * \returns  true if there is no problem with the header and false otherwise.
     538             :          */
     539             :         static bool HeaderOk(const AliHLTMUONMansoTracksBlockStruct& block, WhyNotValid* reason = NULL)
     540             :         {
     541           0 :                 AliHLTUInt32_t count = 1;
     542           0 :                 return HeaderOk(block, reason, count);
     543           0 :         }
     544             :         
     545             :         /**
     546             :          * Method used to check if the header information corresponds to the
     547             :          * supposed type of the Manso candidates data block.
     548             :          * This method will return either kHeaderContainsWrongType or
     549             :          * kHeaderContainsWrongRecordWidth as the reason code.
     550             :          * \param [in]  block  The data block to check.
     551             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     552             :          *      by this pointer will be filled with the reason code describing why
     553             :          *      the header is not valid, if and only if a problem is found with
     554             :          *      the data.
     555             :          * \returns  true if there is no problem with the header and false otherwise.
     556             :          */
     557             :         static bool HeaderOk(const AliHLTMUONMansoCandidatesBlockStruct& block, WhyNotValid* reason = NULL)
     558             :         {
     559           0 :                 AliHLTUInt32_t count = 1;
     560           0 :                 return HeaderOk(block, reason, count);
     561           0 :         }
     562             :         
     563             :         /**
     564             :          * Method used to check if the header information corresponds to the
     565             :          * supposed type of the tracks data block given.
     566             :          * This method will return either kHeaderContainsWrongType or
     567             :          * kHeaderContainsWrongRecordWidth as the reason code.
     568             :          * \param [in]  block  The data block to check.
     569             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     570             :          *      by this pointer will be filled with the reason code describing why
     571             :          *      the header is not valid, if and only if a problem is found with
     572             :          *      the data.
     573             :          * \returns  true if there is no problem with the header and false otherwise.
     574             :          */
     575             :         static bool HeaderOk(const AliHLTMUONTracksBlockStruct& block, WhyNotValid* reason = NULL)
     576             :         {
     577           0 :                 AliHLTUInt32_t count = 1;
     578           0 :                 return HeaderOk(block, reason, count);
     579           0 :         }
     580             :         
     581             :         /**
     582             :          * Method used to check if the header information corresponds to the
     583             :          * supposed type of the single tracks dHLT trigger decision data block.
     584             :          * This method will return either kHeaderContainsWrongType or
     585             :          * kHeaderContainsWrongRecordWidth as the reason code.
     586             :          * \param [in]  block  The data block to check.
     587             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     588             :          *      by this pointer will be filled with the reason code describing why
     589             :          *      the header is not valid, if and only if a problem is found with
     590             :          *      the data.
     591             :          * \returns  true if there is no problem with the header and false otherwise.
     592             :          */
     593             :         static bool HeaderOk(const AliHLTMUONSinglesDecisionBlockStruct& block, WhyNotValid* reason = NULL)
     594             :         {
     595           0 :                 AliHLTUInt32_t count = 1;
     596           0 :                 return HeaderOk(block, reason, count);
     597           0 :         }
     598             :         
     599             :         /**
     600             :          * Method used to check if the header information corresponds to the
     601             :          * supposed type of the track pairs dHLT trigger decision data block.
     602             :          * This method will return either kHeaderContainsWrongType or
     603             :          * kHeaderContainsWrongRecordWidth as the reason code.
     604             :          * \param [in]  block  The data block to check.
     605             :          * \param [out] reason  If this is not NULL, then the variable pointed to
     606             :          *      by this pointer will be filled with the reason code describing why
     607             :          *      the header is not valid, if and only if a problem is found with
     608             :          *      the data.
     609             :          * \returns  true if there is no problem with the header and false otherwise.
     610             :          */
     611             :         static bool HeaderOk(const AliHLTMUONPairsDecisionBlockStruct& block, WhyNotValid* reason = NULL)
     612             :         {
     613           0 :                 AliHLTUInt32_t count = 1;
     614           0 :                 return HeaderOk(block, reason, count);
     615           0 :         }
     616             : 
     617             :         /**
     618             :          * Methods used to check if the header information corresponds to the
     619             :          * supposed type of the data block.
     620             :          * If the 'reason' parameter should point to an array which will store
     621             :          * the reason codes indicating the problems with the data block.
     622             :          * The 'reasonCount' parameter should initialy contain the number of
     623             :          * elements that can be stored in reason. When the method exits it will
     624             :          * store the number of elements in the 'reason' array actually filled.
     625             :          */
     626             :         static bool HeaderOk(
     627             :                         const AliHLTMUONTriggerRecordsBlockStruct& block,
     628             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     629             :                 );
     630             :         
     631             :         static bool HeaderOk(
     632             :                         const AliHLTMUONTrigRecsDebugBlockStruct& block,
     633             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     634             :                 );
     635             :         
     636             :         static bool HeaderOk(
     637             :                         const AliHLTMUONRecHitsBlockStruct& block,
     638             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     639             :                 );
     640             :         
     641             :         static bool HeaderOk(
     642             :                         const AliHLTMUONClustersBlockStruct& block,
     643             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     644             :                 );
     645             :         
     646             :         static bool HeaderOk(
     647             :                         const AliHLTMUONChannelsBlockStruct& block,
     648             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     649             :                 );
     650             :         
     651             :         static bool HeaderOk(
     652             :                         const AliHLTMUONMansoTracksBlockStruct& block,
     653             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     654             :                 );
     655             :         
     656             :         static bool HeaderOk(
     657             :                         const AliHLTMUONMansoCandidatesBlockStruct& block,
     658             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     659             :                 );
     660             :         
     661             :         static bool HeaderOk(
     662             :                         const AliHLTMUONTracksBlockStruct& block,
     663             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     664             :                 );
     665             :         
     666             :         static bool HeaderOk(
     667             :                         const AliHLTMUONSinglesDecisionBlockStruct& block,
     668             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     669             :                 );
     670             :         
     671             :         static bool HeaderOk(
     672             :                         const AliHLTMUONPairsDecisionBlockStruct& block,
     673             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
     674             :                 );
     675             :         
     676             :         /**
     677             :          * This method is used to check more extensively if the integrity of the
     678             :          * trigger record structure is OK and returns true in that case.
     679             :          * \param [in]  tr  The trigger record structure to check.
     680             :          * \param [out] reason  If this is not NULL, then it will be filled with
     681             :          *      the reason code describing why the structure is not valid, if and
     682             :          *      only if a problem is found with the data.
     683             :          * \returns  true if there is no problem with the structure and false otherwise.
     684             :          */
     685             :         static bool IntegrityOk(
     686             :                         const AliHLTMUONTriggerRecordStruct& tr,
     687             :                         WhyNotValid* reason = NULL
     688             :                 )
     689             :         {
     690           0 :                 AliHLTUInt32_t count = 1;
     691           0 :                 return IntegrityOk(tr, reason, count);
     692           0 :         }
     693             :         
     694             :         /**
     695             :          * This method is used to check more extensively if the integrity of the
     696             :          * dHLT raw internal data block is OK and returns true in that case.
     697             :          * \param [in]  block  The trigger record data block to check.
     698             :          * \param [out] reason  If this is not NULL, then it will be filled with
     699             :          *      the reason code describing why the data block is not valid, if and
     700             :          *      only if a problem is found with the data.
     701             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     702             :          *      the number of the trigger record that had a problem. This value will
     703             :          *      only contain a valid value if the method RecordNumberWasSet(*reason)
     704             :          *      returns true. Thus, 'reason' must be set.
     705             :          * \returns  true if there is no problem with the data and false otherwise.
     706             :          */
     707             :         static bool IntegrityOk(
     708             :                         const AliHLTMUONTriggerRecordsBlockStruct& block,
     709             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     710             :                 )
     711             :         {
     712           0 :                 AliHLTUInt32_t count = 1;
     713           0 :                 return IntegrityOk(block, reason, recordNum, count);
     714           0 :         }
     715             :         
     716             :         /**
     717             :          * This method is used to check more extensively if the integrity of the
     718             :          * trigger record debug information structure is OK and returns true in that case.
     719             :          * \param [in]  trigInfo  The trigger record debug information structure to check.
     720             :          * \param [out] reason  If this is not NULL, then it will be filled with
     721             :          *      the reason code describing why the structure is not valid, if and
     722             :          *      only if a problem is found with the data.
     723             :          * \returns  true if there is no problem with the structure and false otherwise.
     724             :          */
     725             :         static bool IntegrityOk(
     726             :                         const AliHLTMUONTrigRecInfoStruct& trigInfo,
     727             :                         WhyNotValid* reason = NULL
     728             :                 )
     729             :         {
     730           0 :                 AliHLTUInt32_t count = 1;
     731           0 :                 return IntegrityOk(trigInfo, reason, count);
     732           0 :         }
     733             :         
     734             :         /**
     735             :          * This method is used to check more extensively if the integrity of the
     736             :          * dHLT raw internal data block is OK and returns true in that case.
     737             :          * \param [in]  block  The trigger record debugging information data block to check.
     738             :          * \param [out] reason  If this is not NULL, then it will be filled with
     739             :          *      the reason code describing why the data block is not valid, if and
     740             :          *      only if a problem is found with the data.
     741             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     742             :          *      the number of the trigger record debug information structure that had
     743             :          *      a problem. This value will only contain a valid value if the method
     744             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     745             :          * \returns  true if there is no problem with the data and false otherwise.
     746             :          */
     747             :         static bool IntegrityOk(
     748             :                         const AliHLTMUONTrigRecsDebugBlockStruct& block,
     749             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     750             :                 )
     751             :         {
     752           0 :                 AliHLTUInt32_t count = 1;
     753           0 :                 return IntegrityOk(block, reason, recordNum, count);
     754           0 :         }
     755             :         
     756             :         /**
     757             :          * This method is used to check more extensively if the integrity of the
     758             :          * reconstructed hit structure is OK and returns true in that case.
     759             :          * \param [in]  hit  The reconstructed hit structure to check.
     760             :          * \param [out] reason  If this is not NULL, then it will be filled with
     761             :          *      the reason code describing why the structure is not valid, if and
     762             :          *      only if a problem is found with the data.
     763             :          * \returns  true if there is no problem with the data and false otherwise.
     764             :          */
     765             :         static bool IntegrityOk(
     766             :                         const AliHLTMUONRecHitStruct& hit,
     767             :                         WhyNotValid* reason = NULL
     768             :                 )
     769             :         {
     770           0 :                 AliHLTUInt32_t count = 1;
     771           0 :                 return IntegrityOk(hit, reason, count);
     772           0 :         }
     773             :         
     774             :         /**
     775             :          * This method is used to check more extensively if the integrity of the
     776             :          * dHLT raw internal data block is OK and returns true in that case.
     777             :          * \param [in]  block  The reconstructed hits data block to check.
     778             :          * \param [out] reason  If this is not NULL, then it will be filled with
     779             :          *      the reason code describing why the data block is not valid, if and
     780             :          *      only if a problem is found with the data.
     781             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     782             :          *      the number of the cluster structure that had a problem. This value
     783             :          *      will only contain a valid value if the method
     784             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     785             :          * \returns  true if there is no problem with the data and false otherwise.
     786             :          */
     787             :         static bool IntegrityOk(
     788             :                         const AliHLTMUONRecHitsBlockStruct& block,
     789             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     790             :                 )
     791             :         {
     792           0 :                 AliHLTUInt32_t count = 1;
     793           0 :                 return IntegrityOk(block, reason, recordNum, count);
     794           0 :         }
     795             :         
     796             :         /**
     797             :          * This method is used to check more extensively if the integrity of the
     798             :          * cluster data structure is OK and returns true in that case.
     799             :          * \param [in]  cluster  The cluster structure to check.
     800             :          * \param [out] reason  If this is not NULL, then it will be filled with
     801             :          *      the reason code describing why the structure is not valid, if and
     802             :          *      only if a problem is found with the data.
     803             :          * \returns  true if there is no problem with the data and false otherwise.
     804             :          */
     805             :         static bool IntegrityOk(
     806             :                         const AliHLTMUONClusterStruct& cluster,
     807             :                         WhyNotValid* reason = NULL
     808             :                 )
     809             :         {
     810           0 :                 AliHLTUInt32_t count = 1;
     811           0 :                 return IntegrityOk(cluster, reason, count);
     812           0 :         }
     813             :         
     814             :         /**
     815             :          * This method is used to check more extensively if the integrity of the
     816             :          * dHLT raw internal data block is OK and returns true in that case.
     817             :          * \param [in]  block  The clusters data block to check.
     818             :          * \param [out] reason  If this is not NULL, then it will be filled with
     819             :          *      the reason code describing why the data block is not valid, if and
     820             :          *      only if a problem is found with the data.
     821             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     822             :          *      the number of the cluster structure that had a problem. This value
     823             :          *      will only contain a valid value if the method
     824             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     825             :          * \returns  true if there is no problem with the data and false otherwise.
     826             :          */
     827             :         static bool IntegrityOk(
     828             :                         const AliHLTMUONClustersBlockStruct& block,
     829             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     830             :                 )
     831             :         {
     832           0 :                 AliHLTUInt32_t count = 1;
     833           0 :                 return IntegrityOk(block, reason, recordNum, count);
     834           0 :         }
     835             :         
     836             :         /**
     837             :          * This method is used to check more extensively if the integrity of the
     838             :          * channel data structure is OK and returns true in that case.
     839             :          * \param [in]  cluster  The channel structure to check.
     840             :          * \param [out] reason  If this is not NULL, then it will be filled with
     841             :          *      the reason code describing why the structure is not valid, if and
     842             :          *      only if a problem is found with the data.
     843             :          * \returns  true if there is no problem with the data and false otherwise.
     844             :          */
     845             :         static bool IntegrityOk(
     846             :                         const AliHLTMUONChannelStruct& channel,
     847             :                         WhyNotValid* reason = NULL
     848             :                 )
     849             :         {
     850           0 :                 AliHLTUInt32_t count = 1;
     851           0 :                 return IntegrityOk(channel, reason, count);
     852           0 :         }
     853             :         
     854             :         /**
     855             :          * This method is used to check more extensively if the integrity of the
     856             :          * dHLT raw internal data block is OK and returns true in that case.
     857             :          * \param [in]  block  The ADC channels data block to check.
     858             :          * \param [out] reason  If this is not NULL, then it will be filled with
     859             :          *      the reason code describing why the data block is not valid, if and
     860             :          *      only if a problem is found with the data.
     861             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     862             :          *      the number of the channel structure that had a problem. This value
     863             :          *      will only contain a valid value if the method
     864             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     865             :          * \returns  true if there is no problem with the data and false otherwise.
     866             :          */
     867             :         static bool IntegrityOk(
     868             :                         const AliHLTMUONChannelsBlockStruct& block,
     869             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     870             :                 )
     871             :         {
     872           0 :                 AliHLTUInt32_t count = 1;
     873           0 :                 return IntegrityOk(block, reason, recordNum, count);
     874           0 :         }
     875             :         
     876             :         /**
     877             :          * This method is used to check more extensively if the integrity of the
     878             :          * Manso track structure is OK and returns true in that case.
     879             :          * \param [in]  track  The Manso track structure to check.
     880             :          * \param [out] reason  If this is not NULL, then it will be filled with
     881             :          *      the reason code describing why the structure is not valid, if and
     882             :          *      only if a problem is found with the data.
     883             :          * \returns  true if there is no problem with the structure and false otherwise.
     884             :          */
     885             :         static bool IntegrityOk(
     886             :                         const AliHLTMUONMansoTrackStruct& track,
     887             :                         WhyNotValid* reason = NULL
     888             :                 )
     889             :         {
     890           0 :                 AliHLTUInt32_t count = 1;
     891           0 :                 return IntegrityOk(track, reason, count);
     892           0 :         }
     893             :         
     894             :         /**
     895             :          * This method is used to check more extensively if the integrity of the
     896             :          * dHLT raw internal data block is OK and returns true in that case.
     897             :          * \param [in]  block  The Manso track data block to check.
     898             :          * \param [out] reason  If this is not NULL, then it will be filled with
     899             :          *      the reason code describing why the data block is not valid, if and
     900             :          *      only if a problem is found with the data.
     901             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     902             :          *      the number of the Manso track structure that had a problem.
     903             :          *      This value will only contain a valid value if the method
     904             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     905             :          * \returns  true if there is no problem with the data and false otherwise.
     906             :          */
     907             :         static bool IntegrityOk(
     908             :                         const AliHLTMUONMansoTracksBlockStruct& block,
     909             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     910             :                 )
     911             :         {
     912           0 :                 AliHLTUInt32_t count = 1;
     913           0 :                 return IntegrityOk(block, reason, recordNum, count);
     914           0 :         }
     915             :         
     916             :         /**
     917             :          * This method is used to check more extensively if the integrity of the
     918             :          * Manso track candidate structure is OK and returns true in that case.
     919             :          * \param [in]  candidate  The Manso track candidate structure to check.
     920             :          * \param [out] reason  If this is not NULL, then it will be filled with
     921             :          *      the reason code describing why the structure is not valid, if and
     922             :          *      only if a problem is found with the data.
     923             :          * \returns  true if there is no problem with the structure and false otherwise.
     924             :          */
     925             :         static bool IntegrityOk(
     926             :                         const AliHLTMUONMansoCandidateStruct& candidate,
     927             :                         WhyNotValid* reason = NULL
     928             :                 )
     929             :         {
     930           0 :                 AliHLTUInt32_t count = 1;
     931           0 :                 return IntegrityOk(candidate, reason, count);
     932           0 :         }
     933             :         
     934             :         /**
     935             :          * This method is used to check more extensively if the integrity of the
     936             :          * dHLT raw internal data block is OK and returns true in that case.
     937             :          * \param [in]  block  The Manso track candidate data block to check.
     938             :          * \param [out] reason  If this is not NULL, then it will be filled with
     939             :          *      the reason code describing why the data block is not valid, if and
     940             :          *      only if a problem is found with the data.
     941             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     942             :          *      the number of the Manso track candidate structure that had a problem.
     943             :          *      This value will only contain a valid value if the method
     944             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     945             :          * \returns  true if there is no problem with the data and false otherwise.
     946             :          */
     947             :         static bool IntegrityOk(
     948             :                         const AliHLTMUONMansoCandidatesBlockStruct& block,
     949             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     950             :                 )
     951             :         {
     952           0 :                 AliHLTUInt32_t count = 1;
     953           0 :                 return IntegrityOk(block, reason, recordNum, count);
     954           0 :         }
     955             :         
     956             :         /**
     957             :          * This method is used to check more extensively if the integrity of the
     958             :          * full track structure is OK and returns true in that case.
     959             :          * \param [in]  track  The track structure to check.
     960             :          * \param [out] reason  If this is not NULL, then it will be filled with
     961             :          *      the reason code describing why the structure is not valid, if and
     962             :          *      only if a problem is found with the data.
     963             :          * \returns  true if there is no problem with the structure and false otherwise.
     964             :          */
     965             :         static bool IntegrityOk(
     966             :                         const AliHLTMUONTrackStruct& track,
     967             :                         WhyNotValid* reason = NULL
     968             :                 )
     969             :         {
     970           0 :                 AliHLTUInt32_t count = 1;
     971           0 :                 return IntegrityOk(track, reason, count);
     972           0 :         }
     973             :         
     974             :         /**
     975             :          * This method is used to check more extensively if the integrity of the
     976             :          * dHLT raw internal data block is OK and returns true in that case.
     977             :          * \param [in]  block  The track data block to check.
     978             :          * \param [out] reason  If this is not NULL, then it will be filled with
     979             :          *      the reason code describing why the data block is not valid, if and
     980             :          *      only if a problem is found with the data.
     981             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
     982             :          *      the number of the Manso track structure that had a problem.
     983             :          *      This value will only contain a valid value if the method
     984             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
     985             :          * \returns  true if there is no problem with the data and false otherwise.
     986             :          */
     987             :         static bool IntegrityOk(
     988             :                         const AliHLTMUONTracksBlockStruct& block,
     989             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
     990             :                 )
     991             :         {
     992           0 :                 AliHLTUInt32_t count = 1;
     993           0 :                 return IntegrityOk(block, reason, recordNum, count);
     994           0 :         }
     995             :         
     996             :         /**
     997             :          * This method is used to check more extensively if the integrity of the
     998             :          * single track trigger decision structure is OK and returns true in that case.
     999             :          * \param [in]  decision  The trigger decision structure to check.
    1000             :          * \param [out] reason  If this is not NULL, then it will be filled with
    1001             :          *      the reason code describing why the structure is not valid, if and
    1002             :          *      only if a problem is found with the data.
    1003             :          * \returns  true if there is no problem with the structure and false otherwise.
    1004             :          */
    1005             :         static bool IntegrityOk(
    1006             :                         const AliHLTMUONTrackDecisionStruct& decision,
    1007             :                         WhyNotValid* reason = NULL
    1008             :                 )
    1009             :         {
    1010           0 :                 AliHLTUInt32_t count = 1;
    1011           0 :                 return IntegrityOk(decision, reason, count);
    1012           0 :         }
    1013             :         
    1014             :         /**
    1015             :          * This method is used to check more extensively if the integrity of the
    1016             :          * dHLT raw internal data block is OK and returns true in that case.
    1017             :          * \param [in]  block  The single track trigger decision data block to check.
    1018             :          * \param [out] reason  If this is not NULL, then it will be filled with
    1019             :          *      the reason code describing why the data block is not valid, if and
    1020             :          *      only if a problem is found with the data.
    1021             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
    1022             :          *      the number of the single track trigger decision structure that had
    1023             :          *      a problem. This value will only contain a valid value if the method
    1024             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
    1025             :          * \returns  true if there is no problem with the data and false otherwise.
    1026             :          */
    1027             :         static bool IntegrityOk(
    1028             :                         const AliHLTMUONSinglesDecisionBlockStruct& block,
    1029             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
    1030             :                 )
    1031             :         {
    1032           0 :                 AliHLTUInt32_t count = 1;
    1033           0 :                 return IntegrityOk(block, reason, recordNum, count);
    1034           0 :         }
    1035             :         
    1036             :         /**
    1037             :          * This method is used to check more extensively if the integrity of the
    1038             :          * track pair trigger decision structure is OK and returns true in that case.
    1039             :          * \param [in]  decision  The trigger decision structure to check.
    1040             :          * \param [out] reason  If this is not NULL, then it will be filled with
    1041             :          *      the reason code describing why the structure is not valid, if and
    1042             :          *      only if a problem is found with the data.
    1043             :          * \returns  true if there is no problem with the structure and false otherwise.
    1044             :          */
    1045             :         static bool IntegrityOk(
    1046             :                         const AliHLTMUONPairDecisionStruct& decision,
    1047             :                         WhyNotValid* reason = NULL
    1048             :                 )
    1049             :         {
    1050           0 :                 AliHLTUInt32_t count = 1;
    1051           0 :                 return IntegrityOk(decision, reason, count);
    1052           0 :         }
    1053             :         
    1054             :         /**
    1055             :          * This method is used to check more extensively if the integrity of the
    1056             :          * dHLT raw internal data block is OK and returns true in that case.
    1057             :          * \param [in]  block  The track pair trigger decision data block to check.
    1058             :          * \param [out] reason  If this is not NULL, then it will be filled with
    1059             :          *      the reason code describing why the data block is not valid, if and
    1060             :          *      only if a problem is found with the data.
    1061             :          * \param [out] recordNum  If this is not NULL, then it will be filled with
    1062             :          *      the number of the track pairs trigger decision structure that had
    1063             :          *      a problem. This value will only contain a valid value if the method
    1064             :          *      RecordNumberWasSet(*reason) returns true. Thus, 'reason' must be set.
    1065             :          * \returns  true if there is no problem with the data and false otherwise.
    1066             :          */
    1067             :         static bool IntegrityOk(
    1068             :                         const AliHLTMUONPairsDecisionBlockStruct& block,
    1069             :                         WhyNotValid* reason = NULL, AliHLTUInt32_t* recordNum = NULL
    1070             :                 )
    1071             :         {
    1072           0 :                 AliHLTUInt32_t count = 1;
    1073           0 :                 return IntegrityOk(block, reason, recordNum, count);
    1074           0 :         }
    1075             : 
    1076             :         /**
    1077             :          * Methods used to check more extensively if the integrity of various
    1078             :          * types of data blocks are Ok and returns true in that case.
    1079             :          * These can be slow and should generally only be used for debugging.
    1080             :          * The methods are able to return multiple reasons for the problems related
    1081             :          * to the data block under test.
    1082             :          */
    1083             :         static bool IntegrityOk(
    1084             :                         const AliHLTMUONTriggerRecordStruct& tr,
    1085             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1086             :                 );
    1087             :         
    1088             :         static bool IntegrityOk(
    1089             :                         const AliHLTMUONTriggerRecordsBlockStruct& block,
    1090             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1091             :                         AliHLTUInt32_t& reasonCount
    1092             :                 );
    1093             :         
    1094             :         static bool IntegrityOk(
    1095             :                         const AliHLTMUONTrigRecInfoStruct& trigInfo,
    1096             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1097             :                 );
    1098             :         
    1099             :         static bool IntegrityOk(
    1100             :                         const AliHLTMUONTrigRecsDebugBlockStruct& block,
    1101             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1102             :                         AliHLTUInt32_t& reasonCount
    1103             :                 );
    1104             :         
    1105             :         static bool IntegrityOk(
    1106             :                         const AliHLTMUONRecHitStruct& hit,
    1107             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1108             :                 );
    1109             :         
    1110             :         static bool IntegrityOk(
    1111             :                         const AliHLTMUONRecHitsBlockStruct& block,
    1112             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1113             :                         AliHLTUInt32_t& reasonCount
    1114             :                 );
    1115             :         
    1116             :         static bool IntegrityOk(
    1117             :                         const AliHLTMUONClusterStruct& cluster,
    1118             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1119             :                 );
    1120             :         
    1121             :         static bool IntegrityOk(
    1122             :                         const AliHLTMUONClustersBlockStruct& block,
    1123             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1124             :                         AliHLTUInt32_t& reasonCount
    1125             :                 );
    1126             :         
    1127             :         static bool IntegrityOk(
    1128             :                         const AliHLTMUONChannelStruct& channel,
    1129             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1130             :                 );
    1131             :         
    1132             :         static bool IntegrityOk(
    1133             :                         const AliHLTMUONChannelsBlockStruct& block,
    1134             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1135             :                         AliHLTUInt32_t& reasonCount
    1136             :                 );
    1137             :         
    1138             :         static bool IntegrityOk(
    1139             :                         const AliHLTMUONMansoTrackStruct& track,
    1140             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1141             :                 );
    1142             :         
    1143             :         static bool IntegrityOk(
    1144             :                         const AliHLTMUONMansoTracksBlockStruct& block,
    1145             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1146             :                         AliHLTUInt32_t& reasonCount
    1147             :                 );
    1148             :         
    1149             :         static bool IntegrityOk(
    1150             :                         const AliHLTMUONMansoCandidateStruct& candidate,
    1151             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1152             :                 );
    1153             :         
    1154             :         static bool IntegrityOk(
    1155             :                         const AliHLTMUONMansoCandidatesBlockStruct& block,
    1156             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1157             :                         AliHLTUInt32_t& reasonCount
    1158             :                 );
    1159             :         
    1160             :         static bool IntegrityOk(
    1161             :                         const AliHLTMUONTrackStruct& track,
    1162             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1163             :                 );
    1164             :         
    1165             :         static bool IntegrityOk(
    1166             :                         const AliHLTMUONTracksBlockStruct& block,
    1167             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1168             :                         AliHLTUInt32_t& reasonCount
    1169             :                 );
    1170             :         
    1171             :         static bool IntegrityOk(
    1172             :                         const AliHLTMUONTrackDecisionStruct& decision,
    1173             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1174             :                 );
    1175             :         
    1176             :         static bool IntegrityOk(
    1177             :                         const AliHLTMUONSinglesDecisionBlockStruct& block,
    1178             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1179             :                         AliHLTUInt32_t& reasonCount
    1180             :                 );
    1181             :         
    1182             :         static bool IntegrityOk(
    1183             :                         const AliHLTMUONPairDecisionStruct& decision,
    1184             :                         WhyNotValid* reason, AliHLTUInt32_t& reasonCount
    1185             :                 );
    1186             :         
    1187             :         static bool IntegrityOk(
    1188             :                         const AliHLTMUONPairsDecisionBlockStruct& block,
    1189             :                         WhyNotValid* reason, AliHLTUInt32_t* recordNum,
    1190             :                         AliHLTUInt32_t& reasonCount
    1191             :                 );
    1192             :         
    1193             :         /**
    1194             :          * Returns true if the \em recordNum in the corresponding IntegrityOk method
    1195             :          * would have been set, if it returned false and a reason was set.
    1196             :          * This helper method makes it easy to test if the \em recordNum parameter
    1197             :          * is filled with a valid value or not.
    1198             :          */
    1199             :         static bool RecordNumberWasSet(WhyNotValid reason);
    1200             : 
    1201             : private:
    1202             : 
    1203             :         // Should never have to create, copy or destroy this object.
    1204             :         AliHLTMUONUtils() {}
    1205             :         AliHLTMUONUtils(const AliHLTMUONUtils& obj);
    1206           0 :         virtual ~AliHLTMUONUtils() {}
    1207             :         AliHLTMUONUtils& operator = (const AliHLTMUONUtils& obj);
    1208             :         
    1209           6 :         ClassDef(AliHLTMUONUtils, 0);  // Interface for helpful dHLT utility methods.
    1210             : };
    1211             : 
    1212             : //_____________________________________________________________________________
    1213             : 
    1214             : inline std::ostream& operator << (std::ostream& stream, AliHLTMUONUtils::WhyNotValid reason)
    1215             : {
    1216             :         /// Stream operator for the WhyNotValid enumeration for usage with
    1217             :         /// std::ostream classes. Allows usages such as:
    1218             :         /// AliHLTMUONUtils::WhyNotValid r; std::cout << r;
    1219             :         
    1220             :         stream << AliHLTMUONUtils::FailureReasonToString(reason);
    1221             :         return stream;
    1222             : }
    1223             : 
    1224             : //_____________________________________________________________________________
    1225             : 
    1226             : // Since c++ is missing a finally "keyword" we define one. Its usage is identical
    1227             : // to a try..finally statement in Java etc.. however, since it is officialy a macro
    1228             : // one must use the ( ) brackets instead of { }
    1229             : // If the compiler supports __finally use it otherwise make our own.
    1230             : #if defined(__BORLANDC__)
    1231             : #       define finally(str) __finally{str}
    1232             : #else
    1233             : #       define finally(code) \
    1234             :                 catch(...) \
    1235             :                 { \
    1236             :                         code \
    1237             :                         throw; \
    1238             :                 }; \
    1239             :                 code
    1240             : #endif // __BORLANDC__
    1241             : 
    1242             : // Here we define the DebugTrace(message) macro for easy embedding of debug
    1243             : // information into the dimuon HLT code. Its usage is meant to be for generating
    1244             : // traces of the program which are only useful during full scale debugging.
    1245             : // Log messages should use the standard HLT logging mechanisms.
    1246             : // The output is only generated in programs compiled with the DEBUGTRACE directive
    1247             : // defined. Here is a usage example:
    1248             : //
    1249             : //  // statements...
    1250             : //  DebugTrace("some debug information.");
    1251             : //  // statements...
    1252             : //
    1253             : // One can also use C++ ostream operators and manipulators like so:
    1254             : //
    1255             : //  // statements...
    1256             : //  int x, y;
    1257             : //  DebugTrace("x = " << x << " and y = 0x" << std::hex << y );
    1258             : //  // statements...
    1259             : //
    1260             : #ifdef DEBUGTRACE
    1261             : #       include <iostream>
    1262             : #       define DebugTrace(message) {std::cout << message << std::endl;}
    1263             : #else // DEBUG
    1264             : #       define DebugTrace(message)
    1265             : #endif // DEBUG
    1266             : 
    1267             : 
    1268             : #endif // ALIHLTMUONUTILS_H

Generated by: LCOV version 1.11