14 #include "msdevstudio/MSconfig.h"
49 using std::logic_error;
50 using std::runtime_error;
52 using namespace hippodraw;
72 vector < string > bindings;
73 bindings.push_back ( label );
88 addCut ( cut_plotter, plotter );
99 if ( cut_plotter == 0 ) {
100 string what (
"Argument was not a cut" );
101 throw runtime_error ( what );
106 unsigned int size = plotter -> getNumDataReps ();
107 for (
unsigned int i = 0; i <
size; i++ ) {
108 DataRep * targetrep = plotter -> getDataRep ( i );
109 if ( targetrep -> hasNTupleBindings () ) {
116 if ( targetrep -> hasNTupleBindings() ) {
123 const list < DataRep * > & targets = cp -> getCutTargets ();
124 list < DataRep * > :: const_iterator first = targets.begin();
125 while ( first != targets.end () ) {
134 addCuts (
const std::vector < PlotterBase * > & cut_list,
137 unsigned int size = cut_list.size ();
139 for (
unsigned int i = 0; i <
size; i++ ) {
142 if ( cut_plotter != plotter ) {
143 addCut ( cut_plotter, plotter );
153 const vector < TupleCut > & cuts = cut_plotter -> getCuts ();
154 assert ( cuts.empty () == false );
159 assert ( projector );
161 for (
unsigned int i = 0; i < cuts.size(); i++ ) {
162 projector->
addCut ( &cuts[i] );
173 const std::vector < std::string > & bindings,
174 const Color & color )
const
176 std::string datarepname, plottername;
177 int ndims = bindings.size();
181 datarepname =
"Histogram";
182 plottername =
"Cut1DPlotter";
184 else if( ndims == 2 )
186 datarepname =
"Color Plot";
187 plottername =
"Cut2DPlotter";
201 plotter -> addDataRep ( rep );
202 plotter -> addTupleCut ( rep );
204 plotter -> setNTuple ( ntuple );
205 plotter -> setAxisBinding ( bindings );
206 plotter -> setCutRangeFull ();
207 plotter -> setCutColor ( color );
217 if ( cut_plotter != 0 ) {
218 DataRep * rep = plotter -> selectedDataRep ();
221 cut_plotter -> removeFromTarget ( rep );
226 DataRep * rep = cplotter -> selectedDataRep ();
234 std::vector < CutPlotter * > & cut_list )
237 vector < PlotterBase * >::const_iterator first = plotter_list.begin();
238 while ( first != plotter_list.end() ) {
242 cut_list.push_back ( cutter );
247 const vector < const TupleCut * > &
255 if ( projector == 0 ) {
256 string what (
"CutController::getCutList: ");
257 what +=
"DataRep does not have NTupleProjector.";
258 throw std::logic_error ( what );
267 std::vector < PlotterBase * > & cut_list )
270 int reps = plotter -> getNumDataReps ();
271 for (
int i = 0; i < reps; i++ ) {
272 const DataRep * rep = plotter -> getDataRep ( i );
273 vector < PlotterBase * > cuts;
275 cut_list.insert ( cut_list.end(), cuts.begin(), cuts.end() );
282 std::vector < PlotterBase * > & cut_list )
287 Observable::ObserverList_t::const_iterator first = objects.begin();
289 while ( first != objects.end() ) {
292 if ( plotter != 0 ) {
293 const DataRep * rep = plotter -> getDataRep ( 0 );
294 if ( rep != datarep ) {
296 cut_list.push_back ( cp );
305 std::vector < PlotterBase * > & web )
308 vector < PlotterBase * > ::const_iterator first = plotters.begin ();
310 while ( first != plotters.end () ) {
321 PlotterList_t::iterator first = find ( web.begin (), web.end(),
323 if ( first == web.end () ) {
324 web.push_back ( plotter );
325 int index = plotter -> activePlotIndex ();
330 DataRep * rep = plotter -> getDataRep ( index );
331 vector < PlotterBase * > cut_list;
333 if ( cut_list.empty () == false ) {
344 PlotterList_t::iterator first = find ( web.begin(), web.end(),
346 if ( first == web.end () ) {
347 web.push_back ( cutter );
349 const list < DataRep * > & targets = cutter -> getCutTargets ();
350 list < DataRep * > ::const_iterator it = targets.begin ();
352 while ( it != targets.end () ) {
366 PlotterList_t::const_iterator first = cutters.begin ();
367 while ( first != cutters.end () ) {
380 Observable::ObserverList_t::const_iterator first = objects.begin();
382 while ( first != objects.end () ) {
386 DataRep * plotter_rep = cutter -> getDataRep ( 0 );
387 if ( plotter_rep == datarep ) {
394 if ( xyplotter != 0 ) {
406 std::vector < const TupleCut * > & cut_list )
410 #ifdef ITERATOR_MEMBER_DEFECT
413 vector < const ViewBase * >::const_iterator first = views.begin ();
414 while ( first != views.end() ) {
418 if ( plotter == 0 )
continue;
420 const vector < TupleCut > & cuts = plotter -> getCuts ();
421 for (
unsigned int i = 0; i < cuts.size(); i++ ) {
422 cut_list.push_back ( &cuts[i] );
430 const std::vector < const ViewBase * > & views )
432 #ifdef ITERATOR_MEMBER_DEFECT
435 list < ViewBase * > :: const_iterator first = targets.begin ();
436 while( first != targets.end () )
440 int number = plotter -> getNumDataReps ();
442 for(
int i = 0; i < number; i++ )
457 const std::vector < const ViewBase * > & views )
463 if ( projector == 0 )
return;
465 const vector < const TupleCut * > & cuts = projector->
getCutList ();
466 if ( cuts.empty() == true )
return;
468 #ifdef ITERATOR_MEMBER_DEFECT
471 vector < const TupleCut * > ::const_iterator first = cuts.begin ();
472 while ( first != cuts.end() ) {
482 const std::vector < const ViewBase * > & views )
484 #ifdef ITERATOR_MEMBER_DEFECT
487 vector < const ViewBase * >::const_iterator first = views.begin();
488 while ( first != views.end() )
494 if ( plotter == 0 )
continue;
496 const vector < TupleCut > & cuts = plotter -> getCuts ();
497 for (
unsigned int i = 0; i < cuts.size(); i++ ) {
498 if ( &cuts[i] == cut ) {
505 const vector < PlotterBase * > &
513 std::vector < PlotterBase * >::const_iterator it = plotters.begin();
515 for ( ; it != plotters.end(); ++it )
520 if ( cut_plotter != 0 ) {
522 if ( cut_tuple == ntuple ) {
536 m_zoom_pan.push_back ( make_pair( cut_plotter, axis ) );
538 m_zoom_pan.remove ( make_pair( cut_plotter, axis ) );
548 list< pair< PlotterBase *, Axes::Type > >::const_iterator iter;
551 if( iter -> first == cut_plotter && iter -> second == axis )
561 const std::vector < const TupleCut * > & cut_list )
563 acceptArray.clear ();
565 std::size_t
size = source -> rows ();
566 acceptArray.reserve ( size );
568 std::size_t num_cuts = cut_list.size ();
569 for (
unsigned int i = 0; i <
size; i++ )
575 for (
unsigned int j = 0; j < num_cuts; j++ )
578 accept = tc -> acceptRow ( source, i );
582 acceptArray.push_back ( accept );
586 template <
typename T >
604 const string colname = source -> getLabelAt( 0 );
605 const vector < double > & destcol = dest -> getColumn ( colname );
606 const vector < double > & srccol = source -> getColumn ( 0 );
607 const string colname_cut = colname +
"_cut";
608 std::size_t dest_size = dest -> rows ();
609 vector < double > dest_cut ( dest_size, 0. );
610 for ( std::size_t i = 0; i < srccol.size (); i++ ) {
611 const double & value = srccol[i];
612 vector < double > ::const_iterator first
613 = find ( destcol.begin(), destcol.end(),
615 std::size_t d = distance ( destcol.begin(), first );
618 dest -> addColumn ( colname_cut, dest_cut );