ATLAS Offline Software
Loading...
Searching...
No Matches
xAOD::EnergySumRoIAuxInfo_v1 Class Referenceabstract

Auxiliary store for an EnergySum RoI object. More...

#include <EnergySumRoIAuxInfo_v1.h>

Inheritance diagram for xAOD::EnergySumRoIAuxInfo_v1:
Collaboration diagram for xAOD::EnergySumRoIAuxInfo_v1:

Public Types

typedef SG::auxid_t auxid_t
 The aux ID type definition.
typedef SG::auxid_set_t auxid_set_t
 The aux ID set type definition.
template<class T, class ALLOC = std::allocator<T>>
using AuxVariable_t = T
 Declare how to wrap variables for this sort of base.
template<class T, class ALLOC = std::allocator<T>>
using LinkedVariable_t = std::vector<T, ALLOC>
enum  AuxStoreType { AST_ObjectStore = 0 , AST_ContainerStore = 1 }
 Type of the auxiliary store. More...

Public Member Functions

 EnergySumRoIAuxInfo_v1 ()
 Default constuctor.
virtual bool insertMove (size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore=SG::auxid_set_t())=0
 Move all elements from other to this store.
template<typename T>
auxid_t getAuxID (const std::string &name, T &, SG::AuxVarFlags flags=SG::AuxVarFlags::None, const SG::auxid_t linkedVariable=SG::null_auxid)
 Get the auxiliary ID for one of the persistent variables.
template<typename T>
void regAuxVar (auxid_t auxid, const std::string &name, T &info)
 Register one of the persistent variables internally.
Functions implementing the SG::IAuxStoreHolder interface
virtual SG::IAuxStoregetStore () override
 Get the currently used internal store object.
virtual const SG::IAuxStoregetStore () const override
 Get the currently used internal store object.
virtual void setStore (SG::IAuxStore *store) override
 Set a different internal store object.
virtual AuxStoreType getStoreType () const override
 Return the type of the store object.
Functions implementing the SG::IConstAuxStore interface
virtual const void * getData (auxid_t auxid) const override
 Get a pointer to a given array.
virtual const SG::IAuxTypeVectorgetVector (SG::auxid_t auxid) const override final
 Return vector interface for one aux data item.
virtual const auxid_set_tgetAuxIDs () const override
 Get the types(names) of variables handled by this container.
virtual const auxid_set_tgetDecorIDs () const override
 Get the types(names) of decorations handled by this container.
virtual bool isDecoration (auxid_t auxid) const override
 Test if a variable is a decoration.
virtual void * getDecoration (auxid_t auxid, size_t size, size_t capacity) override
 Get a pointer to a given array, as a decoration.
virtual void lock () override
 Lock the container.
virtual bool clearDecorations () override
 Clear all decorations.
virtual size_t size () const override
 Get the size of the container.
virtual void lockDecoration (SG::auxid_t auxid) override
 Lock a decoration.
virtual const SG::IAuxTypeVectorlinkedVector (SG::auxid_t auxid) const override
 Return interface for a linked variable.
Functions implementing the SG::IAuxStore interface
virtual void * getData (auxid_t auxid, size_t size, size_t capacity) override
 Get a pointer to a given array, creating the array if necessary.
virtual SG::IAuxTypeVectorlinkedVector (SG::auxid_t auxid) override
 Return interface for a linked variable.
virtual const auxid_set_tgetWritableAuxIDs () const override
 Return a set of writable data identifiers.
virtual bool resize (size_t size) override
 Resize the arrays to a given size.
virtual void reserve (size_t size) override
 Reserve a given size for the arrays.
virtual void shift (size_t pos, ptrdiff_t offs) override
 Shift the contents of the stored arrays.
virtual bool insertMove (size_t pos, IAuxStore &other, const SG::auxid_set_t &ignore) override
 Insert contents of another store via move.
virtual bool setOption (auxid_t id, const SG::AuxDataOption &option) override
 Make an option setting on an aux variable.
Functions implementing the SG::IAuxStoreIO interface
virtual const void * getIOData (auxid_t auxid) const override
 Get a pointer to the data being stored for one aux data item.
virtual const std::type_info * getIOType (auxid_t auxid) const override
 Return the type of the data to be stored for one aux data item.
virtual const auxid_set_tgetDynamicAuxIDs () const override
 Get the types(names) of variables created dynamically.
virtual SG::auxid_set_t getSelectedAuxIDs () const override
 Get the IDs of the selected dynamic Aux variables (for writing)
Functions managing the instance name of the container
const charname () const
 Get the name of the container instance.
void setName (const char *name)
 Set the name of the container instance.

Static Public Attributes

static constexpr bool supportsThinning = true
 Mark that this type supports thinning operations.

Private Types

typedef AthContainers_detail::mutex mutex_t
 Mutex for multithread synchronization.
typedef AthContainers_detail::lock_guard< mutex_tguard_t

Private Attributes

uint32_t roiWord0
uint32_t roiWord1
uint32_t roiWord2
std::vector< std::string > thrNames
float energyX
float energyY
float energyT
auxid_set_t m_auxids
 Internal list of all available variables.
std::vector< SG::IAuxTypeVector * > m_vecs
 Internal list of all managed variables.
SG::IAuxStorem_store
 Internal dynamic auxiliary store object.
SG::IAuxStoreIOm_storeIO
 The IO interface to the internal auxiliary store.
bool m_ownsStore
 Flag deciding if the object owns the dynamic store or not.
bool m_locked
 Has the container been locked?
mutex_t m_mutex
std::string m_name
 Name of the container in memory. Set externally.

Detailed Description

Auxiliary store for an EnergySum RoI object.

This auxiliary store describes a single EnergySum RoI object, as we only have one of those in the ATLAS events.

Author
Lukas Heinrich Lukas.nosp@m..Hei.nosp@m.nrich.nosp@m.@cer.nosp@m.n.ch
Attila Krasznahorkay Attil.nosp@m.a.Kr.nosp@m.aszna.nosp@m.hork.nosp@m.ay@ce.nosp@m.rn.c.nosp@m.h
Revision
631149
Date
2014-11-26 13:26:18 +0100 (Wed, 26 Nov 2014)

Definition at line 34 of file EnergySumRoIAuxInfo_v1.h.

Member Typedef Documentation

◆ auxid_set_t

The aux ID set type definition.

Definition at line 51 of file AuxInfoBase.h.

◆ auxid_t

The aux ID type definition.

Definition at line 49 of file AuxInfoBase.h.

◆ AuxVariable_t

template<class T, class ALLOC = std::allocator<T>>
using xAOD::AuxInfoBase::AuxVariable_t = T
inherited

Declare how to wrap variables for this sort of base.

Definition at line 175 of file AuxInfoBase.h.

◆ guard_t

Definition at line 208 of file AuxInfoBase.h.

◆ LinkedVariable_t

template<class T, class ALLOC = std::allocator<T>>
using xAOD::AuxInfoBase::LinkedVariable_t = std::vector<T, ALLOC>
inherited

Definition at line 177 of file AuxInfoBase.h.

◆ mutex_t

Mutex for multithread synchronization.

Definition at line 207 of file AuxInfoBase.h.

Member Enumeration Documentation

◆ AuxStoreType

Type of the auxiliary store.

In the xAOD EDM we use auxiliary store objects in some cases to describe a single object, and in most cases to describe a container of objects. This enumeration declares which type the object implementing this interface is.

Enumerator
AST_ObjectStore 

The store describes a single object.

AST_ContainerStore 

The store describes a container.

Definition at line 66 of file IAuxStoreHolder.h.

66 {
67 AST_ObjectStore = 0,
69 };
@ AST_ContainerStore
The store describes a container.
@ AST_ObjectStore
The store describes a single object.

Constructor & Destructor Documentation

◆ EnergySumRoIAuxInfo_v1()

xAOD::EnergySumRoIAuxInfo_v1::EnergySumRoIAuxInfo_v1 ( )

Default constuctor.

Definition at line 12 of file EnergySumRoIAuxInfo_v1.cxx.

13 : AuxInfoBase(),
14 roiWord0( 0 ), roiWord1( 0 ), roiWord2( 0 ),
15 thrNames(), energyX( 0 ), energyY( 0 ), energyT( 0 ) {
16
20
22
26 }
#define AUX_VARIABLE(VAR,...)
Convenience macro for declaring an auxiliary variable.
Definition AuxVariable.h:23
AuxInfoBase(bool allowDynamicVars=true)
Default constructor.
std::vector< std::string > thrNames

Member Function Documentation

◆ clearDecorations()

bool xAOD::AuxInfoBase::clearDecorations ( )
overridevirtualinherited

Clear all decorations.

Implements SG::IConstAuxStore.

Definition at line 322 of file AuxInfoBase.cxx.

322 {
323
324 // Guard against multi-threaded execution:
325 guard_t guard( m_mutex );
326
327 // Clear the decorations that are in the dynamic store:
328 bool anycleared = false;
329 if( m_store ) {
330 anycleared = m_store->clearDecorations();
331 }
332 // Early exit if there were no decorations.
333 if (!anycleared) return false;
334
335 // Reconstruct the list of managed auxiliary IDs from scratch:
337 for( auxid_t auxid = 0; auxid < m_vecs.size(); ++auxid ) {
338 if( m_vecs[ auxid ] ) {
339 ids.insert( auxid );
340 }
341 }
342 if( m_store ) {
343 ids.insert (m_store->getAuxIDs());
344 }
345 m_auxids = std::move(ids);
346
347 return true;
348 }
auxid_set_t m_auxids
Internal list of all available variables.
std::vector< SG::IAuxTypeVector * > m_vecs
Internal list of all managed variables.
SG::auxid_t auxid_t
The aux ID type definition.
Definition AuxInfoBase.h:49
AthContainers_detail::lock_guard< mutex_t > guard_t
SG::IAuxStore * m_store
Internal dynamic auxiliary store object.
SG::auxid_set_t auxid_set_t
The aux ID set type definition.
Definition AuxInfoBase.h:51

◆ getAuxID()

template<typename T>
auxid_t xAOD::AuxInfoBase::getAuxID ( const std::string & name,
T & ,
SG::AuxVarFlags flags = SG::AuxVarFlags::None,
const SG::auxid_t linkedVariable = SG::null_auxid )
inherited

Get the auxiliary ID for one of the persistent variables.

◆ getAuxIDs()

const AuxInfoBase::auxid_set_t & xAOD::AuxInfoBase::getAuxIDs ( ) const
overridevirtualinherited

Get the types(names) of variables handled by this container.

Implements SG::IConstAuxStore.

Definition at line 249 of file AuxInfoBase.cxx.

249 {
250
251 // Return the full list of IDs:
252 return getWritableAuxIDs();
253 }
virtual const auxid_set_t & getWritableAuxIDs() const override
Return a set of writable data identifiers.

◆ getData() [1/2]

const void * xAOD::AuxInfoBase::getData ( auxid_t auxid) const
overridevirtualinherited

Get a pointer to a given array.

Implements SG::IConstAuxStore.

Definition at line 195 of file AuxInfoBase.cxx.

195 {
196
197 const SG::IAuxTypeVector* v = getVector( auxid );
198 if( v ) {
199 return v->toPtr();
200 }
201 return nullptr;
202 }
virtual const SG::IAuxTypeVector * getVector(SG::auxid_t auxid) const override final
Return vector interface for one aux data item.

◆ getData() [2/2]

void * xAOD::AuxInfoBase::getData ( auxid_t auxid,
size_t size,
size_t capacity )
overridevirtualinherited

Get a pointer to a given array, creating the array if necessary.

Implements SG::IAuxStore.

Definition at line 424 of file AuxInfoBase.cxx.

425 {
426
427 // Guard against multi-threaded execution:
428 guard_t guard( m_mutex );
429
430 if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
431
432 if( m_store ) {
433 void* result = m_store->getData( auxid, size, capacity );
434 if( result ) {
435 m_auxids.insert( auxid );
436 const SG::AuxTypeRegistry& r = SG::AuxTypeRegistry::instance();
437 auxid_t linked_id = r.linkedVariable( auxid );
438 if (linked_id != SG::null_auxid) {
439 m_auxids.insert( linked_id );
440 }
441 }
442 return result;
443 } else {
444 std::cout << "ERROR xAOD::AuxInfoBase::getData "
445 << "Unknown variable ("
447 << ") requested" << std::endl;
448 return nullptr;
449 }
450 }
451 m_vecs[ auxid ]->reserve( capacity );
452 if (m_vecs[ auxid ]->size() < size) {
453 m_vecs[ auxid ]->resize( size );
454 }
455
456 return m_vecs[ auxid ]->toPtr();
457 }
std::string getName(SG::auxid_t auxid) const
Return the name of an aux data item.
static AuxTypeRegistry & instance()
Return the singleton registry instance.
virtual size_t size() const override
Get the size of the container.
int r
Definition globals.cxx:22
static const auxid_t null_auxid
To signal no aux data item.
Definition AuxTypes.h:30

◆ getDecoration()

void * xAOD::AuxInfoBase::getDecoration ( auxid_t auxid,
size_t size,
size_t capacity )
overridevirtualinherited

Get a pointer to a given array, as a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventAuxInfo_v1, xAOD::EventAuxInfo_v2, and xAOD::EventAuxInfo_v3.

Definition at line 265 of file AuxInfoBase.cxx.

266 {
267 {
268 // Guard against multi-threaded execution:
269 guard_t guard( m_mutex );
270
271 // Check if we have it as a static variable:
272 if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
273 // If not, but we have a dynamic store, push it in there:
274 if( m_store ) {
275 void* result = m_store->getDecoration( auxid, size, capacity );
276 if( result ) {
277 m_auxids.insert( auxid );
278 const SG::AuxTypeRegistry& r = SG::AuxTypeRegistry::instance();
279 auxid_t linked_id = r.linkedVariable( auxid );
280 if (linked_id != SG::null_auxid) {
281 m_auxids.insert( linked_id );
282 }
283 }
284 return result;
285 }
286 // If we don't have a dynamic store, complain:
287 else {
288 std::cout << "ERROR xAOD::AuxInfoBase::getDecoration "
289 << "Can't provide variable "
291 << std::endl;
292 return nullptr;
293 }
294 }
295
296 // If the container is locked, static variables can't be accessed this
297 // way:
298 if( m_locked ) {
299 throw SG::ExcStoreLocked( auxid );
300 }
301 }
302
303 // If the container is not locked, then fall back on the normal accessor
304 // function:
305 return getData( auxid, size, capacity );
306 }
bool m_locked
Has the container been locked?
virtual const void * getData(auxid_t auxid) const override
Get a pointer to a given array.

◆ getDecorIDs()

const AuxInfoBase::auxid_set_t & xAOD::AuxInfoBase::getDecorIDs ( ) const
overridevirtualinherited

Get the types(names) of decorations handled by this container.

Implements SG::IConstAuxStore.

Definition at line 256 of file AuxInfoBase.cxx.

256 {
257
258 if( m_store ) {
259 return m_store->getDecorIDs();
260 }
261 static const auxid_set_t empty;
262 return empty;
263 }
static const Attributes_t empty

◆ getDynamicAuxIDs()

const AuxInfoBase::auxid_set_t & xAOD::AuxInfoBase::getDynamicAuxIDs ( ) const
overridevirtualinherited

Get the types(names) of variables created dynamically.

Implements SG::IAuxStoreIO.

Definition at line 636 of file AuxInfoBase.cxx.

636 {
637
638 // Guard against multi-threaded execution:
639 guard_t guard( m_mutex );
640
641 // All the variables handled by the internal store are dynamic
642 // if such a store exists:
643 if( m_storeIO ) {
644 // I mean, all the variables. Not just the ones reported as dynamic
645 // by the internal object. Because the internal object may be something
646 // that was put into this one in order to achieve data slimming.
647 return m_store->getAuxIDs();
648 }
649
650 // In case we don't use an internal store, there are no dynamic
651 // variables:
652 static const auxid_set_t dummy (0);
653 return dummy;
654 }
SG::IAuxStoreIO * m_storeIO
The IO interface to the internal auxiliary store.

◆ getIOData()

const void * xAOD::AuxInfoBase::getIOData ( auxid_t auxid) const
overridevirtualinherited

Get a pointer to the data being stored for one aux data item.

Implements SG::IAuxStoreIO.

Definition at line 585 of file AuxInfoBase.cxx.

585 {
586
587 // Guard against multi-threaded execution:
588 guard_t guard( m_mutex );
589
590 if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
591 if( m_storeIO ) {
592 return m_storeIO->getIOData( auxid );
593 } else {
594 std::cout << "ERROR xAOD::AuxInfoBase::getIOData "
595 << "Unknown variable ("
597 << ") requested" << std::endl;
598 return nullptr;
599 }
600 }
601
602 // Update the statistics for this variable. The dynamic store registers
603 // its own variable accesses.
605
606 if( m_vecs[ auxid ]->isLinked() )
607 return m_vecs[ auxid ]->toVector();
608 else
609 return m_vecs[ auxid ]->toPtr();
610 }
std::string m_name
Name of the container in memory. Set externally.
ReadStats & stats()
Access the object belonging to the current thread.
Definition IOStats.cxx:17
static IOStats & instance()
Singleton object accessor.
Definition IOStats.cxx:11
void readBranch(const std::string &prefix, SG::auxid_t auxid)
Function incrementing the read counter on a specific branch.

◆ getIOType()

const std::type_info * xAOD::AuxInfoBase::getIOType ( auxid_t auxid) const
overridevirtualinherited

Return the type of the data to be stored for one aux data item.

Implements SG::IAuxStoreIO.

Definition at line 612 of file AuxInfoBase.cxx.

612 {
613
614 // Guard against multi-threaded execution:
615 guard_t guard( m_mutex );
616
617 if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
618 if( m_storeIO ) {
619 return m_storeIO->getIOType( auxid );
620 } else {
621 std::cout << "ERROR xAOD::AuxInfoBase::getIOType "
622 << "Unknown variable ("
624 << ") requested" << std::endl;
625 return nullptr;
626 }
627 }
628
629 if( m_vecs[ auxid ]->isLinked() )
630 return SG::AuxTypeRegistry::instance().getType( auxid );
631 else
633 }
const std::type_info * getType(SG::auxid_t auxid) const
Return the type of an aux data item.
const std::type_info * getVecType(SG::auxid_t auxid) const
Return the type of the STL vector used to hold an aux data item.

◆ getSelectedAuxIDs()

AuxInfoBase::auxid_set_t xAOD::AuxInfoBase::getSelectedAuxIDs ( ) const
overridevirtualinherited

Get the IDs of the selected dynamic Aux variables (for writing)

Reimplemented from SG::IAuxStoreIO.

Definition at line 657 of file AuxInfoBase.cxx.

657 {
658
659 // Guard against multi-threaded execution:
660 guard_t guard( m_mutex );
661
662 // All the variables handled by the internal store are dynamic
663 // if such a store exists:
664 if( m_storeIO ) {
665 // I mean, all the variables. Not just the ones reported as dynamic
666 // by the internal object. Because the internal object may be something
667 // that was put into this one in order to achieve data slimming.
668 return m_store->getAuxIDs();
669 }
670
671 // In case we don't use an internal store, there are no dynamic
672 // variables:
673 return auxid_set_t();
674 }

◆ getStore() [1/2]

const SG::IAuxStore * xAOD::AuxInfoBase::getStore ( ) const
overridevirtualinherited

Get the currently used internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 146 of file AuxInfoBase.cxx.

147 {
148 return m_store;
149 }

◆ getStore() [2/2]

SG::IAuxStore * xAOD::AuxInfoBase::getStore ( )
overridevirtualinherited

Get the currently used internal store object.

Implements SG::IAuxStoreHolder.

Definition at line 140 of file AuxInfoBase.cxx.

141 {
142 return m_store;
143 }

◆ getStoreType()

virtual AuxStoreType xAOD::AuxInfoBase::getStoreType ( ) const
inlineoverridevirtualinherited

Return the type of the store object.

Implements SG::IAuxStoreHolder.

Definition at line 75 of file AuxInfoBase.h.

75{ return AST_ObjectStore; }

◆ getVector()

const SG::IAuxTypeVector * xAOD::AuxInfoBase::getVector ( SG::auxid_t auxid) const
finaloverridevirtualinherited

Return vector interface for one aux data item.

Implements SG::IConstAuxStore.

Definition at line 204 of file AuxInfoBase.cxx.

204 {
205
206 // Guard against multi-threaded execution:
207 guard_t guard( m_mutex );
208
209 if( ( auxid >= m_vecs.size() ) || ( ! m_vecs[ auxid ] ) ) {
210 if( m_store ) {
211 const SG::IAuxTypeVector* result = m_store->getVector( auxid );
212 if( result ) {
213 auxid_set_t& auxids_nc ATLAS_THREAD_SAFE =
214 const_cast<auxid_set_t&> (m_auxids);
215 auxids_nc.insert( auxid );
216 const SG::AuxTypeRegistry& r = SG::AuxTypeRegistry::instance();
217 auxid_t linked_id = r.linkedVariable( auxid );
218 if (linked_id != SG::null_auxid) {
219 auxids_nc.insert( linked_id );
220 }
221 }
222 return result;
223 } else {
224 std::cout << "ERROR xAOD::AuxInfoBase::getData "
225 << "Unknown variable ("
227 << ") requested" << std::endl;
228 return nullptr;
229 }
230 }
231
232 // Update the statistics for this variable. The dynamic store registers
233 // its own variable accesses.
235
236 return m_vecs[ auxid ];
237 }
#define ATLAS_THREAD_SAFE

◆ getWritableAuxIDs()

const AuxInfoBase::auxid_set_t & xAOD::AuxInfoBase::getWritableAuxIDs ( ) const
overridevirtualinherited

Return a set of writable data identifiers.

Implements SG::IAuxStore.

Definition at line 460 of file AuxInfoBase.cxx.

460 {
461
462 // Return the full list of known IDs. The constness of this object's
463 // members comes from the object being const or not.
464 return m_auxids;
465 }

◆ insertMove() [1/2]

virtual bool SG::IAuxStore::insertMove ( size_t pos,
IAuxStore & other,
const SG::auxid_set_t & ignore = SG::auxid_set_t() )
pure virtualinherited

Move all elements from other to this store.

Parameters
posThe starting index of the insertion.
otherStore from which to do the move.
ignoreSet of variables that should not be added to the store.

Let len be the size of other. The store will be increased in size by len elements, with the elements at pos being copied to pos+len. Then, for each auxiliary variable, the entire contents of that variable for other will be moved to this store at index pos. This will be done via move semantics if possible; otherwise, it will be done with a copy. Variables present in this store but not in other will have the corresponding elements default-initialized. Variables in other but not in this store will be added unless they are in ignore.

Returns true if it is known that none of the vectors' memory moved, false otherwise.

Implemented in SG::AuxStoreInternal.

◆ insertMove() [2/2]

bool xAOD::AuxInfoBase::insertMove ( size_t pos,
IAuxStore & other,
const SG::auxid_set_t & ignore )
overridevirtualinherited

Insert contents of another store via move.

Definition at line 549 of file AuxInfoBase.cxx.

550 {
551
552 // Guard against multi-threaded execution:
553 guard_t guard( m_mutex );
554
555 // Check if the container is locked:
556 if( m_locked ) {
557 throw SG::ExcStoreLocked( "insertMove" );
558 }
559
560 // We are just not allowed to do this...
561 throw std::runtime_error( "Calling insertMove on a non-vector" );
562
563 return false;
564 }

◆ isDecoration()

bool xAOD::AuxInfoBase::isDecoration ( auxid_t auxid) const
overridevirtualinherited

Test if a variable is a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventAuxInfo_v1, xAOD::EventAuxInfo_v2, and xAOD::EventAuxInfo_v3.

Definition at line 239 of file AuxInfoBase.cxx.

240 {
241 guard_t guard( m_mutex );
242 if (m_store) {
243 return m_store->isDecoration (auxid);
244 }
245 return false;
246 }

◆ linkedVector() [1/2]

const SG::IAuxTypeVector * xAOD::AuxInfoBase::linkedVector ( SG::auxid_t auxid) const
overridevirtualinherited

Return interface for a linked variable.

Reimplemented from SG::IConstAuxStore.

Definition at line 359 of file AuxInfoBase.cxx.

360 {
361 const SG::AuxTypeRegistry& r = SG::AuxTypeRegistry::instance();
362 auxid_t linked_id = r.linkedVariable( auxid );
363 if (linked_id != SG::null_auxid) {
364 guard_t guard( m_mutex );
365 if (linked_id < m_vecs.size() && m_vecs[ linked_id ]) {
366 return m_vecs[ linked_id ];
367 }
368 if (m_store) {
369 return CxxUtils::as_const_ptr(m_store)->linkedVector( auxid );
370 }
371 }
372 return nullptr;
373 }
const T * as_const_ptr(const T *p)
Helper for getting a const version of a pointer.

◆ linkedVector() [2/2]

SG::IAuxTypeVector * xAOD::AuxInfoBase::linkedVector ( SG::auxid_t auxid)
overridevirtualinherited

Return interface for a linked variable.

Reimplemented from SG::IAuxStore.

Definition at line 376 of file AuxInfoBase.cxx.

377 {
378 const SG::AuxTypeRegistry& r = SG::AuxTypeRegistry::instance();
379 auxid_t linked_id = r.linkedVariable( auxid );
380 if (linked_id != SG::null_auxid) {
381 guard_t guard( m_mutex );
382 if (linked_id < m_vecs.size() && m_vecs[ linked_id ]) {
383 return m_vecs[ linked_id ];
384 }
385 if (m_store) {
386 return m_store->linkedVector( auxid );
387 }
388 }
389 return nullptr;
390 }

◆ lock()

void xAOD::AuxInfoBase::lock ( )
overridevirtualinherited

Lock the container.

Implements SG::IConstAuxStore.

Definition at line 308 of file AuxInfoBase.cxx.

308 {
309
310 // Guard against multi-threaded execution:
311 guard_t guard( m_mutex );
312
313 // Lock the container and the dynamic store:
314 m_locked = true;
315 if( m_store ) {
316 m_store->lock();
317 }
318
319 return;
320 }

◆ lockDecoration()

void xAOD::AuxInfoBase::lockDecoration ( SG::auxid_t auxid)
overridevirtualinherited

Lock a decoration.

Implements SG::IConstAuxStore.

Reimplemented in xAOD::EventAuxInfo_v1, xAOD::EventAuxInfo_v2, and xAOD::EventAuxInfo_v3.

Definition at line 351 of file AuxInfoBase.cxx.

352 {
353 guard_t guard (m_mutex);
354 if (m_store) {
355 m_store->lockDecoration (auxid);
356 }
357 }

◆ name()

const char * xAOD::AuxInfoBase::name ( ) const
inherited

Get the name of the container instance.

Definition at line 679 of file AuxInfoBase.cxx.

679 {
680
681 return m_name.c_str();
682 }

◆ regAuxVar()

template<typename T>
void xAOD::AuxInfoBase::regAuxVar ( auxid_t auxid,
const std::string & name,
T & info )
inherited

Register one of the persistent variables internally.

◆ reserve()

void xAOD::AuxInfoBase::reserve ( size_t size)
overridevirtualinherited

Reserve a given size for the arrays.

Implements SG::IAuxStore.

Definition at line 501 of file AuxInfoBase.cxx.

501 {
502
503 // Guard against multi-threaded execution:
504 guard_t guard( m_mutex );
505
506 // Check if the container is locked:
507 if( m_locked ) {
508 throw SG::ExcStoreLocked( "reserve" );
509 }
510
511 // Do a test already here:
512 if( size != 1 ) {
513 throw std::runtime_error( "Calling reserve with != 1 on a "
514 "non-vector" );
515 }
516
517 // Do the operation on the static variables:
518 for (SG::IAuxTypeVector* v : m_vecs) {
519 if(v && !v->isLinked()) {
520 v->reserve( size );
521 }
522 }
523
524 // Do the operation on the dynamic variables:
525 if( m_store ) {
526 m_store->reserve( size );
527 }
528
529 return;
530 }

◆ resize()

bool xAOD::AuxInfoBase::resize ( size_t size)
overridevirtualinherited

Resize the arrays to a given size.

Implements SG::IAuxStore.

Definition at line 467 of file AuxInfoBase.cxx.

467 {
468
469 // Guard against multi-threaded execution:
470 guard_t guard( m_mutex );
471
472 // Check if the container is locked:
473 if( m_locked ) {
474 throw SG::ExcStoreLocked( "resize" );
475 }
476
477 // Do a test already here:
478 if( size != 1 ) {
479 throw std::runtime_error( "Calling resize with != 1 on a "
480 "non-vector" );
481 }
482
483 // Do the operation on the static variables:
484 bool nomoves = true;
485 for (SG::IAuxTypeVector* v : m_vecs) {
486 if(v && !v->isLinked()) {
487 if (!v->resize( size ))
488 nomoves = false;
489 }
490 }
491
492 // Do the operation on the dynamic variables:
493 if( m_store ) {
494 if (!m_store->resize( size ))
495 nomoves = false;
496 }
497
498 return nomoves;
499 }

◆ setName()

void xAOD::AuxInfoBase::setName ( const char * name)
inherited

Set the name of the container instance.

Definition at line 684 of file AuxInfoBase.cxx.

684 {
685
686 m_name = name;
687 return;
688 }
const char * name() const
Get the name of the container instance.

◆ setOption()

bool xAOD::AuxInfoBase::setOption ( auxid_t id,
const SG::AuxDataOption & option )
overridevirtualinherited

Make an option setting on an aux variable.

Reimplemented from SG::IAuxStore.

Definition at line 567 of file AuxInfoBase.cxx.

567 {
568
569 if (id < m_vecs.size() && m_vecs[id] != nullptr)
570 return m_vecs[id]->setOption( option );
571 if (m_store)
572 return m_store->setOption( id, option );
573 return false;
574 }

◆ setStore()

void xAOD::AuxInfoBase::setStore ( SG::IAuxStore * store)
overridevirtualinherited

Set a different internal store object.

This function is used by the I/O infrastructure to possibly put a store object into this one, which can interact with dynamic variables directly.

Note that the object takes ownership of the received store.

Parameters
storeThe store that should be used for dynamic variable handling inside the object from now on

Implements SG::IAuxStoreHolder.

Definition at line 160 of file AuxInfoBase.cxx.

160 {
161
162 // Guard against multi-threaded execution:
163 guard_t guard( m_mutex );
164
165 // Check that no funny business is going on:
166 if( m_store == store ) return;
167
168 // Clean up the current store object:
169 if( m_store && m_ownsStore ) {
170 m_auxids -= m_store->getAuxIDs();
171 delete m_store;
172 }
173 m_store = nullptr;
174 m_storeIO = nullptr;
175
176 // Take posession of the new object:
177 m_store = store;
178 m_storeIO = dynamic_cast< SG::IAuxStoreIO* >( m_store );
179 m_ownsStore = true;
180 if( m_store ) {
181 m_auxids.insert (m_store->getAuxIDs());
182 }
183
184 return;
185 }
bool m_ownsStore
Flag deciding if the object owns the dynamic store or not.
TestStore store
Definition TestStore.cxx:23

◆ shift()

void xAOD::AuxInfoBase::shift ( size_t pos,
ptrdiff_t offs )
overridevirtualinherited

Shift the contents of the stored arrays.

Implements SG::IAuxStore.

Definition at line 532 of file AuxInfoBase.cxx.

532 {
533
534 // Guard against multi-threaded execution:
535 guard_t guard( m_mutex );
536
537 // Check if the container is locked:
538 if( m_locked ) {
539 throw SG::ExcStoreLocked( "shift" );
540 }
541
542 // We are just not allowed to do this...
543 throw std::runtime_error( "Calling shift on a non-vector" );
544
545 return;
546 }

◆ size()

size_t xAOD::AuxInfoBase::size ( ) const
overridevirtualinherited

Get the size of the container.

Implements SG::IConstAuxStore.

Definition at line 393 of file AuxInfoBase.cxx.

393 {
394
395 // Should really always be 1, but do the general thing anyway...
396
397 // Guard against multi-threaded execution:
398 guard_t guard( m_mutex );
399
400 // Try to find a variable:
401 for (SG::auxid_t i : m_auxids) {
402 if( ( i < m_vecs.size() ) && m_vecs[ i ] && !m_vecs[ i ]->isLinked()) {
403 size_t sz = m_vecs[ i ]->size();
404 if( sz > 0 ) {
405 return sz;
406 }
407 }
408 }
409
410 // If we didn't find any statically defined variables, then we just
411 // need to claim 1. Because pool::AuxStoreAPR at the moment always
412 // returns 0 for the size.
413 return 1;
414 }
static Double_t sz
size_t auxid_t
Identifier for a particular aux data item.
Definition AuxTypes.h:27

Member Data Documentation

◆ energyT

float xAOD::EnergySumRoIAuxInfo_v1::energyT
private

Definition at line 49 of file EnergySumRoIAuxInfo_v1.h.

◆ energyX

float xAOD::EnergySumRoIAuxInfo_v1::energyX
private

Definition at line 47 of file EnergySumRoIAuxInfo_v1.h.

◆ energyY

float xAOD::EnergySumRoIAuxInfo_v1::energyY
private

Definition at line 48 of file EnergySumRoIAuxInfo_v1.h.

◆ m_auxids

auxid_set_t xAOD::AuxInfoBase::m_auxids
privateinherited

Internal list of all available variables.

Definition at line 193 of file AuxInfoBase.h.

◆ m_locked

bool xAOD::AuxInfoBase::m_locked
privateinherited

Has the container been locked?

Definition at line 204 of file AuxInfoBase.h.

◆ m_mutex

mutex_t xAOD::AuxInfoBase::m_mutex
mutableprivateinherited

Definition at line 209 of file AuxInfoBase.h.

◆ m_name

std::string xAOD::AuxInfoBase::m_name
privateinherited

Name of the container in memory. Set externally.

Definition at line 212 of file AuxInfoBase.h.

◆ m_ownsStore

bool xAOD::AuxInfoBase::m_ownsStore
privateinherited

Flag deciding if the object owns the dynamic store or not.

Definition at line 202 of file AuxInfoBase.h.

◆ m_store

SG::IAuxStore* xAOD::AuxInfoBase::m_store
privateinherited

Internal dynamic auxiliary store object.

Definition at line 198 of file AuxInfoBase.h.

◆ m_storeIO

SG::IAuxStoreIO* xAOD::AuxInfoBase::m_storeIO
privateinherited

The IO interface to the internal auxiliary store.

Definition at line 200 of file AuxInfoBase.h.

◆ m_vecs

std::vector< SG::IAuxTypeVector* > xAOD::AuxInfoBase::m_vecs
privateinherited

Internal list of all managed variables.

Definition at line 195 of file AuxInfoBase.h.

◆ roiWord0

uint32_t xAOD::EnergySumRoIAuxInfo_v1::roiWord0
private

Definition at line 41 of file EnergySumRoIAuxInfo_v1.h.

◆ roiWord1

uint32_t xAOD::EnergySumRoIAuxInfo_v1::roiWord1
private

Definition at line 42 of file EnergySumRoIAuxInfo_v1.h.

◆ roiWord2

uint32_t xAOD::EnergySumRoIAuxInfo_v1::roiWord2
private

Definition at line 43 of file EnergySumRoIAuxInfo_v1.h.

◆ supportsThinning

bool SG::IAuxStore::supportsThinning = true
staticconstexprinherited

Mark that this type supports thinning operations.

See AthContainers/supportsThinning.h and AthenaPoolCnvSvc/T_AthenaPoolCnv.h. Helps guide which pool converter template will be used. If false, the default pool converter will be used rather than the aux store-specific one. Ordinary xAOD type should not touch this, but may be overridden in a derived class to handle certain special cases.

Definition at line 199 of file IAuxStore.h.

◆ thrNames

std::vector< std::string > xAOD::EnergySumRoIAuxInfo_v1::thrNames
private

Definition at line 45 of file EnergySumRoIAuxInfo_v1.h.


The documentation for this class was generated from the following files: