private double getRouteStopWaitTime(
     Id<TransitLine> lineId,
     Id<TransitRoute> routeId,
     Id<TransitStopFacility> stopId,
     double time) {
   Tuple<Id<TransitLine>, Id<TransitRoute>> key =
       new Tuple<Id<TransitLine>, Id<TransitRoute>>(lineId, routeId);
   WaitTimeData waitTimeData = waitTimes.get(key).get(stopId);
   if (waitTimeData.getNumData((int) (time / timeSlot)) == 0) {
     double[] waitTimes = scheduledWaitTimes.get(key).get(stopId);
     return waitTimes[
         (int) (time / timeSlot) < waitTimes.length
             ? (int) (time / timeSlot)
             : (waitTimes.length - 1)];
   } else return waitTimeData.getWaitTime((int) (time / timeSlot));
 }
 private double getRouteStopWaitTime(
     Id<TransitLine> lineId,
     Id<TransitRoute> routeId,
     Id<TransitStopFacility> stopId,
     double time) {
   Tuple<String, String> key = new Tuple<String, String>(lineId.toString(), routeId.toString());
   waitTimeCalls++;
   WaitTimeData waitTimeData = waitTimes.get(key).get(stopId.toString());
   if (waitTimeData.getNumData((int) (time / timeSlot)) == 0) {
     scheduleCalls++;
     double[] waitTimes = scheduledWaitTimes.get(key).get(stopId.toString());
     return waitTimes[
         (int) (time / timeSlot) < waitTimes.length
             ? (int) (time / timeSlot)
             : (waitTimes.length - 1)];
   } else {
     return waitTimeData.getWaitTime((int) (time / timeSlot));
   }
 }