use of org.onebusaway.transit_data.model.realtime.CurrentVehicleEstimateQueryBean.Record in project onebusaway-application-modules by camsys.
the class CurrentVehicleEstimationServiceImpl method computeCumulativeProbabilityForScheduledBlockLocations.
private void computeCumulativeProbabilityForScheduledBlockLocations(List<Record> records, BlockInstance blockInstance, double minProbabilityForConsideration, List<CurrentVehicleEstimateBean> beans) {
DoubleArrayList ps = new DoubleArrayList();
List<ScheduledBlockLocation> blockLocations = new ArrayList<ScheduledBlockLocation>();
Record firstRecord = records.get(0);
ScheduledBlockLocation firstLocation = _blockGeospatialService.getBestScheduledBlockLocationForLocation(blockInstance, firstRecord.getLocation(), firstRecord.getTimestamp(), 0, Double.POSITIVE_INFINITY);
blockLocations.add(firstLocation);
ps.add(updateScheduledBlockLocationProbability(blockInstance, firstRecord, firstLocation));
Record lastRecord = records.get(records.size() - 1);
ScheduledBlockLocation lastLocation = _blockGeospatialService.getBestScheduledBlockLocationForLocation(blockInstance, lastRecord.getLocation(), lastRecord.getTimestamp(), 0, Double.POSITIVE_INFINITY);
ps.add(updateScheduledBlockLocationProbability(blockInstance, lastRecord, lastLocation));
if (Descriptive.mean(ps) < minProbabilityForConsideration)
return;
/**
* If the vehicle is traveling backwards in time, we kill the prediction
*/
int maxTravelBackwardsTime = computeMaxTravelBackwardsTime(lastRecord.getTimestamp() - firstRecord.getTimestamp());
if (lastLocation.getScheduledTime() < firstLocation.getScheduledTime() - maxTravelBackwardsTime)
return;
double minDistanceAlongBlock = Math.min(firstLocation.getDistanceAlongBlock(), lastLocation.getDistanceAlongBlock()) - 500;
double maxDistanceAlongBlock = Math.max(firstLocation.getDistanceAlongBlock(), lastLocation.getDistanceAlongBlock()) + 500;
for (int i = 1; i < records.size() - 1; i++) {
Record record = records.get(i);
ScheduledBlockLocation location = _blockGeospatialService.getBestScheduledBlockLocationForLocation(blockInstance, record.getLocation(), record.getTimestamp(), minDistanceAlongBlock, maxDistanceAlongBlock);
blockLocations.add(location);
ps.add(updateScheduledBlockLocationProbability(blockInstance, record, location));
if (Descriptive.mean(ps) < minProbabilityForConsideration)
return;
}
blockLocations.add(lastLocation);
updateProbabilitiesWithScheduleDeviations(records, blockLocations, ps);
BlockLocation location = _blockLocationService.getLocationForBlockInstanceAndScheduledBlockLocation(blockInstance, lastLocation, lastRecord.getTimestamp());
double mu = Descriptive.mean(ps);
String debug = asString(ps);
addResult(location, mu, debug, minProbabilityForConsideration, beans);
}
Aggregations