Source code for plot_tabular_data

#!/usr/bin/python3
"""
Plot tabular data read from file or from model parameter database.

Uses a configuration file to define the data to be plotted and all
plotting details.

Command line arguments
----------------------
config_file (str, required)
    Configuration file name for plotting.
output_file (str, required)
    Output file name (without suffix).

Example
-------

Plot tabular data using a configuration file.

.. code-block:: console

    simtools-plot-tabular-data --plot_config config_file_name --output_file output_file_name

"""

import simtools.utils.general as gen
from simtools.application_control import get_application_label, startup_application
from simtools.configuration import configurator
from simtools.constants import PLOT_CONFIG_SCHEMA
from simtools.data_model import schema
from simtools.data_model.metadata_collector import MetadataCollector
from simtools.io import ascii_handler
from simtools.visualization import plot_tables


def _parse():
    """Parse command line configuration."""
    config = configurator.Configurator(
        label=get_application_label(__file__),
        description="Plots tabular data.",
        usage="""simtools-plot-tabular-data --plot_config config_file_name "
                 --output_file output_file_name""",
    )

    config.parser.add_argument(
        "--plot_config",
        help="Plotting configuration file name.",
        type=str,
        required=True,
        default=None,
    )
    config.parser.add_argument(
        "--table_data_path",
        help="Path to the data files (optional). Expect all files to be in the same directory.",
        type=str,
        default=None,
    )
    config.parser.add_argument(
        "--output_file",
        help="Output file name (without suffix)",
        type=str,
        required=True,
    )
    return config.initialize(db_config=True, simulation_model=["telescope"])


[docs] def main(): """Plot tabular data.""" app_context = startup_application(_parse) plot_config = gen.convert_keys_in_dict_to_lowercase( schema.validate_dict_using_schema( ascii_handler.collect_data_from_file(app_context.args["plot_config"]), PLOT_CONFIG_SCHEMA, ) ) plot_tables.plot( config=plot_config["plot"], output_file=app_context.io_handler.get_output_file(app_context.args["output_file"]), db_config=app_context.db_config, data_path=app_context.args.get("table_data_path"), ) MetadataCollector.dump( app_context.args, app_context.io_handler.get_output_file(app_context.args["output_file"]), add_activity_name=True, )
if __name__ == "__main__": main()