|
ATLAS Offline Software
|
This is an interface to a tool used to manage the IOV Meta Data for a given object in the Meta Data Store.
More...
#include <IOVDbMetaDataTool.h>
|
| IOVDbMetaDataTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~IOVDbMetaDataTool () |
|
virtual StatusCode | initialize () override |
| Initialize AlgTool. More...
|
|
virtual StatusCode | finalize () override |
| Finalize AlgTool. More...
|
|
virtual StatusCode | beginInputFile (const SG::SourceID &) override |
| Function called when a new input file is opened. More...
|
|
virtual StatusCode | endInputFile (const SG::SourceID &) override |
| Function called when the currently open input file got completely processed. More...
|
|
virtual StatusCode | metaDataStop () override |
| Function called when the tool should write out its metadata. More...
|
|
virtual void | handle (const Incident &incident) override |
| Incident service handle listening for BeginInputFile and EndInputFile. More...
|
|
virtual StatusCode | registerFolder (const std::string &folderName, const std::string &folderDescription) const override |
| Register folder in the IOV Db MetaData - done once at initialize. More...
|
|
virtual StatusCode | registerFolder (const std::string &folderName) const override |
| Register folder in the IOV Db MetaData without folder description - uses default folder description for CondAttrListCollection. More...
|
|
virtual StatusCode | addPayload (const std::string &folderName, CondAttrListCollection *payload) const override |
| Add an IOV and Payload for a particular folder - replaces payloads if there is an IOV overlap. More...
|
|
virtual StatusCode | processInputFileMetaData (const std::string &fileName) override |
| Explicit call to process IOV meta data from the input meta data store, transferring it to the main meta data store. More...
|
|
virtual IOVMetaDataContainer * | findMetaDataContainer (const std::string &folderName) const override final |
|
virtual void | lock_shared () const override final |
| Lock the tool. More...
|
|
virtual void | unlock_shared () const override final |
| Unlock the tool. More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
This is an interface to a tool used to manage the IOV Meta Data for a given object in the Meta Data Store.
Definition at line 39 of file IOVDbMetaDataTool.h.
◆ StoreGateSvc_t
◆ IOVDbMetaDataTool()
IOVDbMetaDataTool::IOVDbMetaDataTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
Definition at line 25 of file IOVDbMetaDataTool.cxx.
41 declareInterface<IIOVDbMetaDataTool>(
this);
42 declareInterface<IMetaDataTool>(
this);
◆ ~IOVDbMetaDataTool()
IOVDbMetaDataTool::~IOVDbMetaDataTool |
( |
| ) |
|
|
virtual |
◆ addPayload()
Add an IOV and Payload for a particular folder - replaces payloads if there is an IOV overlap.
Implements IIOVDbMetaDataTool.
Definition at line 248 of file IOVDbMetaDataTool.cxx.
252 std::scoped_lock guard(
m_mutex );
259 ATH_MSG_DEBUG(
"Retrieved IOVMetaDataContainer from MetaDataStore for folder "
263 ATH_MSG_ERROR(
"addPayload: Could not find IOVMetaDataContainer in MetaDataStore for folder "
265 <<
". One must have previously called registerFolder. ");
266 return StatusCode::FAILURE;
282 <<
" (may be duplicate payload).");
291 std::ostringstream
stream;
296 return StatusCode::SUCCESS;
◆ beginInputFile()
Function called when a new input file is opened.
Implements IMetaDataTool.
Definition at line 108 of file IOVDbMetaDataTool.cxx.
113 ATH_MSG_DEBUG(
"The first BeginInputFile incident is fired along with the FirstInputFile incident so we skip the processing of the Input File MetaData ");
114 return StatusCode::SUCCESS;
◆ checkOverrideRunNumber()
void IOVDbMetaDataTool::checkOverrideRunNumber |
( |
| ) |
|
|
private |
check if we should override the run number in the incoming meta data
Definition at line 134 of file IOVDbMetaDataTool.cxx.
154 ATH_MSG_DEBUG(
"checkOverrideRunNumber: check if tag is set in jobOpts");
158 SmartIF<IProperty> appMgr{serviceLocator()->service(
"ApplicationMgr")};
160 ATH_MSG_ERROR(
"checkOverrideRunNumber: Cannot get ApplicationMgr ");
163 StringProperty property(
"EvtSel",
"");
165 if (!
sc.isSuccess()) {
166 ATH_MSG_ERROR(
"checkOverrideRunNumber: unable to get EvtSel: found " << property.value());
171 SmartIF<IProperty> evtSel{serviceLocator()->service(
eventSelector)};
178 BooleanProperty overrideRunNumber = IntegerProperty(
"OverrideRunNumberFromInput",
false);
179 sc = evtSel->getProperty(&overrideRunNumber);
180 if (!
sc.isSuccess()) {
182 ATH_MSG_DEBUG(
"resetRunNumber: unable to get OverrideRunNumberFromInput property from EventSelector ");
188 IntegerProperty
runNumber = IntegerProperty(
"RunNumber", 0);
190 if (!
sc.isSuccess()) {
191 ATH_MSG_ERROR(
"checkOverrideRunNumber: unable to get RunNumber from EventSelector: found "
197 runNumber = IntegerProperty(
"OldRunNumber", 0);
199 if (!
sc.isSuccess()) {
200 ATH_MSG_ERROR(
"checkOverrideRunNumber: unable to get OldRunNumber from EventSelector: found "
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ endInputFile()
Function called when the currently open input file got completely processed.
Implements IMetaDataTool.
Definition at line 121 of file IOVDbMetaDataTool.cxx.
123 return StatusCode::SUCCESS;
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
Add StoreName to extra input/output deps as needed.
use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given
◆ finalize()
StatusCode IOVDbMetaDataTool::finalize |
( |
| ) |
|
|
overridevirtual |
◆ findMetaDataContainer()
◆ getMetaDataContainer()
return meta data container from the meta data store
Definition at line 398 of file IOVDbMetaDataTool.cxx.
410 <<
". Created a new instance");
412 if (!
sc.isSuccess()) {
421 if (!
sc.isSuccess()) {
◆ handle()
void IOVDbMetaDataTool::handle |
( |
const Incident & |
incident | ) |
|
|
overridevirtual |
Incident service handle listening for BeginInputFile and EndInputFile.
Definition at line 92 of file IOVDbMetaDataTool.cxx.
94 const FileIncident* fileInc =
dynamic_cast<const FileIncident*
>(&inc);
95 if(!fileInc)
throw std::runtime_error(
"Unable to get FileName from FirstInputFile incident");
97 const std::string
fileName = fileInc->fileName();
105 if(!
sc.isSuccess())
throw std::runtime_error(
"Could not process input file meta data");
◆ initialize()
StatusCode IOVDbMetaDataTool::initialize |
( |
| ) |
|
|
overridevirtual |
Initialize AlgTool.
Definition at line 62 of file IOVDbMetaDataTool.cxx.
69 incSvc->addListener(
this,
"FirstInputFile", 60);
79 return(StatusCode::SUCCESS);
◆ inputHandles()
Return this algorithm's input handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ interfaceID()
static const InterfaceID& IIOVDbMetaDataTool::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
Retrieve interface ID.
Definition at line 49 of file IIOVDbMetaDataTool.h.
50 static const InterfaceID IID_IIOVDbMetaDataTool(
"IIOVDbMetadataTool", 1 , 0);
51 return IID_IIOVDbMetaDataTool; }
◆ lock_shared()
virtual void IOVDbMetaDataTool::lock_shared |
( |
| ) |
const |
|
inlinefinaloverridevirtual |
◆ metaDataStop()
StatusCode IOVDbMetaDataTool::metaDataStop |
( |
| ) |
|
|
overridevirtual |
◆ modifyPayload()
Modify a Payload for a particular folder - replaces one of the internal attributes.
Modify a Payload for a particular folder - replaces one of the internal attributes
Definition at line 302 of file IOVDbMetaDataTool.cxx.
312 bool modifyAttr =
false;
313 std::string attributeName;
316 for (
unsigned int i = 0;
i <
folders.size(); ++
i) {
321 ATH_MSG_DEBUG(
"modifyPayload: remove attribute " << attributeName);
329 return StatusCode::SUCCESS;
332 bool iovSizeIsZero = coll->iov_size() == 0;
333 IOVRange testIOV = coll->minRange();
345 unsigned int nchans = coll->size();
346 bool hasChanNames = (coll->name_size() == nchans);
352 for (
unsigned int iatt = 0; iatt < oldAttrList.size(); ++iatt) {
354 if (attributeName == oldAttrList[iatt].specification().name()) {
355 ATH_MSG_DEBUG(
"modifyPayload: skipping attribute name " << oldAttrList[iatt].specification().
name());
360 newAttrList.extend(oldAttrList[iatt].specification().
name(),
361 oldAttrList[iatt].specification().
type());
362 const coral::Attribute& oldAttr = oldAttrList[iatt];
363 coral::Attribute& newAttr = newAttrList[oldAttrList[iatt].specification().name()];
367 << oldAttrList[iatt].specification().
name() <<
" "
371 if (!iovSizeIsZero) coll1->
add(
chan, coll->iovRange(
chan));
372 if(hasChanNames)coll1->
add(
chan, coll->chanName(
chan));
378 std::ostringstream
stream;
383 return StatusCode::SUCCESS;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
Return this algorithm's output handles.
We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.
◆ overrideIOV()
override IOV with new run number
Definition at line 610 of file IOVDbMetaDataTool.cxx.
622 bool iovSizeIsZero = coll->
iov_size() == 0;
627 if (
start.isRunEvent() &&
stop.isRunEvent()) {
636 return StatusCode::SUCCESS;
641 <<
" iovSizeIsZero: " << (
int)iovSizeIsZero
642 <<
" newRange " << newRange);
655 unsigned int nchans = coll->
size();
668 ATH_MSG_DEBUG(
"overrideIOV: after overriding the IOV of collection");
669 std::ostringstream
stream;
676 return StatusCode::SUCCESS;
◆ processInputFileMetaData()
StatusCode IOVDbMetaDataTool::processInputFileMetaData |
( |
const std::string & |
fileName | ) |
|
|
overridevirtual |
Explicit call to process IOV meta data from the input meta data store, transferring it to the main meta data store.
Normally, this method is called at the BeginInputFile incident. However, this explicit call allows the transfer to occur during the initialization phase, which occurs before BeginInputFile incident.
Implements IIOVDbMetaDataTool.
Definition at line 431 of file IOVDbMetaDataTool.cxx.
434 std::scoped_lock guard(
m_mutex );
443 if (!
sc.isSuccess()) {
444 ATH_MSG_DEBUG(
"processInputFileMetaData: Could not retrieve IOVMetaDataContainer objects from InputMetaDataStore - cannot process input file meta data");
445 return StatusCode::SUCCESS;
448 ATH_MSG_DEBUG(
"processInputFileMetaData: Retrieved from IOVMetaDataContainer(s) from InputMetaDataStore");
451 unsigned int ncolls = 0;
452 unsigned int ndupColls = 0;
453 for (; cont != contEnd; ++cont) {
455 , cont->folderDescription());
459 std::list<SG::ObjectWithVersion<IOVMetaDataContainer> > allVersions;
461 if (!
sc.isSuccess()) {
469 ATH_MSG_DEBUG(
"processInputFileMetaData: New container: payload size " <<
payload->size() <<
" version key " <<
obj.versionedKey);
474 ATH_MSG_VERBOSE(
"Before merge, payload minRange for folder " << cont->folderName());
475 if (payloadMaster && payloadMaster->
size()) {
479 unsigned int iPayload = 0;
480 for (; itColl != itCollEnd; ++itColl, ++iPayload) {
482 << (*itColl)->size());
496 std::ostringstream
stream;
497 for (; itColl1 != itCollEnd1; ++itColl1) (*itColl1)->dump(
stream);
508 for (; itColl != itCollEnd; ++itColl) {
520 ATH_MSG_ERROR(
"processInputFileMetaData: Could not modify the payload for folder " << contMaster->
folderName());
521 return StatusCode::FAILURE;
525 if (!contMaster->
merge(coll)) {
537 ATH_MSG_DEBUG(
"processInputFileMetaData: Merged together containers for folder " << cont->folderName() <<
" ncoll/ndup "
538 << ncolls <<
" " << ndupColls);
542 if (payloadMaster && payloadMaster->
size()) {
547 if ((*itColl)->minRange().start().isTimestamp()) lastStop =
IOVTime(0);
549 bool hasError =
false;
550 for (; itColl != itCollEnd; ++itColl) {
551 if ((*itColl)->minRange().start() < lastStop) hasError =
true;
552 lastStop = (*itColl)->minRange().stop();
555 ATH_MSG_ERROR(
"processInputFileMetaData: error after merge of file meta data. " );
558 ATH_MSG_ERROR(
"processInputFileMetaData: MinRange for meta data folders ");
559 unsigned int iPayload = 0;
560 itColl = payloadMaster->
begin();
561 for (; itColl != itCollEnd; ++itColl, ++iPayload) {
562 ATH_MSG_ERROR(iPayload <<
" " << (*itColl)->minRange() <<
" " << (*itColl)->size());
570 ATH_MSG_VERBOSE(
"processInputFileMetaData: After merge, payload minRange ");
575 unsigned int iPayload = 0;
576 for (; itColl != itCollEnd; ++itColl, ++iPayload) {
578 << (*itColl)->size());
586 ATH_MSG_DEBUG(
"processInputFileMetaData: Input payload " << cont->folderName());
587 std::ostringstream streamInp;
590 for (; itColl != itCollEnd; ++itColl) (*itColl)->dump(streamInp);
593 std::ostringstream streamOut;
596 for (; itColl != itCollEnd; ++itColl) (*itColl)->dump(streamOut);
602 ATH_MSG_DEBUG(
"processInputFileMetaData: Total number of attribute collections merged together " << ncolls
603 <<
" Number of duplicate collections " << ndupColls);
604 return StatusCode::SUCCESS;
◆ registerFolder() [1/2]
StatusCode IOVDbMetaDataTool::registerFolder |
( |
const std::string & |
folderName | ) |
const |
|
overridevirtual |
Register folder in the IOV Db MetaData without folder description - uses default folder description for CondAttrListCollection.
Implements IIOVDbMetaDataTool.
Definition at line 215 of file IOVDbMetaDataTool.cxx.
219 std::string folderDescr =
"<timeStamp>run-event</timeStamp><addrHeader><address_header service_type=\"256\" clid=\"1238547719\" /> </addrHeader><typeName>CondAttrListCollection</typeName>" ;
◆ registerFolder() [2/2]
StatusCode IOVDbMetaDataTool::registerFolder |
( |
const std::string & |
folderName, |
|
|
const std::string & |
folderDescription |
|
) |
| const |
|
overridevirtual |
Register folder in the IOV Db MetaData - done once at initialize.
Implements IIOVDbMetaDataTool.
Definition at line 227 of file IOVDbMetaDataTool.cxx.
231 std::scoped_lock guard(
m_mutex );
237 return(StatusCode::FAILURE);
243 return StatusCode::SUCCESS;
◆ renounce()
◆ renounceArray()
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ unlock_shared()
virtual void IOVDbMetaDataTool::unlock_shared |
( |
| ) |
const |
|
inlinefinaloverridevirtual |
◆ updateVHKA()
◆ m_attributesToBeRemoved
StringArrayProperty IOVDbMetaDataTool::m_attributesToBeRemoved |
|
private |
◆ m_detStore
◆ m_evtStore
◆ m_filesProcessed
std::set<std::string> IOVDbMetaDataTool::m_filesProcessed |
|
private |
◆ m_foldersToBeModified
StringArrayProperty IOVDbMetaDataTool::m_foldersToBeModified |
|
private |
◆ m_inputStore
◆ m_maxRunNumber
unsigned int IOVDbMetaDataTool::m_maxRunNumber |
|
private |
◆ m_metaDataStore
◆ m_minMaxRunNumbers
UnsignedIntegerArrayProperty IOVDbMetaDataTool::m_minMaxRunNumbers |
|
private |
◆ m_minRunNumber
unsigned int IOVDbMetaDataTool::m_minRunNumber |
|
private |
◆ m_modifyFolders
bool IOVDbMetaDataTool::m_modifyFolders |
|
private |
◆ m_mutex
std::shared_mutex IOVDbMetaDataTool::m_mutex |
|
mutableprivate |
◆ m_newRunNumber
unsigned int IOVDbMetaDataTool::m_newRunNumber |
|
private |
◆ m_oldRunNumber
unsigned int IOVDbMetaDataTool::m_oldRunNumber |
|
private |
◆ m_overrideMinMaxRunNumber
bool IOVDbMetaDataTool::m_overrideMinMaxRunNumber |
|
private |
◆ m_overrideRunNumber
bool IOVDbMetaDataTool::m_overrideRunNumber |
|
private |
◆ m_processedFirstInputFileIncident
bool IOVDbMetaDataTool::m_processedFirstInputFileIncident |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
void resetMinRange()
Reset minRange according to the IOVs of the contained channels.
const IOVRange & minRange() const
Current minimal IOVRange.
iov_size_type iov_size() const
number of Chan/IOV pairs
Validity Range object. Holds two IOVTimes (start and stop)
static constexpr uint32_t MAXRUN
void addNewStop(const IOVTime &stop)
Add new stop time to minRange - make sure that stop is <= to new stop
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
const std::string & key() const
Get the key string with which the current object was stored.
const IOVTime & start() const
bool isInRange(const IOVTime &t) const
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool msgLvl(const MSG::Level lvl) const
void addNewStart(const IOVTime &start)
Add new start time to minRange - make sure that start is >= to new start.
#define ATH_MSG_VERBOSE(x)
This class is a collection of AttributeLists where each one is associated with a channel number....
size_type size() const
size of payload vector
virtual void setOwner(IDataHandleHolder *o)=0
const IOVTime & stop() const
const_iterator begin() const
Begin of payload vector.
Basic time unit for IOVSvc. Hold time as a combination of run and event numbers.
void dump() const
Dump our contents to std::cout.
::StatusCode StatusCode
StatusCode definition for legacy code.
ChanNum chanNum(unsigned int index) const
channel number for index: (index = 0 to size-1)
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
This class is a container for the payload of conditions data. It is intended to be used to store cond...
virtual void renounce()=0
static constexpr uint32_t MAXEVENT
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
size_type size() const
number of Chan/AttributeList pairs
payloadVec::const_iterator const_iterator
const_iterator end() const
End of payload vector.
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
coral::AttributeList AttributeList
associate a data object with its VersionedKey The object is held by a ReadHandle to delay its retriev...
bool add(ChanNum chanNum, const AttributeList &attributeList)
Adding in chan/attrList pairs.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>