ATLAS Offline Software
Loading...
Searching...
No Matches
RNTupleAuxDynStore.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
9
10#include "RNTupleAuxDynStore.h"
11#include "RNTupleAuxDynReader.h"
12
13#include "ROOT/RNTupleReader.hxx"
14
15using namespace RootAuxDynIO;
16
18 long long entry, bool standalone,
19 std::recursive_mutex* iomtx )
20 : RootAuxDynStore( aux_reader, entry, standalone, iomtx ),
21 m_reader( aux_reader )
22{
23}
24
25
27{
28 try {
29 auto& fieldInfo = m_reader.getFieldInfo(auxid, *this);
30 if( fieldInfo.status == RNTupleAuxDynReader::FieldInfo::NotFound ) return false;
31
32 // Make a 1-element vector in the underlying AuxStore for the given auxid
34 if( fieldInfo.isPackedContainer ) {
35 setOption (auxid, SG::AuxDataOption ("nbits", 32));
36 }
37
38 // get memory location where to write data from the branch entry
39 // const_cast because Field::CaptureValue() requires void*
40 [[maybe_unused]] void* data ATLAS_THREAD_SAFE = const_cast<void*>(SG::AuxStoreInternal::getIOData(auxid));
41
42 // if have mutex, lock to prevent potential concurrent I/O from elsewhere
43 auto io_lock = m_iomutex? std::unique_lock<std::recursive_mutex>(*m_iomutex)
44 : std::unique_lock<std::recursive_mutex>();
45
46 fieldInfo.view->BindRawPtr(data);
47 (*fieldInfo.view)(m_entry);
48
49 int nbytes = 1; // MN: TODO how to get this?
50 if( nbytes <= 0 ) {
51 throw std::string("Error reading field ") + fieldInfo.fieldName;
52 }
53 // read OK
54 m_reader.addBytes(nbytes);
55 }
56 catch(const std::string& e_str) {
57 ATHCONTAINERS_ERROR("RNTupleAuxDynStore::getData", e_str);
58 return false;
59 }
60
62 SG::auxid_t linked_auxid = r.linkedVariable (auxid);
63 if (linked_auxid != SG::null_auxid) {
64 return readData (linked_auxid);
65 }
66
67 return true;
68}
Hold information about an option setting request.
Handle mappings between names and auxid_t.
Exceptions that can be thrown from AthContainers.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
#define ATLAS_THREAD_SAFE
RNTupleAuxDynStore(RootAuxDynIO::RNTupleAuxDynReader &aux_reader, long long entry, bool standalone, std::recursive_mutex *iomtx=nullptr)
virtual bool readData(SG::auxid_t auxid) override final
read data from ROOT and store it in m_vecs. Returns False on error
RootAuxDynIO::RNTupleAuxDynReader & m_reader
RootAuxDynStore(RootAuxDynReader &reader, long long entry, bool standalone, std::recursive_mutex *iomtx=nullptr)
std::recursive_mutex * m_iomutex
Optional mutex used to serialize I/O with RootStorageSvc (not owned)
Hold information about an option setting request.
virtual void * getDataInternal(SG::auxid_t auxid, size_t size, size_t capacity, bool no_lock_check)
Return the data vector for one aux data item.
virtual bool setOption(auxid_t id, const AuxDataOption &option) override
Set an option for an auxiliary data variable.
bool standalone() const
Return the standalone flag.
virtual const void * getIOData(SG::auxid_t auxid) const override
Return a pointer to the data to be stored for one aux data item.
Handle mappings between names and auxid_t.
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Helper for emitting error messages.
#define ATHCONTAINERS_ERROR(ctx, msg)
Definition error.h:54
int r
Definition globals.cxx:22
Specialization of RootAuxDynStore for reading Aux Dynamic attributes from RNTuple.
static const auxid_t null_auxid
To signal no aux data item.
Definition AuxTypes.h:30
size_t auxid_t
Identifier for a particular aux data item.
Definition AuxTypes.h:27