LineProjector.cxx

Go to the documentation of this file.
00001 
00012 #include "LineProjector.h"
00013 
00014 #include "axes/AxisModelBase.h"
00015 #include "datasrcs/NTuple.h"
00016 
00017 using namespace hippodraw;
00018 
00019 using std::string;
00020 using std::vector;
00021 
00022 LineProjector::
00023 LineProjector ( hippodraw::Axes::Type axis, double value )
00024   : m_value ( value ),
00025     m_axis ( axis )
00026 {
00027 }
00028 
00029 LineProjector::
00030 LineProjector ( const LineProjector & projector )
00031   : ProjectorBase ( projector ),
00032     m_value ( projector.m_value ),
00033     m_axis ( projector.m_axis )
00034 {
00035 }
00036 
00037 LineProjector::~LineProjector ()
00038 {
00039   // nothing to be done
00040 }
00041 
00042 ProjectorBase * LineProjector::clone ()
00043 {
00044   return new LineProjector ( *this );
00045 }
00046 
00047 void
00048 LineProjector::
00049 addPointReps()
00050 {
00051 }
00052 bool
00053 LineProjector::
00054 isEmpty () const
00055 {
00056   return false;
00057 }
00058 
00059 Range
00060 LineProjector::
00061 dataRangeOn ( hippodraw::Axes::Type axis ) const
00062 {
00063   Range range;
00064   if ( m_axis == Axes::X ) {
00065     if ( axis == Axes::X ) {
00066       range.setRange ( m_value, m_value, m_value );
00067     }
00068     else if ( axis == Axes::Y ) {
00069       range = m_y_axis -> getRange ( false );
00070     }
00071   }
00072   else if ( m_axis == Axes::Y ) {
00073     if ( axis == Axes::X ) {
00074       range = m_x_axis -> getRange ( false );
00075     }
00076     else if ( axis == Axes::Y ) {
00077       range.setRange ( m_value, m_value, m_value );
00078     }
00079   }
00080 
00081   return range;
00082 }
00083 
00084 const std::string &
00085 LineProjector::
00086 getTitle() const
00087 {
00088   return m_title;
00089 }
00090 
00091 Range
00092 LineProjector::
00093 valueRange () const
00094 {
00095   Range range;
00096   if ( m_axis == Axes::X ) {
00097     range = m_y_axis -> getRange ( false );
00098   }
00099   else {
00100     range = m_x_axis -> getRange ( false );
00101   }
00102 
00103   return range;
00104 }
00105 
00106 double
00107 LineProjector::
00108 getPosOn ( hippodraw::Axes::Type axis ) const
00109 {
00110   double pos = DBL_MIN;
00111   if ( m_axis == Axes::X ) {
00112     if ( axis == Axes::X ) {
00113       pos = std::max ( pos, m_value );
00114     }
00115     else if ( axis == Axes::Y ) {
00116       const Range & range = m_y_axis -> getRange ( false );
00117       pos = range.pos();
00118     }
00119   }
00120   else if ( m_axis == Axes::Y ) {
00121     if ( axis == Axes::X ) {
00122       const Range & range = m_x_axis -> getRange ( false );
00123       pos = range.pos();
00124     }
00125     else if ( axis == Axes::Y ) {
00126       pos = std::max ( pos, m_value );
00127     }
00128   }
00129 
00130   return pos;
00131 }
00132 
00133 const std::string & 
00134 LineProjector::
00135 getXLabel() const
00136 {
00137   return m_title;
00138 }
00139 
00140 const std::string & 
00141 LineProjector::
00142 getYLabel( bool ) const
00143 {
00144   return m_title;
00145 }
00146 
00147 int
00148 LineProjector::
00149 getNumberOfEntries () const
00150 {
00151   return 1;
00152 }
00153 
00154 int
00155 LineProjector::
00156 getUnderflow () const
00157 {
00158   return -1;
00159 }
00160 
00161 int 
00162 LineProjector::
00163 getOverflow () const
00164 {
00165   return -1;
00166 }
00167 
00168 
00169 void LineProjector::prepareValues ()
00170 {
00171   m_proj_values = createNTuple ();
00172   fillProjectedValues ( m_proj_values );
00173 
00174   setDirty ( false );
00175 }
00176 
00177 namespace dp = hippodraw::DataPoint2DTuple;
00178 
00179 DataSource *
00180 LineProjector::
00181 createNTuple () const
00182 {
00183   unsigned int columns = dp::SIZE;
00184   NTuple * ntuple = new NTuple ( columns );
00185 
00186   const char * values[] = { "X", "Y", "nil", "nil" };
00187   vector < string > labels ( values, values + 4 );
00188   ntuple -> setLabels ( labels );
00189 
00190   fillProjectedValues ( ntuple );
00191 
00192   return ntuple;
00193 }
00194 
00195 void
00196 LineProjector::
00197 fillProjectedValues ( DataSource * ntuple, bool ) const
00198 {
00199   ntuple -> clear ();
00200 
00201   vector < double > row ( dp::SIZE );
00202   row[dp::XERR] = 0.;
00203   row[dp::YERR] = 0.;
00204 
00205   if ( m_axis == Axes::X ) { // vertical line
00206     const Range & range = m_y_axis -> getRange ( false );
00207     row[dp::X] = m_value;
00208     row[dp::Y] = range.low ();
00209     ntuple -> addRow ( row );
00210     row[dp::Y] = range.high ();
00211     ntuple -> addRow ( row );
00212   }
00213   else { // horizontal line
00214     const Range & range = m_x_axis -> getRange ( false );
00215     row[dp::X] = range.low ();
00216     row[dp::Y] = m_value;
00217     ntuple -> addRow ( row );
00218     row[dp::X] = range.high ();
00219     ntuple -> addRow ( row );
00220   }
00221 }
00222 
00223 void
00224 LineProjector::
00225 setValue ( double value )
00226 {
00227   m_value = value;
00228 }

Generated for HippoDraw Class Library by doxygen