diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/python/MTCalibPebConfig.py b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/python/MTCalibPebConfig.py index 71f3aa911236a4cc42c74dd555a229f650f1b497..ffb90908cb75b923bfee7019eb5016522dd18a92 100644 --- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/python/MTCalibPebConfig.py +++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/python/MTCalibPebConfig.py @@ -91,6 +91,7 @@ class MTCalibPebHypoOptions: self.NumBurnCycles = 0 self.BurnTimeRandomly = True self.Crunch = False + self.CheckDataConsistency = False self.ROBAccessDict = rob_access_dict self.TimeBetweenROBReqMillisec = 0 self.PEBROBList = [] @@ -168,6 +169,7 @@ def make_hypo_tool(name, options=default_options): hypo_tool.NumBurnCycles = options.NumBurnCycles hypo_tool.BurnTimeRandomly = options.BurnTimeRandomly hypo_tool.Crunch = options.Crunch + hypo_tool.CheckDataConsistency = options.CheckDataConsistency hypo_tool.ROBAccessDict = options.ROBAccessDict hypo_tool.TimeBetweenROBReqMillisec = options.TimeBetweenROBReqMillisec hypo_tool.PEBROBList = options.PEBROBList diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/share/MTCalibPeb.py b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/share/MTCalibPeb.py index caddc643a3195c0d1eb61e30db64de61c02790dd..808441e7d502ebe066cf82dce29fd807cbb7b897 100644 --- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/share/MTCalibPeb.py +++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/share/MTCalibPeb.py @@ -21,6 +21,7 @@ MTCalibPebConfig.default_options.BurnTimePerCycleMillisec = get_opt('BurnTimePer MTCalibPebConfig.default_options.NumBurnCycles = get_opt('NumBurnCycles', 10) MTCalibPebConfig.default_options.BurnTimeRandomly = get_opt('BurnTimeRandomly', True) MTCalibPebConfig.default_options.Crunch = get_opt('Crunch', False) +MTCalibPebConfig.default_options.CheckDataConsistency = get_opt('CheckDataConsistency', False) MTCalibPebConfig.default_options.ROBAccessDict = get_opt('ROBAccessDict', MTCalibPebConfig.rob_access_dict) MTCalibPebConfig.default_options.TimeBetweenROBReqMillisec = get_opt('TimeBetweenROBReqMillisec', 0) MTCalibPebConfig.default_options.PEBROBList = get_opt('PEBROBList', []) diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx index 082c838133d6d86e44cc542c7aa7aa9a1eedbdd0..f9f4fa51719847ab241d6e8d64d6336700888ff2 100644 --- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx +++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.cxx @@ -229,8 +229,22 @@ StatusCode MTCalibPebHypoTool::decide(const MTCalibPebHypoTool::Input& input) co IROBDataProviderSvc::VROBFRAG robFragments; m_robDataProviderSvc->getROBData(input.eventContext, robs, robFragments, name()+"-GET"); ATH_MSG_DEBUG("Number of ROBs retrieved: " << robFragments.size()); - if (!robFragments.empty()) + if (!robFragments.empty()) { ATH_MSG_DEBUG("List of ROBs found: " << std::endl << format(robFragments)); + } + if (m_checkDataConsistency.value()) { + for (const IROBDataProviderSvc::ROBF* rob : robFragments) { + try { + if (!rob->check_rob() || !rob->check_rod()) { + ATH_MSG_ERROR("Data consistency check failed"); + } + } + catch (const std::exception& ex) { + ATH_MSG_ERROR("Data consistency check failed: " << ex.what()); + } + ATH_MSG_DEBUG("Data consistency check passed for ROB 0x" << std::hex << rob->rob_source_id() << std::dec); + } + } } if (instr.type == ReqType::COL) { // Event building diff --git a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h index 9852ace6ad51eaf9f7af93a1e9926814a6faa784..44dd8e207415b83109e9397d3658656015904be5 100644 --- a/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h +++ b/HLT/Trigger/TrigControl/TrigExamples/TrigExPartialEB/src/MTCalibPebHypoTool.h @@ -84,6 +84,10 @@ private: this, "Crunch", false, "Crunch CPU instead of sleeping" }; + Gaudi::Property<bool> m_checkDataConsistency { + this, "CheckDataConsistency", false, + "Perform consistency checks for all retrieved ROB data" + }; Gaudi::Property<std::map<std::string,std::vector<uint32_t> > > m_robAccessDictProp { this, "ROBAccessDict", {}, "Dictionary of prefetch/retrieve operations with given ROB IDs. The value is a vector of ROB IDs. "