TotalNumberOfStops.java

  1. package org.opentrafficsim.kpi.sampling.indicator;

  2. import java.util.List;

  3. import org.djunits.unit.DimensionlessUnit;
  4. import org.djunits.value.vdouble.scalar.Dimensionless;
  5. import org.djunits.value.vdouble.scalar.Time;
  6. import org.opentrafficsim.kpi.interfaces.GtuData;
  7. import org.opentrafficsim.kpi.sampling.Query;
  8. import org.opentrafficsim.kpi.sampling.Trajectory;
  9. import org.opentrafficsim.kpi.sampling.TrajectoryGroup;

  10. /**
  11.  * Sum of measurements with zero speed, preceded by a non-zero speed.
  12.  * <p>
  13.  * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  14.  * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
  15.  * </p>
  16.  * @author <a href="https://github.com/averbraeck">Alexander Verbraeck</a>
  17.  * @author <a href="https://github.com/peter-knoppers">Peter Knoppers</a>
  18.  * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
  19.  */
  20. public class TotalNumberOfStops extends AbstractIndicator<Dimensionless>
  21. {

  22.     @Override
  23.     protected <G extends GtuData> Dimensionless calculate(final Query<G, ?> query, final Time startTime, final Time endTime,
  24.             final List<TrajectoryGroup<G>> trajectoryGroups)
  25.     {
  26.         int sum = 0;
  27.         for (TrajectoryGroup<?> trajectoryGroup : trajectoryGroups)
  28.         {
  29.             for (Trajectory<?> trajectory : trajectoryGroup.getTrajectories())
  30.             {
  31.                 if (trajectory.size() > 1)
  32.                 {
  33.                     float vPrev = trajectory.getV(0);
  34.                     for (int i = 1; i < trajectory.size(); i++)
  35.                     {
  36.                         float v = trajectory.getV(i);
  37.                         if (v == 0 && vPrev > 0)
  38.                         {
  39.                             sum++;
  40.                         }
  41.                         vPrev = v;
  42.                     }
  43.                 }
  44.             }
  45.         }
  46.         return new Dimensionless(sum, DimensionlessUnit.SI);
  47.     }

  48.     @Override
  49.     public String toString()
  50.     {
  51.         return "TotalNumberOfStops";
  52.     }

  53. }