13 #include "msdevstudio/MSconfig.h"
29 using namespace hippodraw;
33 using std::max_element;
34 using std::min_element;
46 m_data( binner.m_data ),
47 m_variance( binner.m_variance ),
48 m_min_entries ( binner.m_min_entries )
65 m_data.resize ( number + 2 );
74 return *min_element (
m_data.begin() + 1,
m_data.end ( ) - 1 );
79 return *max_element (
m_data.begin () + 1,
m_data.end () - 1 );
100 int retval = static_cast <
int > (
m_data[i+1] );
107 return static_cast <
int > (
m_data[0] );
112 return static_cast <
int > ( *(
m_data.end()-1) );
118 if ( i > 0 && i <= static_cast < int > (
m_variance.size() ) ) {
141 namespace dp = hippodraw::DataPoint2DTuple;
154 std::vector<double>::const_iterator dit =
m_data.begin() + 1;
155 std::vector<double>::const_iterator vit =
m_variance.begin();
156 std::vector<double>::const_iterator first_non_zero =
m_data.begin() + 1;
157 std::vector<double>::const_iterator last_non_zero =
m_data.end() - 2;
161 while ( (*first_non_zero) == 0 ) {
164 while ( (*last_non_zero) == 0 ) {
169 swap ( first_non_zero, last_non_zero );
176 if ( last_non_zero < first_non_zero ) {
177 for (;dit !=
m_data.end()-1; dit ++ ) {
179 double half_width = 0.5 * width;
180 double y = factor * ( *dit / width );
181 double yerr = factor * ( sqrt( *vit++ ) / width );
188 ntuple -> addRow ( row );
196 for ( ; dit != first_non_zero; dit++ ) {
198 double half_width = 0.5 * width;
199 double y = factor * ( *dit / width );
200 double yerr = factor * ( sqrt( *vit++ ) / width );
207 ntuple -> addRow ( row );
214 for( ; dit != last_non_zero+1; dit++ ) {
216 double entries = *dit;
218 double var = sqrt(*vit);
220 if (dit == last_non_zero)
break;
227 double half_width = 0.5 * width;
229 double y = factor * ( entries / width );
230 double yerr = factor * ( var / width );
235 unsigned int numOfRows = ntuple->
rows();
236 unsigned int lastIndex = numOfRows-1;
237 vector <double> lastRow = ntuple -> getRow( lastIndex );
239 x = lastRow[
dp::X] + half_width;
243 / ( width + lastRow[dp::XERR] * 2 ) ;
246 ntuple -> eraseRow ( lastIndex );
254 ntuple -> addRow ( row );
260 for ( ; dit !=
m_data.end()-1; dit++ ) {
262 double half_width = 0.5 * width;
263 double y = factor * ( *dit / width );
264 double yerr = factor * ( sqrt( *vit++ ) / width );
271 ntuple -> addRow ( row );
285 unsigned int size = ntuple -> rows ();
288 for (
unsigned int i = 0; i <
size; i++ ) {
289 const vector < double > & row = ntuple -> getRow ( i );