diff --git a/Event/xAOD/xAODTriggerAthenaPool/CMakeLists.txt b/Event/xAOD/xAODTriggerAthenaPool/CMakeLists.txt index 844b2de14249db74bbe0096d7206860e96b2a0a5..09eb2083dac5dd89f4abd0597fbcedfb1155c6a2 100644 --- a/Event/xAOD/xAODTriggerAthenaPool/CMakeLists.txt +++ b/Event/xAOD/xAODTriggerAthenaPool/CMakeLists.txt @@ -1,3 +1,4 @@ +# $Id: CMakeLists.txt 755768 2016-06-17 13:43:10Z krasznaa $ ################################################################################ # Package: xAODTriggerAthenaPool ################################################################################ @@ -6,20 +7,47 @@ atlas_subdir( xAODTriggerAthenaPool ) # Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Trigger/TrigEvent/TrigNavTools - PRIVATE - Control/AthContainers - Control/AthenaKernel - Database/AthenaPOOL/AthenaPoolCnvSvc - Database/AthenaPOOL/AthenaPoolUtilities - Event/xAOD/xAODTrigger ) +atlas_depends_on_subdirs( + PUBLIC + Trigger/TrigEvent/TrigNavTools + PRIVATE + Control/AthContainers + Control/AthenaKernel + Database/AthenaPOOL/AthenaPoolCnvSvc + Database/AthenaPOOL/AthenaPoolUtilities + Event/xAOD/xAODTrigger ) # Component(s) in the package: atlas_add_poolcnv_library( xAODTriggerAthenaPoolPoolCnv - src/*.cxx - FILES xAODTrigger/MuonRoIContainer.h xAODTrigger/MuonRoIAuxContainer.h xAODTrigger/JetRoIContainer.h xAODTrigger/JetRoIAuxContainer.h xAODTrigger/EmTauRoIContainer.h xAODTrigger/EmTauRoIAuxContainer.h xAODTrigger/JetEtRoI.h xAODTrigger/JetEtRoIAuxInfo.h xAODTrigger/EnergySumRoI.h xAODTrigger/EnergySumRoIAuxInfo.h xAODTrigger/TrigCompositeContainer.h xAODTrigger/TrigCompositeAuxContainer.h xAODTrigger/TriggerMenuContainer.h xAODTrigger/TriggerMenuAuxContainer.h xAODTrigger/TrigConfKeys.h xAODTrigger/TrigDecision.h xAODTrigger/TrigDecisionAuxInfo.h xAODTrigger/TrigNavigation.h xAODTrigger/TrigNavigationAuxInfo.h xAODTrigger/RoiDescriptorStore.h xAODTrigger/RoiDescriptorStoreAuxInfo.h xAODTrigger/BunchConfKey.h xAODTrigger/BunchConfContainer.h xAODTrigger/BunchConfAuxContainer.h xAODTrigger/TrigPassBitsContainer.h xAODTrigger/TrigPassBitsAuxContainer.h - TYPES_WITH_NAMESPACE xAOD::MuonRoIContainer xAOD::MuonRoIAuxContainer xAOD::JetRoIContainer xAOD::JetRoIAuxContainer xAOD::EmTauRoIContainer xAOD::EmTauRoIAuxContainer xAOD::JetEtRoI xAOD::JetEtRoIAuxInfo xAOD::EnergySumRoI xAOD::EnergySumRoIAuxInfo xAOD::TrigCompositeContainer xAOD::TrigCompositeAuxContainer xAOD::TriggerMenuContainer xAOD::TriggerMenuAuxContainer xAOD::TrigConfKeys xAOD::TrigDecision xAOD::TrigDecisionAuxInfo xAOD::TrigNavigation xAOD::TrigNavigationAuxInfo xAOD::RoiDescriptorStore xAOD::RoiDescriptorStoreAuxInfo xAOD::BunchConfKey xAOD::BunchConfContainer xAOD::BunchConfAuxContainer xAOD::TrigPassBitsContainer xAOD::TrigPassBitsAuxContainer - CNV_PFX xAOD - LINK_LIBRARIES TrigNavToolsLib AthContainers AthenaKernel AthenaPoolCnvSvcLib AthenaPoolUtilities xAODTrigger ) - + src/*.h src/*.cxx + FILES xAODTrigger/MuonRoIContainer.h xAODTrigger/MuonRoIAuxContainer.h + xAODTrigger/JetRoIContainer.h xAODTrigger/JetRoIAuxContainer.h + xAODTrigger/EmTauRoIContainer.h xAODTrigger/EmTauRoIAuxContainer.h + xAODTrigger/JetEtRoI.h xAODTrigger/JetEtRoIAuxInfo.h + xAODTrigger/EnergySumRoI.h xAODTrigger/EnergySumRoIAuxInfo.h + xAODTrigger/TrigCompositeContainer.h xAODTrigger/TrigCompositeAuxContainer.h + xAODTrigger/TriggerMenuContainer.h xAODTrigger/TriggerMenuAuxContainer.h + xAODTrigger/TrigConfKeys.h + xAODTrigger/TrigDecision.h xAODTrigger/TrigDecisionAuxInfo.h + xAODTrigger/TrigNavigation.h xAODTrigger/TrigNavigationAuxInfo.h + xAODTrigger/RoiDescriptorStore.h xAODTrigger/RoiDescriptorStoreAuxInfo.h + xAODTrigger/BunchConfKey.h + xAODTrigger/BunchConfContainer.h xAODTrigger/BunchConfAuxContainer.h + xAODTrigger/TrigPassBitsContainer.h xAODTrigger/TrigPassBitsAuxContainer.h + TYPES_WITH_NAMESPACE xAOD::MuonRoIContainer xAOD::MuonRoIAuxContainer + xAOD::JetRoIContainer xAOD::JetRoIAuxContainer + xAOD::EmTauRoIContainer xAOD::EmTauRoIAuxContainer + xAOD::JetEtRoI xAOD::JetEtRoIAuxInfo + xAOD::EnergySumRoI xAOD::EnergySumRoIAuxInfo + xAOD::TrigCompositeContainer xAOD::TrigCompositeAuxContainer + xAOD::TriggerMenuContainer xAOD::TriggerMenuAuxContainer + xAOD::TrigConfKeys + xAOD::TrigDecision xAOD::TrigDecisionAuxInfo + xAOD::TrigNavigation xAOD::TrigNavigationAuxInfo + xAOD::RoiDescriptorStore xAOD::RoiDescriptorStoreAuxInfo + xAOD::BunchConfKey + xAOD::BunchConfContainer xAOD::BunchConfAuxContainer + xAOD::TrigPassBitsContainer xAOD::TrigPassBitsAuxContainer + CNV_PFX xAOD + LINK_LIBRARIES TrigNavToolsLib AthContainers AthenaKernel AthenaPoolCnvSvcLib + AthenaPoolUtilities xAODTrigger ) diff --git a/Event/xAOD/xAODTriggerAthenaPool/cmt/requirements b/Event/xAOD/xAODTriggerAthenaPool/cmt/requirements index a15420f9ca05edda8809fd3732d7f549e89aa744..67c400477b945992537acc80ad8941ce7e1b806f 100644 --- a/Event/xAOD/xAODTriggerAthenaPool/cmt/requirements +++ b/Event/xAOD/xAODTriggerAthenaPool/cmt/requirements @@ -75,3 +75,4 @@ apply_pattern poolcnv typesWithNamespace="xAOD::MuonRoIContainer \ TrigPassBitsContainer.h \ TrigPassBitsAuxContainer.h" \ cnv_pfx="xAOD" + diff --git a/Event/xAOD/xAODTriggerAthenaPool/src/xAODTrigPassBitsContainerCnv.cxx b/Event/xAOD/xAODTriggerAthenaPool/src/xAODTrigPassBitsContainerCnv.cxx new file mode 100644 index 0000000000000000000000000000000000000000..017fa1c99c0cbb30f8998fc9a414f0f9c82feff8 --- /dev/null +++ b/Event/xAOD/xAODTriggerAthenaPool/src/xAODTrigPassBitsContainerCnv.cxx @@ -0,0 +1,34 @@ +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: xAODTrigPassBitsContainerCnv.cxx 755768 2016-06-17 13:43:10Z krasznaa $ + +// System include(s): +#include <memory> + +// Local include(s): +#include "xAODTrigPassBitsContainerCnv.h" + +xAODTrigPassBitsContainerCnv:: +xAODTrigPassBitsContainerCnv( ISvcLocator* svcLoc ) + : xAODTrigPassBitsContainerCnvBase( svcLoc ) { + +} + +xAOD::TrigPassBitsContainer* xAODTrigPassBitsContainerCnv::createTransient() { + + // Get the object using the base class: + std::unique_ptr< xAOD::TrigPassBitsContainer > + ondisk( xAODTrigPassBitsContainerCnvBase::createTransient() ); + + // Create a copy of it: + xAOD::TrigPassBitsContainer* result = new xAOD::TrigPassBitsContainer(); + for( size_t i = 0; i < ondisk->size(); ++i ) { + result->push_back( new xAOD::TrigPassBits() ); + } + result->setStore( ondisk->getConstStoreLink() ); + + // Now return it: + return result; +} diff --git a/Event/xAOD/xAODTriggerAthenaPool/src/xAODTrigPassBitsContainerCnv.h b/Event/xAOD/xAODTriggerAthenaPool/src/xAODTrigPassBitsContainerCnv.h new file mode 100644 index 0000000000000000000000000000000000000000..94df238b445f51c89d10a93aca1098dc4b16ad9a --- /dev/null +++ b/Event/xAOD/xAODTriggerAthenaPool/src/xAODTrigPassBitsContainerCnv.h @@ -0,0 +1,51 @@ +// Dear emacs, this is -*- c++ -*- + +/* + Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +*/ + +// $Id: xAODTrigPassBitsContainerCnv.h 755768 2016-06-17 13:43:10Z krasznaa $ +#ifndef XAODTRIGGERATHENAPOOL_XAODTRIGPASSBITSCONTAINERCNV_H +#define XAODTRIGGERATHENAPOOL_XAODTRIGPASSBITSCONTAINERCNV_H + +// Gaudi/Athena include(s): +#include "AthenaPoolCnvSvc/T_AthenaPoolxAODCnv.h" + +// EDM include(s): +#include "xAODTrigger/TrigPassBitsContainer.h" + +// Base the converter on the helper class: +typedef T_AthenaPoolxAODCnv< xAOD::TrigPassBitsContainer > + xAODTrigPassBitsContainerCnvBase; + +/// Custom converter for reading xAOD::TrigPassBitsContainer correctly +/// +/// Unfortunately we managed to write quite a lot of AOD files with incorrect +/// xAOD::TrigPassBitsContainer payload in them. (Forgot to declare a container +/// proxy for the type.) +/// +/// To overcome this, this converter explicitly creates a new container from +/// scratch. Which has the same size as the one on disk. Connects the new +/// container to the auxiliary store of the original one, and then returns +/// this freshly made container instead of the original one. +/// +/// Once incorrectly written files will not be an issue anymore (possibly this +/// will never be the case, as we also wrote some BS files like this...), this +/// hack could be removed. +/// +/// @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> +/// +/// $Revision: 755768 $ +/// $Date: 2016-06-17 15:43:10 +0200 (Fri, 17 Jun 2016) $ +/// +class xAODTrigPassBitsContainerCnv : public xAODTrigPassBitsContainerCnvBase { + +public: + /// Converter constructor + xAODTrigPassBitsContainerCnv( ISvcLocator* svcLoc ); + + /// Function reading in the persistent object from disk + virtual xAOD::TrigPassBitsContainer* createTransient() override final; +}; + +#endif // XAODTRIGGERATHENAPOOL_XAODTRIGPASSBITSCONTAINERCNV_H