Displaying differences for changeset
 
display as  

src/java/m/oms/ages/V1_0.java

@@ -5,14 +5,22 @@
 package m.oms.ages;
 
 import csip.ModelDataService;
+import csip.ServiceException;
 import csip.annotations.*;
 import static csip.annotations.ResourceType.*;
 import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import javax.ws.rs.Path;
 import static m.oms.ages.V1_0.KEY_SCRIPT;
+import ngmf.util.cosu.luca.of.KGE;
+import ngmf.util.cosu.luca.of.NS2LOG;
 import oms.utils.Utils;
+import oms3.ObjectiveFunction;
 import oms3.util.Statistics;
 
 /**
@@ -37,6 +45,14 @@
   public static final String PAR_STARTTIME = "startTime";
   public static final String PAR_ENDTIME = "endTime";
 
+  Map<String, ObjectiveFunction> ofs = new HashMap<>();
+
+
+  {
+    ofs.put("kge", new KGE());
+    ofs.put("nslog", new NS2LOG());
+  }
+
 
   @Override
   public void doProcess() throws Exception {
@@ -46,7 +62,8 @@
     // pass request param to model runtime parameter -> run.inc
     Map<String, String> agesParam = new HashMap<>();
     Utils.passReqQuotedParam(agesParam, parameter(), PAR_STARTTIME, PAR_ENDTIME);
-    Utils.passOptParam(agesParam, parameter(), "flowRouteTA", "soilOutLPS");
+    Utils.passOptParam(agesParam, parameter(),
+        "flowRouteTA", "soilOutLPS");
     Utils.createParamInclude(agesParam, getWorkspaceFile(RUN_INC));
 
     String start = parameter().getString(PAR_STARTTIME);
@@ -62,24 +79,32 @@
 
     Utils.runAges(d, getWorkspaceDir(), parameter(), resources(), LOG);
 
-    if (parameter().has("obs") && parameter().has("sim")) {
-      String obs = parameter().getString("obs");
-      String sim = parameter().getString("sim");
-
-      double missing = parameter().getDouble("missing", -9999d);
-
-      // e.g. obs_data02_14.csv/obs/orun[1]
-      double[] obsData = Utils.getData(obs, getWorkspaceDir(), start, end);
-
-      // e.g. output/csip_run/out/Outlet.csv/output/catchmentSimRunoff
-      double[] simData = Utils.getData(sim, getWorkspaceDir(), start, end);
-
-      results().put("kge", Statistics.kge(obsData, simData, missing));
-//      results().put("ns", Statistics.nashSutcliffe(obsData, simData, 2.0, missing));
-//      results().put("nslog", Statistics.nashSutcliffeLog(obsData, simData, 2.0, missing));
+    for (String ofName : getRequestedObjfunc(ofs.keySet())) {
+      String[] data = parameter().getStringArray(ofName);
+      double v = calc_of(ofs.get(ofName), data[0], data[1], start, end);
+      results().put(ofName, v);
     }
-
 //  results().put(getWorkspaceFile("output"));
   }
 
+
+  private List<String> getRequestedObjfunc(Set<String> names) {
+    List<String> l = new ArrayList<>();
+    for (String ofName : names) {
+      if (parameter().has(ofName)) {
+        l.add(ofName);
+      }
+    }
+    return l;
+  }
+
+
+  private double calc_of(ObjectiveFunction of, String obs, String sim, String start, String end) throws IOException, ServiceException {
+    // e.g. obs_data02_14.csv/obs/orun[1]
+    double[] obsData = Utils.getData(obs, getWorkspaceDir(), start, end);
+    // e.g. output/csip_run/out/Outlet.csv/output/catchmentSimRunoff
+    double[] simData = Utils.getData(sim, getWorkspaceDir(), start, end);
+    return of.calculate(obsData, simData, parameter().getDouble("missing", -9999d));
+  }
+
 }

web/WEB-INF/csip-defaults.json

@@ -1,5 +1,5 @@
 {
-  "csip.context.version": "$version: 0.1.23 5d4a5ab1aed7 2020-02-29 od, built at 2020-03-01 17:06 by od$",
+  "csip.context.version": "$version: 0.1.24 a0856fce818e 2020-03-01 od, built at 2020-03-02 17:17 by od$",
   "oms.java.home": "/opt/jdk1.8.0_51",
   "csip.keepworkspace": false,
   "csip.session.ttl": "PT10S",