From 9ababd6b8632f4deb7bb93ade69a6e55bec6f64e Mon Sep 17 00:00:00 2001
From: marco <marco@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Mon, 30 Aug 2010 07:30:33 +0000
Subject: [PATCH] fix data viewer selection for 3 dimensional images

The selection was ignoring the active slab and as a result, the
normalization did not work as expected.

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2675 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/base/pymod/stutil.py                          | 10 ++++++++++
 modules/gui/src/data_viewer/data_viewer_panel_base.cc |  4 ++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/modules/base/pymod/stutil.py b/modules/base/pymod/stutil.py
index 2f64beaef..75bb92248 100644
--- a/modules/base/pymod/stutil.py
+++ b/modules/base/pymod/stutil.py
@@ -93,3 +93,13 @@ def Correl(xs, ys):
   sigma_x=math.sqrt(sigma_x/len(xs))
   sigma_y=math.sqrt(sigma_y/len(ys))  
   return cross_term/((len(xs)-1)*sigma_x*sigma_y)
+
+def Histogram(xs, bounds, num_bins):
+  bins=[0 for i in range(num_bins)]
+  d=1.0*num_bins/(bounds[1]-bounds[0])
+  for x in xs:
+    index=int((x-bounds[0])*d)
+    if index>num_bins-1 or index<0:
+      continue
+    bins[index]+=1
+  return bins
diff --git a/modules/gui/src/data_viewer/data_viewer_panel_base.cc b/modules/gui/src/data_viewer/data_viewer_panel_base.cc
index 0fb9c0c5b..5af82c954 100644
--- a/modules/gui/src/data_viewer/data_viewer_panel_base.cc
+++ b/modules/gui/src/data_viewer/data_viewer_panel_base.cc
@@ -554,9 +554,9 @@ void DataViewerPanelBase::mouseMoveEvent(QMouseEvent* event)
     Point max_pos=WinToPoint(vsize.width(),vsize.height());
     Point min_pos=WinToPoint(0,0);
     selection_=Extent(Point(std::max(min_pos[0],std::min(drag_start[0],mouse_pos[0])),
-                            std::max(min_pos[1],std::min(drag_start[1],mouse_pos[1]))),
+                            std::max(min_pos[1],std::min(drag_start[1],mouse_pos[1])), slab_),
                       Point(std::max(drag_start[0],std::min(max_pos[0],mouse_pos[0])),
-                            std::max(drag_start[1],std::min(max_pos[1],mouse_pos[1]))));
+                            std::max(drag_start[1],std::min(max_pos[1],mouse_pos[1])), slab_));
     if(selection_mode_>0){
       Size s=selection_.GetSize();
       int minsize=std::min<int>(s[0],s[1]);
-- 
GitLab