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