1 #ifndef DataFormats_NanoAOD_FlatTable_h 2 #define DataFormats_NanoAOD_FlatTable_h 7 #include <boost/range/sub_range.hpp> 13 namespace flatTableHelper {
18 inline void bulk(boost::sub_range<std::vector<T>>
data)
const {}
24 inline float one(
const float &
val)
const {
27 inline void bulk(boost::sub_range<std::vector<float>>
data)
const {
45 : size_(size), name_(name), singleton_(singleton), extension_(
extension) {}
48 unsigned int nColumns()
const {
return columns_.size(); };
49 unsigned int nRows()
const {
return size_; };
50 unsigned int size()
const {
return size_; }
66 boost::sub_range<const std::vector<T>>
columnData(
unsigned int column)
const {
67 auto begin = beginData<T>(column);
68 return boost::sub_range<const std::vector<T>>(
begin, begin + size_);
73 boost::sub_range<std::vector<T>>
columnData(
unsigned int column) {
74 auto begin = beginData<T>(column);
75 return boost::sub_range<std::vector<T>>(
begin, begin + size_);
82 throw cms::Exception(
"LogicError",
"columnValue works only for singleton tables");
83 return *beginData<T>(column);
86 double getAnyValue(
unsigned int row,
unsigned int column)
const;
94 return table_->getAnyValue(row_,
table_->columnIndex(column));
97 unsigned int row()
const {
return row_; }
105 template <
typename T,
typename C = std::vector<T>>
111 if (columnIndex(name) != -1)
113 if (values.size() !=
size())
114 throw cms::Exception(
"LogicError",
"Mismatched size for " + name);
116 auto &vec = bigVector<T>();
117 columns_.emplace_back(name, docString,
type, vec.size());
118 vec.insert(vec.end(), values.begin(), values.end());
119 if (
type == FloatColumn) {
123 template <
typename T,
typename C>
130 throw cms::Exception(
"LogicError",
"addColumnValue works only for singleton tables");
131 if (columnIndex(name) != -1)
134 auto &vec = bigVector<T>();
135 columns_.emplace_back(name, docString,
type, vec.size());
136 if (
type == FloatColumn) {
139 vec.push_back(value);
145 template <
typename T>
157 : name(aname), doc(docString), type(atype), firstIndex(anIndex) {}
161 template <
typename T>
162 typename std::vector<T>::const_iterator
beginData(
unsigned int column)
const {
164 check_type<T>(col.
type);
167 template <
typename T>
168 typename std::vector<T>::iterator
beginData(
unsigned int column) {
170 check_type<T>(col.
type);
174 template <
typename T>
178 template <
typename T>
191 template <
typename T>
214 inline const std::vector<float> &FlatTable::bigVector<float>()
const {
218 inline const std::vector<int> &FlatTable::bigVector<int>()
const {
222 inline const std::vector<uint8_t> &FlatTable::bigVector<uint8_t>()
const {
226 inline std::vector<float> &FlatTable::bigVector<float>() {
230 inline std::vector<int> &FlatTable::bigVector<int>() {
234 inline std::vector<uint8_t> &FlatTable::bigVector<uint8_t>() {
boost::sub_range< const std::vector< T > > columnData(unsigned int column) const
get a column by index (const)
RowView row(unsigned int row) const
std::vector< T > & bigVector()
float one(const float &val) const
void bulk(boost::sub_range< std::vector< float >> data) const
const std::vector< T > & bigVector() const
Column(const std::string &aname, const std::string &docString, ColumnType atype, unsigned int anIndex)
std::vector< Column > columns_
ColumnType columnType(unsigned int col) const
std::vector< uint8_t > uint8s_
void addColumn(const std::string &name, const C &values, const std::string &docString, ColumnType type=defaultColumnType< T >(), int mantissaBits=-1)
const std::string & doc() const
double getAnyValue(unsigned int column) const
void setDoc(const std::string &doc)
std::vector< float > floats_
MaybeMantissaReduce(int mantissaBits)
std::vector< T >::iterator beginData(unsigned int column)
const FlatTable & table() const
T one(const T &val) const
void bulk(boost::sub_range< std::vector< T >> data) const
unsigned int nRows() const
RowView(const FlatTable &table, unsigned int row)
void addColumnValue(const std::string &name, const C &value, const std::string &docString, ColumnType type=defaultColumnType< T >(), int mantissaBits=-1)
const std::string & name() const
const T & columValue(unsigned int column) const
get a column value for singleton (const)
double getAnyValue(const std::string &column) const
const std::string & columnName(unsigned int col) const
MaybeMantissaReduce(int mantissaBits)
boost::sub_range< std::vector< T > > columnData(unsigned int column)
get a column by index (non-const)
FlatTable(unsigned int size, const std::string &name, bool singleton, bool extension=false)
static void check_type(FlatTable::ColumnType type)
static ColumnType defaultColumnType()
static float reduceMantissaToNbitsRounding(const float &f)
unsigned int nColumns() const
unsigned int size() const
char data[epos_bytes_allocation]
std::vector< T >::const_iterator beginData(unsigned int column) const
const std::string & columnDoc(unsigned int col) const