+const char* AliHLTMUONUtils::DataBlockTypeToString(AliHLTMUONDataBlockType type)
+{
+ /// Converts a type ID to a type string compatible with
+ /// HLT data types.
+
+ static char str[kAliHLTComponentDataTypefIDsize+1];
+ AliHLTComponentDataType t;
+ switch (type)
+ {
+ case kTriggerRecordsDataBlock:
+ t = AliHLTMUONConstants::TriggerRecordsBlockDataType();
+ break;
+ case kTrigRecsDebugDataBlock:
+ t = AliHLTMUONConstants::TrigRecsDebugBlockDataType();
+ break;
+ case kRecHitsDataBlock:
+ t = AliHLTMUONConstants::RecHitsBlockDataType();
+ break;
+ case kClustersDataBlock:
+ t = AliHLTMUONConstants::ClusterBlockDataType();
+ break;
+ case kChannelsDataBlock:
+ t = AliHLTMUONConstants::ChannelBlockDataType();
+ break;
+ case kMansoTracksDataBlock:
+ t = AliHLTMUONConstants::MansoTracksBlockDataType();
+ break;
+ case kMansoCandidatesDataBlock:
+ t = AliHLTMUONConstants::MansoCandidatesBlockDataType();
+ break;
+ case kTracksDataBlock:
+ t = AliHLTMUONConstants::TracksBlockDataType();
+ break;
+ case kSinglesDecisionDataBlock:
+ t = AliHLTMUONConstants::SinglesDecisionBlockDataType();
+ break;
+ case kPairsDecisionDataBlock:
+ t = AliHLTMUONConstants::PairsDecisionBlockDataType();
+ break;
+ default:
+ return "UNKNOWN";
+ }
+ memcpy(&str, &t.fID, kAliHLTComponentDataTypefIDsize);
+ // Must insert the NULL character to make this an ANSI C string.
+ str[kAliHLTComponentDataTypefIDsize] = '\0';
+ return &str[0];
+}
+
+
+const char* AliHLTMUONUtils::FailureReasonToString(WhyNotValid reason)
+{
+ /// This method converts the WhyNotValid enumeration to a string representation.
+
+ switch (reason)
+ {
+ case kNoReason: return "kNoReason";
+ case kHeaderContainsWrongType: return "kHeaderContainsWrongType";
+ case kHeaderContainsWrongRecordWidth: return "kHeaderContainsWrongRecordWidth";
+ case kInvalidIdValue: return "kInvalidIdValue";
+ case kInvalidTriggerIdValue: return "kInvalidTriggerIdValue";
+ case kInvalidTrackIdValue: return "kInvalidTrackIdValue";
+ case kReservedBitsNotZero: return "kReservedBitsNotZero";
+ case kParticleSignBitsNotValid: return "kParticleSignBitsNotValid";
+ case kHitNotMarkedAsNil: return "kHitNotMarkedAsNil";
+ case kInvalidDetElementNumber: return "kInvalidDetElementNumber";
+ case kInvalidChamberNumber: return "kInvalidChamberNumber";
+ case kHitIsNil: return "kHitIsNil";
+ case kInvalidChannelCountB: return "kInvalidChannelCountB";
+ case kInvalidChannelCountNB: return "kInvalidChannelCountNB";
+ case kInvalidChargeB: return "kInvalidChargeB";
+ case kInvalidChargeNB: return "kInvalidChargeNB";
+ case kInvalidBusPatchId: return "kInvalidBusPatchId";
+ case kInvalidManuId: return "kInvalidManuId";
+ case kInvalidChannelAddress: return "kInvalidChannelAddress";
+ case kInvalidSignal: return "kInvalidSignal";
+ case kDataWordDifferent: return "kDataWordDifferent";
+ case kChiSquareInvalid: return "kChiSquareInvalid";
+ case kMomentumVectorNotZero: return "kMomentumVectorNotZero";
+ case kMomentumParamsNotZero: return "kMomentumParamsNotZero";
+ case kDCAVertexNotZero: return "kDCAVertexNotZero";
+ case kRoiRadiusInvalid: return "kRoiRadiusInvalid";
+ case kHitNotWithinRoi: return "kHitNotWithinRoi";
+ case kPtValueNotValid: return "kPtValueNotValid";
+ case kPairTrackIdsAreIdentical: return "kPairTrackIdsAreIdentical";
+ case kMassValueNotValid: return "kMassValueNotValid";
+ case kLowPtCountInvalid: return "kLowPtCountInvalid";
+ case kHighPtCountInvalid: return "kHighPtCountInvalid";
+ case kFoundDuplicateIDs: return "kFoundDuplicateIDs";
+ case kFoundDuplicateHits: return "kFoundDuplicateHits";
+ case kFoundDuplicateTriggers: return "kFoundDuplicateTriggers";
+ default: return "INVALID";
+ }
+}
+
+
+const char* AliHLTMUONUtils::FailureReasonToMessage(WhyNotValid reason)
+{
+ /// This method returns a string containing a user readable message explaining
+ /// the reason for failure described by the WhyNotValid enumeration.
+
+ switch (reason)
+ {
+ case kNoReason:
+ return "There was no problem with the data block.";
+ case kHeaderContainsWrongType:
+ return "The common data header contains an incorrect type"
+ " identifier.";
+ case kHeaderContainsWrongRecordWidth:
+ return "The common data header contains an incorrect data"
+ " record width.";
+ case kInvalidIdValue:
+ return "The structure identifier does not have a valid value.";
+ case kInvalidTriggerIdValue:
+ return "The trigger structure identifier does not have a valid"
+ " value.";
+ case kInvalidTrackIdValue:
+ return "The track structure identifier does not have a valid"
+ " value.";
+ case kReservedBitsNotZero:
+ return "Reserved bits have not been set to zero.";
+ case kParticleSignBitsNotValid:
+ return "The particle sign bits are not a valid value.";
+ case kHitNotMarkedAsNil:
+ return "A hit was marked as not found, but the corresponding hit"
+ " structure was not set to nil.";
+ case kInvalidDetElementNumber:
+ return "An invalid detector element ID was found.";
+ case kInvalidChamberNumber:
+ return "An invalid chamber number was found.";
+ case kHitIsNil:
+ return "The hit cannot be set to a nil value.";
+ case kInvalidChannelCountB:
+ return "The number of channels in the bending plane indicated"
+ " is zero or outside the valid range.";
+ case kInvalidChannelCountNB:
+ return "The number of channels in the non-bending plane indicated"
+ " is zero or outside the valid range.";
+ case kInvalidChargeB:
+ return "The charge in the bending plane does not have a valid value.";
+ case kInvalidChargeNB:
+ return "The charge in the non-bending plane does not have a valid value.";
+ case kInvalidBusPatchId:
+ return "The bus patch identifier is outside the valid range.";
+ case kInvalidManuId:
+ return "The MANU identifier is outside the valid range.";
+ case kInvalidChannelAddress:
+ return "The MANU channel address is outside the valid range.";
+ case kInvalidSignal:
+ return "The ADC signal value is outside the valid range.";
+ case kDataWordDifferent:
+ return "The raw data word is different from the unpacked values.";
+ case kChiSquareInvalid:
+ return "The chi squared value must be a positive value or -1"
+ " indicating no fit or a fitting error.";
+ case kMomentumVectorNotZero:
+ return "The chi sqaured value is set to -1 indicating momentum"
+ " was not fitted, but the momentum vector was not zero.";
+ case kMomentumParamsNotZero:
+ return "The chi sqaured value is set to -1 indicating the track"
+ " was not fitted, but the fitted momentum parameters are not zero.";
+ case kDCAVertexNotZero:
+ return "The chi sqaured value is set to -1 indicating the track"
+ " was not fitted, but the DCA vertex is not zero.";
+ case kRoiRadiusInvalid:
+ return "The region of interest radius is invalid.";
+ case kHitNotWithinRoi:
+ return "A tracks hit is not within the corresponding region"
+ " of interest.";
+ case kPtValueNotValid:
+ return "The pT value is not positive, nor -1 indicating an"
+ " invalid value.";
+ case kPairTrackIdsAreIdentical:
+ return "The track identifiers of the track pair are identical.";
+ case kMassValueNotValid:
+ return "The invariant mass value is not positive, nor -1"
+ " indicating an invalid value.";
+ case kLowPtCountInvalid:
+ return "The low pT trigger count is greater than 2,"
+ " which is invalid.";
+ case kHighPtCountInvalid:
+ return "The high pT trigger count is greater than 2,"
+ " which is invalid.";
+ case kFoundDuplicateIDs:
+ return "Found duplicate data record identifiers, but they"
+ " should all be unique.";
+ case kFoundDuplicateHits:
+ return "Found duplicate hit structures, but they should all"
+ " be unique.";
+ case kFoundDuplicateTriggers:
+ return "Found duplicate trigger decisions.";
+ default:
+ return "UNKNOWN REASON CODE";
+ }
+}
+
+
+bool AliHLTMUONUtils::RecordNumberWasSet(WhyNotValid reason)
+{
+ /// Returns true if the \em recordNum in the corresponding IntegrityOk method
+ /// would have been set, if it returned false and a reason was set.
+ /// This helper method makes it easy to test if the \em recordNum parameter
+ /// is filled with a valid value or not.
+ /// \param reason The reason code as returned by the IntegrityOk method.
+ /// \returns true if the \em recordNum parameter was set for the given
+ /// reason code.
+
+ switch (reason)
+ {
+ case kInvalidIdValue:
+ case kInvalidTriggerIdValue:
+ case kInvalidTrackIdValue:
+ case kReservedBitsNotZero:
+ case kParticleSignBitsNotValid:
+ case kHitNotMarkedAsNil:
+ case kInvalidDetElementNumber:
+ case kInvalidChamberNumber:
+ case kHitIsNil:
+ case kInvalidChannelCountB:
+ case kInvalidChannelCountNB:
+ case kInvalidChargeB:
+ case kInvalidChargeNB:
+ case kInvalidBusPatchId:
+ case kInvalidManuId:
+ case kInvalidChannelAddress:
+ case kInvalidSignal:
+ case kDataWordDifferent:
+ case kChiSquareInvalid:
+ case kPtValueNotValid:
+ case kPairTrackIdsAreIdentical:
+ case kMassValueNotValid:
+ case kLowPtCountInvalid:
+ case kHighPtCountInvalid:
+ return true;
+ default: return false;
+ }
+}
+
+