/*
 *ExponentialCoreNotNorm .java
 *
 * Created on October 5, 2002, 1:14 PM
 */

package hep.aida.ref.function;
import jas.hist.Handle;

import java.awt.Cursor;

import org.freehep.util.images.ImageHandler;

/**
 *
 * @author The FreeHEP team @ SLAC
 */

public class MoyalCoreNotNorm extends FunctionCore {
        
    protected boolean providesNormalization;
    private static double c = Math.sqrt(2*Math.PI*Math.E);
    private static double d = Math.sqrt(  Math.exp(-(1+1/Math.E))/(2*Math.PI) );
    
    
    public MoyalCoreNotNorm(String str) {
        super(1, 3, new double[] {1., 1., 1.});
        setTitle("MoyalCoreNotNorm::"+str);
        providesNormalization = false;
        
        String[] names = new String[] { "amplitude","mean", "sigma" };
        setParameterNames(names);
    }
    
    public MoyalCoreNotNorm(String str, double[] pVal) {
        super(1, 3, pVal);
        setTitle("MoyalCoreNotNorm::"+str);
        providesNormalization = false;
        
        String[] names = new String[] { "amplitude","mean", "sigma" };
        setParameterNames(names);
    }
    
    public double functionValue(double[] var) {
        double v = var[0];
        double n = p[0];
        double x0 = p[1];
        double s  = p[2];
        double lambda = (v-x0)/s;
        double arg = lambda + Math.exp( -1.*lambda );
        double num = Math.exp( -1.*arg );
        return n*Math.sqrt( num/(2*Math.PI) );
    }
    
    public boolean providesGradient() { return false; }
    public double[] gradient(double[] var)  {
        throw new UnsupportedOperationException();
    }
        
    public boolean providesParameterGradient() { return false; }
    public double[] parameterGradient(double[] var) {
        throw new UnsupportedOperationException();
    }
    
    public boolean providesNormalization() { return providesNormalization; }
    
    public double normalizationAmplitude(double[] xMin, double[] xMax) {
        throw new UnsupportedOperationException(title() + " *****  Can not calculate normalization for a not normalized function");
    }

    
    
    
    public Handle[] getHandles(double xLow, double xHigh, double yLow, double yHigh) {
        Handle[] result = new Handle[2];
        
        result[0] = new Handle() {
            public void moveTo(double x, double y) {
                p[1] = x;
                p[0] = y*c;
                notifyCoreChanged();
            }
            public double getX() {
                return p[1];
            }
            public double getY() {
                return p[0]/c;
            }
            public Cursor cursor() {
                return ImageHandler.getBestCursor("moveCursor.png",MoyalCoreNotNorm.class,0,0);
            }
        };

        result[1] = new Handle() {
            public void moveTo(double x, double y) {
                p[2] = x-p[1];
                p[0] = y/d;
                notifyCoreChanged();
            }
            public double getY() {
                return p[0]*d;
            }
            public double getX() {
                return p[1]+p[2];
            }
            public Cursor cursor() {
                return ImageHandler.getBestCursor("moveCursor.png",MoyalCoreNotNorm.class,0,0);
            }
        };
        return result;
    }
}

 

Ads help maintain this website.