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
449  typedef internal::CheckType<N, T, I> checkType;
450  static_assert(
451  checkType::depth >= N,
452  "\n\n"
453  " ** H5 Writer rank is greater than the depth of fill(...) input! **"
454  " \n");
455  static_assert(
456  !(checkType::any_type && !checkType::ok_type),
457  "\n\n"
458  " ** H5 Writer input type matches fill(...), but rank is incorrect! **"
459  " \n");
460  static_assert(
461  checkType::any_type,
462  "\n\n"
463  " ** H5 Writer input type doesn't match input for fill(...)! **"
464  " \n");
465 
467  m_consumers, arg, m_par.extent);
468  hsize_t n_el = buf.element_offsets.size();
469  std::vector<hsize_t> elements;
470  for (const auto& el_local: buf.element_offsets) {
471  std::array<hsize_t, N+1> el_global;
472  el_global[0] = m_offset + m_buffer_rows;
473  std::copy(el_local.begin(), el_local.end(), el_global.begin() + 1);
474  elements.insert(elements.end(), el_global.begin(), el_global.end());
475  }
476  if (n_el > 0) {
477  m_file_space.selectElements(H5S_SELECT_APPEND, n_el, elements.data());
478  }
479  m_buffer.insert(m_buffer.end(), buf.buffer.begin(), buf.buffer.end());
480  m_buffer_rows++;
481  }

◆ flush()

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

Definition at line 484 of file Writer.h.

484  {
485  const hsize_t buffer_size = m_buffer_rows;
486  if (buffer_size == 0) return;
487 
488  // extend the ds
489  std::vector<hsize_t> total_dims{buffer_size + m_offset};
490  total_dims.insert(total_dims.end(),
491  m_par.extent.begin(),
492  m_par.extent.end());
493  m_ds.extend(total_dims.data());
494  m_file_space.setExtentSimple(total_dims.size(), total_dims.data());
495 
496  // write out
497  hsize_t n_buffer_pts = m_buffer.size() / m_consumers.size();
498  assert(m_file_space.getSelectNpoints() >= 0);
499  assert(static_cast<hsize_t>(m_file_space.getSelectNpoints())
500  == n_buffer_pts);
501  H5::DataSpace mem_space(1, &n_buffer_pts);
502  m_ds.write(m_buffer.data(), m_par.type, mem_space, m_file_space);
503  m_offset += buffer_size;
504  m_buffer.clear();
505  m_buffer_rows = 0;
506  m_file_space.selectNone();
507  }

◆ index()

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

Definition at line 510 of file Writer.h.

510  {
511  return m_buffer_rows + m_offset;
512  }

◆ 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::Consumers::getConsumers
std::vector< SharedConsumer< I > > getConsumers() const
Definition: Writer.h:178
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::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:193
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:484
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:192
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