Class FundamentalDiagram

All Implemented Interfaces:
Dataset, SeriesDataset, XYDataset, org.opentrafficsim.base.Identifiable

public class FundamentalDiagram extends AbstractBoundedPlot implements XYDataset
Fundamental diagram from various sources.

Copyright (c) 2013-2023 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See OpenTrafficSim License.

Author:
Alexander Verbraeck, Peter Knoppers, Wouter Schakel
  • Field Details

    • DEFAULT_PERIODS

      public static final double[] DEFAULT_PERIODS
      Aggregation periods.
    • DEFAULT_UPDATE_FREQUENCIES

      public static final int[] DEFAULT_UPDATE_FREQUENCIES
      Update frequencies (n * 1/period).
  • Constructor Details

    • FundamentalDiagram

      public FundamentalDiagram(String caption, FundamentalDiagram.Quantity domainQuantity, FundamentalDiagram.Quantity rangeQuantity, org.opentrafficsim.core.dsol.OtsSimulatorInterface simulator, FundamentalDiagram.FdSource source, FundamentalDiagram.FdLine fdLine)
      Constructor.
      Parameters:
      caption - String; caption
      domainQuantity - Quantity; initial quantity on the domain axis
      rangeQuantity - Quantity; initial quantity on the range axis
      simulator - OtsSimulatorInterface; simulator
      source - FdSource; source providing the data
      fdLine - fundamental diagram line, may be null
  • Method Details

    • increaseTime

      protected void increaseTime(Time time)
      Increase the simulated time span.
      Specified by:
      increaseTime in class AbstractPlot
      Parameters:
      time - Time; time to increase to
    • getSeriesCount

      public int getSeriesCount()
      Specified by:
      getSeriesCount in interface SeriesDataset
    • getSeriesKey

      public Comparable<String> getSeriesKey(int series)
      Specified by:
      getSeriesKey in interface SeriesDataset
    • indexOf

      public int indexOf(Comparable seriesKey)
      Specified by:
      indexOf in interface SeriesDataset
    • getDomainOrder

      public DomainOrder getDomainOrder()
      Specified by:
      getDomainOrder in interface XYDataset
    • getItemCount

      public int getItemCount(int series)
      Specified by:
      getItemCount in interface XYDataset
    • getX

      public Number getX(int series, int item)
      Specified by:
      getX in interface XYDataset
    • getXValue

      public double getXValue(int series, int item)
      Specified by:
      getXValue in interface XYDataset
    • getY

      public Number getY(int series, int item)
      Specified by:
      getY in interface XYDataset
    • getYValue

      public double getYValue(int series, int item)
      Specified by:
      getYValue in interface XYDataset
    • getGraphType

      public GraphType getGraphType()
      Return the graph type for transceiver.
      Specified by:
      getGraphType in class AbstractPlot
      Returns:
      GraphType; the graph type.
    • getStatusLabel

      public String getStatusLabel(double domainValue, double rangeValue)
      Returns the status label when the mouse is over the given location.
      Specified by:
      getStatusLabel in class AbstractPlot
      Parameters:
      domainValue - double; domain value (x-axis)
      rangeValue - double; range value (y-axis)
      Returns:
      String; status label when the mouse is over the given location
    • sourceFromSampler

      public static FundamentalDiagram.FdSource sourceFromSampler(RoadSampler sampler, GraphCrossSection<LaneDataRoad> crossSection, boolean aggregateLanes, Duration aggregationTime, boolean harmonic)
      Creates a Source from a sampler and positions.
      Parameters:
      sampler - RoadSampler; sampler
      crossSection - GraphCrossSection<LaneData>; cross section
      aggregateLanes - boolean; whether to aggregate the positions
      aggregationTime - Duration; aggregation time (and update time)
      harmonic - boolean; harmonic mean
      Returns:
      Source; source for a fundamental diagram from a sampler and positions
    • sourceFromSampler

      public static FundamentalDiagram.FdSource sourceFromSampler(RoadSampler sampler, GraphPath<LaneDataRoad> path, boolean aggregateLanes, Duration aggregationTime)
      Creates a Source from a sampler and positions.
      Parameters:
      sampler - RoadSampler; sampler
      path - GraphPath<LaneData>; cross section
      aggregateLanes - boolean; whether to aggregate the positions
      aggregationTime - Duration; aggregation time (and update time)
      Returns:
      Source; source for a fundamental diagram from a sampler and positions
    • combinedSource

      public static FundamentalDiagram.FdSource combinedSource(Map<String,FundamentalDiagram.FdSource> sources)
      Combines multiple sources in to one source.
      Parameters:
      sources - Map<String, FdSource>; sources coupled to their names for in the legend
      Returns:
      FdSource; combined source
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getSource

      public FundamentalDiagram.FdSource getSource()
      Get the data source.
      Returns:
      FdSource; the data source
    • getLegend

      public LegendItemCollection getLegend()
      Retrievee the legend of this FundamentalDiagram.
      Returns:
      LegendItemCollection; the legend
    • getLaneVisible

      public List<Boolean> getLaneVisible()
      Return the list of lane visibility flags.
      Returns:
      List<Boolean>; the list of lane visibility flags
    • getDomainQuantity

      public FundamentalDiagram.Quantity getDomainQuantity()
      Return the domain quantity.
      Returns:
      Quantity; the domain quantity
    • setDomainQuantity

      public void setDomainQuantity(FundamentalDiagram.Quantity domainQuantity)
      Set the domain quantity.
      Parameters:
      domainQuantity - Quantity; the new domain quantity
    • getOtherQuantity

      public FundamentalDiagram.Quantity getOtherQuantity()
      Get the other (non domain; vertical axis) quantity.
      Returns:
      Quantity; the quantity for the vertical axis
    • setOtherQuantity

      public void setOtherQuantity(FundamentalDiagram.Quantity otherQuantity)
      Set the other (non domain; vertical axis) quantity.
      Parameters:
      otherQuantity - Quantity; the quantity for the vertical axis
    • getRangeQuantity

      public FundamentalDiagram.Quantity getRangeQuantity()
      Get the range quantity.
      Returns:
      Quantity; the range quantity
    • setRangeQuantity

      public void setRangeQuantity(FundamentalDiagram.Quantity rangeQuantity)
      Set the range quantity.
      Parameters:
      rangeQuantity - Quantity; the new range quantity
    • getTimeInfo

      public String getTimeInfo()
      Retrieve the time info.
      Returns:
      String; the time info
    • setTimeInfo

      public void setTimeInfo(String timeInfo)
      Set the time info.
      Parameters:
      timeInfo - String; the new time info
    • hasLineFD

      public boolean hasLineFD()
      Return whether the plot has a fundamental diagram line.
      Returns:
      boolean; whether the plot has a fundamental diagram line