g4tools  5.4.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
tools::wroot::mt_ntuple_column_wise Class Reference
Inheritance diagram for tools::wroot::mt_ntuple_column_wise:
Inheritance graph
[legend]
Collaboration diagram for tools::wroot::mt_ntuple_column_wise:
Collaboration graph
[legend]

Classes

class  basket_add
 

Public Member Functions

virtual bool add_row (imutex &a_mutex, ifile &a_main_file)
 
virtual bool end_fill (imutex &a_mutex, ifile &a_main_file)
 
 mt_ntuple_column_wise (std::ostream &a_out, bool a_byte_swap, uint32 a_compression, seek a_seek_directory, std::vector< branch * > &a_main_branches, const std::string &a_name, const std::string &a_title, bool a_row_mode, uint32 a_nev, bool a_verbose)
 
 mt_ntuple_column_wise (std::ostream &a_out, bool a_byte_swap, uint32 a_compression, seek a_seek_directory, std::vector< branch * > &a_main_branches, const std::vector< uint32 > &a_basket_sizes, const ntuple_booking &a_bkg, bool a_row_mode, uint32 a_nev, bool a_verbose)
 
 mt_ntuple_column_wise (std::ostream &a_out, bool a_byte_swap, uint32 a_compression, seek a_seek_directory, std::vector< branch * > &a_main_branches, const std::vector< uint32 > &a_basket_sizes, const ntuple_booking &a_bkg, bool a_verbose)
 
virtual ~mt_ntuple_column_wise ()
 
- Public Member Functions inherited from tools::wroot::base_pntuple_column_wise
 base_pntuple_column_wise (std::ostream &a_out, bool a_byte_swap, uint32 a_compression, seek a_seek_directory, const std::string &a_name, const std::string &a_title, bool a_verbose)
 
 base_pntuple_column_wise (std::ostream &a_out, bool a_byte_swap, uint32 a_compression, seek a_seek_directory, const std::vector< uint32 > &a_basket_sizes, const ntuple_booking &a_bkg, bool a_verbose)
 
virtual ~base_pntuple_column_wise ()
 
template<class T >
column_ref< T > * create_column_ref (uint32 a_basket_size, const std::string &a_name, const T &a_ref)
 
template<class T >
column< T > * create_column (uint32 a_basket_size, const std::string &a_name, const T &a_def=T())
 
column_string_ref * create_column_string_ref (uint32 a_basket_size, const std::string &a_name, const std::string &a_ref)
 
column_string * create_column_string (uint32 a_basket_size, const std::string &a_name, const std::string &a_def=std::string())
 
column_vector_string_ref * create_column_vector_string_ref (uint32 a_basket_size, const std::string &a_name, const std::vector< std::string > &a_ref, char a_sep)
 
column_vector_string * create_column_vector_string (uint32 a_basket_size, const std::string &a_name, const std::vector< std::string > &a_def, char a_sep)
 
template<class T >
std_vector_column_ref< T > * create_column_vector_ref (uint32 a_basket_size, const std::string &a_name, const std::vector< T > &a_ref)
 
template<class T >
std_vector_column< T > * create_column_vector (uint32 a_basket_size, const std::string &a_name, const std::vector< T > &a_def=std::vector< T >())
 
- Public Member Functions inherited from tools::wroot::base_pntuple
 base_pntuple (std::ostream &a_out, seek a_seek_directory, const std::string &a_name, const std::string &a_title)
 
virtual ~base_pntuple ()
 
const std::vector< icol * > & columns () const
 
template<class T >
column_ref< T > * find_column_ref (const std::string &a_name)
 
template<class T >
column< T > * find_column (const std::string &a_name)
 
column_string_ref * find_column_string_ref (const std::string &a_name)
 
column_string * find_column_string (const std::string &a_name)
 
template<class T >
std_vector_column_ref< T > * find_column_vector_ref (const std::string &a_name)
 
template<class T >
std_vector_column< T > * find_column_vector (const std::string &a_name)
 
column_vector_string_ref * find_column_vector_string_ref (const std::string &a_name)
 
column_vector_string * find_column_vector_string (const std::string &a_name)
 
void print_columns (std::ostream &a_out)
 
- Public Member Functions inherited from tools::wroot::imt_ntuple
virtual ~imt_ntuple ()
 

Protected Member Functions

 mt_ntuple_column_wise (const mt_ntuple_column_wise &a_from)
 
mt_ntuple_column_wiseoperator= (const mt_ntuple_column_wise &a_from)
 
bool end_leaves (imutex &a_mutex) const
 
- Protected Member Functions inherited from tools::wroot::base_pntuple_column_wise
 base_pntuple_column_wise (const base_pntuple_column_wise &a_from)
 
base_pntuple_column_wiseoperator= (const base_pntuple_column_wise &)
 
- Protected Member Functions inherited from tools::wroot::base_pntuple
 base_pntuple (const base_pntuple &a_from)
 
base_pntupleoperator= (const base_pntuple &)
 

Static Protected Member Functions

static bool ready_to_flush_baskets (std::vector< icol * > &a_cols)
 
static bool flush_baskets (imutex &a_mutex, ifile &a_main_file, std::vector< icol * > &a_cols, std::vector< branch * > &a_main_branches)
 
static bool flush_remaining_baskets (size_t &a_number, imutex &a_mutex, ifile &a_main_file, std::vector< icol * > &a_cols, std::vector< branch * > &a_main_branches)
 

Protected Attributes

std::vector< branch * > & m_main_branches
 
bool m_row_mode
 
uint32 m_nev
 
- Protected Attributes inherited from tools::wroot::base_pntuple_column_wise
file m_file
 
std::vector< branch * > m_branches
 
- Protected Attributes inherited from tools::wroot::base_pntuple
std::ostream & m_out
 
seek m_seek_directory
 
std::string m_name
 
std::string m_title
 
std::vector< icol * > m_cols
 

Detailed Description

Definition at line 16 of file mt_ntuple_column_wise.

Constructor & Destructor Documentation

◆ mt_ntuple_column_wise() [1/4]

tools::wroot::mt_ntuple_column_wise::mt_ntuple_column_wise ( std::ostream &  a_out,
bool  a_byte_swap,
uint32  a_compression,
seek  a_seek_directory,
std::vector< branch * > &  a_main_branches,
const std::string &  a_name,
const std::string &  a_title,
bool  a_row_mode,
uint32  a_nev,
bool  a_verbose 
)
inline

Definition at line 117 of file mt_ntuple_column_wise.

122  :parent(a_out,a_byte_swap,a_compression,a_seek_directory,a_name,a_title,a_verbose)
123  ,m_main_branches(a_main_branches)
124  ,m_row_mode(a_row_mode)
125  ,m_nev(a_nev)
126  {
127  if(m_row_mode) {
128  if(!m_nev) m_nev = 4000; //4000*sizeof(double) = 32000 = default basket size.
129  } else {
130  m_nev = 0;
131  }
132  }

◆ mt_ntuple_column_wise() [2/4]

tools::wroot::mt_ntuple_column_wise::mt_ntuple_column_wise ( std::ostream &  a_out,
bool  a_byte_swap,
uint32  a_compression,
seek  a_seek_directory,
std::vector< branch * > &  a_main_branches,
const std::vector< uint32 > &  a_basket_sizes,
const ntuple_booking a_bkg,
bool  a_row_mode,
uint32  a_nev,
bool  a_verbose 
)
inline

Definition at line 134 of file mt_ntuple_column_wise.

140  :parent(a_out,a_byte_swap,a_compression,a_seek_directory,a_basket_sizes,a_bkg,a_verbose)
141  ,m_main_branches(a_main_branches)
142  ,m_row_mode(a_row_mode)
143  ,m_nev(a_nev)
144  {
145  if(m_row_mode) {
146  if(!m_nev) m_nev = 4000;
147  } else {
148  m_nev = 0;
149  }
150  }

◆ mt_ntuple_column_wise() [3/4]

tools::wroot::mt_ntuple_column_wise::mt_ntuple_column_wise ( std::ostream &  a_out,
bool  a_byte_swap,
uint32  a_compression,
seek  a_seek_directory,
std::vector< branch * > &  a_main_branches,
const std::vector< uint32 > &  a_basket_sizes,
const ntuple_booking a_bkg,
bool  a_verbose 
)
inline

Definition at line 153 of file mt_ntuple_column_wise.

158  :parent(a_out,a_byte_swap,a_compression,a_seek_directory,a_basket_sizes,a_bkg,a_verbose)
159  ,m_main_branches(a_main_branches)
160  ,m_row_mode(false)
161  ,m_nev(0)
162  {
163  if(m_row_mode) {
164  if(!m_nev) m_nev = 4000;
165  } else {
166  m_nev = 0;
167  }
168  }

◆ ~mt_ntuple_column_wise()

virtual tools::wroot::mt_ntuple_column_wise::~mt_ntuple_column_wise ( )
inlinevirtual

Definition at line 171 of file mt_ntuple_column_wise.

171 {}

◆ mt_ntuple_column_wise() [4/4]

tools::wroot::mt_ntuple_column_wise::mt_ntuple_column_wise ( const mt_ntuple_column_wise a_from)
inlineprotected

Definition at line 173 of file mt_ntuple_column_wise.

174  :imt_ntuple(a_from)
175  ,parent(a_from)
176  ,m_main_branches(a_from.m_main_branches)
177  ,m_row_mode(a_from.m_row_mode)
178  ,m_nev(a_from.m_nev)
179  {}

Member Function Documentation

◆ add_row()

virtual bool tools::wroot::mt_ntuple_column_wise::add_row ( imutex a_mutex,
ifile a_main_file 
)
inlinevirtual

Implements tools::wroot::imt_ntuple.

Definition at line 72 of file mt_ntuple_column_wise.

72  {
73  if(m_cols.empty()) return false;
74  {tools_vforit(icol*,m_cols,it) (*it)->add();}
75  if(m_main_branches.size()!=m_cols.size()) {
76  m_out << "tools::wroot::mt_ntuple_column_wise::add_row :"
77  << " m_main_branches.size() (" << m_main_branches.size() << ") != "
78  << "m_cols.size() (" << m_cols.size() << ")."
79  << std::endl;
80  return false;
81  }
82  {std::vector<branch*>::const_iterator itb = m_main_branches.begin();
83  tools_vforit(icol*,m_cols,it) {
84  branch* main_branch = (*itb);itb++;
85  basket_add _badd(a_mutex,a_main_file,*main_branch,(*it)->get_branch(),m_cols,m_main_branches,m_row_mode);
86  if(!(*it)->get_branch().pfill(_badd,m_nev)) return false;
87  }}
88  {tools_vforit(icol*,m_cols,it) (*it)->set_def();}
89  return true;
90  }

◆ end_fill()

virtual bool tools::wroot::mt_ntuple_column_wise::end_fill ( imutex a_mutex,
ifile a_main_file 
)
inlinevirtual

Implements tools::wroot::imt_ntuple.

Definition at line 91 of file mt_ntuple_column_wise.

91  {
92  if(m_main_branches.size()!=m_cols.size()) {
93  m_out << "tools::wroot::mt_ntuple_column_wise::end_fill :"
94  << " m_main_branches.size() (" << m_main_branches.size() << ") != "
95  << "m_cols.size() (" << m_cols.size() << ")."
96  << std::endl;
97  return false;
98  }
99  std::vector<branch*>::const_iterator itb = m_main_branches.begin();
100  tools_vforit(icol*,m_cols,it) {
101  branch* main_branch = (*itb);itb++;
102  basket_add _badd(a_mutex,a_main_file,*main_branch,(*it)->get_branch(),m_cols,m_main_branches,m_row_mode);
103  if(!(*it)->get_branch().end_pfill(_badd)) return false;
104  }
105  if(m_row_mode) {
106  size_t number;
107  bool status = flush_remaining_baskets(number,a_mutex,a_main_file,m_cols,m_main_branches);
108  if(number) {
109  m_out << "tools::wroot::mt_ntuple_column_wise::end_fill : it remained " << number << " baskets not written on file." << std::endl;
110  status = false;
111  }
112  if(!status) return false;
113  }
114  return end_leaves(a_mutex);
115  }

◆ end_leaves()

bool tools::wroot::mt_ntuple_column_wise::end_leaves ( imutex a_mutex) const
inlineprotected

Definition at line 232 of file mt_ntuple_column_wise.

232  {
233 
234 #include "MT_SET_MAX.icc"
235 
236  std::vector<icol*>::const_iterator pit = m_cols.begin();
237  tools_vforcit(branch*,m_main_branches,mit) {
238  if((*mit)->leaves().empty()) {
239  m_out << "tools::wroot::mt_ntuple_column_wise::end_leaves :"
240  << " branch " << (*mit)->name() << " without leaf." << std::endl;
241  return false;
242  }
243 
244  base_leaf* _mleaf = *((*mit)->leaves().begin());
245  base_leaf* _pleaf = (*pit)->get_leaf(); pit++; //WARNING.
246 
247  TOOLS_WROOT_MT_NTUPLE_STRING_SET_MAX
248 
249  }
250 #undef TOOLS_WROOT_MT_NTUPLE_STRING_SET_MAX
251 
252  return true;
253  }

◆ flush_baskets()

static bool tools::wroot::mt_ntuple_column_wise::flush_baskets ( imutex a_mutex,
ifile a_main_file,
std::vector< icol * > &  a_cols,
std::vector< branch * > &  a_main_branches 
)
inlinestaticprotected

Definition at line 191 of file mt_ntuple_column_wise.

191  {
192  a_mutex.lock();
193  bool status = true;
194  std::vector<branch*>::const_iterator itb = a_main_branches.begin();
195  tools_vforit(icol*,a_cols,it) {
196  branch& _branch = (*it)->get_branch();
197  basket* _front_basket = _branch.m_parallel_baskets.front();
198  branch* main_branch = (*itb);itb++;
199  if(status) {
200  uint32 add_bytes,nout;
201  if(main_branch->add_basket(a_main_file,*_front_basket,add_bytes,nout)) {
202  main_branch->set_tot_bytes(main_branch->tot_bytes()+add_bytes);
203  main_branch->set_zip_bytes(main_branch->zip_bytes()+nout);
204  } else {
205  status = false;
206  }
207  }
208  _branch.m_parallel_baskets.erase(_branch.m_parallel_baskets.begin());
209  delete _front_basket;
210  }
211  a_mutex.unlock();
212  return status;
213  }

◆ flush_remaining_baskets()

static bool tools::wroot::mt_ntuple_column_wise::flush_remaining_baskets ( size_t &  a_number,
imutex a_mutex,
ifile a_main_file,
std::vector< icol * > &  a_cols,
std::vector< branch * > &  a_main_branches 
)
inlinestaticprotected

Definition at line 215 of file mt_ntuple_column_wise.

215  {
216  a_number = 0;
217  while(ready_to_flush_baskets(a_cols)) {
218  if(!flush_baskets(a_mutex,a_main_file,a_cols,a_main_branches)) return false;
219  }
220  // look for pending baskets.
221  {tools_vforit(icol*,a_cols,it) {
222  branch& _branch = (*it)->get_branch();
223  a_number += _branch.m_parallel_baskets.size();
224  }}
225  {tools_vforit(icol*,a_cols,it) {
226  branch& _branch = (*it)->get_branch();
227  safe_clear(_branch.m_parallel_baskets);
228  }}
229  return true;
230  }

◆ operator=()

mt_ntuple_column_wise& tools::wroot::mt_ntuple_column_wise::operator= ( const mt_ntuple_column_wise a_from)
inlineprotected

Definition at line 180 of file mt_ntuple_column_wise.

180 {parent::operator=(a_from);return *this;}

◆ ready_to_flush_baskets()

static bool tools::wroot::mt_ntuple_column_wise::ready_to_flush_baskets ( std::vector< icol * > &  a_cols)
inlinestaticprotected

Definition at line 182 of file mt_ntuple_column_wise.

182  {
183  //return true if all parallel branches have at least one basket in their m_parallel_baskets.
184  if(a_cols.empty()) return false;
185  tools_vforit(icol*,a_cols,it) {
186  branch& _branch = (*it)->get_branch();
187  if(_branch.m_parallel_baskets.empty()) return false;
188  }
189  return true;
190  }

Member Data Documentation

◆ m_main_branches

std::vector<branch*>& tools::wroot::mt_ntuple_column_wise::m_main_branches
protected

Definition at line 255 of file mt_ntuple_column_wise.

◆ m_nev

uint32 tools::wroot::mt_ntuple_column_wise::m_nev
protected

Definition at line 257 of file mt_ntuple_column_wise.

◆ m_row_mode

bool tools::wroot::mt_ntuple_column_wise::m_row_mode
protected

Definition at line 256 of file mt_ntuple_column_wise.


The documentation for this class was generated from the following file:
tools::wroot::base_pntuple::m_out
std::ostream & m_out
Definition: base_pntuple:122
tools::wroot::mt_ntuple_column_wise::m_row_mode
bool m_row_mode
Definition: mt_ntuple_column_wise:256
tools::wroot::base_pntuple_column_wise::operator=
base_pntuple_column_wise & operator=(const base_pntuple_column_wise &)
Definition: base_pntuple_column_wise:205
tools::wroot::mt_ntuple_column_wise::flush_baskets
static bool flush_baskets(imutex &a_mutex, ifile &a_main_file, std::vector< icol * > &a_cols, std::vector< branch * > &a_main_branches)
Definition: mt_ntuple_column_wise:191
tools::wroot::mt_ntuple_column_wise::end_leaves
bool end_leaves(imutex &a_mutex) const
Definition: mt_ntuple_column_wise:232
tools::wroot::mt_ntuple_column_wise::m_nev
uint32 m_nev
Definition: mt_ntuple_column_wise:257
tools::safe_clear
void safe_clear(std::map< K, V * > &a_m)
Definition: mapmanip:12
tools::wroot::mt_ntuple_column_wise::flush_remaining_baskets
static bool flush_remaining_baskets(size_t &a_number, imutex &a_mutex, ifile &a_main_file, std::vector< icol * > &a_cols, std::vector< branch * > &a_main_branches)
Definition: mt_ntuple_column_wise:215
MT_SET_MAX.icc
tools_vforit
#define tools_vforit(a__T, a__v, a__it)
Definition: forit:13
tools::wroot::mt_ntuple_column_wise::ready_to_flush_baskets
static bool ready_to_flush_baskets(std::vector< icol * > &a_cols)
Definition: mt_ntuple_column_wise:182
tools::wroot::base_pntuple::m_cols
std::vector< icol * > m_cols
Definition: base_pntuple:126
tools_vforcit
#define tools_vforcit(a__T, a__v, a__it)
Definition: forit:7
tools::uint32
unsigned int uint32
Definition: typedefs:71
tools::wroot::mt_ntuple_column_wise::m_main_branches
std::vector< branch * > & m_main_branches
Definition: mt_ntuple_column_wise:255