 |
Belle II Software
release-05-02-19
|
1 #include <framework/pybasf2/PyStoreArray.h>
3 #include <framework/logging/Logger.h>
4 #include <framework/datastore/DataStore.h>
5 #include <framework/datastore/StoreAccessorBase.h>
7 #include "TClonesArray.h"
15 T* replaceNullPtr(T* value, T* fallback)
17 return value ? value : fallback;
29 for (
const auto& n : list(durability))
50 const std::string& name,
52 m_storeAccessor(name, durability, objClass, true)
66 B2ERROR(
"Cannot register PyStoreArray '" << name <<
"' with unknown TClass. Please supply one to the PyStoreArray constructor.");
88 std::string
const& namedRelation)
const
99 std::string
const& namedRelation)
const
109 std::string
const& namedRelation)
const
119 const std::string& namedRelation)
const
129 const std::string& namedRelation)
const
132 this->m_storeAccessor,
140 return objClass and objClass != TObject::Class();
177 B2ERROR(
"Cannot create an object in invalid PyStoreArray.");
198 B2ERROR(
"Cannot create unregistered PyStoreArray.");
203 if (
isValid() and not replace)
return true;
206 B2ERROR(
"Cannot create PyStoreArray with unknown TClass.");
bool registerRelation(const StoreAccessorBase &fromArray, const StoreAccessorBase &toArray, EDurability durability, EStoreFlags storeFlags, const std::string &namedRelation)
Register a relation in the DataStore map.
void ensureCreated()
Ensure that contained TClonesArray has been created on the DataStore.
bool registerRelationTo(const PyStoreArray &toArray, DataStore::EDurability durability=DataStore::EDurability::c_Event, DataStore::EStoreFlags storeFlags=DataStore::EStoreFlags::c_WriteOut, std::string const &namedRelation="") const
Register a relation to the given PyStoreArray.
TClonesArray * getPtr()
Raw access to the underlying TClonesArray.
std::vector< std::string > getListOfArrays(const TClass *arrayClass, EDurability durability) const
Returns a list of names of arrays which are of type (or inherit from) arrayClass.
TClass * getClass() const
The underlying object's type.
bool requireRelationTo(const PyStoreArray &toArray, DataStore::EDurability durability=DataStore::c_Event, std::string const &namedRelation="") const
Produce error if no relation from this array to 'toArray' has been registered.
void ensureAttached() const
Ensure that contained TClonesArray has been attached to a memory location on the DataStore.
static DataStore & Instance()
Instance of singleton Store.
std::string readableName() const
Convert this acessor into a readable string (for messages).
StoreEntry * m_storeEntry
Pointer to the DataStore entry - serves as an internal cache omitting repeated look up from the DataS...
EStoreFlags
Flags describing behaviours of objects etc.
bool hasValidClass() const
Check whether a TClass of the objects in this PyStoreArray could be determined.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
const std::string & getName() const
Return name under which the object is saved in the DataStore.
static std::vector< std::string > list(DataStore::EDurability durability=DataStore::EDurability::c_Event)
Return list of available arrays for given durability.
bool hasRelation(const StoreAccessorBase &fromArray, const StoreAccessorBase &toArray, EDurability durability, const std::string &namedRelation)
Check for the existence of a relation in the DataStore map.
bool registerInDataStore(DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut)
Register the object/array in the DataStore.
bool isValid() const
Check whether the array was registered and created.
bool hasRelationFrom(const PyStoreArray &fromArray, DataStore::EDurability durability=DataStore::c_Event, const std::string &namedRelation="") const
Check for the existence of a relation from the provided toArray (to this Pystorearray)
PyStoreArray(const std::string &name, DataStore::EDurability durability=DataStore::EDurability::c_Event)
constructor.
int getEntries() const
returns number of entries for current event.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
bool hasRelationTo(const PyStoreArray &toArray, DataStore::EDurability durability=DataStore::c_Event, const std::string &namedRelation="") const
Check for the existence of a relation to the provided toArray (from this Pystorearray)
bool create(bool replace=false)
Create a default object in the data store.
bool requireRelation(const StoreAccessorBase &fromArray, const StoreAccessorBase &toArray, EDurability durability, std::string const &namedRelation)
Produce ERROR message if no relation of given durability exists between fromArray and toArray (in tha...
TObject * appendNew()
Construct a new object of the array's type at the end of the array.
Abstract base class for different kinds of events.
bool optionalRelationTo(const PyStoreArray &toArray, DataStore::EDurability durability=DataStore::c_Event, std::string const &namedRelation="") const
Tell the data store about a relation that we could make use of.
TIter __iter__() const
Allow iteration using for in Python.
void attach() const
Lookup the store entry and cache a pointer to it.
TObject * operator[](int i) const
returns object at index i, or null pointer if out of range (+error)
TClonesArray * getPtrAsArray() const
Return ptr cast to TClonesArray.
a (simplified) python wrapper for StoreArray.
TObject * ptr
The pointer to the returned object, either equal to 'object' or null, depending on wether the object ...
static void printList(DataStore::EDurability durability=DataStore::EDurability::c_Event)
Print list of available arrays for given durability.
StoreAccessorBase m_storeAccessor
Store accessor to retrieve the object.
bool registerInDataStore(DataStore::EStoreFlags storeFlags)
Register the array in the data store.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
bool create(bool replace=false)
Create constructed TClonesArray in the DataStore.
bool isRequired(const std::string &name="")
Ensure this array has been registered previously.
StoreEntry * getEntry(const StoreAccessorBase &accessor)
Check whether an entry with the correct type is registered in the DataStore map and return it.
In the store you can park objects that have to be accessed by various modules.
EDurability
Durability types.