//**************************************************************************//
//* FRIDA: fast reliable interactive data analysis                         *//
//* (C) Joachim Wuttke 1990-, v2(C++) 2001-                                *//
//* http://apps.jcns.fz-juelich.de/frida                                   *//
//**************************************************************************//

//! \file  axis.hpp
//! \brief CAxis: One axis of a coordinate frame.

//! One axis of a coordinate frame, for use in plotting.

class CAxis {
 public:
    string name;     //!< usually "x" or "y"
    double inf;      //!< infimum: lower plot limit
    double sup;      //!< supremum: upper plot limit
    bool   logflag;  //!< is logarithmic ?
    bool   force;    //!< force points into range ?

    CAxis( const string _name, bool _log ) :
        name(_name), logflag(_log), force(false) { setAuto(); }

    void setLog( bool _log );

    void setAuto();
    void setLimits( double _inf, double _sup );
    void setRoundedLimits( double _inf, double _sup );
    void ask_and_set( const string& quest );

    string str() const;
    string info() const;
    bool finite() const;
    bool contains( double val ) const;
    bool close_enough( double v1, double v2, double tol ) const;
    double value2plotcoord( double v ) const;
    double value2ploterror( double v, double dv ) const;
    void set_xgrid( vector<double>& x, int n ) const;
    double pc( double v ) const;
    double pcerr( double v, double dv ) const;
    void calc_ticks( vector<double>& Tacks, int *ntpt, double *ticklim )
        const;
};