|
Go to the documentation of this file. 1 #ifndef NPSTAT_ABSNTUPLE_HH_
2 #define NPSTAT_ABSNTUPLE_HH_
21 #include "geners/ClassId.hh"
22 #include "geners/binaryIO.hh"
23 #include "geners/allUnique.hh"
49 : colNames_( columnNames), title_(ntTitle ? ntTitle : "")
52 throw std::invalid_argument( "In npstat::AbsNtuple constructor:"
53 " no column labels provided");
55 throw std::invalid_argument( "In npstat::AbsNtuple constructor:"
56 " column labels are not unique");
62 inline const std::string& title() const { return title_;}
65 inline virtual void setTitle( const char* newtitle)
66 {title_ = newtitle ? newtitle : "";}
70 { return colNames_.size();}
73 inline const std::string& columnName( const unsigned long i) const
74 { return colNames_.at(i);}
104 virtual unsigned long nRows() const = 0;
107 inline unsigned long length() const { return nRows()*colNames_.size();}
114 virtual void fill( const T* values, unsigned long lenValues) = 0;
121 virtual void fill( const T& v0) = 0;
122 virtual void fill( const T& v0, const T& v1) = 0;
123 virtual void fill( const T& v0, const T& v1, const T& v2) = 0;
124 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3)=0;
125 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3,
127 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3,
128 const T& v4, const T& v5) = 0;
129 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3,
130 const T& v4, const T& v5, const T& v6) = 0;
131 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3,
132 const T& v4, const T& v5, const T& v6, const T& v7)=0;
133 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3,
134 const T& v4, const T& v5, const T& v6, const T& v7,
136 virtual void fill( const T& v0, const T& v1, const T& v2, const T& v3,
137 const T& v4, const T& v5, const T& v6, const T& v7,
138 const T& v8, const T& v9) = 0;
147 template < typename T2>
157 virtual T operator()( unsigned long r, unsigned long c) const=0;
160 virtual T at( unsigned long r, unsigned long c) const = 0;
180 unsigned long lenBuf) const = 0;
181 virtual void columnContents( const Column& c, T* buf,
182 unsigned long lenBuf) const = 0;
200 typedef T value_type;
201 typedef std::forward_iterator_tag iterator_category;
215 unsigned long column_;
223 typedef T value_type;
224 typedef std::forward_iterator_tag iterator_category;
238 unsigned long column_;
259 template < class Accumulator>
272 template < class Filter, class Accumulator>
274 const Filter& f, Accumulator& acc) const;
277 template < class Filter>
295 template < class Accumulator, class WeightCalc>
297 bool skipZeroWeights = false) const;
303 template < class Filter, class Accumulator, class WeightCalc>
305 const Filter& f, Accumulator& acc, const WeightCalc& wcalc,
306 bool skipZeroWeights = false) const;
312 template < class Filter, class WeightCalc>
314 const Filter& f, const WeightCalc& wcalc) const;
385 const std::vector<std::string>& colNames) const;
395 { return ( typeid(* this) == typeid(r)) && this-> isEqual(r);}
399 { return !(* this == r);}
410 std::vector<std::string> colNames_;
415 template< int, class T2>
426 const unsigned long nCols = other. nColumns();
427 std::vector<T2> bufVec;
428 bufVec.reserve(nCols);
429 std::vector<T> myBufVec;
430 myBufVec.reserve(nCols);
431 for ( unsigned long col=0; col<nCols; ++col)
432 bufVec.push_back(other(0UL, col));
433 for ( unsigned long col=0; col<nCols; ++col)
434 myBufVec.emplace_back(bufVec[col]);
435 T2* buf = &bufVec[0];
436 T* myBuf = &myBufVec[0];
437 nt-> fill(myBuf, nCols);
438 for ( unsigned long row=1UL; row< nRows; ++row)
441 for ( unsigned long col=0; col<nCols; ++col)
442 myBuf[col] = T(buf[col]);
443 nt-> fill(myBuf, nCols);
452 struct AppendNTuple<1, T2>
455 const AbsNtuple<T2>& other)
457 const unsigned long nRows = other.nRows();
460 const unsigned long nCols = other.nColumns();
461 std::vector<T2> bufVec;
462 bufVec.reserve(nCols);
463 for ( unsigned long col=0; col<nCols; ++col)
464 bufVec.push_back(other(0UL, col));
465 T2* buf = &bufVec[0];
466 nt->fill(buf, nCols);
467 for ( unsigned long row=1UL; row< nRows; ++row)
469 other.rowContents(row, buf, nCols);
470 nt->fill(buf, nCols);
478 template < class Accumulator>
479 inline unsigned long cutCycleOverRows(
480 const NtRectangularCut<T>& f, Accumulator& acc) const
485 inline void append2( const AbsNtuple& other)
503 template < typename T>
505 std::ostream& asciiStream,
506 bool insertCommasBetweenValues= false,
507 unsigned long firstRowToDump=0,
508 unsigned long maxRowsToDump=ULONG_MAX);
509 template < typename T>
511 const std::string& filename,
512 bool insertCommasBetweenValues= false,
513 unsigned long firstRowToDump=0,
514 unsigned long maxRowsToDump=ULONG_MAX);
530 template < typename T>
533 bool hasCommasBetweenValues= false,
534 unsigned long maxRowsToFill=ULONG_MAX);
535 template < typename T>
536 bool fillNtupleFromTextFile( const std::string& filename,
538 bool hasCommasBetweenValues= false,
539 unsigned long maxRowsToFill=ULONG_MAX);
548 std::vector<std::string> ntupleColumns( const char* v0, const char* v1);
549 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
551 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
552 const char* v2, const char* v3);
553 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
554 const char* v2, const char* v3,
556 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
557 const char* v2, const char* v3,
558 const char* v4, const char* v5);
559 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
560 const char* v2, const char* v3,
561 const char* v4, const char* v5,
563 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
564 const char* v2, const char* v3,
565 const char* v4, const char* v5,
566 const char* v6, const char* v7);
567 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
568 const char* v2, const char* v3,
569 const char* v4, const char* v5,
570 const char* v6, const char* v7,
572 std::vector<std::string> ntupleColumns( const char* v0, const char* v1,
573 const char* v2, const char* v3,
574 const char* v4, const char* v5,
575 const char* v6, const char* v7,
576 const char* v8, const char* v9);
577 std::vector<std::string> ntupleColumns( const char** names, unsigned len);
584 #include "npstat/stat/Column.icc"
585 #include "npstat/stat/AbsNtuple.icc"
Address ntuple columns by name or by number.
Rectangular cuts for homogeneous ntuples.
Definition: AbsNtuple.hh:198
Definition: AbsNtuple.hh:221
Definition: AbsNtuple.hh:39
unsigned long validColumn(const char *columnName) const
std::vector< unsigned long > columnIndices(const Column &c0) const
const std::string & columnName(const unsigned long i) const Definition: AbsNtuple.hh:73
virtual void rowContents(unsigned long row, T *buf, unsigned long lenBuf) const =0
const std::vector< std::string > & columnNames() const Definition: AbsNtuple.hh:77
unsigned long conditionalRowCount(const Filter &f) const
virtual void setTitle(const char *newtitle) Definition: AbsNtuple.hh:65
void append(const AbsNtuple< T2 > &another)
virtual bool setColumnName(unsigned long i, const char *newname)
unsigned long columnNumber(const char *columnName) const
virtual gs::ClassId classId() const =0
row_iterator row_begin(unsigned long rowNumber) const
T elementAt(unsigned long r, const Column &c) const
bool operator!=(const AbsNtuple &r) const Definition: AbsNtuple.hh:398
virtual void fill(const T *values, unsigned long lenValues)=0
double weightedConditionalRowCount(const Filter &f, const WeightCalc &wcalc) const
void weightedCycleOverRows(Accumulator &acc, const WeightCalc &wcalc, bool skipZeroWeights=false) const
bool operator==(const AbsNtuple &r) const Definition: AbsNtuple.hh:394
unsigned long length() const Definition: AbsNtuple.hh:107
virtual unsigned long nRows() const =0
T element(unsigned long r, const Column &c) const
virtual T operator()(unsigned long r, unsigned long c) const =0
virtual T at(unsigned long r, unsigned long c) const =0
unsigned long conditionalCycleOverRows(const Filter &f, Accumulator &acc) const
virtual bool isEqual(const AbsNtuple &r) const
unsigned long nColumns() const Definition: AbsNtuple.hh:69
AbsNtuple(const std::vector< std::string > &columnNames, const char *ntTitle) Definition: AbsNtuple.hh:47
virtual void fill(const T &v0)=0
double weightedConditionalCycleOverRows(const Filter &f, Accumulator &acc, const WeightCalc &wcalc, bool skipZeroWeights=false) const
std::vector< unsigned long > columnIndices(const std::vector< std::string > &colNames) const
void cycleOverRows(Accumulator &acc) const
const std::string & title() const Definition: AbsNtuple.hh:62
Definition: AbsArrayProjector.hh:14
std::vector< std::string > simpleColumnNames(unsigned ncols)
bool fillNtupleFromText(std::istream &asciiStream, AbsNtuple< T > *ntuple, bool hasCommasBetweenValues=false, unsigned long maxRowsToFill=ULONG_MAX)
bool dumpNtupleAsText(const AbsNtuple< T > &ntuple, std::ostream &asciiStream, bool insertCommasBetweenValues=false, unsigned long firstRowToDump=0, unsigned long maxRowsToDump=ULONG_MAX)
std::vector< std::string > ntupleColumns(const char *v0)
|