00001
00002
00014 #ifndef _NTupleProjector_H_
00015 #define _NTupleProjector_H_
00016
00017 #include "ProjectorBase.h"
00018
00019 namespace hippodraw {
00020
00021 class DataSource;
00022
00044 class MDL_HIPPOPLOT_API NTupleProjector : virtual public ProjectorBase
00045 {
00046
00049 typedef std::vector < const TupleCut * > CutList_t;
00050
00053 mutable bool m_is_valid;
00054
00058 NTuple * createEmptyNTuple () const;
00059
00064 void fillNTuple ( NTuple * ntuple, const CutList_t & cut_list ) const;
00065
00066 protected:
00067
00077 std::vector< std::string > m_binding_options;
00078
00080 mutable std::vector< std::string > m_bindings;
00081
00086 std::vector< unsigned int > m_columns;
00087
00089 CutList_t m_cut_list;
00090
00093 const DataSource * m_ntuple;
00094
00100 unsigned int m_min_bindings;
00101
00104 NTupleProjector ( unsigned int columns );
00105
00107 NTupleProjector ( const NTupleProjector & projector );
00108
00111 Range dataRange ( int column ) const;
00112
00114 Range dataRangeWithError ( int data, int error ) const;
00115
00117 double getPos ( int column ) const;
00118
00121 double getPosWithError ( int data, int error ) const;
00122
00126 void setAxisBinding ( int axis, const std::string & label );
00127
00128 public:
00129
00131 virtual ~NTupleProjector();
00132
00135 virtual void update ( const Observable * );
00136
00141 virtual void willDelete ( const Observable * );
00142
00145 virtual const std::vector< std::string > & bindingOptions () const;
00146
00151 virtual const std::vector < std::string > & getAxisBindings () const;
00152
00153
00157 unsigned int indexOfBindingOption ( const std::string & axis ) const;
00158
00162 virtual int indexOf ( const std::string & label ) const;
00163
00166 virtual void setXErrorOption ( bool enable );
00167
00170 virtual void setYErrorOption ( bool enable );
00171
00176 virtual void setAxisBinding ( const std::string & axis,
00177 const std::string & label );
00178
00184 virtual void setAxisBindings ( const std::vector < std::string > & labels );
00185
00190 virtual void setNTuple ( const DataSource * source );
00191
00193 virtual const DataSource * getNTuple () const;
00194
00196 virtual DataSource * getNTuple ();
00197
00199 virtual const std::string & getNTupleName () const;
00200
00205 virtual void changedNTuple() = 0;
00206
00209 virtual Range dataRangeOn ( Axes::Type ) const = 0;
00210
00212 virtual void addCut ( const TupleCut * cut );
00213
00216 virtual void removeCut ( const TupleCut * cut );
00217
00219 const std::vector < const TupleCut * > & getCutList () const;
00220
00224 bool acceptRow ( unsigned int i, const CutList_t & cut_list ) const;
00225
00229 virtual const std::string & getTitle() const;
00230
00231 virtual const std::string & getXLabel() const;
00232 virtual const std::string & getYLabel ( bool flag = false ) const;
00233
00236 int getNumberOfEntries () const;
00237
00238
00240 virtual int getUnderflow () const;
00241
00243 virtual int getOverflow () const;
00244
00247 virtual bool inRange ( int row ) const;
00248
00250 virtual double getAverage ( Axes::Type axis ) const;
00251
00252
00253 virtual bool isEmpty () const;
00254
00255
00256
00257 virtual NTuple * getNTupleAfterCuts () const;
00258
00262 virtual void fillColumnAfterCuts(const std::string & column,
00263 std::vector<double> & columnData) const;
00264
00265 virtual
00266 NTuple * createNTupleWith ( const std::vector< TupleCut > & cut_list ) const;
00267
00270 bool isDataValid () const;
00271
00275 virtual bool hasDataSourceBindings () const;
00276
00277 };
00278
00279 }
00280
00281 #endif // _NTupleProjector_H_