Issue #1194 make time matching more lenient for latest live data.
Former-commit-id:c53d884710
[formerly575b5f9b71
] [formerly45ecb93bae
[formerly 0012646250f74b6361f57f7a8b08e919cbaee2ce]] Former-commit-id:45ecb93bae
Former-commit-id:621260a7ac
This commit is contained in:
parent
cb9434d637
commit
ec5d661489
1 changed files with 22 additions and 2 deletions
|
@ -553,7 +553,7 @@ public class TimeMatcher {
|
||||||
int f, f0;
|
int f, f0;
|
||||||
int p, pp, m, n, q;
|
int p, pp, m, n, q;
|
||||||
int best;
|
int best;
|
||||||
long dtf, dt, fd;
|
long dtf, dt, dtd, fd;
|
||||||
double fo;
|
double fo;
|
||||||
long vf, v1, v2, vd;
|
long vf, v1, v2, vd;
|
||||||
|
|
||||||
|
@ -648,6 +648,7 @@ public class TimeMatcher {
|
||||||
IntrinsicReturnVal rv = intrinsicPeriod(depictTimes, majorIndex,
|
IntrinsicReturnVal rv = intrinsicPeriod(depictTimes, majorIndex,
|
||||||
dataFcsts);
|
dataFcsts);
|
||||||
dt = rv.intrinsicPeriod;
|
dt = rv.intrinsicPeriod;
|
||||||
|
dtd = (rv.intrinsicPeriod * 3) / 2;
|
||||||
dataFcsts = rv.haveForecasts;
|
dataFcsts = rv.haveForecasts;
|
||||||
|
|
||||||
if (fspatial) {
|
if (fspatial) {
|
||||||
|
@ -682,6 +683,15 @@ public class TimeMatcher {
|
||||||
dt++;
|
dt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dt > dtd || frameTimes[ef].getMatchValid() - latest.getTime() > dtd) {
|
||||||
|
// The first check makes sure that dtd is always bigger than dt
|
||||||
|
// since dtd is supposed to add extra padding to the time. The
|
||||||
|
// second check makes it so that if the latest frameTime is past the
|
||||||
|
// latest depictTime by more than dtd than we ignore dtd by setting
|
||||||
|
// it to dt which makes it a no op.
|
||||||
|
dtd = dt;
|
||||||
|
}
|
||||||
|
|
||||||
// Try to find match for each frame. Dependent on valid times increasing
|
// Try to find match for each frame. Dependent on valid times increasing
|
||||||
// monotonically in depictTimes.
|
// monotonically in depictTimes.
|
||||||
for (f = f0; f <= ef; f++) {
|
for (f = f0; f <= ef; f++) {
|
||||||
|
@ -692,7 +702,17 @@ public class TimeMatcher {
|
||||||
vf = (frameTimes)[f].getMatchValid() + deltaTime;
|
vf = (frameTimes)[f].getMatchValid() + deltaTime;
|
||||||
v1 = vf - dt; // first usable valid time
|
v1 = vf - dt; // first usable valid time
|
||||||
v2 = vf + dt; // last usable valid time
|
v2 = vf + dt; // last usable valid time
|
||||||
|
if (!dataFcsts && !frameFcsts && vf > latest.getTime()) {
|
||||||
|
// if we are dealing with live data(without forecast times) then
|
||||||
|
// we want to allow extra time on the latest frame. For example
|
||||||
|
// LAPS data arrives hourly, and radar arrives every 6 minutes,
|
||||||
|
// in this scenario dt is around 36 minutes so 36 minutes after
|
||||||
|
// the hour when radar updates LAPS disappears. This code
|
||||||
|
// changes that so for the latest frame LAPS will be visible for
|
||||||
|
// 90 minutes which is enough time for the next LAPS frame to
|
||||||
|
// come in, this means that the latest frame always has data.
|
||||||
|
v1 = vf - dtd;
|
||||||
|
}
|
||||||
fo = frameTimes[f].getLevelValue();
|
fo = frameTimes[f].getLevelValue();
|
||||||
spatial = fo >= 0.0 && dspatial;
|
spatial = fo >= 0.0 && dspatial;
|
||||||
best = -1; // have no best match yet
|
best = -1; // have no best match yet
|
||||||
|
|
Loading…
Add table
Reference in a new issue