/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.jlab.groot.math;

/**
 *
 * @author gavalian
 */
public class UserParameter {
    
    String pName;
    double pValue;
    double pMin;
    double pMax;
    double pError;
    double pStep = 0.0001;
    
    boolean isRangeLimited = false;
    
    public UserParameter()
    {
        pName  = "p0";
        pValue = 0.;
        //pMin   = -Double.MAX_VALUE/4000.0;
        //pMax   = Double.MAX_VALUE/4000.0;
        pMin = -1.0e10;
        pMax =  1.0e10;
        pError = 0.0;
    }
    
    public UserParameter(String name, double value)
    {
        pName  = name;
        pValue = value;
        pMin   = -1e10;
        pMax   = 1e10;
        pError = 0.0;
    }
    
    public UserParameter(String name, double value, double min, double max)
    {
        pName  = name;
        pValue = value;
        pMin   = min;
        pMax   = max;
        pError = 0.0;
    }
    
    public void setStep(double step){ this.pStep = step;}
    public void setError(double error){ pError = error;}
    public void setName(String name) { pName = name;}
    public void setLimits(double min, double max){pMin = min; pMax=max; isRangeLimited = true;}
    public boolean isLimited(){ return this.isRangeLimited;}
    
    public void setFree(){
        isRangeLimited = false;
        pMin   = -1e10;
        pMax   = 1e10;
    }
    
    public void multLimits(double factor)
    {
        double range  = Math.abs(pMax-pMin);
        double median = pMin + Math.abs(pMax-pMin)/2.;
        double pMin = median - range*factor;
        double pMax = median + range*factor;
    }
    
    public void set(double value, double min, double max){
        this.setValue(value);
        this.setLimits(min, max);
    }
    
    public void setValue(double value) { pValue = value; };
    public double value(){ return pValue;}
    public String name() { return pName;}
    public double min()  { return pMin;}
    public double max()  { return pMax;}
    public double error() { return pError;}
    
    public void setRandom()
    {
        pValue = pMin + Math.random()*Math.abs(pMax-pMin);
    }
    
    public double getStep(){
        return this.pStep;
    }
    
    public double getRandom()
    {
        return pMin + Math.random()*Math.abs(pMax-pMin);
    }

    public UserParameter getCopy(){
        UserParameter par = new UserParameter(name(),value());
        if(this.isRangeLimited==true) par.setLimits(pMin, pMax);
        return par;
    }
    
    @Override
    public String toString()
    {
        StringBuilder str = new StringBuilder();
        str.append(String.format("%18s : %18e %18e %18e %18e", this.name(),
                this.value(),this.error(),this.min(),this.max()));
        return str.toString();
    }
}

 

Ads help maintain this website.