diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h index d64fc47a60cea30525ddc454d2dd2cf137a9d920..5ab58981bb2f01e51c7f3a3bb4db1cfccacb0225 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h +++ b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer.h @@ -1,5 +1,7 @@ +//Dear emacs, this is -*-c++-*- + /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /*************************************************************************** @@ -11,12 +13,72 @@ #ifndef TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_H #define TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_H -#include <stdint.h> -#include "AthContainers/DataVector.h" #include "AthenaKernel/CLASS_DEF.h" #include <stdint.h> +#include <set> + +class TRT_BSErrContainer { + + public: + + TRT_BSErrContainer() = default; + + //Getters, for entire sets: + const std::set<std::pair<uint32_t,uint32_t> > & + getRobErrorSet( void ) const { return m_rob_status_errors;} + + const std::set<uint32_t> & getMissingErrorSet( void ) const { + return m_missing_errors;} + + const std::set<uint32_t> & getErrorErrorSet( void ) const { + return m_error_errors;} + + const std::set<uint32_t> & getSidErrorSet( void ) const { + return m_sid_errors;} + + const std::set<std::pair<uint32_t,uint32_t> >& getL1ErrorSet() const { + return m_l1id_pair_errors;} + + const std::set<std::pair<uint32_t,uint32_t> >& getBCIDErrorSet() const { + return m_bcid_pair_errors;} + + void add_missing_error(const uint32_t DTMROC_idx ) { + m_missing_errors.insert( DTMROC_idx ); + } + + void add_error_error(const uint32_t DTMROC_idx ) { + m_error_errors.insert( DTMROC_idx ); + } + + void add_sid_error(const uint32_t DTMROC_idx ) { + m_sid_errors.insert( DTMROC_idx ); + } + + + void add_l1id_error( uint32_t DTMROC_idx, uint32_t l1id ) { + m_l1id_pair_errors.insert(std::make_pair( DTMROC_idx, l1id)); + } + + void add_bcid_error( uint32_t DTMROC_idx, uint32_t bcid ) { + m_bcid_pair_errors.insert(std::make_pair( DTMROC_idx, bcid )); + } + + void add_rob_error( uint32_t robSourceId, uint32_t robStatus ) { + m_rob_status_errors.insert(std::make_pair(robSourceId, robStatus)); + } + + private: + std::set<uint32_t> m_missing_errors; + std::set<uint32_t> m_error_errors; + std::set<uint32_t> m_sid_errors; + + std::set<std::pair<uint32_t,uint32_t> > m_l1id_pair_errors; + std::set<std::pair<uint32_t,uint32_t> > m_bcid_pair_errors; + std::set<std::pair<uint32_t,uint32_t> > m_rob_status_errors; + +}; + -typedef DataVector<std::pair<uint8_t, uint32_t> > TRT_BSErrContainer; // <type, index> CLASS_DEF(TRT_BSErrContainer,1324847776,1) diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer_p1.h b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer_p1.h new file mode 100644 index 0000000000000000000000000000000000000000..7419411281b4b04068d7f2bd03a7307e15b5ca88 --- /dev/null +++ b/InnerDetector/InDetConditions/InDetByteStreamErrors/InDetByteStreamErrors/TRT_BSErrContainer_p1.h @@ -0,0 +1,24 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +/*************************************************************************** + InDetByteStreamErrors package + ----------------------------------------- + ***************************************************************************/ + + +#ifndef TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_P1_H +#define TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_P1_H + +#include <stdint.h> +#include "AthContainers/DataVector.h" +#include "AthenaKernel/CLASS_DEF.h" +#include <stdint.h> + +typedef DataVector<std::pair<uint8_t, uint32_t> > TRT_BSErrContainer_p1; // <type, index> + +CLASS_DEF(TRT_BSErrContainer_p1,1114762661,1) + + +#endif // TRT_BYTESTREAMERRORS_TRT_BSERRCONTAINER_H diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt index 08c1e9b97b016fca3672f1bb464020ac72c9d9bd..f117789cb97c64dbdbdeff6155c09d5999288f82 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/CMakeLists.txt @@ -43,10 +43,10 @@ atlas_add_test( IDCInDetBSErrContainerCnv_p1_test src/IDCInDetBSErrContainerCnv_p1.cxx LINK_LIBRARIES GaudiKernel AthenaPoolCnvSvcLib Identifier AthAllocators ) -atlas_add_test( TRT_BSErrContainerCnv_p1_test - SOURCES test/TRT_BSErrContainerCnv_p1_test.cxx - src/TRT_BSErrContainerCnv_p1.cxx - LINK_LIBRARIES GaudiKernel AthenaPoolCnvSvcLib Identifier AthAllocators ) +#atlas_add_test( TRT_BSErrContainerCnv_p1_test +# SOURCES test/TRT_BSErrContainerCnv_p1_test.cxx +# src/TRT_BSErrContainerCnv_p1.cxx +# LINK_LIBRARIES GaudiKernel AthenaPoolCnvSvcLib Identifier AthAllocators ) atlas_add_test( TRT_BSIdErrContainerCnv_p1_test SOURCES test/TRT_BSIdErrContainerCnv_p1_test.cxx diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h index 1beec4c2203e503f0894ba8e0915f33bd1e8fab4..74ac88f54ebc95e0ecd53f6adcc7321b3eae5900 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPoolCnvDict.h @@ -9,6 +9,7 @@ #include "InDetByteStreamErrorsAthenaPool/InDetBSErrContainer_p1.h" #include "InDetByteStreamErrorsAthenaPool/InDetBSErrContainer_p2.h" #include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p1.h" +#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h" #include "InDetByteStreamErrorsAthenaPool/TRT_BSIdErrContainer_p1.h" #include "InDetByteStreamErrorsAthenaPool/InDetBSErrContainer64_p1.h" #endif diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h new file mode 100644 index 0000000000000000000000000000000000000000..d9ce6a7e77049f1251c10d62d5797f7301eb205f --- /dev/null +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h @@ -0,0 +1,24 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINER_P2_H +#define INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINER_P2_H + + +#include <vector> +#include <stdint.h> + +class TRT_BSErrContainer_p2 +{ + public: +/// Default constructor + TRT_BSErrContainer_p2 () = default; + std::vector<uint32_t> m_missingError; + std::vector<uint32_t> m_errorError; + std::vector<uint32_t> m_sidError; +}; + + +#endif // Not INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINER_P1_H + diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml index cd352e12a9f129829e97427ec7fd442a637c31a7..00ea52cb98dd7a67cd090ed89e2517bee0cfd066 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/InDetByteStreamErrorsAthenaPool/selection.xml @@ -4,4 +4,7 @@ <class name="TRT_BSErrContainer_p1" id="D461AC01-02CA-4A9E-886B-24EC14309121" /> <class name="TRT_BSIdErrContainer_p1" id="26F44F1E-D1F5-43B3-93E9-09376AB37491" /> <class name="InDetBSErrContainer64_p1" id="84056f02-9d9f-4d0c-8d5a-c6c686f5cf76" /> + <class name="TRT_BSErrContainer_p2" id="A815E78C-BB68-4CA5-9B95-739E9B47043A" /> + + </lcgdict> diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx index 4d819af74b347593802c125a3ae80982df6e5ed2..b1ce3d1385327fb417b1fc4dbc5813c964d70172 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.cxx @@ -22,12 +22,20 @@ TRT_BSErrContainerCnv::createPersistent(TRT_BSErrContainer* transCont) { TRT_BSErrContainer* TRT_BSErrContainerCnv::createTransient() { - MsgStream log(msgSvc(), "TRT_BSErrContainerCnv" ); + MsgStream log(msgSvc(), "TRT_BSErrContainerCnv" ); static const pool::Guid p1_guid("D461AC01-02CA-4A9E-886B-24EC14309121"); - if( compareClassGuid(p1_guid) ) { + static const pool::Guid p2_guid("A815E78C-BB68-4CA5-9B95-739E9B47043A"); + + if( compareClassGuid(p2_guid) ) { // using unique_ptr ensures deletion of the persistent object - std::unique_ptr< TRT_BSErrContainer_p1 > col_vect( poolReadObject< TRT_BSErrContainer_p1 >() ); + std::unique_ptr< TRT_BSErrContainer_p2 > col_vect( poolReadObject< TRT_BSErrContainer_p2 >() ); return m_TPConverter.createTransient( col_vect.get(), log ); } + + if( compareClassGuid(p1_guid) ) { + log << MSG::ERROR << "TRT_BSErrContainer_p1 not supported any more. Recording empty container." << endmsg; + return new TRT_BSErrContainer(); + } + throw std::runtime_error("Unsupported persistent version of Data Collection"); } diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h index 465403492b2b3433b3bc18c44ea67f9c75a35f56..a88eb11acf544cf1d0a733425f58066d8e14dc21 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv.h @@ -15,11 +15,11 @@ #include "InDetByteStreamErrors/TRT_BSErrContainer.h" #include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" -#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p1.h" -#include "TRT_BSErrContainerCnv_p1.h" +#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h" +#include "TRT_BSErrContainerCnv_p2.h" // the latest persistent representation type of DataCollection: -typedef TRT_BSErrContainer_p1 TRT_BSErrContainer_PERS; +typedef TRT_BSErrContainer_p2 TRT_BSErrContainer_PERS; typedef T_AthenaPoolCustomCnv<TRT_BSErrContainer, TRT_BSErrContainer_PERS > TRT_BSErrContainerCnvBase; class TRT_BSErrContainerCnv : public TRT_BSErrContainerCnvBase { @@ -30,6 +30,6 @@ protected: virtual TRT_BSErrContainer_PERS* createPersistent (TRT_BSErrContainer* transCont); virtual TRT_BSErrContainer* createTransient (); - TRT_BSErrContainerCnv_p1 m_TPConverter; + TRT_BSErrContainerCnv_p2 m_TPConverter; }; #endif diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx index 3d8d7ff37879da00f1853bfee13ab6492fddf80d..b63baf918b8f6127fc34838e9751c2a40f3ca15a 100644 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p1.cxx @@ -11,31 +11,15 @@ #include <iostream> -void TRT_BSErrContainerCnv_p1::transToPers ATLAS_NOT_THREAD_SAFE (const TRT_BSErrContainer* transCont, TRT_BSErrContainer_p1* persCont, MsgStream & /* log */) +void TRT_BSErrContainerCnv_p1::transToPers ATLAS_NOT_THREAD_SAFE (const TRT_BSErrContainer*, TRT_BSErrContainer_p1* , MsgStream & /* log */) { - TRT_BSErrContainer::const_iterator it = transCont->begin(); - TRT_BSErrContainer::const_iterator itEnd = transCont->end(); - (persCont->m_bsErrs).reserve(transCont->size()); - - for (; it != itEnd; ++it) { - // FIXME: Should change type of m_bsErrs, but don't want to cause possible - // back-compatibility problems. - std::pair<uint8_t, uint32_t>* ptr = const_cast<std::pair<uint8_t, uint32_t>*> (*it); - (persCont->m_bsErrs).push_back(ptr); - } - return; + throw std::runtime_error("Obsolete TRT_BSErrContainerCnv_p1::transToPers() not implemented"); + return; } -void TRT_BSErrContainerCnv_p1::persToTrans(const TRT_BSErrContainer_p1* persCont, TRT_BSErrContainer* transCont, MsgStream & /* log */) +void TRT_BSErrContainerCnv_p1::persToTrans(const TRT_BSErrContainer_p1* , TRT_BSErrContainer* , MsgStream & /* log */) { - - std::vector<std::pair<uint8_t, uint32_t>* >::const_iterator it = (persCont->m_bsErrs).begin(); - std::vector<std::pair<uint8_t, uint32_t>* >::const_iterator itEnd = (persCont->m_bsErrs).end(); - transCont->reserve((persCont->m_bsErrs).size()); - - for (; it != itEnd; ++it) { - transCont->push_back(*it); - } + throw std::runtime_error("Obsolete TRT_BSErrContainerCnv_p1::persToTrans() not implemented"); return; } diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.cxx new file mode 100644 index 0000000000000000000000000000000000000000..ec68463a7d75240dc52762d82fd63e418c9dee11 --- /dev/null +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.cxx @@ -0,0 +1,53 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h" +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" +#include "TRT_BSErrContainerCnv_p2.h" + +#include "Identifier/IdentifierHash.h" +#include "AthAllocators/DataPool.h" + +#include <iostream> + +void TRT_BSErrContainerCnv_p2::transToPers ATLAS_NOT_THREAD_SAFE (const TRT_BSErrContainer* transCont, TRT_BSErrContainer_p2* persCont, MsgStream & /* log */) +{ + for (const uint32_t id: transCont->getMissingErrorSet()) { + persCont->m_missingError.push_back(id); + } + + for (const uint32_t id: transCont->getErrorErrorSet()) { + persCont->m_errorError.push_back(id); + } + + for (const uint32_t id: transCont->getSidErrorSet()) { + persCont->m_sidError.push_back(id); + } + + return; +} + +void TRT_BSErrContainerCnv_p2::persToTrans(const TRT_BSErrContainer_p2* persCont, TRT_BSErrContainer* transCont, MsgStream & /* log */) +{ + + for (const uint32_t id : persCont->m_missingError) { + transCont->add_missing_error(id); + } + + for (const uint32_t id : persCont->m_errorError) { + transCont->add_error_error(id); + } + + for (const uint32_t id : persCont->m_sidError) { + transCont->add_sid_error(id); + } + return; +} + +//================================================================ +TRT_BSErrContainer* TRT_BSErrContainerCnv_p2::createTransient(const TRT_BSErrContainer_p2* persObj, MsgStream& log) { + std::unique_ptr<TRT_BSErrContainer> trans(std::make_unique<TRT_BSErrContainer>()); + persToTrans(persObj, trans.get(), log); + return(trans.release()); +} diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.h b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.h new file mode 100644 index 0000000000000000000000000000000000000000..19af96f0683803096ed6d17d8c32dd040cca059b --- /dev/null +++ b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/src/TRT_BSErrContainerCnv_p2.h @@ -0,0 +1,28 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINERCNV_P2_H +#define INDETBYTESTREAMERRORSATHENAPOOL_TRT_BSERRCONTAINERCNV_P2_H + +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" +#include "InDetByteStreamErrorsAthenaPool/TRT_BSErrContainer_p2.h" + + +class TRT_BSErrContainerCnv_p2 : public T_AthenaPoolTPCnvBase<TRT_BSErrContainer, TRT_BSErrContainer_p2> +{ + public: + TRT_BSErrContainerCnv_p2(){}; + + virtual void persToTrans(const TRT_BSErrContainer_p2* persCont, + TRT_BSErrContainer* transCont, + MsgStream &log) ; + virtual void transToPers(const TRT_BSErrContainer* transCont, + TRT_BSErrContainer_p2* persCont, + MsgStream &log) ; + virtual TRT_BSErrContainer* createTransient(const TRT_BSErrContainer_p2* persObj, MsgStream& log) ; + +}; + +#endif diff --git a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx b/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx deleted file mode 100644 index 6db8fe96106bde1ee5119ac02a214a9cf8de0bd3..0000000000000000000000000000000000000000 --- a/InnerDetector/InDetConditions/InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -// $Id$ -/** - * @file InDetByteStreamErrorsAthenaPool/test/TRT_BSErrContainerCnv_p1_test.cxx - * @author scott snyder <snyder@bnl.gov> - * @date Oct, 2015 - * @brief Unit test - */ - -#undef NDEBUG -#include "../src/TRT_BSErrContainerCnv_p1.h" -#include "GaudiKernel/MsgStream.h" -#include <iostream> -#include <cassert> - - -typedef TRT_BSErrContainer::base_value_type Elt; - - -void compare (const TRT_BSErrContainer& c1, - const TRT_BSErrContainer& c2) -{ - assert (c1.size() == c2.size()); - for (size_t i = 0; i < c1.size(); i++) { - const Elt& p1 = *c1[i]; - const Elt& p2 = *c2[i]; - assert (p1.first == p2.first); - assert (p1.second == p2.second); - } -} - -void testit (const TRT_BSErrContainer& trans1) -{ - TRT_BSErrContainerCnv_p1 cnv; - TRT_BSErrContainer_p1 pers; - MsgStream log (0, "test"); - cnv.transToPers (&trans1, &pers, log); - TRT_BSErrContainer trans2 (SG::VIEW_ELEMENTS); - cnv.persToTrans (&pers, &trans2, log); - compare (trans1, trans2); -} - - -void test1() -{ - std::cout << "test1\n"; - TRT_BSErrContainer c; - - c.push_back (new Elt (1, 2)); - c.push_back (new Elt (3, 4)); - c.push_back (new Elt (5, 6)); - testit (c); -} - - -int main() -{ - test1(); - return 0; -} diff --git a/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h b/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h index f02fe030e808f2b268a7389c68a9aaf31c09bf1b..f12eb4979cbda0cfd862bfb9f0b923a43821bcad 100644 --- a/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h +++ b/InnerDetector/InDetConditions/TRT_ConditionsServices/TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h @@ -66,10 +66,6 @@ class ITRT_ByteStream_ConditionsSvc : virtual public IService { virtual void add_rob_error( uint32_t robSourceId, uint32_t robStatus ) = 0; - virtual StatusCode readData( void ) = 0; - virtual StatusCode recordData( void ) = 0; - - }; inline const InterfaceID& ITRT_ByteStream_ConditionsSvc::interfaceID() { diff --git a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx index 8cc3ce7070bbca26f8b7ee9d8dc42acbfdf8d574..15435020e849be30bf0d8fa3bdb4b6ccbba19b2d 100644 --- a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx +++ b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.cxx @@ -11,14 +11,11 @@ #include "TRT_ByteStream_ConditionsSvc.h" -#include "InDetByteStreamErrors/TRT_BSErrContainer.h" +#include "InDetByteStreamErrors/TRT_BSErrContainer_p1.h" #include "InDetByteStreamErrors/TRT_BSIdErrContainer.h" #include "Identifier/Identifier.h" -#include "StoreGate/ReadHandle.h" -#include "StoreGate/WriteHandle.h" - ////////// /// Constructor ///// @@ -40,12 +37,6 @@ TRT_ByteStream_ConditionsSvc::TRT_ByteStream_ConditionsSvc( const std::string& n m_tot_num_robStatus_errors(0) { - declareProperty( "writeBcidError", m_writeBCIDError = true ); - declareProperty( "writeL1idError", m_writeL1IDError = true ); - declareProperty( "writeMissingError", m_writeMISSINGError = true ); - declareProperty( "writeErrorError", m_writeERRORError = true ); - declareProperty( "writeSidError", m_writeSIDError = true ); - declareProperty( "readCondFromESD", m_readCondFromESD = false ); } ////////// @@ -60,11 +51,6 @@ StatusCode TRT_ByteStream_ConditionsSvc::initialize() { if(msgLvl(MSG::DEBUG)) msg() << "TRT_ByteStream_ConditionsSvc: Initialize." << endmsg; - // Initialize keys - ATH_CHECK(m_keyerrContid.initialize()); - ATH_CHECK(m_keyerrCont.initialize()); - ATH_CHECK(m_writekeyErrContID.initialize()); - ATH_CHECK(m_writekeyErrCont.initialize()); /* * Ask to be informed at the beginning of each new event so that we @@ -98,12 +84,6 @@ StatusCode TRT_ByteStream_ConditionsSvc::initialize() m_tot_num_sid_errors=0; m_tot_num_robStatus_errors=0; - ATH_MSG_INFO( "writeBcidError =" << (m_writeBCIDError?"TRUE":"FALSE") ); - ATH_MSG_INFO( "writeL1idError =" << (m_writeL1IDError?"TRUE":"FALSE") ); - ATH_MSG_INFO( "writeMissingError =" << (m_writeMISSINGError?"TRUE":"FALSE") ); - ATH_MSG_INFO( "writeErrorError =" << (m_writeERRORError?"TRUE":"FALSE") ); - ATH_MSG_INFO( "writeSidError =" << (m_writeSIDError?"TRUE":"FALSE") ); - return StatusCode::SUCCESS; } @@ -151,9 +131,6 @@ TRT_ByteStream_ConditionsSvc::handle(const Incident&) this->resetSets(); this->resetCounts(); - if ( m_readCondFromESD ) - this->readData().ignore(); - return; } @@ -407,181 +384,4 @@ TRT_ByteStream_ConditionsSvc::getErrorSet( TRTByteStreamErrors::errorTypes ErrTy } -StatusCode -TRT_ByteStream_ConditionsSvc::readData() -{ - - StatusCode sc(StatusCode::SUCCESS); - - /* - * ByteStream ID (L1ID, BCID) errors - */ - { - SG::ReadHandle<TRT_BSIdErrContainer> errCont(m_keyerrContid); - if (not errCont.isValid()) - { - ATH_MSG_WARNING( "Failed to retrieve TRT BS Id error container from SG" ); - - return sc; - } - - - // = new TRT_BSIdErrContainer(); - - - for (const auto* elt : *errCont) - { - int errorType = elt->first; - - // std::cout << "TRT BSerr: " << errorType << " " << ((*it)->second).first - // << " " << (uint32_t) ((*it)->second).second << std::endl; - - switch(errorType) - { - - case TRTByteStreamErrors::BCIDError: - add_bcid_error( elt->second.first, elt->second.second ); - break; - - case TRTByteStreamErrors::L1IDError: - add_l1id_error( elt->second.first, elt->second.second ); - break; - } - } - } - - /* - * ByteStream (Missing, Error, SID) errors - */ - { - SG::ReadHandle<TRT_BSErrContainer> errCont(m_keyerrCont); - if (not errCont.isValid()) - { - ATH_MSG_WARNING( "Failed to retrieve TRT BS error container from SG" ); - - return sc; - } - - - for (const auto* elt : *errCont) - { - int errorType = elt->first; - - // std::cout << "TRT BSerr: " << errorType << " " << (*it)->second << std::endl; - - switch(errorType) - { - - case TRTByteStreamErrors::MISSINGError: - add_missing_error( elt->second ); - break; - - case TRTByteStreamErrors::ERRORError: - add_error_error( elt->second ); - break; - - case TRTByteStreamErrors::SIDError: - add_sid_error( elt->second ); - break; - } - } - } - - return sc; - } - - -StatusCode -TRT_ByteStream_ConditionsSvc::recordData() -{ - - StatusCode sc(StatusCode::SUCCESS); - - SG::WriteHandle<TRT_BSIdErrContainer> IdCont(m_writekeyErrContID); - sc = IdCont.record(std::make_unique<TRT_BSIdErrContainer>() ); - if (sc.isFailure() ) - msg(MSG::ERROR) <<"Failed to record BSIdErrors to SG"<<endmsg; - - SG::WriteHandle<TRT_BSErrContainer> cont(m_writekeyErrCont); - sc = cont.record(std::make_unique<TRT_BSErrContainer>() ); - if (sc.isFailure() ) - msg(MSG::ERROR) <<"Failed to record BSErrors to SG"<<endmsg; - - /* - * ByteStream ID (L1ID, BCID) errors - */ - { - TRTByteStreamErrors::errorTypes IdPairErrorTypes[2] = { TRTByteStreamErrors::BCIDError, - TRTByteStreamErrors::L1IDError }; - - for (int errIdx=0; errIdx<2; errIdx++) - { - TRTByteStreamErrors::errorTypes errType = IdPairErrorTypes[errIdx]; - - if ( ((errType == TRTByteStreamErrors::BCIDError) && m_writeBCIDError) || - ((errType == TRTByteStreamErrors::L1IDError) && m_writeL1IDError) ) - { - std::set<std::pair<uint32_t,uint32_t> >* errors = getIdErrorSet(errType); - if ( ! errors ) - { -#ifdef TRT_BS_ERR_DEBUG - msg(MSG::INFO) << "No TRT BS errors of type " << errType << " to record" << endmsg; -#endif // TRT_BS_ERR_DEBUG - continue; - } - - std::set<std::pair<uint32_t,uint32_t> >::iterator it = errors->begin(); - std::set<std::pair<uint32_t,uint32_t> >::iterator itEnd = errors->end(); - for (; it != itEnd; ++it) - { - std::pair<uint8_t, std::pair<uint32_t,uint8_t> >* err = - new std::pair<uint8_t, std::pair<uint32_t,uint8_t> > - (std::make_pair( errType, *it )); - IdCont->push_back(err); - } - } - } - - } - - /* - * ByteStream (Missing, Error, SID) errors - */ - { - TRTByteStreamErrors::errorTypes IdErrorTypes[3] = { TRTByteStreamErrors::MISSINGError, - TRTByteStreamErrors:: ERRORError, - TRTByteStreamErrors::SIDError }; - for (int errIdx=0; errIdx<3; errIdx++) - { - TRTByteStreamErrors::errorTypes errType = IdErrorTypes[errIdx]; - - if ( ((errType == TRTByteStreamErrors::MISSINGError) && m_writeMISSINGError) || - ((errType == TRTByteStreamErrors::ERRORError) && m_writeERRORError) || - ((errType == TRTByteStreamErrors::SIDError) && m_writeSIDError) ) - { - - std::set<uint32_t>* errors = getErrorSet(errType); - if ( ! errors ) - { -#ifdef TRT_BS_ERR_DEBUG - msg(MSG::INFO) << "No TRT BS errors of type " << errType << " to record" << endmsg; -#endif // TRT_BS_ERR_DEBUG - continue; - } - std::set<uint32_t>::iterator it = errors->begin(); - std::set<uint32_t>::iterator itEnd = errors->end(); - for (; it != itEnd; ++it) - { - std::pair<uint8_t, uint32_t>* err = - new std::pair<uint8_t, uint32_t> (std::make_pair( errType, *it )); - cont->push_back(err); - } - } - } - - } - - return sc; - } - #endif //ifndef SIMULATIONBASE diff --git a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h index 0c7a932e06773419e776cc8db3e8ac2332bbf2d9..f2fea779d2fcdada6c43529498780ba8c160608d 100644 --- a/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h +++ b/InnerDetector/InDetConditions/TRT_ConditionsServices/src/TRT_ByteStream_ConditionsSvc.h @@ -11,6 +11,13 @@ * @author Paul Keener */ + +//Update, June 2020, W.L: +//This service is replaced by the TRT_BSErrContainer object in SG +//It's only remaining purpose is to carry information from the +//TRT_TRTRawDataProvider to the TRT_TrgRIO_Maker with are both thread-unsafe +//legcay tools + #include "GaudiKernel/IIncidentListener.h" #include "GaudiKernel/IIncidentSvc.h" @@ -20,11 +27,7 @@ #include "GaudiKernel/ServiceHandle.h" #include "StoreGate/StoreGateSvc.h" -#include "InDetByteStreamErrors/TRT_BSErrContainer.h" -#include "InDetByteStreamErrors/TRT_BSIdErrContainer.h" -#include "StoreGate/ReadHandleKey.h" -#include "StoreGate/WriteHandleKey.h" /// Service for retrieving ByteStream conditions information class TRT_ByteStream_ConditionsSvc : public AthService, @@ -84,10 +87,6 @@ class TRT_ByteStream_ConditionsSvc : public AthService, void add_rob_error( uint32_t robSourceId, uint32_t robStatus ); - virtual StatusCode readData( void ); - virtual StatusCode recordData( void ); - - private: ServiceHandle<StoreGateSvc> m_evtStore; @@ -103,14 +102,6 @@ class TRT_ByteStream_ConditionsSvc : public AthService, std::set<std::pair<uint32_t,uint32_t> > m_rob_status_errors; - bool m_writeBCIDError; // true if we should write BCID errors to SG - bool m_writeL1IDError; // true if we should write L1ID errors to SG - bool m_writeMISSINGError; // true if we should write MISSING errors to SG - bool m_writeERRORError; // true if we should write ERROR errors to SG - bool m_writeSIDError; // true if we should write SID errors to SG - - bool m_readCondFromESD; // true if we are reading ESD and we should - // read the conditions data int m_num_l1id_errors; int m_num_bcid_errors; int m_num_missing_errors; @@ -128,11 +119,6 @@ class TRT_ByteStream_ConditionsSvc : public AthService, //TRT_BSIdErrContainer* m_IdCont; //TRT_BSErrContainer* m_cont; - SG::ReadHandleKey<TRT_BSIdErrContainer> m_keyerrContid{this,"ByteStreamIdErrsKey","TRT_ByteStreamIdErrs","RHK to retrieve ByteStream Error ID"}; - SG::ReadHandleKey<TRT_BSErrContainer> m_keyerrCont{this,"ByteStreamErrsKey","TRT_ByteStreamErrs","RHK to retrieve ByteStream Errrors"}; - SG::WriteHandleKey<TRT_BSIdErrContainer> m_writekeyErrContID{this,"ByteStreamIdErrsKeyContainer","TRT_ByteStreamIdErrs","WHK to write the ByteStream Error id"}; - SG::WriteHandleKey<TRT_BSErrContainer> m_writekeyErrCont{this,"ByteStreamErrsKeyContainer","TRT_ByteStreamErrs","WHK to write the ByteStream Errors"}; - }; /// Query Interface diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt index 8aefbd0a4cfff7558261ab05092ef3e9962678f4..e86580b4de7cbf8e5175d2d6b6b21185df2764ae 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/CMakeLists.txt @@ -22,6 +22,7 @@ atlas_depends_on_subdirs( PUBLIC InnerDetector/InDetDetDescr/InDetReadoutGeometry InnerDetector/InDetDetDescr/TRT_ReadoutGeometry InnerDetector/InDetDetDescr/TRT_Cabling + InnerDetector/InDetConditions/InDetByteStreamErrors Tools/PathResolver Trigger/TrigEvent/TrigSteeringEvent ) diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h index 72815781f00cdfe58c16d02b3963b1aa2527959c..012de8746a5657ba6bb13d374d944fa972737f16 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h @@ -13,6 +13,8 @@ #include <vector> +class TRT_BSErrContainer; + // the tool to decode a ROB frament class ITRTRawDataProviderTool : virtual public IAlgTool @@ -26,7 +28,8 @@ class ITRTRawDataProviderTool : virtual public IAlgTool //! this is the main decoding method virtual StatusCode convert(const std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecRobs, - TRT_RDO_Container* rdoIdc ) = 0; + TRT_RDO_Container* rdoIdc, + TRT_BSErrContainer* bserr) = 0; }; diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h index 4ce632659eb3f190a2fe493d52a676bee794e068..d2b9610566bcae4d5dca922f5c87a33eef8ac0be 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h @@ -17,6 +17,8 @@ // the tool to decode a ROB frament +class TRT_BSErrContainer; + class ITRT_RodDecoder : virtual public IAlgTool { @@ -28,6 +30,7 @@ public: //! the method to fill the IDC virtual StatusCode fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment* robFrag, TRT_RDO_Container* rdoIdc, + TRT_BSErrContainer* bsErr, const std::vector<IdentifierHash>* vecHash = 0 ) = 0; diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx index e246c6d68548de8afe8cf0375c9129351b3d02a3..9c3b8cc1b79ee951777414543c416a564535902f 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.cxx @@ -24,7 +24,8 @@ TRTRawDataProvider::TRTRawDataProvider(const std::string& name, declareProperty("RoIs", m_roiCollectionKey = std::string(""), "RoIs to read in"); declareProperty("isRoI_Seeded", m_roiSeeded = false, "Use RoI"); declareProperty("RDOKey", m_rdoContainerKey = std::string("TRT_RDOs")); - declareProperty ( "ProviderTool", m_rawDataTool ); + declareProperty("BSErrkey",m_bsErrContKey = "TRT_ByteStreamErrs"); + declareProperty ("ProviderTool", m_rawDataTool ); } // -------------------------------------------------------------------- @@ -84,7 +85,7 @@ StatusCode TRTRawDataProvider::initialize() { ATH_CHECK( m_rdoContainerKey.initialize() ); - ATH_CHECK( m_rdoContainerKey.initialize() ); + ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) ); return StatusCode::SUCCESS; } @@ -98,7 +99,8 @@ StatusCode TRTRawDataProvider::execute() rdoContainer = std::make_unique<TRT_RDO_Container>(m_trt_id->straw_hash_max(), EventContainers::Mode::OfflineFast); ATH_CHECK(rdoContainer.isValid()); - + std::unique_ptr<TRT_BSErrContainer> bsErrCont=std::make_unique<TRT_BSErrContainer>(); + std::vector<uint32_t> listOfRobs; if (!m_roiSeeded) { listOfRobs = m_CablingSvc->getAllRods(); @@ -125,11 +127,19 @@ StatusCode TRTRawDataProvider::execute() ATH_MSG_DEBUG( "Number of ROB fragments " << listOfRobf.size() ); // ask TRTRawDataProviderTool to decode it and to fill the IDC - if (m_rawDataTool->convert(listOfRobf,&(*rdoContainer)).isFailure()) + if (m_rawDataTool->convert(listOfRobf,&(*rdoContainer),bsErrCont.get()).isFailure()) ATH_MSG_WARNING( "BS conversion into RDOs failed" ); ATH_MSG_DEBUG( "Number of Collections in IDC " << rdoContainer->numberOfCollections() ); + + if (!m_bsErrContKey.empty()) { + ATH_MSG_DEBUG("Recording BS error container"); + SG::WriteHandle<TRT_BSErrContainer> bsErrContHdl{m_bsErrContKey}; + ATH_CHECK(bsErrContHdl.record(std::move(bsErrCont))); + } + + return StatusCode::SUCCESS; } diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h index f89d1e4059b93d864c6a8605e05586f61f6d86e9..8a4be6d46a7221f6f72b4c87572155ad40a6ee50 100755 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProvider.h @@ -22,6 +22,8 @@ #include "AthenaBaseComps/AthAlgorithm.h" +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" + #include <string> class TRTRawDataProviderTool; @@ -61,6 +63,7 @@ private: bool m_roiSeeded; SG::ReadHandleKey<TrigRoiDescriptorCollection> m_roiCollectionKey; SG::WriteHandleKey<TRT_RDO_Container> m_rdoContainerKey; + SG::WriteHandleKey<TRT_BSErrContainer> m_bsErrContKey; }; diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx index 84067eb87578ff60a430f9aebf6329143b1cb878..dbf8dcf4b69955de668aa857792d0f97d390d2b0 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.cxx @@ -1,10 +1,8 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -//#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" - #include "TRTRawDataProviderTool.h" #include "GaudiKernel/IToolSvc.h" #include "InDetRawData/TRT_RDORawData.h" @@ -28,12 +26,10 @@ TRTRawDataProviderTool::TRTRawDataProviderTool ( const std::string& type, const std::string& name,const IInterface* parent ) : AthAlgTool( type, name, parent ), m_decoder ("TRT_RodDecoder",this), - m_bsErrSvc ("TRT_ByteStream_ConditionsSvc", name), m_storeInDetTimeColls(true), m_doEventCheck(true) { declareProperty ("Decoder", m_decoder); - declareProperty ("BSCondSvc", m_bsErrSvc); declareProperty ("StoreInDetTimeCollections", m_storeInDetTimeColls); declareProperty ("checkLVL1ID", m_doEventCheck); @@ -67,16 +63,6 @@ StatusCode TRTRawDataProviderTool::initialize() ATH_MSG_INFO( "Retrieved tool " << m_decoder ); - /* - * Retrieve BS Error Service - */ - if ( m_bsErrSvc.retrieve().isFailure() ) - { - ATH_MSG_FATAL( "Failed to retrieve service " << m_bsErrSvc ); - return StatusCode::FAILURE; - } else - ATH_MSG_INFO( "Retrieved service " << m_bsErrSvc ); - //initialize write handles ATH_CHECK(m_lvl1idkey.initialize()); @@ -98,7 +84,8 @@ StatusCode TRTRawDataProviderTool::finalize() // convert method StatusCode TRTRawDataProviderTool::convert(const std::vector<const ROBFragment*>& vecRobs, - TRT_RDO_Container* rdoIdc ) + TRT_RDO_Container* rdoIdc, + TRT_BSErrContainer* bserr) { static std::atomic_int DecodeErrCount = 0; @@ -169,7 +156,7 @@ StatusCode TRTRawDataProviderTool::convert(const std::vector<const ROBFragment*> #endif } - StatusCode sc = m_decoder->fillCollection( &**rob_it, rdoIdc); + StatusCode sc = m_decoder->fillCollection( &**rob_it, rdoIdc, bserr); if ( sc == StatusCode::FAILURE ) { if ( DecodeErrCount < 100 ) @@ -213,13 +200,6 @@ StatusCode TRTRawDataProviderTool::convert(const std::vector<const ROBFragment*> return sc; } } - - sc = m_bsErrSvc->recordData(); - if (sc.isFailure() ) - { - ATH_MSG_ERROR( "failed to record BS errors" ); - return sc; - } } return StatusCode::SUCCESS; diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h index 65be0ede4371a22baaafe6843b0c633cbe797eba..ff8fb2105241218700a684f1166eb054c0478c92 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRTRawDataProviderTool.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef TRT_RAWDATABYTESTREAMCNV_TRTRAWDATAPROVIDERTOOL_H @@ -10,7 +10,6 @@ #include "AthenaKernel/SlotSpecificObj.h" #include "ByteStreamData/RawEvent.h" #include "InDetRawData/InDetTimeCollection.h" -#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" #include "TRT_RawDataByteStreamCnv/ITRT_RodDecoder.h" #include "StoreGate/WriteHandleKey.h" @@ -23,6 +22,8 @@ // the tool to decode a ROB frament +class TRT_BSErrorContainer; + class TRTRawDataProviderTool : virtual public ITRTRawDataProviderTool, public AthAlgTool { @@ -34,7 +35,7 @@ class TRTRawDataProviderTool : virtual public ITRTRawDataProviderTool, //! constructor TRTRawDataProviderTool( const std::string& type, const std::string& name, - const IInterface* parent ) ; + const IInterface* parent ) ; //! destructor virtual ~TRTRawDataProviderTool() ; @@ -47,15 +48,15 @@ class TRTRawDataProviderTool : virtual public ITRTRawDataProviderTool, //! this is the main decoding method virtual StatusCode convert(const std::vector<const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment*>& vecRobs, - TRT_RDO_Container* rdoIdc ) override; + TRT_RDO_Container* rdoIdc, + TRT_BSErrContainer* bsErrCont + ) override; private: TRTRawDataProviderTool( ); //Not implemented ToolHandle<ITRT_RodDecoder> m_decoder; - ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_bsErrSvc; - // bookkeeping if we have decoded a ROB already mutable std::mutex m_mutex; struct CacheEntry { diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx index 58e2e2b1d49a0ed439d1ccd74216e8b481b86116..8d98a5277484c1aef45af2d0185b963f51b70794 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ @@ -24,6 +24,8 @@ #include "AthenaPoolUtilities/AthenaAttributeList.h" +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" + /* * TRT Specific detector manager to get layout information */ @@ -43,7 +45,7 @@ TRT_RodDecoder::TRT_RodDecoder ( const std::string& type, const std::string& name,const IInterface* parent ) : AthAlgTool ( type,name,parent ), m_CablingSvc ( "TRT_CablingSvc", name ), - m_bsErrSvc ( "TRT_ByteStream_ConditionsSvc", name ), + // m_bsErrSvc ( "TRT_ByteStream_ConditionsSvc", name ), m_recordBSErrors ( true ), m_lookAtSidErrors ( true ), m_lookAtErrorErrors ( false ), @@ -63,7 +65,6 @@ TRT_RodDecoder::TRT_RodDecoder { declareProperty ( "TRT_Cabling", m_CablingSvc ); - declareProperty ( "BSCondSvc", m_bsErrSvc ); declareProperty ( "RecordByteStreamErrors", m_recordBSErrors ); declareProperty ( "LookAtSidErrors", m_lookAtSidErrors ); declareProperty ( "LookAtErrorErrors", m_lookAtErrorErrors ); @@ -119,17 +120,6 @@ StatusCode TRT_RodDecoder::initialize() ATH_MSG_INFO( "Retrieved tool " << m_CablingSvc ); - /* - * Retrieve conditions tool - */ - if ( m_bsErrSvc.retrieve().isFailure() ) - { - ATH_MSG_FATAL( "Failed to retrieve service " << m_bsErrSvc ); - return StatusCode::FAILURE; - } else - ATH_MSG_INFO( "Retrieved service " << m_bsErrSvc ); - - /* * get detector manager */ @@ -260,6 +250,7 @@ StatusCode TRT_RodDecoder::finalize() { StatusCode TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag, TRT_RDO_Container* rdoIdc, + TRT_BSErrContainer* bsErr, const std::vector<IdentifierHash>* vecHash ) { @@ -293,7 +284,8 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag, if ( *rob_status ) { - m_bsErrSvc->add_rob_error( robFrag->rob_source_id(), *rob_status ); + bsErr->add_rob_error( robFrag->rob_source_id(), *rob_status ); + /* @@ -442,14 +434,14 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag, if ( m_lookAtSidErrors && D_sid ) { // cout << "sid "; - m_bsErrSvc->add_sid_error( Index ); + bsErr->add_sid_error( Index ); sid_errors++; } if ( m_lookAtErrorErrors && D_error ) { // cout << "err "; - m_bsErrSvc->add_error_error( Index ); + bsErr->add_error_error( Index ); error_errors++; } @@ -457,7 +449,7 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag, { // cout << "l1(" << hex << D_L1ID << "/" // << (rod_L1ID & 0x7) << dec; - m_bsErrSvc->add_l1id_error( Index, D_L1ID ); + bsErr->add_l1id_error( Index, D_L1ID ); l1id_errors++; } @@ -476,14 +468,14 @@ TRT_RodDecoder::fillCollection ( const ROBFragment* robFrag, { // cout << "bc(" << hex << D_BCID << "/" // << expected_BCID << dec; - m_bsErrSvc->add_bcid_error( Index, D_BCID ); + bsErr->add_bcid_error( Index, D_BCID ); bcid_errors++; } } else if ( m_lookAtMissingErrors ) { // cout << "mis "; - m_bsErrSvc->add_missing_error( Index ); + bsErr->add_missing_error( Index ); missing_errors++; } diff --git a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h index 1d4ad8223326f4fae378325fef7c4d3cfba3ab08..9d7103b9527732130ed046b74fd677d6e7a89217 100644 --- a/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h +++ b/InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv/src/TRT_RodDecoder.h @@ -19,7 +19,6 @@ /* * TRT Tools we use */ -#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" #include "TRT_Cabling/ITRT_CablingSvc.h" /* @@ -92,16 +91,15 @@ public: //! the method to fill the IDC virtual StatusCode fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment* robFrag, - TRT_RDO_Container* rdoIdc, - const std::vector<IdentifierHash>* vecHash = 0) override; + TRT_RDO_Container* rdoIdc, + TRT_BSErrContainer* bserr, + const std::vector<IdentifierHash>* vecHash = 0) override; private: ServiceHandle<ITRT_CablingSvc> m_CablingSvc; - ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_bsErrSvc; - /* * Do we look for Front-End Errors at all? */ diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py index 18736a0d8bfa2327daea67e2ab3ede0425981c46..df52abe5e3902b23f4799c624db4042fdbf3994f 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetMonitoringTRT.py @@ -92,6 +92,10 @@ InDetTRT_Monitoring_Tool = TRT_Monitoring_Tool (name = " TrigDecisionObjectName = "xTrigDecision" if DQMonFlags.useTrigger else "" ) +if globalflags.DataSource == 'geant4': + #No ByteStream error in MC case + InDetTRT_Monitoring_Tool.ByteStreamErrors="" + if jobproperties.Beam.beamType()=='collisions': from AthenaMonitoring.FilledBunchFilterTool import GetFilledBunchFilterTool InDetTRT_Monitoring_Tool.FilterTools += [GetFilledBunchFilterTool()] diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt index 108d7b855e18bf790e174462329993c717a5a779..d54e39e7da0126b8bb78d24ccbb9b07107fe04b1 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/CMakeLists.txt @@ -16,6 +16,7 @@ atlas_depends_on_subdirs( PUBLIC Control/AthenaBaseComps InnerDetector/InDetConditions/InDetConditionsSummaryService InnerDetector/InDetConditions/TRT_ConditionsServices + InnerDetector/InDetConditions/InDetByteStreamErrors Event/xAOD/xAODEventInfo Commission/CommissionEvent InnerDetector/InDetDetDescr/InDetReadoutGeometry diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h index 75479033532b46249f48f799e4eaeaa25857535c..d4d63d3f8e8be5f015d7e6139c363288735ecead 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3ESD_Alg.h @@ -55,7 +55,6 @@ class ITRT_CalDbTool; class ITRT_StrawStatusSummaryTool; class ITRT_ConditionsSvc; class ITRT_DAQ_ConditionsSvc; -class ITRT_ByteStream_ConditionsSvc; class ITRT_StrawNeighbourSvc; class TRTMonitoringRun3ESD_Alg : public AthMonitorAlgorithm { diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h index 022fe8908b4aa438063e7f8da063a15fbbec5774..5fa1277d71477372ce802e2f44cf80fcc9e7c367 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/TRTMonitoringRun3/TRTMonitoringRun3RAW_Alg.h @@ -30,6 +30,8 @@ #include "MagFieldInterfaces/IMagFieldSvc.h" +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" + // STDLIB #include <string> #include <vector> @@ -43,7 +45,6 @@ class AtlasDetectorID; class TRT_ID; class Identifier; class ITRT_StrawStatusSummaryTool; -class ITRT_ByteStream_ConditionsSvc; class TRTMonitoringRun3RAW_Alg : public AthMonitorAlgorithm { public: @@ -111,9 +112,7 @@ private: float radToDegrees(float radValue) const; // Services - ServiceHandle<IToolSvc> p_toolSvc; ToolHandle<ITRT_StrawStatusSummaryTool> m_sumTool; - ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_BSSvc; // Data handles SG::ReadHandleKey<TRT_RDO_Container> m_rdoContainerKey{this, "TRTRawDataObjectName", "TRT_RDOs", "Name of TRT RDOs container"}; @@ -122,6 +121,8 @@ private: SG::ReadHandleKey<TrackCollection> m_combTrackCollectionKey{this, "track_collection_hole_finder", "CombinedInDetTracks", "Name of tracks container used for hole finder"}; SG::ReadHandleKey<TrackCollection> m_trackCollectionKey{this, "TRTTracksObjectName", "Tracks", "Name of tracks container"}; + SG::ReadHandleKey<TRT_BSErrContainer> m_bsErrContKey{this,"ByteStreamErrors","TRT_ByteStreamErrs","SG key of TRT ByteStream Error container"}; + // Tools ToolHandle<Trk::ITrackHoleSearchTool> m_trt_hole_finder{this, "trt_hole_search", "TRTTrackHoleSearchTool", "Track hole search tool name"}; ToolHandle<Trk::ITrackSummaryTool> m_TrackSummaryTool{this, "TrackSummaryTool", "InDetTrackSummaryTool", "Track summary tool name"}; diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py index ea2ca6a9fa103199a7a4fe847e733bb906536c04..ceae33541b167555346b8c4f31ce3bbb82d53bb3 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/python/TRTMonitoringRun3RAW_Alg.py @@ -7,7 +7,9 @@ def TRTMonitoringRun3RAW_AlgConfig(inputFlags): from AthenaConfiguration.ComponentFactory import CompFactory algTRTMonitoringRun3RAW = helper.addAlgorithm(CompFactory.TRTMonitoringRun3RAW_Alg, - 'AlgTRTMonitoringRun3RAW') + 'AlgTRTMonitoringRun3RAW', + ByteStreamErrors= "" if inputFlags.isMC else "TRT_ByteStreamErrs" + ) from AthenaCommon.AthenaCommonFlags import athenaCommonFlags diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx index fa2b8a9121fe7f34005f38e1f3048b986f50329a..3a45c7ae8d3332f1b3076666aad178a6892a1bb8 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3ESD_Alg.cxx @@ -17,7 +17,6 @@ #include "TRT_ConditionsServices/ITRT_ConditionsSvc.h" #include "TRT_ConditionsServices/ITRT_StrawStatusSummaryTool.h" #include "TRT_ConditionsServices/ITRT_DAQ_ConditionsSvc.h" -#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" #include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h" #include "InDetConditionsSummaryService/IInDetConditionsSvc.h" diff --git a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx index 60cb72bf176ef8c1fbac08ef5941c6b7225fe095..c9f04e4dcb349175b3f68bfde68d686a82d3ef6c 100644 --- a/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx +++ b/InnerDetector/InDetMonitoring/TRTMonitoringRun3/src/TRTMonitoringRun3RAW_Alg.cxx @@ -17,7 +17,6 @@ #include "TRT_ConditionsServices/ITRT_ConditionsSvc.h" #include "TRT_ConditionsServices/ITRT_StrawStatusSummaryTool.h" #include "TRT_ConditionsServices/ITRT_DAQ_ConditionsSvc.h" -#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" #include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h" #include "InDetConditionsSummaryService/IInDetConditionsSvc.h" @@ -41,15 +40,11 @@ TRTMonitoringRun3RAW_Alg::TRTMonitoringRun3RAW_Alg( const std::string& name, ISv ,m_mgr(0) ,m_minTRThits(10) ,m_minP(0) -,p_toolSvc("IToolSvc", name) ,m_sumTool("TRT_StrawStatusSummaryTool", this) -,m_BSSvc("TRT_ByteStream_ConditionsSvc", name) ,m_isCosmics(false) ,m_EventBurstCut(-1) { - declareProperty("ToolSvc", p_toolSvc); declareProperty("InDetTRTStrawStatusSummaryTool", m_sumTool); - declareProperty("TRT_ByteStream_ConditionsSvc", m_BSSvc); declareProperty("doStraws", m_doStraws = true); declareProperty("doExpert", m_doExpert = true); declareProperty("doChips", m_doChips = true); @@ -84,9 +79,6 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() { // initialize superclass ATH_CHECK( AthMonitorAlgorithm::initialize() ); - IToolSvc *p_toolSvc; // NOTE: recreation of ToolSvc - - ATH_CHECK( service("ToolSvc", p_toolSvc) ); // Retrieve detector manager. ATH_CHECK( detStore()->retrieve(m_mgr, "TRT") ); @@ -102,13 +94,6 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() { ATH_CHECK( m_sumTool.retrieve() ); } - // Retrieve the TRT_ByteStreamService. - if (m_BSSvc.name().empty()) { - ATH_MSG_WARNING("TRT_ByteStreamSvc not given."); - } else { - ATH_CHECK( m_BSSvc.retrieve() ); - } - Identifier ident; if (m_sumTool.name() != "") { @@ -137,6 +122,7 @@ StatusCode TRTMonitoringRun3RAW_Alg::initialize() { ATH_CHECK( m_TRT_BCIDCollectionKey.initialize() ); ATH_CHECK( m_combTrackCollectionKey.initialize() ); ATH_CHECK( m_trackCollectionKey.initialize() ); + ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) ); return StatusCode::SUCCESS; } @@ -147,6 +133,18 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI //-------------------------------------------------------------------------------------------------// StatusCode sc = StatusCode::SUCCESS; + const TRT_BSErrContainer emptyErrCont;//Empty dummy instance for MC + const TRT_BSErrContainer* bsErrCont=&emptyErrCont; + + if (!m_bsErrContKey.empty()) { + //Regular real-data case, get the byte-stream errors from SG + SG::ReadHandle<TRT_BSErrContainer> bsErrContHdl{m_bsErrContKey}; + bsErrCont=bsErrContHdl.cptr(); + } + else { + ATH_MSG_DEBUG("MC case, using dummy TRT_BSErrContainer"); + } + const unsigned int lumiBlock = eventInfo.lumiBlock(); ATH_MSG_VERBOSE("This is lumiblock : " << lumiBlock); @@ -154,18 +152,18 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI // m_lastLumiBlock = lumiBlock; // } - //Get BSConversion Errors from BSConditionsServices: - std::set<std::pair<uint32_t, uint32_t> > *L1IDErrorSet = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::L1IDError); - std::set<std::pair<uint32_t, uint32_t> > *BCIDErrorSet = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::BCIDError); - std::set<uint32_t> *MissingErrorSet = m_BSSvc->getErrorSet(TRTByteStreamErrors::MISSINGError); - std::set<uint32_t> *SidErrorSet = m_BSSvc->getErrorSet(TRTByteStreamErrors::SIDError); - std::set<std::pair<uint32_t, uint32_t> > *RobStatusErrorSet = m_BSSvc->getRodRobErrorSet(TRTByteStreamErrors::RobStatusError); + //Get BSConversion errors + const std::set<std::pair<uint32_t, uint32_t> > &L1IDErrorSet = bsErrCont->getL1ErrorSet(); + const std::set<std::pair<uint32_t, uint32_t> > &BCIDErrorSet = bsErrCont->getBCIDErrorSet(); + const std::set<uint32_t> &MissingErrorSet = bsErrCont->getMissingErrorSet(); + const std::set<uint32_t> &SidErrorSet = bsErrCont->getSidErrorSet(); + const std::set<std::pair<uint32_t, uint32_t> > &RobStatusErrorSet = bsErrCont->getRobErrorSet(); const unsigned int rod_id_base[2][2] = { { 0x310000, 0x320000 }, { 0x330000, 0x340000 } }; const unsigned int nChipsTotal[2][2] = { { 3328, 3328 }, { 7680, 7680 } }; const unsigned int nRobsTotal[2][2] = { { 32, 32 }, { 64, 64 } }; float nBSErrors[2][2] = { { 0, 0 }, { 0, 0 } }; float nRobErrors[2][2] = { { 0, 0 }, { 0, 0 } }; - const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { BCIDErrorSet, L1IDErrorSet }; + const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { &BCIDErrorSet, &L1IDErrorSet }; for (int iset = 0; iset < 2; ++iset) { for (auto setIt = errorset1[iset]->begin(); setIt != errorset1[iset]->end(); ++setIt) { @@ -179,7 +177,7 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI } } - const std::set<uint32_t> *errorset2[2] = { MissingErrorSet, SidErrorSet }; + const std::set<uint32_t> *errorset2[2] = { &MissingErrorSet, &SidErrorSet }; for (int iset = 0; iset < 2; ++iset) { for (auto setIt = errorset2[iset]->begin(); setIt != errorset2[iset]->end(); ++setIt) { @@ -200,7 +198,7 @@ StatusCode TRTMonitoringRun3RAW_Alg::checkTRTReadoutIntegrity(const xAOD::EventI } } - for (auto setIt = RobStatusErrorSet->begin(); setIt != RobStatusErrorSet->end(); ++setIt) { + for (auto setIt = RobStatusErrorSet.begin(); setIt != RobStatusErrorSet.end(); ++setIt) { for (int ibe = 0; ibe < 2; ++ibe) { for (int iside = 0; iside < 2; ++iside) { if (setIt->first % rod_id_base[ibe][iside] < 0xffff) { diff --git a/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt b/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt index 79c1646ba47332575d76195782a50dc92f64c95e..672ecd50c06901bb84d4c6a71d4f7e910cbe0d9c 100644 --- a/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt +++ b/InnerDetector/InDetMonitoring/TRT_Monitoring/CMakeLists.txt @@ -23,6 +23,7 @@ atlas_depends_on_subdirs( PUBLIC Event/xAOD/xAODTrigger InnerDetector/InDetConditions/InDetConditionsSummaryService InnerDetector/InDetConditions/TRT_ConditionsServices + InnerDetector/InDetConditions/InDetByteStreamErrors InnerDetector/InDetDetDescr/InDetIdentifier InnerDetector/InDetDetDescr/InDetReadoutGeometry InnerDetector/InDetDetDescr/TRT_ReadoutGeometry diff --git a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx index 88680b033a191ec9eb3025dd5d0fc09a81acc00e..44ba700e1ff1a452ae5466c16112952e38eabd4c 100644 --- a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx +++ b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.cxx @@ -18,7 +18,6 @@ #include "TRT_ConditionsServices/ITRT_ConditionsSvc.h" #include "TRT_ConditionsServices/ITRT_StrawStatusSummaryTool.h" #include "TRT_ConditionsServices/ITRT_DAQ_ConditionsSvc.h" -#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" #include "TRT_ConditionsServices/ITRT_StrawNeighbourSvc.h" #include "InDetConditionsSummaryService/IInDetConditionsSvc.h" #include "xAODTrigger/TrigDecision.h" @@ -64,7 +63,6 @@ TRT_Monitoring_Tool::TRT_Monitoring_Tool(const std::string &type, const std::str p_toolSvc("IToolSvc", name), m_sumTool("TRT_StrawStatusSummaryTool", this), m_DAQSvc("TRT_DAQ_ConditionsSvc", name), // NOTE: not used anywhere? - m_BSSvc("TRT_ByteStream_ConditionsSvc", name), m_condSvc_BS("TRT_ByteStream_ConditionsSvc", name), // NOTE: not used anywhere? m_TRTStrawNeighbourSvc("TRT_StrawNeighbourSvc", name), m_TRTCalDbTool("TRT_CalDbTool", this), @@ -136,7 +134,6 @@ TRT_Monitoring_Tool::TRT_Monitoring_Tool(const std::string &type, const std::str declareProperty("ToolSvc", p_toolSvc); declareProperty("InDetTRTStrawStatusSummaryTool", m_sumTool); declareProperty("InDetTRT_DAQ_ConditionsSvc", m_DAQSvc); - declareProperty("TRT_ByteStream_ConditionsSvc", m_BSSvc); declareProperty("TRT_StrawNeighbourSvc", m_TRTStrawNeighbourSvc); declareProperty("DriftFunctionTool", m_drifttool); declareProperty("DoTRT_DCS", m_doDCS); @@ -419,13 +416,6 @@ StatusCode TRT_Monitoring_Tool::initialize() { ATH_CHECK( m_DAQSvc.retrieve() ); } - // Retrieve the TRT_ByteStreamService. - if (m_BSSvc.name().empty()) { - ATH_MSG_WARNING("TRT_ByteStreamSvc not given."); - } else { - ATH_CHECK( m_BSSvc.retrieve() ); - } - // Test out the TRT_ConditionsSummaryTool. //Identifier ident = m_trtid->straw_id(1,1,1,1,1); Identifier ident; @@ -589,6 +579,7 @@ StatusCode TRT_Monitoring_Tool::initialize() { ATH_CHECK( m_xAODEventInfoKey.initialize() ); ATH_CHECK( m_TRT_BCIDCollectionKey.initialize() ); ATH_CHECK( m_comTimeObjectKey.initialize() ); + ATH_CHECK( m_bsErrContKey.initialize(SG::AllowEmpty) ); ATH_CHECK( m_trigDecisionKey.initialize(!m_trigDecisionKey.empty()) ); ATH_MSG_INFO("My TRT_DAQ_ConditionsSvc is " << m_DAQSvc); @@ -4019,6 +4010,18 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo& //-------------------------------------------------------------------------------------------------// StatusCode sc = StatusCode::SUCCESS; + const TRT_BSErrContainer emptyErrCont;//Empty dummy instance for MC + const TRT_BSErrContainer* bsErrCont=&emptyErrCont; + + if (!m_bsErrContKey.empty()) { + //Regular real-data case, get the byte-stream errors from SG + SG::ReadHandle<TRT_BSErrContainer> bsErrContHdl{m_bsErrContKey}; + bsErrCont=bsErrContHdl.cptr(); + } + else { + ATH_MSG_DEBUG("MC case, using dummy TRT_BSErrContainer"); + } + const unsigned int lumiBlock = eventInfo.lumiBlock(); ATH_MSG_VERBOSE("This is lumiblock : " << lumiBlock); m_good_bcid = eventInfo.bcid(); @@ -4026,19 +4029,20 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo& if ((int)lumiBlock != m_lastLumiBlock) { m_lastLumiBlock = lumiBlock; } + //// + //Get BSConversion errors + const std::set<std::pair<uint32_t, uint32_t> > &L1IDErrorSet = bsErrCont->getL1ErrorSet(); + const std::set<std::pair<uint32_t, uint32_t> > &BCIDErrorSet = bsErrCont->getBCIDErrorSet(); + const std::set<uint32_t> &MissingErrorSet = bsErrCont->getMissingErrorSet(); + const std::set<uint32_t> &SidErrorSet = bsErrCont->getSidErrorSet(); + const std::set<std::pair<uint32_t, uint32_t> > &RobStatusErrorSet = bsErrCont->getRobErrorSet(); - //Get BSConversion Errors from BSConditionsServices: - std::set<std::pair<uint32_t, uint32_t> > *L1IDErrorSet = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::L1IDError); - std::set<std::pair<uint32_t, uint32_t> > *BCIDErrorSet = m_BSSvc->getIdErrorSet(TRTByteStreamErrors::BCIDError); - std::set<uint32_t> *MissingErrorSet = m_BSSvc->getErrorSet(TRTByteStreamErrors::MISSINGError); - std::set<uint32_t> *SidErrorSet = m_BSSvc->getErrorSet(TRTByteStreamErrors::SIDError); - std::set<std::pair<uint32_t, uint32_t> > *RobStatusErrorSet = m_BSSvc->getRodRobErrorSet(TRTByteStreamErrors::RobStatusError); const unsigned int rod_id_base[2][2] = { { 0x310000, 0x320000 }, { 0x330000, 0x340000 } }; const unsigned int nChipsTotal[2][2] = { { 3328, 3328 }, { 7680, 7680 } }; const unsigned int nRobsTotal[2][2] = { { 32, 32 }, { 64, 64 } }; float nBSErrors[2][2] = { { 0, 0 }, { 0, 0 } }; float nRobErrors[2][2] = { { 0, 0 }, { 0, 0 } }; - const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { BCIDErrorSet, L1IDErrorSet }; + const std::set<std::pair<uint32_t, uint32_t> > *errorset1[2] = { &BCIDErrorSet, &L1IDErrorSet }; for (int iset = 0; iset < 2; ++iset) { for (auto setIt = errorset1[iset]->begin(); setIt != errorset1[iset]->end(); ++setIt) { @@ -4052,7 +4056,7 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo& } } - const std::set<uint32_t> *errorset2[2] = { MissingErrorSet, SidErrorSet }; + const std::set<uint32_t> *errorset2[2] = { &MissingErrorSet, &SidErrorSet }; for (int iset = 0; iset < 2; ++iset) { for (auto setIt = errorset2[iset]->begin(); setIt != errorset2[iset]->end(); ++setIt) { @@ -4073,7 +4077,7 @@ StatusCode TRT_Monitoring_Tool::checkTRTReadoutIntegrity(const xAOD::EventInfo& } } - for (auto setIt = RobStatusErrorSet->begin(); setIt != RobStatusErrorSet->end(); ++setIt) { + for (auto setIt = RobStatusErrorSet.begin(); setIt != RobStatusErrorSet.end(); ++setIt) { for (int ibe = 0; ibe < 2; ++ibe) { for (int iside = 0; iside < 2; ++iside) { if (setIt->first % rod_id_base[ibe][iside] < 0xffff) { diff --git a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h index db18f6f250afb1dd925ff5f902027e1134330864..9a6fe96f17536a3814f0a5916e2ddc8f2525110b 100644 --- a/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h +++ b/InnerDetector/InDetMonitoring/TRT_Monitoring/src/TRT_Monitoring_Tool.h @@ -17,6 +17,7 @@ #include "xAODEventInfo/EventInfo.h" #include "InDetRawData/InDetTimeCollection.h" #include "InDetRawData/InDetRawDataCLASS_DEF.h" +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" // Tool interfaces #include "TrkToolInterfaces/ITrackSummaryTool.h" @@ -28,6 +29,8 @@ #include <vector> #include <set> + + class TProfile; class TH1F_LW; class TH2F_LW; @@ -55,7 +58,6 @@ class ITRT_CalDbTool; class ITRT_StrawStatusSummaryTool; class ITRT_ConditionsSvc; class ITRT_DAQ_ConditionsSvc; -class ITRT_ByteStream_ConditionsSvc; class ITRT_StrawNeighbourSvc; //class ITRT_DriftFunctionTool; @@ -144,7 +146,6 @@ private: ServiceHandle<IToolSvc> p_toolSvc; ToolHandle<ITRT_StrawStatusSummaryTool> m_sumTool; ServiceHandle<ITRT_DAQ_ConditionsSvc> m_DAQSvc; - ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_BSSvc; ServiceHandle<ITRT_ConditionsSvc> m_condSvc_BS; ServiceHandle<ITRT_StrawNeighbourSvc> m_TRTStrawNeighbourSvc; ToolHandle<ITRT_CalDbTool> m_TRTCalDbTool; @@ -159,6 +160,9 @@ private: SG::ReadHandleKey<ComTime> m_comTimeObjectKey{this, "ComTimeObjectName", "TRT_Phase", "Name of ComTime object"}; SG::ReadHandleKey<xAOD::TrigDecision> m_trigDecisionKey{this, "TrigDecisionObjectName", "xTrigDecision", "Name of trigger decision object"}; + SG::ReadHandleKey<TRT_BSErrContainer> m_bsErrContKey{this,"ByteStreamErrors","TRT_ByteStreamErrs","SG key of TRT ByteStream Error container"}; + + // Tools ToolHandle<Trk::ITrackSummaryTool> m_TrackSummaryTool{this, "TrkSummaryTool", "Trk::TrackSummaryTool/InDetTrackSummaryTool", "Track summary tool name"}; ToolHandle<Trk::ITrackHoleSearchTool> m_trt_hole_finder{this, "trt_hole_search", "TRTTrackHoleSearchTool", "Track hole search tool name"}; diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt index 22290d0d118fa49e0c3219064b05d9646ee75d73..0f556b1f9aa111bd4852119fe187fff8e3ca117b 100644 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/CMakeLists.txt @@ -24,6 +24,7 @@ atlas_depends_on_subdirs( PUBLIC InnerDetector/InDetEventCnv/PixelRawDataByteStreamCnv InnerDetector/InDetEventCnv/SCT_RawDataByteStreamCnv InnerDetector/InDetEventCnv/TRT_RawDataByteStreamCnv + InnerDetector/InDetConditions/TRT_ConditionsServices Trigger/TrigEvent/TrigSteeringEvent ) # Component(s) in the package: diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h index b013d61026530c11150d1ccd260a293f2d6cebfc..fe0b3816a02cb49d1b29a255264046d3d83c92c9 100644 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/InDetTrigRawDataProvider/TrigTRTRawDataProvider.h @@ -23,6 +23,7 @@ #include "InDetTrigToolInterfaces/ITrigRawDataProviderTool.h" //typedef #include "InDetRawData/TRT_RDO_Container.h" +#include "TRT_ConditionsServices/ITRT_ByteStream_ConditionsSvc.h" #include <string> @@ -60,6 +61,7 @@ namespace InDet { ServiceHandle<IROBDataProviderSvc> m_robDataProvider; ToolHandle<ITRTRawDataProviderTool> m_rawDataTool; ServiceHandle<ITRT_CablingSvc> m_IdMapping; + ServiceHandle<ITRT_ByteStream_ConditionsSvc> m_bsErrorSvc; const TRT_ID* m_id; //! the RDO container TRT_RDO_Container* m_container; diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx index 151170bccb0e1ad040b4c1e85ec02e4213e8474c..b32400654e2f2e3bb520297bd24e54cb2373b5a6 100644 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigRawDataProvider/src/TrigTRTRawDataProvider.cxx @@ -10,7 +10,7 @@ #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" #include "IRegionSelector/IRegSelSvc.h" #include "TRT_RawDataByteStreamCnv/ITRTRawDataProviderTool.h" - +#include "InDetByteStreamErrors/TRT_BSErrContainer.h" using OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment; @@ -28,6 +28,7 @@ namespace InDet { m_robDataProvider ("ROBDataProviderSvc", name), m_rawDataTool ("TRTRawDataProviderTool/InDetTrigTRTRawDataProviderTool"), m_IdMapping ("TRT_CablingSvc",name), + m_bsErrorSvc("TRT_ByteStream_ConditionsSvc",name), m_id(0), m_container(0) { @@ -79,6 +80,12 @@ namespace InDet { return StatusCode::FAILURE; } else msg(MSG::INFO) << "Retrieved service " << m_IdMapping << endmsg; + + if (m_bsErrorSvc.retrieve().isFailure()){ + ATH_MSG_FATAL( "Could not retrieve " << m_bsErrorSvc ); + return StatusCode::FAILURE; + } + m_container = new TRT_RDO_Container(m_id->straw_layer_hash_max(), EventContainers::Mode::OfflineFast); m_container ->addRef(); // make sure it is never deleted @@ -144,11 +151,42 @@ namespace InDet { m_robDataProvider->getROBData(robIDlist , listOfRobf); // ask TRTRawDataProviderTool to decode it and to fill the IDC StatusCode scon = StatusCode::FAILURE; + std::unique_ptr<TRT_BSErrContainer> bsErrCnt=std::make_unique<TRT_BSErrContainer>(); if (m_container){ - scon = m_rawDataTool->convert(listOfRobf,m_container); + scon = m_rawDataTool->convert(listOfRobf,m_container,bsErrCnt.get()); if (scon==StatusCode::FAILURE) msg(MSG::ERROR) << "BS conversion into RDOs failed" << endmsg; } + + //Backward compatiblity hack: convert TRT_BSErrContainer into thread-unsafe + //TRTByteStream_ConditionsSvc + + m_bsErrorSvc->resetCounts(); + for (const auto& id_bcid : bsErrCnt->getBCIDErrorSet()) { + m_bsErrorSvc->add_bcid_error(id_bcid.first,id_bcid.second); + } + + for (const auto& id_l1id : bsErrCnt->getL1ErrorSet()) { + m_bsErrorSvc->add_l1id_error(id_l1id.first,id_l1id.second); + } + + for (const auto& id_missing : bsErrCnt->getMissingErrorSet()) { + m_bsErrorSvc->add_missing_error(id_missing); + } + + for (const auto& id : bsErrCnt->getErrorErrorSet()) { + m_bsErrorSvc->add_error_error(id); + } + + for (const auto& id : bsErrCnt->getSidErrorSet()) { + m_bsErrorSvc->add_sid_error(id); + } + + for (const auto& id_stat : bsErrCnt->getRobErrorSet()) { + m_bsErrorSvc->add_rob_error(id_stat.first,id_stat.second); + } + + return scon; }