Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 2 // See the file tools.license for terms. 3 4 #ifndef tools_ntuple_booking 5 #define tools_ntuple_booking 6 7 // a little class to capture booking parameter 8 // to create an ntuple. 9 10 #include "cids" 11 12 #include <ostream> 13 #include "forit" 14 15 namespace tools { 16 17 class column_booking { 18 public: 19 column_booking(const std::string& a_name,cid 20 :m_name(a_name) 21 ,m_cid(a_cid) 22 ,m_user_obj(a_user_obj) //WARNING : not owne 23 {} 24 virtual ~column_booking() {} 25 public: 26 column_booking(const column_booking& a_from) 27 :m_name(a_from.m_name) 28 ,m_cid(a_from.m_cid) 29 ,m_user_obj(a_from.m_user_obj) 30 {} 31 column_booking& operator=(const column_booki 32 if(&a_from==this) return *this; 33 m_name = a_from.m_name; 34 m_cid = a_from.m_cid; 35 m_user_obj = a_from.m_user_obj; 36 return *this; 37 } 38 public: 39 const std::string& name() const {return m_na 40 cid cls_id() const {return m_cid;} 41 void* user_obj() const {return m_user_obj;} 42 void set_user_obj(void* a_obj) {m_user_obj = 43 protected: 44 std::string m_name; 45 cid m_cid; 46 void* m_user_obj; 47 }; 48 49 class ntuple_booking { 50 public: 51 ntuple_booking(const std::string& a_name = " 52 :m_name(a_name) 53 ,m_title(a_title) 54 {} 55 virtual ~ntuple_booking(){} 56 public: 57 ntuple_booking(const ntuple_booking& a_from) 58 :m_name(a_from.m_name) 59 ,m_title(a_from.m_title) 60 ,m_columns(a_from.m_columns) 61 {} 62 ntuple_booking& operator=(const ntuple_booki 63 m_name = a_from.m_name; 64 m_title = a_from.m_title; 65 m_columns = a_from.m_columns; 66 return *this; 67 } 68 public: 69 template <class T> 70 void add_column(const std::string& a_name) { 71 m_columns.push_back(column_booking(a_name, 72 } 73 template <class T> 74 void add_column(const std::string& a_name,T& 75 m_columns.push_back(column_booking(a_name, 76 } 77 78 template <class T> 79 void add_column_vec(const std::string& a_nam 80 m_columns.push_back(column_booking(a_name, 81 } 82 template <class T> 83 void add_column_vec(const std::string& a_nam 84 m_columns.push_back(column_booking(a_name, 85 } 86 template <class T> 87 void add_column(const std::string& a_name,st 88 m_columns.push_back(column_booking(a_name, 89 } 90 91 const std::string& name() const {return m_na 92 const std::string& title() const {return m_t 93 const std::vector<column_booking>& columns() 94 std::vector<column_booking>& columns() {retu 95 96 void set_name(const std::string& a_s) {m_nam 97 void set_title(const std::string& a_s) {m_ti 98 99 bool has_similar_layout(std::ostream& a_out, 100 if(m_columns.size()!=a_nbk.m_columns.size( 101 a_out << "tools::ntuple_booking::has_sim 102 << " bookings have not the same nu 103 << " (" << m_columns.size() << " ! 104 << std::endl; 105 return false; 106 } 107 std::vector<column_booking>::const_iterato 108 tools_vforit(tools::column_booking,m_colum 109 if((*it).name()!=(*ait).name()) { 110 a_out << "tools::ntuple_booking::has_s 111 << " columns don't have same nam 112 << " (" << (*it).name() << " != 113 << std::endl; 114 return false; 115 } 116 if((*it).cls_id()!=(*ait).cls_id()) { 117 a_out << "tools::ntuple_booking::has_s 118 << " columns don't have same cla 119 << " (" << (*it).cls_id() << " ! 120 << std::endl; 121 return false; 122 } 123 124 ait++; 125 } 126 return true; 127 } 128 129 protected: 130 std::string m_name; 131 std::string m_title; 132 std::vector<column_booking> m_columns; 133 }; 134 135 } 136 137 #endif