00001 /* -*- mode: c++; -*- */ 00002 00014 #ifndef _NTupleProjector_H_ 00015 #define _NTupleProjector_H_ 00016 00017 #include "ProjectorBase.h" 00018 00019 class DataSource; 00020 class TupleCut; 00021 00043 class MDL_HIPPOPLOT_API NTupleProjector : virtual public ProjectorBase 00044 { 00045 00048 mutable bool m_is_valid; 00049 00050 protected: 00051 00061 std::vector< std::string > m_binding_options; 00062 00064 mutable std::vector< std::string > m_bindings; 00065 00070 std::vector< unsigned int > m_columns; 00071 00073 std::vector < const TupleCut * > m_cut_list; 00074 00077 const DataSource * m_ntuple; 00078 00084 unsigned int m_min_bindings; 00085 00088 NTupleProjector ( unsigned int columns ); 00089 00091 NTupleProjector ( const NTupleProjector & projector ); 00092 00095 Range dataRange ( int column ) const; 00096 00098 Range dataRangeWithError ( int data, int error ) const; 00099 00101 double getPos ( int column ) const; 00102 00105 double getPosWithError ( int data, int error ) const; 00106 00110 void setAxisBinding ( int axis, const std::string & label ); 00111 00112 public: 00113 00115 ~NTupleProjector(); 00116 00119 virtual void update ( const Observable * ); 00120 00125 virtual void willDelete ( const Observable * ); 00126 00128 virtual const std::vector< std::string > & bindingOptions () const; 00129 00134 virtual const std::vector < std::string > & getAxisBindings () const; 00135 00136 00140 unsigned int indexOfBindingOption ( const std::string & axis ) const; 00141 00144 int indexOf ( const std::string & label ) const; 00145 00148 virtual void setXErrorOption ( bool enable ); 00149 00152 virtual void setYErrorOption ( bool enable ); 00153 00158 virtual void setAxisBinding ( const std::string & axis, 00159 const std::string & label ); 00160 00166 virtual void setAxisBindings ( const std::vector < std::string > & labels ); 00167 00172 virtual void setNTuple ( const DataSource * source ); 00173 00175 virtual const DataSource * getNTuple () const; 00176 00178 virtual DataSource * getNTuple (); 00179 00181 virtual const std::string & getNTupleName () const; 00182 00187 virtual void changedNTuple() = 0; 00188 00191 virtual Range dataRangeOn ( hippodraw::Axes::Type ) const = 0; 00192 00194 virtual void addCut ( const TupleCut * cut ); 00195 00198 virtual void removeCut ( const TupleCut * cut ); 00199 00201 const std::vector < const TupleCut * > & getCutList () const; 00202 00205 bool acceptRow ( unsigned int i ) const; 00206 00209 virtual const std::string & getTitle() const; 00210 00211 virtual const std::string & getXLabel() const; 00212 virtual const std::string & getYLabel ( bool flag = false ) const; 00213 00216 int getNumberOfEntries () const; 00217 00220 virtual bool inRange ( int row ) const; 00221 00223 virtual double getAverage ( hippodraw::Axes::Type axis ) const; 00224 00225 /* Implements ProjectorBase. */ 00226 virtual bool isEmpty () const; 00227 00228 /* Create an NTuple given the present set of cuts. 00229 */ 00230 virtual NTuple * getNTupleAfterCuts () const; 00231 00234 bool isDataValid () const; 00235 00236 }; 00237 00238 #endif // _NTupleProjector_H_