Index: trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/linearregression.cpp
===================================================================
--- trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/linearregression.cpp	(revision 4488)
+++ trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/linearregression.cpp	(revision 4489)
@@ -18,4 +18,5 @@
 #include "linearregression.h"
 #include <math.h>
+#include <qstring.h>
 
 LinearRegression::LinearRegression()
@@ -33,6 +34,8 @@
 	m_dSXX = 0.0;
 	m_dSY  = 0.0;
+	m_dSYY = 0.0;
 	m_dSXY = 0.0;
 	m_iNum = 0;
+	m_zReversed = false;
 }
 
@@ -45,15 +48,28 @@
 void LinearRegression::addPoint( double p_dX, double p_dY )
 {
+	if( p_dX < 0. && p_dY < 0. )
+		return;
+
+	if( m_iNum == 0)
+		qDebug( "Befor first point fit has Axis: %f   Slope: %f   with %d points", getAxis(), getSlope(), m_iNum );
+	qDebug( "Adding Point %f %f", p_dX, p_dY );
 	m_dSX += p_dX;
 	m_dSXX += ( p_dX * p_dX );
 	m_dSY += p_dY;
+	m_dSYY += ( p_dY * p_dY );
 	m_dSXY += ( p_dX * p_dY );
 	m_iNum++;
+	qDebug( "Fit has Axis: %f   Slope: %f   with %d points", getAxis(), getSlope(), m_iNum );
 }
 
-double LinearRegression::getAxis()
+double LinearRegression::getAxis( )
 {
-	if( m_iNum > 0 )
-		return ( (m_dSY / m_iNum) - getSlope() * (m_dSX / m_iNum) );
+	if( m_iNum > 1 )
+	{
+		if( m_zReversed )
+			return ( (m_dSX - getSlope() * m_dSY) / m_iNum );
+		else
+			return ( (m_dSY - getSlope() * m_dSX) / m_iNum );
+	}
 	else
 		return 0.0;
@@ -63,8 +79,13 @@
 {
 	double dSlope;
-	if( m_iNum > 0 )
+	if( m_iNum > 1 )
 	{
-		dSlope = m_dSXY - ( m_dSX * m_dSY ) / m_iNum;
-		dSlope /= m_dSXX - ( m_dSX * m_dSX / m_iNum );
+		double help1 = ((double) m_iNum) * m_dSXY - m_dSX * m_dSY;
+		double help2 = ((double) m_iNum) * m_dSXX - m_dSX * m_dSX;
+		double help3 = ((double) m_iNum) * m_dSYY - m_dSY * m_dSY;
+
+		dSlope = help1 / help2;
+		if( m_zReversed )
+			dSlope = help1 / help3;	
 	}
 	else
@@ -72,2 +93,18 @@
 	return dSlope;
 }
+
+double LinearRegression::getR()
+{
+	double dR;
+	if( m_iNum > 1 )
+	{
+		double help1 = ((double) m_iNum) * m_dSXY - m_dSX * m_dSY;
+		double help2 = ((double) m_iNum) * m_dSXX - m_dSX * m_dSX;
+		double help3 = ((double) m_iNum) * m_dSYY - m_dSY * m_dSY;
+
+		dR = help1 / sqrt( help2 * help3 );
+	}
+	else
+		dR = 0.0;
+	return dR;
+}
Index: trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/linearregression.h
===================================================================
--- trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/linearregression.h	(revision 4488)
+++ trunk/MagicSoft/AMC/activemirrorcontrol/activemirrorcontrol/linearregression.h	(revision 4489)
@@ -35,4 +35,7 @@
 	double getAxis();
 	double getSlope();
+	double getR();
+	const bool getReversed () const { return m_zReversed; }
+	void setReversed ( bool p_zReversed ) { m_zReversed = p_zReversed; }
 
 private:
@@ -41,5 +44,7 @@
 	double m_dSXY;				// Sum over all X * Y
 	double m_dSXX;				// Sum over all X^2
+	double m_dSYY;				// Sum over all Y^2
 	int m_iNum;
+  bool	m_zReversed;
 };
 
