Skip to content
Snippets Groups Projects
Commit fe7a9018 authored by Vakhtang Tsulaia's avatar Vakhtang Tsulaia
Browse files

Merge branch 'cutflowsvc_bug' into 'master'

Cutflowsvc bug

See merge request atlas/athena!9830
parents bdcdcb47 0147ca7a
1 merge request!20779WIP: Migrate DataQualityTools to ToolHandles
......@@ -83,13 +83,9 @@ CutFlowSvc::initialize()
incSvc->addListener(this, IncidentType::EndInputFile, 50); // pri has to be > 10 to be before MetaDataSvc.
incSvc->addListener(this, "MetaDataStop", 50);
xAOD::CutBookkeeperContainer* fileBook(NULL);
fileBook = new xAOD::CutBookkeeperContainer();
// Create bookkeeper container for bookkeepers in _this_ processing
auto fileBook = new xAOD::CutBookkeeperContainer();
ATH_CHECK( recordCollection( fileBook, m_fileCollName) );
if (m_outMetaDataStore->retrieve(m_completeBook,m_fileCollName).isFailure()) {
ATH_MSG_ERROR("Could not retrieve handle to cutflowsvc bookkeeper");
//return StatusCode::RECOVERABLE;
}
// Determine the skimming cycle number that we should use now from the input file
ATH_MSG_VERBOSE("Have currently the cycle number = " << m_skimmingCycle );
......@@ -137,6 +133,7 @@ CutIdentifier CutFlowSvc::registerFilter( const std::string& name,
{
ATH_MSG_DEBUG("calling registerFilter(" << name << ", " << description << ")" );
// *FIXME* This should probably be a unique_ptr, but requires changes in xAODCutFlow as well
xAOD::CutBookkeeper* tmpEBK = new xAOD::CutBookkeeper();
tmpEBK->setName(name);
tmpEBK->setDescription(description);
......@@ -144,12 +141,18 @@ CutIdentifier CutFlowSvc::registerFilter( const std::string& name,
tmpEBK->setCycle(m_skimmingCycle);
CutIdentifier cutID = tmpEBK->uniqueIdentifier();
DataHandle<xAOD::CutBookkeeperContainer> fileBook;
if (m_outMetaDataStore->retrieve(fileBook,m_fileCollName).isFailure()) {
ATH_MSG_ERROR("Could not retrieve handle to cutflowsvc bookkeeper");
return 0;
}
// Let's see if an CutBookkeeper of this name already exists
ATH_MSG_VERBOSE("in registerFilter(" << name << ", " << description << "): "
<< "Going to search if this CutBookkeeper already exists" );
bool existsAlready=false;
for ( std::size_t i=0; i<m_completeBook->size(); ++i ) {
xAOD::CutBookkeeper* ebk = m_completeBook->at(i);
for ( std::size_t i=0; i<fileBook->size(); ++i ) {
xAOD::CutBookkeeper* ebk = fileBook->at(i);
if( tmpEBK->isEqualTo( ebk) ) {
ATH_MSG_DEBUG("The CutBookkeeper with name " << name
<< " and cutID " << cutID << " already exists... not adding!" );
......@@ -172,7 +175,7 @@ CutIdentifier CutFlowSvc::registerFilter( const std::string& name,
// If it is a new CutBookkeeper, add it to the container
ATH_MSG_DEBUG( "You are DECLARING a new filter of name " << name
<< " and cutID " << cutID );
m_completeBook->push_back(tmpEBK);
fileBook->push_back(tmpEBK);
ATH_MSG_VERBOSE("done calling registerFilter(" << name << ", " << description << ")" );
return cutID;
......@@ -256,17 +259,23 @@ CutIdentifier CutFlowSvc::declareUsedOtherFilter( const std::string& name,
}
// Create a temporary CutBookkeeper object
// *FIXME* This should probably be a unique_ptr, but requires changes in xAODCutFlow as well
xAOD::CutBookkeeper* tmpEBK = new xAOD::CutBookkeeper();
// tmpEBK->makePrivateStore();
tmpEBK->setName(name);
tmpEBK->setInputStream(m_inputStream);
tmpEBK->setCycle(m_skimmingCycle);
CutIdentifier cutID = tmpEBK->uniqueIdentifier();
DataHandle<xAOD::CutBookkeeperContainer> fileBook;
if (m_outMetaDataStore->retrieve(fileBook,m_fileCollName).isFailure()) {
ATH_MSG_ERROR("Could not retrieve handle to cutflowsvc bookkeeper");
return 0;
}
// See if the CutBookkeeper already exists or not
bool existsAlready = false;
for ( std::size_t i=0; i<m_completeBook->size(); ++i ) {
xAOD::CutBookkeeper* ebk = m_completeBook->at(i);
for ( std::size_t i=0; i<fileBook->size(); ++i ) {
xAOD::CutBookkeeper* ebk = fileBook->at(i);
if( tmpEBK->isEqualTo( ebk ) ) {
originEBK->addUsedOther( ebk );
cutID = ebk->uniqueIdentifier();
......@@ -284,7 +293,7 @@ CutIdentifier CutFlowSvc::declareUsedOtherFilter( const std::string& name,
// Otherwise, add the new one to the collection
tmpEBK->setDescription( "Registered by origin filter" );
originEBK->addUsedOther( tmpEBK );
m_completeBook->push_back( tmpEBK );
fileBook->push_back( tmpEBK );
return cutID;
}
......@@ -312,9 +321,9 @@ CutFlowSvc::addEvent( CutIdentifier cutID )
double evtWeight=1.0;
const xAOD::EventInfo* evtInfo = 0;
const xAOD::EventInfo* evtInfo = nullptr;
StatusCode sc = m_eventStore->retrieve(evtInfo);
if ( sc.isFailure() || NULL == evtInfo ) {
if ( sc.isFailure() || nullptr == evtInfo ) {
ATH_MSG_WARNING("Could not retrieve EventInfo from StoreGate ");
evtWeight=-1000.;
} else {
......@@ -336,17 +345,27 @@ CutFlowSvc::addEvent( CutIdentifier cutID, double weight)
{
ATH_MSG_INFO("calling addEvent(" << cutID << ", " << weight << ")" );
// Create bookkeeper container for bookkeepers in _this_ processing
DataHandle<xAOD::CutBookkeeperContainer> fileBook;
if (m_outMetaDataStore->retrieve(fileBook,m_fileCollName).isFailure()) {
ATH_MSG_WARNING("Could not retrieve handle to cutflowsvc bookkeeper " << m_fileCollName << " creating new one");
auto fileBook = new xAOD::CutBookkeeperContainer();
if( recordCollection( fileBook, m_fileCollName).isFailure() ) {
ATH_MSG_ERROR("Could not create empty " << m_fileCollName << " CutBookkeeperContainer");
}
}
xAOD::CutBookkeeper* eb = this->getCutBookkeeper(cutID);
if ( !eb ) {
ATH_MSG_INFO("Could not find eb");
// Iterate over the complete bookkeepers and update the cutID-to-bookkeeper map
ATH_MSG_DEBUG( "addEvent: Going to re-populate the map. Have "
<< m_completeBook->size() << " CutBookkeepers"
<< fileBook->size() << " CutBookkeepers"
<< " and skimming cycle " << m_skimmingCycle
<< " and input Stream name " << m_inputStream );
xAOD::CutBookkeeperContainer::iterator iter = m_completeBook->begin();
xAOD::CutBookkeeperContainer::iterator iterEnd = m_completeBook->end();
xAOD::CutBookkeeperContainer::iterator iter = fileBook->begin();
xAOD::CutBookkeeperContainer::iterator iterEnd = fileBook->end();
for ( ; iter != iterEnd; ++iter ) {
xAOD::CutBookkeeper* ebk = *iter;
CutIdentifier cutID2 = ebk->uniqueIdentifier();
......@@ -419,11 +438,16 @@ void CutFlowSvc::handle( const Incident& inc )
}
}
DataHandle<xAOD::CutBookkeeperContainer> fileBook;
if( !(m_outMetaDataStore->retrieve(fileBook, m_fileCollName) ).isSuccess() ) {
ATH_MSG_WARNING( "Could not get " << m_fileCollName
<< " CutBookkeepers from output MetaDataStore" );
}
// Clear the file bookkeeper
if (m_completeBook.isValid()) {
if (fileBook.isValid()) {
// Reset existing container
for (xAOD::CutBookkeeperContainer::iterator it = m_completeBook->begin();
it != m_completeBook->end(); ++it) {
for (xAOD::CutBookkeeperContainer::iterator it = fileBook->begin();
it != fileBook->end(); ++it) {
(*it)->setNAcceptedEvents(0);
(*it)->setSumOfEventWeights(0);
(*it)->setSumOfEventWeightsSquared(0);
......@@ -432,27 +456,18 @@ void CutFlowSvc::handle( const Incident& inc )
}
// Clean up the bookkeeper before output
//if ( inc.type() == "MetaDataStop" || inc.type() == "EndInputFile") {
if ( inc.type() == "MetaDataStop" ) {
if (m_completeBook.isValid()) {
// Reset existing container
for (xAOD::CutBookkeeperContainer::iterator it = m_completeBook->begin();
it != m_completeBook->end(); ++it) {
}
}
const xAOD::CutBookkeeperContainer* fileBook(NULL);
DataHandle<xAOD::CutBookkeeperContainer> fileBook;
if( !(m_outMetaDataStore->retrieve(fileBook, m_fileCollName) ).isSuccess() ) {
ATH_MSG_WARNING( "Could not get " << m_fileCollName
<< " CutBookkeepers from output MetaDataStore" );
}
else {
const SG::IConstAuxStore* fileBookAux = fileBook->getConstStore();
if (m_outMetaDataStore->removeDataAndProxy(fileBook).isFailure()) {
ATH_MSG_ERROR("Unable to remove " << m_fileCollName);
}
if (m_outMetaDataStore->removeDataAndProxy(fileBookAux).isFailure()) {
ATH_MSG_ERROR("Unable to remove " << m_fileCollName);
}
// reset counters
for (xAOD::CutBookkeeperContainer::iterator it = fileBook->begin();
it != fileBook->end(); ++it) {
(*it)->setNAcceptedEvents(0);
(*it)->setSumOfEventWeights(0);
(*it)->setSumOfEventWeightsSquared(0);
}
}
......@@ -518,7 +533,7 @@ CutFlowSvc::recordCollection( xAOD::CutBookkeeperContainer * coll,
// Take care of the peculiarities of the new xAOD EDM, i.e., create the needed AuxStore
xAOD::CutBookkeeperAuxContainer* auxCont = new xAOD::CutBookkeeperAuxContainer;
auto auxCont = new xAOD::CutBookkeeperAuxContainer;
coll->setStore( auxCont ); //gives it a new associated aux container
// Record the aux container
......@@ -531,13 +546,18 @@ CutFlowSvc::recordCollection( xAOD::CutBookkeeperContainer * coll,
xAOD::CutBookkeeper*
CutFlowSvc::getCutBookkeeper( const CutIdentifier cutID ) {
xAOD::CutBookkeeperContainer::iterator it = m_completeBook->begin();
xAOD::CutBookkeeperContainer::iterator ite = m_completeBook->end();
DataHandle<xAOD::CutBookkeeperContainer> fileBook;
if (m_outMetaDataStore->retrieve(fileBook,m_fileCollName).isFailure()) {
ATH_MSG_ERROR("Could not retrieve handle to cutflowsvc bookkeeper");
return nullptr;
}
xAOD::CutBookkeeperContainer::iterator it = fileBook->begin();
xAOD::CutBookkeeperContainer::iterator ite = fileBook->end();
while (it != ite) {
if ((*it)->uniqueIdentifier()==cutID) return (*it);
++it;
}
return 0;
return nullptr;
}
......
......@@ -154,8 +154,6 @@ private:
/// The event store
StoreGateSvc_t m_eventStore;
DataHandle<xAOD::CutBookkeeperContainer> m_completeBook;
/// The name of the completed, i.e., fully processed, CutBookkeeperContainer
std::string m_completeCollName;
......@@ -171,9 +169,6 @@ private:
/// The name of the currently used input file stream
std::string m_inputStream;
/// A flag to say if the input file is currently open or not
//bool m_fileCurrentlyOpened;
/// Declare a simple typedef for the internal map
typedef MAP_NS::unordered_map<CutIdentifier, xAOD::CutBookkeeper*> CutIDMap_t;
......
......@@ -14,6 +14,10 @@ recoMetadataItemList = CfgItemList("RecoMetadata",
items = ["IOVMetaDataContainer#*",
"xAOD::LumiBlockRangeContainer#*",
"xAOD::LumiBlockRangeAuxContainer#*",
# "xAOD::CutBookkeeperContainer#IncompleteCutBookkeepers",
# "xAOD::CutBookkeeperAuxContainer#IncompleteCutBookkeepersAux.",
# "xAOD::CutBookkeeperContainer#CutBookkeepers",
# "xAOD::CutBookkeeperAuxContainer#CutBookkeepersAux.",
"xAOD::CutBookkeeperContainer#*",
"xAOD::CutBookkeeperAuxContainer#*",
"ByteStreamMetadataContainer#*",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment