From a3fbb128686987d9b5a9c2242cd548eeef74be2c Mon Sep 17 00:00:00 2001 From: Marcin Nowak <Marcin.Nowak@cern.ch> Date: Thu, 24 Jan 2019 17:52:50 +0100 Subject: [PATCH] Fix getPileUpEventInfo so it sets SG pointers only for new objects --- Control/PileUpComps/src/PileUpEventLoopMgr.cxx | 18 +++--------------- Control/PileUpTools/src/PileUpMergeSvc.cxx | 16 ++++++++++------ 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx index 3bae7b7e13ef..99fc5327f15e 100644 --- a/Control/PileUpComps/src/PileUpEventLoopMgr.cxx +++ b/Control/PileUpComps/src/PileUpEventLoopMgr.cxx @@ -304,7 +304,7 @@ StatusCode PileUpEventLoopMgr::nextEvent(int maxevt) } } - const xAOD::EventInfo* pEvent(0), *pEventSignal(0); + const xAOD::EventInfo* pEvent(nullptr), *pEventSignal(nullptr); // loop over events if the maxevt (received as input) is different from -1. // if evtmax is -1 it means infinite loop (till time limit that is) @@ -344,23 +344,11 @@ StatusCode PileUpEventLoopMgr::nextEvent(int maxevt) pOverEvent->setStore( pOverEventAux ); ATH_MSG_INFO("MN: #subevents in orig =" << pEvent->subEvents().size()); - if( pEvent->subEvents().size() > 1 ) { - ATH_MSG_INFO(" orig subev[1] link=" << pEvent->subEvents()[1].link() ); - } // Copy the eventInfo data from origStream event *pOverEvent = *pEvent; pOverEvent->clearSubEvents(); // start clean without any subevents - ATH_MSG_INFO("MN: #subevents in copy =" << pOverEvent->subEvents().size()); - if( pOverEvent->subEvents().size() > 1 ) { - ATH_MSG_INFO(" copy subev[1] link=" << pOverEvent->subEvents()[1].link() ); - } - ATH_MSG_INFO("MN: #subevents in orig =" << pEvent->subEvents().size()); - if( pEvent->subEvents().size() > 1 ) { - ATH_MSG_INFO(" orig subev[1] link=" << pEvent->subEvents()[1].link() ); - } - // Record the xAOD object(s): CHECK( m_evtStore->record( pOverEventAux, "McEventInfoAux." ) ); CHECK( m_evtStore->record( pOverEvent, "McEventInfo" ) ); @@ -437,7 +425,8 @@ StatusCode PileUpEventLoopMgr::nextEvent(int maxevt) // link to the fresh EI added to the container: ElementLink< xAOD::EventInfoContainer > eilink( puei_sg_key, puei->size()-1, &*m_evtStore ); - xAOD::EventInfo::SubEvent subev( 0, pOverEvent->subEvents().size(), xAOD::EventInfo::Signal, eilink ); + xAOD::EventInfo::SubEvent subev( 0, pOverEvent->subEvents().size(), + xAOD::EventInfo::Signal, eilink ); pOverEvent->addSubEvent( subev ); // pOverEvent->addSubEvt(0, PileUpTimeEventIndex::Signal, pEventSignal, &m_signalStream.store()); } @@ -465,7 +454,6 @@ StatusCode PileUpEventLoopMgr::nextEvent(int maxevt) } if( addpEvent ) { - ATH_MSG_INFO ( "MN: addpEvent" ); xAOD::EventInfo* ei = new xAOD::EventInfo( *pEvent ); ei->clearSubEvents(); // MN: FIX - verify that subevents should be cleared! puei->push_back( ei ); diff --git a/Control/PileUpTools/src/PileUpMergeSvc.cxx b/Control/PileUpTools/src/PileUpMergeSvc.cxx index dba31e2f383e..0fc54483e0db 100755 --- a/Control/PileUpTools/src/PileUpMergeSvc.cxx +++ b/Control/PileUpTools/src/PileUpMergeSvc.cxx @@ -135,11 +135,15 @@ const xAOD::EventInfo* PileUpMergeSvc::getPileUpEvent( StoreGateSvc* sg, const s : sg->tryConstRetrieve<xAOD::EventInfo>( einame ); if( xAODEventInfo ) { ATH_MSG_INFO("Found xAOD::EventInfo"); - ATH_MSG_INFO(" EventInfo has" << xAODEventInfo->subEvents().size() << " subevents" ); - // the loop below serves 2 purposes: to recreate subevent links cache - // and set SG pointer in subevents - for( auto& subev : xAODEventInfo->subEvents() ) { - const_cast<xAOD::EventInfo*>(subev.ptr())->setEvtStore( sg ); + ATH_MSG_INFO(" EventInfo has " << xAODEventInfo->subEvents().size() << " subevents" ); + if( xAODEventInfo->evtStore() == nullptr ) { + // SG is 0 only when the xAODEventInfo is first read + xAODEventInfo->setEvtStore( sg ); + // the loop below serves 2 purposes: to recreate subevent links cache + // and set SG pointer in subevents + for( auto& subev : xAODEventInfo->subEvents() ) { + subev.ptr()->setEvtStore( sg ); + } } } else { // Try reading old EventInfo @@ -154,6 +158,7 @@ const xAOD::EventInfo* PileUpMergeSvc::getPileUpEvent( StoreGateSvc* sg, const s std::unique_ptr< xAOD::EventInfo > pxAODEventInfo( new xAOD::EventInfo() ); std::unique_ptr< xAOD::EventAuxInfo > pxAODEventAuxInfo(new xAOD::EventAuxInfo()); pxAODEventInfo->setStore( pxAODEventAuxInfo.get() ); + pxAODEventInfo->setEvtStore( sg ); if( !m_xAODCnvTool->convert( pEvent, pxAODEventInfo.get(), false, false ).isSuccess() ) { ATH_MSG_ERROR("Failed to convert xAOD::EventInfo in SG"); return nullptr; @@ -253,7 +258,6 @@ const xAOD::EventInfo* PileUpMergeSvc::getPileUpEvent( StoreGateSvc* sg, const s } if( xAODEventInfo ) { - const_cast<xAOD::EventInfo*>(xAODEventInfo)->setEvtStore( sg ); ATH_MSG_INFO("Dumping xAOD::EventInfo"); xAOD::dump( *xAODEventInfo ); } else { -- GitLab