diff --git a/InnerDetector/InDetConditions/InDetConditionsSummaryService/InDetConditionsSummaryService/IInDetConditionsTool.h b/InnerDetector/InDetConditions/InDetConditionsSummaryService/InDetConditionsSummaryService/IInDetConditionsTool.h
index 70a80995c9ea4071502365ae17f3ca676f5dbfc0..d3f663ec1b04c96412b912d9c104b07cf6a62e77 100644
--- a/InnerDetector/InDetConditions/InDetConditionsSummaryService/InDetConditionsSummaryService/IInDetConditionsTool.h
+++ b/InnerDetector/InDetConditions/InDetConditionsSummaryService/InDetConditionsSummaryService/IInDetConditionsTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -53,6 +53,7 @@ public:
   virtual bool hasBSError(const IdentifierHash& elementHash, const EventContext& ctx) const =0;
   virtual bool hasBSError(const IdentifierHash& elementHash, Identifier elementId, const EventContext& ctx) const =0;
   virtual uint64_t getBSErrorWord(const IdentifierHash& elementHash, const EventContext& ctx) const =0;
+  virtual uint64_t getBSErrorWord(const IdentifierHash& elementHash, const int index, const EventContext& ctx) const =0;
 
 };
 
diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.h b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.h
index c2c2cd6087151fa583342d10ca7fef8f38ccaf0b..7dacac1a898a54e9ed321c379a23c8d73d20c840 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.h
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelConfigCondAlg.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */ 
 /**
  * @file PixelConditionsAlgorithms/PixelConfigCondAlg.h
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt b/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
index b76593f2e4a158ece54aee8d4f042b04c74d14fc..ff8a5f0dbca253208196ea5f28bf9f8cbaf612ff 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
 # Declare the package name:
 atlas_subdir( PixelConditionsTools )
@@ -13,7 +13,7 @@ atlas_add_library( PixelConditionsToolsLib
 atlas_add_component( PixelConditionsTools
                      src/*.cxx
                      src/components/*.cxx
-                     LINK_LIBRARIES AthenaBaseComps AthenaKernel CxxUtils GaudiKernel Identifier InDetByteStreamErrors InDetConditionsSummaryService InDetIdentifier PixelCablingLib PixelConditionsData PixelConditionsToolsLib StoreGateLib )
+                     LINK_LIBRARIES AthenaBaseComps AthenaKernel CxxUtils GaudiKernel Identifier InDetByteStreamErrors InDetConditionsSummaryService InDetIdentifier PixelCablingLib PixelConditionsData InDetReadoutGeometry PixelReadoutGeometry PixelConditionsToolsLib StoreGateLib )
 
 # Install files from the package:
 atlas_install_joboptions( share/*.py )
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py
index 1af6d831107f9d26addf62145143952e5561507d..fe52b0b93515da8c954400df6c2a099dab3c912e 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/python/PixelConditionsSummaryConfig.py
@@ -1,6 +1,6 @@
 """Define a function to configure PixelConditionsSummaryCfg
 
-Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 """
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 from AthenaConfiguration.ComponentFactory import CompFactory
@@ -12,7 +12,8 @@ from PixelConditionsAlgorithms.PixelConditionsConfig import (
 def PixelConditionsSummaryCfg(flags, name="PixelConditionsSummary", **kwargs):
     """Return configured ComponentAccumulator with tool for Pixel Conditions"""
     acc = ComponentAccumulator()
-    kwargs.setdefault("UseByteStream", not flags.Input.isMC)
+    kwargs.setdefault("UseByteStreamFEI4", not flags.Input.isMC)
+    kwargs.setdefault("UseByteStreamFEI3", not flags.Input.isMC)
     acc.merge(PixelDCSCondStateAlgCfg(flags))
     acc.merge(PixelDCSCondStatusAlgCfg(flags))
     acc.merge(PixelDeadMapCondAlgCfg(flags))
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx
index ae27d679a2e615e0f861b7673da94aeebf44fff4..36296cbb2994139daed4542b8c7df017634c8885 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.cxx
@@ -1,20 +1,20 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "PixelConditionsSummaryTool.h"
+#include "InDetReadoutGeometry/SiDetectorElement.h"
+#include "PixelReadoutGeometry/PixelModuleDesign.h"
 
 PixelConditionsSummaryTool::PixelConditionsSummaryTool(const std::string& type, const std::string& name, const IInterface* parent)
   :AthAlgTool(type, name, parent),
-  m_pixelID(nullptr),
-  m_useByteStream(false)
+  m_pixelID(nullptr)
 {
   m_isActiveStatus.push_back("OK");
   m_isActiveStates.push_back("READY");
 
   declareProperty("IsActiveStatus", m_isActiveStatus);
   declareProperty("IsActiveStates", m_isActiveStates);
-  declareProperty("UseByteStream", m_useByteStream, "Switch for usage of the ByteStream error service");
 }
 
 PixelConditionsSummaryTool::~PixelConditionsSummaryTool(){}
@@ -24,13 +24,17 @@ StatusCode PixelConditionsSummaryTool::initialize(){
 
   ATH_CHECK(m_condDCSStateKey.initialize());
   ATH_CHECK(m_condDCSStatusKey.initialize());
-  ATH_CHECK(m_BSErrContReadKey.initialize(m_useByteStream && !m_BSErrContReadKey.empty()));
 
+//  const EventContext& ctx{Gaudi::Hive::currentContext()};
+//  bool useByteStream = (SG::ReadCondHandle<PixelModuleData>(m_configKey,ctx)->getUseByteStreamErrFEI4() || SG::ReadCondHandle<PixelModuleData>(m_configKey,ctx)->getUseByteStreamErrFEI3());
+  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3);
+//  ATH_CHECK(m_BSErrContReadKey.initialize(useByteStream && !m_BSErrContReadKey.empty()));
+  ATH_CHECK(m_BSErrContReadKey.initialize(useByteStream && !m_BSErrContReadKey.empty()));
   ATH_CHECK(detStore()->retrieve(m_pixelID,"PixelID"));
-
   ATH_CHECK(m_condTDAQKey.initialize( !m_condTDAQKey.empty() ));
   ATH_CHECK(m_condDeadMapKey.initialize());
   ATH_CHECK(m_pixelCabling.retrieve());
+  ATH_CHECK(m_pixelDetEleCollKey.initialize());
  
   for (unsigned int istate=0; istate<m_isActiveStates.size(); istate++) {
     if      (m_isActiveStates[istate]=="READY")      { m_activeState.push_back(PixelDCSStateData::DCSModuleState::READY); }
@@ -83,14 +87,34 @@ PixelConditionsSummaryTool::IDCCacheEntry* PixelConditionsSummaryTool::getCacheE
 }
 
 uint64_t PixelConditionsSummaryTool::getBSErrorWord(const IdentifierHash& moduleHash, const EventContext& ctx) const {
-  if (!m_useByteStream) { return 0; }
+  return getBSErrorWord(moduleHash, moduleHash, ctx);
+}
+
+uint64_t PixelConditionsSummaryTool::getBSErrorWord(const IdentifierHash& moduleHash, const int index, const EventContext& ctx) const {
+
+  if (moduleHash>=m_pixelID->wafer_hash_max()) {
+    ATH_MSG_WARNING("invalid moduleHash : " << moduleHash << " exceed maximum hash id: " << m_pixelID->wafer_hash_max());
+    return 0;
+  }
+
+  SG::ReadCondHandle<InDetDD::SiDetectorElementCollection> pixelDetEleHandle(m_pixelDetEleCollKey, ctx);
+  const InDetDD::SiDetectorElementCollection* elements(*pixelDetEleHandle);
+  if (not pixelDetEleHandle.isValid() or elements==nullptr) {
+    ATH_MSG_WARNING(m_pixelDetEleCollKey.fullKey() << " is not available.");
+    return 0;
+  }
+  const InDetDD::SiDetectorElement *element = elements->getDetectorElement(moduleHash);
+  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
+
+  if (!m_useByteStreamFEI4 && p_design->getReadoutTechnology()==InDetDD::PixelModuleDesign::FEI4) { return 0; }
+  if (!m_useByteStreamFEI3 && p_design->getReadoutTechnology()==InDetDD::PixelModuleDesign::FEI3) { return 0; }
 
   std::scoped_lock<std::mutex> lock{*m_cacheMutex.get(ctx)};
   auto idcCachePtr = getCacheEntry(ctx)->IDCCache;
   if (idcCachePtr==nullptr) {
     ATH_MSG_ERROR("PixelConditionsSummaryTool No cache! " );
   }
-  uint64_t word = (uint64_t)idcCachePtr->retrieve(moduleHash);
+  uint64_t word = (uint64_t)idcCachePtr->retrieve(index);
   return word<m_missingErrorInfo ? word : 0;
 }
 
@@ -105,8 +129,6 @@ bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, Id
 }
 
 bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, const EventContext& ctx) const {
-  if (!m_useByteStream) { return false; }
-
   uint64_t word = getBSErrorWord(moduleHash,ctx);
   if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::TruncatedROB))      { return true; }
   if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::MaskedROB))         { return true; }
@@ -124,8 +146,6 @@ bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, co
 }
 
 bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, Identifier pixid, const EventContext& ctx) const {
-  if (!m_useByteStream) { return false; }
-
   if (hasBSError(moduleHash, ctx)) { return true; }
 
   int maxHash = m_pixelID->wafer_hash_max();
@@ -133,7 +153,7 @@ bool PixelConditionsSummaryTool::hasBSError(const IdentifierHash& moduleHash, Id
   int chFE = m_pixelCabling->getFE(&pixid,moduleID);
 
   int indexFE = (1+chFE)*maxHash+(int)moduleHash;    // (FE_channel+1)*2048 + moduleHash
-  uint64_t word = getBSErrorWord(indexFE,ctx);
+  uint64_t word = getBSErrorWord(moduleHash,indexFE,ctx);
   if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::Preamble))          { return true; }
   if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::TimeOut))           { return true; }
   if (PixelByteStreamErrors::hasError(word,PixelByteStreamErrors::LVL1ID))            { return true; }
@@ -170,7 +190,8 @@ bool PixelConditionsSummaryTool::isActive(const IdentifierHash& moduleHash, cons
 
   // The index array is defined in PixelRawDataProviderTool::SizeOfIDCInDetBSErrContainer()
   // Here, 52736 is a separator beween error flags and isActive flags.
-  if (m_useByteStream && getBSErrorWord(moduleHash+52736,ctx)!=1) { return false; }
+  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3);
+  if (useByteStream && getBSErrorWord(moduleHash,moduleHash+52736,ctx)!=1) { return false; }
 
   SG::ReadCondHandle<PixelDCSStateData> dcsstate_data(m_condDCSStateKey,ctx);
   bool isDCSActive = false;
@@ -190,7 +211,8 @@ bool PixelConditionsSummaryTool::isActive(const IdentifierHash& moduleHash, cons
 
   // The index array is defined in PixelRawDataProviderTool::SizeOfIDCInDetBSErrContainer()
   // Here, 52736 is a separator beween error flags and isActive flags.
-  if (m_useByteStream && getBSErrorWord(moduleHash+52736,ctx)!=1) { return false; }
+  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3);
+  if (useByteStream && getBSErrorWord(moduleHash,moduleHash+52736,ctx)!=1) { return false; }
 
   SG::ReadCondHandle<PixelDCSStateData> dcsstate_data(m_condDCSStateKey,ctx);
   bool isDCSActive = false;
@@ -233,7 +255,7 @@ bool PixelConditionsSummaryTool::isGood(const Identifier& elementId, const InDet
   Identifier moduleID       = m_pixelID->wafer_id(elementId);
   IdentifierHash moduleHash = m_pixelID->wafer_hash(moduleID);
 
-  if (m_useByteStream && hasBSError(moduleHash, ctx)) { return false; }
+  if (hasBSError(moduleHash, ctx)) { return false; }
 
   SG::ReadCondHandle<PixelDCSStateData> dcsstate_data(m_condDCSStateKey, ctx);
   bool isDCSActive = false;
@@ -255,7 +277,7 @@ bool PixelConditionsSummaryTool::isGood(const Identifier& elementId, const InDet
 
   if (h==InDetConditions::PIXEL_CHIP) {
     if (!checkChipStatus(moduleHash, elementId)) { return false; }
-    if (m_useByteStream && hasBSError(moduleHash, elementId, ctx)) { return false; }
+    if (hasBSError(moduleHash, elementId, ctx)) { return false; }
   }
 
   return true;
@@ -263,7 +285,7 @@ bool PixelConditionsSummaryTool::isGood(const Identifier& elementId, const InDet
 
 bool PixelConditionsSummaryTool::isGood(const IdentifierHash& moduleHash, const EventContext& ctx) const {
 
-  if (m_useByteStream && hasBSError(moduleHash, ctx)) { return false; }
+  if (hasBSError(moduleHash, ctx)) { return false; }
 
   SG::ReadCondHandle<PixelDCSStateData> dcsstate_data(m_condDCSStateKey, ctx);
   bool isDCSActive = false;
@@ -288,7 +310,7 @@ bool PixelConditionsSummaryTool::isGood(const IdentifierHash& moduleHash, const
 
 bool PixelConditionsSummaryTool::isGood(const IdentifierHash & moduleHash, const Identifier &elementId, const EventContext& ctx) const {
 
-  if (m_useByteStream && hasBSError(moduleHash, ctx)) { return false; }
+  if (hasBSError(moduleHash, ctx)) { return false; }
 
   SG::ReadCondHandle<PixelDCSStateData> dcsstate_data(m_condDCSStateKey, ctx);
   bool isDCSActive = false;
@@ -310,7 +332,7 @@ bool PixelConditionsSummaryTool::isGood(const IdentifierHash & moduleHash, const
 
   if (!checkChipStatus(moduleHash, elementId)) { return false; }
 
-  if (m_useByteStream && hasBSError(moduleHash, elementId, ctx)) { return false; }
+  if (hasBSError(moduleHash, elementId, ctx)) { return false; }
 
   return true;
 }
@@ -343,12 +365,7 @@ double PixelConditionsSummaryTool::goodFraction(const IdentifierHash & moduleHas
   for (int i=std::min(phiStart,phiEnd); i<=std::max(phiStart,phiEnd); i++) {
     for (int j=std::min(etaStart,etaEnd); j<=std::max(etaStart,etaEnd); j++) {
       if (checkChipStatus(moduleHash, m_pixelID->pixel_id(moduleID,i,j), ctx)) { 
-        if (m_useByteStream) {
-          if (!hasBSError(moduleHash, m_pixelID->pixel_id(moduleID,i,j), ctx)) { nGood++; }
-        }
-        else {
-          nGood++; 
-        }
+        if (!hasBSError(moduleHash, m_pixelID->pixel_id(moduleID,i,j), ctx)) { nGood++; }
       }
     }
   }
diff --git a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h
index ee460a28b423d10d98a8069b324b2591febcef7f..b015d1a0e473c7af57392e66dc5171220e881b3c 100644
--- a/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h
+++ b/InnerDetector/InDetConditions/PixelConditionsTools/src/PixelConditionsSummaryTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 /**
  * @file PixelConditionsTools/PixelConditionsSummaryTool.h
@@ -15,6 +15,7 @@
 
 #include "AthenaBaseComps/AthAlgTool.h"
 #include "GaudiKernel/ServiceHandle.h"
+#include "Gaudi/Property.h"
 #include "InDetConditionsSummaryService/IInDetConditionsTool.h"
 #include "AthenaKernel/SlotSpecificObj.h"
 
@@ -23,7 +24,6 @@
 #include "Identifier/IdentifierHash.h"
 #include "InDetIdentifier/PixelID.h"
 
-#include "PixelConditionsData/PixelModuleData.h"
 #include "PixelConditionsData/PixelDeadMapCondData.h"
 #include "PixelConditionsData/PixelDCSStateData.h"
 #include "PixelConditionsData/PixelDCSStatusData.h"
@@ -31,6 +31,7 @@
 #include "PixelConditionsData/PixelByteStreamErrors.h"
 #include "StoreGate/ReadCondHandleKey.h"
 #include "PixelCabling/IPixelCablingSvc.h"
+#include "InDetReadoutGeometry/SiDetectorElementCollection.h"
 
 class PixelConditionsSummaryTool: public AthAlgTool, public IInDetConditionsTool{
   public:
@@ -65,6 +66,7 @@ class PixelConditionsSummaryTool: public AthAlgTool, public IInDetConditionsTool
     virtual bool hasBSError(const IdentifierHash& moduleHash, const EventContext& ctx) const override final;
     virtual bool hasBSError(const IdentifierHash& moduleHash, Identifier pixid, const EventContext& ctx) const override final;
     virtual uint64_t getBSErrorWord(const IdentifierHash& moduleHash, const EventContext& ctx) const override final;
+    virtual uint64_t getBSErrorWord(const IdentifierHash& moduleHash, const int index, const EventContext& ctx) const override final;
 
     bool checkChipStatus(IdentifierHash moduleHash, Identifier pixid) const;
     bool checkChipStatus(IdentifierHash moduleHash, Identifier pixid, const EventContext& ctx) const;
@@ -77,7 +79,11 @@ class PixelConditionsSummaryTool: public AthAlgTool, public IInDetConditionsTool
     std::vector<int> m_activeState;
     std::vector<int> m_activeStatus;
 
-    bool m_useByteStream;
+    Gaudi::Property<bool> m_useByteStreamFEI4
+    {this, "UseByteStreamFEI4", false, "Switch of the ByteStream error for FEI4"};
+
+    Gaudi::Property<bool> m_useByteStreamFEI3
+    {this, "UseByteStreamFEI3", false, "Switch of the ByteStream error for FEI3"};
 
     SG::ReadCondHandleKey<PixelDCSStateData> m_condDCSStateKey
     {this, "PixelDCSStateCondData", "PixelDCSStateCondData", "Pixel FSM state key"};
@@ -97,6 +103,9 @@ class PixelConditionsSummaryTool: public AthAlgTool, public IInDetConditionsTool
     SG::ReadHandleKey<IDCInDetBSErrContainer>  m_BSErrContReadKey
     {this, "PixelByteStreamErrs", "PixelByteStreamErrs", "PixelByteStreamErrs container key"};
 
+    SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_pixelDetEleCollKey
+    {this, "PixelDetEleCollKey", "PixelDetectorElementCollection", "Key of SiDetectorElementCollection for Pixel"};
+
     const uint64_t m_missingErrorInfo{std::numeric_limits<uint64_t>::max()-3000000000};
 
     mutable SG::SlotSpecificObj<std::mutex> m_cacheMutex ATLAS_THREAD_SAFE;
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.cxx b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.cxx
index 931263fb47de037451d9cbf2baff7fb8e1c0c8b1..3b4b180a0a169106fe5ecb3ed7abd0f43fd12f09 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.cxx
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -188,3 +188,9 @@ SCT_ConditionsSummaryTool::getBSErrorWord(const IdentifierHash& /*moduleHash*/,
   return 0;
 }
 
+uint64_t
+SCT_ConditionsSummaryTool::getBSErrorWord(const IdentifierHash& /*moduleHash*/, const int /*index*/, const EventContext& /*ctx*/) const {
+  ATH_MSG_WARNING("getBSErrorWord() is not implemented for SCT_ConditionsSummaryTool");
+  return 0;
+}
+
diff --git a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.h b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.h
index c6baa8060ae892dfba3f36f469610a29c89f5731..f43ce30ef00fc0ea6dd3d870c1446e98b548c799 100644
--- a/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.h
+++ b/InnerDetector/InDetConditions/SCT_ConditionsTools/src/SCT_ConditionsSummaryTool.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -65,6 +65,7 @@ public:
   virtual bool hasBSError(const IdentifierHash& elementHash, const EventContext& ctx) const override;
   virtual bool hasBSError(const IdentifierHash& elementHash, Identifier elementId, const EventContext& ctx) const override;
   virtual uint64_t getBSErrorWord(const IdentifierHash& moduleHash, const EventContext& ctx) const  override;
+  virtual uint64_t getBSErrorWord(const IdentifierHash& moduleHash, const int index, const EventContext& ctx) const  override;
   //@}
 private:
   StringArrayProperty m_reportingTools; //!< list of tools to be used
diff --git a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
index 8009a7a76b5348469e390f2444fe56421a1da452..06d51e0bdc64734455876fd5e2acd8e4f809670a 100644
--- a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
+++ b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py
@@ -167,7 +167,8 @@ def PixelConditionsSummaryToolCfg(flags, name = "InDetPixelConditionsSummaryTool
     #FIXME - fix the duplication in TrigInDetConfig.py and PixelConditionsSummaryConfig.py
     from PixelConditionsAlgorithms.PixelConditionsConfig import PixelConfigCondAlgCfg, PixelDCSCondStateAlgCfg, PixelDCSCondStatusAlgCfg, PixelDeadMapCondAlgCfg
 
-    kwargs.setdefault( "UseByteStream", not flags.Input.isMC)
+    kwargs.setdefault( "UseByteStreamFEI4", not flags.Input.isMC)
+    kwargs.setdefault( "UseByteStreamFEI3", not flags.Input.isMC)
 
     if flags.InDet.usePixelDCS:
         kwargs.setdefault( "IsActiveStates", [ 'READY', 'ON', 'UNKNOWN', 'TRANSITION', 'UNDEFINED' ] )
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
index 279efe9963c89e12ab0ed0e35693d18fec5a8f29..6b392f0814120161eb3a794d0a36a09815d4c962 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 
 from AthenaCommon import CfgMgr
 from Digitization.DigitizationFlags import digitizationFlags
@@ -69,7 +69,9 @@ def SensorSimTool(name="SensorSimTool", **kwargs):
 
 def FrontEndSimTool(name="FrontEndSimTool", **kwargs):
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
-    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool", UseByteStream=False)
+    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
+                                                                 UseByteStreamFEI4=False,
+                                                                 UseByteStreamFEI3=False)
     kwargs.setdefault("PixelConditionsSummaryTool", pixelConditionsSummaryToolSetup)
     return CfgMgr.FrontEndSimTool(name, **kwargs)
 
@@ -87,7 +89,9 @@ def BarrelFEI4SimTool(name="BarrelFEI4SimTool", **kwargs):
     kwargs.setdefault("BarrelEC", 0)
     kwargs.setdefault("DoNoise", digitizationFlags.doInDetNoise.get_Value())
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
-    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool", UseByteStream=False)
+    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
+                                                                 UseByteStreamFEI4=False,
+                                                                 UseByteStreamFEI3=False)
     kwargs.setdefault("PixelConditionsSummaryTool", pixelConditionsSummaryToolSetup)
     return CfgMgr.FEI4SimTool(name, **kwargs)
 
@@ -95,21 +99,27 @@ def DBMFEI4SimTool(name="DBMFEI4SimTool", **kwargs):
     kwargs.setdefault("BarrelEC", 4)
     kwargs.setdefault("DoNoise", digitizationFlags.doInDetNoise.get_Value())
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
-    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool", UseByteStream=False)
+    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
+                                                                 UseByteStreamFEI4=False,
+                                                                 UseByteStreamFEI3=False)
     kwargs.setdefault("PixelConditionsSummaryTool", pixelConditionsSummaryToolSetup)
     return CfgMgr.FEI4SimTool(name, **kwargs)
 
 def BarrelFEI3SimTool(name="BarrelFEI3SimTool", **kwargs):
     kwargs.setdefault("BarrelEC", 0)
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
-    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool", UseByteStream=False)
+    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
+                                                                 UseByteStreamFEI4=False,
+                                                                 UseByteStreamFEI3=False)
     kwargs.setdefault("PixelConditionsSummaryTool", pixelConditionsSummaryToolSetup)
     return CfgMgr.FEI3SimTool(name, **kwargs)
 
 def EndcapFEI3SimTool(name="EndcapFEI3SimTool", **kwargs):
     kwargs.setdefault("BarrelEC", 2)
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
-    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool", UseByteStream=False)
+    pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
+                                                                 UseByteStreamFEI4=False,
+                                                                 UseByteStreamFEI3=False)
     kwargs.setdefault("PixelConditionsSummaryTool", pixelConditionsSummaryToolSetup)
     return CfgMgr.FEI3SimTool(name, **kwargs)
 
diff --git a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
index 3926185870eab9d66c243daceef581753e25cc23..471a2b4b37089aa6093f2c29b159c7fd09490440 100644
--- a/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
+++ b/InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv/src/PixelRodDecoder.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "PixelRodDecoder.h"
@@ -240,7 +240,7 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
 
     int indexModule = -1;
     int indexFE     = -1;
-    if (word_type!=PRB_LINKHEADER) {
+//    if (word_type!=PRB_LINKHEADER) {
       if (offlineIdHash!=0xffffffff) { // now write the error word to the service
         isIBLModule = false;
         isDBMModule = false;
@@ -260,7 +260,7 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
         indexModule = static_cast<int>(offlineIdHash); // [0,2047]
         indexFE     = (1+chFE)*m_pixel_id->wafer_hash_max()+static_cast<int>(offlineIdHash);  // index for IDCInDetBSErrContainer
       }
-    }
+//    }
 
     bool headerErr_decoding = false;
     bool headerErr_flagged  = false;
@@ -398,13 +398,26 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
           else                            { mLVL1A=mLVL1A+mBCID_max_pix; }
         }
 
-        // Fill header error word per module
-        if (headerErr_decoding) { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::Decoding); }
-        if (headerErr_flagged)  { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::Flagged);  }
-        if (headerErr_preamble) { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::Preamble); }
-        if (headerErr_timeout)  { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::TimeOut);  }
-        if (headerErr_lvl1id)   { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::LVL1ID);   }
-        if (headerErr_bcid)     { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::BCID);     }
+        // Fill header error word per IBL FE
+        if (isIBLModule || isDBMModule) {
+          if (indexFE>-1) {
+            if (headerErr_decoding) { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Decoding); }
+            if (headerErr_flagged)  { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Flagged);  }
+            if (headerErr_preamble) { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Preamble); }
+            if (headerErr_timeout)  { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::TimeOut);  }
+            if (headerErr_lvl1id)   { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::LVL1ID);   }
+            if (headerErr_bcid)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::BCID);     }
+          }
+        }
+        else {
+          // Fill header error word per module
+          if (headerErr_decoding) { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::Decoding); }
+          if (headerErr_flagged)  { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::Flagged);  }
+          if (headerErr_preamble) { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::Preamble); }
+          if (headerErr_timeout)  { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::TimeOut);  }
+          if (headerErr_lvl1id)   { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::LVL1ID);   }
+          if (headerErr_bcid)     { PixelByteStreamErrors::addError(bsErrWord[static_cast<int>(offlineIdHash)],PixelByteStreamErrors::BCID);     }
+        }
 
 
 #ifdef PIXEL_DEBUG
@@ -513,7 +526,6 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
             else { // it is an IBL/DBM hit word, but it hasn't been recognised
               generalwarning("In ROB 0x" << std::hex << robId << ", FE: 0x" << mLink << ": IBL/DBM hit word 0x" << rawDataWord << " not recognised" << std::dec);
               m_numDecodingErrors++;
-              if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Decoding); }
               if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Decoding); }
               continue;
             }
@@ -554,12 +566,11 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
           // Decode only modules in provided list of hashes (i.e. not doing full scan)
           // Disabled for now.
           if (offlineIdHash == skipHash) continue;
-          if(offlineIdHash != lastHash){
+          if (offlineIdHash != lastHash) {
             lastHash = offlineIdHash;
-            if(vecHash!=nullptr ){
+            if (vecHash!=nullptr) {
               std::vector<IdentifierHash>::iterator p = std::find(vecHash->begin(),vecHash->end(),offlineIdHash);
-
-              if (p == vecHash->end()){ // is the Hash to be skipped (not in the request list)?
+              if (p == vecHash->end()) { // is the Hash to be skipped (not in the request list)?
                 skipHash = offlineIdHash;
                 continue;
               }
@@ -619,7 +630,6 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
                   if (pixelId == invalidPixelId) {
                     generalwarning("In ROB 0x" << std::hex << robId << ", FE 0x" << mLink << ": Illegal pixelId - hit word 0x" << rawDataWord << " decodes to ToT1 = 0" << (tot[i] >> 4) << ", ToT2 = 0x" << (tot[i] & 0xF) << ", row = " << std::dec << row[i] << " col = " << col[i] << std::dec);
                     m_numInvalidIdentifiers++;
-                    if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Invalid); }
                     if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Invalid); }
                     continue;
                   }
@@ -661,7 +671,6 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
                     if ((row[i] + 1) > 336) { // FIXME: hardcoded number - but it should still be ok, because it's a feature of the FE-I4!
                       // this should never happen. If row[i] == 336, (row[i]+1) == 337. This row does not exist, so the TOT(337) should always be 0 (== no hit)
                       generalwarning("In ROB = 0x" << std::hex << robId << ", link 0x" << mLink << ": Illegal IBL row number for second ToT field, hit word 0x" << rawDataWord << " decodes to row = " << std::dec << row[i]+1 << " col = " << col[i] << " (ToT1 = 0x" << std::hex << IBLtot[0] << " ToT2 = 0x" << IBLtot[1] << ")");
-                      if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Invalid); }
                       if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Invalid); }
                       m_numInvalidIdentifiers++;
                       continue;
@@ -683,7 +692,6 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
                       if (pixelId == invalidPixelId) {
                         generalwarning("In ROB 0x" << std::hex << robId << ", FE 0x" << mLink << ": Illegal pixelId - hit word 0x" << rawDataWord << " decodes to ToT1 = 0" << (tot[i] >> 4) << ", ToT2 = 0x" << (tot[i] & 0xF) << ", row = " << std::dec << row[i] << " col = " << col[i] << std::dec);
                         m_numInvalidIdentifiers++;
-                        if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Invalid); }
                         if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Invalid); }
                         continue;
                       }
@@ -704,7 +712,6 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
                 else {
                   generalwarning("In ROB = 0x" << std::hex << robId << ", link 0x" << mLink << ": Illegal IBL row/col number, hit word 0x" << rawDataWord << " decodes to row = " << std::dec << row[i] << " col = " << col[i] << " (ToT1 = 0x" << std::hex << (tot[i] >> 4) << " ToT2 = 0x" << (tot[i] & 0xF) << ")");
                   m_numInvalidIdentifiers++;
-                  if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Invalid); }
                   if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Invalid); }
                   continue;
                 }
@@ -765,43 +772,35 @@ StatusCode PixelRodDecoder::fillCollection( const ROBFragment *robFrag, IPixelRD
 
           if (trailerError & (1 << 8)) { // time out error bit => E
             m_numTimeOutErrors++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::TimeOut); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::TimeOut); }
           }
 
           if (trailerError & (1 << 6)) {// link masked by PPC => P
             m_numLinkMaskedByPPC++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::LinkMaskedByPPC); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::LinkMaskedByPPC); }
           }
           if (trailerError & (1 << 5)) { // preamble error bit => p
             m_numPreambleErrors++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Preamble); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Preamble); }
           }
           if (trailerError & (1 << 4)) { // LVL1 error bit => l
             m_numLVL1IDErrors++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::LVL1ID); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::LVL1ID); }
           }
           if (trailerError & (1 << 3)) {// BCID error bit => b
             m_numBCIDErrors++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::BCID); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::BCID); }
           }
           if (trailerError & (1 << 2)) { // trailer error bit => z
             m_numTrailerErrors++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Trailer); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Trailer); }
           }
           if (trailerError & (1 << 1)) { // header/trailer limit error=> h
             m_numLimitError++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Limit); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Limit); }
           }
           if (trailerError & (1 << 0)) { // data overflow error=> v
             m_numInvalidIdentifiers++;
-            if (indexModule>-1) { PixelByteStreamErrors::addError(bsErrWord[indexModule],PixelByteStreamErrors::Invalid); }
             if (indexFE>-1)     { PixelByteStreamErrors::addError(bsErrWord[indexFE],PixelByteStreamErrors::Invalid); }
           }
 
diff --git a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py
index ee8158ebc1beff5f67a08dc7da16746b4b117b2e..c599895f8c32b0981d862cd9ef11b657c92cb948 100644
--- a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py
+++ b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py
@@ -829,7 +829,8 @@ def getInDetPixelConditionsSummaryTool() :
     from InDetRecExample.InDetJobProperties import InDetFlags
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
     pixelConditionsSummaryToolSetup = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
-                                                                 UseByteStream=(globalflags.DataSource=='data'))
+                                                                 UseByteStreamFEI4=(globalflags.DataSource=='data'),
+                                                                 UseByteStreamFEI3=(globalflags.DataSource=='data'))
     if InDetFlags.usePixelDCS():
         pixelConditionsSummaryToolSetup.IsActiveStates = [ 'READY', 'ON', 'UNKNOWN', 'TRANSITION', 'UNDEFINED' ]
         pixelConditionsSummaryToolSetup.IsActiveStatus = [ 'OK', 'WARNING', 'ERROR', 'FATAL' ]
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCabling.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCabling.py
index be661423a42a62fa45a267ab772d237687e6440b..4a59aceb0fbef87a70c29c65414d03ba733448cb 100755
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCabling.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecCabling.py
@@ -25,7 +25,6 @@ if DetFlags.detdescr.pixel_on() and not 'PixelCabling' in dir():
       from PixelDigitization.PixelDigitizationConfig import PixelConfigCondAlg_MC, IdMapping
       condSeq += PixelConfigCondAlg_MC()
       IdMappingDat=IdMapping()
-
     elif (globalflags.DataSource=='data'):
       from RecExConfig.AutoConfiguration import GetRunNumber
       runNum = GetRunNumber()
diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py
index ca2f0b40a55ee3207ae9f1847b9c6b987e48184e..1aef82796b995267c178959114d4d00949bd40e1 100644
--- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py
+++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecConditionsAccess.py
@@ -75,6 +75,7 @@ if DetFlags.pixel_on():
 
             alg = PixelConfigCondAlg(name="PixelConfigCondAlg", 
                                      CablingMapFileName=IdMappingDat)
+
             if jobproperties.Beam.beamType() == 'cosmics':
                 alg.BarrelTimeJitter=[25.0,25.0,25.0,25.0]
                 alg.EndcapTimeJitter=[25.0,25.0,25.0]
diff --git a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py
index 3594105de89770452070fe843d1dd154bd423167..15ce094fa56a631d4adf887f0e57bfc77a52e500 100644
--- a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py
+++ b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigConditions.py
@@ -199,7 +199,8 @@ class PixelConditionsServicesSetup:
 
     from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
     TrigPixelConditionsSummaryTool = PixelConditionsSummaryTool(name=self.instanceName('PixelConditionsSummaryTool'), 
-                                                                UseByteStream=self.useBS)
+                                                                UseByteStreamFEI4=self.useBS,
+                                                                UseByteStreamFEI3=self.useBS)
 
     if self.useDCS and not self.onlineMode:
       TrigPixelConditionsSummaryTool.IsActiveStates = [ 'READY', 'ON' ]
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelAthErrorMonAlg.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelAthErrorMonAlg.cxx
index fa6d2577f3ebe423dd3f3482a659ac0cf4359c9e..536215a235f1afe39b439aa9e6d4653812b83a08 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelAthErrorMonAlg.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelAthErrorMonAlg.cxx
@@ -172,7 +172,7 @@ StatusCode PixelAthErrorMonAlg::fillHistograms( const EventContext& ctx ) const
     for (int iFE=0; iFE<nFE; iFE++) {
 
       int offsetFE = (1+iFE)*maxHash + modHash;    // (FE index+1)*2048 + moduleHash
-      uint64_t fe_errorword = m_pixelCondSummaryTool->getBSErrorWord(offsetFE, ctx);
+      uint64_t fe_errorword = m_pixelCondSummaryTool->getBSErrorWord(modHash, offsetFE, ctx);
 
       fillErrorCatRODmod(fe_errorword, is_fei4, nerrors_cat_rodmod, iFE);
 
@@ -218,7 +218,7 @@ StatusCode PixelAthErrorMonAlg::fillHistograms( const EventContext& ctx ) const
 	  Identifier pixelIDperFEI4 = m_pixelCablingSvc->getPixelIdfromHash(modHash, iFE, 1, 1);
 	  // index = offset + (serviceCode)*(#IBL*nFE) + (moduleHash-156)*nFE + FE
           int serviceCodeCounterIndex = serviceRecordFieldOffset + serviceCodeOffset + moduleOffset + iFE;
-          uint64_t serviceCodeCounter = m_pixelCondSummaryTool->getBSErrorWord(serviceCodeCounterIndex, ctx);
+          uint64_t serviceCodeCounter = m_pixelCondSummaryTool->getBSErrorWord(modHash, serviceCodeCounterIndex, ctx);
 	  if (serviceCodeCounter>0) {
 
 	    float payload = serviceCodeCounter; // NB: + 1, as in rel 21, is now added upstream
diff --git a/Tools/PROCTools/data/master_q431_AOD_digest.ref b/Tools/PROCTools/data/master_q431_AOD_digest.ref
index fa7194dfd35bf013b8502adea860043314ec573e..627cd35b48ff68183ed2796efc589b5e803f4833 100644
--- a/Tools/PROCTools/data/master_q431_AOD_digest.ref
+++ b/Tools/PROCTools/data/master_q431_AOD_digest.ref
@@ -2,11 +2,11 @@
       330470  1183722158           1           0           0           0
       330470  1183722342         394         428          16           0
       330470  1183727953         532         590          11           4
-      330470  1183732647         467         485          12           1
+      330470  1183732647         467         484          12           1
       330470  1183733040         381         288           6           1
       330470  1183734651         361         368          14           3
       330470  1183735332         406         385           9           1
-      330470  1183736475         741         684          15           1
+      330470  1183736475         741         683          15           1
       330470  1183738728           1           0           0           0
       330470  1183738949         368         444           9           1
       330470  1183742489         152         127           2           1
@@ -22,5 +22,5 @@
       330470  1183773832         307         209           7           0
       330470  1183775209          57           0           0           0
       330470  1183787124         431         383          10           2
-      330470  1183787946         321         324           5           1
+      330470  1183787946         321         325           5           1
       330470  1183795329         458         355          18           0
diff --git a/Tools/PROCTools/python/RunTier0TestsTools.py b/Tools/PROCTools/python/RunTier0TestsTools.py
index 2a10997d33f209c38de97fcb876179e0874efd81..796037059eedde17ee248c85593df21a70e1e43d 100644
--- a/Tools/PROCTools/python/RunTier0TestsTools.py
+++ b/Tools/PROCTools/python/RunTier0TestsTools.py
@@ -34,7 +34,7 @@ ciRefFileMap = {
                 'overlay-d1592-22.0'   : 'v8',
                 'overlay-bkg-21.0'     : 'v1',
                 'overlay-bkg-22.0'     : 'v4',
-                'dataoverlay-d1590-22.0' : 'v10',
+                'dataoverlay-d1590-22.0' : 'v11',
                 'dataoverlay-hits-22.0'  : 'v1',
                }
 
diff --git a/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py b/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py
index ba0dc02cf41942aeb27a048ef85db6ab0cf17190..17b314032cc4d44d557eceeaefa87fd73361f3c6 100644
--- a/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py
+++ b/Trigger/TrigTools/TrigInDetConfig/python/InDetSetup.py
@@ -156,7 +156,9 @@ def makeInDetAlgs( config = None, rois = 'EMViewRoIs', doFTF = True, viewVerifie
   ToolSvc += InDetClusterMakerTool
 
   from PixelConditionsTools.PixelConditionsToolsConf import PixelConditionsSummaryTool
-  idPixelSummary = PixelConditionsSummaryTool("PixelConditionsSummaryTool", UseByteStream=globalflags.InputFormat.is_bytestream())
+  idPixelSummary = PixelConditionsSummaryTool("PixelConditionsSummaryTool",
+                                              UseByteStreamFEI4=globalflags.InputFormat.is_bytestream(),
+                                              UseByteStreamFEI3=globalflags.InputFormat.is_bytestream())
 
   from SiClusterizationTool.SiClusterizationToolConf import InDet__MergedPixelsTool
   InDetMergedPixelsTool = InDet__MergedPixelsTool(name                       = "InDetMergedPixelsTool_" + signature,