ATLAS Offline Software
Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
DebugView Class Reference

Very simple pass-through implementation of IProxyDict. More...

#include <DebugView.h>

Inheritance diagram for DebugView:
Collaboration diagram for DebugView:

Public Member Functions

 DebugView ()=delete
 
 DebugView (std::string const &Name, bool AllowFallThrough=true, std::string const &storeName="StoreGateSvc")
 
virtual ~DebugView ()
 
virtual void linkParent (const IProxyDict *parent)
 
virtual SG::DataProxyproxy (const CLID &id, const std::string &key) const
 
virtual SG::DataProxyfindProxy (const CLID &id, const std::string &key, const bool allowFallThrough) const
 
virtual SG::DataProxyproxy (const void *const pTransient) const
 Get a proxy referencing a given transient object. More...
 
virtual SG::DataProxyrecordObject (SG::DataObjectSharedPtr< DataObject > obj, const std::string &key, bool allowMods, bool returnExisting)
 
std::string viewKey (const std::string &key) const
 Construct a key as used in the parent store. More...
 
virtual const std::set< const SG::View * > & getParentLinks () const
 returns the links to the previously used views More...
 
void setFilter (std::vector< std::string > const &inputFilter)
 Set a filtering rule for anything loaded via fallthrough. More...
 
virtual SG::DataProxydeep_proxy (const void *const pTransient) const
 get proxy for a given data object address in memory, but performs a deep search among all possible 'symlinked' containers TEMPORARY: This method is going away. More...
 
virtual SG::DataProxyproxy_exact (SG::sgkey_t sgkey) const
 Get proxy given a hashed key+clid. More...
 
virtual std::vector< const SG::DataProxy * > proxies () const
 Return the list of all current proxies in store. More...
 
virtual StatusCode addToStore (CLID id, SG::DataProxy *proxy)
 Add a new proxy to the store. More...
 
virtual void boundHandle (IResetable *handle)
 Tell the store that a handle has been bound to a proxy. More...
 
virtual void unboundHandle (IResetable *handle)
 Tell the store that a handle has been unbound from a proxy. More...
 
virtual bool tryELRemap (sgkey_t sgkey_in, size_t index_in, sgkey_t &sgkey_out, size_t &index_out)
 Test to see if the target of an ElementLink has moved. More...
 
virtual const std::string & name () const
 
virtual IStringPool::sgkey_t stringToKey (const std::string &str, CLID clid)
 
virtual const std::string * keyToString (IStringPool::sgkey_t key) const
 
virtual const std::string * keyToString (IStringPool::sgkey_t key, CLID &clid) const
 
virtual void registerKey (IStringPool::sgkey_t key, const std::string &str, CLID clid)
 
std::string dump (const std::string &indent="") const
 
void setROI (const ElementLink< TrigRoiDescriptorCollection > &roi)
 
const ElementLink< TrigRoiDescriptorCollection > & getROI () const
 

Protected Attributes

tbb::concurrent_unordered_set< std::string > m_fallList ATLAS_THREAD_SAFE
 
ServiceHandle< StoreGateSvcm_store
 
ElementLink< TrigRoiDescriptorCollectionm_roi
 
std::string m_name
 
std::set< const SG::View * > m_parents
 
std::vector< std::string > m_fallFilter
 
bool m_allowFallThrough
 

Private Member Functions

bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 
void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

Private Attributes

std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 

Detailed Description

Very simple pass-through implementation of IProxyDict.

Most of the methods are copypasta and don't do anything Adds extra debugging information to SimpleView

Author
Ben Wynne - ATLAS

Definition at line 28 of file DebugView.h.

Constructor & Destructor Documentation

◆ DebugView() [1/2]

DebugView::DebugView ( )
delete

◆ DebugView() [2/2]

DebugView::DebugView ( std::string const Name,
bool  AllowFallThrough = true,
std::string const storeName = "StoreGateSvc" 
)

Definition at line 9 of file DebugView.cxx.

9  :
10  SimpleView( Name, AllowFallThrough, storeName ),
12 {
13 }

◆ ~DebugView()

DebugView::~DebugView ( )
virtual

Definition at line 15 of file DebugView.cxx.

16 {
17  // Debugging info
18  try {
19  ATH_MSG_INFO( "Loaded via fallthrough from view " << m_name << ": " );
20  for ( auto const& key : m_fallList ) ATH_MSG_INFO( key );
21 
22  ATH_MSG_INFO( "View " << m_name << " has " << m_parents.size() << " parents" );
23  }
24  catch (const GaudiException&) {
25  // ATH_MSG_* can throw --- don't let the exception escape the destructor.
26  std::abort();
27  }
28 }

Member Function Documentation

◆ addToStore()

StatusCode SimpleView::addToStore ( CLID  id,
SG::DataProxy proxy 
)
virtualinherited

Add a new proxy to the store.

Parameters
idCLID as which the proxy should be added.
proxyThe proxy to add.

Simple addition of a proxy to the store. The key is taken as the primary key of the proxy. Does not handle things like overwrite, history, symlinks, etc. Should return failure if there is already an entry for this clid/key.

Definition at line 146 of file SimpleView.cxx.

147 {
148  return m_store->addToStore( id, proxy );
149 }

◆ boundHandle()

void SimpleView::boundHandle ( IResetable handle)
virtualinherited

Tell the store that a handle has been bound to a proxy.

Parameters
handleThe handle that was bound. The default implementation does nothing.

Definition at line 188 of file SimpleView.cxx.

189 {
190  return m_store->boundHandle( handle );
191 }

◆ deep_proxy()

virtual SG::DataProxy* SimpleView::deep_proxy ( const void *const  pTransient) const
inlinevirtualinherited

get proxy for a given data object address in memory, but performs a deep search among all possible 'symlinked' containers TEMPORARY: This method is going away.

Definition at line 71 of file SimpleView.h.

72  { return proxy (pTransient); }

◆ dump()

std::string SimpleView::dump ( const std::string &  indent = "") const
inherited

Definition at line 234 of file SimpleView.cxx.

234  {
235 
236  // Dump view contents
237  std::string ret = indent + "Dump " + name() + "\n";
238  ret += indent + "[";
239  for ( const SG::DataProxy* dp: proxies() ) {
240  if ( dp->name().find( name() ) == 0 )
241  ret += " " + dp->name();
242  }
243  ret += " ]\n";
244 
245  // Dump parent views
246  if ( m_parents.size() ) ret += indent + "Parents:\n";
247  for ( auto p : m_parents ) {
248  ret += p->dump( indent + " " );
249  }
250 
251  // Fallthrough
252  if ( indent == "" ) {
253  if ( m_allowFallThrough ) {
254  ret += indent + "May access main store: " + m_store->name();
255  } else {
256  ret += indent + "May not access main store";
257  }
258  }
259  return ret;
260 }

◆ findProxy()

SG::DataProxy * DebugView::findProxy ( const CLID id,
const std::string &  key,
const bool  allowFallThrough 
) const
virtual

Reimplemented from SimpleView.

Definition at line 56 of file DebugView.cxx.

57 {
58  auto isValid = [](const SG::DataProxy* p) { return p != nullptr and p->isValid(); };
59  auto localProxy = m_store->proxy( id, viewKey(key) );
60  if ( isValid( localProxy ) ) {
61  return localProxy;
62  }
63 
64  // Locate any parent views containing the data
65  SG::DataProxy* parentProxy = nullptr;
66  std::vector< const SG::View* > validParents;
67  for ( auto& parent: m_parents ) {
68 
69  // Don't allow parents to access whole-event store independently of this view
70  auto inParentProxy = parent->impl()->findProxy( id, key, false );
71 
72  // Record parents that contain the data
73  if ( isValid( inParentProxy ) ) {
74 
75  // Warn if two different data objects conflict
76  if ( parentProxy && ( parentProxy->object() != inParentProxy->object() ) ) {
77  ATH_MSG_WARNING( "Parent view " << parent->name() << " contains conflicting data (" << inParentProxy->object() << ") vs " << parentProxy->object() << " found first" );
78  }
79 
80  // Retrive the first data found
81  if ( !parentProxy ) parentProxy = inParentProxy;
82 
83  // Make list of all parents returning data
84  validParents.push_back( parent );
85  }
86  }
87 
88  // Return results from parent view search
89  if ( parentProxy ) {
90 
91  // Warn if multiple parents returned result
92  if ( validParents.size() > 1 ) {
93 
94  std::string validNames = "";
95  for ( auto& parent : validParents ) validNames += parent->name() + " ";
96 
97  ATH_MSG_WARNING( "Key " << key << " in multiple parents (" << validParents.size() << "): " << validNames );
98  }
99  return parentProxy;
100  }
101 
102  // Look in the default store if cound not find in any view - for instance for event-wise IDCs
103  if ( (not isValid( localProxy )) and allowFallThrough ) {
104 
105  // Apply filtering
106  if ( m_fallFilter.size() ) {
107  bool filterPass = false;
108 
109  // Filter passes if the key contains one of the possible values
110  for ( auto& entry : m_fallFilter ) {
111  if ( key.find( entry ) != std::string::npos ) {
112  filterPass = true;
113  break;
114  }
115  }
116 
117  if ( !filterPass ) {
118  ATH_MSG_INFO( "Key " << key << " not found in filter for view " << m_name << ": returning 0" );
119  return nullptr;
120  }
121  }
122 
123  auto mainStoreProxy = m_store->proxy( id, key );
124  if ( mainStoreProxy ) {
125  ATH_MSG_INFO( "Key " << key << " fell through to main store from view " << m_name << ": returning " << mainStoreProxy );
126  m_fallList.insert( key );
127  }
128  return mainStoreProxy;
129  }
130  return nullptr;
131 }

◆ getParentLinks()

virtual const std::set< const SG::View* >& SimpleView::getParentLinks ( ) const
inlinevirtualinherited

returns the links to the previously used views

Definition at line 57 of file SimpleView.h.

58  { return m_parents; }

◆ getROI()

const ElementLink< TrigRoiDescriptorCollection > & SimpleView::getROI ( ) const
inherited

Definition at line 230 of file SimpleView.cxx.

230  {
231  return m_roi;
232 }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40 {
42  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ keyToString() [1/2]

const std::string * SimpleView::keyToString ( IStringPool::sgkey_t  key) const
virtualinherited

Definition at line 213 of file SimpleView.cxx.

214 {
215  throw std::runtime_error( "Not implemented: SimpleView::keyToString" );
216 }

◆ keyToString() [2/2]

const std::string * SimpleView::keyToString ( IStringPool::sgkey_t  key,
CLID clid 
) const
virtualinherited

Definition at line 217 of file SimpleView.cxx.

218 {
219  throw std::runtime_error( "Not implemented: SimpleView::keyToString" );
220 }

◆ linkParent()

void DebugView::linkParent ( const IProxyDict parent)
virtual
See also
SimpleView::linkParent

Reimplemented from SimpleView.

Definition at line 30 of file DebugView.cxx.

30  {
31 
32  // Check the parent is a view
33  auto castParent = dynamic_cast< const SG::View* >( parent );
34  if ( castParent ) {
35 
36  // Check for uniqueness
37  auto result = m_parents.insert( castParent );
38  if ( std::get<1>( result ) ) {
39  ATH_MSG_INFO( "Adding parent view " << parent->name() << " to view " << name() << " with " << m_parents.size() - 1 << " existing parents" );
40  }
41  else {
42  ATH_MSG_WARNING( "Attempted to add duplicate parent " << parent->name() << " to view " << name() );
43  }
44  }
45  else {
46  ATH_MSG_ERROR( "Unable to link parent view that cannot be cast to SG::View" );
47  }
48 }

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level  lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152 {
153  if (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ name()

const std::string & SimpleView::name ( ) const
virtualinherited

Definition at line 203 of file SimpleView.cxx.

204 {
205  return m_name;
206 }

◆ proxies()

std::vector< const SG::DataProxy * > SimpleView::proxies ( ) const
virtualinherited

Return the list of all current proxies in store.

Definition at line 130 of file SimpleView.cxx.

131 {
132  return m_store->proxies();
133 }

◆ proxy() [1/2]

SG::DataProxy * DebugView::proxy ( const CLID id,
const std::string &  key 
) const
virtual
See also
SimpleView::proxy

Reimplemented from SimpleView.

Definition at line 51 of file DebugView.cxx.

52 {
53  return findProxy( id, key, m_allowFallThrough );
54 }

◆ proxy() [2/2]

SG::DataProxy * DebugView::proxy ( const void *const  pTransient) const
virtual

Get a proxy referencing a given transient object.

Parameters
pTransientThe object to find.

Returns 0 to flag failure

Reimplemented from SimpleView.

Definition at line 133 of file DebugView.cxx.

134 {
135  throw std::runtime_error( "Not implemented: SimpleView::proxy" );
136 }

◆ proxy_exact()

SG::DataProxy * SimpleView::proxy_exact ( SG::sgkey_t  sgkey) const
virtualinherited

Get proxy given a hashed key+clid.

Parameters
sgkeyHashed key to look up.

Find an exact match; no handling of aliases, etc. Returns 0 to flag failure.

Definition at line 51 of file SimpleView.cxx.

52 {
53  return nullptr;
54 }

◆ recordObject()

SG::DataProxy * DebugView::recordObject ( SG::DataObjectSharedPtr< DataObject >  obj,
const std::string &  key,
bool  allowMods,
bool  returnExisting 
)
virtual
See also
SimpleView::recordObject

Reimplemented from SimpleView.

Definition at line 138 of file DebugView.cxx.

139 {
140  // Warn if fallthrough already happened for the object
141  if ( m_fallList.find( key ) != m_fallList.end() ) {
142  ATH_MSG_WARNING( "Key " << key << " was recorded to view " << m_name << " but was previously retrieved via fallthrough" );
143  }
144 
145  return m_store->recordObject( obj, viewKey(key), allowMods, returnExisting );
146 }

◆ registerKey()

void SimpleView::registerKey ( IStringPool::sgkey_t  key,
const std::string &  str,
CLID  clid 
)
virtualinherited

Definition at line 221 of file SimpleView.cxx.

222 {
223  m_store->registerKey( key, viewKey(str), clid );
224 }

◆ setFilter()

void SimpleView::setFilter ( std::vector< std::string > const inputFilter)
inlineinherited

Set a filtering rule for anything loaded via fallthrough.

Definition at line 63 of file SimpleView.h.

64  { m_fallFilter = inputFilter; }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level  lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29 {
30  m_lvl = lvl;
31 }

◆ setROI()

void SimpleView::setROI ( const ElementLink< TrigRoiDescriptorCollection > &  roi)
inherited

Definition at line 226 of file SimpleView.cxx.

226  {
227  m_roi = roi;
228 }

◆ stringToKey()

IStringPool::sgkey_t SimpleView::stringToKey ( const std::string &  str,
CLID  clid 
)
virtualinherited

Definition at line 209 of file SimpleView.cxx.

210 {
211  return m_store->stringToKey( viewKey(str), clid );
212 }

◆ tryELRemap()

bool SimpleView::tryELRemap ( sgkey_t  sgkey_in,
size_t  index_in,
sgkey_t &  sgkey_out,
size_t &  index_out 
)
virtualinherited

Test to see if the target of an ElementLink has moved.

Parameters
sgkey_inOriginal hashed key of the EL.
index_inOriginal index of the EL.
sgkey_out[out]New hashed key for the EL.
index_out[out]New index for the EL.
Returns
True if there is a remapping; false otherwise.

The default implementation here always returns false.

Definition at line 162 of file SimpleView.cxx.

163 {
164  throw std::runtime_error( "Not implemented: SimpleView::tryELRemap" );
165 }

◆ unboundHandle()

void SimpleView::unboundHandle ( IResetable handle)
virtualinherited

Tell the store that a handle has been unbound from a proxy.

Parameters
handleThe handle that was unbound. The default implementation does nothing.

Definition at line 198 of file SimpleView.cxx.

199 {
200  return m_store->unboundHandle( handle );
201 }

◆ viewKey()

std::string SimpleView::viewKey ( const std::string &  key) const
inherited

Construct a key as used in the parent store.

key The key as used in the view.

Definition at line 27 of file SimpleView.cxx.

28 {
29  return SG::transientKey (m_name + "_" + key);
30 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

tbb::concurrent_unordered_set< std::string > m_fallList DebugView::ATLAS_THREAD_SAFE
mutableprotected

Definition at line 65 of file DebugView.h.

◆ m_allowFallThrough

bool SimpleView::m_allowFallThrough
protectedinherited

Definition at line 197 of file SimpleView.h.

◆ m_fallFilter

std::vector< std::string > SimpleView::m_fallFilter
protectedinherited

Definition at line 196 of file SimpleView.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_name

std::string SimpleView::m_name
protectedinherited

Definition at line 194 of file SimpleView.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_parents

std::set< const SG::View* > SimpleView::m_parents
protectedinherited

Definition at line 195 of file SimpleView.h.

◆ m_roi

ElementLink<TrigRoiDescriptorCollection> SimpleView::m_roi
protectedinherited

Definition at line 193 of file SimpleView.h.

◆ m_store

ServiceHandle< StoreGateSvc > SimpleView::m_store
protectedinherited

Definition at line 190 of file SimpleView.h.


The documentation for this class was generated from the following files:
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
TileDCSDataPlotter.dp
dp
Definition: TileDCSDataPlotter.py:842
SimpleView::m_fallFilter
std::vector< std::string > m_fallFilter
Definition: SimpleView.h:196
get_generator_info.result
result
Definition: get_generator_info.py:21
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SimpleView::m_allowFallThrough
bool m_allowFallThrough
Definition: SimpleView.h:197
SimpleView::m_name
std::string m_name
Definition: SimpleView.h:194
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:867
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
SimpleView::m_parents
std::set< const SG::View * > m_parents
Definition: SimpleView.h:195
AthMessaging::AthMessaging
AthMessaging()
Default constructor:
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
geometry_dat_to_json.indent
indent
Definition: geometry_dat_to_json.py:37
SimpleView::proxies
virtual std::vector< const SG::DataProxy * > proxies() const
Return the list of all current proxies in store.
Definition: SimpleView.cxx:130
SimpleView::proxy
virtual SG::DataProxy * proxy(const CLID &id, const std::string &key) const
Get proxy with given id and key.
Definition: SimpleView.cxx:70
test_pyathena.parent
parent
Definition: test_pyathena.py:15
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
SimpleView::viewKey
std::string viewKey(const std::string &key) const
Construct a key as used in the parent store.
Definition: SimpleView.cxx:27
SimpleView::name
virtual const std::string & name() const
Definition: SimpleView.cxx:203
Name
JetDumper::Name Name
Definition: JetDumper.cxx:19
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
SimpleView::SimpleView
SimpleView()=delete
SG::transientKey
std::string transientKey(const std::string &key)
Make a key transient.
Definition: transientKey.h:51
str
Definition: BTagTrackIpAccessor.cxx:11
SimpleView::m_roi
ElementLink< TrigRoiDescriptorCollection > m_roi
Definition: SimpleView.h:193
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:39
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
SG::View
Definition: View.h:25
python.PyAthena.obj
obj
Definition: PyAthena.py:132
SG::DataProxy
Definition: DataProxy.h:45
DebugView::findProxy
virtual SG::DataProxy * findProxy(const CLID &id, const std::string &key, const bool allowFallThrough) const
Definition: DebugView.cxx:56
SimpleView::m_store
ServiceHandle< StoreGateSvc > m_store
Definition: SimpleView.h:190
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
python.SystemOfUnits.ms
float ms
Definition: SystemOfUnits.py:148