Source code for fastoad.base.flight_point

"""Structure for managing flight point data."""
#  This file is part of FAST : A framework for rapid Overall Aircraft Design
#  Copyright (C) 2020  ONERA/ISAE
#  FAST is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <https://www.gnu.org/licenses/>.

from fastoad.base.dict import DynamicAttributeDict, AddKeyAttributes


# Set of dictionary keys that are mapped to instance attributes.
LABELS = {
    "time": dict(doc="Time in seconds."),
    "altitude": dict(doc="Altitude in meters."),
    "ground_distance": dict(doc="Covered ground distance in meters."),
    "mass": dict(doc="Mass in kg."),  # in kg
    "true_airspeed": dict(doc="True airspeed (TAS) in m/s."),
    "equivalent_airspeed": dict(doc="Equivalent airspeed (EAS) in m/s."),
    "mach": dict(doc="Mach number."),
    "engine_setting": dict(doc="Engine setting (see :class:`~fastoad.constants.EngineSetting`)."),
    "CL": dict(doc="Lift coeffient."),
    "CD": dict(doc="Drag coeffient."),
    "drag": dict(doc="Aircraft drag in Newtons."),
    "thrust": dict(doc="Thrust in Newtons."),
    "thrust_rate": dict(doc="Thrust rate (between 0. and 1.)"),
    "thrust_is_regulated": dict(
        doc="Boolean. If True, propulsion should match the thrust value. "
        "If False, propulsion should match thrust rate."
    ),
    "sfc": dict(doc="Specific Fuel Consumption in kg/N/s."),
    "slope_angle": dict(doc="Slope angle in radians."),
    "acceleration": dict(doc="Acceleration value in m/s**2."),
    "name": dict(doc="Name of current phase."),
}


[docs]@AddKeyAttributes(LABELS) class FlightPoint(DynamicAttributeDict): """ Class for storing data for one flight point. An instance is a simple dict, but for convenience, each item can be accessed as an attribute (inspired by pandas DataFrames). Hence, one can write:: >>> fp = FlightPoint(speed=250., altitude=10000.) >>> fp["speed"] 250.0 >>> fp2 = FlightPoint({"speed":150., "altitude":5000.}) >>> fp2.speed 250.0 >>> fp["mass"] = 70000. >>> fp.mass 70000.0 >>> fp.mass = 50000. >>> fp["mass"] 50000.0 Note: constructor will forbid usage of unknown keys as keyword argument, but other methods will allow them, while not making the matching between dict keys and attributes, hence:: >>> fp["foo"] = 42 # Ok >>> bar = fp.foo # raises exception !!!! >>> fp.foo = 50 # allowed by Python >>> # But inner dict is not affected: >>> fp.foo 50 >>> fp["foo"] 42 This class is especially useful for generating pandas DataFrame: a pandas DataFrame can be generated from a list of dict... or a list of FlightPoint instances. The set of dictionary keys that are mapped to instance attributes is given by the :meth:`get_attribute_keys`. """