From a7aa2716e7dd17169b17c0077837bf7648446e95 Mon Sep 17 00:00:00 2001 From: hgloeckner Date: Mon, 19 Aug 2024 19:33:17 +0200 Subject: [PATCH 1/8] new api files --- .../apidocs/halodrops/halodrops.helper.md | 206 ++++++++++++ .../halodrops/halodrops.helper.paths.md | 52 ++- .../halodrops/halodrops.helper.rawreader.md | 2 +- docs/source/apidocs/halodrops/halodrops.md | 32 +- .../apidocs/halodrops/halodrops.pipeline.md | 174 ++++++++++ .../apidocs/halodrops/halodrops.processor.md | 314 ++++++++++++++++++ docs/source/apidocs/halodrops/halodrops.qc.md | 17 - .../apidocs/halodrops/halodrops.qc.profile.md | 75 ----- .../apidocs/halodrops/halodrops.sonde.md | 176 ---------- 9 files changed, 760 insertions(+), 288 deletions(-) create mode 100644 docs/source/apidocs/halodrops/halodrops.pipeline.md create mode 100644 docs/source/apidocs/halodrops/halodrops.processor.md delete mode 100644 docs/source/apidocs/halodrops/halodrops.qc.md delete mode 100644 docs/source/apidocs/halodrops/halodrops.qc.profile.md delete mode 100644 docs/source/apidocs/halodrops/halodrops.sonde.md diff --git a/docs/source/apidocs/halodrops/halodrops.helper.md b/docs/source/apidocs/halodrops/halodrops.helper.md index d6051a6..e59671a 100644 --- a/docs/source/apidocs/halodrops/halodrops.helper.md +++ b/docs/source/apidocs/halodrops/halodrops.helper.md @@ -16,3 +16,209 @@ halodrops.helper.rawreader halodrops.helper.paths ``` + +## Package Contents + +### Functions + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`get_bool ` + - ```{autodoc2-docstring} halodrops.helper.get_bool + :summary: + ``` +* - {py:obj}`convert_rh_to_si ` + - ```{autodoc2-docstring} halodrops.helper.convert_rh_to_si + :summary: + ``` +* - {py:obj}`convert_pres_to_si ` + - ```{autodoc2-docstring} halodrops.helper.convert_pres_to_si + :summary: + ``` +* - {py:obj}`convert_tdry_to_si ` + - ```{autodoc2-docstring} halodrops.helper.convert_tdry_to_si + :summary: + ``` +* - {py:obj}`get_si_converter_function_based_on_var ` + - ```{autodoc2-docstring} halodrops.helper.get_si_converter_function_based_on_var + :summary: + ``` +* - {py:obj}`calc_saturation_pressure ` + - ```{autodoc2-docstring} halodrops.helper.calc_saturation_pressure + :summary: + ``` +* - {py:obj}`calc_q_from_rh ` + - ```{autodoc2-docstring} halodrops.helper.calc_q_from_rh + :summary: + ``` +* - {py:obj}`calc_theta_from_T ` + - ```{autodoc2-docstring} halodrops.helper.calc_theta_from_T + :summary: + ``` +```` + +### Data + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`l2_variables ` + - ```{autodoc2-docstring} halodrops.helper.l2_variables + :summary: + ``` +* - {py:obj}`encoding_variables ` + - ```{autodoc2-docstring} halodrops.helper.encoding_variables + :summary: + ``` +* - {py:obj}`variable_compression_properties ` + - ```{autodoc2-docstring} halodrops.helper.variable_compression_properties + :summary: + ``` +* - {py:obj}`path_to_flight_ids ` + - ```{autodoc2-docstring} halodrops.helper.path_to_flight_ids + :summary: + ``` +* - {py:obj}`path_to_l0_files ` + - ```{autodoc2-docstring} halodrops.helper.path_to_l0_files + :summary: + ``` +* - {py:obj}`l2_flight_attributes_map ` + - ```{autodoc2-docstring} halodrops.helper.l2_flight_attributes_map + :summary: + ``` +* - {py:obj}`l2_filename_template ` + - ```{autodoc2-docstring} halodrops.helper.l2_filename_template + :summary: + ``` +```` + +### API + +````{py:data} l2_variables +:canonical: halodrops.helper.l2_variables +:value: > + None + +```{autodoc2-docstring} halodrops.helper.l2_variables +``` + +```` + +````{py:data} encoding_variables +:canonical: halodrops.helper.encoding_variables +:value: > + None + +```{autodoc2-docstring} halodrops.helper.encoding_variables +``` + +```` + +````{py:data} variable_compression_properties +:canonical: halodrops.helper.variable_compression_properties +:value: > + 'dict(...)' + +```{autodoc2-docstring} halodrops.helper.variable_compression_properties +``` + +```` + +````{py:data} path_to_flight_ids +:canonical: halodrops.helper.path_to_flight_ids +:value: > + '{platform}/Level_0' + +```{autodoc2-docstring} halodrops.helper.path_to_flight_ids +``` + +```` + +````{py:data} path_to_l0_files +:canonical: halodrops.helper.path_to_l0_files +:value: > + '{platform}/Level_0/{flight_id}' + +```{autodoc2-docstring} halodrops.helper.path_to_l0_files +``` + +```` + +````{py:data} l2_flight_attributes_map +:canonical: halodrops.helper.l2_flight_attributes_map +:value: > + None + +```{autodoc2-docstring} halodrops.helper.l2_flight_attributes_map +``` + +```` + +````{py:data} l2_filename_template +:canonical: halodrops.helper.l2_filename_template +:value: > + '{platform}_{launch_time}_{flight_id}_{serial_id}_Level_2.nc' + +```{autodoc2-docstring} halodrops.helper.l2_filename_template +``` + +```` + +````{py:function} get_bool(s) +:canonical: halodrops.helper.get_bool + +```{autodoc2-docstring} halodrops.helper.get_bool +``` +```` + +````{py:function} convert_rh_to_si(value) +:canonical: halodrops.helper.convert_rh_to_si + +```{autodoc2-docstring} halodrops.helper.convert_rh_to_si +``` +```` + +````{py:function} convert_pres_to_si(value) +:canonical: halodrops.helper.convert_pres_to_si + +```{autodoc2-docstring} halodrops.helper.convert_pres_to_si +``` +```` + +````{py:function} convert_tdry_to_si(value) +:canonical: halodrops.helper.convert_tdry_to_si + +```{autodoc2-docstring} halodrops.helper.convert_tdry_to_si +``` +```` + +````{py:function} get_si_converter_function_based_on_var(var_name) +:canonical: halodrops.helper.get_si_converter_function_based_on_var + +```{autodoc2-docstring} halodrops.helper.get_si_converter_function_based_on_var +``` +```` + +````{py:function} calc_saturation_pressure(temperature_K, method='hardy1998') +:canonical: halodrops.helper.calc_saturation_pressure + +```{autodoc2-docstring} halodrops.helper.calc_saturation_pressure +``` +```` + +````{py:function} calc_q_from_rh(ds) +:canonical: halodrops.helper.calc_q_from_rh + +```{autodoc2-docstring} halodrops.helper.calc_q_from_rh +``` +```` + +````{py:function} calc_theta_from_T(dataset) +:canonical: halodrops.helper.calc_theta_from_T + +```{autodoc2-docstring} halodrops.helper.calc_theta_from_T +``` +```` diff --git a/docs/source/apidocs/halodrops/halodrops.helper.paths.md b/docs/source/apidocs/halodrops/halodrops.helper.paths.md index 5cd399e..fa43dca 100644 --- a/docs/source/apidocs/halodrops/halodrops.helper.paths.md +++ b/docs/source/apidocs/halodrops/halodrops.helper.paths.md @@ -15,8 +15,12 @@ :class: autosummary longtable :align: left -* - {py:obj}`Paths ` - - ```{autodoc2-docstring} halodrops.helper.paths.Paths +* - {py:obj}`Platform ` + - ```{autodoc2-docstring} halodrops.helper.paths.Platform + :summary: + ``` +* - {py:obj}`Flight ` + - ```{autodoc2-docstring} halodrops.helper.paths.Flight :summary: ``` ```` @@ -38,45 +42,67 @@ ````{py:data} module_logger :canonical: halodrops.helper.paths.module_logger :value: > - None + 'getLogger(...)' ```{autodoc2-docstring} halodrops.helper.paths.module_logger ``` ```` -`````{py:class} Paths(directory, flightdir) -:canonical: halodrops.helper.paths.Paths +`````{py:class} Platform(data_directory, platform_id, platform_directory_name=None, path_structure=path_to_flight_ids) +:canonical: halodrops.helper.paths.Platform + +```{autodoc2-docstring} halodrops.helper.paths.Platform +``` + +```{rubric} Initialization +``` + +```{autodoc2-docstring} halodrops.helper.paths.Platform.__init__ +``` + +````{py:method} get_flight_ids() +:canonical: halodrops.helper.paths.Platform.get_flight_ids + +```{autodoc2-docstring} halodrops.helper.paths.Platform.get_flight_ids +``` + +```` + +````` + +`````{py:class} Flight(data_directory, flight_id, platform_id, path_structure=path_to_l0_files) +:canonical: halodrops.helper.paths.Flight -```{autodoc2-docstring} halodrops.helper.paths.Paths +```{autodoc2-docstring} halodrops.helper.paths.Flight ``` ```{rubric} Initialization ``` -```{autodoc2-docstring} halodrops.helper.paths.Paths.__init__ +```{autodoc2-docstring} halodrops.helper.paths.Flight.__init__ ``` ````{py:method} get_all_afiles() -:canonical: halodrops.helper.paths.Paths.get_all_afiles +:canonical: halodrops.helper.paths.Flight.get_all_afiles -```{autodoc2-docstring} halodrops.helper.paths.Paths.get_all_afiles +```{autodoc2-docstring} halodrops.helper.paths.Flight.get_all_afiles ``` ```` ````{py:method} quicklooks_path() -:canonical: halodrops.helper.paths.Paths.quicklooks_path +:canonical: halodrops.helper.paths.Flight.quicklooks_path -```{autodoc2-docstring} halodrops.helper.paths.Paths.quicklooks_path +```{autodoc2-docstring} halodrops.helper.paths.Flight.quicklooks_path ``` ```` ````{py:method} populate_sonde_instances() -> typing.Dict -:canonical: halodrops.helper.paths.Paths.populate_sonde_instances +:canonical: halodrops.helper.paths.Flight.populate_sonde_instances -```{autodoc2-docstring} halodrops.helper.paths.Paths.populate_sonde_instances +```{autodoc2-docstring} halodrops.helper.paths.Flight.populate_sonde_instances ``` ```` diff --git a/docs/source/apidocs/halodrops/halodrops.helper.rawreader.md b/docs/source/apidocs/halodrops/halodrops.helper.rawreader.md index dc833e4..b143034 100644 --- a/docs/source/apidocs/halodrops/halodrops.helper.rawreader.md +++ b/docs/source/apidocs/halodrops/halodrops.helper.rawreader.md @@ -50,7 +50,7 @@ ````{py:data} module_logger :canonical: halodrops.helper.rawreader.module_logger :value: > - None + 'getLogger(...)' ```{autodoc2-docstring} halodrops.helper.rawreader.module_logger ``` diff --git a/docs/source/apidocs/halodrops/halodrops.md b/docs/source/apidocs/halodrops/halodrops.md index cf7806b..e2d6605 100644 --- a/docs/source/apidocs/halodrops/halodrops.md +++ b/docs/source/apidocs/halodrops/halodrops.md @@ -22,11 +22,24 @@ halodrops.helper :titlesonly: :maxdepth: 1 -halodrops.sonde +halodrops.processor +halodrops.pipeline ``` ## Package Contents +### Functions + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`main ` + - ```{autodoc2-docstring} halodrops.main + :summary: + ``` +```` + ### Data ````{list-table} @@ -64,7 +77,7 @@ halodrops.sonde ````{py:data} logger :canonical: halodrops.logger :value: > - None + 'getLogger(...)' ```{autodoc2-docstring} halodrops.logger ``` @@ -74,7 +87,7 @@ halodrops.sonde ````{py:data} fh_info :canonical: halodrops.fh_info :value: > - None + 'FileHandler(...)' ```{autodoc2-docstring} halodrops.fh_info ``` @@ -84,7 +97,7 @@ halodrops.sonde ````{py:data} fh_debug :canonical: halodrops.fh_debug :value: > - None + 'FileHandler(...)' ```{autodoc2-docstring} halodrops.fh_debug ``` @@ -94,7 +107,7 @@ halodrops.sonde ````{py:data} ch :canonical: halodrops.ch :value: > - None + 'StreamHandler(...)' ```{autodoc2-docstring} halodrops.ch ``` @@ -113,9 +126,16 @@ halodrops.sonde ````{py:data} formatter :canonical: halodrops.formatter :value: > - None + 'Formatter(...)' ```{autodoc2-docstring} halodrops.formatter ``` ```` + +````{py:function} main() +:canonical: halodrops.main + +```{autodoc2-docstring} halodrops.main +``` +```` diff --git a/docs/source/apidocs/halodrops/halodrops.pipeline.md b/docs/source/apidocs/halodrops/halodrops.pipeline.md new file mode 100644 index 0000000..f82388d --- /dev/null +++ b/docs/source/apidocs/halodrops/halodrops.pipeline.md @@ -0,0 +1,174 @@ +# {py:mod}`halodrops.pipeline` + +```{py:module} halodrops.pipeline +``` + +```{autodoc2-docstring} halodrops.pipeline +:allowtitles: +``` + +## Module Contents + +### Functions + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`get_mandatory_args ` + - ```{autodoc2-docstring} halodrops.pipeline.get_mandatory_args + :summary: + ``` +* - {py:obj}`get_mandatory_values_from_config ` + - ```{autodoc2-docstring} halodrops.pipeline.get_mandatory_values_from_config + :summary: + ``` +* - {py:obj}`get_nondefaults_from_config ` + - ```{autodoc2-docstring} halodrops.pipeline.get_nondefaults_from_config + :summary: + ``` +* - {py:obj}`get_args_for_function ` + - ```{autodoc2-docstring} halodrops.pipeline.get_args_for_function + :summary: + ``` +* - {py:obj}`get_platforms ` + - ```{autodoc2-docstring} halodrops.pipeline.get_platforms + :summary: + ``` +* - {py:obj}`create_and_populate_flight_object ` + - ```{autodoc2-docstring} halodrops.pipeline.create_and_populate_flight_object + :summary: + ``` +* - {py:obj}`iterate_Sonde_method_over_dict_of_Sondes_objects ` + - ```{autodoc2-docstring} halodrops.pipeline.iterate_Sonde_method_over_dict_of_Sondes_objects + :summary: + ``` +* - {py:obj}`sondes_to_gridded ` + - ```{autodoc2-docstring} halodrops.pipeline.sondes_to_gridded + :summary: + ``` +* - {py:obj}`iterate_method_over_dataset ` + - ```{autodoc2-docstring} halodrops.pipeline.iterate_method_over_dataset + :summary: + ``` +* - {py:obj}`gridded_to_pattern ` + - ```{autodoc2-docstring} halodrops.pipeline.gridded_to_pattern + :summary: + ``` +* - {py:obj}`run_substep ` + - ```{autodoc2-docstring} halodrops.pipeline.run_substep + :summary: + ``` +* - {py:obj}`run_pipeline ` + - ```{autodoc2-docstring} halodrops.pipeline.run_pipeline + :summary: + ``` +```` + +### Data + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`pipeline ` + - ```{autodoc2-docstring} halodrops.pipeline.pipeline + :summary: + ``` +```` + +### API + +````{py:function} get_mandatory_args(function) +:canonical: halodrops.pipeline.get_mandatory_args + +```{autodoc2-docstring} halodrops.pipeline.get_mandatory_args +``` +```` + +````{py:function} get_mandatory_values_from_config(config, mandatory_args) +:canonical: halodrops.pipeline.get_mandatory_values_from_config + +```{autodoc2-docstring} halodrops.pipeline.get_mandatory_values_from_config +``` +```` + +````{py:function} get_nondefaults_from_config(config: configparser.ConfigParser, obj: callable) -> dict +:canonical: halodrops.pipeline.get_nondefaults_from_config + +```{autodoc2-docstring} halodrops.pipeline.get_nondefaults_from_config +``` +```` + +````{py:function} get_args_for_function(config, function) +:canonical: halodrops.pipeline.get_args_for_function + +```{autodoc2-docstring} halodrops.pipeline.get_args_for_function +``` +```` + +````{py:function} get_platforms(config) +:canonical: halodrops.pipeline.get_platforms + +```{autodoc2-docstring} halodrops.pipeline.get_platforms +``` +```` + +````{py:function} create_and_populate_flight_object(config: configparser.ConfigParser) -> (dict[halodrops.helper.paths.Platform], dict[halodrops.processor.Sonde]) +:canonical: halodrops.pipeline.create_and_populate_flight_object + +```{autodoc2-docstring} halodrops.pipeline.create_and_populate_flight_object +``` +```` + +````{py:function} iterate_Sonde_method_over_dict_of_Sondes_objects(obj: dict, functions: list, config: configparser.ConfigParser) -> dict +:canonical: halodrops.pipeline.iterate_Sonde_method_over_dict_of_Sondes_objects + +```{autodoc2-docstring} halodrops.pipeline.iterate_Sonde_method_over_dict_of_Sondes_objects +``` +```` + +````{py:function} sondes_to_gridded(sondes: dict) -> xarray.Dataset +:canonical: halodrops.pipeline.sondes_to_gridded + +```{autodoc2-docstring} halodrops.pipeline.sondes_to_gridded +``` +```` + +````{py:function} iterate_method_over_dataset(dataset: xarray.Dataset, functions: list) -> xarray.Dataset +:canonical: halodrops.pipeline.iterate_method_over_dataset + +```{autodoc2-docstring} halodrops.pipeline.iterate_method_over_dataset +``` +```` + +````{py:function} gridded_to_pattern(gridded: xarray.Dataset, config: configparser.ConfigParser) -> xarray.Dataset +:canonical: halodrops.pipeline.gridded_to_pattern + +```{autodoc2-docstring} halodrops.pipeline.gridded_to_pattern +``` +```` + +````{py:function} run_substep(previous_substep_output, substep: dict, config: configparser.ConfigParser) +:canonical: halodrops.pipeline.run_substep + +```{autodoc2-docstring} halodrops.pipeline.run_substep +``` +```` + +````{py:function} run_pipeline(pipeline: dict, config: configparser.ConfigParser) +:canonical: halodrops.pipeline.run_pipeline + +```{autodoc2-docstring} halodrops.pipeline.run_pipeline +``` +```` + +````{py:data} pipeline +:canonical: halodrops.pipeline.pipeline +:value: > + None + +```{autodoc2-docstring} halodrops.pipeline.pipeline +``` + +```` diff --git a/docs/source/apidocs/halodrops/halodrops.processor.md b/docs/source/apidocs/halodrops/halodrops.processor.md new file mode 100644 index 0000000..00fcf0a --- /dev/null +++ b/docs/source/apidocs/halodrops/halodrops.processor.md @@ -0,0 +1,314 @@ +# {py:mod}`halodrops.processor` + +```{py:module} halodrops.processor +``` + +```{autodoc2-docstring} halodrops.processor +:allowtitles: +``` + +## Module Contents + +### Classes + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`Sonde ` + - ```{autodoc2-docstring} halodrops.processor.Sonde + :summary: + ``` +```` + +### Data + +````{list-table} +:class: autosummary longtable +:align: left + +* - {py:obj}`_no_default ` + - ```{autodoc2-docstring} halodrops.processor._no_default + :summary: + ``` +```` + +### API + +````{py:data} _no_default +:canonical: halodrops.processor._no_default +:value: > + 'object(...)' + +```{autodoc2-docstring} halodrops.processor._no_default +``` + +```` + +`````{py:class} Sonde +:canonical: halodrops.processor.Sonde + +```{autodoc2-docstring} halodrops.processor.Sonde +``` + +````{py:attribute} sort_index +:canonical: halodrops.processor.Sonde.sort_index +:type: numpy.datetime64 +:value: > + 'field(...)' + +```{autodoc2-docstring} halodrops.processor.Sonde.sort_index +``` + +```` + +````{py:attribute} serial_id +:canonical: halodrops.processor.Sonde.serial_id +:type: str +:value: > + None + +```{autodoc2-docstring} halodrops.processor.Sonde.serial_id +``` + +```` + +````{py:attribute} _ +:canonical: halodrops.processor.Sonde._ +:type: dataclasses.KW_ONLY +:value: > + None + +```{autodoc2-docstring} halodrops.processor.Sonde._ +``` + +```` + +````{py:attribute} launch_time +:canonical: halodrops.processor.Sonde.launch_time +:type: typing.Optional[typing.Any] +:value: > + None + +```{autodoc2-docstring} halodrops.processor.Sonde.launch_time +``` + +```` + +````{py:method} __post_init__() +:canonical: halodrops.processor.Sonde.__post_init__ + +```{autodoc2-docstring} halodrops.processor.Sonde.__post_init__ +``` + +```` + +````{py:method} add_flight_id(flight_id: str) -> None +:canonical: halodrops.processor.Sonde.add_flight_id + +```{autodoc2-docstring} halodrops.processor.Sonde.add_flight_id +``` + +```` + +````{py:method} add_platform_id(platform_id: str) -> None +:canonical: halodrops.processor.Sonde.add_platform_id + +```{autodoc2-docstring} halodrops.processor.Sonde.add_platform_id +``` + +```` + +````{py:method} add_spatial_coordinates_at_launch(launch_coordinates: typing.List) -> None +:canonical: halodrops.processor.Sonde.add_spatial_coordinates_at_launch + +```{autodoc2-docstring} halodrops.processor.Sonde.add_spatial_coordinates_at_launch +``` + +```` + +````{py:method} add_launch_detect(launch_detect_bool: bool) -> None +:canonical: halodrops.processor.Sonde.add_launch_detect + +```{autodoc2-docstring} halodrops.processor.Sonde.add_launch_detect +``` + +```` + +````{py:method} add_afile(path_to_afile: str) -> None +:canonical: halodrops.processor.Sonde.add_afile + +```{autodoc2-docstring} halodrops.processor.Sonde.add_afile +``` + +```` + +````{py:method} add_level_dir() +:canonical: halodrops.processor.Sonde.add_level_dir + +```{autodoc2-docstring} halodrops.processor.Sonde.add_level_dir +``` + +```` + +````{py:method} run_aspen(path_to_postaspenfile: str = None) -> None +:canonical: halodrops.processor.Sonde.run_aspen + +```{autodoc2-docstring} halodrops.processor.Sonde.run_aspen +``` + +```` + +````{py:method} add_aspen_ds() -> None +:canonical: halodrops.processor.Sonde.add_aspen_ds + +```{autodoc2-docstring} halodrops.processor.Sonde.add_aspen_ds +``` + +```` + +````{py:method} filter_no_launch_detect() -> None +:canonical: halodrops.processor.Sonde.filter_no_launch_detect + +```{autodoc2-docstring} halodrops.processor.Sonde.filter_no_launch_detect +``` + +```` + +````{py:method} detect_floater(gpsalt_threshold: float = 25, consecutive_time_steps: int = 3, skip: bool = False) +:canonical: halodrops.processor.Sonde.detect_floater + +```{autodoc2-docstring} halodrops.processor.Sonde.detect_floater +``` + +```` + +````{py:method} crop_aspen_ds_to_landing_time() +:canonical: halodrops.processor.Sonde.crop_aspen_ds_to_landing_time + +```{autodoc2-docstring} halodrops.processor.Sonde.crop_aspen_ds_to_landing_time +``` + +```` + +````{py:method} profile_fullness(variable_dict={'u_wind': 4, 'v_wind': 4, 'rh': 2, 'tdry': 2, 'pres': 2}, time_dimension='time', timestamp_frequency=4, fullness_threshold=0.75, add_fullness_fraction_attribute=True, skip=False) +:canonical: halodrops.processor.Sonde.profile_fullness + +```{autodoc2-docstring} halodrops.processor.Sonde.profile_fullness +``` + +```` + +````{py:method} near_surface_coverage(variables=['u_wind', 'v_wind', 'rh', 'tdry', 'pres'], alt_bounds=[0, 1000], alt_dimension_name='alt', count_threshold=50, add_near_surface_count_attribute=True, skip=False) +:canonical: halodrops.processor.Sonde.near_surface_coverage + +```{autodoc2-docstring} halodrops.processor.Sonde.near_surface_coverage +``` + +```` + +````{py:method} filter_qc_fail(filter_flags=None) +:canonical: halodrops.processor.Sonde.filter_qc_fail + +```{autodoc2-docstring} halodrops.processor.Sonde.filter_qc_fail +``` + +```` + +````{py:method} create_interim_l2_ds() +:canonical: halodrops.processor.Sonde.create_interim_l2_ds + +```{autodoc2-docstring} halodrops.processor.Sonde.create_interim_l2_ds +``` + +```` + +````{py:method} convert_to_si(variables=['rh', 'pres', 'tdry'], skip=False) +:canonical: halodrops.processor.Sonde.convert_to_si + +```{autodoc2-docstring} halodrops.processor.Sonde.convert_to_si +``` + +```` + +````{py:method} get_l2_variables(l2_variables: dict = hh.l2_variables) +:canonical: halodrops.processor.Sonde.get_l2_variables + +```{autodoc2-docstring} halodrops.processor.Sonde.get_l2_variables +``` + +```` + +````{py:method} add_sonde_id_variable(variable_name='sonde_id') +:canonical: halodrops.processor.Sonde.add_sonde_id_variable + +```{autodoc2-docstring} halodrops.processor.Sonde.add_sonde_id_variable +``` + +```` + +````{py:method} get_flight_attributes(l2_flight_attributes_map: dict = hh.l2_flight_attributes_map) -> None +:canonical: halodrops.processor.Sonde.get_flight_attributes + +```{autodoc2-docstring} halodrops.processor.Sonde.get_flight_attributes +``` + +```` + +````{py:method} get_other_global_attributes() +:canonical: halodrops.processor.Sonde.get_other_global_attributes + +```{autodoc2-docstring} halodrops.processor.Sonde.get_other_global_attributes +``` + +```` + +````{py:method} add_global_attributes_to_interim_l2_ds() +:canonical: halodrops.processor.Sonde.add_global_attributes_to_interim_l2_ds + +```{autodoc2-docstring} halodrops.processor.Sonde.add_global_attributes_to_interim_l2_ds +``` + +```` + +````{py:method} add_compression_and_encoding_properties(encoding_variables: dict = hh.encoding_variables, default_variable_compression_properties: dict = hh.variable_compression_properties) +:canonical: halodrops.processor.Sonde.add_compression_and_encoding_properties + +```{autodoc2-docstring} halodrops.processor.Sonde.add_compression_and_encoding_properties +``` + +```` + +````{py:method} get_l2_filename(l2_filename: str = None, l2_filename_template: str = None) +:canonical: halodrops.processor.Sonde.get_l2_filename + +```{autodoc2-docstring} halodrops.processor.Sonde.get_l2_filename +``` + +```` + +````{py:method} write_l2(l2_dir: str = None) +:canonical: halodrops.processor.Sonde.write_l2 + +```{autodoc2-docstring} halodrops.processor.Sonde.write_l2 +``` + +```` + +````{py:method} add_l2_ds(l2_dir: str = None) +:canonical: halodrops.processor.Sonde.add_l2_ds + +```{autodoc2-docstring} halodrops.processor.Sonde.add_l2_ds +``` + +```` + +````{py:method} add_q_and_theta_to_l2_ds() +:canonical: halodrops.processor.Sonde.add_q_and_theta_to_l2_ds + +```{autodoc2-docstring} halodrops.processor.Sonde.add_q_and_theta_to_l2_ds +``` + +```` + +````` diff --git a/docs/source/apidocs/halodrops/halodrops.qc.md b/docs/source/apidocs/halodrops/halodrops.qc.md deleted file mode 100644 index d479fc4..0000000 --- a/docs/source/apidocs/halodrops/halodrops.qc.md +++ /dev/null @@ -1,17 +0,0 @@ -# {py:mod}`halodrops.qc` - -```{py:module} halodrops.qc -``` - -```{autodoc2-docstring} halodrops.qc -:allowtitles: -``` - -## Submodules - -```{toctree} -:titlesonly: -:maxdepth: 1 - -halodrops.qc.profile -``` diff --git a/docs/source/apidocs/halodrops/halodrops.qc.profile.md b/docs/source/apidocs/halodrops/halodrops.qc.profile.md deleted file mode 100644 index dd7f068..0000000 --- a/docs/source/apidocs/halodrops/halodrops.qc.profile.md +++ /dev/null @@ -1,75 +0,0 @@ -# {py:mod}`halodrops.qc.profile` - -```{py:module} halodrops.qc.profile -``` - -```{autodoc2-docstring} halodrops.qc.profile -:allowtitles: -``` - -## Module Contents - -### Functions - -````{list-table} -:class: autosummary longtable -:align: left - -* - {py:obj}`fullness ` - - ```{autodoc2-docstring} halodrops.qc.profile.fullness - :summary: - ``` -* - {py:obj}`weighted_fullness ` - - ```{autodoc2-docstring} halodrops.qc.profile.weighted_fullness - :summary: - ``` -* - {py:obj}`weighted_fullness_for_config_vars ` - - ```{autodoc2-docstring} halodrops.qc.profile.weighted_fullness_for_config_vars - :summary: - ``` -```` - -### Data - -````{list-table} -:class: autosummary longtable -:align: left - -* - {py:obj}`module_logger ` - - ```{autodoc2-docstring} halodrops.qc.profile.module_logger - :summary: - ``` -```` - -### API - -````{py:data} module_logger -:canonical: halodrops.qc.profile.module_logger -:value: > - None - -```{autodoc2-docstring} halodrops.qc.profile.module_logger -``` - -```` - -````{py:function} fullness(dataset, variable, time_dimension='time') -:canonical: halodrops.qc.profile.fullness - -```{autodoc2-docstring} halodrops.qc.profile.fullness -``` -```` - -````{py:function} weighted_fullness(dataset, variable, sampling_frequency, time_dimension='time') -:canonical: halodrops.qc.profile.weighted_fullness - -```{autodoc2-docstring} halodrops.qc.profile.weighted_fullness -``` -```` - -````{py:function} weighted_fullness_for_config_vars(dataset, config_file_path, add_to_dataset=True) -:canonical: halodrops.qc.profile.weighted_fullness_for_config_vars - -```{autodoc2-docstring} halodrops.qc.profile.weighted_fullness_for_config_vars -``` -```` diff --git a/docs/source/apidocs/halodrops/halodrops.sonde.md b/docs/source/apidocs/halodrops/halodrops.sonde.md deleted file mode 100644 index c8e8336..0000000 --- a/docs/source/apidocs/halodrops/halodrops.sonde.md +++ /dev/null @@ -1,176 +0,0 @@ -# {py:mod}`halodrops.sonde` - -```{py:module} halodrops.sonde -``` - -```{autodoc2-docstring} halodrops.sonde -:allowtitles: -``` - -## Module Contents - -### Classes - -````{list-table} -:class: autosummary longtable -:align: left - -* - {py:obj}`Sonde ` - - ```{autodoc2-docstring} halodrops.sonde.Sonde - :summary: - ``` -* - {py:obj}`SondeData ` - - ```{autodoc2-docstring} halodrops.sonde.SondeData - :summary: - ``` -```` - -### Data - -````{list-table} -:class: autosummary longtable -:align: left - -* - {py:obj}`_no_default ` - - ```{autodoc2-docstring} halodrops.sonde._no_default - :summary: - ``` -```` - -### API - -````{py:data} _no_default -:canonical: halodrops.sonde._no_default -:value: > - None - -```{autodoc2-docstring} halodrops.sonde._no_default -``` - -```` - -`````{py:class} Sonde -:canonical: halodrops.sonde.Sonde - -```{autodoc2-docstring} halodrops.sonde.Sonde -``` - -````{py:attribute} sort_index -:canonical: halodrops.sonde.Sonde.sort_index -:type: numpy.datetime64 -:value: > - None - -```{autodoc2-docstring} halodrops.sonde.Sonde.sort_index -``` - -```` - -````{py:attribute} serial_id -:canonical: halodrops.sonde.Sonde.serial_id -:type: str -:value: > - None - -```{autodoc2-docstring} halodrops.sonde.Sonde.serial_id -``` - -```` - -````{py:attribute} _ -:canonical: halodrops.sonde.Sonde._ -:type: dataclasses.KW_ONLY -:value: > - None - -```{autodoc2-docstring} halodrops.sonde.Sonde._ -``` - -```` - -````{py:attribute} launch_time -:canonical: halodrops.sonde.Sonde.launch_time -:type: typing.Optional[typing.Any] -:value: > - None - -```{autodoc2-docstring} halodrops.sonde.Sonde.launch_time -``` - -```` - -````{py:method} __post_init__() -:canonical: halodrops.sonde.Sonde.__post_init__ - -```{autodoc2-docstring} halodrops.sonde.Sonde.__post_init__ -``` - -```` - -````{py:method} add_spatial_coordinates_at_launch(launch_coordinates: typing.List) -> None -:canonical: halodrops.sonde.Sonde.add_spatial_coordinates_at_launch - -```{autodoc2-docstring} halodrops.sonde.Sonde.add_spatial_coordinates_at_launch -``` - -```` - -````{py:method} add_launch_detect(launch_detect_bool: bool) -> None -:canonical: halodrops.sonde.Sonde.add_launch_detect - -```{autodoc2-docstring} halodrops.sonde.Sonde.add_launch_detect -``` - -```` - -````{py:method} add_afile(path_to_afile: str) -> None -:canonical: halodrops.sonde.Sonde.add_afile - -```{autodoc2-docstring} halodrops.sonde.Sonde.add_afile -``` - -```` - -````{py:method} add_postaspenfile(path_to_postaspenfile: str = None) -> None -:canonical: halodrops.sonde.Sonde.add_postaspenfile - -```{autodoc2-docstring} halodrops.sonde.Sonde.add_postaspenfile -``` - -```` - -````{py:method} add_aspen_ds() -> None -:canonical: halodrops.sonde.Sonde.add_aspen_ds - -```{autodoc2-docstring} halodrops.sonde.Sonde.add_aspen_ds -``` - -```` - -````` - -`````{py:class} SondeData -:canonical: halodrops.sonde.SondeData - -Bases: {py:obj}`halodrops.sonde.Sonde` - -```{autodoc2-docstring} halodrops.sonde.SondeData -``` - -````{py:attribute} data -:canonical: halodrops.sonde.SondeData.data -:type: typing.Any -:value: > - None - -```{autodoc2-docstring} halodrops.sonde.SondeData.data -``` - -```` - -````{py:method} __post_init__() -:canonical: halodrops.sonde.SondeData.__post_init__ - -```` - -````` From 620342e27a3e24d6e88074e668f51145757ef806 Mon Sep 17 00:00:00 2001 From: hgloeckner Date: Mon, 19 Aug 2024 19:34:27 +0200 Subject: [PATCH 2/8] data rearrange --- docs/source/data/index.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docs/source/data/index.md diff --git a/docs/source/data/index.md b/docs/source/data/index.md new file mode 100644 index 0000000..9ed50fa --- /dev/null +++ b/docs/source/data/index.md @@ -0,0 +1,18 @@ +# Data + +This data section of the handbook outlines procedures for how to go about doing the quality control, the processing and the generation of data products. + +## Data Directory Structure + +Usually dropsonde data has a `platform` from which it was meassured and a `flight_id` from the exact flight it was taken from. After the processing each flight will have data on different levels of processing. `halodrops` uses the following levels. + +| Level | Description | +| --------- | ---------------------------------------------------------------------------------------------- | +| `Level_0` | Contains all raw files from a flight | +| `Level_1` | Files generated from the ASPEN-processing of the D-files in Level-0 | +| `Level_2` | Sounding files that passed additional QC tests, and exclude all soundings with no usable data | +| `Level_3` | All sounding files in Level-2 gridded on a uniform, vertical grid, with some derived variables | +| `Level_4` | Circle products from all circles flown during flight | + + +You can define your exact folder structure as shown in {doc}`example configs <../tutorial/configs>` From d308bf5b3666e25ce323c84739fcf409964f202e Mon Sep 17 00:00:00 2001 From: hgloeckner Date: Mon, 19 Aug 2024 19:35:11 +0200 Subject: [PATCH 3/8] howto link fix and outdated --- docs/source/howto/list_failed_sondes.ipynb | 20 ++++++++++++++----- docs/source/howto/qc.ipynb | 23 +++++++++++++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/docs/source/howto/list_failed_sondes.ipynb b/docs/source/howto/list_failed_sondes.ipynb index bd6900c..9847ddd 100644 --- a/docs/source/howto/list_failed_sondes.ipynb +++ b/docs/source/howto/list_failed_sondes.ipynb @@ -8,6 +8,15 @@ "# Get sondes that failed to detect a launch" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " This is probably outdated \n", + "
\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -21,7 +30,7 @@ "metadata": {}, "outputs": [], "source": [ - "from halodrops.sonde import Sonde\n", + "from halodrops.processor import Sonde\n", "from halodrops.helper import paths, rawreader as rr" ] }, @@ -48,10 +57,10 @@ "outputs": [], "source": [ "# Main directory for campaign data\n", - "data_directory = '/Users/geet/Documents/Repositories/Owned/halodrops/sample/'\n", + "data_directory = '../../../example_data'\n", "\n", "# Flight ID in YYYYMMDD format\n", - "flight_id = '20220401'" + "flight_id = '20200119'" ] }, { @@ -69,7 +78,7 @@ "outputs": [], "source": [ "# Instantiate paths object\n", - "flight_instance = paths.Paths(data_directory,flight_id)\n", + "flight_instance = paths.Paths(data_directory, flight_id)\n", "\n", "# Get paths to all A-files for a flight\n", "afiles = flight_instance.get_all_afiles()" @@ -114,7 +123,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In fact, what we did above constitutes a core part of the workflow for batch-processing sondes. The function [populate_sonde_instances](../apidocs/halodrops/halodrops.helper.paths.md#halodrops.helper.paths.Paths.populate_sonde_instances) essentially does the same as above and populates more attributes to the instances." + "In fact, what we did above constitutes a core part of the workflow for batch-processing sondes. The function \n", + "[populate_sonde_instance](../apidocs/halodrops/halodrops.helper.paths.md#API) essentially does the same as above and populates more attributes to the instances." ] }, { diff --git a/docs/source/howto/qc.ipynb b/docs/source/howto/qc.ipynb index 520b53e..555c7ce 100644 --- a/docs/source/howto/qc.ipynb +++ b/docs/source/howto/qc.ipynb @@ -7,6 +7,18 @@ "# Quality control of dropsonde data" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + " This is outdated \n", + "
\n", + "\n" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -154,9 +166,18 @@ "\n", "But, there's a catch. The temperature sensor in the RD-41 sonde has a sampling frequency of 2 Hz, whereas the GPS sensor (from where the horizontal winds are derived) has a sampling frequency of 4 Hz. The time-coordinates are the same for both variables and are spaced every 0.25 seconds, which aligns exactly with the GPS sensor frequency. Therefore, it is a bit unfair to compare the fraction of temperature values against all time coordinates, given that it is not supposed to be measuring so frequently. A better way would be to compare the profile-coverage weighted for the sampling frequency. \n", "\n", - "So, if the temperature sensor has to measure at every other time-coordinate, then it's profile-coverage should be taken only for half the time-coordinates, or simply multiplied by two. This is exactly what the [weighted_fullness](../apidocs/halodrops/halodrops.qc.profile.md#halodrops.qc.profile.weighted_fullness) function does." + "So, if the temperature sensor has to measure at every other time-coordinate, then it's profile-coverage should be taken only for half the time-coordinates, or simply multiplied by two. This is exactly what the weighted_fullness ../apidocs/halodrops/halodrops.qc.profile.md#halodrops.qc.profile.weighted_fullness function does.\n", + " \n", + "
\n", + " I think this function does not exist anymore\n", + "
\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "code", "execution_count": 6, From 4669124ae1b97305ba3c6460664b813578967552 Mon Sep 17 00:00:00 2001 From: hgloeckner Date: Mon, 19 Aug 2024 19:38:43 +0200 Subject: [PATCH 4/8] rearranged config discribtion, intro --- docs/source/conf.py | 3 +- docs/source/explanation/for_developers.md | 21 ----------- .../explanation/performance_of_sondes.md | 3 +- .../handbook/data/data_directory_structure.md | 37 ------------------- docs/source/handbook/data/index.md | 10 ----- docs/source/handbook/index.md | 11 ------ docs/source/index.md | 7 ++-- .../{handbook => }/operations/in_flight.md | 12 +++--- .../source/{handbook => }/operations/index.md | 0 .../operations/ip_address_setup.md | 2 +- .../{handbook => }/operations/pre_flight.md | 8 ++-- .../{handbook => }/operations/switching_on.md | 10 ++--- docs/source/tutorial/configs.md | 22 +++++++++++ docs/source/tutorial/index.md | 15 ++++---- docs/source/tutorial/installation.md | 24 +++++++----- 15 files changed, 67 insertions(+), 118 deletions(-) delete mode 100644 docs/source/handbook/data/data_directory_structure.md delete mode 100644 docs/source/handbook/data/index.md delete mode 100644 docs/source/handbook/index.md rename docs/source/{handbook => }/operations/in_flight.md (90%) rename docs/source/{handbook => }/operations/index.md (100%) rename docs/source/{handbook => }/operations/ip_address_setup.md (97%) rename docs/source/{handbook => }/operations/pre_flight.md (85%) rename docs/source/{handbook => }/operations/switching_on.md (83%) create mode 100644 docs/source/tutorial/configs.md diff --git a/docs/source/conf.py b/docs/source/conf.py index bf76b51..0f570a5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -36,6 +36,7 @@ }, ] autodoc2_render_plugin = "myst" +autosectionlabel_prefix_document = True exclude_patterns = [] source_suffix = { @@ -48,7 +49,7 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = "sphinx_book_theme" -html_static_path = ["_static"] +# html_static_path = ["_static"] html_context = {"default_mode": "light"} html_theme_options = { "repository_url": "https://github.com/Geet-George/halodrops", diff --git a/docs/source/explanation/for_developers.md b/docs/source/explanation/for_developers.md index 38072f2..ee2a21a 100644 --- a/docs/source/explanation/for_developers.md +++ b/docs/source/explanation/for_developers.md @@ -29,24 +29,3 @@ Next, it retrieves the default values for all functions within the halodrops pac The script then defines a list of functions to execute. For each function, it retrieves the non-default arguments from the previously retrieved non-default values. If the function has mandatory arguments, it retrieves their values from the configuration file using the `get_mandatory_values_from_config` function. Finally, the script executes each function with the retrieved arguments. - -### Usage -To use this script, you need to provide a configuration file that contains the non-default and mandatory values for the functions you want to execute. The configuration file should should have a `MANDATORY` section and a separate for each function where non-default values are to be provided, where the section name is the fully qualified name of the function (e.g.`api.qc.run`). Each section should contain options for the function arguments, where the option names are the argument names and the option values are the argument values. - -An example config file would look like - -```ini -[MANDATORY] -data_directory = /path/to/data -flight_id = 20220401 - -[api.qc.run] -arg1 = nondefault1 -arg2 = nondefault2 -``` - -You can run the script from the command line simply by running `halodrops` or optionally with the `-c` or `--config_file_path` option followed by the path to your configuration file. For example: - -```bash -halodrops -c /path/to/config/file -``` diff --git a/docs/source/explanation/performance_of_sondes.md b/docs/source/explanation/performance_of_sondes.md index a7d61a6..87cdf60 100644 --- a/docs/source/explanation/performance_of_sondes.md +++ b/docs/source/explanation/performance_of_sondes.md @@ -1,6 +1,5 @@ -# Performance of sondes ----- +# Performance of sondes The performance of sondes is determined by how well the sonde performs with data provision. Taking into account the "fullness" of data provided by the sonde and the data's "quality", the sondes can be categorized as either `GOOD`, `BAD` or `UGLY`. A more detailed explanation of these terms will show up here soon, as the package develops, but for now, the basis of such a classification of sondes is explained in the publication for the [JOANNE dataset](https://doi.org/10.5194/essd-13-5253-2021). The classification takes into account potential failures that a sonde might have and therefore, it is a good idea to learn about these failures. diff --git a/docs/source/handbook/data/data_directory_structure.md b/docs/source/handbook/data/data_directory_structure.md deleted file mode 100644 index 2675694..0000000 --- a/docs/source/handbook/data/data_directory_structure.md +++ /dev/null @@ -1,37 +0,0 @@ -# Data Directory Structure - -`halodrops` strongly recommends that the data be stored in the following structure: - -```bash -├── Data_Directory -│ ├── 20200202 -│ │ ├── Level_0 -│ │ ├── Level_1 -│ │ ├── Level_2 -│ │ ├── Level_3 -│ │ ├── Level_4 -│ │ ├── Quicklooks -│ ├── 20220303 -│ │ ├── Level_0 -│ │ ├── Level_1 -│ │ ├── Level_2 -│ │ ├── Level_3 -│ │ ├── Level_4 -│ │ ├── Quicklooks -``` - -## Descriptions and nomenclature - -The `Data_Directory` is a directory that includes all data from a single campaign. Therein, data from individual flights are stored in their respective folders with their name in the format of `YYYYMMDD`, indicating the flight-date. In case of flying through midnight, consider the date of take-off. In case, there are multiple flights in a day, consider adding alphabetical suffixes to distinguish chronologically between flights, e.g. `20200202-A` and `20200202-B` would be two flights on the same day in the same order that they were flown. - -The directories within flight-data directories with `Level_` prefixes include the different processed levels of data as described below. - -| Level | Description | -| --------- | ---------------------------------------------------------------------------------------------- | -| `Level_0` | Contains all raw files from a flight | -| `Level_1` | Files generated from the ASPEN-processing of the D-files in Level-0 | -| `Level_2` | Sounding files that passed additional QC tests, and exclude all soundings with no usable data | -| `Level_3` | All sounding files in Level-2 gridded on a uniform, vertical grid, with some derived variables | -| `Level_4` | Circle products from all circles flown during flight | - -Maintaining this structure is also important for the package to automatically navigate through data directories, e.g. see the {py:obj}`Paths ` class. diff --git a/docs/source/handbook/data/index.md b/docs/source/handbook/data/index.md deleted file mode 100644 index 531a0e1..0000000 --- a/docs/source/handbook/data/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Data - -This data section of the handbook outlines procedures for how to go about doing the quality control, the processing and the generation of data products. - -```{toctree} -:caption: 'Contents:' -:maxdepth: 1 - -data_directory_structure -``` diff --git a/docs/source/handbook/index.md b/docs/source/handbook/index.md deleted file mode 100644 index 1f65b64..0000000 --- a/docs/source/handbook/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Handbook - -This handbook documents the procedures to be followed for {doc}`operations ` of dropsondes on the HALO aircraft, as well as for {doc}`data-handling `. It serves as a sequence of steps (in some cases, a checklist) that have to be followed for the aforementioned purposes. The handbook is minimal in terms of explaining the rationale behind the procedures. You will likely find these in the {doc}`Explanations ` section. - -```{toctree} -:caption: 'Contents:' -:maxdepth: 1 - -operations/index -data/index -``` diff --git a/docs/source/index.md b/docs/source/index.md index 5363228..f074984 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -19,7 +19,7 @@ This package documents and enables a uniform workflow for the [HALO aircraft](ht Keeping these objectives in mind, HALO-DROPS has two elements at its core: -1. {doc}`Handbook ` +1. {doc}`Operations ` The handbook serves as a document outlining the steps for dropsondes' routine operations, known issues and troubleshooting as well as for handling data such as the recommended data structure. @@ -46,8 +46,9 @@ For a quick start to using `halodrops`, go to {doc}`Getting Started (photo courtesy: Geet George)* | 1. Switch on the ventilating fans in the top rack by bringing the switch `SW1` (`Top rack`) to the `up` position. Photo below shows switch in the `on` position. - | ![Top rack](../../graphics/top_rack.jpg) | + | ![Top rack](../graphics/top_rack.jpg) | | :-----------------------------------------------------: | | *Top rack (photo courtesy: Geet George)* | 2. Power on HRDS components in the `Switch rack` with switches `SW1`, `SW2`, `SW3`, `SW4` and `SW5` (in that order). Photo below shows all switches in the `on` position. The breakers (marked as `CB`) in both racks are not to be touched - they should be kept in their original positione, i.e. pressed in. - | ![Switch rack](../../graphics/switch_rack.jpg) | + | ![Switch rack](../graphics/switch_rack.jpg) | | :---------------------------------------------------------------------------------------------------------------------------------------------: | | *Switch rack. Labels above the switches indicate the respective components which are powered on. (photo courtesy: Geet George)* | 3. Screen should look like the picture below after booting has completed. - | ![Start screen](../../graphics/start_screen.png) | + | ![Start screen](../graphics/start_screen.png) | | :----------------------------------------------: | | *Start screen* | 4. Start the `AVAPS II` software. You should find the shortcut icon on the Desktop. The software opens to look like this. - | ![AVAPS start screen](../../graphics/start_avaps.png) | + | ![AVAPS start screen](../graphics/start_avaps.png) | | :---------------------------------------------------: | | *AVAPS start screen* | diff --git a/docs/source/tutorial/configs.md b/docs/source/tutorial/configs.md new file mode 100644 index 0000000..5e351bc --- /dev/null +++ b/docs/source/tutorial/configs.md @@ -0,0 +1,22 @@ +# Config files + +Each config file has a mandatory section that contains the data directory of the dropsonde data like +```ini +[MANDATORY] +data_directory = ./example_data +``` +Technically, this is everything a valid config file needs. However, you can specify the place of your flight folders and of the actual dropsonde data in an optional section. For the example data this would be +```ini +[OPTIONAL] +path_to_flight_ids = {platform}/Level_0 +path_to_l0_files = {platform}/Level_0/{flight_id} +``` + +Other optional function parameters can be specified with their function as a section. To specify the L2 and L3 filenames this could be +```ini +[processor.Sonde.get_l2_filename] +l2_filename_template = PERCUSION_{platform}_{launch_time}_{flight_id}_{serial_id}_Level_2.nc +[processor.Gridded.get_l3_filename] +l3_filename_template = PERCUSION_{platform}_{flight_id}_Level_3.nc + +``` diff --git a/docs/source/tutorial/index.md b/docs/source/tutorial/index.md index 55c6651..e12e894 100644 --- a/docs/source/tutorial/index.md +++ b/docs/source/tutorial/index.md @@ -2,17 +2,16 @@ ```{toctree} :caption: 'Contents:' -:maxdepth: 1 + installation +configs ``` + + ----- -Ideally, for a campaign, the package would run in a way that all you have to do for data processing is: +To run halodrops on a folder of dropsonde data, use -```console -halodrops data +```bash +halodrops -c ``` -(t_extensions)= -## Extensions - -The data processing can be specified to handle data only for particular files, flights or other sets. diff --git a/docs/source/tutorial/installation.md b/docs/source/tutorial/installation.md index 5b30308..d9df500 100644 --- a/docs/source/tutorial/installation.md +++ b/docs/source/tutorial/installation.md @@ -1,19 +1,25 @@ # Installation -Ideally, it would be: +For now, halodrops is not a `pip` or `conda` package. +You can either clone the repository by -```console -pip install halodrops +``` +git clone git@github.com:Geet-George/halodrops.git ``` -or +and run -```console -conda install halodrops ``` +conda env create -f environment.yml +``` +or +``` +mamba env create -f environment.yml +``` +from the folder directory to install halodrops in development mode, -It is highly recommended to use [`mamba`](https://mamba.readthedocs.io/en/latest/) as +or you can directly install the package from github using pip -```console -mamba install halodrops +``` +pip install git+https://github.com/Geet-George/halodrops.git#egg=halodrops ``` From fe00e267c4313c436d77c04f649cf249ee63a454 Mon Sep 17 00:00:00 2001 From: hgloeckner <55357611+hgloeckner@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:17:57 +0200 Subject: [PATCH 5/8] level description change Co-authored-by: Theresa Mieslinger <41184617+tmieslinger@users.noreply.github.com> --- docs/source/data/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/source/data/index.md b/docs/source/data/index.md index 9ed50fa..01b78f8 100644 --- a/docs/source/data/index.md +++ b/docs/source/data/index.md @@ -8,11 +8,11 @@ Usually dropsonde data has a `platform` from which it was meassured and a `fligh | Level | Description | | --------- | ---------------------------------------------------------------------------------------------- | -| `Level_0` | Contains all raw files from a flight | -| `Level_1` | Files generated from the ASPEN-processing of the D-files in Level-0 | -| `Level_2` | Sounding files that passed additional QC tests, and exclude all soundings with no usable data | -| `Level_3` | All sounding files in Level-2 gridded on a uniform, vertical grid, with some derived variables | -| `Level_4` | Circle products from all circles flown during flight | +| `Level_0` | raw files from the AVAPS software (A-files, D-files, ...). Some files contain auxiliary data for a measurement sequence (usually a flight) and others are per sonde. | +| `Level_1` | ASPEN-processed netCDF files per sonde. First QC applied. | +| `Level_2` | Sondes that passed additional QC tests. Still one file per sonde. All soundings with no usable data are excluded | +| `Level_3` | One dataset (file) containing all Level_2 soundings gridded on a uniform, vertical grid, with some derived variables | +| `Level_4` | Circle products from all circles flown during flight or measurement campaign | You can define your exact folder structure as shown in {doc}`example configs <../tutorial/configs>` From 1b24a5f1a2c5c7bc44a6017de76f34c220d1fc71 Mon Sep 17 00:00:00 2001 From: hgloeckner <55357611+hgloeckner@users.noreply.github.com> Date: Fri, 23 Aug 2024 13:20:03 +0200 Subject: [PATCH 6/8] installation guide Co-authored-by: Theresa Mieslinger <41184617+tmieslinger@users.noreply.github.com> --- docs/source/tutorial/installation.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/source/tutorial/installation.md b/docs/source/tutorial/installation.md index d9df500..7ec8a77 100644 --- a/docs/source/tutorial/installation.md +++ b/docs/source/tutorial/installation.md @@ -7,18 +7,14 @@ You can either clone the repository by git clone git@github.com:Geet-George/halodrops.git ``` -and run +and create a respective python environment with `conda` from the base folder directory: ``` conda env create -f environment.yml ``` -or -``` -mamba env create -f environment.yml -``` -from the folder directory to install halodrops in development mode, +This will install halodrops in development mode. -or you can directly install the package from github using pip +Alternatively, you can directly install the package from github using pip ``` pip install git+https://github.com/Geet-George/halodrops.git#egg=halodrops From 6fdfe45cd58a116c8fcc73370579a8513f898ad7 Mon Sep 17 00:00:00 2001 From: hgloeckner Date: Fri, 23 Aug 2024 13:42:13 +0200 Subject: [PATCH 7/8] adapted tutorial text --- docs/source/tutorial/index.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/source/tutorial/index.md b/docs/source/tutorial/index.md index e12e894..0471da9 100644 --- a/docs/source/tutorial/index.md +++ b/docs/source/tutorial/index.md @@ -1,17 +1,22 @@ # Getting Started -```{toctree} -:caption: 'Contents:' -installation -configs -``` +This page explains how to install and run the `halodrops` python package. The package includes functions to process the dropsonde data from raw files to datasets on uniform grids and including several derived meteorological variables. ------ -To run halodrops on a folder of dropsonde data, use +To run `halodrops` on a set of dropsonde data, you first need to create a respective configuration file. An example and further infos are provided below. To run the `halodrops` pipeline, you need to provide the path to the config file: ```bash -halodrops -c + halodrops -c +``` + +The processing from Level_0 to Level_1 (using [aspen](https://www.eol.ucar.edu/content/aspen)) is included in `halodrops`. It makes use of a docker image containing the ASPEN software. Before actually calling halodrops, you therefore need to install [docker](https://www.docker.com/) and start a docker daemon (dockerd) locally to be able to use the ASPEN docker image. The simplest way would be to install Docker Desktop (on MacOS also possible via `brew install --cask docker`) and open the application before executing halodrops. Further information can be found in the respective [aspenqc](https://github.com/atmdrops/aspenqc) repository. + +```{toctree} +:caption: 'Contents:' + + +installation +configs ``` From dc00e23e8b8b016af1287cf7f93f1f589bfab91e Mon Sep 17 00:00:00 2001 From: hgloeckner Date: Fri, 23 Aug 2024 13:47:06 +0200 Subject: [PATCH 8/8] fixed reference in Flight and Platform class --- src/halodrops/helper/paths.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/halodrops/helper/paths.py b/src/halodrops/helper/paths.py index cf0a7c4..5ba6608 100644 --- a/src/halodrops/helper/paths.py +++ b/src/halodrops/helper/paths.py @@ -16,8 +16,8 @@ class Platform: """ Deriving flight paths from the provided platform directory - The input should align in terms of hierarchy and nomenclature - with the {doc}`Directory Structure ` that `halodrops` expects. + The structure of the input should be defined in the config file as described in the + {doc}`example config `. """ def __init__( @@ -53,10 +53,10 @@ def get_flight_ids(self): class Flight: """ - Deriving paths from the provided directory + Deriving sonde paths from the provided directory - The input should align in terms of hierarchy and nomenclature - with the {doc}`Directory Structure ` that `halodrops` expects. + The structure of the input should be defined in the config file as described in the + {doc}`example config `. """ def __init__(