ATLAS Offline Software
Loading...
Searching...
No Matches
CP::RNtupleFieldHelpers::ContainerFieldProcessor Class Reference

#include <RNtupleFieldHelpers.h>

Inheritance diagram for CP::RNtupleFieldHelpers::ContainerFieldProcessor:
Collaboration diagram for CP::RNtupleFieldHelpers::ContainerFieldProcessor:

Public Member Functions

 ContainerFieldProcessor ()=default
virtual ~ContainerFieldProcessor ()=default
 ContainerFieldProcessor (const ContainerFieldProcessor &)=delete
ContainerFieldProcessor & operator= (const ContainerFieldProcessor &)=delete
virtual StatusCode setup (ROOT::RNTupleModel &model, const BranchConfig &branchConfig, OutputBranchData &outputData, MsgStream &msg) override
virtual StatusCode setup (TTree &, const BranchConfig &, OutputBranchData &, MsgStream &msg) override
StatusCode resize (size_t size, MsgStream &msg)
StatusCode process (const SG::AuxElement &element, size_t index, MsgStream &msg)
void * getData () const

Public Attributes

std::string m_fieldName
std::unique_ptr< SG::TypelessConstAccessor > m_acc
const SG::IAuxTypeVectorFactory * m_factory = nullptr
std::shared_ptr< void > m_field
void * m_dataPtr = nullptr
FieldOps m_ops

Detailed Description

Definition at line 82 of file RNtupleFieldHelpers.h.

Constructor & Destructor Documentation

◆ ContainerFieldProcessor() [1/2]

CP::RNtupleFieldHelpers::ContainerFieldProcessor::ContainerFieldProcessor ( )
default

◆ ~ContainerFieldProcessor()

virtual CP::RNtupleFieldHelpers::ContainerFieldProcessor::~ContainerFieldProcessor ( )
virtualdefault

◆ ContainerFieldProcessor() [2/2]

CP::RNtupleFieldHelpers::ContainerFieldProcessor::ContainerFieldProcessor ( const ContainerFieldProcessor & )
delete

Member Function Documentation

◆ getData()

void * CP::RNtupleFieldHelpers::ContainerFieldProcessor::getData ( ) const
inline

Definition at line 103 of file RNtupleFieldHelpers.h.

103{ return m_ops.getData ? m_ops.getData() : nullptr; }

◆ operator=()

ContainerFieldProcessor & CP::RNtupleFieldHelpers::ContainerFieldProcessor::operator= ( const ContainerFieldProcessor & )
delete

◆ process()

StatusCode CP::RNtupleFieldHelpers::ContainerFieldProcessor::process ( const SG::AuxElement & element,
size_t index,
MsgStream & msg )

Definition at line 354 of file RNtupleFieldHelpers.cxx.

354 {
355 void* rawDataPtr = getData();
356 if( !rawDataPtr ) {
357 msg << MSG::ERROR << "No data available for " << m_fieldName << endmsg;
358 return StatusCode::FAILURE;
359 }
360
361 try {
362 TempInterface dstiface( index + 1, m_acc->auxid(), rawDataPtr );
363 m_factory->copy( m_acc->auxid(), dstiface, index, *element.container(), element.index(), 1 );
364 } catch( ... ) {
365 msg << MSG::ERROR << "Failed to copy data for " << m_fieldName << endmsg;
366 return StatusCode::FAILURE;
367 }
368 return StatusCode::SUCCESS;
369 }
#define endmsg
std::unique_ptr< SG::TypelessConstAccessor > m_acc
MsgStream & msg
Definition testRead.cxx:32

◆ resize()

StatusCode CP::RNtupleFieldHelpers::ContainerFieldProcessor::resize ( size_t size,
MsgStream & msg )

Definition at line 346 of file RNtupleFieldHelpers.cxx.

346 {
347 if( m_ops.resize ) {
348 m_ops.resize( size );
349 return StatusCode::SUCCESS;
350 }
351 return StatusCode::FAILURE;
352 }
size_t size() const
Number of registered mappings.

◆ setup() [1/2]

StatusCode CP::RNtupleFieldHelpers::ContainerFieldProcessor::setup ( ROOT::RNTupleModel & model,
const BranchConfig & branchConfig,
OutputBranchData & outputData,
MsgStream & msg )
overridevirtual

Implements CP::TreeBranchHelpers::IComponentProcessor.

Definition at line 307 of file RNtupleFieldHelpers.cxx.

310 {
311 m_fieldName = outputData.branchName;
312 m_acc = std::make_unique<SG::TypelessConstAccessor>( *branchConfig.auxType, outputData.auxName );
313
314 if( branchConfig.auxFactory && branchConfig.auxVecType ) {
315 m_factory = branchConfig.auxFactory;
316 const std::type_info* type_info = branchConfig.auxVecType;
317 if( *type_info == typeid(std::vector<bool>) ) {
318 // std::vector<bool> provides no contiguous storage to copy into
319 msg << MSG::ERROR << "std::vector<bool> is not supported for container field " << m_fieldName << endmsg;
320 return StatusCode::FAILURE;
321 }
322
323 m_field = makeField( model, m_fieldName, *type_info, m_dataPtr, m_ops, msg );
324 } else {
325 msg << MSG::ERROR << "BranchConfig not properly configured for " << outputData.auxName << endmsg;
326 return StatusCode::FAILURE;
327 }
328
329 if( !m_field ) return StatusCode::FAILURE;
330
331 if( !m_ops.resize || !m_ops.getData ) {
332 msg << MSG::ERROR << "Container field " << m_fieldName << " must be a vector type" << endmsg;
333 return StatusCode::FAILURE;
334 }
335 return StatusCode::SUCCESS;
336 }

◆ setup() [2/2]

StatusCode CP::RNtupleFieldHelpers::ContainerFieldProcessor::setup ( TTree & ,
const BranchConfig & ,
OutputBranchData & ,
MsgStream & msg )
overridevirtual

Implements CP::TreeBranchHelpers::IComponentProcessor.

Definition at line 338 of file RNtupleFieldHelpers.cxx.

341 {
342 msg << MSG::ERROR << "setup(TTree, ...) called, but only setup(ROOT::RNTupleModel, ...) should be implemented for this processor" << endmsg;
343 return StatusCode::FAILURE;
344 }

Member Data Documentation

◆ m_acc

std::unique_ptr< SG::TypelessConstAccessor > CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_acc

Definition at line 107 of file RNtupleFieldHelpers.h.

◆ m_dataPtr

void* CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_dataPtr = nullptr

Definition at line 110 of file RNtupleFieldHelpers.h.

◆ m_factory

const SG::IAuxTypeVectorFactory* CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_factory = nullptr

Definition at line 108 of file RNtupleFieldHelpers.h.

◆ m_field

std::shared_ptr<void> CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_field

Definition at line 109 of file RNtupleFieldHelpers.h.

◆ m_fieldName

std::string CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_fieldName

Definition at line 106 of file RNtupleFieldHelpers.h.

◆ m_ops

FieldOps CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_ops

Definition at line 115 of file RNtupleFieldHelpers.h.


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