TaskRoadSideDistraction.java

  1. package org.opentrafficsim.road.gtu.lane.perception.mental;

  2. import java.util.Iterator;
  3. import java.util.LinkedHashMap;
  4. import java.util.Map;
  5. import java.util.SortedSet;

  6. import org.djunits.value.vdouble.scalar.Length;
  7. import org.opentrafficsim.base.parameters.ParameterException;
  8. import org.opentrafficsim.base.parameters.Parameters;
  9. import org.opentrafficsim.core.gtu.GTUException;
  10. import org.opentrafficsim.core.gtu.RelativePosition;
  11. import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
  12. import org.opentrafficsim.road.gtu.lane.perception.LanePerception;
  13. import org.opentrafficsim.road.gtu.lane.perception.LaneStructure.Entry;
  14. import org.opentrafficsim.road.gtu.lane.perception.RelativeLane;
  15. import org.opentrafficsim.road.network.lane.object.Distraction;

  16. /**
  17.  * Task-demand for road-side distraction.
  18.  * <p>
  19.  * Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  20.  * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
  21.  * <p>
  22.  * @version $Revision$, $LastChangedDate$, by $Author$, initial version 5 apr. 2018 <br>
  23.  * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
  24.  * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
  25.  * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
  26.  */
  27. public class TaskRoadSideDistraction extends AbstractTask
  28. {

  29.     /** Odometer values at distraction. */
  30.     private Map<Distraction, Double> odos = new LinkedHashMap<>();

  31.     /** Constructor. */
  32.     public TaskRoadSideDistraction()
  33.     {
  34.         super("road-side distraction");
  35.     }

  36.     /** {@inheritDoc} */
  37.     @Override
  38.     public double calculateTaskDemand(final LanePerception perception, final LaneBasedGTU gtu, final Parameters parameters)
  39.             throws ParameterException, GTUException
  40.     {
  41.         Map<RelativeLane, SortedSet<Entry<Distraction>>> map =
  42.                 perception.getLaneStructure().getDownstreamObjects(Distraction.class, gtu, RelativePosition.FRONT);
  43.         // (re)put all downstream distractions in the odos map
  44.         double odo = gtu.getOdometer().si;
  45.         for (RelativeLane lane : map.keySet())
  46.         {
  47.             for (Entry<Distraction> entry : map.get(lane))
  48.             {
  49.                 this.odos.put(entry.getLaneBasedObject(), odo + entry.getDistance().si);
  50.             }
  51.         }
  52.         // loop over all distractions in odos
  53.         Iterator<Distraction> it = this.odos.keySet().iterator();
  54.         double demand = 0.0;
  55.         while (it.hasNext())
  56.         {
  57.             Distraction next = it.next();
  58.             Double distraction = next.getDistraction(Length.instantiateSI(odo - this.odos.get(next)));
  59.             if (distraction == null)
  60.             {
  61.                 it.remove();
  62.             }
  63.             else
  64.             {
  65.                 demand += distraction;
  66.             }
  67.         }
  68.         return demand;
  69.     }

  70. }