/*- * Copyright 2015 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package uk.ac.diamond.scisoft.analysis.peakfinding.peakfinders; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.DoubleDataset; import org.eclipse.january.dataset.Maths; import uk.ac.diamond.scisoft.analysis.fitting.functions.Add; import uk.ac.diamond.scisoft.analysis.fitting.functions.Gaussian; import uk.ac.diamond.scisoft.analysis.fitting.functions.Lorentzian; import uk.ac.diamond.scisoft.analysis.fitting.functions.Offset; public class PeakyData { private static Double xAxisMax = 30.; private static DoubleDataset xAxisRange = (DoubleDataset) DatasetFactory.createRange(0, xAxisMax, 0.01, Dataset.FLOAT64); public static Add makeGauPeak() { Add peak = new Add(); Gaussian g1 = new Gaussian(0.3785*xAxisMax, 0.0200*xAxisMax, 50.); peak.addFunction(g1); return peak; } public static Add makeGauLorPeaks() { Add peaks = new Add(); Gaussian g1 = new Gaussian(0.1080*xAxisMax, 0.0200*xAxisMax, 50.); Gaussian g2 = new Gaussian(0.4934*xAxisMax, 0.0520*xAxisMax, 47.); Gaussian g3 = new Gaussian(0.7780*xAxisMax, 0.0264*xAxisMax, 8.51); Lorentzian l1 = new Lorentzian(0.1840*xAxisMax, 0.0178*xAxisMax, 32.58); Lorentzian l2 = new Lorentzian(0.5716*xAxisMax, 0.0364*xAxisMax, 25.58); Lorentzian l3 = new Lorentzian(0.9504*xAxisMax, 0.0104*xAxisMax, 6.57); peaks.addFunction(g1); peaks.addFunction(g2); peaks.addFunction(g3); peaks.addFunction(l1); peaks.addFunction(l2); peaks.addFunction(l3); return peaks; } public static Add makeOffsetGauLorPeaks() { Offset offsetBkg = new Offset(); offsetBkg.setParameterValues(5.7); Add profileFn = makeGauLorPeaks(); profileFn.addFunction(offsetBkg); return profileFn; } public static DoubleDataset waveGen(DoubleDataset xData, Double fx, Double fs, Double scale){ xData = (DoubleDataset) Maths.multiply(xData, 2); xData = (DoubleDataset) Maths.multiply(xData, Math.PI); xData = (DoubleDataset) Maths.multiply(xData, fx/fs); xData = (DoubleDataset) Maths.multiply(xData, scale); xData = (DoubleDataset) Maths.sin(xData); return xData; } public static DoubleDataset intialisePeakData(DoubleDataset xData) { DoubleDataset wave1 = waveGen(xData, 2., 1., 1.); DoubleDataset wave2 = waveGen(xData, 20., 1., 0.6); DoubleDataset wave3 = waveGen(xData, 1., 2., 0.8); DoubleDataset yData = wave1.iadd(wave2).iadd(wave3); return yData; } //TODO: use the add for functions to gneerate wave peaks private DoubleDataset makeSinusoidalWavePeakData(DoubleDataset xData){ DoubleDataset wave1 = waveGen(xData, 2., 1., 1.); DoubleDataset wave2 = waveGen(xData, 20., 1., 0.6); DoubleDataset wave3 = waveGen(xData, 1., 2., 0.8); DoubleDataset yData = wave1.iadd(wave2).iadd(wave3); return yData; } public static Double getxAxisMax() { return xAxisMax; } public static void setxAxisMax(Double xAxisMax) { PeakyData.xAxisMax = xAxisMax; PeakyData.xAxisRange = (DoubleDataset) DatasetFactory.createRange(0, xAxisMax, 0.01, Dataset.FLOAT64); } public static DoubleDataset getxAxisRange() { return xAxisRange; } }