Skip to content
Snippets Groups Projects
Commit b559421f authored by Frank Winklmeier's avatar Frank Winklmeier
Browse files

Merge branch 'tagInfoMgr_updates' into 'master'

removed use of BeginEvent incident

See merge request !35308
parents 22d15173 ad6d98b9
6 merge requests!58791DataQualityConfigurations: Modify L1Calo config for web display,!46784MuonCondInterface: Enable thread-safety checking.,!46776Updated LArMonitoring config file for WD to match new files produced using MT,!45405updated ART test cron job,!42417Draft: DIRE and VINCIA Base Fragments for Pythia 8.3,!35308removed use of BeginEvent incident
......@@ -48,15 +48,7 @@ long TagInfoMgr_StorageType = 0x50;
// Constructor with parameters:
TagInfoMgr::TagInfoMgr(const std::string &name,
ISvcLocator *pSvcLocator) :
AthCnvSvc(name, pSvcLocator, TagInfoMgr_StorageType),
m_storeGate("StoreGateSvc", name),
m_detStore("DetectorStore", name),
m_iovDbSvc("IOVDbSvc", name),
m_metaDataTool("IOVDbMetaDataTool"),
m_isFirstBeginRun(true),
m_conditionsRun(EventIDBase::UNDEFNUM),
m_newFileIncidentSeen(false),
m_lastIOVRange(IOVRange(IOVTime(),IOVTime()))
AthCnvSvc(name, pSvcLocator, TagInfoMgr_StorageType)
{}
TagInfoMgr::~TagInfoMgr()
......@@ -138,7 +130,7 @@ StatusCode TagInfoMgr::initialize()
}
// To copy TagInfo to EventInfo, we set listener to the
// IncidentSvc for BeginEvent and BeginRun
// IncidentSvc for BeginRun and BeginInputFile
ServiceHandle<IIncidentSvc> incSvc("IncidentSvc", name());
long int pri=1000;
......@@ -146,12 +138,11 @@ StatusCode TagInfoMgr::initialize()
// file meta data
incSvc->addListener( this, "BeginRun", pri);
// Add BeginEvent to trigger refilling meta data store after a new
// input file
incSvc->addListener( this, "BeginEvent", pri);
// Set to be listener for BeginInputFile
incSvc->addListener(this, "BeginInputFile", 50); // pri has to be < 50 to be after IOVDbMetaDataTool.
// Add BeginInputFile to trigger refilling meta data store after a new input
// file - priority has to be < 50 to be run after IOVDbMetaDataTool, which
// has mergeing into the output file medat data the input meta data of the
// new file.
incSvc->addListener(this, "BeginInputFile", 50); //
return StatusCode::SUCCESS;
}
......@@ -297,7 +288,7 @@ TagInfoMgr::fillTagInfo(const CondAttrListCollection* tagInfoCond, TagInfo* tagI
EventType::NameTagPairVec pairs1;
evtH->event_type()->get_detdescr_tags(pairs1);
if (msgLevel() <= MSG::DEBUG) {
if (msgLvl(MSG::DEBUG)) {
if(pairs1.size()) {
ATH_MSG_DEBUG( "fillTagInfo: Pairs from EventType:");
}
......@@ -351,9 +342,9 @@ TagInfoMgr::fillTagInfo(const CondAttrListCollection* tagInfoCond, TagInfo* tagI
}
// Dump out contents of TagInfo
if (msgLevel() <= MSG::DEBUG) {
MsgStream log1(Athena::getMessageSvc(), "TagInfo");
tagInfo->printTags(log1);
if (msgLvl(MSG::DEBUG)) {
ATH_MSG_DEBUG( "fillTagInfo: print out tags before adding extra tags");
ATH_MSG_DEBUG(tagInfo->str());
}
......@@ -373,9 +364,9 @@ TagInfoMgr::fillTagInfo(const CondAttrListCollection* tagInfoCond, TagInfo* tagI
}
// Dump out contents of TagInfo
if( msgLevel() <= MSG::DEBUG ) {
MsgStream log1(Athena::getMessageSvc(), "TagInfo");
tagInfo->printTags(log1);
if (msgLvl(MSG::DEBUG)) {
ATH_MSG_DEBUG( "fillTagInfo: print out tags");
ATH_MSG_DEBUG(tagInfo->str());
}
return StatusCode::SUCCESS;
......@@ -388,31 +379,16 @@ TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection
// fillMetaData is called at the beginning of the job and for each
// new file being read in.
//
// Fill IOV object in metadata store with information from tag
// info.
// For the IOV, we have two choices:
//
// 1) If there are input tags from file meta data, then we use
// the IOV from the input conditions. For the first input
// file, we use the incoming IOV if the current run falls
// within the IOV range. If not we set the IOV to runNumber
// to runNumber + 1. For subsequent input files, if the
// runNumber falls within the previous IOV range, then we set
// the new IOV to [runNumber, lastStop), otherwise the IOV is
// set to [runNumber, runNumber+1). This latter is used for
// the zerobias overlaying.
//
// 2) If we are taking them from the incoming events, then we
// simply assume that the tags are valid for one run. (This
// is the old way of doing things, no longer valid since
// storing TagInfo in the MetaData
//
// Notes:
//
// The add of tags to the file meta data will merge different
// IOVs together if the payloads are identical, so doing this
// run by run is ok for 2)
// For the IOV we use the IOV from the input conditions. For the first input
// file, we use the incoming IOV if the current run falls within the IOV
// range. If not we set the IOV to runNumber to runNumber + 1. For
// subsequent input files, if the runNumber falls within the previous IOV
// range, then we set the new IOV to [runNumber, lastStop), otherwise the
// IOV is set to [runNumber, runNumber+1). This latter is used for the
// zerobias overlaying.
//
ATH_MSG_DEBUG( "entering fillMetaData");
......@@ -450,6 +426,7 @@ TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection
CondAttrListCollection* attrListColl = new CondAttrListCollection(true);
attrListColl->add(0, attrList);
// Set IOV:
if (tagInfoCond) {
// set to the IOV of the incoming conditions
// if run num is in previous IOV, set new IOV to be [runNum, lastStop)
......@@ -568,22 +545,24 @@ void
TagInfoMgr::handle(const Incident& inc) {
/**
** This method is called at the BeginRun incident:
** This method is called at the both the BeginRun and BeginInputFile incidents:
**
** 1) For the first begin run, we retrieve the TagInfo and set
** up IOVDbSvc so that is can use TagInfo to define its
** hierarchical tags.
** Note: the detector store 'retrieve' of the TagInfo will call
** TagInfoMgr::createObj to do the first creation and filling it
** accordingly. And this also fills the output file metadata with
** contents of the TagInfo object.
**
** 2) For (old) input files where the TagInfo is stored in each
** event, subsequent begin runs will fill the file meta data
** for output. This is done because the IOV is incremented by
** one each run.
** 2) Then whenever a new file is opened (BeginInputFile), we
** use the TagInfo object from the detector store to "re-fill"
** and override the newly merged TagInfo meta data in the output
** meta data store. We receive BeginInputFile AFTER the
** IOVDbMetaDataTool has done this automatic merging, so that we
** can safely overwrite with the desired TagInfo information for
** this job/run.
**
** Note that if the input has TagInfo in the file meta data, the
** output will be written via the checkTagInfo callback - called
** each time the input TagInfo object changes.
**
**/
// Get the messaging service, print where you are
......@@ -591,8 +570,9 @@ TagInfoMgr::handle(const Incident& inc) {
<< " from " << inc.source());
// Return quickly for BeginEvent if not needed
if (!m_newFileIncidentSeen && inc.type() == IncidentType::BeginEvent) return;
if (!m_isFirstBeginRun && inc.type() == IncidentType::BeginEvent) return;
// At first BeginRun we retrieve TagInfo and trigger IOVDbSvc to
// use it
if (inc.type() == IncidentType::BeginRun && m_isFirstBeginRun) {
......@@ -600,9 +580,6 @@ TagInfoMgr::handle(const Incident& inc) {
// No longer first BeginRun
m_isFirstBeginRun = false;
// reset flags
m_newFileIncidentSeen = false;
// get conditionsRun from the Context - can be used if no EventID in the SG (for HLT)
m_conditionsRun = Atlas::getExtendedEventContext(inc.context()).conditionsRun();
......@@ -610,7 +587,7 @@ TagInfoMgr::handle(const Incident& inc) {
// can't use a ref here!
const EventIDBase eventID = inc.context().eventID();
if (msgLevel() <= MSG::DEBUG) {
if (msgLvl(MSG::DEBUG)) {
msg() << MSG::DEBUG << "handle: First BeginRun incident - Event ID: ["
<< eventID.run_number() << ","
<< eventID.event_number() << ":"
......@@ -656,7 +633,6 @@ TagInfoMgr::handle(const Incident& inc) {
ATH_MSG_DEBUG( "handle: Try dropping /TagInfo - " << sc);
if (m_detStore->retrieve( tagInfo, m_tagInfoKeyValue ).isFailure() ) {
ATH_MSG_ERROR( "handle: Could not retrieve TagInfo object from the detector store");
return;
}
}
......@@ -670,53 +646,11 @@ TagInfoMgr::handle(const Incident& inc) {
ATH_MSG_DEBUG( "handle: TagInfo successfully processed by IOVDbSvc to register callback");
}
}
else if (inc.type() == IncidentType::BeginRun) {
// For subsequent BeginRuns, check whether the /TagInfo folder
// exists, and if so return. We only treat the case where
// TagInfo is coming in with each event. In this case we fill
// file meta data and increment IOV to cover each run
// reset flags
m_newFileIncidentSeen = false;
// Return if /TagInfo exists
const CondAttrListCollection* attrListColl = 0;
if (m_detStore->contains<CondAttrListCollection>("/TagInfo")) {
ATH_MSG_DEBUG( "handle: TagInfo input from meta data - no need to fill output file meta data");
return;
}
const TagInfo* tagInfo = 0;
if (m_detStore->retrieve( tagInfo, m_tagInfoKeyValue ).isFailure() ) {
ATH_MSG_ERROR( "handle: Could not retrieve TagInfo object from the detector store");
throw GaudiException( "Could not retrieve TagInfo object from the detector store", "TagInfoMgr::handle", StatusCode::FAILURE );
}
// Copy TagInfo to meta data store for writing to file meta data
if (StatusCode::SUCCESS != fillMetaData(tagInfo, attrListColl)) {
ATH_MSG_ERROR( "handle: Unable to write TagInfo to MetaDataStore !");
throw GaudiException( "Unable to write TagInfo to MetaDataStore !", "TagInfoMgr::handle", StatusCode::FAILURE );
}
else {
ATH_MSG_DEBUG( "handle: Wrote TagInfo to MetaDataStore ");
}
}
else if (inc.type() == "BeginInputFile" && !m_isFirstBeginRun) {
// We must keep track of BeginInputFile incidents because they
// will override the TagInfo in the file meta data. This flag
// will be used to restore the TagInfo folder in the meta data
// store at the next BeginEvent if and only if BeginRun has
// NOT already been called. (BeginRun will also reset the
// TagInfo in the meta data store.)
m_newFileIncidentSeen = true;
}
else if (m_newFileIncidentSeen && inc.type() == "BeginEvent") {
// If a new file incident has been seen and there is NOT a
// BeginRun before the next BeginEvent, then we "refill" the
// For a new file incident, we must "refill" the
// meta data store with the current value of the TagInfo
// folder in the detector store.
// reset flags
m_newFileIncidentSeen = false;
// Return if /TagInfo does NOT exists
const CondAttrListCollection* attrListColl = 0;
if (m_detStore->contains<CondAttrListCollection>("/TagInfo")) {
......@@ -911,7 +845,7 @@ TagInfoMgr::createObj(IOpaqueAddress* addr, DataObject*& dataObj) {
// most likely not used anymore. RDS 08/2012).
if (attrListColl && attrListColl->size() == 0) {
tagInfo = std::make_unique<TagInfo>(m_lastTagInfo);
if (msgLevel() <= MSG::DEBUG) {
if (msgLvl(MSG::DEBUG)) {
ATH_MSG_DEBUG( "createObj: recreate tagInfo from saved info");
if (msgLevel()>=MSG::DEBUG) {
MsgStream log1(Athena::getMessageSvc(), "TagInfo");
......@@ -925,7 +859,7 @@ TagInfoMgr::createObj(IOpaqueAddress* addr, DataObject*& dataObj) {
ATH_MSG_DEBUG( "createObj: Unable to fill TagInfo !");
return StatusCode::FAILURE;
}
if (msgLevel() <= MSG::DEBUG) {
if (msgLvl(MSG::DEBUG)) {
if (attrListColl) ATH_MSG_DEBUG( "createObj: Filled TagInfo from file meta data ");
else ATH_MSG_DEBUG( "createObj: Filled TagInfo from input event ");
}
......@@ -943,7 +877,7 @@ TagInfoMgr::createObj(IOpaqueAddress* addr, DataObject*& dataObj) {
// Do standard conversion to data object
dataObj = SG::asStorable(std::move(tagInfo));
if (outputLevel() <= MSG::DEBUG) {
if (msgLvl(MSG::DEBUG)) {
ATH_MSG_DEBUG( "createObj: created new TagInfo object ");
}
return StatusCode::SUCCESS;
......
......@@ -28,17 +28,16 @@
#include "GaudiKernel/IIncidentListener.h"
#include "AthenaKernel/IAddressProvider.h"
#include "AthenaKernel/IOVRange.h"
#include "AthenaKernel/IIOVDbSvc.h"
#include "GaudiKernel/MsgStream.h"
#include "EventInfo/TagInfo.h"
#include "IOVDbMetaDataTools/IIOVDbMetaDataTool.h"
#include <map>
//<<<<<< PUBLIC TYPES >>>>>>
class StoreGateSvc;
class TagInfo;
class IIOVDbSvc;
class IIOVDbMetaDataTool;
class CondAttrListCollection;
//<<<<<< CLASS DECLARATIONS >>>>>>
......@@ -192,11 +191,11 @@ private:
/// Flag to add override the tags from EventInfo from other
/// sources
Gaudi::Property<bool> m_overrideEventInfoTags{this,"OverrideEventInfoTags",true,"Override tags yes/no"};
Gaudi::Property<bool> m_overrideEventInfoTags { this, "OverrideEventInfoTags", true, "Override tags yes/no" };
/// Extra tags/values pairs added in my jobOptions
Gaudi::Property<std::map<std::string,std::string> >
m_extraTagValuePairs{this,"ExtraTagValuePairs",{},"key/value pairs to be added", "mapMergeNoReplace<T,T>"};
m_extraTagValuePairs { this, "ExtraTagValuePairs", {}, "key/value pairs to be added", "mapMergeNoReplace<T,T>" };
/// Extra tags/values pairs added in via interface
std::map<std::string,std::string> m_extraTagValuePairsViaInterface;
......@@ -205,33 +204,30 @@ private:
std::set<std::string> m_tagsToBeRemoved;
/// The StoreGate key for the TagInfo
Gaudi::Property<std::string> m_tagInfoKey{this,"TagInfoKey","ProcessingTags","SG key for TagInfo"};
Gaudi::Property<std::string> m_tagInfoKey{ this, "TagInfoKey", "ProcessingTags", "SG key for TagInfo" };
std::string m_tagInfoKeyValue;
/// The event store
ServiceHandle<StoreGateSvc> m_storeGate;
ServiceHandle<StoreGateSvc> m_storeGate { this, "StoreGateSvc", "StoreGateSvc" };
/// The detector store
ServiceHandle<StoreGateSvc> m_detStore;
ServiceHandle<StoreGateSvc> m_detStore { this, "DetectorStore", "DetectorStore" };
/// Access to IOVDbSvc interface - used to register callback
ServiceHandle<IIOVDbSvc> m_iovDbSvc;
ServiceHandle<IIOVDbSvc> m_iovDbSvc { this, "IOVDbSvc", "IOVDbSvc" };
/// Access to iov meta data tool
ToolHandle<IIOVDbMetaDataTool> m_metaDataTool;
ToolHandle<IIOVDbMetaDataTool> m_metaDataTool { this, "IOVDbMetaDataTool", "IOVDbMetaDataTool" };
/// Flag to identify the first BeginRun incident
bool m_isFirstBeginRun;
bool m_isFirstBeginRun { true };
/// conditionsRun from the first BeginRun incident (HLT)
EventIDBase::number_type m_conditionsRun;
/// Flag to identify a new file incident
bool m_newFileIncidentSeen;
EventIDBase::number_type m_conditionsRun { EventIDBase::UNDEFNUM };
/// IOVRange of last TagInfo added to the file meta data
IOVRange m_lastIOVRange;
IOVRange m_lastIOVRange { IOVRange(IOVTime(), IOVTime()) };
/// Last TagInfo added to the detector store
TagInfo m_lastTagInfo;
......
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