![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
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 249 of file IOVDbMetaDataTool.cxx.
253 std::scoped_lock guard(
m_mutex );
260 ATH_MSG_DEBUG(
"Retrieved IOVMetaDataContainer from MetaDataStore for folder "
264 ATH_MSG_ERROR(
"addPayload: Could not find IOVMetaDataContainer in MetaDataStore for folder "
266 <<
". One must have previously called registerFolder. ");
267 return StatusCode::FAILURE;
283 <<
" (may be duplicate payload).");
292 std::ostringstream
stream;
297 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 IProperty* propertyServer(0);
159 StatusCode sc = serviceLocator()->service(
"ApplicationMgr", propertyServer);
160 if (
sc != StatusCode::SUCCESS ) {
161 ATH_MSG_ERROR(
"checkOverrideRunNumber: Cannot get ApplicationMgr ");
164 StringProperty property(
"EvtSel",
"");
165 sc = propertyServer->getProperty(&property);
166 if (!
sc.isSuccess()) {
167 ATH_MSG_ERROR(
"checkOverrideRunNumber: unable to get EvtSel: found " << property.value());
173 if (
sc != StatusCode::SUCCESS ) {
179 BooleanProperty overrideRunNumber = IntegerProperty(
"OverrideRunNumberFromInput",
false);
180 sc = propertyServer->getProperty(&overrideRunNumber);
181 if (!
sc.isSuccess()) {
183 ATH_MSG_DEBUG(
"resetRunNumber: unable to get OverrideRunNumberFromInput property from EventSelector ");
189 IntegerProperty
runNumber = IntegerProperty(
"RunNumber", 0);
191 if (!
sc.isSuccess()) {
192 ATH_MSG_ERROR(
"checkOverrideRunNumber: unable to get RunNumber from EventSelector: found "
198 runNumber = IntegerProperty(
"OldRunNumber", 0);
200 if (!
sc.isSuccess()) {
201 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);
◆ 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.
◆ 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.
◆ 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 399 of file IOVDbMetaDataTool.cxx.
411 <<
". Created a new instance");
413 if (!
sc.isSuccess()) {
422 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 303 of file IOVDbMetaDataTool.cxx.
313 bool modifyAttr =
false;
314 std::string attributeName;
317 for (
unsigned int i = 0;
i <
folders.size(); ++
i) {
322 ATH_MSG_DEBUG(
"modifyPayload: remove attribute " << attributeName);
330 return StatusCode::SUCCESS;
333 bool iovSizeIsZero = coll->iov_size() == 0;
334 IOVRange testIOV = coll->minRange();
346 unsigned int nchans = coll->size();
347 bool hasChanNames = (coll->name_size() == nchans);
353 for (
unsigned int iatt = 0; iatt < oldAttrList.size(); ++iatt) {
355 if (attributeName == oldAttrList[iatt].specification().name()) {
356 ATH_MSG_DEBUG(
"modifyPayload: skipping attribute name " << oldAttrList[iatt].specification().
name());
361 newAttrList.extend(oldAttrList[iatt].specification().
name(),
362 oldAttrList[iatt].specification().
type());
363 const coral::Attribute& oldAttr = oldAttrList[iatt];
364 coral::Attribute& newAttr = newAttrList[oldAttrList[iatt].specification().name()];
368 << oldAttrList[iatt].specification().
name() <<
" "
372 if (!iovSizeIsZero) coll1->
add(
chan, coll->iovRange(
chan));
373 if(hasChanNames)coll1->
add(
chan, coll->chanName(
chan));
379 std::ostringstream
stream;
384 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 611 of file IOVDbMetaDataTool.cxx.
623 bool iovSizeIsZero = coll->
iov_size() == 0;
628 if (
start.isRunEvent() &&
stop.isRunEvent()) {
637 return StatusCode::SUCCESS;
642 <<
" iovSizeIsZero: " << (
int)iovSizeIsZero
643 <<
" newRange " << newRange);
656 unsigned int nchans = coll->
size();
669 ATH_MSG_DEBUG(
"overrideIOV: after overriding the IOV of collection");
670 std::ostringstream
stream;
677 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 432 of file IOVDbMetaDataTool.cxx.
435 std::scoped_lock guard(
m_mutex );
444 if (!
sc.isSuccess()) {
445 ATH_MSG_DEBUG(
"processInputFileMetaData: Could not retrieve IOVMetaDataContainer objects from InputMetaDataStore - cannot process input file meta data");
446 return StatusCode::SUCCESS;
449 ATH_MSG_DEBUG(
"processInputFileMetaData: Retrieved from IOVMetaDataContainer(s) from InputMetaDataStore");
452 unsigned int ncolls = 0;
453 unsigned int ndupColls = 0;
454 for (; cont != contEnd; ++cont) {
456 , cont->folderDescription());
460 std::list<SG::ObjectWithVersion<IOVMetaDataContainer> > allVersions;
462 if (!
sc.isSuccess()) {
470 ATH_MSG_DEBUG(
"processInputFileMetaData: New container: payload size " <<
payload->size() <<
" version key " <<
obj.versionedKey);
475 ATH_MSG_VERBOSE(
"Before merge, payload minRange for folder " << cont->folderName());
476 if (payloadMaster && payloadMaster->
size()) {
480 unsigned int iPayload = 0;
481 for (; itColl != itCollEnd; ++itColl, ++iPayload) {
483 << (*itColl)->size());
497 std::ostringstream
stream;
498 for (; itColl1 != itCollEnd1; ++itColl1) (*itColl1)->dump(
stream);
509 for (; itColl != itCollEnd; ++itColl) {
521 ATH_MSG_ERROR(
"processInputFileMetaData: Could not modify the payload for folder " << contMaster->
folderName());
522 return StatusCode::FAILURE;
526 if (!contMaster->
merge(coll)) {
538 ATH_MSG_DEBUG(
"processInputFileMetaData: Merged together containers for folder " << cont->folderName() <<
" ncoll/ndup "
539 << ncolls <<
" " << ndupColls);
543 if (payloadMaster && payloadMaster->
size()) {
548 if ((*itColl)->minRange().start().isTimestamp()) lastStop =
IOVTime(0);
550 bool hasError =
false;
551 for (; itColl != itCollEnd; ++itColl) {
552 if ((*itColl)->minRange().start() < lastStop) hasError =
true;
553 lastStop = (*itColl)->minRange().stop();
556 ATH_MSG_ERROR(
"processInputFileMetaData: error after merge of file meta data. " );
559 ATH_MSG_ERROR(
"processInputFileMetaData: MinRange for meta data folders ");
560 unsigned int iPayload = 0;
561 itColl = payloadMaster->
begin();
562 for (; itColl != itCollEnd; ++itColl, ++iPayload) {
563 ATH_MSG_ERROR(iPayload <<
" " << (*itColl)->minRange() <<
" " << (*itColl)->size());
571 ATH_MSG_VERBOSE(
"processInputFileMetaData: After merge, payload minRange ");
576 unsigned int iPayload = 0;
577 for (; itColl != itCollEnd; ++itColl, ++iPayload) {
579 << (*itColl)->size());
587 ATH_MSG_DEBUG(
"processInputFileMetaData: Input payload " << cont->folderName());
588 std::ostringstream streamInp;
591 for (; itColl != itCollEnd; ++itColl) (*itColl)->dump(streamInp);
594 std::ostringstream streamOut;
597 for (; itColl != itCollEnd; ++itColl) (*itColl)->dump(streamOut);
603 ATH_MSG_DEBUG(
"processInputFileMetaData: Total number of attribute collections merged together " << ncolls
604 <<
" Number of duplicate collections " << ndupColls);
605 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 216 of file IOVDbMetaDataTool.cxx.
220 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 228 of file IOVDbMetaDataTool.cxx.
232 std::scoped_lock guard(
m_mutex );
238 return(StatusCode::FAILURE);
244 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.
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
IOVRange minRange() const
Current minimal IOVRange.
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>