ATLAS Offline Software
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 
15 using 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
33  SG::AuxStoreInternal::getDataInternal(auxid, 1, 1, true);
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 }
beamspotman.r
def r
Definition: beamspotman.py:674
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
RootAuxDynIO::RNTupleAuxDynReader
Definition: RNTupleAuxDynReader.h:31
RNTupleAuxDynStore::readData
virtual bool readData(SG::auxid_t auxid) override final
read data from ROOT and store it in m_vecs. Returns False on error
Definition: RNTupleAuxDynStore.cxx:26
RNTupleAuxDynStore::RNTupleAuxDynStore
RNTupleAuxDynStore(RootAuxDynIO::RNTupleAuxDynReader &aux_reader, long long entry, bool standalone, std::recursive_mutex *iomtx=nullptr)
Definition: RNTupleAuxDynStore.cxx:17
L1CaloPhase1Monitoring.standalone
standalone
Definition: L1CaloPhase1Monitoring.py:139
SG::AuxTypeRegistry::instance
static AuxTypeRegistry & instance()
Return the singleton registry instance.
Definition: AuxTypeRegistry.cxx:639
RNTupleAuxDynStore::m_reader
RootAuxDynIO::RNTupleAuxDynReader & m_reader
Definition: RNTupleAuxDynStore.h:31
ATHCONTAINERS_ERROR
#define ATHCONTAINERS_ERROR(ctx, msg)
Definition: error.h:54
exceptions.h
Exceptions that can be thrown from AthContainers.
RootAuxDynStore
Definition: RootAuxDynStore.h:17
AuxDataOption.h
Hold information about an option setting request.
SG::AuxTypeRegistry
Handle mappings between names and auxid_t.
Definition: AuxTypeRegistry.h:61
RootAuxDynReader::addBytes
void addBytes(size_t bytes)
Definition: RootAuxDynReader.h:40
SG::auxid_t
size_t auxid_t
Identifier for a particular aux data item.
Definition: AuxTypes.h:27
RootAuxDynStore::m_entry
long long m_entry
Definition: RootAuxDynStore.h:63
lumiFormat.e_str
e_str
Definition: lumiFormat.py:81
error.h
Helper for emitting error messages.
SG::AuxStoreInternal::setOption
virtual bool setOption(auxid_t id, const AuxDataOption &option) override
Set an option for an auxiliary data variable.
Definition: AuxStoreInternal.cxx:647
SG::AuxStoreInternal::getDataInternal
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.
Definition: AuxStoreInternal.cxx:746
RootAuxDynIO::RNTupleAuxDynReader::getFieldInfo
FieldInfo & getFieldInfo(const SG::auxid_t &auxid, const SG::AuxStoreInternal &store)
get field informatino for auxid
Definition: RNTupleAuxDynReader.cxx:233
SG::AuxStoreInternal::getIOData
virtual const void * getIOData(SG::auxid_t auxid) const override
Return a pointer to the data to be stored for one aux data item.
Definition: AuxStoreInternal.cxx:526
SG::AuxDataOption
Hold information about an option setting request.
Definition: AuxDataOption.h:37
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
RNTupleAuxDynReader.h
RNTupleAuxDynStore.h
RootAuxDynIO
Specialization of RootAuxDynStore for reading Aux Dynamic attributes from RNTuple.
Definition: RNTupleContainer.h:28
AuxTypeRegistry.h
Handle mappings between names and auxid_t.
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition: checker_macros.h:211
RootAuxDynStore::m_iomutex
std::recursive_mutex * m_iomutex
Optional mutex used to serialize I/O with RootStorageSvc (not owned)
Definition: RootAuxDynStore.h:71