13 #include "msdevstudio/MSconfig.h"
30 #ifdef ITERATOR_MEMBER_DEFECT
36 using std::max_element;
38 using std::min_element;
39 using std::runtime_error;
44 using namespace hippodraw;
46 NTupleProjector::NTupleProjector (
unsigned int columns )
49 m_columns ( columns, UINT_MAX ),
58 m_is_valid ( projector.m_is_valid ),
59 m_binding_options ( projector.m_binding_options ),
60 m_bindings ( projector.m_bindings),
61 m_columns ( projector.m_columns ),
62 m_ntuple ( projector.m_ntuple ),
63 m_min_bindings ( projector.m_min_bindings )
105 vector< string >::const_iterator first
110 std::string what = std::string(
"NTupleProjector::indexOfBindingOption: ")
111 + std::string(
"no such binding option: ") + axis;
112 throw runtime_error( what );
115 #ifdef DISTANCE_DEFECT
122 const std::vector < std::string > &
128 for (
size_t i = 0; i <
size; i++ ) {
134 const string label =
"nil";
164 if ( cut_list.empty() == false ) {
165 unsigned int size = cut_list.size();
168 const TupleCut * cut = cut_list[j++];
185 if ( label ==
"nil" ) {
189 m_ntuple -> throwIfInvalidLabel ( label );
198 const std::string & label )
209 size_t size = labels.size();
212 string what (
"NTupleProjector::setAxisBindings: " );
213 what +=
"insufficient number of labels";
214 throw runtime_error ( what );
218 for (
unsigned int i = 0; i < cols; i++ ) {
220 const string & label = labels[i];
224 const string nil (
"nil" );
233 assert ( ntuple != 0 );
268 assert ( !( data < 0 ) &&
270 assert ( !( error < 0 ) &&
277 for (
unsigned int row = 0; row <
size; row++ ) {
278 double value =
m_ntuple -> valueAt ( row, data );
279 double err =
m_ntuple -> valueAt ( row, error );
280 lo = min ( value - err, lo );
281 hi = max ( value + err, hi );
286 return Range ( lo, hi, pos );
294 assert ( !( column < 0 ) &&
298 bool isValid =
m_ntuple -> fillRange ( column, range );
306 assert ( !( data < 0 ) &&
308 assert ( !( error < 0 ) &&
311 double pos = DBL_MAX;
314 for (
unsigned int row = 0; row <
size; row++ ) {
315 double value =
m_ntuple -> valueAt ( row, data );
316 double err =
m_ntuple -> valueAt ( row, error );
318 double x = value - err;
320 pos = min ( x, pos );
323 if ( value != 0.0 ) pos = min ( 0.1 * value, pos );
336 assert ( !( column < 0 ) &&
339 double pos = DBL_MAX;
343 for (
unsigned int row = 0; row <
size; row++ ) {
344 double value =
m_ntuple -> valueAt ( row, column );
345 if ( value < pos && value > 0.0 ) pos = value;
358 CutList_t ::iterator first
376 for (
unsigned int i = 0; i <
size; i++ ) {
408 for (
unsigned int i = 0; i <
size; i++ ) {
412 if ( i == 0 ) axis_model =
m_x_axis;
413 else if ( i == 1 ) axis_model =
m_y_axis;
414 else if ( i == 2 ) axis_model =
m_z_axis;
415 if ( axis_model == 0 )
break;
419 double value =
m_ntuple -> valueAt ( row, column );
420 if ( range.
excludes ( value ) )
return false;
475 if ( tuple -> empty () ) {
486 for (
unsigned int i = 0; i <
size; i++ ) {
489 double value =
m_ntuple -> valueAt ( i, column );
498 return (sum / number);
520 ntuple -> reserve ( size );
530 for (
unsigned int i = 0; i <
size; i++ ) {
532 const vector < double > & row =
m_ntuple -> getRow ( i );
533 ntuple -> addRow ( row );
551 std::vector<double> & columnData)
const {
556 for (
size_t i = 0 ; i < nrows ; i++ ) {
558 columnData.push_back( coldata[i] );
568 vector < const TupleCut * > cut_list;
569 for (
unsigned int i = 0; i < tuple_cuts.size(); i++ ) {
570 const TupleCut & cut = tuple_cuts[i];
571 cut_list.push_back ( & cut );