Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

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

Generated for HippoDraw-1.14.8.5 by doxygen 1.4.3