comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/WQSelect.java @ 9130:f61bc0c63188

WQSelect can now handle distance-only data
author gernotbelger
date Wed, 06 Jun 2018 14:16:28 +0200
parents e3519c3e7a0a
children 2323d005f9a5
comparison
equal deleted inserted replaced
9129:28eec75415d8 9130:f61bc0c63188
30 import org.dive4elements.river.model.Wst; 30 import org.dive4elements.river.model.Wst;
31 31
32 import org.dive4elements.river.artifacts.D4EArtifact; 32 import org.dive4elements.river.artifacts.D4EArtifact;
33 33
34 import org.dive4elements.river.artifacts.access.RangeAccess; 34 import org.dive4elements.river.artifacts.access.RangeAccess;
35 import org.dive4elements.river.artifacts.access.RangeAccess.KM_MODE;
35 import org.dive4elements.river.artifacts.access.ComputationRangeAccess; 36 import org.dive4elements.river.artifacts.access.ComputationRangeAccess;
36 import org.dive4elements.river.artifacts.model.WstFactory; 37 import org.dive4elements.river.artifacts.model.WstFactory;
37 import org.dive4elements.river.artifacts.model.WstValueTable; 38 import org.dive4elements.river.artifacts.model.WstValueTable;
38 import org.dive4elements.river.artifacts.model.WstValueTableFactory; 39 import org.dive4elements.river.artifacts.model.WstValueTableFactory;
39 import org.dive4elements.river.artifacts.resources.Resources; 40 import org.dive4elements.river.artifacts.resources.Resources;
430 431
431 ComputationRangeAccess access = new ComputationRangeAccess(winfo); 432 ComputationRangeAccess access = new ComputationRangeAccess(winfo);
432 433
433 double[] minmaxW = null; 434 double[] minmaxW = null;
434 if(valueTable != null) { 435 if(valueTable != null) {
435 double[] km = null; 436
436 if(access.isRange()) { 437 final double startKm = access.getStartKm();
437 km = access.getFromToStep(); 438 // Use the start km to determine the min max values.
438 // Use the start km to determine the min max values. 439 minmaxW = valueTable.getMinMaxW(startKm);
439 minmaxW = valueTable.getMinMaxW(km[0]);
440 }
441 else {
442 km = access.getKms();
443 minmaxW = valueTable.getMinMaxW(km[0]);
444 }
445 } 440 }
446 return minmaxW != null 441 return minmaxW != null
447 ? minmaxW 442 ? minmaxW
448 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE }; 443 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE };
449 } 444 }
488 * @return the min and max Q values for the current kilometer range. 483 * @return the min and max Q values for the current kilometer range.
489 */ 484 */
490 protected double[] determineMinMaxQ(D4EArtifact winfo) { 485 protected double[] determineMinMaxQ(D4EArtifact winfo) {
491 log.debug("WQSelect.determineMinMaxQ"); 486 log.debug("WQSelect.determineMinMaxQ");
492 487
493 WstValueTable valueTable = WstValueTableFactory.getTable( 488 final WstValueTable valueTable = WstValueTableFactory.getTable(RiverUtils.getRiver(winfo));
494 RiverUtils.getRiver(winfo)); 489
495 490 final ComputationRangeAccess access = new ComputationRangeAccess(winfo);
496 ComputationRangeAccess access = new ComputationRangeAccess(winfo);
497 491
498 double[] minmaxQ = null; 492 double[] minmaxQ = null;
499 if(valueTable != null) { 493 if(valueTable != null) {
500 double[] km = null; 494
501 if(access.isRange()) { 495 final KM_MODE mode = access.getKmRangeMode();
502 km = new ComputationRangeAccess(winfo).getFromToStep(); 496 switch (mode) {
497 case RANGE: {
498 final double[] km = access.getFromToStep();
503 minmaxQ = valueTable.getMinMaxQ(km[0], km[1], km[2]); 499 minmaxQ = valueTable.getMinMaxQ(km[0], km[1], km[2]);
504 } 500 break;
505 else { 501 }
506 km = access.getKms(); 502
503 case DISTANCE_ONLY: {
504 minmaxQ = valueTable.getMinMaxQ(access.getFrom(), access.getTo(), 0.1);
505 break;
506 }
507
508 default: {
509 final double[] km = access.getKms();
507 minmaxQ = valueTable.getMinMaxQ(km[0]); 510 minmaxQ = valueTable.getMinMaxQ(km[0]);
508 for (int i = 1; i < km.length; i++) { 511 for (int i = 1; i < km.length; i++) {
509 double[] tmp = valueTable.getMinMaxQ(km[i]); 512 double[] tmp = valueTable.getMinMaxQ(km[i]);
510 if(tmp[0] < minmaxQ[0]) { 513 if(tmp[0] < minmaxQ[0]) {
511 minmaxQ[0] = tmp[0]; 514 minmaxQ[0] = tmp[0];
512 } 515 }
513 if(tmp[1] > minmaxQ[1]) { 516 if(tmp[1] > minmaxQ[1]) {
514 minmaxQ[1] = tmp[1]; 517 minmaxQ[1] = tmp[1];
515 } 518 }
516 } 519 }
520 break;
521 }
517 } 522 }
518 } 523 }
519 return minmaxQ != null 524 return minmaxQ != null
520 ? minmaxQ 525 ? minmaxQ
521 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE }; 526 : new double[] { Double.MIN_VALUE, Double.MAX_VALUE };

http://dive4elements.wald.intevation.org