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

349 {
350 void* rawDataPtr = getData();
351 if( !rawDataPtr && index > 0 ) return StatusCode::FAILURE;
352
353 try {
354 TempInterface dstiface( index + 1, m_acc->auxid(), rawDataPtr );
355 m_factory->copy( m_acc->auxid(), dstiface, index, *element.container(), element.index(), 1 );
356 } catch( ... ) {
357 msg << MSG::ERROR << "Failed to copy data for " << m_fieldName << endmsg;
358 return StatusCode::FAILURE;
359 }
360 return StatusCode::SUCCESS;
361 }
#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 341 of file RNtupleFieldHelpers.cxx.

341 {
342 if( m_ops.resize ) {
343 m_ops.resize( size );
344 return StatusCode::SUCCESS;
345 }
346 return StatusCode::FAILURE;
347 }
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.reset( new 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
318 m_field = makeField( model, m_fieldName, *type_info, m_dataPtr, m_ops, msg );
319 } else {
320 msg << MSG::ERROR << "BranchConfig not properly configured for " << outputData.auxName << endmsg;
321 return StatusCode::FAILURE;
322 }
323
324 if( !m_field ) return StatusCode::FAILURE;
325
326 if( !m_ops.resize || !m_ops.getData ) {
327 msg << MSG::ERROR << "Container field " << m_fieldName << " must be a vector type" << endmsg;
328 return StatusCode::FAILURE;
329 }
330 return StatusCode::SUCCESS;
331 }
ConstAuxElement::TypelessConstAccessor TypelessConstAccessor
Definition AuxElement.h:567

◆ setup() [2/2]

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

Implements CP::TreeBranchHelpers::IComponentProcessor.

Definition at line 333 of file RNtupleFieldHelpers.cxx.

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

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: