ATLAS Offline Software
Public Types | Public Member Functions | Private Attributes | List of all members
H5Utils::Writer< N, I > Class Template Reference

Writer. More...

#include <Writer.h>

Collaboration diagram for H5Utils::Writer< N, I >:

Public Types

using consumer_type = Consumers< I >
 
using input_type = I
 
template<typename T >
using function_type = typename consumer_type::template function_type< T >
 
using configuration_type = WriterConfiguration< N >
 

Public Member Functions

 Writer (H5::Group &group, const std::string &name, const Consumers< I > &consumers, const std::array< hsize_t, N > &extent=internal::uniform< N >(5), hsize_t batch_size=defaults::batch_size)
 
 Writer (H5::Group &group, const Consumers< I > &consumers, const WriterConfiguration< N > &=WriterConfiguration< N >())
 
 Writer (const Writer &)=delete
 
 Writer (Writer &&)=default
 
Writeroperator= (Writer &)=delete
 
 ~Writer ()
 
template<typename T >
void fill (T)
 
void flush ()
 
size_t index () const
 

Private Attributes

const internal::DSParameters< I, N > m_par
 
hsize_t m_offset
 
hsize_t m_buffer_rows
 
std::vector< internal::data_buffer_tm_buffer
 
std::vector< SharedConsumer< I > > m_consumers
 
H5::DataSet m_ds
 
H5::DataSpace m_file_space
 

Detailed Description

template<size_t N, typename I>
class H5Utils::Writer< N, I >

Writer.

You'll have to specify the H5::Group to write the dataset to, the name of the new dataset, and the extent of the dataset.

To fill, use the fill(...) method.

Definition at line 349 of file Writer.h.

Member Typedef Documentation

◆ configuration_type

template<size_t N, typename I >
using H5Utils::Writer< N, I >::configuration_type = WriterConfiguration<N>

Definition at line 370 of file Writer.h.

◆ consumer_type

template<size_t N, typename I >
using H5Utils::Writer< N, I >::consumer_type = Consumers<I>

Definition at line 366 of file Writer.h.

◆ function_type

template<size_t N, typename I >
template<typename T >
using H5Utils::Writer< N, I >::function_type = typename consumer_type::template function_type<T>

Definition at line 369 of file Writer.h.

◆ input_type

template<size_t N, typename I >
using H5Utils::Writer< N, I >::input_type = I

Definition at line 367 of file Writer.h.

Constructor & Destructor Documentation

◆ Writer() [1/4]

template<size_t N, typename I >
H5Utils::Writer< N, I >::Writer ( H5::Group &  group,
const std::string &  name,
const Consumers< I > &  consumers,
const std::array< hsize_t, N > &  extent = internal::uniform<N>(5),
hsize_t  batch_size = defaults::batch_size 
)

Definition at line 382 of file Writer.h.

385  :
386  Writer<N,I>(
387  group, consumers, WriterConfiguration<N>{
388  name, // name
389  extent, // extent
390  batch_size, // batch_size
391  extent, // chunks
392  defaults::deflate // deflate
393  })
394  {}

◆ Writer() [2/4]

template<size_t N, typename I >
H5Utils::Writer< N, I >::Writer ( H5::Group &  group,
const Consumers< I > &  consumers,
const WriterConfiguration< N > &  cfg = WriterConfiguration<N>() 
)

Definition at line 397 of file Writer.h.

399  :
400  m_par(consumers.getConsumers(), cfg.extent,
401  cfg.batch_size ? *cfg.batch_size : defaults::batch_size),
402  m_offset(0),
403  m_buffer_rows(0),
404  m_consumers(consumers.getConsumers()),
405  m_file_space(H5S_SIMPLE)
406  {
408  if (m_par.batch_size < 1) {
409  throw std::logic_error("batch size must be > 0");
410  }
411  // create space
412  H5::DataSpace space = internal::getUnlimitedSpace(
413  internal::vec(cfg.extent));
414 
415  // create params
416  H5::DSetCreatPropList params = internal::getChunckedDatasetParams(cfg);
417  std::vector<data_buffer_t> default_value = internal::buildDefault(
418  consumers.getConsumers());
419  params.setFillValue(m_par.type, default_value.data());
420 
421  // create ds
423  H5::CompType packed_type = buildWriteType(consumers.getConsumers());
424  m_ds = group.createDataSet(cfg.name, packed_type, space, params);
425  m_file_space = m_ds.getSpace();
426  m_file_space.selectNone();
427  }

◆ Writer() [3/4]

template<size_t N, typename I >
H5Utils::Writer< N, I >::Writer ( const Writer< N, I > &  )
delete

◆ Writer() [4/4]

template<size_t N, typename I >
H5Utils::Writer< N, I >::Writer ( Writer< N, I > &&  )
default

◆ ~Writer()

template<size_t N, typename I >
H5Utils::Writer< N, I >::~Writer

Definition at line 430 of file Writer.h.

430  {
431  using namespace H5Utils;
432  try {
433  flush();
434  } catch (H5::Exception& err) {
435  internal::printDestructorError(err.getDetailMsg());
436  } catch (std::exception& err) {
438  }
439  }

Member Function Documentation

◆ fill()

template<size_t N, typename I >
template<typename T >
void H5Utils::Writer< N, I >::fill ( arg)

Definition at line 443 of file Writer.h.

443  {
444  if (m_buffer_rows == m_par.batch_size) {
445  flush();
446  }
447 
448  // make some assertions to simplify debugging, the errors can be
449  // pretty nasty wtih all these templates.
450  typedef internal::CheckType<N, T, I> checkType;
451  static_assert(
452  checkType::depth >= N,
453  "\n\n"
454  " ** H5 Writer rank is greater than the depth of fill(...) input! **"
455  " \n");
456  static_assert(
457  // Suppress cppcheck warning here. It reports that the condition
458  // below is always true if `N = 0`. In N > 0 cases this
459  // condition might be false though, so I consider this a
460  // spurious warning.
461  //
462  // <3 Dan Guest, 2024-07-16 <3
463  //
464  // cppcheck-suppress incorrectLogicOperator
465  !(checkType::any_type && !checkType::ok_type),
466  "\n\n"
467  " ** H5 Writer input type matches fill(...), but rank is incorrect! **"
468  " \n");
469  static_assert(
470  checkType::any_type,
471  "\n\n"
472  " ** H5 Writer input type doesn't match input for fill(...)! **"
473  " \n");
474 
476  m_consumers, arg, m_par.extent);
477  hsize_t n_el = buf.element_offsets.size();
478  std::vector<hsize_t> elements;
479  for (const auto& el_local: buf.element_offsets) {
480  std::array<hsize_t, N+1> el_global;
481  el_global[0] = m_offset + m_buffer_rows;
482  std::copy(el_local.begin(), el_local.end(), el_global.begin() + 1);
483  elements.insert(elements.end(), el_global.begin(), el_global.end());
484  }
485  if (n_el > 0) {
486  m_file_space.selectElements(H5S_SELECT_APPEND, n_el, elements.data());
487  }
488  m_buffer.insert(m_buffer.end(), buf.buffer.begin(), buf.buffer.end());
489  m_buffer_rows++;
490  }

◆ flush()

template<size_t N, typename I >
void H5Utils::Writer< N, I >::flush

Definition at line 493 of file Writer.h.

493  {
494  const hsize_t buffer_size = m_buffer_rows;
495  if (buffer_size == 0) return;
496 
497  // extend the ds
498  std::vector<hsize_t> total_dims{buffer_size + m_offset};
499  total_dims.insert(total_dims.end(),
500  m_par.extent.begin(),
501  m_par.extent.end());
502  m_ds.extend(total_dims.data());
503  m_file_space.setExtentSimple(total_dims.size(), total_dims.data());
504 
505  // write out
506  hsize_t n_buffer_pts = m_buffer.size() / m_consumers.size();
507  assert(m_file_space.getSelectNpoints() >= 0);
508  assert(static_cast<hsize_t>(m_file_space.getSelectNpoints())
509  == n_buffer_pts);
510  H5::DataSpace mem_space(1, &n_buffer_pts);
511  m_ds.write(m_buffer.data(), m_par.type, mem_space, m_file_space);
512  m_offset += buffer_size;
513  m_buffer.clear();
514  m_buffer_rows = 0;
515  m_file_space.selectNone();
516  }

◆ index()

template<size_t N, typename I >
size_t H5Utils::Writer< N, I >::index

Definition at line 519 of file Writer.h.

519  {
520  return m_buffer_rows + m_offset;
521  }

◆ operator=()

template<size_t N, typename I >
Writer& H5Utils::Writer< N, I >::operator= ( Writer< N, I > &  )
delete

Member Data Documentation

◆ m_buffer

template<size_t N, typename I >
std::vector<internal::data_buffer_t> H5Utils::Writer< N, I >::m_buffer
private

Definition at line 375 of file Writer.h.

◆ m_buffer_rows

template<size_t N, typename I >
hsize_t H5Utils::Writer< N, I >::m_buffer_rows
private

Definition at line 374 of file Writer.h.

◆ m_consumers

template<size_t N, typename I >
std::vector<SharedConsumer<I> > H5Utils::Writer< N, I >::m_consumers
private

Definition at line 376 of file Writer.h.

◆ m_ds

template<size_t N, typename I >
H5::DataSet H5Utils::Writer< N, I >::m_ds
private

Definition at line 377 of file Writer.h.

◆ m_file_space

template<size_t N, typename I >
H5::DataSpace H5Utils::Writer< N, I >::m_file_space
private

Definition at line 378 of file Writer.h.

◆ m_offset

template<size_t N, typename I >
hsize_t H5Utils::Writer< N, I >::m_offset
private

Definition at line 373 of file Writer.h.

◆ m_par

template<size_t N, typename I >
const internal::DSParameters<I,N> H5Utils::Writer< N, I >::m_par
private

Definition at line 372 of file Writer.h.


The documentation for this class was generated from the following file:
H5Utils::internal::getChunckedDatasetParams
H5::DSetCreatPropList getChunckedDatasetParams(const WriterConfiguration< N > &)
egammaParameters::depth
@ depth
pointing depth of the shower as calculated in egammaqgcld
Definition: egammaParamDefs.h:276
H5Utils::internal::getUnlimitedSpace
H5::DataSpace getUnlimitedSpace(const std::vector< hsize_t > &max_length)
Definition: common.cxx:31
H5Utils::internal::DataFlattener
Data flattener class: this is used by the writer to read in the elements one by one and put them in a...
Definition: Writer.h:224
H5Utils::WriterConfiguration
Definition: WriterConfiguration.h:16
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
H5Utils::defaults::batch_size
const hsize_t batch_size
Definition: defaults.h:9
H5Utils::internal::printDestructorError
void printDestructorError(const std::string &msg)
Definition: common.cxx:24
H5Utils::Writer::m_buffer_rows
hsize_t m_buffer_rows
Definition: Writer.h:374
H5Utils::Consumers::getConsumers
const std::vector< SharedConsumer< I > > & getConsumers() const
Definition: Writer.h:178
H5Utils::Writer
Writer.
Definition: Writer.h:349
H5Utils::Writer::m_ds
H5::DataSet m_ds
Definition: Writer.h:377
dqt_zlumi_pandas.err
err
Definition: dqt_zlumi_pandas.py:182
python.DecayParser.buf
buf
print ("=> [%s]"cmd)
Definition: DecayParser.py:27
H5Utils::internal::vec
std::vector< hsize_t > vec(std::array< hsize_t, N > a)
Definition: Writer.h:325
H5Utils::Writer::flush
void flush()
Definition: Writer.h:493
H5Utils::internal::data_buffer_t
data_buffer_t
Definition: H5Traits.h:34
calibdata.exception
exception
Definition: calibdata.py:496
H5Utils::Writer::m_consumers
std::vector< SharedConsumer< I > > m_consumers
Definition: Writer.h:376
H5Utils::Writer::m_buffer
std::vector< internal::data_buffer_t > m_buffer
Definition: Writer.h:375
H5Utils
HDF5 Tuple Writer.
Definition: common.h:20
H5Utils::internal::throwIfExists
void throwIfExists(const std::string &name, const H5::Group &in_group)
Definition: common.cxx:46
create_dcsc_inputs_sqlite.arg
list arg
Definition: create_dcsc_inputs_sqlite.py:48
H5Utils::Writer::m_offset
hsize_t m_offset
Definition: Writer.h:373
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
H5Utils::internal::buildWriteType
H5::CompType buildWriteType(const std::vector< SharedConsumer< I > > &con)
Definition: Writer.h:280
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
CaloLCW_tf.group
group
Definition: CaloLCW_tf.py:28
H5Utils::Writer::m_par
const internal::DSParameters< I, N > m_par
Definition: Writer.h:372
H5Utils::Writer::m_file_space
H5::DataSpace m_file_space
Definition: Writer.h:378
H5Utils::internal::buildDefault
std::vector< data_buffer_t > buildDefault(const std::vector< SharedConsumer< I > > &f)
Definition: Writer.h:315
calibdata.copy
bool copy
Definition: calibdata.py:27
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
H5Utils::defaults::deflate
const int deflate
Definition: defaults.h:10
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
H5Utils::internal::CheckType
Definition: Writer.h:195