comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 2164:d548e2e13524

Added code for the simple case of "Bezugslinienverfahren" ("W auf freier Strecke"). flys-artifacts/trunk@3752 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 23 Jan 2012 16:55:42 +0000
parents d626ae185305
children 637dd38d0e2f
comparison
equal deleted inserted replaced
2163:105097966111 2164:d548e2e13524
381 return error(new WQKms[0], "No range found"); 381 return error(new WQKms[0], "No range found");
382 } 382 }
383 383
384 double refKm; 384 double refKm;
385 385
386 if (isFreeQ()) { 386 if (isFreeQ() || isFreeW()) {
387 refKm = range[0]; 387 refKm = range[0];
388 logger.debug("'free' calculation (km " + refKm + ")"); 388 logger.debug("'free' calculation (km " + refKm + ")");
389 } 389 }
390 else { 390 else {
391 Gauge gauge = river.determineGaugeByPosition(range[0]); 391 Gauge gauge = river.determineGaugeByPosition(range[0]);
732 if (range == null) { 732 if (range == null) {
733 logger.warn("no ranges found"); 733 logger.warn("no ranges found");
734 return null; 734 return null;
735 } 735 }
736 736
737 if (isFreeW()) {
738 WstValueTable wst = WstValueTableFactory.getTable(r);
739 if (wst == null) {
740 logger.warn("no wst value table found");
741 return null;
742 }
743 double km = range[0];
744
745 double [] outQs = new double[ws.length];
746
747 for (int i = 0; i < ws.length; ++i) {
748 double [] qs = wst.findQsForW(km, ws[i]);
749 if (qs.length < 1) {
750 logger.warn("no q found for w = " + ws[i]);
751 outQs[i] = Double.NaN;
752 }
753 if (qs.length > 1) {
754 // TODO: Generate more than w/q line!
755 logger.warn("more than one q found for w = " + ws[i]);
756 }
757 outQs[i] = qs[0];
758 }
759
760 return outQs;
761 }
762
737 if (debug) { 763 if (debug) {
738 logger.debug("range: " + Arrays.toString(range)); 764 logger.debug("range: " + Arrays.toString(range));
739 } 765 }
740 766
741 Gauge g = r.determineGaugeByPosition(range[0]); 767 Gauge g = r.determineGaugeByPosition(range[0]);
937 public boolean isQ() { 963 public boolean isQ() {
938 StateData mode = getData("wq_mode"); 964 StateData mode = getData("wq_mode");
939 return mode != null && mode.getValue().equals("Q"); 965 return mode != null && mode.getValue().equals("Q");
940 } 966 }
941 967
968 public boolean isFreeW() {
969 StateData mode = getData("wq_mode");
970 return mode != null && mode.getValue().equals("FREEW");
971 }
972
942 973
943 /** 974 /**
944 * Returns true, if the parameter is set to compute data on a free range. 975 * Returns true, if the parameter is set to compute data on a free range.
945 * Otherwise it returns false, which tells the calculation that it is bound 976 * Otherwise it returns false, which tells the calculation that it is bound
946 * to a gauge. 977 * to a gauge.
952 StateData mode = getData("wq_free"); 983 StateData mode = getData("wq_free");
953 String value = (mode != null) ? (String) mode.getValue() : null; 984 String value = (mode != null) ? (String) mode.getValue() : null;
954 985
955 logger.debug("isFreeQ: " + value); 986 logger.debug("isFreeQ: " + value);
956 987
957 if (value == null) { 988 return value != null && Boolean.valueOf(value);
958 return false;
959 }
960
961 return Boolean.valueOf(value);
962 } 989 }
963 990
964 991
965 /** 992 /**
966 * Returns the Q values based on a specified kilometer range. 993 * Returns the Q values based on a specified kilometer range.

http://dive4elements.wald.intevation.org