[no commit message]
This commit is contained in:
parent
cd8562abc0
commit
94dba3b02e
@ -7,10 +7,6 @@ mainClassName = mainClass
|
||||
|
||||
description = """The main head of all numass projects"""
|
||||
|
||||
ext{
|
||||
defaultNumassPath = 'D:\\loss-2011\\'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile group: 'commons-cli', name: 'commons-cli', version:'1.+'
|
||||
compile group: 'commons-io', name: 'commons-io', version:'2.+'
|
||||
@ -20,22 +16,12 @@ dependencies {
|
||||
compile project(':numass-storage')
|
||||
}
|
||||
|
||||
task runNumass(dependsOn: classes, type : JavaExec){
|
||||
main mainClass
|
||||
task workbench(dependsOn: classes, type: JavaExec){
|
||||
main 'inr.numass.workbench.Workbench'
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
workingDir defaultNumassPath
|
||||
description "run Main method in the current numass working directory"
|
||||
description "start visual numass workbench"
|
||||
group "numass"
|
||||
}
|
||||
|
||||
task debugNumass(dependsOn: classes, type: JavaExec) {
|
||||
main mainClass
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
workingDir defaultNumassPath
|
||||
ignoreExitValue = true
|
||||
debug = true
|
||||
description "debug Main method in the current numass working directory"
|
||||
group "numass"
|
||||
}
|
||||
|
||||
task listActions(dependsOn: classes, type: JavaExec) {
|
||||
|
0
numass-main/nbproject/project.properties
Normal file
0
numass-main/nbproject/project.properties
Normal file
@ -1,94 +0,0 @@
|
||||
/*
|
||||
* Copyright 2015 Alexander Nozik.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package inr.numass.scripts
|
||||
|
||||
import hep.dataforge.datafitter.ParamSet
|
||||
import hep.dataforge.io.FittingIOUtils
|
||||
import hep.dataforge.io.PrintFunction
|
||||
import hep.dataforge.maths.NamedDoubleArray
|
||||
import hep.dataforge.maths.NamedDoubleSet
|
||||
import hep.dataforge.maths.NamedMatrix
|
||||
import hep.dataforge.plots.PlotFrame
|
||||
import hep.dataforge.plots.data.PlottableFunction
|
||||
import hep.dataforge.plots.jfreechart.JFreeChartFrame
|
||||
import inr.numass.actions.ShowLossSpectrumAction;
|
||||
import inr.numass.models.ExperimentalVariableLossSpectrum
|
||||
import inr.numass.models.LossCalculator
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction
|
||||
|
||||
|
||||
NamedDoubleSet transformOldMeans(NamedDoubleSet old){
|
||||
String[] names = ["exPos", "ionPos", "exW", "ionW", "exIonRatio"];
|
||||
double[] values = new double[5];
|
||||
values[0] = old.getValue("loss_pos1");
|
||||
values[1] = old.getValue("loss_pos2");
|
||||
values[2] = old.getValue("loss_w1");
|
||||
values[3] = old.getValue("loss_w2");
|
||||
values[4] = old.getValue("loss_A1") / old.getValue("loss_A2");
|
||||
|
||||
return new NamedDoubleArray(names, values);
|
||||
|
||||
}
|
||||
|
||||
ParamSet transformOldParams(ParamSet old){
|
||||
String[] names = ["exPos", "ionPos", "exW", "ionW", "exIonRatio"];
|
||||
ParamSet res = new ParamSet(names);
|
||||
|
||||
res.setPar("exPos", old.getValue("loss_pos1"), old.getError("loss_pos1"));
|
||||
res.setPar("ionPos", old.getValue("loss_pos2"), old.getError("loss_pos2"));
|
||||
res.setPar("exW", old.getValue("loss_w1"), old.getError("loss_w1"));
|
||||
res.setPar("ionW", old.getValue("loss_w2"), old.getError("loss_w2"));
|
||||
|
||||
double ratioValue = old.getValue("loss_A1") / old.getValue("loss_A2");
|
||||
|
||||
double a1RelErr = old.getError("loss_A1") / old.getValue("loss_A1");
|
||||
double a2RelErr = old.getError("loss_A2") / old.getValue("loss_A2");
|
||||
double ratioErr = Math.sqrt(a1RelErr*a1RelErr + a2RelErr*a2RelErr)*ratioValue;
|
||||
res.setPar("exIonRatio", ratioValue, ratioErr);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
PrintWriter out = new PrintWriter(System.out);
|
||||
|
||||
String name = "log14_h2_new"
|
||||
//String name = "log18_long"
|
||||
//String name = "log25_long"
|
||||
|
||||
OldFitResultReader reader = new OldFitResultReader();
|
||||
reader.readFile(new File("C:\\Users\\darksnake\\Dropbox\\Numass\\Analysis\\loss-2014_november\\old_loss\\results\\final\\${name}.txt"));
|
||||
|
||||
double threshold = 17d;
|
||||
|
||||
ParamSet means = transformOldParams (reader.getParamSet());
|
||||
|
||||
double ionRatio = ShowLossSpectrumAction.calcultateIonRatio(means, threshold);
|
||||
NamedMatrix cov = NamedMatrix.diagonal(means.getParErrors());
|
||||
double ionRatioError = ShowLossSpectrumAction.calultateIonRatioError(name, means, cov, threshold);
|
||||
|
||||
println String.format("The ionization ratio (using threshold %f) is %f%n", threshold, ionRatio);
|
||||
println String.format("The ionization ratio standard deviation (using threshold %f) is %f%n", threshold, ionRatioError);
|
||||
println "*** FIT RESULT ***"
|
||||
|
||||
FittingIOUtils.printParamSet(out, means);
|
||||
|
||||
println means.toString();
|
||||
|
||||
UnivariateFunction scatterFunction = LossCalculator.getSingleScatterFunction(means);
|
||||
PlotFrame frame = JFreeChartFrame.drawFrame("Differential scattering crossection for "+name, null);
|
||||
frame.add(new PlottableFunction("Cross-section", null, scatterFunction, 0, 100, 1000));
|
||||
|
||||
PrintFunction.printFunctionSimple(out, scatterFunction, 0, 100, 500);
|
@ -1,110 +0,0 @@
|
||||
/*
|
||||
* Copyright 2015 Alexander Nozik.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package inr.numass.scripts
|
||||
|
||||
import hep.dataforge.datafitter.ParamSet
|
||||
import hep.dataforge.maths.NamedDoubleArray
|
||||
import hep.dataforge.maths.NamedDoubleSet
|
||||
import hep.dataforge.maths.NamedMatrix
|
||||
import java.util.regex.Pattern
|
||||
import org.apache.commons.math3.linear.Array2DRowRealMatrix
|
||||
import org.apache.commons.math3.linear.RealMatrix
|
||||
import java.util.Scanner
|
||||
import java.util.regex.Matcher
|
||||
|
||||
/**
|
||||
*
|
||||
* @author darksnake
|
||||
*/
|
||||
class OldFitResultReader {
|
||||
private static Pattern meanPattern = ~/\"(?<name>.*)\"\s*:\s*(?<value>[\d.]*)\s*/;
|
||||
|
||||
private NamedDoubleSet means;
|
||||
private RealMatrix covariance;
|
||||
|
||||
void readMeans(String input){
|
||||
Scanner scan = new Scanner(input);
|
||||
List<String> names = new ArrayList<>();
|
||||
List<Double> values = new ArrayList<>();
|
||||
while(scan.hasNextLine()){
|
||||
String nextLine = scan.nextLine();
|
||||
if(!nextLine.isEmpty()){
|
||||
Matcher match = meanPattern.matcher(nextLine);
|
||||
match.matches();
|
||||
names << match.group("name");
|
||||
values << Double.parseDouble(match.group("value"));
|
||||
}
|
||||
}
|
||||
this.means = new NamedDoubleArray(names.toArray(new String[names.size()]), values.toArray(new double[values.size()]));
|
||||
}
|
||||
|
||||
void readCovariance(String input){
|
||||
Scanner scan = new Scanner(input);
|
||||
List<List<Double>> matrix = new ArrayList<>();
|
||||
while(scan.hasNextLine()){
|
||||
String nextLine = scan.nextLine();
|
||||
if(!nextLine.isEmpty()){
|
||||
Scanner lineScan = new Scanner(nextLine);
|
||||
List<Double> line = new ArrayList<>();
|
||||
while(lineScan.hasNextDouble()){
|
||||
line << lineScan.nextDouble();
|
||||
}
|
||||
matrix << line;
|
||||
}
|
||||
}
|
||||
|
||||
Array2DRowRealMatrix result = new Array2DRowRealMatrix(matrix.size(),matrix.size());
|
||||
for(int i = 0; i< matrix.size; i++){
|
||||
List<Double> line = matrix.get(i);
|
||||
for(int j = 0; j< matrix.size; j++){
|
||||
result.setEntry(i,j,line[j]);
|
||||
}
|
||||
}
|
||||
this.covariance = result;
|
||||
}
|
||||
|
||||
void readFile(File file){
|
||||
String text = file.getText();
|
||||
Pattern pattern = Pattern.compile(/.*The best fit values are:\s*(?<parameters>.*)Covariation marix:\s*(?<covariance>.*)Best Likelihood logarithm/, Pattern.DOTALL);
|
||||
List results = text.findAll(pattern);
|
||||
|
||||
String res = results.get(results.size()-1);
|
||||
Matcher match = pattern.matcher(res);
|
||||
match.matches();
|
||||
readMeans(match.group("parameters"));
|
||||
readCovariance(match.group("covariance"));
|
||||
}
|
||||
|
||||
|
||||
NamedDoubleSet getMeans(){
|
||||
return means;
|
||||
}
|
||||
|
||||
ParamSet getParamSet(){
|
||||
ParamSet res = new ParamSet();
|
||||
NamedMatrix cov = getCovariance();
|
||||
for(String name: means.names()){
|
||||
res.setPar(name, means.getValue(name), Math.sqrt(Math.abs(cov.getElement(name, name))));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
NamedMatrix getCovariance(){
|
||||
return new NamedMatrix(covariance, means.namesAsArray());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,6 +40,9 @@ import org.apache.commons.cli.Options;
|
||||
import org.apache.commons.cli.ParseException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -17,6 +17,7 @@ package inr.numass;
|
||||
|
||||
import hep.dataforge.actions.ActionManager;
|
||||
import hep.dataforge.context.Context;
|
||||
import hep.dataforge.context.GlobalContext;
|
||||
import hep.dataforge.description.ActionDescriptor;
|
||||
import hep.dataforge.description.DescriptorFormatter;
|
||||
import hep.dataforge.description.DescriptorUtils;
|
||||
@ -25,6 +26,7 @@ import hep.dataforge.exceptions.DescriptorException;
|
||||
import hep.dataforge.maths.integration.GaussRuleIntegrator;
|
||||
import hep.dataforge.maths.integration.UnivariateIntegrator;
|
||||
import hep.dataforge.meta.Meta;
|
||||
import inr.numass.storage.SetDirectionUtility;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
/**
|
||||
@ -52,8 +54,11 @@ public class NumassContext extends Context {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
setIO(new NumassIO());
|
||||
GlobalContext.registerContext(this);
|
||||
loadPlugin("hep.dataforge:actions");
|
||||
loadPlugin("inr.numass:numass");
|
||||
setIO(new NumassIO());
|
||||
SetDirectionUtility.load(this);
|
||||
}
|
||||
|
||||
public static void printDescription(Context context, boolean allowANSI) throws DescriptorException {
|
||||
@ -75,4 +80,10 @@ public class NumassContext extends Context {
|
||||
writer.flush();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
SetDirectionUtility.save(this);
|
||||
super.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -60,18 +60,18 @@ public class NumassIO extends BasicIOManager {
|
||||
|
||||
String dirName = String.join(File.separator, tokens);
|
||||
String fileName = name.removeNameSpace().toString() + ".out";
|
||||
return buildOut(getOutputDir(), dirName, fileName);
|
||||
return buildOut(getWorkDirectory(), dirName, fileName);
|
||||
}
|
||||
|
||||
private File getOutputDir() {
|
||||
String outputDirPath = getContext().getString(NUMASS_OUTPUT_CONTEXT_KEY, ".dataforge");
|
||||
File res = new File(getRootDirectory(), outputDirPath);
|
||||
if (!res.exists()) {
|
||||
res.mkdir();
|
||||
}
|
||||
return res;
|
||||
|
||||
}
|
||||
// private File getOutputDir() {
|
||||
// String outputDirPath = getContext().getString(NUMASS_OUTPUT_CONTEXT_KEY, ".");
|
||||
// File res = new File(getRootDirectory(), outputDirPath);
|
||||
// if (!res.exists()) {
|
||||
// res.mkdir();
|
||||
// }
|
||||
// return res;
|
||||
//
|
||||
// }
|
||||
|
||||
protected OutputStream buildOut(File parentDir, String dirName, String fileName) {
|
||||
File outputFile;
|
||||
|
@ -111,15 +111,27 @@ public class MonitorCorrectAction extends OneToOneAction<Table, Table> {
|
||||
} else {
|
||||
pb.putValue("Monitor", corrFactor);
|
||||
}
|
||||
|
||||
pb.putValue("CR", Value.of(dp.getValue("CR").doubleValue() / corrFactor));
|
||||
pb.putValue("Window", Value.of(dp.getValue("Window").doubleValue() / corrFactor));
|
||||
pb.putValue("Corrected", Value.of(dp.getValue("Corrected").doubleValue() / corrFactor));
|
||||
pb.putValue("CRerr", Value.of(err));
|
||||
} else {
|
||||
double corrFactor = dp.getValue("CR").doubleValue() / norm;
|
||||
if (dp.names().contains("Monitor")) {
|
||||
pb.putValue("Monitor", Value.of(dp.getValue("Monitor").doubleValue() / corrFactor));
|
||||
} else {
|
||||
pb.putValue("Monitor", corrFactor);
|
||||
}
|
||||
pb.putValue("CR", norm);
|
||||
|
||||
}
|
||||
|
||||
if (meta.getBoolean("calculateRelative", false)) {
|
||||
pb.putValue("relCR", pb.build().getValue("CR").doubleValue() / norm);
|
||||
pb.putValue("relCRerr", pb.build().getValue("CRerr").doubleValue() / norm);
|
||||
}
|
||||
|
||||
dataList.add(pb.build());
|
||||
}
|
||||
|
||||
|
@ -33,10 +33,13 @@ import hep.dataforge.tables.TableFormat;
|
||||
import inr.numass.storage.NMPoint;
|
||||
import inr.numass.storage.NumassData;
|
||||
import inr.numass.storage.RawNMPoint;
|
||||
import inr.numass.utils.ExpressionUtils;
|
||||
import java.io.OutputStream;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -46,6 +49,8 @@ import java.util.List;
|
||||
@ValueDef(name = "lowerWindow", type = "NUMBER", def = "0", info = "Base for the window lowerWindow bound")
|
||||
@ValueDef(name = "lowerWindowSlope", type = "NUMBER", def = "0", info = "Slope for the window lowerWindow bound")
|
||||
@ValueDef(name = "upperWindow", type = "NUMBER", info = "Upper bound for window")
|
||||
@ValueDef(name = "correction",
|
||||
info = "An expression to correct coun tumber depending on potential U, count rate CR and point length T")
|
||||
@ValueDef(name = "deadTime", type = "NUMBER", def = "0", info = "Dead time in us")
|
||||
public class PrepareDataAction extends OneToOneAction<NumassData, Table> {
|
||||
|
||||
@ -55,7 +60,7 @@ public class PrepareDataAction extends OneToOneAction<NumassData, Table> {
|
||||
double b = meta.getDouble("lowerWindow", 0);
|
||||
double a = meta.getDouble("lowerWindowSlope", 0);
|
||||
|
||||
return (int) (b + Uset * a);
|
||||
return Math.max((int) (b + Uset * a), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -77,14 +82,27 @@ public class PrepareDataAction extends OneToOneAction<NumassData, Table> {
|
||||
int a = getLowerBorder(meta, Uset);
|
||||
int b = Math.min(upper, RawNMPoint.MAX_CHANEL);
|
||||
|
||||
// analyzer.setMonitorCorrector(corrector);
|
||||
// count in window
|
||||
long wind = point.getCountInWindow(a, b);
|
||||
|
||||
// count in window with deadTime applied
|
||||
double corr = point.getCountRate(a, b, deadTime) * point.getLength();// - bkg * (b - a);
|
||||
|
||||
// count rate after all corrections
|
||||
double cr = point.getCountRate(a, b, deadTime);
|
||||
// count rate error after all corrections
|
||||
double crErr = point.getCountRateErr(a, b, deadTime);
|
||||
|
||||
if(meta.hasValue("correction")){
|
||||
Map<String,Double> exprParams = new HashMap<>();
|
||||
exprParams.put("U", point.getUread());
|
||||
exprParams.put("CR", cr);
|
||||
exprParams.put("T", time);
|
||||
double correctionFactor = ExpressionUtils.evaluate(meta.getString("correction"), exprParams);
|
||||
cr = cr*correctionFactor;
|
||||
crErr = crErr*correctionFactor;
|
||||
}
|
||||
|
||||
Instant timestamp = point.getStartTime();
|
||||
|
||||
dataList.add(new MapPoint(parnames, new Object[]{Uset, Uread, time, total, wind, corr, cr, crErr, timestamp}));
|
||||
|
@ -80,9 +80,5 @@ public class ReadNumassStorageAction extends GenericAction<Void, NumassData> {
|
||||
throw new RuntimeException("Failed to load storage", ex);
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
@ -27,7 +27,6 @@ import hep.dataforge.io.ColumnedDataWriter;
|
||||
import hep.dataforge.io.PrintFunction;
|
||||
import hep.dataforge.io.reports.Reportable;
|
||||
import hep.dataforge.maths.GridCalculator;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.NamedMatrix;
|
||||
import hep.dataforge.maths.integration.UnivariateIntegrator;
|
||||
import hep.dataforge.meta.Laminate;
|
||||
@ -41,6 +40,7 @@ import hep.dataforge.tables.ListTable;
|
||||
import hep.dataforge.tables.MapPoint;
|
||||
import hep.dataforge.tables.Table;
|
||||
import hep.dataforge.tables.XYAdapter;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import inr.numass.NumassContext;
|
||||
import inr.numass.models.ExperimentalVariableLossSpectrum;
|
||||
import inr.numass.models.LossCalculator;
|
||||
@ -129,7 +129,7 @@ public class ShowLossSpectrumAction extends OneToOneAction<FitState, FitState> {
|
||||
}
|
||||
|
||||
// double integralThreshold = reader.getDouble("numass.eGun", 19005d) - reader.getDouble("integralThreshold", 14.82);
|
||||
// double integralRatio = calculateIntegralExIonRatio(input.getDataSet(), input.getParameters().getValue("X"), integralThreshold);
|
||||
// double integralRatio = calculateIntegralExIonRatio(input.getDataSet(), input.getParameters().getDouble("X"), integralThreshold);
|
||||
// writer.printf("The excitation to ionization ratio from integral spectrum (using threshold %f) is %f%n", integralThreshold, integralRatio);
|
||||
writer.println();
|
||||
|
||||
@ -178,7 +178,7 @@ public class ShowLossSpectrumAction extends OneToOneAction<FitState, FitState> {
|
||||
return input;
|
||||
}
|
||||
|
||||
public static double calcultateIonRatio(NamedDoubleSet set, double threshold) {
|
||||
public static double calcultateIonRatio(NamedValueSet set, double threshold) {
|
||||
UnivariateIntegrator integrator = NumassContext.highDensityIntegrator;
|
||||
UnivariateFunction integrand = LossCalculator.getSingleScatterFunction(set);
|
||||
return 1d - integrator.integrate(integrand, 5d, threshold);
|
||||
@ -211,7 +211,7 @@ public class ShowLossSpectrumAction extends OneToOneAction<FitState, FitState> {
|
||||
}
|
||||
|
||||
@SuppressWarnings("Unchecked")
|
||||
public double calultateIonRatioError(Context context, String name, NamedDoubleSet parameters, NamedMatrix covariance, double threshold) {
|
||||
public double calultateIonRatioError(Context context, String name, NamedValueSet parameters, NamedMatrix covariance, double threshold) {
|
||||
int number = 10000;
|
||||
|
||||
double[] res = new GaussianParameterGenerator(parameters, covariance)
|
||||
@ -233,7 +233,7 @@ public class ShowLossSpectrumAction extends OneToOneAction<FitState, FitState> {
|
||||
return new DescriptiveStatistics(res).getStandardDeviation();
|
||||
}
|
||||
|
||||
public static Table generateSpread(PrintWriter writer, String name, NamedDoubleSet parameters, NamedMatrix covariance) {
|
||||
public static Table generateSpread(PrintWriter writer, String name, NamedValueSet parameters, NamedMatrix covariance) {
|
||||
int numCalls = 1000;
|
||||
int gridPoints = 200;
|
||||
double a = 8;
|
||||
|
@ -80,7 +80,7 @@ public class SummaryAction extends ManyToOneAction<FitState, Table> {
|
||||
Value[] values = new Value[names.length];
|
||||
values[0] = Value.of(key);
|
||||
for (int i = 0; i < parNames.length; i++) {
|
||||
Value val = Value.of(state.getParameters().getValue(parNames[i]));
|
||||
Value val = Value.of(state.getParameters().getDouble(parNames[i]));
|
||||
values[2 * i + 1] = val;
|
||||
Value err = Value.of(state.getParameters().getError(parNames[i]));
|
||||
values[2 * i + 2] = err;
|
||||
|
@ -17,10 +17,10 @@ package inr.numass.data;
|
||||
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import static hep.dataforge.maths.MatrixOperations.inverse;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.NamedMatrix;
|
||||
import hep.dataforge.tables.DataPoint;
|
||||
import hep.dataforge.tables.ListTable;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import inr.numass.utils.TritiumUtils;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
|
||||
@ -38,7 +38,7 @@ public class SpectrumInformation {
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
public NamedMatrix getExpetedCovariance(NamedDoubleSet set, ListTable data, String... parNames) {
|
||||
public NamedMatrix getExpetedCovariance(NamedValueSet set, ListTable data, String... parNames) {
|
||||
String[] names = parNames;
|
||||
if (names.length == 0) {
|
||||
names = source.namesAsArray();
|
||||
@ -56,7 +56,7 @@ public class SpectrumInformation {
|
||||
* @param parNames
|
||||
* @return
|
||||
*/
|
||||
public NamedMatrix getInformationMatrix(NamedDoubleSet set, ListTable data, String... parNames) {
|
||||
public NamedMatrix getInformationMatrix(NamedValueSet set, ListTable data, String... parNames) {
|
||||
SpectrumDataAdapter reader = TritiumUtils.adapter();
|
||||
|
||||
String[] names = parNames;
|
||||
@ -80,11 +80,11 @@ public class SpectrumInformation {
|
||||
}
|
||||
|
||||
// формула правильная!
|
||||
public double getPoinSignificance(NamedDoubleSet set, String name1, String name2, double x) {
|
||||
public double getPoinSignificance(NamedValueSet set, String name1, String name2, double x) {
|
||||
return source.derivValue(name1, x, set) * source.derivValue(name2, x, set) / source.value(x, set);
|
||||
}
|
||||
|
||||
public NamedMatrix getPointInfoMatrix(NamedDoubleSet set, double x, double t, String... parNames) {
|
||||
public NamedMatrix getPointInfoMatrix(NamedValueSet set, double x, double t, String... parNames) {
|
||||
assert source.names().contains(set.namesAsArray());
|
||||
|
||||
String[] names = parNames;
|
||||
@ -119,7 +119,7 @@ public class SpectrumInformation {
|
||||
* @param name2
|
||||
* @return
|
||||
*/
|
||||
public UnivariateFunction getSignificanceFunction(final NamedDoubleSet set, final String name1, final String name2) {
|
||||
public UnivariateFunction getSignificanceFunction(final NamedValueSet set, final String name1, final String name2) {
|
||||
return (double d) -> getPoinSignificance(set, name1, name2, d);
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,8 @@ package inr.numass.models;
|
||||
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import java.io.File;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Math.exp;
|
||||
@ -89,11 +90,11 @@ public class BetaSpectrum extends AbstractParametricFunction implements RangedNa
|
||||
return res;
|
||||
}
|
||||
|
||||
double derivRootsterile(String name, double E, NamedDoubleSet pars) throws NotDefinedException {
|
||||
double E0 = pars.getValue("E0");
|
||||
double mnu2 = pars.getValue("mnu2");
|
||||
double mst2 = pars.getValue("msterile2");
|
||||
double u2 = pars.getValue("U2");
|
||||
double derivRootsterile(String name, double E, ValueProvider pars) throws NotDefinedException {
|
||||
double E0 = pars.getDouble("E0");
|
||||
double mnu2 = pars.getDouble("mnu2");
|
||||
double mst2 = pars.getDouble("msterile2");
|
||||
double u2 = pars.getDouble("U2");
|
||||
|
||||
switch (name) {
|
||||
case "E0":
|
||||
@ -117,7 +118,7 @@ public class BetaSpectrum extends AbstractParametricFunction implements RangedNa
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String name, double E, NamedDoubleSet pars) throws NotDefinedException {
|
||||
public double derivValue(String name, double E, NamedValueSet pars) throws NotDefinedException {
|
||||
if (this.fss == null) {
|
||||
return this.derivRootsterile(name, E, pars);
|
||||
}
|
||||
@ -137,12 +138,12 @@ public class BetaSpectrum extends AbstractParametricFunction implements RangedNa
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double max(NamedDoubleSet set) {
|
||||
return set.getValue("E0");
|
||||
public Double max(NamedValueSet set) {
|
||||
return set.getDouble("E0");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double min(NamedDoubleSet set) {
|
||||
public Double min(NamedValueSet set) {
|
||||
return 0d;
|
||||
}
|
||||
|
||||
@ -184,11 +185,11 @@ public class BetaSpectrum extends AbstractParametricFunction implements RangedNa
|
||||
return res;
|
||||
}
|
||||
|
||||
double rootsterile(double E, NamedDoubleSet pars) {
|
||||
double E0 = pars.getValue("E0");
|
||||
double mnu2 = pars.getValue("mnu2");
|
||||
double mst2 = pars.getValue("msterile2");
|
||||
double u2 = pars.getValue("U2");
|
||||
double rootsterile(double E, ValueProvider pars) {
|
||||
double E0 = pars.getDouble("E0");
|
||||
double mnu2 = pars.getDouble("mnu2");
|
||||
double mst2 = pars.getDouble("msterile2");
|
||||
double u2 = pars.getDouble("U2");
|
||||
|
||||
if (u2 == 0) {
|
||||
return root(E0, mnu2, E);
|
||||
@ -206,7 +207,7 @@ public class BetaSpectrum extends AbstractParametricFunction implements RangedNa
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double E, NamedDoubleSet pars) {
|
||||
public double value(double E, NamedValueSet pars) {
|
||||
if (this.fss == null) {
|
||||
return rootsterile(E, pars);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
package inr.numass.models;
|
||||
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import inr.numass.NumassContext;
|
||||
import inr.numass.utils.TritiumUtils;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
@ -38,7 +38,7 @@ public class CustomNBkgSpectrum extends NBkgSpectrum {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double x, NamedDoubleSet set) {
|
||||
public double value(double x, NamedValueSet set) {
|
||||
if (customBackgroundFunction == null) {
|
||||
return super.value(x, set);
|
||||
} else {
|
||||
|
@ -18,9 +18,9 @@ package inr.numass.models;
|
||||
import hep.dataforge.exceptions.NamingException;
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.integration.GaussRuleIntegrator;
|
||||
import hep.dataforge.maths.integration.UnivariateIntegrator;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import java.util.List;
|
||||
import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
@ -45,17 +45,17 @@ public class EmpiricalLossSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
throw new NotDefinedException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double U, NamedDoubleSet set) {
|
||||
public double value(double U, NamedValueSet set) {
|
||||
if (U >= eMax) {
|
||||
return 0;
|
||||
}
|
||||
double X = set.getValue("X");
|
||||
final double shift = set.getValue("shift");
|
||||
double X = set.getDouble("X");
|
||||
final double shift = set.getDouble("shift");
|
||||
|
||||
//FIXME тут толщины усреднены по длине источника, а надо брать чистого Пуассона
|
||||
final List<Double> probs = LossCalculator.instance().getGunLossProbabilities(X);
|
||||
|
@ -18,7 +18,8 @@ package inr.numass.models;
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
|
||||
@ -37,7 +38,7 @@ public class ExperimentalVariableLossSpectrum extends VariableLossSpectrum {
|
||||
return new ExperimentalVariableLossSpectrum(new AbstractParametricFunction(new String[0]) {
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
throw new NotDefinedException();
|
||||
}
|
||||
|
||||
@ -47,7 +48,7 @@ public class ExperimentalVariableLossSpectrum extends VariableLossSpectrum {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double x, NamedDoubleSet set) {
|
||||
public double value(double x, NamedValueSet set) {
|
||||
return transmission.value(x);
|
||||
}
|
||||
}, eMax,smootherW);
|
||||
@ -119,12 +120,12 @@ public class ExperimentalVariableLossSpectrum extends VariableLossSpectrum {
|
||||
return (eps) -> (excitation(exPos, exW).value(eps) * exIonRatio + ionization(ionPos, ionW).value(eps)) / (1d + exIonRatio);
|
||||
}
|
||||
|
||||
public UnivariateFunction total(NamedDoubleSet set) {
|
||||
final double exPos = set.getValue("exPos");
|
||||
final double ionPos = set.getValue("ionPos");
|
||||
final double exW = set.getValue("exW");
|
||||
final double ionW = set.getValue("ionW");
|
||||
final double exIonRatio = set.getValue("exIonRatio");
|
||||
public UnivariateFunction total(ValueProvider set) {
|
||||
final double exPos = set.getDouble("exPos");
|
||||
final double ionPos = set.getDouble("ionPos");
|
||||
final double exW = set.getDouble("exW");
|
||||
final double ionW = set.getDouble("ionW");
|
||||
final double exIonRatio = set.getDouble("exIonRatio");
|
||||
return total(exPos, ionPos, exW, ionW, exIonRatio);
|
||||
}
|
||||
|
||||
|
@ -19,8 +19,9 @@ import hep.dataforge.context.GlobalContext;
|
||||
import hep.dataforge.exceptions.NameNotFoundException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import static hep.dataforge.names.NamedUtils.combineNamesWithEquals;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import static java.lang.Double.isNaN;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Math.exp;
|
||||
@ -28,6 +29,12 @@ import static java.lang.Math.sqrt;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
import org.apache.commons.math3.analysis.integration.SimpsonIntegrator;
|
||||
import org.apache.commons.math3.analysis.integration.UnivariateIntegrator;
|
||||
import static java.lang.Double.isNaN;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Double.isNaN;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Double.isNaN;
|
||||
import static java.lang.Math.abs;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -51,7 +58,7 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String name, double X, NamedDoubleSet pars) {
|
||||
public double derivValue(String name, double X, NamedValueSet pars) {
|
||||
if (abs(X - getPos(pars)) > cutoff * getW(pars)) {
|
||||
return 0;
|
||||
}
|
||||
@ -71,7 +78,7 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
int maxEval = GlobalContext.instance().getInt("INTEGR_POINTS", 500);
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
double a = getLowerBound(set);
|
||||
double b = getUpperBound(set);
|
||||
assert b > a;
|
||||
@ -87,7 +94,7 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double x, NamedDoubleSet set) {
|
||||
public double value(double x, NamedValueSet set) {
|
||||
double a = getLowerBound(set);
|
||||
double b = getUpperBound(set);
|
||||
assert b > a;
|
||||
@ -97,11 +104,11 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getDeriv(String name, NamedDoubleSet set, double input, double output) {
|
||||
public double getDeriv(String name, NamedValueSet set, double input, double output) {
|
||||
return this.derivValue(name, output - input, set);
|
||||
}
|
||||
|
||||
private UnivariateFunction getDerivProduct(final String name, final ParametricFunction bare, final NamedDoubleSet pars, final double x0) {
|
||||
private UnivariateFunction getDerivProduct(final String name, final ParametricFunction bare, final NamedValueSet pars, final double x0) {
|
||||
return (double x) -> {
|
||||
double res1;
|
||||
double res2;
|
||||
@ -119,17 +126,17 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
};
|
||||
}
|
||||
|
||||
private double getLowerBound(final NamedDoubleSet pars) {
|
||||
private double getLowerBound(final NamedValueSet pars) {
|
||||
return getPos(pars) - cutoff * getW(pars);
|
||||
}
|
||||
|
||||
private double getPos(NamedDoubleSet pars) {
|
||||
// return pars.getValue("pos");
|
||||
private double getPos(ValueProvider pars) {
|
||||
// return pars.getDouble("pos");
|
||||
// вряд ли стоит ожидать, что разрешение будет сдвигать среднее, поэтому оставляем один параметр
|
||||
return 0;
|
||||
}
|
||||
|
||||
private UnivariateFunction getProduct(final ParametricFunction bare, final NamedDoubleSet pars, final double x0) {
|
||||
private UnivariateFunction getProduct(final ParametricFunction bare, final NamedValueSet pars, final double x0) {
|
||||
return (double x) -> {
|
||||
double res = bare.value(x0 - x, pars) * GaussResolution.this.value(x, pars);
|
||||
assert !isNaN(res);
|
||||
@ -137,17 +144,17 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
};
|
||||
}
|
||||
|
||||
private double getUpperBound(final NamedDoubleSet pars) {
|
||||
private double getUpperBound(final NamedValueSet pars) {
|
||||
return getPos(pars) + cutoff * getW(pars);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getValue(NamedDoubleSet set, double input, double output) {
|
||||
public double getValue(NamedValueSet set, double input, double output) {
|
||||
return this.value(output - input, set);
|
||||
}
|
||||
|
||||
private double getW(NamedDoubleSet pars) {
|
||||
return pars.getValue("w");
|
||||
private double getW(ValueProvider pars) {
|
||||
return pars.getDouble("w");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -156,11 +163,11 @@ public class GaussResolution extends AbstractParametricFunction implements Trans
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double X, NamedDoubleSet pars) {
|
||||
if (abs(X - getPos(pars)) > cutoff * getW(pars)) {
|
||||
public double value(double x, NamedValueSet pars) {
|
||||
if (abs(x - getPos(pars)) > cutoff * getW(pars)) {
|
||||
return 0;
|
||||
}
|
||||
double aux = (X - getPos(pars)) / getW(pars);
|
||||
double aux = (x - getPos(pars)) / getW(pars);
|
||||
return exp(-aux * aux / 2) / getW(pars) / sqrt(2 * Math.PI);
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,8 @@ package inr.numass.models;
|
||||
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import static java.lang.Math.exp;
|
||||
import static java.lang.Math.sqrt;
|
||||
|
||||
@ -35,7 +36,7 @@ public class GaussSourceSpectrum extends AbstractParametricFunction implements R
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double E, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double E, NamedValueSet set) {
|
||||
switch (parName) {
|
||||
case "pos":
|
||||
return getGaussPosDeriv(E, getPos(set), getSigma(set));
|
||||
@ -60,21 +61,21 @@ public class GaussSourceSpectrum extends AbstractParametricFunction implements R
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double max(NamedDoubleSet set) {
|
||||
public Double max(NamedValueSet set) {
|
||||
return getPos(set) + cutoff * getSigma(set);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double min(NamedDoubleSet set) {
|
||||
public Double min(NamedValueSet set) {
|
||||
return getPos(set) - cutoff * getSigma(set);
|
||||
}
|
||||
|
||||
private double getPos(NamedDoubleSet set) {
|
||||
return set.getValue("pos");
|
||||
private double getPos(ValueProvider set) {
|
||||
return set.getDouble("pos");
|
||||
}
|
||||
|
||||
private double getSigma(NamedDoubleSet set) {
|
||||
return set.getValue("sigma");
|
||||
private double getSigma(ValueProvider set) {
|
||||
return set.getDouble("sigma");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -83,7 +84,7 @@ public class GaussSourceSpectrum extends AbstractParametricFunction implements R
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(final double E, NamedDoubleSet set) {
|
||||
public double value(final double E, NamedValueSet set) {
|
||||
return getGauss(E, getPos(set), getSigma(set));
|
||||
}
|
||||
}
|
||||
|
@ -17,8 +17,8 @@ package inr.numass.models;
|
||||
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.integration.UnivariateIntegrator;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import inr.numass.NumassContext;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Math.exp;
|
||||
@ -42,10 +42,10 @@ public class GunSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, final double U, NamedDoubleSet set) {
|
||||
final double pos = set.getValue("pos");
|
||||
final double sigma = set.getValue("sigma");
|
||||
final double resA = set.getValue("resA");
|
||||
public double derivValue(String parName, final double U, NamedValueSet set) {
|
||||
final double pos = set.getDouble("pos");
|
||||
final double sigma = set.getDouble("sigma");
|
||||
final double resA = set.getDouble("resA");
|
||||
|
||||
if(sigma == 0) throw new NotDefinedException();
|
||||
|
||||
@ -132,10 +132,10 @@ public class GunSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(final double U, NamedDoubleSet set) {
|
||||
final double pos = set.getValue("pos");
|
||||
final double sigma = set.getValue("sigma");
|
||||
final double resA = set.getValue("resA");
|
||||
public double value(final double U, NamedValueSet set) {
|
||||
final double pos = set.getDouble("pos");
|
||||
final double sigma = set.getDouble("sigma");
|
||||
final double resA = set.getDouble("resA");
|
||||
|
||||
if (sigma <1e-5 ) {
|
||||
return transmissionValueFast(U, pos, resA);
|
||||
|
@ -16,8 +16,9 @@
|
||||
package inr.numass.models;
|
||||
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.names.Names;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import static java.lang.Math.abs;
|
||||
import static java.lang.Math.exp;
|
||||
import static java.lang.Math.sqrt;
|
||||
@ -30,17 +31,17 @@ public class GunTailSpectrum implements RangedNamedSetSpectrum {
|
||||
private final String[] list = {"pos", "tailShift", "tailAmp", "sigma"};
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
throw new NotDefinedException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double max(NamedDoubleSet set) {
|
||||
return set.getValue("pos") + cutoff * set.getValue("sigma");
|
||||
public Double max(NamedValueSet set) {
|
||||
return set.getDouble("pos") + cutoff * set.getDouble("sigma");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double min(NamedDoubleSet set) {
|
||||
public Double min(NamedValueSet set) {
|
||||
return 0d;
|
||||
}
|
||||
|
||||
@ -55,10 +56,10 @@ public class GunTailSpectrum implements RangedNamedSetSpectrum {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double E, NamedDoubleSet set) {
|
||||
double pos = set.getValue("pos");
|
||||
double amp = set.getValue("tailAmp");
|
||||
double sigma = set.getValue("sigma");
|
||||
public double value(double E, NamedValueSet set) {
|
||||
double pos = set.getDouble("pos");
|
||||
double amp = set.getDouble("tailAmp");
|
||||
double sigma = set.getDouble("sigma");
|
||||
|
||||
if (E >= pos + cutoff * sigma) {
|
||||
return 0d;
|
||||
@ -75,9 +76,9 @@ public class GunTailSpectrum implements RangedNamedSetSpectrum {
|
||||
return exp(-aux * aux / 2) / sigma / sqrt(2 * Math.PI);
|
||||
}
|
||||
|
||||
double tail(double E, double pos, NamedDoubleSet set) {
|
||||
double tail(double E, double pos, ValueProvider set) {
|
||||
|
||||
double tailShift = set.getValue("tailShift");
|
||||
double tailShift = set.getDouble("tailShift");
|
||||
|
||||
double delta = Math.max(pos - E - tailShift, 1d);
|
||||
UnivariateFunction func = (double d) -> 1d / d / d;
|
||||
|
@ -16,11 +16,11 @@
|
||||
package inr.numass.models;
|
||||
|
||||
import hep.dataforge.functions.FunctionCaching;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.integration.GaussRuleIntegrator;
|
||||
import hep.dataforge.maths.integration.UnivariateIntegrator;
|
||||
import hep.dataforge.plots.XYPlotFrame;
|
||||
import hep.dataforge.plots.data.PlottableFunction;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import static java.lang.Math.exp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@ -115,13 +115,13 @@ public class LossCalculator {
|
||||
return (e) -> func.value(e) / norm;
|
||||
}
|
||||
|
||||
public static UnivariateFunction getSingleScatterFunction(NamedDoubleSet set) {
|
||||
public static UnivariateFunction getSingleScatterFunction(NamedValueSet set) {
|
||||
|
||||
final double exPos = set.getValue("exPos");
|
||||
final double ionPos = set.getValue("ionPos");
|
||||
final double exW = set.getValue("exW");
|
||||
final double ionW = set.getValue("ionW");
|
||||
final double exIonRatio = set.getValue("exIonRatio");
|
||||
final double exPos = set.getDouble("exPos");
|
||||
final double ionPos = set.getDouble("ionPos");
|
||||
final double exW = set.getDouble("exW");
|
||||
final double ionW = set.getDouble("ionW");
|
||||
final double exIonRatio = set.getDouble("exIonRatio");
|
||||
|
||||
return getSingleScatterFunction(exPos, ionPos, exW, ionW, exIonRatio);
|
||||
}
|
||||
@ -146,27 +146,27 @@ public class LossCalculator {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public static void plotScatter(XYPlotFrame frame, NamedDoubleSet set) {
|
||||
public static void plotScatter(XYPlotFrame frame, NamedValueSet set) {
|
||||
//"X", "shift", "exPos", "ionPos", "exW", "ionW", "exIonRatio"
|
||||
|
||||
// JFreeChartFrame frame = JFreeChartFrame.drawFrame("Differential scattering crosssection", null);
|
||||
double X = set.getValue("X");
|
||||
double X = set.getDouble("X");
|
||||
|
||||
final double exPos = set.getValue("exPos");
|
||||
final double exPos = set.getDouble("exPos");
|
||||
|
||||
final double ionPos = set.getValue("ionPos");
|
||||
final double ionPos = set.getDouble("ionPos");
|
||||
|
||||
final double exW = set.getValue("exW");
|
||||
final double exW = set.getDouble("exW");
|
||||
|
||||
final double ionW = set.getValue("ionW");
|
||||
final double ionW = set.getDouble("ionW");
|
||||
|
||||
final double exIonRatio = set.getValue("exIonRatio");
|
||||
final double exIonRatio = set.getDouble("exIonRatio");
|
||||
|
||||
UnivariateFunction scatterFunction = getSingleScatterFunction(exPos, ionPos, exW, ionW, exIonRatio);
|
||||
|
||||
if (set.names().contains("X")) {
|
||||
final LossCalculator loss = LossCalculator.instance;
|
||||
final List<Double> probs = loss.getGunLossProbabilities(set.getValue("X"));
|
||||
final List<Double> probs = loss.getGunLossProbabilities(set.getDouble("X"));
|
||||
UnivariateFunction single = (double e) -> probs.get(1) * scatterFunction.value(e);
|
||||
frame.add(new PlottableFunction("Single scattering", x->single.value(x), 0, 100, 1000));
|
||||
|
||||
|
@ -17,8 +17,9 @@ package inr.numass.models;
|
||||
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.names.NamedUtils;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
@ -141,7 +142,7 @@ public class ModularSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double U, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double U, NamedValueSet set) {
|
||||
if (U >= sourceSpectrum.max(set)) {
|
||||
return 0;
|
||||
}
|
||||
@ -177,12 +178,12 @@ public class ModularSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
}
|
||||
|
||||
private double getTrap(NamedDoubleSet set) {
|
||||
return set.getValue("trap");
|
||||
private double getTrap(ValueProvider set) {
|
||||
return set.getDouble("trap");
|
||||
}
|
||||
|
||||
private double getX(NamedDoubleSet set) {
|
||||
return set.getValue("X");
|
||||
private double getX(ValueProvider set) {
|
||||
return set.getDouble("X");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -223,7 +224,7 @@ public class ModularSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double U, NamedDoubleSet set) {
|
||||
public double value(double U, NamedValueSet set) {
|
||||
if (U >= sourceSpectrum.max(set)) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -17,9 +17,10 @@ package inr.numass.models;
|
||||
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import static hep.dataforge.names.NamedUtils.combineNamesWithEquals;
|
||||
import hep.dataforge.utils.MultiCounter;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -38,7 +39,7 @@ public class NBkgSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
this.counter.increase(parName);
|
||||
switch (parName) {
|
||||
case "N":
|
||||
@ -50,12 +51,12 @@ public class NBkgSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
}
|
||||
|
||||
private double getBkg(NamedDoubleSet set) {
|
||||
return set.getValue("bkg");
|
||||
private double getBkg(ValueProvider set) {
|
||||
return set.getDouble("bkg");
|
||||
}
|
||||
|
||||
private double getN(NamedDoubleSet set) {
|
||||
return set.getValue("N");
|
||||
private double getN(ValueProvider set) {
|
||||
return set.getDouble("N");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -71,7 +72,7 @@ public class NBkgSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double x, NamedDoubleSet set) {
|
||||
public double value(double x, NamedValueSet set) {
|
||||
this.counter.increase("value");
|
||||
return getN(set) * source.value(x, set) + getBkg(set);
|
||||
}
|
||||
|
@ -19,11 +19,14 @@ import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import static hep.dataforge.functions.FunctionUtils.getSpectrumDerivativeFunction;
|
||||
import static hep.dataforge.functions.FunctionUtils.getSpectrumFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleArray;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.MathUtils;
|
||||
import hep.dataforge.maths.NamedVector;
|
||||
import hep.dataforge.names.AbstractNamedSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
import org.apache.commons.math3.analysis.interpolation.SplineInterpolator;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -60,7 +63,7 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
if (!isCachingEnabled()) {
|
||||
return source.derivValue(parName, x, set);
|
||||
}
|
||||
@ -105,7 +108,7 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
return source.providesDeriv(name);
|
||||
}
|
||||
|
||||
protected boolean sameSet(NamedDoubleSet set1, NamedDoubleSet set2) {
|
||||
protected boolean sameSet(ValueProvider set1, ValueProvider set2) {
|
||||
// if((set1 instanceof NamedDoubleSet)&&(set2 instanceof NamedDoubleSet)){
|
||||
// double[] v1 = ((NamedDoubleSet)set1).getAllValues();
|
||||
// double[] v2 = ((NamedDoubleSet)set2).getAllValues();
|
||||
@ -113,7 +116,7 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
// }
|
||||
|
||||
for (String name : this.names()) {
|
||||
if (set1.getValue(name) != set2.getValue(name)) {
|
||||
if (!Objects.equals(set1.getDouble(name), set2.getDouble(name))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -137,8 +140,7 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
/*
|
||||
* Подразумевается, что трансформация одна и та же и для спектра, и для производных.
|
||||
*/
|
||||
protected double transformation(CacheElement cache,
|
||||
NamedDoubleSet newSet, double x) throws TransformationNotAvailable {
|
||||
protected double transformation(CacheElement cache, NamedValueSet newSet, double x) throws TransformationNotAvailable {
|
||||
|
||||
|
||||
/*
|
||||
@ -150,7 +152,7 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double x, NamedDoubleSet set) {
|
||||
public double value(double x, NamedValueSet set) {
|
||||
if (!isCachingEnabled()) {
|
||||
return source.value(x, set);
|
||||
}
|
||||
@ -187,22 +189,22 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
protected class CacheElement extends AbstractNamedSet implements UnivariateFunction {
|
||||
|
||||
private UnivariateFunction cachedSpectrum;
|
||||
private final NamedDoubleSet cachedParameters;
|
||||
private final NamedValueSet cachedParameters;
|
||||
String parName;
|
||||
|
||||
CacheElement(NamedDoubleSet parameters, String parName) {
|
||||
CacheElement(NamedValueSet parameters, String parName) {
|
||||
super(source);
|
||||
//на всякий случай обрезаем набор параметров до необходимого
|
||||
String[] names = source.namesAsArray();
|
||||
this.cachedParameters = new NamedDoubleArray(names, parameters.getValues(names));
|
||||
this.cachedParameters = new NamedVector(names, MathUtils.getDoubleArray(parameters));
|
||||
UnivariateFunction func = getSpectrumDerivativeFunction(parName, source, parameters);
|
||||
generate(func);
|
||||
}
|
||||
|
||||
CacheElement(NamedDoubleSet parameters) {
|
||||
CacheElement(NamedValueSet parameters) {
|
||||
super(source);
|
||||
String[] names = source.namesAsArray();
|
||||
this.cachedParameters = new NamedDoubleArray(names, parameters.getValues(names));
|
||||
this.cachedParameters = new NamedVector(names, MathUtils.getDoubleArray(parameters));
|
||||
UnivariateFunction func = getSpectrumFunction(source, parameters);
|
||||
generate(func);
|
||||
}
|
||||
@ -227,7 +229,7 @@ public class NamedSpectrumCaching extends AbstractParametricFunction {
|
||||
return this.cachedSpectrum.value(x);
|
||||
}
|
||||
|
||||
public NamedDoubleSet getCachedParameters() {
|
||||
public NamedValueSet getCachedParameters() {
|
||||
return this.cachedParameters;
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package inr.numass.models;
|
||||
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -36,12 +36,12 @@ public class SimpleRange implements SpectrumRange{
|
||||
|
||||
|
||||
@Override
|
||||
public Double max(NamedDoubleSet set) {
|
||||
public Double max(NamedValueSet set) {
|
||||
return max;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double min(NamedDoubleSet set) {
|
||||
public Double min(NamedValueSet set) {
|
||||
return min;
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package inr.numass.models;
|
||||
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
|
||||
|
||||
/**
|
||||
@ -23,6 +23,6 @@ import hep.dataforge.maths.NamedDoubleSet;
|
||||
* @author Darksnake
|
||||
*/
|
||||
public interface SpectrumRange {
|
||||
Double min(NamedDoubleSet set);
|
||||
Double max(NamedDoubleSet set);
|
||||
Double min(NamedValueSet set);
|
||||
Double max(NamedValueSet set);
|
||||
}
|
||||
|
@ -17,8 +17,9 @@ package inr.numass.models;
|
||||
|
||||
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.names.NameSetContainer;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
|
||||
/**
|
||||
@ -27,18 +28,18 @@ import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
*/
|
||||
public interface Transmission extends NameSetContainer{
|
||||
|
||||
double getValue(NamedDoubleSet set, double input, double output);
|
||||
double getDeriv(String name, NamedDoubleSet set, double input, double output);
|
||||
double getValue(NamedValueSet set, double input, double output);
|
||||
double getDeriv(String name, NamedValueSet set, double input, double output);
|
||||
boolean providesDeriv(String name);
|
||||
|
||||
ParametricFunction getConvolutedSpectrum(RangedNamedSetSpectrum bare);
|
||||
|
||||
|
||||
default BivariateFunction getBivariateFunction(final NamedDoubleSet params){
|
||||
default BivariateFunction getBivariateFunction(final NamedValueSet params){
|
||||
return (double input, double output) -> getValue(params, input, output);
|
||||
}
|
||||
|
||||
default BivariateFunction getBivariateDerivFunction(final String name, final NamedDoubleSet params){
|
||||
default BivariateFunction getBivariateDerivFunction(final String name, final NamedValueSet params){
|
||||
return (double input, double output) -> getDeriv(name, params, input, output);
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ package inr.numass.models;
|
||||
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import inr.numass.NumassContext;
|
||||
import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
import org.apache.commons.math3.analysis.UnivariateFunction;
|
||||
@ -45,7 +45,7 @@ class TransmissionConvolution extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(final String parName, final double U, NamedDoubleSet set) {
|
||||
public double derivValue(final String parName, final double U, NamedValueSet set) {
|
||||
double min = range.min(set);
|
||||
double max = range.max(set);
|
||||
|
||||
@ -67,7 +67,7 @@ class TransmissionConvolution extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(final double U, NamedDoubleSet set) {
|
||||
public double value(final double U, NamedValueSet set) {
|
||||
double min = range.min(set);
|
||||
double max = range.max(set);
|
||||
|
||||
|
@ -16,8 +16,8 @@
|
||||
package inr.numass.models;
|
||||
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleArray;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.NamedVector;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import static java.lang.Math.abs;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -39,11 +39,11 @@ public class TritiumSpectrumCaching extends NamedSpectrumCaching {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double transformation(CacheElement cache, NamedDoubleSet newSet, double x) throws TransformationNotAvailable {
|
||||
protected double transformation(CacheElement cache, NamedValueSet newSet, double x) throws TransformationNotAvailable {
|
||||
double res;
|
||||
NamedDoubleArray curSet = new NamedDoubleArray(newSet);
|
||||
double E0new = newSet.getValue("E0");
|
||||
double E0old = cache.getCachedParameters().getValue("E0");
|
||||
NamedVector curSet = new NamedVector(newSet);
|
||||
double E0new = newSet.getDouble("E0");
|
||||
double E0old = cache.getCachedParameters().getDouble("E0");
|
||||
double E0delta = E0new - E0old;
|
||||
if (abs(E0delta) > delta) {
|
||||
LoggerFactory.getLogger(getClass())
|
||||
|
@ -18,8 +18,9 @@ package inr.numass.models;
|
||||
import hep.dataforge.exceptions.NotDefinedException;
|
||||
import hep.dataforge.functions.AbstractParametricFunction;
|
||||
import hep.dataforge.functions.ParametricFunction;
|
||||
import hep.dataforge.maths.NamedDoubleSet;
|
||||
import hep.dataforge.maths.integration.UnivariateIntegrator;
|
||||
import hep.dataforge.values.NamedValueSet;
|
||||
import hep.dataforge.values.ValueProvider;
|
||||
import inr.numass.NumassContext;
|
||||
import java.util.List;
|
||||
import org.apache.commons.math3.analysis.BivariateFunction;
|
||||
@ -41,7 +42,7 @@ public class VariableLossSpectrum extends AbstractParametricFunction {
|
||||
return new VariableLossSpectrum(new AbstractParametricFunction(new String[0]) {
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
throw new NotDefinedException();
|
||||
}
|
||||
|
||||
@ -51,7 +52,7 @@ public class VariableLossSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double x, NamedDoubleSet set) {
|
||||
public double value(double x, NamedValueSet set) {
|
||||
return transmission.value(x);
|
||||
}
|
||||
}, eMax);
|
||||
@ -68,17 +69,17 @@ public class VariableLossSpectrum extends AbstractParametricFunction {
|
||||
}
|
||||
|
||||
@Override
|
||||
public double derivValue(String parName, double x, NamedDoubleSet set) {
|
||||
public double derivValue(String parName, double x, NamedValueSet set) {
|
||||
throw new NotDefinedException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double value(double U, NamedDoubleSet set) {
|
||||
public double value(double U, NamedValueSet set) {
|
||||
if (U >= eMax) {
|
||||
return 0;
|
||||
}
|
||||
double X = set.getValue("X");
|
||||
final double shift = set.getValue("shift");
|
||||
double X = set.getDouble("X");
|
||||
final double shift = set.getDouble("shift");
|
||||
|
||||
final LossCalculator loss = LossCalculator.instance();
|
||||
|
||||
@ -107,13 +108,13 @@ public class VariableLossSpectrum extends AbstractParametricFunction {
|
||||
return noLossProb * transmission.value(U - shift, set) + integrator.integrate(integrand, U, eMax);
|
||||
}
|
||||
|
||||
public UnivariateFunction singleScatterFunction(NamedDoubleSet set) {
|
||||
public UnivariateFunction singleScatterFunction(ValueProvider set) {
|
||||
|
||||
final double exPos = set.getValue("exPos");
|
||||
final double ionPos = set.getValue("ionPos");
|
||||
final double exW = set.getValue("exW");
|
||||
final double ionW = set.getValue("ionW");
|
||||
final double exIonRatio = set.getValue("exIonRatio");
|
||||
final double exPos = set.getDouble("exPos");
|
||||
final double ionPos = set.getDouble("ionPos");
|
||||
final double exW = set.getDouble("exW");
|
||||
final double ionW = set.getDouble("ionW");
|
||||
final double exIonRatio = set.getDouble("exIonRatio");
|
||||
|
||||
return singleScatterFunction(exPos, ionPos, exW, ionW, exIonRatio);
|
||||
}
|
||||
|
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package inr.numass.utils;
|
||||
|
||||
import groovy.lang.Binding;
|
||||
import groovy.lang.GroovyShell;
|
||||
import java.util.Map;
|
||||
import org.codehaus.groovy.control.CompilerConfiguration;
|
||||
import org.codehaus.groovy.control.customizers.ImportCustomizer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexander Nozik
|
||||
*/
|
||||
public class ExpressionUtils {
|
||||
|
||||
public static Double evaluate(String expression, Map<String, Double> binding) {
|
||||
Binding b = new Binding(binding);
|
||||
// Add imports for script.
|
||||
ImportCustomizer importCustomizer = new ImportCustomizer();
|
||||
// import static com.mrhaki.blog.Type.*
|
||||
importCustomizer.addStaticStars("java.lang.Math");
|
||||
|
||||
CompilerConfiguration configuration = new CompilerConfiguration();
|
||||
configuration.addCompilationCustomizers(importCustomizer); // Create shell and execute script.
|
||||
|
||||
GroovyShell shell = new GroovyShell(b,configuration);
|
||||
return (Double) shell.evaluate(expression);
|
||||
}
|
||||
}
|
@ -26,6 +26,9 @@ import java.io.FileNotFoundException;
|
||||
import java.util.Locale;
|
||||
import static java.util.Locale.setDefault;
|
||||
import java.util.Scanner;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -132,6 +132,13 @@ public class NumassWorkbenchController implements Initializable, StagePaneHolder
|
||||
}
|
||||
|
||||
private void buildContext(Meta config) {
|
||||
if (this.context != null) {
|
||||
try {
|
||||
this.context.close();
|
||||
} catch (Exception ex) {
|
||||
context.getLogger().error("Failed to close context", ex);
|
||||
}
|
||||
}
|
||||
this.context = this.contextFactory.build(parentContext, config);
|
||||
context.setIO(new WorkbenchIOManager(new NumassIO(), this));
|
||||
processWindow = ProcessManagerFragment.attachToContext(context);
|
||||
|
@ -5,6 +5,7 @@
|
||||
*/
|
||||
package inr.numass.workbench;
|
||||
|
||||
import hep.dataforge.context.GlobalContext;
|
||||
import inr.numass.NumassContext;
|
||||
import java.io.IOException;
|
||||
import java.text.ParseException;
|
||||
@ -40,6 +41,14 @@ public class Workbench extends Application {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() throws Exception {
|
||||
GlobalContext.instance().close();
|
||||
super.stop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param args the command line arguments
|
||||
*/
|
||||
|
32
numass-main/src/test/java/inr/numass/NumassContextTest.java
Normal file
32
numass-main/src/test/java/inr/numass/NumassContextTest.java
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package inr.numass;
|
||||
|
||||
import inr.numass.storage.SetDirectionUtility;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexander Nozik
|
||||
*/
|
||||
public class NumassContextTest {
|
||||
|
||||
public NumassContextTest() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of close method, of class NumassContext.
|
||||
*/
|
||||
@Test
|
||||
public void testClose() throws Exception {
|
||||
System.out.println("close");
|
||||
NumassContext instance = new NumassContext();
|
||||
instance.close();
|
||||
assert SetDirectionUtility.cacheFile(instance).exists();
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package inr.numass.actions;
|
||||
|
||||
import inr.numass.utils.ExpressionUtils;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.junit.Assert;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexander Nozik
|
||||
*/
|
||||
public class PrepareDataActionTest {
|
||||
|
||||
public PrepareDataActionTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExpression() {
|
||||
Map<String, Double> exprParams = new HashMap<>();
|
||||
exprParams.put("U", 18000d);
|
||||
double correctionFactor = ExpressionUtils.evaluate("1 + 13.265 * exp(- U / 2343.4)", exprParams);
|
||||
Assert.assertEquals("Testing expression calculation", 1.006125, correctionFactor, 1e-5);
|
||||
}
|
||||
|
||||
}
|
@ -25,6 +25,37 @@ import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Locale;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
import static java.util.Locale.setDefault;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -129,6 +129,8 @@ public class NMPoint {
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
//TODO move dead time out of here!
|
||||
public double getCountRate(int from, int to, double deadTime) {
|
||||
double wind = getCountInWindow(from, to) / getLength();
|
||||
double res;
|
||||
|
@ -316,12 +316,14 @@ public class NumassDataLoader extends AbstractLoader implements ObjectLoader<Env
|
||||
|
||||
public boolean isReversed() {
|
||||
//TODO replace by meta tag in later revisions
|
||||
List<Envelope> points = getPoints();
|
||||
if (getPoints().size() >= 2) {
|
||||
return readTime(points.get(0).meta()).isAfter(readTime(points.get(1).meta()));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return SetDirectionUtility.isReversed(getFullPath(), n -> {
|
||||
List<Envelope> points = getPoints();
|
||||
if (getPoints().size() >= 2) {
|
||||
return readTime(points.get(0).meta()).isAfter(readTime(points.get(1).meta()));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package inr.numass.storage;
|
||||
|
||||
import hep.dataforge.context.Context;
|
||||
import hep.dataforge.context.GlobalContext;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* A temporary utility to store set directions to avoid multiple file reading
|
||||
*
|
||||
* @author Alexander Nozik
|
||||
*/
|
||||
public class SetDirectionUtility {
|
||||
|
||||
private static final String FILE_NAME = "numass_set_direction.map";
|
||||
|
||||
private static Map<String, Boolean> directionMap = new HashMap<>();
|
||||
|
||||
private static boolean isLoaded = false;
|
||||
|
||||
static synchronized boolean isReversed(String setName, Function<String, Boolean> provider) {
|
||||
if (!isLoaded) {
|
||||
load(GlobalContext.instance());
|
||||
}
|
||||
return directionMap.computeIfAbsent(setName, provider);
|
||||
}
|
||||
|
||||
public static File cacheFile(Context context) {
|
||||
return new File(context.io().getTmpDirectory(), FILE_NAME);
|
||||
}
|
||||
|
||||
public static synchronized void load(Context context) {
|
||||
context.getLogger().info("Loading set direction utility");
|
||||
File file = cacheFile(context);
|
||||
if (file.exists()) {
|
||||
try (ObjectInputStream st = new ObjectInputStream(new FileInputStream(file))) {
|
||||
directionMap = (Map<String, Boolean>) st.readObject();
|
||||
context.getLogger().info("Set directions successfully loaded from file");
|
||||
} catch (ClassNotFoundException | IOException ex) {
|
||||
context.getLogger().error("Failed to load numass direction mapping", ex);
|
||||
}
|
||||
}
|
||||
|
||||
isLoaded = true;
|
||||
}
|
||||
|
||||
public static synchronized void save(Context context) {
|
||||
try {
|
||||
File file = cacheFile(context);
|
||||
if (!file.exists()) {
|
||||
file.createNewFile();
|
||||
}
|
||||
try (ObjectOutputStream st = new ObjectOutputStream(new FileOutputStream(file))) {
|
||||
st.writeObject(directionMap);
|
||||
context.getLogger().info("Set directions successfully saved to file");
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
context.getLogger().error("Failed to save numass direction mapping", ex);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user