A lot of fixes. IO needs work
This commit is contained in:
parent
25dc485ebf
commit
82d434c5c1
@ -21,7 +21,7 @@ import java.util.Properties;
|
||||
public class NumassProperties {
|
||||
|
||||
private static File getNumassPropertiesFile() throws IOException {
|
||||
File file = new File(Global.Companion.instance().getUserDirectory(), "numass");
|
||||
File file = new File(Global.INSTANCE.getUserDirectory(), "numass");
|
||||
if (!file.exists()) {
|
||||
file.mkdirs();
|
||||
}
|
||||
@ -54,7 +54,7 @@ public class NumassProperties {
|
||||
}
|
||||
props.store(new FileOutputStream(store), "");
|
||||
} catch (IOException ex) {
|
||||
Global.Companion.instance().getLogger().error("Failed to save numass properties", ex);
|
||||
Global.INSTANCE.getLogger().error("Failed to save numass properties", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,9 +23,9 @@ public class SimpleNumassPoint extends MetaHolder implements NumassPoint {
|
||||
* @param blocks
|
||||
*/
|
||||
public SimpleNumassPoint(double voltage, Collection<? extends NumassBlock> blocks) {
|
||||
super(new MetaBuilder("point").setValue(HV_KEY, voltage));
|
||||
this.blocks = new ArrayList<>(blocks);
|
||||
this.blocks.sort(Comparator.comparing(NumassBlock::getStartTime));
|
||||
super.setMeta(new MetaBuilder("point").setValue(HV_KEY, voltage));
|
||||
}
|
||||
|
||||
public SimpleNumassPoint(Meta meta, Collection<? extends NumassBlock> blocks) {
|
||||
|
@ -27,7 +27,7 @@ public class NumassDataFactory extends DataFactory<NumassSet> {
|
||||
@Override
|
||||
protected void fill(DataTree.Builder<NumassSet> builder, Context context, Meta meta) {
|
||||
Meta newMeta = meta.getBuilder().setValue("type", "numass");
|
||||
Storage storage = context.loadFeature("hep.dataforge:storage", StorageManager.class).buildStorage(newMeta);
|
||||
Storage storage = context.load(StorageManager.class, Meta.empty()).buildStorage(newMeta);
|
||||
StorageUtils.loaderStream(storage).forEach(loader -> {
|
||||
if (loader instanceof NumassSet) {
|
||||
builder.putStatic(loader.getFullName().toUnescaped(), (NumassSet) loader);
|
||||
|
@ -29,13 +29,13 @@ public class NumassStorageFactory implements StorageType {
|
||||
*/
|
||||
@NotNull
|
||||
public static FileStorage buildLocal(Context context, Path file, boolean readOnly, boolean monitor) {
|
||||
StorageManager manager = context.loadFeature("hep.dataforge:storage", StorageManager.class);
|
||||
StorageManager manager = context.load(StorageManager.class, Meta.empty());
|
||||
return (FileStorage) manager.buildStorage(buildStorageMeta(file.toUri(), readOnly, monitor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static FileStorage buildLocal(Context context, String path, boolean readOnly, boolean monitor) {
|
||||
Path file = context.getIo().getDataFile(path);
|
||||
Path file = context.getIo().getDataDir().resolve(path);
|
||||
return buildLocal(context, file, readOnly, monitor);
|
||||
}
|
||||
|
||||
|
@ -31,5 +31,5 @@ try {
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
Global.terminate();
|
||||
Global.INSTANCE.terminate();
|
||||
}
|
||||
|
@ -13,7 +13,6 @@ import hep.dataforge.stat.fit.ParamSet
|
||||
import hep.dataforge.stat.models.XYModel
|
||||
import hep.dataforge.stat.parametric.ParametricFunction
|
||||
import hep.dataforge.tables.Table
|
||||
import inr.numass.NumassIOKt
|
||||
import inr.numass.NumassPlugin
|
||||
import inr.numass.data.SpectrumAdapter
|
||||
import inr.numass.data.SpectrumGenerator
|
||||
@ -23,7 +22,6 @@ import inr.numass.models.misc.ModGauss
|
||||
import inr.numass.models.sterile.NumassBeta
|
||||
import inr.numass.utils.DataModelUtils
|
||||
|
||||
import static hep.dataforge.grind.Grind.morph
|
||||
|
||||
Context ctx = Global.instance()
|
||||
ctx.getPluginManager().load(FXPlotManager)
|
||||
|
@ -48,7 +48,7 @@ public class PlotFitResultAction extends OneToOneAction<FitResult, FitResult> {
|
||||
|
||||
NavigableValuesSource data = input.getData();
|
||||
if (!(state.getModel() instanceof XYModel)) {
|
||||
context.getChronicle(name).reportError("The fit model should be instance of XYModel for this action. Action failed!");
|
||||
context.getHistory().getChronicle(name).reportError("The fit model should be instance of XYModel for this action. Action failed!");
|
||||
return input;
|
||||
}
|
||||
XYModel model = (XYModel) state.getModel();
|
||||
|
@ -19,7 +19,6 @@ import hep.dataforge.actions.ActionUtils;
|
||||
import hep.dataforge.context.Context;
|
||||
import hep.dataforge.context.Global;
|
||||
import hep.dataforge.context.IOManager;
|
||||
import hep.dataforge.data.FileDataFactory;
|
||||
import hep.dataforge.io.MetaFileReader;
|
||||
import hep.dataforge.meta.Meta;
|
||||
import org.apache.commons.cli.*;
|
||||
@ -34,7 +33,6 @@ import java.io.FileNotFoundException;
|
||||
import java.nio.file.Files;
|
||||
import java.util.Locale;
|
||||
|
||||
import static hep.dataforge.context.Global.out;
|
||||
import static inr.numass.Numass.printDescription;
|
||||
import static java.util.Locale.setDefault;
|
||||
|
||||
@ -52,7 +50,7 @@ public class Main {
|
||||
|
||||
public static void run(Context context, String[] args) throws Exception {
|
||||
if(context == null){
|
||||
context = Global.Companion.instance();
|
||||
context = Global.INSTANCE;
|
||||
}
|
||||
Logger logger = LoggerFactory.getLogger("numass-main");
|
||||
|
||||
@ -78,7 +76,7 @@ public class Main {
|
||||
if (args.length == 0) {
|
||||
HelpFormatter formatter = new HelpFormatter();
|
||||
formatter.printHelp("java -jar DataReader.jar [OPTIONS]", options);
|
||||
Companion.out().println("Trying to use default config location...");
|
||||
System.out.println("Trying to use default config location...");
|
||||
}
|
||||
|
||||
if (line.hasOption("c")) {
|
||||
@ -88,7 +86,7 @@ public class Main {
|
||||
return;
|
||||
}
|
||||
|
||||
java.nio.file.Path configFile = context.getIo().getFile(cfgPath);
|
||||
java.nio.file.Path configFile = context.getIo().getRootDir().resolve(cfgPath);
|
||||
|
||||
if (!Files.exists(configFile)) {
|
||||
throw new FileNotFoundException("Configuration file not found");
|
||||
@ -119,7 +117,7 @@ public class Main {
|
||||
dataDir = new File(workDir, dataPath);
|
||||
}
|
||||
if (dataDir.exists() && dataDir.isDirectory()) {
|
||||
context.setValue(FileDataFactory.Companion.getDATA_DIR_KEY(), dataDir.getAbsolutePath());
|
||||
context.setValue(IOManager.DATA_DIRECTORY_CONTEXT_KEY, dataDir.getAbsolutePath());
|
||||
} else {
|
||||
throw new FileNotFoundException("Data directory not found");
|
||||
}
|
||||
@ -134,7 +132,7 @@ public class Main {
|
||||
if (!outDir.exists()) {
|
||||
outDir.mkdirs();
|
||||
}
|
||||
context.setValue(NumassIO.Companion.getNUMASS_OUTPUT_CONTEXT_KEY(), outDir.toString());
|
||||
context.setValue(IOManager.WORK_DIRECTORY_CONTEXT_KEY, outDir.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ package inr.numass;
|
||||
|
||||
import hep.dataforge.actions.ActionManager;
|
||||
import hep.dataforge.context.Context;
|
||||
import hep.dataforge.context.ContextBuilder;
|
||||
import hep.dataforge.context.Global;
|
||||
import hep.dataforge.description.ActionDescriptor;
|
||||
import hep.dataforge.description.Descriptors;
|
||||
@ -31,14 +32,14 @@ import hep.dataforge.meta.Meta;
|
||||
public class Numass {
|
||||
|
||||
public static Context buildContext(Context parent, Meta meta) {
|
||||
return Context.Companion.builder("NUMASS", parent)
|
||||
return new ContextBuilder("NUMASS", parent)
|
||||
.properties(meta)
|
||||
.plugin(NumassPlugin.class)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Context buildContext() {
|
||||
return buildContext(Global.Companion.instance(), Meta.empty());
|
||||
return buildContext(Global.INSTANCE, Meta.empty());
|
||||
}
|
||||
|
||||
public static void printDescription(Context context) throws DescriptorException {
|
||||
@ -66,6 +67,6 @@ public class Numass {
|
||||
builder.text("***End of actions list***", "red");
|
||||
|
||||
|
||||
context.getIo().getMarkupRenderer().render(builder.build());
|
||||
context.getIo().getOutput().push(builder.build(), Meta.empty());
|
||||
}
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ public class MonitorCorrectAction extends OneToOneAction<Table, Table> {
|
||||
|
||||
TreeMap<Instant, Values> index = getMonitorIndex(monitor, sourceData);
|
||||
if (index.isEmpty()) {
|
||||
context.getChronicle(name).reportError("No monitor points found");
|
||||
context.getHistory().getChronicle(name).reportError("No monitor points found");
|
||||
return sourceData;
|
||||
}
|
||||
double norm = 0;
|
||||
@ -129,7 +129,7 @@ public class MonitorCorrectAction extends OneToOneAction<Table, Table> {
|
||||
// }
|
||||
Table res = new ListTable(dataList);
|
||||
|
||||
output(context, name, stream -> NumassUtils.INSTANCE.write(stream, meta, res));
|
||||
context.getIo().output(name, getName()).push(NumassUtils.INSTANCE.wrap(res, meta), Meta.empty());
|
||||
|
||||
return res;
|
||||
}
|
||||
@ -194,7 +194,7 @@ public class MonitorCorrectAction extends OneToOneAction<Table, Table> {
|
||||
String monitorFileName = meta.getString("monitorFile", "monitor");
|
||||
ListTable data = new ListTable(monitorPoints);
|
||||
|
||||
output(context, monitorFileName, stream -> NumassUtils.INSTANCE.write(stream, meta, data));
|
||||
context.getIo().output(monitorFileName, getName()).push(NumassUtils.INSTANCE.wrap(data, meta), Meta.empty());
|
||||
// ColumnedDataWriter.writeTable(stream, TableTransform.sort(data, "Timestamp", true), "Monitor points", monitorNames);
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import hep.dataforge.context.Context;
|
||||
import hep.dataforge.description.TypedActionDef;
|
||||
import hep.dataforge.io.ColumnedDataReader;
|
||||
import hep.dataforge.meta.Laminate;
|
||||
import hep.dataforge.meta.Meta;
|
||||
import hep.dataforge.tables.ListTable;
|
||||
import hep.dataforge.tables.Table;
|
||||
import hep.dataforge.tables.ValueMap;
|
||||
@ -30,7 +31,7 @@ public class SubstractSpectrumAction extends OneToOneAction<Table, Table> {
|
||||
protected Table execute(Context context, String name, Table input, Laminate inputMeta) {
|
||||
try {
|
||||
String referencePath = inputMeta. getString("file", "empty.dat");
|
||||
Path referenceFile = context.getIo().getFile(referencePath);
|
||||
Path referenceFile = context.getIo().getRootDir().resolve(referencePath);
|
||||
Table referenceTable = new ColumnedDataReader(referenceFile).toTable();
|
||||
ListTable.Builder builder = new ListTable.Builder(input.getFormat());
|
||||
input.getRows().forEach(point -> {
|
||||
@ -47,7 +48,8 @@ public class SubstractSpectrumAction extends OneToOneAction<Table, Table> {
|
||||
});
|
||||
|
||||
Table res = builder.build();
|
||||
output(context,name, stream -> NumassUtils.INSTANCE.write(stream,inputMeta,res));
|
||||
|
||||
context.getIo().output(name, getName()).push(NumassUtils.INSTANCE.wrap(res, inputMeta), Meta.empty());
|
||||
return res;
|
||||
} catch (IOException ex) {
|
||||
throw new RuntimeException("Could not read reference file", ex);
|
||||
|
@ -1,92 +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.data;
|
||||
|
||||
import hep.dataforge.context.Global;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.text.ParseException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static java.time.temporal.ChronoUnit.SECONDS;
|
||||
|
||||
/**
|
||||
* Заплатка для задания поправки на масс-спектрометр
|
||||
*
|
||||
* @author Darksnake
|
||||
*/
|
||||
public class MonitorCorrector {
|
||||
|
||||
private final double average;
|
||||
private final List<MonitorPoint> list;
|
||||
|
||||
public MonitorCorrector(String path) throws ParseException, IOException {
|
||||
this(Global.Companion.instance().getIo().getFile(path));
|
||||
}
|
||||
|
||||
public MonitorCorrector(Path monitorFile) throws ParseException, IOException {
|
||||
list = new ArrayList<>();
|
||||
|
||||
BufferedReader reader = new BufferedReader(Files.newBufferedReader(monitorFile));
|
||||
// Scanner sc = new Scanner(monitorFile);
|
||||
|
||||
double sum = 0;
|
||||
String str = reader.readLine();
|
||||
while ((str!=null)&&(!str.isEmpty())) {
|
||||
MonitorPoint point = new MonitorPoint(str);
|
||||
str = reader.readLine();
|
||||
list.add(point);
|
||||
sum += point.getMonitorValue();
|
||||
}
|
||||
average = sum / list.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* возвращает ближайшую по времени точку
|
||||
*
|
||||
* @param time
|
||||
* @return
|
||||
*/
|
||||
public MonitorPoint findNearestMonitorPoint(LocalDateTime time) {
|
||||
MonitorPoint nearest = this.list.get(0);
|
||||
for (MonitorPoint point : this.list) {
|
||||
if (Math.abs(point.getTime().until(time, SECONDS))
|
||||
< Math.abs(nearest.getTime().until(time, SECONDS))) {
|
||||
nearest = point;
|
||||
}
|
||||
}
|
||||
return nearest;
|
||||
|
||||
}
|
||||
|
||||
public double getCorrection(LocalDateTime start, double length) {
|
||||
LocalDateTime finish = start.plusSeconds((long) length);
|
||||
|
||||
return (findNearestMonitorPoint(start).getMonitorValue() + findNearestMonitorPoint(finish).getMonitorValue()) / 2 / average;
|
||||
}
|
||||
|
||||
public double getCorrectionError(LocalDateTime start, double length) {
|
||||
LocalDateTime finish = start.plusSeconds((long) length);
|
||||
|
||||
return (findNearestMonitorPoint(start).getMonitorError() + findNearestMonitorPoint(finish).getMonitorError()) / 2 / average;
|
||||
}
|
||||
|
||||
}
|
@ -40,7 +40,7 @@ public class TransmissionInterpolator implements UnivariateFunction {
|
||||
|
||||
public static TransmissionInterpolator fromFile(Context context, String path, String xName, String yName, int nSmooth, double w, double border) {
|
||||
try {
|
||||
Path dataFile = context.getIo().getFile(path);
|
||||
Path dataFile = context.getIo().getRootDir().resolve(path);
|
||||
ColumnedDataReader reader = new ColumnedDataReader(Files.newInputStream(dataFile));
|
||||
return new TransmissionInterpolator(reader, xName, yName, nSmooth, w, border);
|
||||
} catch (IOException ex) {
|
||||
|
@ -40,7 +40,7 @@ public class OldDataReader {
|
||||
public static Table readConfig(String path) throws IOException {
|
||||
String[] list = {"X", "time", "ushift"};
|
||||
ListTable.Builder res = new ListTable.Builder(list);
|
||||
Path file = Global.Companion.instance().getIo().getFile(path);
|
||||
Path file = Global.INSTANCE.getIo().getRootDir().resolve(path);
|
||||
Scanner sc = new Scanner(file);
|
||||
sc.nextLine();
|
||||
|
||||
@ -62,7 +62,7 @@ public class OldDataReader {
|
||||
public static Table readData(String path, double Elow) {
|
||||
SpectrumAdapter factory = new SpectrumAdapter(Meta.empty());
|
||||
ListTable.Builder res = new ListTable.Builder(Adapters.getFormat(factory));
|
||||
Path file = Global.Companion.instance().getIo().getFile(path);
|
||||
Path file = Global.INSTANCE.getIo().getRootDir().resolve(path);
|
||||
double x;
|
||||
int count;
|
||||
int time;
|
||||
@ -114,7 +114,7 @@ public class OldDataReader {
|
||||
public static Table readDataAsGun(String path, double Elow) {
|
||||
SpectrumAdapter factory = new SpectrumAdapter(Meta.empty());
|
||||
ListTable.Builder res = new ListTable.Builder(Adapters.getFormat(factory));
|
||||
Path file = Global.Companion.instance().getIo().getFile(path);
|
||||
Path file = Global.INSTANCE.getIo().getRootDir().resolve(path);
|
||||
double x;
|
||||
long count;
|
||||
int time;
|
||||
@ -147,7 +147,7 @@ public class OldDataReader {
|
||||
public static Table readSpectrumData(String path) {
|
||||
SpectrumAdapter factory = new SpectrumAdapter(Meta.empty());
|
||||
ListTable.Builder res = new ListTable.Builder(Adapters.getFormat(factory));
|
||||
Path file = Global.Companion.instance().getIo().getFile(path);
|
||||
Path file = Global.INSTANCE.getIo().getRootDir().resolve(path);
|
||||
double x;
|
||||
double count;
|
||||
double time;
|
||||
|
@ -1,179 +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
|
||||
|
||||
import ch.qos.logback.classic.LoggerContext
|
||||
import ch.qos.logback.classic.encoder.PatternLayoutEncoder
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent
|
||||
import ch.qos.logback.core.Appender
|
||||
import ch.qos.logback.core.FileAppender
|
||||
import hep.dataforge.context.Context
|
||||
import hep.dataforge.context.DefaultIOManager
|
||||
import hep.dataforge.context.IOManager
|
||||
import hep.dataforge.fx.plots.plusAssign
|
||||
import hep.dataforge.meta.Meta
|
||||
import hep.dataforge.names.Name
|
||||
import hep.dataforge.plots.PlotUtils
|
||||
import hep.dataforge.plots.XYFunctionPlot
|
||||
import hep.dataforge.plots.data.DataPlot
|
||||
import hep.dataforge.stat.fit.FitResult
|
||||
import hep.dataforge.stat.models.XYModel
|
||||
import hep.dataforge.tables.Adapters
|
||||
import hep.dataforge.utils.ReferenceRegistry
|
||||
import org.apache.commons.io.output.TeeOutputStream
|
||||
import org.slf4j.LoggerFactory
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.io.OutputStream
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* @author Darksnake
|
||||
*/
|
||||
class NumassIO : DefaultIOManager() {
|
||||
|
||||
internal var registry = ReferenceRegistry<OutputStream>()
|
||||
// FileAppender<ILoggingEvent> appender;
|
||||
|
||||
|
||||
override fun attach(context: Context) {
|
||||
super.attach(context)
|
||||
}
|
||||
|
||||
override fun createLoggerAppender(): Appender<ILoggingEvent> {
|
||||
val lc = LoggerFactory.getILoggerFactory() as LoggerContext
|
||||
val ple = PatternLayoutEncoder()
|
||||
|
||||
ple.pattern = "%date %level [%thread] %logger{10} [%file:%line] %msg%n"
|
||||
ple.context = lc
|
||||
ple.start()
|
||||
val appender = FileAppender<ILoggingEvent>()
|
||||
appender.file = File(workDir.toFile(), meta.getString("logFileName", "numass.log")).toString()
|
||||
appender.encoder = ple
|
||||
return appender
|
||||
}
|
||||
|
||||
override fun detach() {
|
||||
super.detach()
|
||||
registry.forEach { it ->
|
||||
try {
|
||||
it.close()
|
||||
} catch (e: IOException) {
|
||||
LoggerFactory.getLogger(javaClass).error("Failed to close output", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getExtension(type: String): String {
|
||||
return when (type) {
|
||||
IOManager.DEFAULT_OUTPUT_TYPE -> ".out"
|
||||
else -> "." + type
|
||||
}
|
||||
}
|
||||
|
||||
override fun out(stage: Name?, name: Name, type: String): OutputStream {
|
||||
val tokens = ArrayList<String>()
|
||||
if (context.hasValue("numass.path")) {
|
||||
val path = context.getString("numass.path")
|
||||
if (path.contains(".")) {
|
||||
tokens.addAll(Arrays.asList(*path.split(".".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()))
|
||||
} else {
|
||||
tokens.add(path)
|
||||
}
|
||||
}
|
||||
|
||||
if (stage != null && stage.length != 0) {
|
||||
tokens.addAll(Arrays.asList(*stage.asArray()))
|
||||
}
|
||||
|
||||
val dirName = tokens.joinToString(File.separator)
|
||||
val fileName = name.toString() + getExtension(type)
|
||||
val out = buildOut(workDir, dirName, fileName)
|
||||
registry.add(out)
|
||||
return out
|
||||
}
|
||||
|
||||
private fun buildOut(parentDir: Path, dirName: String?, fileName: String): OutputStream {
|
||||
val outputFile: Path
|
||||
|
||||
if (!Files.exists(parentDir)) {
|
||||
throw RuntimeException("Working directory does not exist")
|
||||
}
|
||||
try {
|
||||
val dir = if (dirName.isNullOrEmpty()) {
|
||||
parentDir
|
||||
} else {
|
||||
parentDir.resolve(dirName).also {
|
||||
Files.createDirectories(it)
|
||||
}
|
||||
}
|
||||
|
||||
// String output = source.meta().getString("output", this.meta().getString("output", fileName + ".onComplete"));
|
||||
outputFile = dir.resolve(fileName)
|
||||
|
||||
return if (context.getBoolean("numass.consoleOutput", false)) {
|
||||
TeeOutputStream(Files.newOutputStream(outputFile), System.out)
|
||||
} else {
|
||||
Files.newOutputStream(outputFile)
|
||||
}
|
||||
} catch (ex: IOException) {
|
||||
throw RuntimeException(ex)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
val NUMASS_OUTPUT_CONTEXT_KEY = "numass.outputDir"
|
||||
}
|
||||
}
|
||||
|
||||
fun FitResult.display(context: Context, stage: String = "fit") {
|
||||
val model = optModel(context).get() as XYModel
|
||||
|
||||
val adapter = model.adapter
|
||||
|
||||
val frame = PlotUtils.getPlotManager(context)
|
||||
.getPlotFrame(stage, "plot", Meta.empty())
|
||||
|
||||
val func = { x: Double -> model.spectrum.value(x, parameters) }
|
||||
|
||||
val fit = XYFunctionPlot("fit",func)
|
||||
fit.density = 100
|
||||
// ensuring all data points are calculated explicitly
|
||||
data.rows.map { dp -> Adapters.getXValue(adapter, dp).doubleValue() }.sorted().forEach { fit.calculateIn(it) }
|
||||
|
||||
frame.add(fit)
|
||||
|
||||
frame.add(DataPlot.plot("data", adapter, data))
|
||||
|
||||
val residualsFrame = PlotUtils.getPlotManager(context)
|
||||
.getPlotFrame(stage, "residuals", Meta.empty())
|
||||
|
||||
val residual = DataPlot("residuals");
|
||||
|
||||
data.rows.forEach {
|
||||
val x = Adapters.getXValue(adapter, it).doubleValue()
|
||||
val y = Adapters.getYValue(adapter, it).doubleValue()
|
||||
val err = Adapters.optYError(adapter,it).orElse(1.0)
|
||||
residual += Adapters.buildXYDataPoint(x, (y - func(x)) / err, 1.0)
|
||||
}
|
||||
|
||||
residualsFrame.add(residual)
|
||||
|
||||
}
|
@ -41,7 +41,7 @@ import org.apache.commons.math3.util.FastMath
|
||||
@PluginDef(
|
||||
group = "inr.numass",
|
||||
name = "numass",
|
||||
dependsOn = arrayOf("hep.dataforge:math", "hep.dataforge:MINUIT", "hep.dataforge:actions"),
|
||||
dependsOn = arrayOf("hep.dataforge:math", "hep.dataforge:MINUIT", "hep.dataforge:actions", "hep.dataforge:io.dir"),
|
||||
support = false,
|
||||
info = "Numass data analysis tools"
|
||||
)
|
||||
@ -50,8 +50,7 @@ class NumassPlugin : BasicPlugin() {
|
||||
override fun attach(context: Context) {
|
||||
// StorageManager.buildFrom(context);
|
||||
super.attach(context)
|
||||
context.pluginManager.load(NumassIO())
|
||||
loadModels(context.get(ModelManager::class.java))
|
||||
loadModels(context[ModelManager::class.java])
|
||||
loadMath(MathPlugin.buildFrom(context))
|
||||
|
||||
context.get(ActionManager::class.java).apply {
|
||||
@ -266,10 +265,8 @@ class NumassPlugin : BasicPlugin() {
|
||||
}
|
||||
}
|
||||
|
||||
class Factory : PluginFactory {
|
||||
override fun type(): Class<out Plugin> {
|
||||
return NumassPlugin::class.java
|
||||
}
|
||||
class Factory : PluginFactory() {
|
||||
override val type: Class<out Plugin> = NumassPlugin::class.java
|
||||
|
||||
override fun build(meta: Meta): Plugin {
|
||||
return NumassPlugin()
|
||||
|
@ -19,6 +19,7 @@ import hep.dataforge.context.Context
|
||||
import hep.dataforge.data.DataNode
|
||||
import hep.dataforge.data.DataSet
|
||||
import hep.dataforge.data.binary.Binary
|
||||
import hep.dataforge.fx.plots.plusAssign
|
||||
import hep.dataforge.io.envelopes.DefaultEnvelopeType
|
||||
import hep.dataforge.io.envelopes.Envelope
|
||||
import hep.dataforge.io.envelopes.EnvelopeBuilder
|
||||
@ -28,7 +29,13 @@ import hep.dataforge.io.markup.SimpleMarkupRenderer
|
||||
import hep.dataforge.kodex.nullable
|
||||
import hep.dataforge.meta.Meta
|
||||
import hep.dataforge.meta.MetaBuilder
|
||||
import hep.dataforge.plots.PlotUtils
|
||||
import hep.dataforge.plots.XYFunctionPlot
|
||||
import hep.dataforge.plots.data.DataPlot
|
||||
import hep.dataforge.plots.jfreechart.JFreeChartFrame
|
||||
import hep.dataforge.stat.fit.FitResult
|
||||
import hep.dataforge.stat.models.XYModel
|
||||
import hep.dataforge.tables.Adapters
|
||||
import hep.dataforge.tables.ListTable
|
||||
import hep.dataforge.tables.Table
|
||||
import hep.dataforge.tables.ValueMap
|
||||
@ -132,11 +139,11 @@ object NumassUtils {
|
||||
|
||||
}
|
||||
|
||||
fun write(stream: OutputStream, meta: Meta, something: Markedup) {
|
||||
writeEnvelope(stream, meta) { out ->
|
||||
SimpleMarkupRenderer(out).render(something.markup(meta))
|
||||
}
|
||||
}
|
||||
// fun write(stream: OutputStream, meta: Meta, something: Markedup) {
|
||||
// writeEnvelope(stream, meta) { out ->
|
||||
// SimpleMarkupRenderer(out).render(something.markup(meta))
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Convert numass set to DataNode
|
||||
@ -262,3 +269,38 @@ fun Values.unbox(): Map<String, Any?> {
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
fun FitResult.display(context: Context, stage: String = "fit") {
|
||||
val model = optModel(context).get() as XYModel
|
||||
|
||||
val adapter = model.adapter
|
||||
|
||||
val frame = PlotUtils.getPlotManager(context)
|
||||
.getPlotFrame(stage, "plot", Meta.empty())
|
||||
|
||||
val func = { x: Double -> model.spectrum.value(x, parameters) }
|
||||
|
||||
val fit = XYFunctionPlot("fit",func)
|
||||
fit.density = 100
|
||||
// ensuring all data points are calculated explicitly
|
||||
data.rows.map { dp -> Adapters.getXValue(adapter, dp).doubleValue() }.sorted().forEach { fit.calculateIn(it) }
|
||||
|
||||
frame.add(fit)
|
||||
|
||||
frame.add(DataPlot.plot("data", adapter, data))
|
||||
|
||||
val residualsFrame = PlotUtils.getPlotManager(context)
|
||||
.getPlotFrame(stage, "residuals", Meta.empty())
|
||||
|
||||
val residual = DataPlot("residuals");
|
||||
|
||||
data.rows.forEach {
|
||||
val x = Adapters.getXValue(adapter, it).doubleValue()
|
||||
val y = Adapters.getYValue(adapter, it).doubleValue()
|
||||
val err = Adapters.optYError(adapter,it).orElse(1.0)
|
||||
residual += Adapters.buildXYDataPoint(x, (y - func(x)) / err, 1.0)
|
||||
}
|
||||
|
||||
residualsFrame.add(residual)
|
||||
|
||||
}
|
||||
|
@ -28,7 +28,6 @@ import hep.dataforge.values.Values
|
||||
import inr.numass.NumassUtils
|
||||
import inr.numass.data.analyzers.NumassAnalyzer
|
||||
import inr.numass.data.api.NumassPoint
|
||||
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
@ -57,7 +56,8 @@ class MergeDataAction : ManyToOneAction<Table, Table>() {
|
||||
}
|
||||
|
||||
override fun afterGroup(context: Context, groupName: String, outputMeta: Meta, output: Table) {
|
||||
output(context, groupName) { stream -> NumassUtils.write(stream, outputMeta, output) }
|
||||
context.io.output(groupName, name).push(NumassUtils.wrap(output, outputMeta))
|
||||
super.afterGroup(context, groupName, outputMeta, output)
|
||||
}
|
||||
|
||||
private fun mergeDataPoints(dp1: Values?, dp2: Values?): Values? {
|
||||
|
@ -85,7 +85,7 @@ class SummaryAction : ManyToOneAction<FitState, Table>() {
|
||||
weights[i] += weight
|
||||
}
|
||||
values[values.size - 1] = Value.of(value.chi2)
|
||||
val point = ValueMap.of(names, *values as Array<Any>)
|
||||
val point = ValueMap.of(names, *values)
|
||||
res.row(point)
|
||||
}
|
||||
|
||||
@ -98,13 +98,13 @@ class SummaryAction : ManyToOneAction<FitState, Table>() {
|
||||
averageValues[2 * i + 2] = Value.of(1 / Math.sqrt(weights[i]))
|
||||
}
|
||||
|
||||
res.row(ValueMap.of(names, *averageValues as Array<Any>))
|
||||
res.row(ValueMap.of(names, *averageValues))
|
||||
|
||||
return res.build()
|
||||
}
|
||||
|
||||
override fun afterGroup(context: Context, groupName: String, outputMeta: Meta, output: Table) {
|
||||
output(context, groupName) { stream -> NumassUtils.write(stream, outputMeta, output) }
|
||||
context.io.output(groupName, name).push(NumassUtils.wrap(output, outputMeta))
|
||||
super.afterGroup(context, groupName, outputMeta, output)
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,7 @@ class TransformDataAction : OneToOneAction<Table, Table>() {
|
||||
val res = table.addColumn(ListColumn.build(table.getColumn(COUNT_RATE_KEY).format, cr.stream()))
|
||||
.addColumn(ListColumn.build(table.getColumn(COUNT_RATE_ERROR_KEY).format, crErr.stream()))
|
||||
|
||||
output(context, name) { stream -> NumassUtils.write(stream, meta, res) }
|
||||
context.io.output(name, name).push(NumassUtils.wrap(res, meta))
|
||||
return res
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package inr.numass.models.mc
|
||||
|
||||
import hep.dataforge.context.Global
|
||||
import hep.dataforge.fx.plots.FXPlotManager
|
||||
import hep.dataforge.kodex.buildMeta
|
||||
import hep.dataforge.maths.chain.Chain
|
||||
@ -34,7 +35,7 @@ fun main(args: Array<String>) {
|
||||
.setPar("X", 0.0, 0.01, 0.0, java.lang.Double.POSITIVE_INFINITY)
|
||||
.setPar("trap", 1.0, 0.01, 0.0, java.lang.Double.POSITIVE_INFINITY)
|
||||
|
||||
val sp = SterileNeutrinoSpectrum(global, meta)
|
||||
val sp = SterileNeutrinoSpectrum(Global, meta)
|
||||
|
||||
val spectrumPlot = XYFunctionPlot.plot("spectrum", 14000.0, 18600.0, 500) {
|
||||
sp.value(it, allPars)
|
||||
|
@ -1,8 +1,8 @@
|
||||
package inr.numass.scripts.utils
|
||||
|
||||
import hep.dataforge.context.Global
|
||||
import hep.dataforge.io.XMLMetaWriter
|
||||
import hep.dataforge.kodex.buildMeta
|
||||
import hep.dataforge.kodex.global
|
||||
import hep.dataforge.kodex.useValue
|
||||
import hep.dataforge.meta.Meta
|
||||
import hep.dataforge.meta.MetaBuilder
|
||||
@ -14,7 +14,7 @@ import java.io.File
|
||||
import java.nio.file.Paths
|
||||
|
||||
private fun createSummaryNode(storage: Storage): MetaBuilder {
|
||||
global.logger.info("Reading content of shelf {}", storage.fullName)
|
||||
Global.logger.info("Reading content of shelf {}", storage.fullName)
|
||||
|
||||
val builder = MetaBuilder("shelf")
|
||||
.setValue("name", storage.name)
|
||||
@ -24,7 +24,7 @@ private fun createSummaryNode(storage: Storage): MetaBuilder {
|
||||
}
|
||||
storage.loaders().filterIsInstance(NumassDataLoader::class.java).forEach { set ->
|
||||
|
||||
global.logger.info("Reading content of set {}", set.fullName)
|
||||
Global.logger.info("Reading content of set {}", set.fullName)
|
||||
|
||||
val setBuilder = MetaBuilder("set")
|
||||
.setValue("name", set.name)
|
||||
@ -83,14 +83,14 @@ fun main(args: Array<String>) {
|
||||
output.createNewFile()
|
||||
|
||||
|
||||
val storage = NumassStorageFactory.buildLocal(global, path, true, false)
|
||||
val storage = NumassStorageFactory.buildLocal(Global, path, true, false)
|
||||
val summary = createSummaryNode(storage)
|
||||
|
||||
global.logger.info("Writing output meta")
|
||||
Global.logger.info("Writing output meta")
|
||||
output.outputStream().use {
|
||||
XMLMetaWriter().write(it, summary)
|
||||
}
|
||||
global.logger.info("Calculating statistics")
|
||||
Global.logger.info("Calculating statistics")
|
||||
val statistics = MetaBuilder("statistics")
|
||||
(14000..18600).step(100).map { it.toDouble() }.forEach {
|
||||
statistics.putNode(calculateStatistics(summary, it))
|
||||
|
@ -69,7 +69,7 @@ class NumassFitScanSummaryTask : AbstractTask<Table>() {
|
||||
pars.getValue("trap"))
|
||||
}
|
||||
val res = TableTransform.sort(builder.build(), "m", true)
|
||||
output(context, nodeName) { stream -> NumassUtils.write(stream, meta, res) }
|
||||
context.io.output(nodeName, stage = name).push(NumassUtils.wrap(res, meta))
|
||||
return res
|
||||
}
|
||||
|
||||
|
@ -80,20 +80,17 @@ val monitorTableTask = task("monitor") {
|
||||
}
|
||||
plots + DataPlot.plot(name, Adapters.buildXYAdapter("timestamp", "cr", "crErr"), res)
|
||||
}.also { frame ->
|
||||
if (frame is JFreeChartFrame) {
|
||||
//add set markers
|
||||
addSetMarkers(frame, data.values)
|
||||
}
|
||||
context.io.out("numass.monitor", name, "dfp").use {
|
||||
NumassUtils.writeEnvelope(it, PlotFrame.Wrapper().wrap(frame))
|
||||
}
|
||||
}
|
||||
if (frame is JFreeChartFrame) {
|
||||
//add set markers
|
||||
addSetMarkers(frame, data.values)
|
||||
}
|
||||
context.io.output(name, stage = "numass.monitor", type = "dfp").push(PlotFrame.Wrapper().wrap(frame))
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context.io.out("numass.monitor", name).use {
|
||||
NumassUtils.write(it, meta, res)
|
||||
}
|
||||
context.io.output(name, stage = "numass.monitor").push(NumassUtils.wrap(res, meta))
|
||||
|
||||
return@join res;
|
||||
}
|
||||
@ -107,9 +104,7 @@ val analyzeTask = task("analyze") {
|
||||
pipe<NumassSet, Table> { set ->
|
||||
SmartAnalyzer().analyzeSet(set, meta).also { res ->
|
||||
val outputMeta = meta.builder.putNode("data", set.meta)
|
||||
context.io.out("numass.analyze", name).use {
|
||||
NumassUtils.write(it, outputMeta, res)
|
||||
}
|
||||
context.io.output(name, stage = "numass.analyze").push(NumassUtils.wrap(res, outputMeta))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -175,9 +170,7 @@ val subtractEmptyTask = task("dif") {
|
||||
|
||||
res.goal.onComplete { r, _ ->
|
||||
if (r != null) {
|
||||
context.io.out("numass.merge", input.name + "_subtract").use {
|
||||
NumassUtils.write(it, resMeta, r)
|
||||
}
|
||||
context.io.output(input.name + "_subtract", stage = "numass.merge").push(NumassUtils.wrap(r,resMeta))
|
||||
}
|
||||
}
|
||||
|
||||
@ -228,7 +221,7 @@ val fitTask = task("fit") {
|
||||
configure(meta.getMeta("fit"))
|
||||
}
|
||||
pipe<Table, FitResult> { data ->
|
||||
context.io.out("numass.fit", name).use { out ->
|
||||
context.io.stream(name, "numass.fit").use { out ->
|
||||
val writer = PrintWriter(out)
|
||||
writer.printf("%n*** META ***%n")
|
||||
writer.println(meta.toString())
|
||||
|
@ -30,7 +30,7 @@ public class TransmissionInterpolatorTest {
|
||||
public static void main(String[] args) {
|
||||
JFreeChartFrame frame = NumassPluginKt.displayJFreeChart("TransmissionInterpolatorTest");
|
||||
//JFreeChartFrame.drawFrame("TransmissionInterpolatorTest", null);
|
||||
TransmissionInterpolator interpolator = TransmissionInterpolator.fromFile(Global.Companion.instance(),
|
||||
TransmissionInterpolator interpolator = TransmissionInterpolator.fromFile(Global.INSTANCE,
|
||||
"d:\\sterile-new\\loss2014-11\\.dataforge\\merge\\empty_sum.onComplete", "Uset", "CR", 15, 0.8, 19002d);
|
||||
frame.add(DataPlot.plot("data", interpolator.getX(), interpolator.getY()));
|
||||
frame.add(XYFunctionPlot.Companion.plot("interpolated", interpolator.getXmin(), interpolator.getXmax(), 2000, interpolator::value));
|
||||
|
Loading…
Reference in New Issue
Block a user