From 103283400a103e5ff0d87dc482b2e537f5a888b2 Mon Sep 17 00:00:00 2001 From: nemu Date: Thu, 24 Feb 2011 07:44:27 +0000 Subject: [PATCH] improved parameter representation in musrview (MUSR-167) --- src/classes/PMusrCanvas.cpp | 95 +++++++++++++++++++++++++++++++++++-- src/include/PMusrCanvas.h | 1 + 2 files changed, 91 insertions(+), 5 deletions(-) diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 05eea2eb..762b650d 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -446,8 +446,12 @@ void PMusrCanvas::UpdateParamTheoryPad() yoffset = 0.05; // add parameters to the pad + UInt_t accuracy = 6; + Char_t accStr[32]; for (UInt_t i=0; iCalculates the needed accuracy of the parameter value based on the given errors. + * + * return: + * - needed accuracy + * + * \param param fit parameter with its additional informations, like errors etc. + */ +UInt_t PMusrCanvas::GetNeededAccuracy(PMsrParamStructure param) +{ + const UInt_t precLimit = 6; + UInt_t decimalPoint = 0; + UInt_t accuracy = 6; + + if (param.fStep == 0.0) { // check if fit parameter is a constant, i.e. step==0 + char str[128]; + + sprintf(str, "%lf", param.fValue); + + // find decimal point + for (UInt_t i=0; i=0; i--) { + if (str[i] != '0') { + if ((i-decimalPoint) < precLimit) + accuracy = i-decimalPoint; + else + accuracy = precLimit; + break; + } + } + + } else if ((param.fStep != 0) && !param.fPosErrorPresent) { // check if no positive error is given step!=0 but fPosErrorPresent==false + + for (UInt_t i=0; i accuracy) + accuracy = accuracy2; + + if (accuracy+1 <= precLimit) + accuracy += 1; + } + + return accuracy; +} diff --git a/src/include/PMusrCanvas.h b/src/include/PMusrCanvas.h index 114364cd..67a786ea 100644 --- a/src/include/PMusrCanvas.h +++ b/src/include/PMusrCanvas.h @@ -320,6 +320,7 @@ class PMusrCanvas : public TObject, public TQObject virtual void SaveDataAscii(); virtual Bool_t IsScaleN0AndBkg(); + virtual UInt_t GetNeededAccuracy(PMsrParamStructure param); ClassDef(PMusrCanvas, 1) };