Line data Source code
1 : /** 2 : Bojan Nikolic <bojan@bnikolic.co.uk> 3 : 4 : \file paramctr.hxx 5 : Renamed to paramctr.h 2023 6 : 7 : Control of parameters 8 : */ 9 : 10 : #ifndef _BNMIN_PARAMCTR_HXX__ 11 : #define _BNMIN_PARAMCTR_HXX__ 12 : 13 : #include <string> 14 : 15 : #include "bnmin_main.h" 16 : 17 : namespace Minim { 18 : 19 : /** A class to describe a model parameter 20 : */ 21 : template<class T> 22 : class ParamCtr 23 : { 24 : public: 25 : /// Pointer to the actual value being controlled 26 : T * p; 27 : 28 : /// A name for this parameter 29 : std::string name; 30 : 31 : /// If false the parametar is excluded from fitting 32 : bool dofit; 33 : 34 : /// A comment explaining what the parametar does 35 : std::string comment; 36 : 37 0 : ParamCtr(T* pp, 38 : const std::string &pname, 39 : bool pdofit, 40 : const std::string &pcomment): 41 0 : p(pp), 42 0 : name(pname), 43 0 : dofit(pdofit), 44 0 : comment(pcomment) 45 : { 46 0 : } 47 : 48 : /** Default constructor for interoperation with stl containers 49 : */ 50 : ParamCtr(void): 51 : p(NULL), 52 : name(""), 53 : dofit(false), 54 : comment("") 55 : { 56 : } 57 : 58 0 : T getp(void) 59 : { 60 0 : return *p; 61 : } 62 : 63 0 : void setp(T pp) 64 : { 65 0 : *p = pp; 66 0 : } 67 : 68 : /// Returns the name as a c-type string 69 0 : const char * getname(void) 70 : { 71 0 : return name.c_str(); 72 : } 73 : 74 : /*! Returns the comment as a c-type string */ 75 : const char * getcomment(void) 76 : { 77 : return comment.c_str(); 78 : } 79 : }; 80 : 81 : /// A floating point double parameter 82 : typedef ParamCtr<double> DParamCtr; 83 : 84 : class ParamError: 85 : public BaseErr 86 : { 87 : public: 88 : /// Use only if could not establish the parameter 89 0 : ParamError(const std::string &msg): 90 0 : BaseErr("Parameter not identified: " +msg) 91 0 : {} 92 : 93 : ParamError(const DParamCtr&p, 94 : const std::string &msg): 95 : BaseErr(p.name+msg) 96 : {} 97 : 98 0 : virtual ~ParamError() throw() 99 0 : {} 100 : 101 : }; 102 : 103 : 104 : 105 : } 106 : 107 : #endif // _BNMIN_PARAMCTR_HXX__