00001 00012 // for truncation warning in debug mode 00013 #ifdef _MSC_VER 00014 #include "msdevstudio/MSconfig.h" 00015 #endif 00016 00017 #include "TupleCut.h" 00018 00019 #include "datasrcs/DataSource.h" 00020 00021 #include <algorithm> 00022 00023 using namespace hippodraw; 00024 00025 TupleCut:: 00026 TupleCut () 00027 : m_column ( 0 ), 00028 m_invert ( false ), 00029 m_enabled ( true ) 00030 { 00031 } 00032 00033 void 00034 TupleCut:: 00035 setEnabled ( bool yes ) 00036 { 00037 m_enabled = yes; 00038 } 00039 00040 bool 00041 TupleCut:: 00042 isEnabled () const 00043 { 00044 return m_enabled; 00045 } 00046 00047 bool TupleCut::acceptRow ( const DataSource * ntuple, 00048 unsigned int i ) const 00049 { 00050 bool shouldBeAccepted = true; 00051 00052 if ( m_enabled ) { 00053 double value = ntuple -> valueAt ( i, m_column ); 00054 bool included = m_range.includes ( value ); 00055 shouldBeAccepted = 00056 ( included && ! m_invert ) || 00057 ( !included && m_invert ); 00058 } 00059 00060 return shouldBeAccepted; 00061 } 00062 00063 void TupleCut::setColumn( unsigned int column ) 00064 { 00065 m_column = column; 00066 } 00067 00068 unsigned int 00069 TupleCut:: 00070 getColumn () const 00071 { 00072 return m_column; 00073 } 00074 00075 void 00076 TupleCut:: 00077 setRange ( const Range & range ) 00078 { 00079 m_range = range; 00080 } 00081 00082 const Range & 00083 TupleCut:: 00084 getRange ( ) const 00085 { 00086 return m_range; 00087 } 00088 00089 void 00090 TupleCut:: 00091 setInversion ( bool state ) 00092 { 00093 m_invert = state; 00094 } 00095 00096 bool 00097 TupleCut:: 00098 getInversion ( ) const 00099 { 00100 return m_invert; 00101 } 00102 00103 void TupleCut::toggleInverted() 00104 { 00105 m_invert = m_invert ? false : true; 00106 } 00107 00108 const std::string & 00109 TupleCut:: 00110 getLabel () const 00111 { 00112 return m_label; 00113 } 00114 00115 void 00116 TupleCut:: 00117 setLabel ( const std::string & label ) 00118 { 00119 m_label = label; 00120 }