From 3025f597c0ddb37e5a772e5dc0e8a031b90f6995 Mon Sep 17 00:00:00 2001 From: Simon Ebner Date: Mon, 23 Sep 2013 13:18:29 +0200 Subject: [PATCH] FDA-27 Have filename available for manipulations --- .../main/java/ch/psi/fda/aq/Acquisition.java | 5 ++++ .../core/manipulator/JythonManipulation.java | 24 ++++++++++++++++++- .../templates/scan1d_manipulationNoDouble.xml | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java b/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java index 4e78ad1..021cd93 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java @@ -510,6 +510,11 @@ public class Acquisition { } JythonManipulation manipulation = new JythonManipulation(sm.getId(), sm.getScript(), mapping, sm.isReturnArray()); + + if(configuration.getData()!=null){ // Safety + manipulation.setVariable("FILENAME", configuration.getData().getFileName()); + } + this.manipulations.add(manipulation); } } diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/core/manipulator/JythonManipulation.java b/ch.psi.fda/src/main/java/ch/psi/fda/core/manipulator/JythonManipulation.java index ce6616a..85fcd6b 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/core/manipulator/JythonManipulation.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/core/manipulator/JythonManipulation.java @@ -21,7 +21,9 @@ package ch.psi.fda.core.manipulator; import gov.aps.jca.CAException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -102,6 +104,10 @@ public class JythonManipulation implements Manipulation{ */ private String jythonCall; + + private Map gvariables = new HashMap(); + + public JythonManipulation(String id, String script, List mapping){ this(id, script, mapping, false); } @@ -232,12 +238,19 @@ public class JythonManipulation implements Manipulation{ buffer.setCharAt(buffer.length()-1, ')'); jythonCall = buffer.toString(); - } @Override public Object execute(DataMessage message){ + // Set global variables - WORKAROUND gvariables + // This block is not in initialization as we want to assure that all invocations + // of this manipulation will get the same value (i.e. to prevent inconsistent behaviour + // if variable was changed during an execution of the manipulation) + for(String k: gvariables.keySet()){ + engine.put(k, gvariables.get(k)); + } + // Manipulate data for(int i=0;i def process(a): print a[1] + print FILENAME return 1.0