DistractionFactory.java

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

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import org.djunits.value.vdouble.scalar.Duration;
  5. import org.djunits.value.vdouble.scalar.Frequency;

  6. import nl.tudelft.simulation.jstats.streams.StreamInterface;

  7. /**
  8.  * Utility to create a list of default distractions as derived by the research of Manuel Lindorfer.
  9.  * <p>
  10.  * Copyright (c) 2013-2020 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  11.  * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
  12.  * <p>
  13.  * @version $Revision$, $LastChangedDate$, by $Author$, initial version 28 jun. 2018 <br>
  14.  * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
  15.  * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
  16.  * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
  17.  */
  18. public class DistractionFactory
  19. {

  20.     /** Random number stream. */
  21.     private final StreamInterface stream;

  22.     /** List of distractions. */
  23.     private List<Distraction> list = new ArrayList<>();

  24.     /**
  25.      * Constructor.
  26.      * @param stream StreamInterface; random number stream
  27.      */
  28.     public DistractionFactory(final StreamInterface stream)
  29.     {
  30.         this.stream = stream;
  31.     }

  32.     /**
  33.      * Adds a default distraction.
  34.      * @param defaultDistraction DefaultDistraction; default distraction
  35.      * @param taskDemand double; task demand
  36.      * @return DistractionFactory; this factory for method chaining
  37.      */
  38.     public final DistractionFactory addDistraction(final DefaultDistraction defaultDistraction, final double taskDemand)
  39.     {
  40.         return addDistraction(defaultDistraction.getId(), defaultDistraction.getDescription(),
  41.                 defaultDistraction.getFrequency(), defaultDistraction.getExposure(), defaultDistraction.getAverageDuration(),
  42.                 defaultDistraction.getStdDuration(), taskDemand);
  43.     }

  44.     /**
  45.      * Adds a default distraction.
  46.      * @param defaultDistraction DefaultDistraction; default distraction
  47.      * @param taskSupplier TaskSupplier; task supplier
  48.      * @return DistractionFactory; this factory for method chaining
  49.      */
  50.     public final DistractionFactory addDistraction(final DefaultDistraction defaultDistraction, final TaskSupplier taskSupplier)
  51.     {
  52.         return addDistraction(defaultDistraction.getId(), defaultDistraction.getDescription(),
  53.                 defaultDistraction.getFrequency(), defaultDistraction.getExposure(), defaultDistraction.getAverageDuration(),
  54.                 defaultDistraction.getStdDuration(), taskSupplier);
  55.     }

  56.     /**
  57.      * Helper method to create a distraction.
  58.      * @param id String; id
  59.      * @param description String; description
  60.      * @param frequency Frequency; frequency per exposed driver
  61.      * @param exposure double; exposure (value in range [0...1])
  62.      * @param averageDuration Duration; average duration
  63.      * @param stdDuration Duration; standard deviation of duration
  64.      * @param taskDemand double; task demand
  65.      * @return DistractionFactory; this factory for method chaining
  66.      */
  67.     public final DistractionFactory addDistraction(final String id, final String description, final Frequency frequency,
  68.             final double exposure, final Duration averageDuration, final Duration stdDuration, final double taskDemand)
  69.     {
  70.         addDistraction(id, description, frequency, exposure, averageDuration, stdDuration,
  71.                 new TaskSupplier.Constant(id, taskDemand));
  72.         return this;
  73.     }

  74.     /**
  75.      * Helper method to create a distraction.
  76.      * @param id String; id
  77.      * @param description String; description
  78.      * @param frequency Frequency; frequency per exposed driver
  79.      * @param exposure double; exposure (value in range [0...1])
  80.      * @param averageDuration Duration; average duration
  81.      * @param stdDuration Duration; standard deviation of duration
  82.      * @param taskSupplier TaskSupplier; task supplier
  83.      * @return DistractionFactory; this factory for method chaining
  84.      */
  85.     public final DistractionFactory addDistraction(final String id, final String description, final Frequency frequency,
  86.             final double exposure, final Duration averageDuration, final Duration stdDuration, final TaskSupplier taskSupplier)
  87.     {
  88.         this.list.add(
  89.                 new Distraction(id, description, frequency, exposure, averageDuration, stdDuration, this.stream, taskSupplier));
  90.         return this;
  91.     }

  92.     /**
  93.      * Returns the list of distractions.
  94.      * @return List; list of distractions
  95.      */
  96.     public final List<Distraction> build()
  97.     {
  98.         return this.list;
  99.     }

  100. }