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
ContainerFieldProcessoroperator= (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::TypelessConstAccessorm_acc
const SG::IAuxTypeVectorFactorym_factory = nullptr
std::shared_ptr< void > m_field
void * m_dataPtr = nullptr
FieldOps m_ops

Detailed Description

Definition at line 83 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 104 of file RNtupleFieldHelpers.h.

104{ 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 348 of file RNtupleFieldHelpers.cxx.

348 {
349 void* rawDataPtr = getData();
350 if( !rawDataPtr && index > 0 ) return StatusCode::FAILURE;
351
352 try {
353 TempInterface dstiface( index + 1, m_acc->auxid(), rawDataPtr );
354 m_factory->copy( m_acc->auxid(), dstiface, index, *element.container(), element.index(), 1 );
355 } catch( ... ) {
356 msg << MSG::ERROR << "Failed to copy data for " << m_fieldName << endmsg;
357 return StatusCode::FAILURE;
358 }
359 return StatusCode::SUCCESS;
360 }
#define endmsg
std::unique_ptr< SG::TypelessConstAccessor > m_acc
const SG::AuxVectorData * container() const
Return the container holding this element.
size_t index() const
Return the index of this element within its container.
MsgStream & msg
Definition testRead.cxx:32

◆ resize()

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

Definition at line 340 of file RNtupleFieldHelpers.cxx.

340 {
341 if( m_ops.resize ) {
342 m_ops.resize( size );
343 return StatusCode::SUCCESS;
344 }
345 return StatusCode::FAILURE;
346 }

◆ 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 306 of file RNtupleFieldHelpers.cxx.

309 {
310 m_fieldName = outputData.branchName;
311 m_acc.reset( new SG::TypelessConstAccessor( *branchConfig.auxType, outputData.auxName ) );
312
313 if( branchConfig.auxFactory && branchConfig.auxVecType ) {
314 m_factory = branchConfig.auxFactory;
315 const std::type_info* type_info = branchConfig.auxVecType;
316
317 m_field = makeField( model, m_fieldName, *type_info, m_dataPtr, m_ops, msg );
318 } else {
319 msg << MSG::ERROR << "BranchConfig not properly configured for " << outputData.auxName << endmsg;
320 return StatusCode::FAILURE;
321 }
322
323 if( !m_field ) return StatusCode::FAILURE;
324
325 if( !m_ops.resize || !m_ops.getData ) {
326 msg << MSG::ERROR << "Container field " << m_fieldName << " must be a vector type" << endmsg;
327 return StatusCode::FAILURE;
328 }
329 return StatusCode::SUCCESS;
330 }

◆ setup() [2/2]

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

Implements CP::TreeBranchHelpers::IComponentProcessor.

Definition at line 332 of file RNtupleFieldHelpers.cxx.

335 {
336 msg << MSG::ERROR << "setup(TTree, ...) called, but only setup(ROOT::RNTupleModel, ...) should be implemented for this processor" << endmsg;
337 return StatusCode::FAILURE;
338 }

Member Data Documentation

◆ m_acc

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

Definition at line 108 of file RNtupleFieldHelpers.h.

◆ m_dataPtr

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

Definition at line 111 of file RNtupleFieldHelpers.h.

◆ m_factory

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

Definition at line 109 of file RNtupleFieldHelpers.h.

◆ m_field

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

Definition at line 110 of file RNtupleFieldHelpers.h.

◆ m_fieldName

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

Definition at line 107 of file RNtupleFieldHelpers.h.

◆ m_ops

FieldOps CP::RNtupleFieldHelpers::ContainerFieldProcessor::m_ops

Definition at line 116 of file RNtupleFieldHelpers.h.


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