00001
00002
00014 #ifndef _MapMatrixProjector_H_
00015 #define _MapMatrixProjector_H_
00016
00017 #include "NTupleProjector.h"
00018
00019 namespace hippodraw {
00020
00028 class MDL_HIPPOPLOT_API MapMatrixProjector : public NTupleProjector
00029 {
00030
00031 private:
00032
00034 std::string m_x_label;
00035
00038 std::string m_y_label;
00039
00044 unsigned int m_cols;
00045
00050 unsigned int m_rows;
00051
00055 double m_x_step;
00056
00060 double m_y_step;
00061
00064 double m_x_origin;
00065
00068 double m_y_origin;
00069
00073 double m_scale_factor;
00074
00080 double m_null_value;
00081
00086 bool m_transpose;
00087
00088 protected:
00089
00091 MapMatrixProjector ( const MapMatrixProjector & projector );
00092
00099 virtual void changedNTuple();
00100
00102 virtual void addPointReps ();
00103
00108 bool inRangeWithZ ( int row, bool flag ) const;
00109
00110 public:
00111
00113 MapMatrixProjector();
00114
00117 ProjectorBase * clone();
00118
00124 virtual void matrixTranspose ( bool yes );
00125
00131 virtual void setNumberOfBins ( hippodraw::Axes::Type axis,
00132 unsigned int number );
00133
00137 virtual int getNumberOfBins ( hippodraw::Axes::Type axis ) const;
00138
00143 virtual const Range & setBinWidth ( hippodraw::Axes::Type axis,
00144 double step );
00145
00148 virtual double getBinWidth ( hippodraw::Axes::Type axis ) const;
00149
00154 virtual void setOffset ( hippodraw::Axes::Type axis, double origin );
00155
00158 virtual double getOffset ( hippodraw::Axes::Type axis ) const;
00159
00160 virtual void setNTuple ( const DataSource * ntuple );
00161
00162 virtual bool inRange ( int row ) const;
00163
00166 virtual Range dataRangeOn ( hippodraw::Axes::Type ) const;
00167 virtual Range dataRangeOnValue () const;
00168 virtual Range valueRange ( ) const;
00169 virtual Range preferredRange ( hippodraw::Axes::Type axis ) const;
00170
00173 virtual double getPosOn ( hippodraw::Axes::Type axis ) const;
00174
00178 const std::string & getXLabel () const;
00179
00183 const std::string & getYLabel ( bool flag ) const;
00184
00188 const std::string & getZLabel () const;
00189
00192 virtual double getZValue ( double x, double y ) const;
00193
00195 virtual double getAverage ( hippodraw::Axes::Type axis ) const;
00196
00203 inline unsigned int calcColumnIndex ( unsigned int row ) const;
00204
00208 inline double calcColumnValue ( unsigned int row ) const;
00209
00213 inline unsigned int calcRowIndex ( unsigned int row ) const;
00214
00218 inline double calcRowValue ( unsigned int row ) const;
00219
00222 inline double getXStep () const;
00223
00226 inline double getYStep () const;
00227
00228 virtual DataSource * createNTuple () const;
00229
00230 virtual void prepareValues ();
00231
00235 virtual bool isImageConvertable () const;
00236
00237 protected:
00238
00239 virtual void fillProjectedValues ( DataSource * ntuple,
00240 bool in_range = false ) const;
00241 };
00242
00243 inline
00244 unsigned int
00245 MapMatrixProjector::
00246 calcColumnIndex ( unsigned int row ) const
00247 {
00248 if ( m_rows == 0 ) return 0;
00249
00250 return row / m_rows;
00251 }
00252
00253 inline
00254 double
00255 MapMatrixProjector::
00256 calcColumnValue ( unsigned int row ) const
00257 {
00258 unsigned int index = calcColumnIndex ( row );
00259
00260 return m_x_origin + index * m_x_step + 0.5 * m_x_step;
00261 }
00262
00263 inline
00264 unsigned int
00265 MapMatrixProjector::
00266 calcRowIndex ( unsigned int row ) const
00267 {
00268 unsigned int column = calcColumnIndex ( row );
00269
00270 return row - column * m_rows;
00271 }
00272
00273 inline
00274 double
00275 MapMatrixProjector::
00276 calcRowValue ( unsigned int row ) const
00277 {
00278 unsigned int index = calcRowIndex ( row );
00279
00280 return m_y_origin + index * m_y_step + 0.5 * m_y_step;
00281 }
00282
00283 inline
00284 double
00285 MapMatrixProjector::
00286 getXStep ( ) const
00287 {
00288 return m_x_step;
00289 }
00290
00291 inline
00292 double
00293 MapMatrixProjector::
00294 getYStep ( ) const
00295 {
00296 return m_y_step;
00297 }
00298
00299 }
00300
00301 #endif // _MapMatrixProjector_H_