Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 2415:64dd65aa620d
Partial fix for flys/issue499
flys-artifacts/trunk@4046 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 13 Feb 2012 17:49:04 +0000 |
parents | c321b39b39ab |
children | 899ca89f497e |
comparison
equal
deleted
inserted
replaced
2414:b5f5af53a526 | 2415:64dd65aa620d |
---|---|
367 if (qs == null) { | 367 if (qs == null) { |
368 logger.debug("Determine Q values based on a set of W values."); | 368 logger.debug("Determine Q values based on a set of W values."); |
369 qSel = false; | 369 qSel = false; |
370 ws = getWs(); | 370 ws = getWs(); |
371 double [][] qws = getQsForWs(ws); | 371 double [][] qws = getQsForWs(ws); |
372 if (qws == null) { | 372 if (qws == null || qws.length == 0) { |
373 return error(new WQKms[0], "converting.ws.to.qs.failed"); | 373 return error(new WQKms[0], "converting.ws.to.qs.failed"); |
374 } | 374 } |
375 qs = qws[0]; | 375 qs = qws[0]; |
376 | 376 |
377 if (qws[1] != null) { // If new ws where generated. | 377 if (qws[1] != null) { // If new ws where generated. |
727 logger.debug("Reference end km : " + sd.getValue()); | 727 logger.debug("Reference end km : " + sd.getValue()); |
728 } | 728 } |
729 | 729 |
730 String input = (String) sd.getValue(); | 730 String input = (String) sd.getValue(); |
731 | 731 |
732 if (input == null | (input = input.trim()).length() == 0) { | 732 if (input == null || (input = input.trim()).length() == 0) { |
733 logger.warn("reference end string is empty."); | 733 logger.warn("reference end string is empty."); |
734 return null; | 734 return null; |
735 } | 735 } |
736 | 736 |
737 TDoubleArrayList endKms = new TDoubleArrayList(); | 737 TDoubleArrayList endKms = new TDoubleArrayList(); |
847 * | 847 * |
848 * @return an array of Q values. | 848 * @return an array of Q values. |
849 */ | 849 */ |
850 public double [][] getQsForWs(double[] ws) { | 850 public double [][] getQsForWs(double[] ws) { |
851 | 851 |
852 if (ws == null) { | |
853 logger.error("getQsForWs: ws == null"); | |
854 return null; | |
855 } | |
856 | |
852 boolean debug = logger.isDebugEnabled(); | 857 boolean debug = logger.isDebugEnabled(); |
853 | 858 |
854 if (debug) { | 859 if (debug) { |
855 logger.debug("FLYSArtifact.getQsForWs"); | 860 logger.debug("FLYSArtifact.getQsForWs"); |
856 } | 861 } |
866 logger.warn("no ranges found"); | 871 logger.warn("no ranges found"); |
867 return null; | 872 return null; |
868 } | 873 } |
869 | 874 |
870 if (isFreeW()) { | 875 if (isFreeW()) { |
876 logger.debug("Bezugslinienverfahren I: W auf freier Strecke"); | |
871 // The simple case of the "Bezugslinienverfahren" | 877 // The simple case of the "Bezugslinienverfahren" |
872 // "W auf freier Strecke". | 878 // "W auf freier Strecke". |
873 WstValueTable wst = WstValueTableFactory.getTable(r); | 879 WstValueTable wst = WstValueTableFactory.getTable(r); |
874 if (wst == null) { | 880 if (wst == null) { |
875 logger.warn("no wst value table found"); | 881 logger.warn("no wst value table found"); |
881 TDoubleArrayList outWs = new TDoubleArrayList(ws.length); | 887 TDoubleArrayList outWs = new TDoubleArrayList(ws.length); |
882 | 888 |
883 boolean generatedWs = false; | 889 boolean generatedWs = false; |
884 | 890 |
885 for (int i = 0; i < ws.length; ++i) { | 891 for (int i = 0; i < ws.length; ++i) { |
892 double w = ws[i]; | |
893 if (debug) { | |
894 logger.debug("getQsForWs: lookup Q for W: " + w); | |
895 } | |
886 // There could bemore than one Q per W. | 896 // There could bemore than one Q per W. |
887 double [] qs = wst.findQsForW(km, ws[i]); | 897 double [] qs = wst.findQsForW(km, w); |
888 for (int j = 0; j < qs.length; ++j) { | 898 for (int j = 0; j < qs.length; ++j) { |
889 outWs.add(ws[i]); | 899 outWs.add(ws[i]); |
890 outQs.add(qs[j]); | 900 outQs.add(qs[j]); |
891 } | 901 } |
892 generatedWs |= qs.length != 1; | 902 generatedWs |= qs.length != 1; |
893 } | 903 } |
894 | 904 |
905 if (debug) { | |
906 logger.debug("getQsForWs: number of Qs: " + outQs.size()); | |
907 } | |
908 | |
895 return new double [][] { | 909 return new double [][] { |
896 outQs.toNativeArray(), | 910 outQs.toNativeArray(), |
897 generatedWs ? outWs.toNativeArray() : null }; | 911 generatedWs ? outWs.toNativeArray() : null }; |
898 } | 912 } |
899 | 913 |
915 Map<String, double [][]> tmp = dt.getValues(); | 929 Map<String, double [][]> tmp = dt.getValues(); |
916 | 930 |
917 double[][] values = tmp.get(g.getName()); | 931 double[][] values = tmp.get(g.getName()); |
918 double[] qs = new double[ws.length]; | 932 double[] qs = new double[ws.length]; |
919 | 933 |
934 TDoubleArrayList wsOut = new TDoubleArrayList(ws.length); | |
935 TDoubleArrayList qsOut = new TDoubleArrayList(ws.length); | |
936 | |
920 for (int i = 0; i < ws.length; i++) { | 937 for (int i = 0; i < ws.length; i++) { |
921 qs[i] = dt.getQForW(values, ws[i]); | 938 if (Double.isNaN(ws[i])) { |
939 logger.warn("W is NaN: ignored"); | |
940 continue; | |
941 } | |
942 double w = ws[i] / 100.0; | |
943 double q = dt.getQForW(values, w); | |
944 if (Double.isNaN(q)) { | |
945 logger.warn("No Q found for W = " + ws[i]); | |
946 continue; | |
947 } | |
948 wsOut.add(w); | |
949 qsOut.add(q); | |
922 if (debug) { | 950 if (debug) { |
923 logger.debug("w: " + ws[i] + " -> q: " + qs[i]); | 951 logger.debug("w: " + w + " -> q: " + q); |
924 } | 952 } |
925 } | 953 } |
926 | 954 |
927 return new double [][] { qs, null }; | 955 return new double [][] { |
956 qsOut.toNativeArray(), | |
957 wsOut.toNativeArray() | |
958 }; | |
928 } | 959 } |
929 | 960 |
930 | 961 |
931 /** | 962 /** |
932 * Determines the selected mode of distance/range input. | 963 * Determines the selected mode of distance/range input. |
1102 return mode != null && mode.getValue().equals("Q"); | 1133 return mode != null && mode.getValue().equals("Q"); |
1103 } | 1134 } |
1104 | 1135 |
1105 public boolean isFreeW() { | 1136 public boolean isFreeW() { |
1106 StateData mode = getData("wq_mode"); | 1137 StateData mode = getData("wq_mode"); |
1107 return mode != null && mode.getValue().equals("FREEW"); | 1138 return mode != null && mode.getValue().equals("WFREE"); |
1108 } | 1139 } |
1109 | 1140 |
1110 | 1141 |
1111 /** | 1142 /** |
1112 * Returns true, if the parameter is set to compute data on a free range. | 1143 * Returns true, if the parameter is set to compute data on a free range. |
1179 StateData dMode = getData("wq_mode"); | 1210 StateData dMode = getData("wq_mode"); |
1180 StateData dSingle = getData("wq_single"); | 1211 StateData dSingle = getData("wq_single"); |
1181 | 1212 |
1182 String mode = (dMode != null) ? (String) dMode.getValue() : ""; | 1213 String mode = (dMode != null) ? (String) dMode.getValue() : ""; |
1183 | 1214 |
1184 if (mode.equals("W")) { | 1215 if (mode.equals("W") || mode.equals("WFREE")) { |
1185 if (dSingle != null) { | 1216 if (dSingle != null) { |
1186 return getSingleWQValues(); | 1217 return getSingleWQValues(); |
1187 } | 1218 } |
1188 else { | 1219 else { |
1189 return getWQTriple(); | 1220 return getWQTriple(); |