From ba382c6f2d97696434bfa2081b4448c87a068b0d Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (laptop)" <j.wuttke@fz-juelich.de>
Date: Mon, 31 Jan 2011 10:37:10 +0100
Subject: [PATCH] prepare correct error bar plotting

---
 pub/src/axis.cpp     | 24 ++++++++++++++++++++++++
 pub/src/axis.h       |  2 ++
 pub/src/dualplot.cpp |  4 ++--
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/pub/src/axis.cpp b/pub/src/axis.cpp
index 79961925..d26cf557 100644
--- a/pub/src/axis.cpp
+++ b/pub/src/axis.cpp
@@ -214,6 +214,22 @@ double CAxis::value2plotcoord( double v ) const
 }
 
 
+//! Error bar in plot coords.
+
+double CAxis::value2ploterror( double v, double dv ) const
+{
+    if ( !finite() )
+        throw string( "undefined plot range" );
+    if ( logflag ) {
+        if( inf<0 || v<0 )
+            throw string( "negative value in log range" );
+        return log(v/inf) / log(sup/inf);
+    } else {
+        return (v-inf) / (sup-inf);
+    }
+}
+
+
 //! Map linear plot scale (0..1) to application scale (inf..sup).
 
 double CAxis::plotcoord2value( double c ) const
@@ -259,6 +275,14 @@ double CAxis::pc( double v ) const
 }
 
 
+//! Error bar in my PostScript units 0..10.
+
+double CAxis::pcerr( double v, double dv ) const
+{
+    return 10 * value2ploterror( v, dv );
+}
+
+
 //! Calculate appropriate division of plot axis.
 
 void CAxis::calc_ticks( int *ntack, double **tack, int *ntpt, double *ticklim)
diff --git a/pub/src/axis.h b/pub/src/axis.h
index a19c3767..22425d18 100644
--- a/pub/src/axis.h
+++ b/pub/src/axis.h
@@ -19,8 +19,10 @@ class CAxis {
     bool finite() const;
     bool contains( double val ) const;
     double value2plotcoord( double v ) const;
+    double value2ploterror( double v, double dv ) const;
     double plotcoord2value( double c ) const;
     double pc( double v ) const;
+    double pcerr( double v, double dv ) const;
     double inf_pos() const;
     void calc_ticks( int *ntack, double **tack, int *ntpt, double *ticklim )
         const;
diff --git a/pub/src/dualplot.cpp b/pub/src/dualplot.cpp
index 9128090f..320a0781 100644
--- a/pub/src/dualplot.cpp
+++ b/pub/src/dualplot.cpp
@@ -245,9 +245,9 @@ void CPlot::addSpec( bool as_line, int style_no,
     ps_accu.push_back( outlin );
     for (uint i=0; i<np; i++) {
         snprintf( outlin, mLin,
-                  "%7.3f%7.3f%7.3f t%c %% %14.7g wx %14.7g wy\n",
+                  "%6.3f %6.3f %6.3f t%c %% %13.7g wx %13.7g wy\n",
                   X.pc(xp[i]), Y.pc(yp[i]), 
-                  dyp.size() ? Y.pc(dyp[i]) : 0,
+                  dyp.size() ? Y.pcerr(yp[i],dyp[i]) : 0,
                   i==0 ? 'i' : i==np-1 ? 'f' : ' ',
                   xp[i], yp[i] );
         ps_accu.push_back( outlin );
-- 
GitLab