diff --git a/aodn_cloud_optimised/bin/argo.py b/aodn_cloud_optimised/bin/argo.py index 1e58f20..663c828 100755 --- a/aodn_cloud_optimised/bin/argo.py +++ b/aodn_cloud_optimised/bin/argo.py @@ -21,7 +21,7 @@ def main(): # # "--clear-existing-data", # "--force-previous-parquet-deletion", # "--cluster-mode", - # "remote", + # "coiled", # ] # # # Run the command @@ -38,7 +38,7 @@ def main(): "argo.json", "--force-previous-parquet-deletion", "--cluster-mode", - "remote", + "coiled", ] subprocess.run(command, check=True) @@ -56,7 +56,7 @@ def main(): "argo.json", "--force-previous-parquet-deletion", "--cluster-mode", - "remote", + "coiled", ] subprocess.run(command, check=True) @@ -73,6 +73,6 @@ def main(): "argo.json", "--force-previous-parquet-deletion", "--cluster-mode", - "remote", + "coiled", ] subprocess.run(command, check=True) diff --git a/aodn_cloud_optimised/bin/autonomous_underwater_vehicle.py b/aodn_cloud_optimised/bin/autonomous_underwater_vehicle.py index ea2d078..31b8dae 100755 --- a/aodn_cloud_optimised/bin/autonomous_underwater_vehicle.py +++ b/aodn_cloud_optimised/bin/autonomous_underwater_vehicle.py @@ -895,7 +895,7 @@ def main(): "autonomous_underwater_vehicle.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/create_dataset_config.py b/aodn_cloud_optimised/bin/create_dataset_config.py index 9287c0b..d91cbb3 100644 --- a/aodn_cloud_optimised/bin/create_dataset_config.py +++ b/aodn_cloud_optimised/bin/create_dataset_config.py @@ -204,7 +204,7 @@ def main(): "{dataset_json}", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command @@ -678,7 +678,7 @@ def main(): dataset_config["metadata_uuid"] = args.uuid dataset_config["logger_name"] = args.dataset_name dataset_config["cloud_optimised_format"] = args.cloud_format - dataset_config["cluster_options"] = { + dataset_config["coiled_cluster_options"] = { "n_workers": [1, 20], "scheduler_vm_types": "t3.small", "worker_vm_types": "t3.medium", diff --git a/aodn_cloud_optimised/bin/generic_cloud_optimised_creation.py b/aodn_cloud_optimised/bin/generic_cloud_optimised_creation.py index 28bf41f..49d81cc 100644 --- a/aodn_cloud_optimised/bin/generic_cloud_optimised_creation.py +++ b/aodn_cloud_optimised/bin/generic_cloud_optimised_creation.py @@ -9,13 +9,13 @@ Usage Examples: generic_cloud_optimised_creation --paths 'IMOS/ANMN/NSW' 'IMOS/ANMN/PA' --filters '_hourly-timeseries_' 'FV02' --dataset-config 'mooring_hourly_timeseries_delayed_qc.json' - --clear-existing-data --cluster-mode 'remote' + --clear-existing-data --cluster-mode 'coiled' generic_cloud_optimised_creation --paths 'IMOS/ANMN/NSW' 'IMOS/ANMN/QLD' --dataset-config 'mooring_ctd_delayed_qc.json' generic_cloud_optimised_creation --paths 'IMOS/ACORN/gridded_1h-avg-current-map_QC/TURQ/2024' - --dataset-config 'radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json' --clear-existing-data --cluster-mode 'remote' + --dataset-config 'radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json' --clear-existing-data --cluster-mode 'coiled' Arguments: --paths: List of S3 paths to process. Example: 'IMOS/ANMN/NSW' 'IMOS/ANMN/PA' @@ -25,7 +25,7 @@ --clear-existing-data: Flag to clear existing data. Default is False. --force-previous-parquet-deletion: Flag to force the search of previous equivalent parquet file created. Much slower. Default is False. Only for Parquet processing. - --cluster-mode: Cluster mode to use. Options: 'local' or 'remote'. Default is 'local'. + --cluster-mode: Cluster mode to use. Options: 'local' or 'coiled'. Default is 'local'. --optimised-bucket-name: Bucket name where cloud optimised object will be created. Default is the value of BUCKET_OPTIMISED_DEFAULT from the config. --root-prefix-cloud-optimised-path: Prefix value for the root location of the cloud optimised objects. Default is the @@ -51,9 +51,9 @@ def main(): parser = argparse.ArgumentParser( description="Process S3 paths and create cloud-optimized datasets.", epilog="Examples:\n" - " generic_cloud_optimised_creation --paths 'IMOS/ANMN/NSW' 'IMOS/ANMN/PA' --filters '_hourly-timeseries_' 'FV02' --dataset-config 'mooring_hourly_timeseries_delayed_qc.json' --clear-existing-data --cluster-mode 'remote'\n" + " generic_cloud_optimised_creation --paths 'IMOS/ANMN/NSW' 'IMOS/ANMN/PA' --filters '_hourly-timeseries_' 'FV02' --dataset-config 'mooring_hourly_timeseries_delayed_qc.json' --clear-existing-data --cluster-mode 'coiled'\n" " generic_cloud_optimised_creation --paths 'IMOS/ANMN/NSW' 'IMOS/ANMN/QLD' --dataset-config 'mooring_ctd_delayed_qc.json'\n" - " generic_cloud_optimised_creation --paths 'IMOS/ACORN/gridded_1h-avg-current-map_QC/TURQ/2024' --dataset-config 'radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json' --clear-existing-data --cluster-mode 'remote'\n", + " generic_cloud_optimised_creation --paths 'IMOS/ACORN/gridded_1h-avg-current-map_QC/TURQ/2024' --dataset-config 'radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json' --clear-existing-data --cluster-mode 'coiled'\n", formatter_class=argparse.RawTextHelpFormatter, ) @@ -91,13 +91,13 @@ def main(): "Only for Parquet processing.", ) - cluster_options = [mode.value for mode in clusterLib.ClusterMode] + coiled_cluster_options = [mode.value for mode in clusterLib.ClusterMode] parser.add_argument( "--cluster-mode", # type=clusterLib.parse_cluster_mode, default=clusterLib.ClusterMode.NONE.value, - choices=cluster_options, - help="Cluster mode to use. Options: 'local' or 'remote'. Default is None.", + choices=coiled_cluster_options, + help="Cluster mode to use. Options: 'local' or 'coiled'. Default is None.", ) parser.add_argument( diff --git a/aodn_cloud_optimised/bin/model_sea_level_anomaly_gridded_realtime.py b/aodn_cloud_optimised/bin/model_sea_level_anomaly_gridded_realtime.py index 58a0311..499d4b2 100755 --- a/aodn_cloud_optimised/bin/model_sea_level_anomaly_gridded_realtime.py +++ b/aodn_cloud_optimised/bin/model_sea_level_anomaly_gridded_realtime.py @@ -11,7 +11,7 @@ def main(): "model_sea_level_anomaly_gridded_realtime.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/mooring_ctd_delayed_qc.py b/aodn_cloud_optimised/bin/mooring_ctd_delayed_qc.py index 0615d5d..510d565 100755 --- a/aodn_cloud_optimised/bin/mooring_ctd_delayed_qc.py +++ b/aodn_cloud_optimised/bin/mooring_ctd_delayed_qc.py @@ -18,7 +18,7 @@ def main(): "mooring_ctd_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/mooring_hourly_timeseries_delayed_qc.py b/aodn_cloud_optimised/bin/mooring_hourly_timeseries_delayed_qc.py index 939a5e1..a0312b0 100755 --- a/aodn_cloud_optimised/bin/mooring_hourly_timeseries_delayed_qc.py +++ b/aodn_cloud_optimised/bin/mooring_hourly_timeseries_delayed_qc.py @@ -18,7 +18,7 @@ def main(): "mooring_hourly_timeseries_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/mooring_satellite_altimetry_calibration_validation.py b/aodn_cloud_optimised/bin/mooring_satellite_altimetry_calibration_validation.py index 792e8a9..0183381 100755 --- a/aodn_cloud_optimised/bin/mooring_satellite_altimetry_calibration_validation.py +++ b/aodn_cloud_optimised/bin/mooring_satellite_altimetry_calibration_validation.py @@ -14,7 +14,7 @@ def main(): "mooring_satellite_altimetry_calibration_validation.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/mooring_temperature_logger_delayed_qc.py b/aodn_cloud_optimised/bin/mooring_temperature_logger_delayed_qc.py index 9684047..5b8a506 100755 --- a/aodn_cloud_optimised/bin/mooring_temperature_logger_delayed_qc.py +++ b/aodn_cloud_optimised/bin/mooring_temperature_logger_delayed_qc.py @@ -18,7 +18,7 @@ def main(): "mooring_temperature_logger_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..87a40cb --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/BONC/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..486f626 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/CBG/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_wave_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_wave_delayed_qc.py new file mode 100755 index 0000000..7b6aa70 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_wave_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wave-site-map_QC/CBG/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CapricornBunkerGroup_wave_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_wind_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_wind_delayed_qc.py new file mode 100755 index 0000000..15fc479 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CapricornBunkerGroup_wind_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wind-map_QC/CBG/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CapricornBunkerGroup_wind_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..0de11c7 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/COF/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CoffsHarbour_wave_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CoffsHarbour_wave_delayed_qc.py new file mode 100755 index 0000000..856b045 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CoffsHarbour_wave_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wave-site-map_QC/COF/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CoffsHarbour_wave_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CoffsHarbour_wind_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CoffsHarbour_wind_delayed_qc.py new file mode 100755 index 0000000..17cb98a --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CoffsHarbour_wind_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wind-map_QC/COF/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CoffsHarbour_wind_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..3bd64f6 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/CORL/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_CoralCoast_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_Newcastle_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_Newcastle_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..141ea8b --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_Newcastle_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/NEWC/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_Newcastle_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..9a3cee0 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/NWA/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..c2ad3f6 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/ROT/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_RottnestShelf_wave_delayed_qc.py b/aodn_cloud_optimised/bin/radar_RottnestShelf_wave_delayed_qc.py new file mode 100755 index 0000000..61a312d --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_RottnestShelf_wave_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wave-site-map_QC/ROT/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_RottnestShelf_wave_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_RottnestShelf_wind_delayed_qc.py b/aodn_cloud_optimised/bin/radar_RottnestShelf_wind_delayed_qc.py new file mode 100755 index 0000000..a5ed108 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_RottnestShelf_wind_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wind-map_QC/ROT/2010/04/01", + "--filters", + "20100401T0", + # "FILTER_STRING_1", + "--dataset-config", + "radar_RottnestShelf_wind_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "ec2", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.py b/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.py new file mode 100755 index 0000000..f795965 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/SAG/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_wave_delayed_qc.py b/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_wave_delayed_qc.py new file mode 100755 index 0000000..d743be3 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_wave_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wave-site-map_QC/SAG/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_SouthAustraliaGulfs_wave_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_wind_delayed_qc.py b/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_wind_delayed_qc.py new file mode 100755 index 0000000..1746164 --- /dev/null +++ b/aodn_cloud_optimised/bin/radar_SouthAustraliaGulfs_wind_delayed_qc.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/ACORN/gridded_1h-avg-wind-map_QC/SAG/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "radar_SouthAustraliaGulfs_wind_delayed_qc.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.py b/aodn_cloud_optimised/bin/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.py index 70f4bc1..a997af1 100755 --- a/aodn_cloud_optimised/bin/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.py +++ b/aodn_cloud_optimised/bin/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.py @@ -6,12 +6,12 @@ def main(): command = [ "generic_cloud_optimised_creation", "--paths", - "IMOS/ACORN/gridded_1h-avg-current-map_QC/TURQ/2020", + "IMOS/ACORN/gridded_1h-avg-current-map_QC/TURQ/", "--dataset-config", "radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/receiver_animal_acoustic_tagging_delayed_qc.py b/aodn_cloud_optimised/bin/receiver_animal_acoustic_tagging_delayed_qc.py index ef0baf6..2541c15 100755 --- a/aodn_cloud_optimised/bin/receiver_animal_acoustic_tagging_delayed_qc.py +++ b/aodn_cloud_optimised/bin/receiver_animal_acoustic_tagging_delayed_qc.py @@ -13,7 +13,7 @@ def main(): "receiver_animal_acoustic_tagging_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_chlorophylla_carder_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_chlorophylla_carder_1day_aqua.py new file mode 100755 index 0000000..4c5acab --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_chlorophylla_carder_1day_aqua.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/2002/07", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "satellite_chlorophylla_carder_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_chlorophylla_gsm_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_chlorophylla_gsm_1day_aqua.py new file mode 100755 index 0000000..854c9f9 --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_chlorophylla_gsm_1day_aqua.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.chl_gsm.nc", + "--dataset-config", + "satellite_chlorophylla_gsm_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_chlorophylla_oc3_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_chlorophylla_oc3_1day_aqua.py new file mode 100755 index 0000000..f354dfb --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_chlorophylla_oc3_1day_aqua.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/2012", + "IMOS/SRS/OC/gridded/aqua/P1D/2013", + "IMOS/SRS/OC/gridded/aqua/P1D/2014", + "IMOS/SRS/OC/gridded/aqua/P1D/2015", + "IMOS/SRS/OC/gridded/aqua/P1D/2016", + "IMOS/SRS/OC/gridded/aqua/P1D/2017", + "IMOS/SRS/OC/gridded/aqua/P1D/2018", + "IMOS/SRS/OC/gridded/aqua/P1D/2019", + "IMOS/SRS/OC/gridded/aqua/P1D/2020", + "IMOS/SRS/OC/gridded/aqua/P1D/2021", + "IMOS/SRS/OC/gridded/aqua/P1D/2022", + "IMOS/SRS/OC/gridded/aqua/P1D/2023", + "IMOS/SRS/OC/gridded/aqua/P1D/2024", + "--filters", + "aust.chl_oc3.nc", + "--dataset-config", + "satellite_chlorophylla_oc3_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "local", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_chlorophylla_oci_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_chlorophylla_oci_1day_aqua.py new file mode 100755 index 0000000..d46327f --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_chlorophylla_oci_1day_aqua.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +import subprocess + + +## issue opening files in batch with h5netcdf. The ds does not have any variables, To investigate + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.chl_oci.nc", + "--dataset-config", + "satellite_chlorophylla_oci_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "local", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_diffuse_attenuation_coefficent_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_diffuse_attenuation_coefficent_1day_aqua.py new file mode 100755 index 0000000..3ce4e65 --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_diffuse_attenuation_coefficent_1day_aqua.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.K_490.nc", + "--dataset-config", + "satellite_diffuse_attenuation_coefficent_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l3c_1day_nighttime_himawari8.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l3c_1day_nighttime_himawari8.py new file mode 100755 index 0000000..92079dd --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l3c_1day_nighttime_himawari8.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/SST/ghrsst/L3C-1d/ngt/h08/", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "satellite_ghrsst_l3c_1day_nighttime_himawari8.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.py index e9076eb..3bc9234 100755 --- a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.py +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.py @@ -19,7 +19,7 @@ def main(): "satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.py index 1ca56c0..a48594b 100755 --- a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.py +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.py @@ -46,7 +46,7 @@ def main(): "satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.py index 182afa2..e7c760b 100755 --- a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.py +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.py @@ -48,7 +48,7 @@ def main(): "satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.py new file mode 100755 index 0000000..11d8adc --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/SST/ghrsst/L3SGM-1d/ngt/2015", + # "--filters", + # "FILTER_STRING_1", + # "FILTER_STRING_1", + "--dataset-config", + "satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_3day_daynighttime_single_sensor_australia.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_3day_daynighttime_single_sensor_australia.py index cb4742a..4986cbe 100755 --- a/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_3day_daynighttime_single_sensor_australia.py +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l3s_3day_daynighttime_single_sensor_australia.py @@ -11,7 +11,7 @@ def main(): "satellite_ghrsst_l3s_3day_daynighttime_single_sensor_australia.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.py index 98fda91..4e51fb0 100755 --- a/aodn_cloud_optimised/bin/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.py +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.py @@ -13,7 +13,7 @@ def main(): "satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.py b/aodn_cloud_optimised/bin/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.py index 22fdd95..26fec50 100755 --- a/aodn_cloud_optimised/bin/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.py +++ b/aodn_cloud_optimised/bin/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.py @@ -33,7 +33,7 @@ def main(): "satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/satellite_nanoplankton_fraction_oc3_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_nanoplankton_fraction_oc3_1day_aqua.py new file mode 100755 index 0000000..f533ea8 --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_nanoplankton_fraction_oc3_1day_aqua.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/2009", + "IMOS/SRS/OC/gridded/aqua/P1D/2010", + "IMOS/SRS/OC/gridded/aqua/P1D/2011", + "IMOS/SRS/OC/gridded/aqua/P1D/2012", + "IMOS/SRS/OC/gridded/aqua/P1D/2013", + "IMOS/SRS/OC/gridded/aqua/P1D/2014", + "IMOS/SRS/OC/gridded/aqua/P1D/2015", + "IMOS/SRS/OC/gridded/aqua/P1D/2016", + "IMOS/SRS/OC/gridded/aqua/P1D/2017", + "IMOS/SRS/OC/gridded/aqua/P1D/2018", + "IMOS/SRS/OC/gridded/aqua/P1D/2019", + "IMOS/SRS/OC/gridded/aqua/P1D/2020", + "IMOS/SRS/OC/gridded/aqua/P1D/2021", + "IMOS/SRS/OC/gridded/aqua/P1D/2022", + "IMOS/SRS/OC/gridded/aqua/P1D/2023", + "IMOS/SRS/OC/gridded/aqua/P1D/2024", + "--filters", + "aust.nanop_brewin2012in.nc", + "--dataset-config", + "satellite_nanoplankton_fraction_oc3_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_net_primary_productivity_gsm_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_net_primary_productivity_gsm_1day_aqua.py new file mode 100755 index 0000000..96eb40b --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_net_primary_productivity_gsm_1day_aqua.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.npp_vgpm_eppley_gsm.nc", + "--dataset-config", + "satellite_net_primary_productivity_gsm_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_net_primary_productivity_oc3_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_net_primary_productivity_oc3_1day_aqua.py new file mode 100755 index 0000000..513c7c4 --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_net_primary_productivity_oc3_1day_aqua.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.npp_vgpm_eppley_oc3.nc", + "--dataset-config", + "satellite_net_primary_productivity_oc3_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_optical_water_type_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_optical_water_type_1day_aqua.py new file mode 100755 index 0000000..772233c --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_optical_water_type_1day_aqua.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.owtd_csiro.nc", + "--dataset-config", + "satellite_optical_water_type_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/satellite_picoplankton_fraction_oc3_1day_aqua.py b/aodn_cloud_optimised/bin/satellite_picoplankton_fraction_oc3_1day_aqua.py new file mode 100755 index 0000000..98cbe8d --- /dev/null +++ b/aodn_cloud_optimised/bin/satellite_picoplankton_fraction_oc3_1day_aqua.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +import subprocess + + +def main(): + command = [ + "generic_cloud_optimised_creation", + "--paths", + "IMOS/SRS/OC/gridded/aqua/P1D/", + "--filters", + "aust.picop_brewin2012in.nc", + "--dataset-config", + "satellite_picoplankton_fraction_oc3_1day_aqua.json", + "--clear-existing-data", + "--cluster-mode", + "coiled", + ] + + # Run the command + subprocess.run(command, check=True) + + +if __name__ == "__main__": + main() diff --git a/aodn_cloud_optimised/bin/slocum_glider_delayed_qc.py b/aodn_cloud_optimised/bin/slocum_glider_delayed_qc.py index 355d127..009b5b2 100755 --- a/aodn_cloud_optimised/bin/slocum_glider_delayed_qc.py +++ b/aodn_cloud_optimised/bin/slocum_glider_delayed_qc.py @@ -11,7 +11,7 @@ def main(): "slocum_glider_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/srs_oc_ljco_to_parquet.py b/aodn_cloud_optimised/bin/srs_oc_ljco_to_parquet.py index 333d533..999aca5 100755 --- a/aodn_cloud_optimised/bin/srs_oc_ljco_to_parquet.py +++ b/aodn_cloud_optimised/bin/srs_oc_ljco_to_parquet.py @@ -11,7 +11,7 @@ def main(): "srs_oc_ljco_wqm_daily.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_air_sea_flux_product_delayed.py b/aodn_cloud_optimised/bin/vessel_air_sea_flux_product_delayed.py index 36ec652..9494ab6 100755 --- a/aodn_cloud_optimised/bin/vessel_air_sea_flux_product_delayed.py +++ b/aodn_cloud_optimised/bin/vessel_air_sea_flux_product_delayed.py @@ -13,7 +13,7 @@ def main(): "vessel_air_sea_flux_product_delayed.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_air_sea_flux_sst_meteo_realtime.py b/aodn_cloud_optimised/bin/vessel_air_sea_flux_sst_meteo_realtime.py index cfcab98..4526fce 100755 --- a/aodn_cloud_optimised/bin/vessel_air_sea_flux_sst_meteo_realtime.py +++ b/aodn_cloud_optimised/bin/vessel_air_sea_flux_sst_meteo_realtime.py @@ -13,7 +13,7 @@ def main(): "vessel_air_sea_flux_sst_meteo_realtime.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_co2_delayed_qc.py b/aodn_cloud_optimised/bin/vessel_co2_delayed_qc.py index 8676eeb..0ee7351 100755 --- a/aodn_cloud_optimised/bin/vessel_co2_delayed_qc.py +++ b/aodn_cloud_optimised/bin/vessel_co2_delayed_qc.py @@ -13,7 +13,7 @@ def main(): "vessel_co2_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_fishsoop_realtime_qc.py b/aodn_cloud_optimised/bin/vessel_fishsoop_realtime_qc.py index f80e5a3..0bf71e0 100755 --- a/aodn_cloud_optimised/bin/vessel_fishsoop_realtime_qc.py +++ b/aodn_cloud_optimised/bin/vessel_fishsoop_realtime_qc.py @@ -11,7 +11,7 @@ def main(): "vessel_fishsoop_realtime_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_sst_delayed_qc.py b/aodn_cloud_optimised/bin/vessel_sst_delayed_qc.py index b3698ca..3a1d437 100644 --- a/aodn_cloud_optimised/bin/vessel_sst_delayed_qc.py +++ b/aodn_cloud_optimised/bin/vessel_sst_delayed_qc.py @@ -11,7 +11,7 @@ def main(): "vessel_sst_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_trv_realtime_qc.py b/aodn_cloud_optimised/bin/vessel_trv_realtime_qc.py index 528f533..5c68d73 100755 --- a/aodn_cloud_optimised/bin/vessel_trv_realtime_qc.py +++ b/aodn_cloud_optimised/bin/vessel_trv_realtime_qc.py @@ -14,7 +14,7 @@ def main(): "vessel_trv_realtime_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_xbt_delayed_qc.py b/aodn_cloud_optimised/bin/vessel_xbt_delayed_qc.py index c844de7..16aeca8 100755 --- a/aodn_cloud_optimised/bin/vessel_xbt_delayed_qc.py +++ b/aodn_cloud_optimised/bin/vessel_xbt_delayed_qc.py @@ -11,7 +11,7 @@ def main(): "vessel_xbt_delayed_qc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/vessel_xbt_realtime_nonqc.py b/aodn_cloud_optimised/bin/vessel_xbt_realtime_nonqc.py index 954aa0d..c615240 100755 --- a/aodn_cloud_optimised/bin/vessel_xbt_realtime_nonqc.py +++ b/aodn_cloud_optimised/bin/vessel_xbt_realtime_nonqc.py @@ -11,7 +11,7 @@ def main(): "vessel_xbt_realtime_nonqc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/bin/wave_buoy_realtime_nonqc.py b/aodn_cloud_optimised/bin/wave_buoy_realtime_nonqc.py index e12cca6..0f797f2 100755 --- a/aodn_cloud_optimised/bin/wave_buoy_realtime_nonqc.py +++ b/aodn_cloud_optimised/bin/wave_buoy_realtime_nonqc.py @@ -13,7 +13,7 @@ def main(): "wave_buoy_realtime_nonqc.json", "--clear-existing-data", "--cluster-mode", - "remote", + "coiled", ] # Run the command diff --git a/aodn_cloud_optimised/config/dataset/argo.json b/aodn_cloud_optimised/config/dataset/argo.json index b5dbea7..5b6dac6 100644 --- a/aodn_cloud_optimised/config/dataset/argo.json +++ b/aodn_cloud_optimised/config/dataset/argo.json @@ -3,7 +3,7 @@ "logger_name": "argo", "handler_class": "ArgoHandler", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 2, 80 diff --git a/aodn_cloud_optimised/config/dataset/autonomous_underwater_vehicle.json b/aodn_cloud_optimised/config/dataset/autonomous_underwater_vehicle.json index 1ac6905..d387785 100644 --- a/aodn_cloud_optimised/config/dataset/autonomous_underwater_vehicle.json +++ b/aodn_cloud_optimised/config/dataset/autonomous_underwater_vehicle.json @@ -2,7 +2,7 @@ "dataset_name": "autonomous_underwater_vehicle", "logger_name": "autonomous_underwater_vehicle", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/dataset_template.json b/aodn_cloud_optimised/config/dataset/dataset_template.json index 5af6287..c2739d2 100644 --- a/aodn_cloud_optimised/config/dataset/dataset_template.json +++ b/aodn_cloud_optimised/config/dataset/dataset_template.json @@ -4,7 +4,7 @@ "cloud_optimised_format": "parquet", - "cluster_options" : { + "coiled_cluster_options" : { "n_workers": [8, 20], "scheduler_vm_types": "t3.small", "worker_vm_types": "t3.large", diff --git a/aodn_cloud_optimised/config/dataset/model_sea_level_anomaly_gridded_realtime.json b/aodn_cloud_optimised/config/dataset/model_sea_level_anomaly_gridded_realtime.json index b7f7a98..4591c69 100644 --- a/aodn_cloud_optimised/config/dataset/model_sea_level_anomaly_gridded_realtime.json +++ b/aodn_cloud_optimised/config/dataset/model_sea_level_anomaly_gridded_realtime.json @@ -2,7 +2,7 @@ "dataset_name": "model_sea_level_anomaly_gridded_realtime", "logger_name": "model_sea_level_anomaly_gridded_realtime", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 30 diff --git a/aodn_cloud_optimised/config/dataset/mooring_ctd_delayed_qc.json b/aodn_cloud_optimised/config/dataset/mooring_ctd_delayed_qc.json index 1d90288..fb26789 100644 --- a/aodn_cloud_optimised/config/dataset/mooring_ctd_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/mooring_ctd_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "mooring_ctd_delayed_qc", "logger_name": "mooring_ctd_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/mooring_hourly_timeseries_delayed_qc.json b/aodn_cloud_optimised/config/dataset/mooring_hourly_timeseries_delayed_qc.json index fcd6433..767f139 100644 --- a/aodn_cloud_optimised/config/dataset/mooring_hourly_timeseries_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/mooring_hourly_timeseries_delayed_qc.json @@ -3,7 +3,7 @@ "logger_name": "mooring_hourly_timeseries_delayed_qc", "handler_class": "AnmnHourlyTsHandler", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/mooring_satellite_altimetry_calibration_validation.json b/aodn_cloud_optimised/config/dataset/mooring_satellite_altimetry_calibration_validation.json index 5b8dd02..70dcc18 100644 --- a/aodn_cloud_optimised/config/dataset/mooring_satellite_altimetry_calibration_validation.json +++ b/aodn_cloud_optimised/config/dataset/mooring_satellite_altimetry_calibration_validation.json @@ -2,7 +2,7 @@ "dataset_name": "mooring_satellite_altimetry_calibration_validation", "logger_name": "mooring_satellite_altimetry_calibration_validation", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/mooring_temperature_logger_delayed_qc.json b/aodn_cloud_optimised/config/dataset/mooring_temperature_logger_delayed_qc.json index 3abab23..0d2962a 100644 --- a/aodn_cloud_optimised/config/dataset/mooring_temperature_logger_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/mooring_temperature_logger_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "mooring_temperature_logger_delayed_qc", "logger_name": "mooring_temperature_logger_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..93d4bf0 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_BonneyCoast_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_BonneyCoast_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_main.json", + "metadata_uuid": "38dd003d-2f71-4715-bd3f-4b1cfdce391d", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "J", + "chunk": 69 + }, + "longitude": { + "name": "I", + "chunk": 69 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Bonney coast site - Sea water velocity - Delayed mode", + "Description": "The Bonney Coast (BONC) HF ocean radar system covers an area of the Bonney Coast, South Australia, which has a recurring annual upwelling feature near to the coast that significantly changes the ecosystem from one of warm water originating in Western Australia, to one dominated by cold upwelling water from off the continental shelf. The dynamics of this area and the relationship between ocean circulation, chemistry and sediments control the larval species and the higher marine species and ecosystems in which they forage. \n\nThe data from this site provide linking observations between the Southern Ocean and NSW through processes that occur on weekly to El Nino time scales. \n\nThe BONC HF ocean radar system consists of two SeaSonde crossed loop direction finding stations located at Nora Creina (37.329 S 139.850 E) and Blackfellows Cave (37.940 S 140.457 E). These radars operate at a frequency of 5.211 MHz, with a bandwidth of 50 KHz, a maximum range of 200 Km and a range resolution of 3 Km. Within the HF radar coverage area surface currents are measured.\n\nThis site was decommissioned in March 2017.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/38dd003d-2f71-4715-bd3f-4b1cfdce391d", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Bonney Coast HF ocean radar site (South Australia, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Bonney Coast HF ocean radar site (South Australia, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..eb6169f --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "8a2d2824-0557-4110-a561-01ec35a9583d", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": true + }, + "latitude": { + "name": "LATITUDE", + "chunk": 64 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 72 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Capricorn Bunker Group site ((Great Barrier Reef, Queensland, Australia) - Sea water velocity - Delayed mode", + "Description": "The Capricorn Bunker Group site is in the southern region of the Great Barrier Reef Marine Park World Heritage Area (GBR). The HF ocean radar coverage is from the coast to beyond the edge of the continental shelf. This is an area where the East Australian Current (EAC) meanders as it moves south from the Swain Reefs and loses touch with the western land boundary. The area is dynamic with warm EAC water recirculating and being wind-driven northwards along the coast inside the GBR lagoon. The recirculating warm water contrasts with the upwelling tendency of the parts of the EAC which continue to move southwards. The CBG radar is ideally placed to follow filaments of different water types and to investigate their impacts on coral reefs and fisheries. \n\nApplications of the CBG radar data are in the frequency and location of regional upwelling that fuels productivity, and in the connectivity between reefs and islands. At the central point of the CBG area of coverage is the Heron Island Research Station which hosts many coral reef and ecology research programs. The data will also be useful for validation of the operational Bluelink model, and the embedded higher resolution Whole-of-Reef model. \n\nThe CBG HF ocean radar is a WERA phased array system with 12-element receive arrays located at Tannum Sands (-23.942 S, 151.371 E) and Lady Elliot Island (-24.111 S, 152.713 E). These radars operate at a frequency of 8.348 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km and a range resolution of 4.5 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe capital funding for this system was provided originally as an ARC LEIF Grant, assisted by contributions from James Cook University, The University of Queensland, the National Oceanic and Atmospheric Administration and the Australian Institute of Marine Science.\n\nThis site was decommissioned in April 2017.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/8a2d2824-0557-4110-a561-01ec35a9583d", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_wave_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_wave_delayed_qc.json new file mode 100644 index 0000000..006ec19 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_wave_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_CapricornBunkerGroup_wave_delayed_qc", + "logger_name": "radar_CapricornBunkerGroup_wave_delayed_qc", + "parent_config": "radar_wave_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "400a1237-af4d-45c6-a292-788cf0212522", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 64 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 72 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wave", + "Description": "The Capricorn Bunker Group site is in the southern region of the Great Barrier Reef Marine Park World Heritage Area (GBR). The HF ocean radar coverage is from the coast to beyond the edge of the continental shelf. This is an area where the East Australian Current (EAC) meanders as it moves south from the Swain Reefs and loses touch with the western land boundary. The area is dynamic with warm EAC water recirculating and being wind-driven northwards along the coast inside the GBR lagoon. The recirculating warm water contrasts with the upwelling tendency of the parts of the EAC which continue to move southwards. The CBG radar is ideally placed to follow filaments of different water types and to investigate their impacts on coral reefs and fisheries. \n\nApplications of the CBG radar data are in the frequency and location of regional upwelling that fuels productivity, and in the connectivity between reefs and islands. At the central point of the CBG area of coverage is the Heron Island Research Station which hosts many coral reef and ecology research programs. The data will also be useful for validation of the operational Bluelink model, and the embedded higher resolution Whole-of-Reef model. \n\nThe CBG HF ocean radar is a WERA phased array system with 12-element receive arrays located at Tannum Sands (-23.942 S, 151.371 E) and Lady Elliot Island (-24.111 S, 152.713 E). These radars operate at a frequency of 8.348 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km and a range resolution of 4.5 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe capital funding for this system was provided originally as an ARC LEIF Grant, assisted by contributions from James Cook University, The University of Queensland, the National Oceanic and Atmospheric Administration and the Australian Institute of Marine Science.\n\nThis site was decommissioned in April 2017.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/400a1237-af4d-45c6-a292-788cf0212522", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wave", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CapricornBunkerGroup_wave_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wave", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_wind_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_wind_delayed_qc.json new file mode 100644 index 0000000..4c37436 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CapricornBunkerGroup_wind_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_CapricornBunkerGroup_wind_delayed_qc", + "logger_name": "radar_CapricornBunkerGroup_wind_delayed_qc", + "parent_config": "radar_wind_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "742dc902-b300-4e3e-839f-04d03671aa09", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 64 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 72 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wind", + "Description": "The Capricorn Bunker Group site is in the southern region of the Great Barrier Reef Marine Park World Heritage Area (GBR). The HF ocean radar coverage is from the coast to beyond the edge of the continental shelf. This is an area where the East Australian Current (EAC) meanders as it moves south from the Swain Reefs and loses touch with the western land boundary. The area is dynamic with warm EAC water recirculating and being wind-driven northwards along the coast inside the GBR lagoon. The recirculating warm water contrasts with the upwelling tendency of the parts of the EAC which continue to move southwards. The CBG radar is ideally placed to follow filaments of different water types and to investigate their impacts on coral reefs and fisheries. \n\nApplications of the CBG radar data are in the frequency and location of regional upwelling that fuels productivity, and in the connectivity between reefs and islands. At the central point of the CBG area of coverage is the Heron Island Research Station which hosts many coral reef and ecology research programs. The data will also be useful for validation of the operational Bluelink model, and the embedded higher resolution Whole-of-Reef model. \n\nThe CBG HF ocean radar is a WERA phased array system with 12-element receive arrays located at Tannum Sands (-23.942 S, 151.371 E) and Lady Elliot Island (-24.111 S, 152.713 E). These radars operate at a frequency of 8.348 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km and a range resolution of 4.5 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe capital funding for this system was provided originally as an ARC LEIF Grant, assisted by contributions from James Cook University, The University of Queensland, the National Oceanic and Atmospheric Administration and the Australian Institute of Marine Science.\n\nThis site was decommissioned in April 2017.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/742dc902-b300-4e3e-839f-04d03671aa09", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wind", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CapricornBunkerGroup_wind_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wind", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wind_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wind_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..69a1c04 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "85da1645-2c63-45fa-97b5-4125165b999d", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 167 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 114 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Coffs Harbour site - Sea water velocity - Delayed mode", + "Description": "The Coffs Harbour (COF) HF ocean radar site is located near the point at which the East Australian Current (EAC) begins to separate from the coast. Here the EAC is at its narrowest and swiftest: to the north it is forming from the westwards subtropical jet, and to the south it forms eddies and eventually the warm water moves eastwards across the Tasman Sea, forming a front with the cold water of the Southern Ocean. \n\nThe connection between coastal and continental shelf waters is fundamental to the understanding of the anthropogenic impact on the coastal ocean and the role of the ocean in mitigating urban marine water quality. The oceans off Eastern Australia and in particular in the region of New South Wales have a complex circulation structure, and are strongly connected with other regional seas and currents. \n\nThe East Australia Current (EAC) flows from tropical regions southward along the NSW continental slope, bringing tropical biota southward. These current structures provide strong physical and biological connectivity, allowing substantial transport and dispersion of biota between regions, and influencing the transport and upwelling of nutrients, which are fundamental to biological productivity. \n\nThe COF HF ocean radar is a WERA phased array system with 16-element receive arrays located at Red Rock (-23.942 S, 151.371 E) to the north of Coffs Harbour and North Nambucca (-24.111 S, 152.713 E) to the south. The area of focus is off Coffs Harbour where IMOS and the NSW government have mooring sites. These radars operate at a frequency of 13.920 MHz, with a bandwidth of 100 KHz and a maximum range of 100 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/85da1645-2c63-45fa-97b5-4125165b999d", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_wave_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_wave_delayed_qc.json new file mode 100644 index 0000000..939a9f3 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_wave_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_CoffsHarbour_wave_delayed_qc", + "logger_name": "radar_CoffsHarbour_wave_delayed_qc", + "parent_config": "radar_wave_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "e32e51d9-b0a5-4b95-9906-44e0c6c8d516", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 167 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 114 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode wave", + "Description": "The Coffs Harbour (COF) HF ocean radar site is located near the point at which the East Australian Current (EAC) begins to separate from the coast. Here the EAC is at its narrowest and swiftest: to the north it is forming from the westwards subtropical jet, and to the south it forms eddies and eventually the warm water moves eastwards across the Tasman Sea, forming a front with the cold water of the Southern Ocean. \n\nThe connection between coastal and continental shelf waters is fundamental to the understanding of the anthropogenic impact on the coastal ocean and the role of the ocean in mitigating urban marine water quality. The oceans off Eastern Australia and in particular in the region of New South Wales have a complex circulation structure, and are strongly connected with other regional seas and currents. \n\nThe East Australia Current (EAC) flows from tropical regions southward along the NSW continental slope, bringing tropical biota southward. These current structures provide strong physical and biological connectivity, allowing substantial transport and dispersion of biota between regions, and influencing the transport and upwelling of nutrients, which are fundamental to biological productivity. \n\nThe COF HF ocean radar is a WERA phased array system with 16-element receive arrays located at Red Rock (-23.942 S, 151.371 E) to the north of Coffs Harbour and North Nambucca (-24.111 S, 152.713 E) to the south. The area of focus is off Coffs Harbour where IMOS and the NSW government have mooring sites. These radars operate at a frequency of 13.920 MHz, with a bandwidth of 100 KHz and a maximum range of 100 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/e32e51d9-b0a5-4b95-9906-44e0c6c8d516", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode wave", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CoffsHarbour_wave_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode wave", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_wave_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_wave_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_wind_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_wind_delayed_qc.json new file mode 100644 index 0000000..5e9b24f --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CoffsHarbour_wind_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_CoffsHarbour_wind_delayed_qc", + "logger_name": "radar_CoffsHarbour_wind_delayed_qc", + "parent_config": "radar_wind_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "ffe8f19c-de4a-4362-89be-7605b2dd6b8c", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 167 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 114 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode wind", + "Description": "The Coffs Harbour (COF) HF ocean radar site is located near the point at which the East Australian Current (EAC) begins to separate from the coast. Here the EAC is at its narrowest and swiftest: to the north it is forming from the westwards subtropical jet, and to the south it forms eddies and eventually the warm water moves eastwards across the Tasman Sea, forming a front with the cold water of the Southern Ocean. \n\nThe connection between coastal and continental shelf waters is fundamental to the understanding of the anthropogenic impact on the coastal ocean and the role of the ocean in mitigating urban marine water quality. The oceans off Eastern Australia and in particular in the region of New South Wales have a complex circulation structure, and are strongly connected with other regional seas and currents. \n\nThe East Australia Current (EAC) flows from tropical regions southward along the NSW continental slope, bringing tropical biota southward. These current structures provide strong physical and biological connectivity, allowing substantial transport and dispersion of biota between regions, and influencing the transport and upwelling of nutrients, which are fundamental to biological productivity. \n\nThe COF HF ocean radar is a WERA phased array system with 16-element receive arrays located at Red Rock (-23.942 S, 151.371 E) to the north of Coffs Harbour and North Nambucca (-24.111 S, 152.713 E) to the south. The area of focus is off Coffs Harbour where IMOS and the NSW government have mooring sites. These radars operate at a frequency of 13.920 MHz, with a bandwidth of 100 KHz and a maximum range of 100 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/ffe8f19c-de4a-4362-89be-7605b2dd6b8c", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode wind", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CoffsHarbour_wind_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Coffs Harbour HF ocean radar site (New South Wales, Australia) - Delayed mode wind", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_wind_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_wind_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..a2ff1f2 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_CoralCoast_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_CoralCoast_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_main.json", + "metadata_uuid": "f7b36a1c-0936-4da6-b47f-94ed538b367e", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "J", + "chunk": 65 + }, + "longitude": { + "name": "I", + "chunk": 73 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Coral Coast site - Sea water velocity - Delayed mode", + "Description": "The Coral Coast (CORL) HF ocean radar system covers an area of the Western Australia Coast, Western Australia, an area subject to the variability of the Leeuwin Current (LC) and its coupling with coastal winds, tides, and waves. In this area the LC generates several eddies which control the larval species and the higher marine species and ecosystems in which they forage.\n\nThe CORL HF ocean radar system consists of two SeaSonde crossed loop direction finding stations located at Dongara (29.283 S 114.920E) and Green Head (114.967 E 30.073 S). These radars operate at a frequency of 4.463 MHz, with a bandwidth of 25 KHz, a maximum range of 200 Km and a range resolution of 6 Km. Within the HF radar coverage area surface currents are measured.\n\nThe CORL area of coverage has a small overlap of commonly observed ocean with the Turqoise Coast (TURQ) SeaSonde HF ocean radar system on its southern side, which in turns early overlaps with the Rottnest HF radar node. Together, the CORL, TURQ and ROT systems provide continuous monitoring of the shelf from Fremantle to Geraldton.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/f7b36a1c-0936-4da6-b47f-94ed538b367e", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Coral Coast HF ocean radar site (Western Australia, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Coral Coast HF ocean radar site (Western Australia, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_Newcastle_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_Newcastle_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..5ddc237 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_Newcastle_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_Newcastle_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_Newcastle_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_main.json", + "metadata_uuid": "6dca1f8a-8337-4551-ac4b-a2d35ec6f333", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "J", + "chunk": 69 + }, + "longitude": { + "name": "I", + "chunk": 69 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Newcastle site - Sea water velocity - Delayed mode", + "Description": "The Newcastle (NEWC) HF ocean radar system covers an area of the Central Coast, New South Wales, an area subject to the variability of the East Australian Current (EAC) and its coupling with coastal winds, tides, and waves. In this area the EAC separates from the coast and generates several eddies which control the larval species and the higher marine species and ecosystems in which they forage.\n\nThe NEWC HF ocean radar system consists of two SeaSonde crossed loop direction finding stations located at Sea Rocks (32.441575 S 152.539022 E) and Red Head (33.010245 S 151.727059 E). These radars operate at a frequency of 5.2625 MHz, with a bandwidth of 25 KHz, a maximum range of 200 Km and a range resolution of 6 Km. Within the HF radar coverage area surface currents are measured.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/6dca1f8a-8337-4551-ac4b-a2d35ec6f333", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Newcastle HF ocean radar site (New South Wales, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_Newcastle_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Newcastle HF ocean radar site (New South Wales, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..2c6e817 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "23c27e4f-c982-44e9-9ab7-71094d297549", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 51 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 55 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Northwest Shelf site (Western Australia, Australia) - Sea water velocity - Delayed mode", + "Description": "The Northwest Shelf (NWA) HF ocean radar system covers an area which includes the Ningaloo Peninsula and the Ningaloo Reef to the west. The Ningaloo Reef is one of the longest and most pristine reefs in the world. The reef is rich in marine biodiversity, with shark whales, turtles and fish aggregations, and high primary and secondary productions which are controlled by the physical oceanographic processes. \n\nThe NWA HF ocean radar is a WERA phased array system with 12-element receive arrays located at the Jurabi Turtle Centre (21.8068 S, 114.1015 E) and Point Billie (22.5432 S, 113.690 E). These radars operate at a frequency of 5.2625 MHz, with a bandwidth of 25 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/23c27e4f-c982-44e9-9ab7-71094d297549", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Northwest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Northwest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..d65cfbd --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_RottnestShelf_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_RottnestShelf_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "028b9801-279f-427c-964b-0ffcdf310b59", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 92 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 62 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - Rottnest Shelf site - Sea water velocity - Delayed mode", + "Description": "The Rottnest Shelf (ROT) HF ocean radar system covers an area which includes Rottnest Island and the Perth Canyon to the north-west. The Perth Canyon has the highest marine biodiversity in the region with whale and fish aggregations, and high primary and secondary productions which are controlled by the physical oceanographic processes. \n\nCombined with the dynamics of the Perth Canyon is the dominant Leeuwin Current which produces a wake on the leeward side of Rottnest Island. This is a topographically induced up-welling and associated primary and secondary productivity. The region is influenced by Swan River outflow, submarine groundwater discharges , and waste-water outfalls. \n\nThe ROT HF ocean radar is a WERA phased array system with 16-element receive arrays located at Fremantle (32.031 S, 115.746 E) and Guilderton (31.342 S, 115.489 E). These radars operate at a frequency of 8.512 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe ROT area of coverage has a small overlap of commonly observed ocean with the Turqoise Coast (TURQ) SeaSonde HF ocean radar system on its north side. Together, the ROT and TURQ systems provide continuous monitoring of the shelf from Fremantle to Jurien Bay.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/028b9801-279f-427c-964b-0ffcdf310b59", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_wave_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_wave_delayed_qc.json new file mode 100644 index 0000000..6cab01f --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_wave_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_RottnestShelf_wave_delayed_qc", + "logger_name": "radar_RottnestShelf_wave_delayed_qc", + "parent_config": "radar_wave_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "9c6d6a0c-4983-4cb5-b119-02c11ce6af4e", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 92 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 62 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode wave", + "Description": "The Rottnest Shelf (ROT) HF ocean radar system covers an area which includes Rottnest Island and the Perth Canyon to the north-west. The Perth Canyon has the highest marine biodiversity in the region with whale and fish aggregations, and high primary and secondary productions which are controlled by the physical oceanographic processes. \n\nCombined with the dynamics of the Perth Canyon is the dominant Leeuwin Current which produces a wake on the leeward side of Rottnest Island. This is a topographically induced up-welling and associated primary and secondary productivity. The region is influenced by Swan River outflow, submarine groundwater discharges , and waste-water outfalls. \n\nThe ROT HF ocean radar is a WERA phased array system with 16-element receive arrays located at Fremantle (32.031 S, 115.746 E) and Guilderton (31.342 S, 115.489 E). These radars operate at a frequency of 8.512 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe ROT area of coverage has a small overlap of commonly observed ocean with the Turqoise Coast (TURQ) SeaSonde HF ocean radar system on its north side. Together, the ROT and TURQ systems provide continuous monitoring of the shelf from Fremantle to Jurien Bay.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/9c6d6a0c-4983-4cb5-b119-02c11ce6af4e", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode wave", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_RottnestShelf_wave_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode wave", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_wave_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_wave_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_wind_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_wind_delayed_qc.json new file mode 100644 index 0000000..1181d50 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_RottnestShelf_wind_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_RottnestShelf_wind_delayed_qc", + "logger_name": "radar_RottnestShelf_wind_delayed_qc", + "parent_config": "radar_wind_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "5ad9a6da-3f0b-4b2f-8212-48b386e1b98c", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 92 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 62 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode wind", + "Description": "The Rottnest Shelf (ROT) HF ocean radar system covers an area which includes Rottnest Island and the Perth Canyon to the north-west. The Perth Canyon has the highest marine biodiversity in the region with whale and fish aggregations, and high primary and secondary productions which are controlled by the physical oceanographic processes. \n\nCombined with the dynamics of the Perth Canyon is the dominant Leeuwin Current which produces a wake on the leeward side of Rottnest Island. This is a topographically induced up-welling and associated primary and secondary productivity. The region is influenced by Swan River outflow, submarine groundwater discharges , and waste-water outfalls. \n\nThe ROT HF ocean radar is a WERA phased array system with 16-element receive arrays located at Fremantle (32.031 S, 115.746 E) and Guilderton (31.342 S, 115.489 E). These radars operate at a frequency of 8.512 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe ROT area of coverage has a small overlap of commonly observed ocean with the Turqoise Coast (TURQ) SeaSonde HF ocean radar system on its north side. Together, the ROT and TURQ systems provide continuous monitoring of the shelf from Fremantle to Jurien Bay.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/5ad9a6da-3f0b-4b2f-8212-48b386e1b98c", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode wind", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_RottnestShelf_wind_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Rottnest Shelf HF ocean radar site (Western Australia, Australia) - Delayed mode wind", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_wind_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_wind_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.json new file mode 100644 index 0000000..18b62a5 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.json @@ -0,0 +1,65 @@ +{ + "dataset_name": "radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc", + "logger_name": "radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc", + "parent_config": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "cb2e22b5-ebb9-460b-8cff-b446fe14ea2f", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 74 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 102 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "Ocean Radar - South Australia Gulfs site (South Australia, Australia) - Sea water velocity - Delayed mode", + "Description": "The South Australia Gulfs (SAG) HF ocean radar system covers the area of about 40,000 square kilometres bounded by Kangaroo Island to the east and the Eyre Peninsula to the north. This is a dynamic region where warm water from the remnants of the Leeuwin current is moving from the west, and water with varying density is exchanging with Spencer Gulf and the Gulf of St Vincent. Upwelling events occur from the deep ocean on the south side of the observation area. This is a key ocean area for aquaculture and fishing, and is a major shipping thoroughfare. The data from this HF ocean radar system link the dynamics of the Great Australian Bight to the Bonney Coast and on to Tasmania. \n\nSpecific research questions identified by the SA Node of IMOS are: What is the detailed connection between shelf currents and the Flinders Current to non-regional influences (e.g. Southern Ocean, WA)? What is the nature of oceanic currents and processes (e.g. wave drift, mixing, eddies) that drive both winter and summer cross and along shelf exchange including the summertime upwelling systems and flushing of the gulfs? How does the ocean circulation, wave drift, eddies and environmental variability affect the distribution of sediments, nutrients, the production of lower trophic levels\n(phytoplankton and zooplankton), the dispersal of larvae that underpin productive fisheries in the region and the effects of environment on aquaculture\n\nThe SAG HF ocean radar is a WERA phased array system with 16-element receive arrays located at Cape Wiles (34.943 S, 135.681 E) and Cape Spencer (35.294 S, 136.879 E). These radars operate at a frequency of 8.512 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nMost of the capital was contributed by the South Australia Research and Development Institute.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/cb2e22b5-ebb9-460b-8cff-b446fe14ea2f", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "ocean currents", + "ocean velocity" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode sea water velocity", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode sea water velocity", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_wave_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_wave_delayed_qc.json new file mode 100644 index 0000000..7e7ff14 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_wave_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_SouthAustraliaGulfs_wave_delayed_qc", + "logger_name": "radar_SouthAustraliaGulfs_wave_delayed_qc", + "parent_config": "radar_wave_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "19da2ce7-138f-4427-89de-a50c724f5f54", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 74 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 102 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode wave", + "Description": "The South Australia Gulfs (SAG) HF ocean radar system covers the area of about 40,000 square kilometres bounded by Kangaroo Island to the east and the Eyre Peninsula to the north. This is a dynamic region where warm water from the remnants of the Leeuwin current is moving from the west, and water with varying density is exchanging with Spencer Gulf and the Gulf of St Vincent. Upwelling events occur from the deep ocean on the south side of the observation area. This is a key ocean area for aquaculture and fishing, and is a major shipping thoroughfare. The data from this HF ocean radar system link the dynamics of the Great Australian Bight to the Bonney Coast and on to Tasmania. \n\nSpecific research questions identified by the SA Node of IMOS are: What is the detailed connection between shelf currents and the Flinders Current to non-regional influences (e.g. Southern Ocean, WA)? What is the nature of oceanic currents and processes (e.g. wave drift, mixing, eddies) that drive both winter and summer cross and along shelf exchange including the summertime upwelling systems and flushing of the gulfs? How does the ocean circulation, wave drift, eddies and environmental variability affect the distribution of sediments, nutrients, the production of lower trophic levels\n(phytoplankton and zooplankton), the dispersal of larvae that underpin productive fisheries in the region and the effects of environment on aquaculture\n\nThe SAG HF ocean radar is a WERA phased array system with 16-element receive arrays located at Cape Wiles (34.943 S, 135.681 E) and Cape Spencer (35.294 S, 136.879 E). These radars operate at a frequency of 8.512 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nMost of the capital was contributed by the South Australia Research and Development Institute.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/19da2ce7-138f-4427-89de-a50c724f5f54", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode wave", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_SouthAustraliaGulfs_wave_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode wave", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_wind_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_wind_delayed_qc.json new file mode 100644 index 0000000..a08d553 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_SouthAustraliaGulfs_wind_delayed_qc.json @@ -0,0 +1,63 @@ +{ + "dataset_name": "radar_SouthAustraliaGulfs_wind_delayed_qc", + "logger_name": "radar_SouthAustraliaGulfs_wind_delayed_qc", + "parent_config": "radar_wind_delayed_qc_no_I_J_version_main.json", + "metadata_uuid": "db049981-3d4e-4cb2-9c4b-e697650845b9", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "LATITUDE", + "chunk": 74 + }, + "longitude": { + "name": "LONGITUDE", + "chunk": 102 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode wind", + "Description": "The South Australia Gulfs (SAG) HF ocean radar system covers the area of about 40,000 square kilometres bounded by Kangaroo Island to the east and the Eyre Peninsula to the north. This is a dynamic region where warm water from the remnants of the Leeuwin current is moving from the west, and water with varying density is exchanging with Spencer Gulf and the Gulf of St Vincent. Upwelling events occur from the deep ocean on the south side of the observation area. This is a key ocean area for aquaculture and fishing, and is a major shipping thoroughfare. The data from this HF ocean radar system link the dynamics of the Great Australian Bight to the Bonney Coast and on to Tasmania. \n\nSpecific research questions identified by the SA Node of IMOS are: What is the detailed connection between shelf currents and the Flinders Current to non-regional influences (e.g. Southern Ocean, WA)? What is the nature of oceanic currents and processes (e.g. wave drift, mixing, eddies) that drive both winter and summer cross and along shelf exchange including the summertime upwelling systems and flushing of the gulfs? How does the ocean circulation, wave drift, eddies and environmental variability affect the distribution of sediments, nutrients, the production of lower trophic levels\n(phytoplankton and zooplankton), the dispersal of larvae that underpin productive fisheries in the region and the effects of environment on aquaculture\n\nThe SAG HF ocean radar is a WERA phased array system with 16-element receive arrays located at Cape Wiles (34.943 S, 135.681 E) and Cape Spencer (35.294 S, 136.879 E). These radars operate at a frequency of 8.512 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nMost of the capital was contributed by the South Australia Research and Development Institute.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/db049981-3d4e-4cb2-9c4b-e697650845b9", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode wind", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_SouthAustraliaGulfs_wind_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - South Australia Gulfs HF ocean radar site (South Australia, Australia) - Delayed mode wind", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json b/aodn_cloud_optimised/config/dataset/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json index 3912e7e..7ea67ca 100644 --- a/aodn_cloud_optimised/config/dataset/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.json @@ -3,8 +3,26 @@ "logger_name": "radar_TurquoiseCoast_velocity_hourly_average_delayed_qc", "parent_config": "radar_velocity_hourly_average_delayed_qc_main.json", "metadata_uuid": "055342fc-f970-4be7-a764-8903220d42fb", + "dimensions": { + "time": { + "name": "TIME", + "chunk": 1500, + "rechunk": false + }, + "latitude": { + "name": "J", + "chunk": 60 + }, + "longitude": { + "name": "I", + "chunk": 59 + } + }, + "dataset_gattrs": { + "title": "" + }, "aws_opendata_registry": { - "Name": "Ocean Radar - Turquoise coast site -Sea water velocity - Delayed mode", + "Name": "Ocean Radar - Turquoise coast site - Sea water velocity - Delayed mode", "Description": "The Turquoise Coast (TURQ) HF ocean radar system covers the area of shelf between Seabird and Jurien Bay and is the logical continuation of major research efforts to understand the role of the Leeuwin Current System (Leeuwin Current, the Leeuwin Undercurrent and Capes Current) in controlling not only the physical system but also its links to both pelagic and benthic ecosystems. In contrast to eastern ocean basins, which are highly productive, Western Australia experiences an oligotrophic environment. The Leeuwin Current is a shallow (<300 m deep), narrow band (< 100 km wide) of warm, lower salinity, nutrient depleted water of tropical origin that flows poleward from Exmouth to Cape Leeuwin and into the Great Australian Bight. The Current plays a dominant role in controlling the marine life and climate of the region. \n\nQuestions which may be addressed by using the HF ocean radar data from TURQ (and ROT) include the variability of the Leeuwin current and its response to the ENSO cycle; Leeuwin Current eddies and their interaction with the shelf waters; and the interaction between the Leeuwin Current, the Capes Current and coastal current during the summer. This is an important region for Western Rock lobster recruitment, and the meanders of the warm Leeuwin Current influence the ecology. This is a region with low tidal range and with a coastline subject to strong sea breezes and intense winter storms. Coastally trapped waves may be generated by the winter weather systems and by tropical cyclones in the summer. \n\nThe TURQ HF ocean radar system consists of two SeaSonde crossed loop direction finding stations located at Seabird (31.281 S 115.444 E) and Cervantes (30.506 S 115.060E). From 2012-12-15T11:00:00 the Cervantes station has been replaced by the Green Head station (30.073 S 114.967E) and from 2013-03-19T00:00:00 the Seabird station has been replaced by the Lancelin station (31.027 S 115.328 E). These radars operate at a frequency of 5.211 MHz, with a bandwidth of 50 KHz, a maximum range of 200 Km\nand a range resolution of 3 Km. Within the HF radar coverage area surface currents are measured.\n\nThe TURQ area of coverage has a small overlap of commonly observed ocean with the Rottnest Shelf (ROT) WERA HF ocean radar system on its south side. Together, the TURQ and ROT systems provide continuous monitoring of the shelf from Fremantle to Jurien Bay.", "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/055342fc-f970-4be7-a764-8903220d42fb", "Contact": "info@aodn.org.au", diff --git a/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_main.json b/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_main.json index 50e27e3..b16cfb5 100644 --- a/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_main.json +++ b/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_main.json @@ -2,7 +2,7 @@ "dataset_name": "radar_velocity_hourly_average_delayed_qc_main", "logger_name": "radar_velocity_hourly_average_delayed_qc_main", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 2, 20 @@ -16,23 +16,7 @@ "memory_limit": "16GB" } }, - "batch_size": 1000, - "metadata_uuid": "", - "dimensions": { - "time": { - "name": "TIME", - "chunk": 1500, - "rechunk": true - }, - "latitude": { - "name": "J", - "chunk": 60 - }, - "longitude": { - "name": "I", - "chunk": 59 - } - }, + "batch_size": 1500, "var_template_shape": "UCUR", "vars_to_drop_no_common_dimension": [ "I", @@ -43,7 +27,24 @@ ], "schema": { "TIME": { - "type": "datetime64[ns]" + "type": "timestamp[ns]", + "standard_name": "time", + "long_name": "time", + "axis": "T", + "valid_min": 0.0, + "valid_max": 999999.0, + "comment": "Given time lays at the middle of the averaging time period.", + "local_time_zone": 8.0 + }, + "LATITUDE": { + "type": "double", + "standard_name": "latitude", + "long_name": "latitude", + "units": "degrees_north", + "axis": "Y", + "valid_min": -90.0, + "valid_max": 90.0, + "reference_datum": "geographical coordinates, WGS84 datum" }, "I": { "type": "int32" @@ -51,41 +52,120 @@ "J": { "type": "int32" }, - "LATITUDE": { - "type": "float64" - }, "LONGITUDE": { - "type": "float64" + "type": "double", + "standard_name": "longitude", + "long_name": "longitude", + "units": "degrees_east", + "axis": "X", + "valid_min": -180.0, + "valid_max": 180.0, + "reference_datum": "geographical coordinates, WGS84 datum" }, "GDOP": { - "type": "float32" + "type": "float", + "long_name": "radar beam intersection angle", + "units": "Degrees", + "valid_min": 0.0, + "valid_max": 180.0, + "comment": "This angle is used to assess the impact of Geometric Dilution of Precision. If angle >= 150 or <= 30, then QC flag will not be lower than 4 (see abstract)." }, "UCUR": { - "type": "float32" + "type": "float", + "standard_name": "eastward_sea_water_velocity", + "long_name": "Mean of sea water velocity U component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: mean", + "ancillary_variables": "UCUR_quality_control" }, "VCUR": { - "type": "float32" + "type": "float", + "standard_name": "northward_sea_water_velocity", + "long_name": "Mean of sea water velocity V component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: mean", + "ancillary_variables": "VCUR_quality_control" }, "UCUR_sd": { - "type": "float32" + "type": "float", + "long_name": "Standard deviation of sea water velocity U component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: standard_deviation", + "ancillary_variables": "UCUR_quality_control" }, "VCUR_sd": { - "type": "float32" + "type": "float", + "long_name": "Standard deviation of sea water velocity V component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: standard_deviation", + "ancillary_variables": "VCUR_quality_control" }, "NOBS1": { - "type": "float32" + "type": "float", + "long_name": "Number of observations of sea water velocity in 1 hour from station 1, after rejection of obvious bad data (see abstract).", + "units": "1" }, "NOBS2": { - "type": "float32" + "type": "float", + "long_name": "Number of observations of sea water velocity in 1 hour from station 2, after rejection of obvious bad data (see abstract).", + "units": "1" }, "UCUR_quality_control": { - "type": "float32" + "type": "float", + "standard_name": "eastward_sea_water_velocity status_flag", + "long_name": "quality flag for eastward_sea_water_velocity", + "quality_control_conventions": "IMOS standard flags", + "quality_control_set": 1.0, + "valid_min": 0, + "valid_max": 9, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data bad_data_that_are_potentially_correctable bad_data value_changed not_used not_used interpolated_values missing_values", + "comment": "This value is set on the basis of the offline quality controls applied in the time domain (see abstract)." }, "VCUR_quality_control": { - "type": "float32" + "type": "float", + "standard_name": "northward_sea_water_velocity status_flag", + "long_name": "quality flag for northward_sea_water_velocity", + "quality_control_conventions": "IMOS standard flags", + "quality_control_set": 1.0, + "valid_min": 0, + "valid_max": 9, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data bad_data_that_are_potentially_correctable bad_data value_changed not_used not_used interpolated_values missing_values", + "comment": "This value is set on the basis of the offline quality controls applied in the time domain (see abstract)." } }, "dataset_gattrs": { - "title": "Temperature logger" + "title": "" } } diff --git a/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json b/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json new file mode 100644 index 0000000..b2ca4cf --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_velocity_hourly_average_delayed_qc_no_I_J_version_main.json @@ -0,0 +1,163 @@ +{ + "dataset_name": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main", + "logger_name": "radar_velocity_hourly_average_delayed_qc_no_I_J_version_main", + "cloud_optimised_format": "zarr", + "coiled_cluster_options": { + "n_workers": [ + 1, + 20 + ], + "scheduler_vm_types": "t3.large", + "worker_vm_types": "t3.large", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": { + "nthreads": 8, + "memory_limit": "16GB" + } + }, + "batch_size": 1500, + "var_template_shape": "UCUR", + "vars_to_drop_no_common_dimension": [ + "LATITUDE", + "LONGITUDE", + "GDOP" + ], + "schema": { + "TIME": { + "type": "timestamp[ns]", + "standard_name": "time", + "long_name": "time", + "axis": "T", + "valid_min": 0.0, + "valid_max": 999999.0, + "comment": "Given time lays at the middle of the averaging time period.", + "local_time_zone": 8.0 + }, + "LATITUDE": { + "type": "double", + "standard_name": "latitude", + "long_name": "latitude", + "units": "degrees_north", + "axis": "Y", + "valid_min": -90.0, + "valid_max": 90.0, + "reference_datum": "geographical coordinates, WGS84 datum" + }, + "LONGITUDE": { + "type": "double", + "standard_name": "longitude", + "long_name": "longitude", + "units": "degrees_east", + "axis": "X", + "valid_min": -180.0, + "valid_max": 180.0, + "reference_datum": "geographical coordinates, WGS84 datum" + }, + "GDOP": { + "type": "float", + "long_name": "radar beam intersection angle", + "units": "Degrees", + "valid_min": 0.0, + "valid_max": 180.0, + "comment": "This angle is used to assess the impact of Geometric Dilution of Precision. If angle >= 150 or <= 30, then QC flag will not be lower than 4 (see abstract)." + }, + "UCUR": { + "type": "float", + "standard_name": "eastward_sea_water_velocity", + "long_name": "Mean of sea water velocity U component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: mean", + "ancillary_variables": "UCUR_quality_control" + }, + "VCUR": { + "type": "float", + "standard_name": "northward_sea_water_velocity", + "long_name": "Mean of sea water velocity V component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: mean", + "ancillary_variables": "VCUR_quality_control" + }, + "UCUR_sd": { + "type": "float", + "long_name": "Standard deviation of sea water velocity U component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: standard_deviation", + "ancillary_variables": "UCUR_quality_control" + }, + "VCUR_sd": { + "type": "float", + "long_name": "Standard deviation of sea water velocity V component values in 1 hour, after rejection of obvious bad data (see abstract).", + "units": "m s-1", + "valid_min": -10.0, + "valid_max": 10.0, + "cell_methods": "TIME: standard_deviation", + "ancillary_variables": "VCUR_quality_control" + }, + "NOBS1": { + "type": "float", + "long_name": "Number of observations of sea water velocity in 1 hour from station 1, after rejection of obvious bad data (see abstract).", + "units": "1" + }, + "NOBS2": { + "type": "float", + "long_name": "Number of observations of sea water velocity in 1 hour from station 2, after rejection of obvious bad data (see abstract).", + "units": "1" + }, + "UCUR_quality_control": { + "type": "float", + "standard_name": "eastward_sea_water_velocity status_flag", + "long_name": "quality flag for eastward_sea_water_velocity", + "quality_control_conventions": "IMOS standard flags", + "quality_control_set": 1.0, + "valid_min": 0, + "valid_max": 9, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data bad_data_that_are_potentially_correctable bad_data value_changed not_used not_used interpolated_values missing_values", + "comment": "This value is set on the basis of the offline quality controls applied in the time domain (see abstract)." + }, + "VCUR_quality_control": { + "type": "float", + "standard_name": "northward_sea_water_velocity status_flag", + "long_name": "quality flag for northward_sea_water_velocity", + "quality_control_conventions": "IMOS standard flags", + "quality_control_set": 1.0, + "valid_min": 0, + "valid_max": 9, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data bad_data_that_are_potentially_correctable bad_data value_changed not_used not_used interpolated_values missing_values", + "comment": "This value is set on the basis of the offline quality controls applied in the time domain (see abstract)." + } + }, + "dataset_gattrs": { + "title": "" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_wave_delayed_qc_no_I_J_version_main.json b/aodn_cloud_optimised/config/dataset/radar_wave_delayed_qc_no_I_J_version_main.json new file mode 100644 index 0000000..33dcf12 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_wave_delayed_qc_no_I_J_version_main.json @@ -0,0 +1,287 @@ +{ + "dataset_name": "radar_wave_delayed_qc_no_I_J_version_main", + "logger_name": "radar_wave_delayed_qc_no_I_J_version_main", + "cloud_optimised_format": "zarr", + "coiled_cluster_options": { + "n_workers": [ + 1, + 20 + ], + "scheduler_vm_types": "t3.small", + "worker_vm_types": "t3.medium", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": { + "nthreads": 4, + "memory_limit": "8GB" + } + }, + "batch_size": 1500, + "var_template_shape": "VDIRT", + "vars_to_drop_no_common_dimension": [], + "schema": { + "TIME": { + "type": "timestamp[ns]", + "standard_name": "time", + "long_name": "time", + "axis": "T", + "valid_min": 0.0, + "valid_max": 999999.0, + "comment": "Given time lies at the middle of the 1 hour averaging period.", + "local_time_zone": 8.0 + }, + "LATITUDE": { + "type": "double", + "standard_name": "latitude", + "long_name": "latitude", + "reference_datum": "geographical coordinates, WGS84 datum", + "units": "degree_north", + "axis": "Y", + "valid_min": -90.0, + "valid_max": 90.0 + }, + "LONGITUDE": { + "type": "double", + "standard_name": "longitude", + "long_name": "longitude", + "reference_datum": "geographical coordinates, WGS84 datum", + "units": "degree_east", + "axis": "X", + "valid_min": -180.0, + "valid_max": 180.0 + }, + "VDIRT": { + "type": "float", + "standard_name": "sea_surface_wave_to_direction", + "long_name": "Direction towards which the wave is propagating", + "units": "degrees clockwise from true north", + "valid_min": 0, + "valid_max": 360, + "ancillary_variables": "VDIRT_quality_control" + }, + "VDIRT_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for Direction towards which the wave is propagating", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "VAVH": { + "type": "float", + "standard_name": "sea_surface_wave_significant_height", + "long_name": "sea_surface_wave_significant_height", + "units": "m", + "valid_min": 0, + "valid_max": 100, + "ancillary_variables": "VAVH_quality_control" + }, + "VAVH_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for sea_surface_wave_significant_height", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "WPPE": { + "type": "float", + "standard_name": "sea_surface_wave_period_at_variance_spectral_density_maximum", + "long_name": "sea_surface_wave_period_at_variance_spectral_density_maximum", + "units": "Second", + "valid_min": 0, + "valid_max": 100, + "ancillary_variables": "WPPE_quality_control" + }, + "WPPE_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for sea_surface_wave_period_at_variance_spectral_density_maximum", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "WPDIT": { + "type": "float", + "long_name": "sea_surface_wave_to_direction_at_variance_spectral_density_maximum", + "units": "Degrees clockwise from true north", + "valid_min": 0, + "valid_max": 360, + "ancillary_variables": "WPDIT_quality_control" + }, + "WPDIT_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for sea_surface_wave_to_direction_at_variance_spectral_density_maximum", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "WPFM": { + "type": "float", + "standard_name": "sea_surface_wave_mean_period_from_variance_spectral_density_first_frequency_moment", + "long_name": "first moment period", + "units": "Second", + "valid_min": 0, + "valid_max": 100, + "ancillary_variables": "WPFM_quality_control" + }, + "WPFM_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for first moment period", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "WPSM": { + "type": "float", + "standard_name": "sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment", + "long_name": "second moment period", + "units": "Second", + "valid_min": 0, + "valid_max": 100, + "ancillary_variables": "WPSM_quality_control" + }, + "WPSM_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for second moment period", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wave", + "Description": "The Capricorn Bunker Group site is in the southern region of the Great Barrier Reef Marine Park World Heritage Area (GBR). The HF ocean radar coverage is from the coast to beyond the edge of the continental shelf. This is an area where the East Australian Current (EAC) meanders as it moves south from the Swain Reefs and loses touch with the western land boundary. The area is dynamic with warm EAC water recirculating and being wind-driven northwards along the coast inside the GBR lagoon. The recirculating warm water contrasts with the upwelling tendency of the parts of the EAC which continue to move southwards. The CBG radar is ideally placed to follow filaments of different water types and to investigate their impacts on coral reefs and fisheries. \n\nApplications of the CBG radar data are in the frequency and location of regional upwelling that fuels productivity, and in the connectivity between reefs and islands. At the central point of the CBG area of coverage is the Heron Island Research Station which hosts many coral reef and ecology research programs. The data will also be useful for validation of the operational Bluelink model, and the embedded higher resolution Whole-of-Reef model. \n\nThe CBG HF ocean radar is a WERA phased array system with 12-element receive arrays located at Tannum Sands (-23.942 S, 151.371 E) and Lady Elliot Island (-24.111 S, 152.713 E). These radars operate at a frequency of 8.348 MHz, with a bandwidth of 33 KHz and a maximum range of 200 Km and a range resolution of 4.5 Km. Within the HF radar coverage area surface currents are measured. Data are also collected from which wind directions and significant wave height can be calculated. \n\nThe capital funding for this system was provided originally as an ARC LEIF Grant, assisted by contributions from James Cook University, The University of Queensland, the National Oceanic and Atmospheric Administration and the Australian Institute of Marine Science.\n\nThis site was decommissioned in April 2017.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/400a1237-af4d-45c6-a292-788cf0212522", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wave", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/radar_CapricornBunkerGroup_wave_delayed_qc.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - ACORN - Capricorn Bunker Group HF ocean radar site (Great Barrier Reef, Queensland, Australia) - Delayed mode wave", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/radar_wind_delayed_qc_no_I_J_version_main.json b/aodn_cloud_optimised/config/dataset/radar_wind_delayed_qc_no_I_J_version_main.json new file mode 100644 index 0000000..76b5d54 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/radar_wind_delayed_qc_no_I_J_version_main.json @@ -0,0 +1,160 @@ +{ + "dataset_name": "radar_wind_delayed_qc_no_I_J_version_main", + "logger_name": "radar_wind_delayed_qc_no_I_J_version_main", + "cloud_optimised_format": "zarr", + "coiled_cluster_options": { + "n_workers": [ + 1, + 20 + ], + "scheduler_vm_types": "t3.small", + "worker_vm_types": "t3.medium", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": { + "nthreads": 4, + "memory_limit": "8GB" + } + }, + "ec2_cluster_options": { + "n_workers": 1, + "scheduler_instance_type": "t3.xlarge", + "worker_instance_type": "t3.2xlarge", + "security": false, + "docker_image": "ghcr.io/aodn/aodn_cloud_optimised:latest" + }, + "ec2_adapt_options": { + "minimum": 1, + "maximum": 120 + }, + "batch_size": 1500, + "var_template_shape": "WDIR", + "vars_to_drop_no_common_dimension": [], + "schema": { + "TIME": { + "type": "timestamp[ns]", + "standard_name": "time", + "long_name": "time", + "axis": "T", + "valid_min": 0.0, + "valid_max": 999999.0, + "comment": "Given time lies at the middle of the 1 hour averaging period.", + "local_time_zone": 8.0 + }, + "LATITUDE": { + "type": "double", + "standard_name": "latitude", + "long_name": "latitude", + "reference_datum": "geographical coordinates, WGS84 datum", + "units": "degree_north", + "axis": "Y", + "valid_min": -90.0, + "valid_max": 90.0 + }, + "LONGITUDE": { + "type": "double", + "standard_name": "longitude", + "long_name": "longitude", + "reference_datum": "geographical coordinates, WGS84 datum", + "units": "degree_east", + "axis": "X", + "valid_min": -180.0, + "valid_max": 180.0 + }, + "WDIR": { + "type": "float", + "standard_name": "wind_to_direction", + "long_name": "Direction towards which the wind is blowing based on short wave direction", + "units": "degrees clockwise from true north", + "valid_min": 0.0, + "valid_max": 360.0, + "ancillary_variables": "WDIR_quality_control" + }, + "WDIR_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for Direction towards which the wind is blowing based on short wave direction", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "WWAV": { + "type": "float", + "standard_name": "sea_surface_wind_wave_to_direction", + "long_name": "Short wave direction towards which the wave is propagating", + "units": "degrees clockwise from true north", + "valid_min": 0.0, + "valid_max": 360.0, + "ancillary_variables": "WWAV_quality_control" + }, + "WWAV_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for short wave direction towards which the wave is propagating", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + }, + "WWDS": { + "type": "float", + "long_name": "Short wave directional spreading using Donelan model", + "units": "degrees", + "valid_min": 0.0, + "valid_max": 90.0, + "ancillary_variables": "WWDS_quality_control" + }, + "WWDS_quality_control": { + "type": "float", + "quality_control_set": 1, + "quality_control_indicator": 1, + "long_name": "quality flag for short wave spread", + "quality_control_conventions": "IMOS standard set using the IODE flags", + "valid_min": 0, + "valid_max": 10, + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "flag_meanings": "no_qc_performed good_data probably_good_data probably_bad_data bad_data value_changed value_below_detection value_in_excess interpolated_value missing_value uncertain_phenomenon" + } + } +} diff --git a/aodn_cloud_optimised/config/dataset/receiver_animal_acoustic_tagging_delayed_qc.json b/aodn_cloud_optimised/config/dataset/receiver_animal_acoustic_tagging_delayed_qc.json index 268662e..6e42077 100644 --- a/aodn_cloud_optimised/config/dataset/receiver_animal_acoustic_tagging_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/receiver_animal_acoustic_tagging_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "receiver_animal_acoustic_tagging_delayed_qc", "logger_name": "receiver_animal_acoustic_tagging_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 4, 20 diff --git a/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_carder_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_carder_1day_aqua.json new file mode 100644 index 0000000..038dd05 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_carder_1day_aqua.json @@ -0,0 +1,83 @@ +{ + "dataset_name": "satellite_chlorophylla_carder_1day_aqua", + "logger_name": "satellite_chlorophylla_carder_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "43ac4663-c8de-4eb0-9711-3da65cbecdd3", + "var_template_shape": "chl_carder", + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "chl_carder": { + "type": "float", + "units": "mg/m^3", + "long_name": "Chlorophyll Concentration, Carder model", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + }, + "flags_carder": { + "type": "float", + "units": "dimensionless", + "long_name": "Product-specific flags, Carder model", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (Carder model)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water.\n\nThere are multiple retrieval algorithms for estimating Chl-a. These data use the Carder method implemented in the SeaDAS processing software l2gen and described in Carder K. L., Chen F. R., Lee Z. P., Hawes S. K. and Cannizzaro J. P. (2003), MODIS Ocean Science Team Algorithm Theoretical Basis Document, ATBD 19, Case 2 Chlorophyll a, Version 7, URL: http://modis.gsfc.nasa.gov/data/atbd/atbd_mod19.pdf (accessed 17 March 2022).", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/43ac4663-c8de-4eb0-9711-3da65cbecdd3", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (Carder model)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_chlorophylla_carder_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (Carder model)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_carder_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_carder_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_gsm_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_gsm_1day_aqua.json new file mode 100644 index 0000000..3109bd7 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_gsm_1day_aqua.json @@ -0,0 +1,77 @@ +{ + "dataset_name": "satellite_chlorophylla_gsm_1day_aqua", + "logger_name": "satellite_chlorophylla_gsm_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "f73daf07-eb81-4995-a72a-ca903834509f", + "var_template_shape": "chl_gsm", + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "chl_gsm": { + "type": "float", + "units": "mg/m^3", + "long_name": "Chlorophyll Concentration, GSM model", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (GSM model)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. \n\nThere are multiple retrieval algorithms for estimating Chl-a. These data use the Garver-Siegel-Maritorena (GSM) method implemented in the SeaDAS processing software l2gen and described in \u201cChapter 11, and references therein, of IOCCG Report 5, 2006, (http://ioccg.org/wp-content/uploads/2015/10/ioccg-report-05.pdf).", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/f73daf07-eb81-4995-a72a-ca903834509f", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (GSM model)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_chlorophylla_gsm_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (GSM model)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_gsm_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_gsm_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_oc3_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_oc3_1day_aqua.json new file mode 100644 index 0000000..87f98e5 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_oc3_1day_aqua.json @@ -0,0 +1,77 @@ +{ + "dataset_name": "satellite_chlorophylla_oc3_1day_aqua", + "logger_name": "satellite_chlorophylla_oc3_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "d7a14921-8f3f-4522-9a54-e7d1df969c8a", + "var_template_shape": "chl_oc3", + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "chl_oc3": { + "type": "float", + "units": "mg/m^3", + "long_name": "Chlorophyll Concentration, OC3 Algorithm", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (OC3 model)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. \n\nThere are multiple retrieval algorithms for estimating Chl-a. These data use the OC3 method recommended by the NASA Ocean Biology Processing Group and implemented in the SeaDAS processing software l2gen. The OC3 algorithm is described at http://oceancolor.gsfc.nasa.gov/cms/atbd/chlor_a (and links therein).", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/d7a14921-8f3f-4522-9a54-e7d1df969c8a", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (OC3 model)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_chlorophylla_oc3_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (OC3 model)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_oc3_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_oc3_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_oci_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_oci_1day_aqua.json new file mode 100644 index 0000000..84d757d --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_chlorophylla_oci_1day_aqua.json @@ -0,0 +1,118 @@ +{ + "dataset_name": "satellite_chlorophylla_oci_1day_aqua", + "logger_name": "satellite_chlorophylla_oci_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "24055e3a-94e5-40bb-b97f-7519f0482d6a", + "var_template_shape": "chl_oci", + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "chl_oci": { + "type": "float", + "units": "mg/m^3", + "long_name": "Chlorophyll Concentration, OCI Algorithm", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + }, + "l2_flags": { + "type": "double", + "long_name": "Level-2 Processing Flags", + "flag_masks": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024, + 2048, + 4096, + 8192, + 16384, + 32768, + 65536, + 131072, + 262144, + 524288, + 1048576, + 2097152, + 4194304, + 8388608, + 16777216, + 33554432, + 67108864, + 134217728, + 268435456, + 536870912, + 1073741824, + -2147483648 + ], + "flag_meanings": "ATMFAIL LAND PRODWARN HIGLINT HILT HISATZEN COASTZ SPARE STRAYLIGHT CLDICE COCCOLITH TURBIDW HISOLZEN SPARE LOWLW CHLFAIL NAVWARN ABSAER SPARE MAXAERITER MODGLINT CHLWARN ATMWARN SPARE SEAICE NAVFAIL FILTER SPARE SPARE HIPOL PRODFAIL SPARE", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL", + "units": 1 + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (OCI model)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. \n\nThere are multiple retrieval algorithms for estimating Chl-a. These data use the OCI method (Hu et al 2012, doi: 10.1029/2011jc007395) recommended by the NASA Ocean Biology Processing Group and implemented in the SeaDAS processing software l2gen. The OCI algorithm is described at https://oceancolor.gsfc.nasa.gov/atbd/chlor_a/ (and links therein).", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/24055e3a-94e5-40bb-b97f-7519f0482d6a", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (OCI model)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_chlorophylla_oci_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Chlorophyll-a concentration (OCI model)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_oci_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_oci_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_diffuse_attenuation_coefficent_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_diffuse_attenuation_coefficent_1day_aqua.json new file mode 100644 index 0000000..2435a40 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_diffuse_attenuation_coefficent_1day_aqua.json @@ -0,0 +1,77 @@ +{ + "dataset_name": "satellite_diffuse_attenuation_coefficent_1day_aqua", + "logger_name": "satellite_diffuse_attenuation_coefficent_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "a8632154-b8e5-493d-acd4-e458fae3ae26", + "var_template_shape": "K_490", + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "K_490": { + "type": "float", + "units": "m^-1", + "long_name": "Diffuse attenuation coefficient at 490 nm (OBPG)", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Diffuse attenuation coefficient (k490 )", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the diffuse attenuation coefficient (Kd) at 490nm wavelength which provides information on how light is attenuated in the water column. It is defined as the scaling length of the exponential decrease of the downwelling irradiance and has units (m^-1). The MODIS K490 product estimates Kd at 490nm wavelength, using a semi-empirical model based on the ratio of water leaving radiances at 490nm and 555nm. The algorithm is described at https://oceancolor.gsfc.nasa.gov/atbd/kd/.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/a8632154-b8e5-493d-acd4-e458fae3ae26", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Diffuse attenuation coefficient (k490 )", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_diffuse_attenuation_coefficent_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Diffuse attenuation coefficient (k490 )", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_diffuse_attenuation_coefficent_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_diffuse_attenuation_coefficent_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3c_1day_nighttime_himawari8.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3c_1day_nighttime_himawari8.json new file mode 100644 index 0000000..373967f --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3c_1day_nighttime_himawari8.json @@ -0,0 +1,242 @@ +{ + "dataset_name": "satellite_ghrsst_l3c_1day_nighttime_himawari8", + "logger_name": "satellite_ghrsst_l3c_1day_nighttime_himawari8", + "parent_config": "satellite_ghrsst_main.json", + "coiled_cluster_options": { + "n_workers": [ + 1, + 20 + ], + "scheduler_vm_types": "t3.small", + "worker_vm_types": "t3.medium", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": { + "nthreads": 4, + "memory_limit": "8GB" + } + }, + "batch_size": 5, + "metadata_uuid": "72b65fb8-84e1-4a56-b32c-7f15970903d2", + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "reference time of sst file", + "standard_name": "time", + "axis": "T", + "comment": "A typical reference time for the data" + }, + "lat": { + "type": "float", + "long_name": "latitude", + "standard_name": "latitude", + "axis": "Y", + "comment": "Latitudes for locating data", + "valid_min": -90.0, + "valid_max": 90.0, + "units": "degrees_north" + }, + "lon": { + "type": "float", + "long_name": "longitude", + "standard_name": "longitude", + "axis": "X", + "comment": "Longitudes for locating data", + "valid_min": -180.0, + "valid_max": 360.0, + "units": "degrees_east" + }, + "sea_surface_temperature": { + "type": "double", + "valid_min": -32765, + "valid_max": 32765, + "units": "kelvin", + "long_name": "sea surface skin temperature", + "standard_name": "sea_surface_skin_temperature", + "comment": "The skin temperature of the ocean at a depth of approximately 10 microns. SSTs are retrieved by using the Radiative Transfer Model (RTTOV12.3) and Bayesian cloud clearing method based on the ESA CCI SST code developed at the University of Reading", + "calendar": "Standard", + "grid_mapping": "crs" + }, + "sses_bias": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "clip_min": -0.791444046499868, + "clip_max": 0.5204992377882015, + "units": "kelvin", + "long_name": "SSES bias estimate", + "comment": "Bias estimate derived from L2P bias,following the method described in http://imos.org.au/fileadmin/user_upload/shared/SRS/SST/GHRSST-DOC-basic-v1.0r1.pdf. Subtracting sses_bias from sea_surface_temperature produces a more accurate skin SST estimate", + "grid_mapping": "crs" + }, + "sses_standard_deviation": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "clip_min": 0.5, + "clip_max": 1.3142342249475432, + "units": "kelvin", + "long_name": "SSES standard deviation estimate", + "comment": "Standard deviation estimate derived from L2P standard deviation, following the method described in http://imos.org.au/fileadmin/user_upload/shared/SRS/SST/GHRSST-DOC-basic-v1.0r1.pdf.", + "grid_mapping": "crs" + }, + "quality_level": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "long_name": "quality level of SST pixel", + "comment": "These are the overall quality indicators and are used for all GHRSST SSTs. Refer Merchant et al., 2019 (https://doi.org/10.1038/s41597-019-0236-x) for more details for logic and threshold for assigning pixel quality level with use of Bayesian cloud clearing method. For validation applications, please consider quality_level greater than or equal 4 with bias correction. For operational applications, please consider quality_level greater than or equal 4 with bias correction. For qualitative applications, please consider quality_level greater than or equal 3 with or without bias correction.", + "flag_meanings": "no_data bad_data worst_quality low_quality acceptable_quality best_quality", + "grid_mapping": "crs", + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5 + ] + }, + "sst_dtime": { + "type": "double", + "valid_min": -32765, + "valid_max": 32765, + "units": "second", + "long_name": "time difference from reference time", + "comment": "time plus sst_dtime gives seconds after 00:00:00 UTC January 1, 1981.", + "grid_mapping": "crs" + }, + "dt_analysis": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "units": "Kelvin", + "long_name": "deviation from last SST analysis", + "comment": "The difference between this SST and the previous day's L4 Foundation SST.", + "source": "ABOM-L4LRfnd-GLOB-GAMSSA_28km", + "grid_mapping": "crs" + }, + "l2p_flags": { + "type": "float", + "valid_min": -32765, + "valid_max": 32765, + "long_name": "L2P flags", + "comment": "These flags are important to properly use the data. Data not flagged as microwave are sourced from an infrared sensor. The lake and river flags are currently not set, but defined in GDS2.0r4. The terminator flag indicates that the sun is near the horizon. The analysis flag indicates high difference from analysis temperatures (differences greater than Analysis Limit). The lowwind flag indicates regions of low wind speed (typically less than the low Wind Limit) per NWP model. The highwind flag indicates regions of high wind speed (typically greater than the high Wind Limit) per NWP model. Other flags may be populated and are for internal use and the definitions may change, so should not be relied on. Use flag_meanings to confirm the flag assignment that can be relied on. Flags greater than 64 only apply to non-land pixels.", + "grid_mapping": "crs", + "flag_masks": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024, + 2048, + 4096, + 8192, + 16384 + ], + "flag_meanings": "microwave land ice lake river reserved reserved analysis lowwind highwind reserved terminator reserved reserved reserved" + }, + "sses_count": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "clip_min": 19.50095810179533, + "clip_max": 619.1554197320019, + "units": "count", + "long_name": "SSES count", + "comment": "Weighted representative number of swath pixels, per https://imos.org.au/facilities/srs/sstproducts/sstdata0/sstdata-ghrsstfilefields. EXPERIMENTAL_FIELD", + "grid_mapping": "crs" + }, + "wind_speed": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "clip_min": 0.0, + "clip_max": 18.232957398185146, + "long_name": "wind_speed", + "standard_name": "wind_speed", + "comment": "Typically represent surface winds (10 meters above the sea surface).", + "source": "ACCESSG-ABOM-Forecast-WSP", + "grid_mapping": "crs", + "units": "m s-1" + }, + "satellite_zenith_angle": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "clip_min": 0.0, + "clip_max": 70.09629949446496, + "units": "angular_degree", + "long_name": "satellite_zenith angle", + "comment": "The satellite zenith angle at the time of the SST observations", + "grid_mapping": "crs" + }, + "sea_ice_fraction": { + "type": "double", + "valid_min": -127, + "valid_max": 127, + "units": "1", + "long_name": "sea_ice_fraction", + "standard_name": "sea_ice_area_fraction", + "comment": "Fractional sea ice cover (unitless) derived from near real-time UKMO OSTIA Daily 0.05 degree L4, an optimal interpolation of the operational near real-time EUMETSAT OSI-SAF SSMIS daily 10 km Level 3 sea ice concentration fields (Good et al., 2020, Remote Sensing, https://dx.doi.org/10.3390/rs12040720).", + "source": "OSTIA-UKMO-L4-GLOB-v2.0", + "grid_mapping": "crs" + }, + "crs": { + "type": "int32", + "long_name": "coordinate reference system", + "grid_mapping_name": "latitude_longitude", + "semi_major_axis": 6379137.0, + "inverse_flattening": 298.257223563, + "epsg_code": "EPSG:4326" + } + }, + "dataset_gattrs": { + "title": "FILL UP MANUALLY - CHECK DOCUMENTATION" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - SST - L3C - Himawari-8 - 1 day - night time - Australia", + "Description": "This is a regional GHRSST level 3 collated (L3C) dataset on 0.02-degree rectangular grid over the Australasian domain (70E to 190E, 70S to 20N) based on retrievals from the AHI imager on board Himawari-8 satellite. The Bureau of Meteorology (Bureau) produces Integrated Marine Observing System (IMOS) satellite SST products in the International Group for High Resolution SST (GHRSST) GDS2 file formats for Himawari-8 in real time and delayed mode. This product is composed of reprocessed multi-swath SSTskin retrievals obtained from compositing IMOS Himawari-8 hourly L3C files over the night (before dawn). \nEvery 10 minutes, the Himawari-8 full disk is processed to retrieve SSTs by using the Radiative Transfer Model (RTTOV12.3) and Bayesian cloud clearing method based on the ESA CCI SST code developed at the University of Reading. The hourly product on native grid is then produced by compositing over multiple swaths for the previous 1 hour. Further, L3C-01day SST fields on native grid are obtained by selecting the highest quality data from the hourly SST records with priority being given to the value the closest in time to the product nominal hour. The L3C-1day night product on native grid is then remapped over the 0.02-degree IMOS grid to compose IMOS L3C-1day night product (Govekar et al., 2021, https://www.foo.org.au/wp-content/uploads/2021/11/Govekar_FOO_2021.pdf). The product format is compliant with the GHRSST Data Specification (GDS) version 2.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/72b65fb8-84e1-4a56-b32c-7f15970903d2", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "satellite imagery" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - SST - L3C - Himawari-8 - 1 day - night time - Australia", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_ghrsst_l3c_1day_nighttime_himawari8.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - SST - L3C - Himawari-8 - 1 day - night time - Australia", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3c_1day_nighttime_himawari8.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3c_1day_nighttime_himawari8.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.json index 5160c83..b3eca44 100644 --- a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.json +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.json @@ -2,7 +2,7 @@ "dataset_name": "satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean", "logger_name": "satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 120 @@ -240,7 +240,8 @@ "ManagedBy": "FILL UP MANUALLY - CHECK DOCUMENTATION", "UpdateFrequency": "FILL UP MANUALLY - CHECK DOCUMENTATION", "Tags": [ - "FILL UP MANUALLY - CHECK DOCUMENTATION" + "oceans", + "satellite imagery" ], "License": "FILL UP MANUALLY - CHECK DOCUMENTATION", "Resources": [ diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.json index 17814a4..15a1b1d 100644 --- a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.json +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.json @@ -3,7 +3,7 @@ "logger_name": "satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia", "metadata_uuid": "a136eee7-a990-4c06-a4f6-915657a2464e", "parent_config": "satellite_ghrsst_main.json", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 60, 180 diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.json index 6faf108..8d62710 100644 --- a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.json +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.json @@ -2,7 +2,7 @@ "dataset_name": "satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean", "logger_name": "satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 8, 120 diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.json new file mode 100644 index 0000000..0db63eb --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.json @@ -0,0 +1,274 @@ +{ + "dataset_name": "satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia", + "logger_name": "satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia", + "cloud_optimised_format": "zarr", + "coiled_cluster_options": { + "n_workers": [ + 1, + 20 + ], + "scheduler_vm_types": "t3.small", + "worker_vm_types": "t3.medium", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": { + "nthreads": 4, + "memory_limit": "8GB" + } + }, + "batch_size": 5, + "metadata_uuid": "7d8d046b-6002-4897-b781-04e7324d6af8", + "dimensions": { + "time": { + "name": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "chunk": 0, + "rechunk": false + }, + "latitude": { + "name": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "chunk": 0 + }, + "longitude": { + "name": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "chunk": 0 + } + }, + "var_template_shape": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "vars_to_drop_no_common_dimension": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "schema": { + "lon": { + "type": "float", + "axis": "X", + "comment": "Longitudes for locating data", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "valid_max": 360.0, + "valid_min": -180.0 + }, + "lat": { + "type": "float", + "long_name": "latitude", + "units": "degrees_north", + "valid_min": -90.0, + "valid_max": 90.0, + "axis": "Y", + "comment": "Latitudes for locating data", + "standard_name": "latitude" + }, + "time": { + "type": "timestamp[ns]", + "long_name": "reference time of sst file", + "axis": "T", + "comment": "A typical reference time for data", + "standard_name": "time" + }, + "sea_surface_temperature": { + "type": "double", + "long_name": "sea surface skin temperature", + "units": "kelvin", + "comment": "The skin temperature of the ocean at a depth of approximately 10 microns", + "standard_name": "sea_surface_skin_temperature", + "valid_min": -32767, + "valid_max": 32767 + }, + "sst_dtime": { + "type": "double", + "long_name": "time difference from reference time", + "units": "second", + "comment": "time plus sst_dtime gives seconds after 00:00:00 UTC January 1, 1981", + "valid_min": -2147483645, + "valid_max": 2147483645 + }, + "dt_analysis": { + "type": "double", + "long_name": "deviation from last SST analysis", + "units": "kelvin", + "comment": "The difference between this SST and the previous day's SST", + "source": "ABOM-L4LRfnd-GLOB-GAMSSA_28km;various", + "valid_min": -127, + "valid_max": 127 + }, + "wind_speed": { + "type": "double", + "long_name": "wind speed", + "units": "m s-1", + "comment": "Typically represent mean surface winds (10 meters above the sea surface)", + "standard_name": "wind_speed", + "source": "ACCESSG-ABOM-Analysis-WSP;various", + "height": "10m", + "valid_min": -127, + "valid_max": 127 + }, + "sea_ice_fraction": { + "type": "double", + "long_name": "sea ice fraction", + "units": "1", + "comment": "Fractional sea ice cover (unitless) derived from near real-time UKMO OSTIA Daily 0.05 degree L4, an optimal interpolation of the operational near real-time EUMETSAT OSI-SAF SSMIS daily 10 km Level 3 sea ice concentration fields (Good et al., 2020, Remote Sensing, https://dx.doi.org/10.3390/rs12040720).", + "standard_name": "sea_ice_area_fraction", + "source": "OSTIA-UKMO-L4-GLOB-v2.0", + "valid_min": -127, + "valid_max": 127 + }, + "sea_ice_fraction_dtime_from_sst": { + "type": "double", + "long_name": "time difference of sea ice fraction measurement from sst measurement", + "units": "hour", + "comment": "The time difference in hours is estimated from the SST and sea ice data sets", + "source": "OSTIA-UKMO-L4-GLOB-v2.0", + "valid_min": -127, + "valid_max": 127 + }, + "aerosol_dynamic_indicator": { + "type": "double", + "long_name": "aerosol dynamic indicator", + "units": "count", + "comment": "aerosol dynamic indicator", + "source": "OSDPD-AOD-Analysis-daily;various", + "valid_min": -127, + "valid_max": 127 + }, + "satellite_zenith_angle": { + "type": "double", + "long_name": "satellite zenith angle", + "units": "angular_degree", + "comment": "The satellite zenith angle at the time of the SST observations", + "valid_min": -127, + "valid_max": 127 + }, + "l2p_flags": { + "type": "float", + "long_name": "L2P flags", + "valid_min": 0, + "valid_max": 32767, + "comment": "These flags are important to properly use the data. Data not flagged as microwave are sourced from an infrared sensor. The lake and river flags are currently not set, but defined in GDS2.0r4. The aerosol flag indicates high aerosol concentration. The analysis flag indicates high difference from analysis temperatures (differences greater than Analysis Limit). The lowwind flag indicates regions of low wind speed (typically less than the low Wind Limit) per NWP model. The highwind flag indicates regions of high wind speed (typically greater than the high Wind Limit) per NWP model. See wind limits in the comment field for the actual values. The edge flag indicates pixel sizes that are larger than Pixel Spread times the size of the pixel in the center of the field of view in either lat or lon direction. The terminator flag indicates that the sun is near the horizon. The reflector flag indicates that the satellite would receive direct reflected sunlight if the earth was a perfect mirror. The swath flag is used in gridded files to indicate if the pixel could have been seen by the satellite. delta_dn indicates that the day.night sst algorithm was different from the standard algorithm. Other flags may be populated and are for internal use and the definitions may change, so should not be relied on. Flags greater than 64 only apply to non-land pixels", + "flag_masks": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024, + 2048, + 4096, + 8192, + 16384 + ], + "flag_meanings": "microwave land ice lake river reserved aerosol analysis lowwind highwind edge terminator reflector swath delta_dn" + }, + "quality_level": { + "type": "float", + "long_name": "quality level of SST pixel", + "valid_min": 0, + "valid_max": 5, + "comment": "These are the overall quality indicators and are used for all GHRSST SSTs. The quality level in this case is the minimum of the original quality_level assigned by L3U data provider and quality level calculated using Sensor Specific Error Statistics (SSES). The latter is calculated using bias and standard deviation estimates as described in Griffin et al. (2017) Appendix A at http://imos.org.au/facilities/srs/sstproducts/sstdata0/sstdata-references/. For validation applications, please consider quality_level greater than or equal 4 with bias correction. For operational applications, please consider quality_level greater than or equal 3 with bias correction. For qualitative applications, please consider quality_level greater than or equal 2 with or without bias correction.", + "flag_values": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "flag_meanings": "no_data bad_data worst_quality low_quality acceptable_quality best_quality" + }, + "sses_bias": { + "type": "double", + "long_name": "SSES bias estimate", + "units": "kelvin", + "comment": "Bias estimate derived from contributing L3C sses_bias values per http://imos.org.au/facilities/srs/sstproducts/sstdata0/sstdata-references/", + "valid_min": -127, + "valid_max": 127 + }, + "sses_standard_deviation": { + "type": "double", + "long_name": "SSES standard deviation estimate", + "units": "kelvin", + "comment": "Standard deviation estimate derived from contributing L3C sses_standard_deviation values per http://imos.org.au/facilities/srs/sstproducts/sstdata0/sstdata-references/", + "valid_min": -127, + "valid_max": 127 + }, + "sses_count": { + "type": "double", + "long_name": "SSES count", + "units": "count", + "comment": "Weighted representative number of swath pixels. EXPERIMENTAL_FIELD", + "valid_min": -127, + "valid_max": 127 + }, + "sst_count": { + "type": "double", + "long_name": "Number of SST measurements", + "units": "count", + "comment": "Unweighted count of number of contributory SST measurements. EXPERIMENTAL_FIELD", + "valid_min": -127, + "valid_max": 127 + }, + "sst_mean": { + "type": "double", + "long_name": "Unweighted SST mean", + "units": "kelvin", + "comment": "Unweighted mean of contributory SST measurements. EXPERIMENTAL_FIELD", + "valid_min": -32767, + "valid_max": 32767 + }, + "sst_standard_deviation": { + "type": "double", + "long_name": "Unweighted SST standard deviation", + "units": "kelvin", + "comment": "Standard deviation estimate of contributory SST measurements. EXPERIMENTAL_FIELD", + "valid_min": -127, + "valid_max": 127 + } + }, + "dataset_gattrs": { + "title": "FILL UP MANUALLY - CHECK DOCUMENTATION" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - SST - L3S - GeoPolar Multi Sensor - 1 day - night time - Australia", + "Description": "This is a GeoPolar Multi-sensor SSTskin L3S product for a single night-time period, derived using sea surface temperature retrievals from the AHI sensor on the Himawari-8, the VIIRS sensor on the Suomi-NPP satellite and JPSS series of satellites, and AVHRR sensor on the NOAA and Metop series of Polar-orbiting satellites. The sensors and satellite platforms contributing to each file are listed in the sensor and platform global attributes in the file header. The GeoPolar Multi-sensor L3S product is provided as a 0.02deg x 0.02deg cylindrical equidistant projected map over the region 70E to 170W, 20N to 70S. The quality level for each pixel was remapped using the original ACSPO VIIRS and AVHRR L3U quality levels and Sensor Specific Error Statistics (SSES), as described in Govekar et al. (2022) https://doi.org/10.3390/rs14153785 and Griffin et al. (2017) Appendix at http://imos.org.au/facilities/srs/sstproducts/sstdata0/sstdata-references/, before compositing single swaths from the sensors. Each grid cell contains the 1 night average of all the highest available quality SSTs that overlap with that cell, weighted by the area of overlap. Refer to the IMOS SST products web page at http://imos.org.au/sstproducts.html for further information.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/7d8d046b-6002-4897-b781-04e7324d6af8", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "oceans", + "satellite imagery" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - SST - L3S - GeoPolar Multi Sensor - 1 day - night time - Australia", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - SST - L3S - GeoPolar Multi Sensor - 1 day - night time - Australia", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.json index ccbec39..4ea8e73 100644 --- a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.json +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.json @@ -2,7 +2,7 @@ "dataset_name": "satellite_ghrsst_l4_gamssa_1day_multi_sensor_world", "logger_name": "satellite_ghrsst_l4_gamssa_1day_multi_sensor_world", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 30 diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.json index b7fd430..4d50a6d 100644 --- a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.json +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.json @@ -2,7 +2,7 @@ "dataset_name": "satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia", "logger_name": "satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 30 diff --git a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_main.json b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_main.json index 4a01390..bac607b 100644 --- a/aodn_cloud_optimised/config/dataset/satellite_ghrsst_main.json +++ b/aodn_cloud_optimised/config/dataset/satellite_ghrsst_main.json @@ -2,7 +2,7 @@ "dataset_name": "srs_ghrsst_main", "logger_name": "srs_ghrsst_main", "cloud_optimised_format": "zarr", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 40 diff --git a/aodn_cloud_optimised/config/dataset/satellite_nanoplankton_fraction_oc3_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_nanoplankton_fraction_oc3_1day_aqua.json new file mode 100644 index 0000000..806c140 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_nanoplankton_fraction_oc3_1day_aqua.json @@ -0,0 +1,78 @@ +{ + "dataset_name": "satellite_nanoplankton_fraction_oc3_1day_aqua", + "logger_name": "satellite_nanoplankton_fraction_oc3_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "9fde091c-9d38-4b2f-ba23-c262c21a41a2", + "var_template_shape": "nanop_brewin2012in", + "vars_to_drop_no_common_dimension": [], + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "nanop_brewin2012in": { + "type": "float", + "units": "percent", + "long_name": "Nanoplankton fraction\nMethod: Brewin et al (2012), Deep Sea Research II, 77-80, 117-127", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Nanoplankton fraction (OC3 model and Brewin et al 2012 algorithm)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. An empirical relationship is then used to compute an estimate of the relative abundance of three phytoplankton size classes (micro, nano and picoplankton). \n\nThe methods used to decompose chl_oc3 are described by Brewin et al in two papers in 2010 and 2012. The two methods, denoted Brewin2010at and Brewin2012in, used calibration data from the Atlantic and Indian Oceans respectively. Users should note that these are unvalidated experimental products and they should familiarise themselves with the underlying algorithms and methodologies described in the published literature before making use of them.\n\nThe data are produced from the same data stream as the MODIS Chla_oc3 data set (https://catalogue-imos.aodn.org.au:443/geonetwork/srv/api/records/d7a14921-8f3f-4522-9a54-e7d1df969c8a). \n\nData are provided as two files per day, one with the percentage of nanoplankton, and one for picoplankton. The percentage of microplankton is computed as the balance to 100%, that is %micro = 100 - %nano - %pico.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/9fde091c-9d38-4b2f-ba23-c262c21a41a2", + "Contact": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "ManagedBy": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Nanoplankton fraction (OC3 model and Brewin et al 2012 algorithm)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_nanoplankton_fraction_oc3_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Nanoplankton fraction (OC3 model and Brewin et al 2012 algorithm)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_nanoplankton_fraction_oc3_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_nanoplankton_fraction_oc3_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_net_primary_productivity_gsm_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_net_primary_productivity_gsm_1day_aqua.json new file mode 100644 index 0000000..cb7e963 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_net_primary_productivity_gsm_1day_aqua.json @@ -0,0 +1,78 @@ +{ + "dataset_name": "satellite_net_primary_productivity_gsm_1day_aqua", + "logger_name": "satellite_net_primary_productivity_gsm_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "27cc65c0-d453-4ba3-a0d6-55e4449fee8c", + "var_template_shape": "npp_vgpm_eppley_gsm", + "vars_to_drop_no_common_dimension": [], + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "npp_vgpm_eppley_gsm": { + "type": "float", + "long_name": "MODIS_Epply_VGPM Net Primary Productivity using chl_gsm", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL", + "units": "mg.m^-3.d^-1" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Net Primary Productivity (GSM model and Eppley-VGPM algorithm)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. Modelling is then used to compute an estimate of the Net Primary Productivity (NPP).\n\nThe model used is based on the standard vertically generalised production model (VGPM). The VGPM is a \"chlorophyll-based\" model that estimates net primary production from chlorophyll using a temperature-dependent description of chlorophyll-specific photosynthetic efficiency. For the VGPM, net primary production is a function of chlorophyll, available light, and the photosynthetic efficiency. The only difference between the Standard VGPM and the Eppley-VGPM is the temperature-dependent description of photosynthetic efficiencies, with the Eppley approach using an exponential function to account for variation in photosynthetic efficiencies due to photoacclimation. The similarity between these models (VGPM vs E_VGPM) is described more extensively in a paper by Elena-Carr et al (2006.). VGPM is a Depth Integrated Model(DIM) described by Behrenfeld and Falkowski (1997), with modification due to Eppley (1972) as implemented by Antoine and Morel (1996).\n\nThere are multiple retrieval algorithms for estimating Chl-a. These data (eppley_npp_chl_gsm) use the Garver-Siegel-Maritorena (GSM) method implemented in the SeaDAS processing software l2gen and described in \u201cChapter 11, and references therein, of IOCCG Report 5, 2006, (http://ioccg.org/wp-content/uploads/2015/10/ioccg-report-05.pdf). This product is recommended for use in the VGPM model. The product Eppley_NPP_chl_gsm is experimental, in the sense that it is challenging to validate due to the scarcity of insitu measurments. It should only be used with caution informed by understanding of the algorithms.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/27cc65c0-d453-4ba3-a0d6-55e4449fee8c", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Net Primary Productivity (GSM model and Eppley-VGPM algorithm)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_net_primary_productivity_gsm_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Net Primary Productivity (GSM model and Eppley-VGPM algorithm)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_net_primary_productivity_gsm_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_net_primary_productivity_gsm_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_net_primary_productivity_oc3_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_net_primary_productivity_oc3_1day_aqua.json new file mode 100644 index 0000000..ab444f4 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_net_primary_productivity_oc3_1day_aqua.json @@ -0,0 +1,78 @@ +{ + "dataset_name": "satellite_net_primary_productivity_oc3_1day_aqua", + "logger_name": "satellite_net_primary_productivity_oc3_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "b35b829c-9149-46c6-9e25-d0fd03463280", + "var_template_shape": "npp_vgpm_eppley_oc3", + "vars_to_drop_no_common_dimension": [], + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "npp_vgpm_eppley_oc3": { + "type": "float", + "long_name": "MODIS_Epply_VGPM Net Primary Productivity using chl_oc3", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL", + "units": "mg.m^-3.d^-1" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Net Primary Productivity (OC3 model and Eppley-VGPM algorithm)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. Modelling is then used to compute an estimate of the Net Primary Productivity (NPP).\n\nThe model used is based on the standard vertically generalised production model (VGPM). The VGPM is a \"chlorophyll-based\" model that estimates net primary production from chlorophyll using a temperature-dependent description of chlorophyll-specific photosynthetic efficiency. For the VGPM, net primary production is a function of chlorophyll, available light, and the photosynthetic efficiency. The only difference between the Standard VGPM and the Eppley-VGPM is the temperature-dependent description of photosynthetic efficiencies, with the Eppley approach using an exponential function to account for variation in photosynthetic efficiencies due to photoacclimation. The similarity between these models (VGPM vs E_VGPM) is described more extensively in a paper by Elena-Carr et al (2006.). VGPM is a Depth Integrated Model(DIM) described by Behrenfeld and Falkowski (1997), with modification due to Eppley (1972) as implemented by Antoine and Morel (1996).\n\nThere are multiple retrieval algorithms for estimating Chl-a. These data (eppley_npp_chl_oc3) use the OC3 method implemented by the NASA Ocean Biology Processing Group in the SeaDAS processing software l2gen. The OC3 algorithm is described at https://oceancolor.gsfc.nasa.gov/atbd/chlor_a/ (and links therein). The Eppley_NPP_chl_oc3 product (based on the IMOS chl_oc3 product) is experimental and was created for comparison purposes with Eppley_NPP_chl_gsm, which is the recommended NPP product. It should only be used with full understanding of the algorithms. If you do not know which product to use, then go with Eppley_NPP_chl_gsm.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/b35b829c-9149-46c6-9e25-d0fd03463280", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Net Primary Productivity (OC3 model and Eppley-VGPM algorithm)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_net_primary_productivity_oc3_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Net Primary Productivity (OC3 model and Eppley-VGPM algorithm)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_net_primary_productivity_oc3_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_net_primary_productivity_oc3_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_ocean_colour_1day_aqua_main.json b/aodn_cloud_optimised/config/dataset/satellite_ocean_colour_1day_aqua_main.json new file mode 100644 index 0000000..4daa5a4 --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_ocean_colour_1day_aqua_main.json @@ -0,0 +1,38 @@ +{ + "dataset_name": "satellite_ocean_colour_1day_aqua_main", + "cloud_optimised_format": "zarr", + "coiled_cluster_options": { + "n_workers": [ + 10, + 100 + ], + "scheduler_vm_types": "m7i.xlarge", + "worker_vm_types": "m7i.2xlarge", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": { + "nthreads": 8, + "memory_limit": "32GB" + } + }, + "batch_size": 100, + "dimensions": { + "time": { + "name": "time", + "chunk": 5, + "rechunk": false + }, + "latitude": { + "name": "latitude", + "chunk": 500 + }, + "longitude": { + "name": "longitude", + "chunk": 500 + } + }, + "vars_to_drop_no_common_dimension": [ + "latitude", + "longitude" + ] +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_optical_water_type_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_optical_water_type_1day_aqua.json new file mode 100644 index 0000000..13968ea --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_optical_water_type_1day_aqua.json @@ -0,0 +1,81 @@ +{ + "dataset_name": "satellite_optical_water_type_1day_aqua", + "logger_name": "satellite_optical_water_type_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "60e57a2e-f88c-4b18-a3a1-1164c6259a10", + "var_template_shape": "owtd_csiro", + "vars_to_drop_no_common_dimension": [], + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "owtd_csiro": { + "type": "float", + "units": "dimensionless", + "long_name": "Dominant optical water type", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL", + "valid_min": 1, + "valid_max": 8, + "comment": "CSIRO implementation of algorithm by Moore et al. (2009), RSE, 113, pp2424-2430, doi:10.1016/j.rse.2009.07.016" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Optical Water Type (Moore et al 2009 algorithm)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These measurements at discrete wavelengths represent the spectrum of light leaving the water surface, and the shape of the spectrum is characteristic of the water optical properties.\n\nMoore et al. (2009) applied a clustering technique to spectra to identify 8 sets of discrete optical water types. This product \"owt_csiro\" is produced using a CSIRO implementation of the Moore et al. algorithm, and testing shows that it closely reproduces the results of the original Moore et al implementation in the NASA SeaDAS package. The CSIRO implementation was created because the implementation in SeaDAS has not been kept up to date, and to extend the product to the VIIRS sensor.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/60e57a2e-f88c-4b18-a3a1-1164c6259a10", + "Contact": "info@aodn.org.au", + "ManagedBy": "AODN", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Optical Water Type (Moore et al 2009 algorithm)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_optical_water_type_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Optical Water Type (Moore et al 2009 algorithm)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_optical_water_type_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_optical_water_type_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/satellite_picoplankton_fraction_oc3_1day_aqua.json b/aodn_cloud_optimised/config/dataset/satellite_picoplankton_fraction_oc3_1day_aqua.json new file mode 100644 index 0000000..cd113cc --- /dev/null +++ b/aodn_cloud_optimised/config/dataset/satellite_picoplankton_fraction_oc3_1day_aqua.json @@ -0,0 +1,78 @@ +{ + "dataset_name": "satellite_picoplankton_fraction_oc3_1day_aqua", + "logger_name": "satellite_picoplankton_fraction_oc3_1day_aqua", + "parent_config": "satellite_ocean_colour_1day_aqua_main.json", + "metadata_uuid": "bc428d0b-eff7-41b9-8d4c-10e666ee1312", + "var_template_shape": "picop_brewin2012in", + "vars_to_drop_no_common_dimension": [], + "schema": { + "time": { + "type": "timestamp[ns]", + "long_name": "time", + "standard_name": "time", + "axis": "T" + }, + "latitude": { + "type": "double", + "long_name": "latitude", + "standard_name": "latitude", + "units": "degrees_north", + "axis": "Y" + }, + "longitude": { + "type": "double", + "long_name": "longitude", + "standard_name": "longitude", + "units": "degrees_east", + "axis": "X" + }, + "picop_brewin2012in": { + "type": "float", + "units": "percent", + "long_name": "Picoplankton fraction\nMethod: Brewin et al (2012), Deep Sea Research II, 77-80, 117-127", + "flag_applied": "HISATZEN LAND CLDICE NAVFAIL" + } + }, + "dataset_gattrs": { + "title": "" + }, + "aws_opendata_registry": { + "Name": "IMOS - SRS - MODIS - 01 day - Picoplankton fraction (OC3 model and Brewin et al 2012 algorithm)", + "Description": "The Aqua satellite platform carries a MODIS sensor that observes sunlight reflected from within the ocean surface layer at multiple wavelengths. These multi-spectral measurements are used to infer the concentration of chlorophyll-a (Chl-a), most typically due to phytoplankton, present in the water. An empirical relationship is then used to compute an estimate of the relative abundance of three phytoplankton size classes (micro, nano and picoplankton). \n\nThe methods used to decompose chl_oc3 are described by Brewin et al in two papers in 2010 and 2012. The two methods, denoted Brewin2010at and Brewin2012in, used calibration data from the Atlantic and Indian Oceans respectively. Users should note that these are unvalidated experimental products and they should familiarise themselves with the underlying algorithms and methodologies described in the published literature before making use of them.\n\nThe data are produced from the same data stream as the MODIS Chla_oci data set (https://catalogue-imos.aodn.org.au:443/geonetwork/srv/api/records/d7a14921-8f3f-4522-9a54-e7d1df969c8a). \n\nData are provided as two files per day, one with the percentage of nanoplankton, and one for picoplankton. The percentage of microplankton is computed as the balance to 100%, that is %micro = 100 - %nano - %pico.", + "Documentation": "https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/bc428d0b-eff7-41b9-8d4c-10e666ee1312", + "Contact": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "ManagedBy": "FILL UP MANUALLY - CHECK DOCUMENTATION", + "UpdateFrequency": "As Needed", + "Tags": [ + "FILL UP MANUALLY - CHECK DOCUMENTATION" + ], + "License": "http://creativecommons.org/licenses/by/4.0/", + "Resources": [ + { + "Description": "Cloud Optimised AODN dataset of IMOS - SRS - MODIS - 01 day - Picoplankton fraction (OC3 model and Brewin et al 2012 algorithm)", + "ARN": "arn:aws:s3:::aodn-cloud-optimised/satellite_picoplankton_fraction_oc3_1day_aqua.zarr", + "Region": "ap-southeast-2", + "Type": "S3 Bucket" + } + ], + "DataAtWork": { + "Tutorials": [ + { + "Title": "Accessing IMOS - SRS - MODIS - 01 day - Picoplankton fraction (OC3 model and Brewin et al 2012 algorithm)", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_picoplankton_fraction_oc3_1day_aqua.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_picoplankton_fraction_oc3_1day_aqua.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + }, + { + "Title": "Accessing and search for any AODN dataset", + "URL": "https://nbviewer.org/github/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "NotebookURL": "https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/GetAodnData.ipynb", + "AuthorName": "Laurent Besnard", + "AuthorURL": "https://github.com/aodn/aodn_cloud_optimised" + } + ] + }, + "Citation": "IMOS [year-of-data-download], [Title], [data-access-URL], accessed [date-of-access]" + } +} diff --git a/aodn_cloud_optimised/config/dataset/slocum_glider_delayed_qc.json b/aodn_cloud_optimised/config/dataset/slocum_glider_delayed_qc.json index b4bafd4..5a6cb38 100644 --- a/aodn_cloud_optimised/config/dataset/slocum_glider_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/slocum_glider_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "slocum_glider_delayed_qc", "logger_name": "slocum_glider_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 30, 35 diff --git a/aodn_cloud_optimised/config/dataset/srs_oc_ljco_wqm_daily.json b/aodn_cloud_optimised/config/dataset/srs_oc_ljco_wqm_daily.json index 2cfaa87..7f3f9fe 100644 --- a/aodn_cloud_optimised/config/dataset/srs_oc_ljco_wqm_daily.json +++ b/aodn_cloud_optimised/config/dataset/srs_oc_ljco_wqm_daily.json @@ -2,7 +2,7 @@ "dataset_name": "srs_oc_ljco_wqm_daily", "logger_name": "srs_oc_ljco_wqm_daily", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 8, 20 diff --git a/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_product_delayed.json b/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_product_delayed.json index ab77771..b2d785c 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_product_delayed.json +++ b/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_product_delayed.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_air_sea_flux_product_delayed", "logger_name": "vessel_air_sea_flux_product_delayed", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 40 diff --git a/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_sst_meteo_realtime.json b/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_sst_meteo_realtime.json index 8241e55..27ac2cb 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_sst_meteo_realtime.json +++ b/aodn_cloud_optimised/config/dataset/vessel_air_sea_flux_sst_meteo_realtime.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_air_sea_flux_sst_meteo_realtime", "logger_name": "vessel_air_sea_flux_sst_meteo_realtime", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/vessel_co2_delayed_qc.json b/aodn_cloud_optimised/config/dataset/vessel_co2_delayed_qc.json index 5688f4f..76d1164 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_co2_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/vessel_co2_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_co2_delayed_qc", "logger_name": "vessel_co2_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 25 diff --git a/aodn_cloud_optimised/config/dataset/vessel_fishsoop_realtime_qc.json b/aodn_cloud_optimised/config/dataset/vessel_fishsoop_realtime_qc.json index 55f0a2e..767fca7 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_fishsoop_realtime_qc.json +++ b/aodn_cloud_optimised/config/dataset/vessel_fishsoop_realtime_qc.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_fishsoop_realtime_qc", "logger_name": "vessel_fishsoop_realtime_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/vessel_sst_delayed_qc.json b/aodn_cloud_optimised/config/dataset/vessel_sst_delayed_qc.json index d7c9966..4764cfd 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_sst_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/vessel_sst_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_sst_delayed_qc", "logger_name": "vessel_sst_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 25 diff --git a/aodn_cloud_optimised/config/dataset/vessel_trv_realtime_qc.json b/aodn_cloud_optimised/config/dataset/vessel_trv_realtime_qc.json index 247029c..52c2de0 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_trv_realtime_qc.json +++ b/aodn_cloud_optimised/config/dataset/vessel_trv_realtime_qc.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_trv_realtime_qc", "logger_name": "vessel_trv_realtime_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 50 diff --git a/aodn_cloud_optimised/config/dataset/vessel_xbt_delayed_qc.json b/aodn_cloud_optimised/config/dataset/vessel_xbt_delayed_qc.json index 0f540b7..acfa85a 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_xbt_delayed_qc.json +++ b/aodn_cloud_optimised/config/dataset/vessel_xbt_delayed_qc.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_xbt_delayed_qc", "logger_name": "vessel_xbt_delayed_qc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 1, 20 diff --git a/aodn_cloud_optimised/config/dataset/vessel_xbt_realtime_nonqc.json b/aodn_cloud_optimised/config/dataset/vessel_xbt_realtime_nonqc.json index 98af6cb..e809ed6 100644 --- a/aodn_cloud_optimised/config/dataset/vessel_xbt_realtime_nonqc.json +++ b/aodn_cloud_optimised/config/dataset/vessel_xbt_realtime_nonqc.json @@ -2,7 +2,7 @@ "dataset_name": "vessel_xbt_realtime_nonqc", "logger_name": "vessel_xbt_realtime_nonqc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 8, 20 diff --git a/aodn_cloud_optimised/config/dataset/wave_buoy_realtime_nonqc.json b/aodn_cloud_optimised/config/dataset/wave_buoy_realtime_nonqc.json index 974b529..0851f9f 100644 --- a/aodn_cloud_optimised/config/dataset/wave_buoy_realtime_nonqc.json +++ b/aodn_cloud_optimised/config/dataset/wave_buoy_realtime_nonqc.json @@ -2,7 +2,7 @@ "dataset_name": "wave_buoy_realtime_nonqc", "logger_name": "wave_buoy_realtime_nonqc", "cloud_optimised_format": "parquet", - "cluster_options": { + "coiled_cluster_options": { "n_workers": [ 8, 20 diff --git a/aodn_cloud_optimised/config/schema_validation_common.json b/aodn_cloud_optimised/config/schema_validation_common.json index e5271b0..3f756cb 100644 --- a/aodn_cloud_optimised/config/schema_validation_common.json +++ b/aodn_cloud_optimised/config/schema_validation_common.json @@ -10,7 +10,7 @@ "cloud_optimised_format": { "type": "string" }, - "cluster_options": { + "coiled_cluster_options": { "type": "object", "properties": { "n_workers": { diff --git a/aodn_cloud_optimised/config/schema_validation_parquet.json b/aodn_cloud_optimised/config/schema_validation_parquet.json index d0dac9c..06f1ca9 100644 --- a/aodn_cloud_optimised/config/schema_validation_parquet.json +++ b/aodn_cloud_optimised/config/schema_validation_parquet.json @@ -10,7 +10,7 @@ "cloud_optimised_format": { "type": "string" }, - "cluster_options": { + "coiled_cluster_options": { "type": "object", "properties": { "n_workers": { @@ -287,7 +287,7 @@ }, "required": [ "dataset_name", - "cluster_options", + "coiled_cluster_options", "cloud_optimised_format", "time_extent", "spatial_extent", diff --git a/aodn_cloud_optimised/config/schema_validation_zarr.json b/aodn_cloud_optimised/config/schema_validation_zarr.json index 0bc10ce..3dd3ab9 100644 --- a/aodn_cloud_optimised/config/schema_validation_zarr.json +++ b/aodn_cloud_optimised/config/schema_validation_zarr.json @@ -10,7 +10,7 @@ "cloud_optimised_format": { "type": "string" }, - "cluster_options": { + "coiled_cluster_options": { "type": "object", "properties": { "n_workers": { @@ -251,7 +251,7 @@ }, "required": [ "dataset_name", - "cluster_options", + "coiled_cluster_options", "cloud_optimised_format", "dimensions", "var_template_shape", diff --git a/aodn_cloud_optimised/lib/CommonHandler.py b/aodn_cloud_optimised/lib/CommonHandler.py index 21d2ff9..4005f62 100644 --- a/aodn_cloud_optimised/lib/CommonHandler.py +++ b/aodn_cloud_optimised/lib/CommonHandler.py @@ -5,17 +5,15 @@ from enum import Enum from typing import List -import dask import s3fs import xarray as xr import yaml -from coiled import Cluster from dask.distributed import Client from dask.distributed import LocalCluster from jsonschema import validate, ValidationError from s3path import PureS3Path -from .clusterLib import ClusterMode +from .clusterLib import ClusterMode, ClusterManager from .config import load_variable_from_config, load_dataset_config from .logging import get_logger @@ -37,7 +35,7 @@ def __init__(self, **kwargs): optimised_bucket_name (str, optional): Name of the optimised bucket. Defaults to the value in the configuration. root_prefix_cloud_optimised_path (str, optional): Root prefix path of the location of cloud optimised files. Defaults to the value in the configuration. force_previous_parquet_deletion (bool, optional): Force the deletion of existing cloud optimised files (slow). Defaults to False. - cluster_mode (str, optional): Specifies the type of cluster to create ("remote", "local", or None). Defaults to "local". + cluster_mode (str, optional): Specifies the type of cluster to create ("coiled", "ec2", "local", or None). Defaults to "local". dataset_config (dict): Configuration dictionary for the dataset. clear_existing_data (bool, optional): Flag to clear existing data. Defaults to None. @@ -45,7 +43,7 @@ def __init__(self, **kwargs): start_time (float): The start time of the handler. optimised_bucket_name (str): Name of the optimised bucket. root_prefix_cloud_optimised_path (str): Root prefix path of the location of cloud optimised files. - cluster_mode (str): Specifies the type of cluster to create ("remote", "local", or None). + cluster_mode (str): Specifies the type of cluster to create ("coiled", "local", or None). dataset_config (dict): Configuration dictionary for the dataset. cloud_optimised_format (str): Format for cloud optimised files. dataset_name (str): Name of the dataset. @@ -53,7 +51,7 @@ def __init__(self, **kwargs): logger (logging.Logger): Logger for logging information, warnings, and errors. cloud_optimised_output_path (str): S3 path for cloud optimised output. clear_existing_data (bool): Flag to clear existing data. - cluster_options (dict): Options for the cluster configuration. + coiled_cluster_options (dict): Options for the cluster configuration. s3_fs (s3fs.S3FileSystem): S3 file system object for accessing S3. Raises: @@ -75,7 +73,7 @@ def __init__(self, **kwargs): ) # Cluster options - valid_clusters = ["remote", "local", None] + valid_clusters = [mode.value for mode in ClusterMode] self.cluster_mode = kwargs.get("cluster_mode", ClusterMode.NONE) if isinstance(self.cluster_mode, Enum): self.cluster_mode = self.cluster_mode.value @@ -114,7 +112,16 @@ def __init__(self, **kwargs): "clear_existing_data", None ) # setting to True will recreate the zarr from scratch at every run! - self.cluster_options = self.dataset_config.get("cluster_options", None) + self.coiled_cluster_options = self.dataset_config.get( + "coiled_cluster_options", None + ) + + self.cluster_manager = ClusterManager( + cluster_mode=self.cluster_mode, + dataset_name=self.dataset_name, + dataset_config=self.dataset_config, + logger=self.logger, + ) self.s3_fs = s3fs.S3FileSystem( anon=False, default_cache_type=None, session=kwargs.get("s3fs_session") @@ -146,15 +153,15 @@ def create_cluster(self): Create a Dask cluster based on the specified cluster_mode. This method creates a Dask cluster either remotely using the Coiled service or locally - depending on the value of the cluster_mode attribute. If remote cluster creation fails, + depending on the value of the cluster_mode attribute. If coiled/ec2 cluster creation fails, it falls back to creating a local cluster. Attributes: - cluster_mode (str): Specifies the type of cluster to create ("remote" or "local"). + cluster_mode (str): Specifies the type of cluster to create ("coiled" or "local"). logger (logging.Logger): Logger for logging information, warnings, and errors. dataset_config (dict): Configuration dictionary containing cluster options. - dataset_name (str): Name of the dataset used for naming the remote cluster. - cluster (Cluster): The created Dask cluster (either remote or local). + dataset_name (str): Name of the dataset used for naming the coiled cluster. + cluster (Cluster): The created Dask cluster (either coiled or local). client (Client): Dask client connected to the created cluster. Raises: @@ -172,111 +179,16 @@ def create_cluster(self): # TODO: quite crazy, but if client and cluster become self.client and self.cluster, then they can't be used # with self.client.submit as they can't be serialize ... what a bloody pain in .. seriously - local_cluster_options = self.dataset_config.get( - "local_cluster_options", - { - "n_workers": 2, - "memory_limit": "8GB", - "threads_per_worker": 2, - }, - ) - dask_distributed_config = load_dataset_config( - str( - importlib.resources.files("aodn_cloud_optimised.config").joinpath( - "distributed.yaml" - ) - ) - ) - - dask.config.set( - dask_distributed_config - ) # to retrieve logging from workers locally + ( + client, + cluster, + self.cluster_mode, + ) = ( + self.cluster_manager.create_cluster() + ) # self.cluster_mode is overwritten if necessary - if self.cluster_mode == "remote": - try: - self.logger.info("Creating a remote cluster") - cluster_options = self.dataset_config.get("cluster_options", None) - if cluster_options is None: - self.logger.error("No cluster options provided in dataset_config") - - cluster_options["name"] = f"Processing_{self.dataset_name}" - - if self.s3_file_uri_list is not None: - # overwrite n_workers value to 1 when only one file needs to be processed - if len(self.s3_file_uri_list) == 1: - cluster_options["n_workers"] = 1 - - # TODO: check how many files need to be processed! Could be useful? - cluster = Cluster(**cluster_options) - with dask.config.set( - **{ - "array.slicing.split_large_chunks": False, - "distributed.scheduler.worker-saturation": "inf", - "dataframe.shuffle.method": "p2p", - } - ): - client = Client(cluster) - self.logger.info( - f"Coiled Cluster dask dashboard available at {cluster.dashboard_link}" - ) - - except Exception as e: - self.logger.warning( - f"Failed to create a Coiled cluster: {e}. Falling back to local cluster." - ) - # Create a local Dask cluster as a fallback - cluster = LocalCluster(**local_cluster_options) - - client = Client(cluster) - self.cluster_mode = "local" - self.logger.info( - f"Local Cluster dask dashboard available at {cluster.dashboard_link}" - ) - elif self.cluster_mode == "local": - self.logger.info("Creating a local Dask cluster") - cluster = LocalCluster(**local_cluster_options) - - client = Client(cluster) - self.logger.info( - f"Local Cluster dask dashboard available at {cluster.dashboard_link}" - ) - elif self.cluster_mode == "none": - client = None - cluster = None - return client, cluster - - client.forward_logging() return client, cluster - def close_cluster(self, client, cluster): - """ - Close the Dask cluster and client. - - This method attempts to close the Dask client and cluster if they are currently open. - It logs successful closure operations and catches any exceptions that occur during - the process, logging them as errors. - - Attributes: - client (Client): The Dask client connected to the cluster. - cluster (Cluster): The Dask cluster (either remote or local). - logger (logging.Logger): Logger for logging information and errors. - - Logs: - Info: Logs a message when the Dask client and cluster are closed successfully. - Error: Logs a message if there is an error while closing the Dask client or cluster. - """ - if client is None: - return - - try: - client.close() - self.logger.info("Successfully closed Dask client.") - - cluster.close() - self.logger.info("Successfully closed Dask cluster.") - except Exception as e: - self.logger.error(f"Error while closing the cluster or client: {e}") - def get_batch_size(self, client=None): """ Calculate the optimal batch size for processing files with Dask on a cluster. @@ -326,41 +238,48 @@ def get_batch_size(self, client=None): ) return batch_size + else: + batch_size = 1 + self.logger.warning( + f"batch size missing from dataset configuration. Defaulting to {batch_size}" + ) - n_workers = self.dataset_config.get("cluster_options", {}).get("n_workers", []) - max_n_workers = max(n_workers) if n_workers else None - n_workers = max_n_workers # - - # retrieve the number of threads - worker_options = self.dataset_config.get("cluster_options", {}).get( - "worker_options", {} - ) - - # Retrieve nthreads if it exists - n_threads = worker_options.get("nthreads", 1) - - # but overwrite values from above if the client exists - if client is not None: - scheduler_info = client.scheduler_info() - nthreads_info = client.nthreads() - - # Calculate the average number of threads per worker - if nthreads_info: - total_threads = sum(nthreads_info.values()) - num_workers = len(nthreads_info) - n_threads = total_threads / num_workers - else: - n_threads = 1 - - # local cluster - if isinstance(client.cluster, LocalCluster): - # Calculate the number of workers available in the local cluster. For remote we keep the dataset config max value - n_workers = len(scheduler_info["workers"]) - - batch_size = int(n_workers * n_threads) # too big? + # TODO: delete the rest below. we shouldnt do this! - self.logger.info(f"Computed optimal batch size: {batch_size}") - return batch_size + # n_workers = self.dataset_config.get("coiled_cluster_options", {}).get("n_workers", []) + # max_n_workers = max(n_workers) if n_workers else None + # n_workers = max_n_workers # + # + # # retrieve the number of threads + # worker_options = self.dataset_config.get("coiled_cluster_options", {}).get( + # "worker_options", {} + # ) + # + # # Retrieve nthreads if it exists + # n_threads = worker_options.get("nthreads", 1) + # + # # but overwrite values from above if the client exists + # if client is not None: + # scheduler_info = client.scheduler_info() + # nthreads_info = client.nthreads() + # + # # Calculate the average number of threads per worker + # if nthreads_info: + # total_threads = sum(nthreads_info.values()) + # num_workers = len(nthreads_info) + # n_threads = total_threads / num_workers + # else: + # n_threads = 1 + # + # # local cluster + # if isinstance(client.cluster, LocalCluster): + # # Calculate the number of workers available in the local cluster. For remote we keep the dataset config max value + # n_workers = len(scheduler_info["workers"]) + # + # batch_size = int(n_workers * n_threads) # too big? + # + # self.logger.info(f"Computed optimal batch size: {batch_size}") + # return batch_size @staticmethod def batch_process_fileset(fileset, batch_size=10): @@ -615,7 +534,7 @@ def cloud_optimised_creation( start_whole_processing = timeit.default_timer() with handler_class(**kwargs_handler_class) as handler_instance: handler_instance.to_cloud_optimised(s3_file_uri_list) - if kwargs_handler_class["cluster_mode"].value: + if kwargs_handler_class["cluster_mode"]: cluster_id = handler_instance.cluster_id else: cluster_id = None @@ -650,13 +569,13 @@ def cloud_optimised_creation( # except Exception as e: # logger.error(f"{i}/{len(s3_file_uri_list)} issue with {f}: {e}") # - # local_cluster_options = { + # local_coiled_cluster_options = { # "n_workers": 2, # "memory_limit": "8GB", # "threads_per_worker": 2, # } # - # cluster = LocalCluster(**local_cluster_options) + # cluster = LocalCluster(**local_coiled_cluster_options) # client = Client(cluster) # # client.amm.start() # Start Active Memory Manager diff --git a/aodn_cloud_optimised/lib/GenericParquetHandler.py b/aodn_cloud_optimised/lib/GenericParquetHandler.py index 5a30f93..ba4aa3f 100755 --- a/aodn_cloud_optimised/lib/GenericParquetHandler.py +++ b/aodn_cloud_optimised/lib/GenericParquetHandler.py @@ -5,6 +5,7 @@ import timeit import traceback import uuid +from concurrent.futures import ThreadPoolExecutor, as_completed from datetime import datetime from typing import Tuple, Generator @@ -1095,10 +1096,14 @@ def task(f, i): self.s3_file_uri_list = s3_file_uri_list client, cluster = self.create_cluster() - if self.cluster_mode == "remote": - self.cluster_id = cluster.cluster_id + + if self.cluster_mode: + if self.cluster_mode == "coiled": + self.cluster_id = cluster.cluster_id + else: + self.cluster_id = cluster.name else: - self.cluster_id = cluster.name + self.cluster_id = "local_execution" batch_size = self.get_batch_size(client=client) @@ -1114,16 +1119,32 @@ def task(f, i): ) batch = s3_file_uri_list[i : i + batch_size] - batch_tasks = [ - client.submit(task, f, idx + 1, pure=False) - for idx, f in enumerate( - batch - ) # Use pure=False for multiprocessing. More efficient to avoid GIL contention - ] - - # timeout = batch_size * 120 # Initial timeout - done, not_done = wait(batch_tasks, return_when="ALL_COMPLETED") + if client: + # Use Dask client for distributed processing + batch_tasks = [ + client.submit(task, f, idx + 1, pure=False) + for idx, f in enumerate( + batch + ) # Use pure=False for multiprocessing. More efficient to avoid GIL contention + ] + + # timeout = batch_size * 120 # Initial timeout + done, not_done = wait(batch_tasks, return_when="ALL_COMPLETED") + else: + # Fall back to local processing with ThreadPoolExecutor + self.logger.info( + "{self.uuid_log}: No client detected; using local processing." + ) + with ThreadPoolExecutor() as executor: + batch_tasks = [ + executor.submit(task, f, idx + 1) for idx, f in enumerate(batch) + ] + for future in as_completed(batch_tasks): + try: + future.result() + except Exception as e: + self.logger.error(f"Error processing task: {e}") ii += 1 # Cleanup memory @@ -1132,7 +1153,8 @@ def task(f, i): # Trigger garbage collection gc.collect() - client.run_on_scheduler(gc.collect) # GC! + if client: + client.run_on_scheduler(gc.collect) # GC! - self.close_cluster(client, cluster) + self.cluster_manager.close_cluster(client, cluster) self.logger.handlers.clear() diff --git a/aodn_cloud_optimised/lib/GenericZarrHandler.py b/aodn_cloud_optimised/lib/GenericZarrHandler.py index 7312032..b491b99 100644 --- a/aodn_cloud_optimised/lib/GenericZarrHandler.py +++ b/aodn_cloud_optimised/lib/GenericZarrHandler.py @@ -40,8 +40,8 @@ def preprocess_xarray(ds, dataset_config): # TODO: this is part a rewritten function available in the GenericHandler class below. # running the class method with xarray as preprocess=self.preprocess_xarray lead to many issues # 1) serialization of the arguments with pickle. - # 2) Running in a dask remote cluster, it seemed like the preprocess function (if donne within mfdataset) - # was actually running locally and using ALL of the local ram. Complete nonsense. + # 2) Running in a dask remote cluster, for some netcdf files, xarray would send the data back to the local machine + # and using ALL of the local ram. Complete nonsense. s3fs bug # https://github.com/fsspec/filesystem_spec/issues/1747 # https://discourse.pangeo.io/t/remote-cluster-with-dask-distributed-uses-the-deployment-machines-memory-and-internet-bandwitch/4637 # https://github.com/dask/distributed/discussions/8913 @@ -50,7 +50,6 @@ def preprocess_xarray(ds, dataset_config): schema = dataset_config.get("schema") logger = get_logger(logger_name) - # TODO: get filename; Should be from https://github.com/pydata/xarray/issues/9142 # ds = ds.assign( @@ -68,6 +67,14 @@ def preprocess_xarray(ds, dataset_config): ds_filtered = ds.drop_vars(vars_to_drop, errors="ignore") ds = ds_filtered + if not ds.data_vars: + logger.error( + f"The dataset has no data variable left. Check the configuration dataset" + ) + raise ValueError( + f"The dataset has no data variable left. Check the configuration dataset" + ) + ########## var_required = schema.copy() var_required.pop(dimensions["time"]["name"]) @@ -850,15 +857,17 @@ def to_cloud_optimised(self, s3_file_uri_list=None): if self.cluster_mode: # creating a cluster to process multiple files at once self.client, self.cluster = self.create_cluster() - if self.cluster_mode == "remote": + if self.cluster_mode == "coiled": self.cluster_id = self.cluster.cluster_id else: self.cluster_id = self.cluster.name + else: + self.cluster_id = "local_execution" self.publish_cloud_optimised_fileset_batch(s3_file_uri_list) if self.cluster_mode: - self.close_cluster(self.client, self.cluster) + self.cluster_manager.close_cluster(self.client, self.cluster) @staticmethod def filter_rechunk_dimensions(dimensions): diff --git a/aodn_cloud_optimised/lib/ParquetDataQuery.py b/aodn_cloud_optimised/lib/ParquetDataQuery.py index db09ee8..92d51de 100644 --- a/aodn_cloud_optimised/lib/ParquetDataQuery.py +++ b/aodn_cloud_optimised/lib/ParquetDataQuery.py @@ -31,6 +31,7 @@ from shapely import wkb from shapely.geometry import Polygon, MultiPolygon from matplotlib.colors import LogNorm, Normalize +from windrose import WindroseAxes REGION: Final[str] = "ap-southeast-2" ENDPOINT_URL = f"https://s3.ap-southeast-2.amazonaws.com" @@ -453,7 +454,7 @@ def plot_time_coverage(ds, time_var="time"): ds (xarray.Dataset): The input dataset containing a 'time' dimension. """ # Convert the time dimension to a pandas DatetimeIndex - ds = ds.sortby("time") + ds = ds.sortby(time_var) time_series = pd.to_datetime(ds[time_var].values) @@ -488,11 +489,147 @@ def plot_time_coverage(ds, time_var="time"): plt.xticks(rotation=45) +def plot_radar_velocity_rose(ds, time_start, time_end, time_name="TIME"): + """ + Plots a wind rose of speed averages over a specified time range. + + Parameters: + - ds: xarray.Dataset + The input dataset containing UCUR, VCUR, LONGITUDE, LATITUDE, and TIME variables. + - time_start: str + The starting time in the format 'YYYY-MM-DDTHH:MM:SS'. + - time_end: str + The ending time in the format 'YYYY-MM-DDTHH:MM:SS'. + - time_name: str, optional + The name of the time coordinate in the dataset. Default is "TIME". + """ + # Select the data in the specified time range + subset = ds.sel({time_name: slice(time_start, time_end)}) + + # Calculate average speed and direction + u_avg = subset.UCUR.mean(dim=time_name).values + v_avg = subset.VCUR.mean(dim=time_name).values + speed_avg = np.sqrt(u_avg**2 + v_avg**2) + + # Calculate direction in degrees (meteorological convention) + direction = (np.arctan2(-u_avg, -v_avg) * 180 / np.pi) % 360 + + # Flatten data for wind rose plotting + speed_flat = speed_avg.flatten() + direction_flat = direction.flatten() + + # Create the wind rose plot + fig = plt.figure(figsize=(8, 8)) + ax = WindroseAxes.from_ax() + ax.bar( + direction_flat, + speed_flat, + bins=np.arange(0, np.nanmax(speed_flat) + 1, 1), + cmap=plt.cm.viridis, + normed=True, + ) + + # Add labels and legend + ax.set_title(f"Velocity Rose: {time_start} to {time_end}") + ax.set_legend(title="Speed (m/s)", loc="lower right", bbox_to_anchor=(1.2, 0)) + + # Show the plot + plt.show() + + +def plot_gridded_radar_velocity( + ds, time_start, time_name="TIME", coastline_resolution="50m" +): + """ + Plotting function for ACORN data with coastlines. + + Parameters: + - ds: xarray.Dataset + The input dataset. + - time_start: str + The starting time in the format '2021-02-21T01:00:00'. + - time_name: str, optional + The name of the time coordinate in the dataset. Default is "TIME". + - coastline_resolution: str, optional + The resolution of the coastlines. Options are "10m", "50m", "110m". Default is "110m". + """ + ds = ds.sortby(time_name) + + # Create a 3x2 grid of subplots with Cartopy projections + fig, axes = plt.subplots( + nrows=3, + ncols=2, + figsize=(15, 15), + subplot_kw={"projection": ccrs.PlateCarree()}, + ) + + # Locate the time index for the starting time + ii = 0 + iTime = list(ds[time_name].values).index( + ds.sel({time_name: time_start}, method="nearest")[time_name] + ) + + # Create a colorbar axis + cbar_ax = fig.add_axes( + [0.92, 0.15, 0.02, 0.7] + ) # Adjust the position and size of the colorbar + + for i in range(3): + for j in range(2): + # Extract data for plotting + uData = ds.UCUR[iTime + ii, :, :] + vData = ds.VCUR[iTime + ii, :, :] + speed = np.sqrt(uData**2 + vData**2) + lonData = ds.LONGITUDE.values + latData = ds.LATITUDE.values + + # Plot speed as a filled contour + p = axes[i, j].pcolor( + lonData, latData, speed, transform=ccrs.PlateCarree(), cmap="viridis" + ) + + # Plot velocity vectors + # axes[i, j].quiver( + # lonData, latData, uData, vData, + # transform=ccrs.PlateCarree(), scale=1, scale_units='xy', units='width' + # ) + axes[i, j].quiver( + lonData, + latData, + uData, + vData, + transform=ccrs.PlateCarree(), + units="width", + ) + + # Add coastlines + axes[i, j].coastlines(resolution=coastline_resolution) + + # Add gridlines and title + axes[i, j].gridlines( + draw_labels=True, linestyle="--", color="gray", alpha=0.5 + ) + axes[i, j].set_title( + f"{np.datetime_as_string(ds[time_name].values[iTime + ii])}" + ) + + ii += 1 + + # Add a common colorbar + fig.colorbar(p, cax=cbar_ax, label="Speed (m/s)") + + # Adjust layout for better appearance + plt.tight_layout(rect=[0, 0, 0.9, 1]) # Leave space for the colorbar + + # Show the plot + plt.show() + + def plot_gridded_variable( ds, start_date, - lon_slice, - lat_slice, + lon_slice=None, + lat_slice=None, var_name="sea_surface_temperature", n_days=6, lat_name="lat", @@ -516,6 +653,16 @@ def plot_gridded_variable( ds = ds.sortby(time_name) + # Get latitude and longitude extents + lat_min, lat_max = ds[lat_name].min().item(), ds[lat_name].max().item() + lon_min, lon_max = ds[lon_name].min().item(), ds[lon_name].max().item() + + if lat_slice is None: + lat_slice = (lat_min, lat_max) + + if lon_slice is None: + lon_slice = (lon_min, lon_max) + # Decide on the slice order if ds[lat_name][0] < ds[lat_name][-1]: lat_slice = lat_slice @@ -523,15 +670,12 @@ def plot_gridded_variable( # Reverse the slice lat_slice = lat_slice[::-1] - # Get latitude and longitude extents - lat_min, lat_max = ds[lat_name].min().item(), ds[lat_name].max().item() - lon_min, lon_max = ds[lon_name].min().item(), ds[lon_name].max().item() - # Test if lat_slice and lon_slice are within bounds if not (lat_min <= lat_slice[0] <= lat_max and lat_min <= lat_slice[1] <= lat_max): raise ValueError( f"Latitude slice {lat_slice} is out of bounds. Dataset latitude extent is ({lat_min}, {lat_max})" ) + if not (lon_min <= lon_slice[0] <= lon_max and lon_min <= lon_slice[1] <= lon_max): raise ValueError( f"Longitude slice {lon_slice} is out of bounds. Dataset longitude extent is ({lon_min}, {lon_max})" @@ -584,7 +728,7 @@ def plot_gridded_variable( try: data = ds[var_name].sel( { - time_name: date.strftime("%Y-%m-%d"), + time_name: date.strftime("%Y-%m-%d %H:%M:%S"), lon_name: slice(lon_slice[0], lon_slice[1]), lat_name: slice(lat_slice[0], lat_slice[1]), } @@ -593,7 +737,7 @@ def plot_gridded_variable( # Check for NaNs if data.isnull().all(): print( - f"No valid data for {date.strftime('%Y-%m-%d')}, skipping this date." + f"No valid data for {date.strftime('%Y-%m-%d %H:%M:%S')}, skipping this date." ) continue @@ -634,7 +778,7 @@ def plot_gridded_variable( try: data = ds[var_name].sel( { - time_name: date.strftime("%Y-%m-%d"), + time_name: date.strftime("%Y-%m-%d %H:%M:%S"), lon_name: slice(lon_slice[0], lon_slice[1]), lat_name: slice(lat_slice[0], lat_slice[1]), } @@ -642,7 +786,9 @@ def plot_gridded_variable( # Skip if no valid data is found for the date if data.isnull().all(): - print(f"No data for {date.strftime('%Y-%m-%d')}, skipping plot.") + print( + f"No data for {date.strftime('%Y-%m-%d %H:%M:%S')}, skipping plot." + ) continue var_units = ds[var_name].attrs.get("units", "unknown units") @@ -667,11 +813,11 @@ def plot_gridded_variable( ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False) # Set the title with the date - ax.set_title(date.strftime("%Y-%m-%d")) + ax.set_title(date.strftime("%Y-%m-%d %H:%M:%S")) except Exception as err: - print(f"Error processing date {date.strftime('%Y-%m-%d')}: {err}") - ax.set_title(f"No data for {date.strftime('%Y-%m-%d')}") + print(f"Error processing date {date.strftime('%Y-%m-%d %H:%M:%S')}: {err}") + ax.set_title(f"No data for {date.strftime('%Y-%m-%d %H:%M:%S')}") ax.axis("off") # Create a single colorbar for all plots diff --git a/aodn_cloud_optimised/lib/clusterLib.py b/aodn_cloud_optimised/lib/clusterLib.py index 8594868..f402acb 100644 --- a/aodn_cloud_optimised/lib/clusterLib.py +++ b/aodn_cloud_optimised/lib/clusterLib.py @@ -1,11 +1,162 @@ +import importlib +import logging from enum import Enum +import dask.config +from coiled import Cluster as CoiledCluster +from dask.distributed import Client, LocalCluster +from dask_cloudprovider.aws import EC2Cluster + +from .config import load_dataset_config + class ClusterMode(Enum): LOCAL = "local" - REMOTE = "remote" + COILED = "coiled" + EC2 = "ec2" NONE = None def parse_cluster_mode(value): return ClusterMode(value) + + +# TODO: +# WARNING CLIENT AND CLUSTER should not be self! This creates some serialization issue. Create a simple example to lodge a bug to dask + + +class ClusterManager: + def __init__(self, cluster_mode, dataset_name, dataset_config, logger=None): + self.cluster_mode = parse_cluster_mode(cluster_mode) + self.dataset_name = dataset_name + self.dataset_config = dataset_config + self.logger = logger or logging.getLogger(__name__) + self.local_cluster_options = { + "n_workers": 2, + "memory_limit": "8GB", + "threads_per_worker": 2, + } + self.coiled_cluster_default_options = { + "n_workers": [1, 2], + "scheduler_vm_types": "t3.small", + "worker_vm_types": "t3.medium", + "allow_ingress_from": "me", + "compute_purchase_option": "spot_with_fallback", + "worker_options": {"nthreads": 4, "memory_limit": "8GB"}, + } + + self.ec2_cluster_default_options = ( + { + "n_workers": 1, + "scheduler_instance_type": "t3.xlarge", + "worker_instance_type": "t3.2xlarge", + "security": False, + "docker_image": "ghcr.io/aodn/aodn_cloud_optimised:latest", + }, + ) + self.ec2_cluster_default_adapt_options = {"minimum": 1, "maximum": 120} + + def _apply_common_dask_config(self): + """Apply common Dask configurations.""" + dask.config.set( + { + "array.slicing.split_large_chunks": False, + "distributed.scheduler.worker-saturation": "inf", + "dataframe.shuffle.method": "p2p", + } + ) + + dask_distributed_config = load_dataset_config( + str( + importlib.resources.files("aodn_cloud_optimised.config").joinpath( + "distributed.yaml" + ) + ) + ) + + dask.config.set(dask_distributed_config) + + def _create_client_and_cluster(self, cluster_constructor, options=None): + """Generic method to create a cluster and its corresponding client.""" + try: + cluster = cluster_constructor(**options) + self._apply_common_dask_config() + client = Client(cluster) + self.logger.info(f"Cluster dask dashboard: {cluster.dashboard_link}") + if client: + client.forward_logging() + except Exception as e: + self.logger.warning( + f"Failed to create a {cluster_constructor} cluster: {e}. Falling back to local cluster." + ) + self.cluster_mode = ClusterMode.LOCAL # overwrite value + return self.create_local_cluster() + return client, cluster, self.cluster_mode.value + + def create_local_cluster(self): + return self._create_client_and_cluster(LocalCluster, self.local_cluster_options) + + def create_coiled_cluster(self): + coiled_cluster_options = self.dataset_config.get("coiled_cluster_options", None) + if coiled_cluster_options is None: + self.logger.warning( + f"Missing coiled_cluster_options in dataset_config. Using default value {self.coiled_cluster_default_options}" + ) + coiled_cluster_options = self.coiled_cluster_default_options + + coiled_cluster_options["name"] = f"Processing_{self.dataset_name}" + + return self._create_client_and_cluster( + CoiledCluster, options=coiled_cluster_options + ) + + def create_ec2_cluster(self): + ec2_cluster_options = self.dataset_config.get("ec2_cluster_options", None) + + if ec2_cluster_options is None: + self.logger.warning( + f"Missing ec2_cluster_options entry in dataset_config. Using default value {self.ec2_cluster_default_options}" + ) + ec2_cluster_options = self.ec2_cluster_default_options + + cluster = EC2Cluster(**ec2_cluster_options) + ec2_adapt_options = self.dataset_config.get("ec2_adapt_options", None) + if ec2_adapt_options: + cluster.adapt(**ec2_adapt_options) + else: + self.logger.warning( + f"Missing ec2_adapt_options entry in dataset_config. Using default value {self.ec2_cluster_default_adapt_options}" + ) + cluster.adapt(**self.ec2_cluster_default_adapt_options) + + self._apply_common_dask_config() + client = Client(cluster) + self.logger.info(f"EC2 Cluster dask dashboard: {cluster.dashboard_link}") + + return client, cluster, self.cluster_mode + + def create_cluster(self): + + if self.cluster_mode == ClusterMode.LOCAL: + return self.create_local_cluster() + elif self.cluster_mode == ClusterMode.COILED: + return self.create_coiled_cluster() + elif self.cluster_mode == ClusterMode.EC2: + return self.create_ec2_cluster() + elif self.cluster_mode == ClusterMode.NONE: + client, cluster = None, None + return client, cluster, self.cluster_mode.value + else: + raise ValueError(f"Unsupported cluster mode: {self.cluster_mode}") + + def close_cluster(self, client, cluster): + if not client or not cluster: + return + + try: + client.close() + self.logger.info("Successfully closed Dask client.") + cluster.close() + self.logger.info("Successfully closed Dask cluster.") + except Exception as e: + self.logger.error(f"Error while closing the cluster or client: {e}") diff --git a/docs/_static/recordings/dataset_config.cast b/docs/_static/recordings/dataset_config.cast index f541f09..8a4cec9 100644 --- a/docs/_static/recordings/dataset_config.cast +++ b/docs/_static/recordings/dataset_config.cast @@ -120,7 +120,7 @@ [31.219221, "o", " \r\n \r\n \r\n \r\n \r\n \r\u001b[65;1H"] [31.257713, "o", "\u001b[?1004h"] [31.446211, "o", "\u001b]112\u0007\u001b[2 q\u001b]112\u0007\u001b[2 q\u001b[34h\u001b[?25h"] -[31.458564, "o", "\u001b[?25l\u001b[H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m a/c/d/vessel_xbt_realtime_nonqc.json \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;235m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;239m buffers \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 1 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 2 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mdataset_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 3 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlogger_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mn_workers\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 7 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m1\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 8 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m20\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 9 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b["] +[31.458564, "o", "\u001b[?25l\u001b[H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m a/c/d/vessel_xbt_realtime_nonqc.json \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;235m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;239m buffers \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 1 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 2 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mdataset_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 3 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlogger_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcoiled_cluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mn_workers\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 7 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m1\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 8 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m20\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 9 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b["] [31.458796, "o", "48;5;235m]\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 10 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mscheduler_vm_types\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mt3.small\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 11 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mworker_vm_types\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mt3.medium\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 12 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mallow_ingress_from\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mme\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 13 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcompute_purchase_option\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mspot_with_fallback\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 14 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mworker_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 15 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mnthreads\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m4\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 16 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mmemory_limit\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m8GB\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 17 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m "] [31.458925, "o", " \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 18 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 19 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mbatch_size\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m5\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 20 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mmetadata_uuid\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m35234913-aa3c-48ec-b9a4-77f822f66ef8\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 21 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mgattrs_to_variables\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 22 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 23 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m]\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 24 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mpartition_keys\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 25 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mtimestamp\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 26 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mpolygon\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m "] [31.459039, "o", " \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 27 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m]\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 28 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtime_extent\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 29 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtime\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 30 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mpartition_timestamp_period\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 31 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 32 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mspatial_extent\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 33 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlat\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 34 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlon\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 35 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mspatial_resolution\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m0\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[3"] @@ -140,10 +140,10 @@ [32.596995, "o", "\u001b[?25l\r\u001b[4;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 3 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlogger_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"cloud_optimised_format\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237mparquet\u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m, \u001b[64;258H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m2%\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m ㏑:4\u001b[5;5H\u001b[34h\u001b[?25h"] [32.78647, "o", "\u001b[?25l\u001b[65;263H\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m~@k\u001b[5;5H\u001b[34h\u001b[?25h"] [32.786724, "o", "\u001b[?25l\u001b[65;263H \u001b[5;5H\u001b[34h\u001b[?25h"] -[32.790032, "o", "\u001b[?25l\r\u001b[5;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"cluster_options\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;264H\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m5\u001b[6;5H\u001b[34h\u001b[?25h"] +[32.790032, "o", "\u001b[?25l\r\u001b[5;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"coiled_cluster_options\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;264H\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m5\u001b[6;5H\u001b[34h\u001b[?25h"] [32.994395, "o", "\u001b[?25l\u001b[65;263H\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m~@k\u001b[6;5H\u001b[34h\u001b[?25h"] [32.994663, "o", "\u001b[?25l\u001b[65;263H \u001b[6;5H\u001b[34h\u001b[?25h"] -[32.998011, "o", "\u001b[?25l\r\u001b[6;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"n_workers\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;258H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m3%\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m ㏑:6\u001b[7;5H\u001b[34h\u001b[?25h"] +[32.998011, "o", "\u001b[?25l\r\u001b[6;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcoiled_cluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"n_workers\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;258H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m3%\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m ㏑:6\u001b[7;5H\u001b[34h\u001b[?25h"] [33.216744, "o", "\u001b[?25l\u001b[65;263H\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m~@k\u001b[7;5H\u001b[34h\u001b[?25h"] [33.216929, "o", "\u001b[?25l\u001b[65;263H \u001b[7;5H\u001b[34h\u001b[?25h"] [33.218383, "o", "\u001b[?25l\r\u001b[7;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mn_workers\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 7 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;237m1\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m, \u001b[64;264H\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m7\u001b[8;5H\u001b[34h\u001b[?25h"] @@ -443,7 +443,7 @@ [72.300957, "o", " \r\n \r\n \r\n \r\n \r\n \r\u001b[65;1H"] [72.354034, "o", "\u001b[?1004h"] [72.50073, "o", "\u001b]112\u0007\u001b[2 q\u001b]112\u0007\u001b[2 q\u001b[34h\u001b[?25h"] -[72.512489, "o", "\u001b[?25l\u001b[H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m a/c/d/vessel_xbt_realtime_nonqc.json \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;235m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;239m buffers \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 1 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 2 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mdataset_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 3 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlogger_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mn_workers\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 7 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m1\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 8 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m20\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 9 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b["] +[72.512489, "o", "\u001b[?25l\u001b[H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m a/c/d/vessel_xbt_realtime_nonqc.json \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;235m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;246m\u001b[48;5;239m buffers \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 1 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 2 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mdataset_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 3 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlogger_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcoiled_cluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mn_workers\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 7 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m1\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 8 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m20\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 9 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b["] [72.512737, "o", "48;5;235m]\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 10 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mscheduler_vm_types\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mt3.small\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 11 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mworker_vm_types\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mt3.medium\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 12 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mallow_ingress_from\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mme\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 13 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcompute_purchase_option\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mspot_with_fallback\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 14 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mworker_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 15 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mnthreads\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m4\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 16 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mmemory_limit\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m8GB\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 17 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 18 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 19 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mbatch_size\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m5\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 20 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mmetadata_uuid\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m35234913-aa3c-48ec-b9a4-77f822f66ef8\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 21 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mgattrs_to_variables\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 22 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 23 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m]\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 24 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mpartition_keys\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 25 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mtimestamp\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 26 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mpolygon\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m "] [72.512804, "o", " \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 27 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m]\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 28 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtime_extent\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 29 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtime\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 30 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mpartition_timestamp_period\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 31 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 32 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mspatial_extent\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 33 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlat\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 34 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlon\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mFILL UP MANUALLY - CHECK DOCUMENTATION\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 35 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mspatial_resolution\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;235m0\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b"] [72.513497, "o", "[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 36 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 37 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mschema\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 38 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtimestamp\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 39 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtype\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mint64\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 40 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 41 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mpolygon\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 42 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mtype\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mstring\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 43 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m}\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 44 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mfilename\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5"] @@ -462,10 +462,10 @@ [73.597401, "o", "\u001b[?25l\r\u001b[4;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 3 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mlogger_name\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mvessel_xbt_realtime_nonqc\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"cloud_optimised_format\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237mparquet\u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m, \u001b[64;258H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m2%\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m ㏑:4\u001b[5;5H\u001b[34h\u001b[?25h"] [73.786253, "o", "\u001b[?25l\u001b[65;263H\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m~@k\u001b[5;5H\u001b[34h\u001b[?25h"] [73.786512, "o", "\u001b[?25l\u001b[65;263H \u001b[5;5H\u001b[34h\u001b[?25h"] -[73.789795, "o", "\u001b[?25l\r\u001b[5;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"cluster_options\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;264H\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m5\u001b[6;5H\u001b[34h\u001b[?25h"] +[73.789795, "o", "\u001b[?25l\r\u001b[5;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 4 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcloud_optimised_format\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235mparquet\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m, \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"coiled_cluster_options\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;264H\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m5\u001b[6;5H\u001b[34h\u001b[?25h"] [74.162482, "o", "\u001b[?25l\u001b[65;263H\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m~@k\u001b[6;5H\u001b[34h\u001b[?25h"] [74.162737, "o", "\u001b[?25l\u001b[65;263H \u001b[6;5H\u001b[34h\u001b[?25h"] -[74.166014, "o", "\u001b[?25l\r\u001b[6;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"n_workers\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;258H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m3%\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m ㏑:6\u001b[7;5H\u001b[34h\u001b[?25h"] +[74.166014, "o", "\u001b[?25l\r\u001b[6;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 5 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mcoiled_cluster_options\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m{\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;237m\"n_workers\"\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[64;258H\u001b[m\u000f\u001b[38;5;235m\u001b[48;5;246m3%\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m ㏑:6\u001b[7;5H\u001b[34h\u001b[?25h"] [74.338103, "o", "\u001b[?25l\u001b[65;263H\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m~@k\u001b[7;5H\u001b[34h\u001b[?25h"] [74.33836, "o", "\u001b[?25l\u001b[65;263H \u001b[7;5H\u001b[34h\u001b[?25h"] [74.340827, "o", "\u001b[?25l\r\u001b[7;1H\u001b[m\u000f\u001b[38;5;243m\u001b[48;5;235m 6 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;142m\u001b[48;5;235mn_workers\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m: \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m[\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;235m \r\n\u001b[m\u000f\u001b[38;5;214m\u001b[48;5;237m 7 \u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m \u001b[m\u000f\u001b[38;5;175m\u001b[48;5;237m1\u001b[m\u000f\u001b[38;5;223m\u001b[48;5;237m, \u001b[64;264H\u001b[0;1m\u000f\u001b[38;5;235m\u001b[48;5;246m7\u001b[8;5H\u001b[34h\u001b[?25h"] diff --git a/docs/_static/recordings/precommit.cast b/docs/_static/recordings/precommit.cast index f6bf0ee..b75b679 100644 --- a/docs/_static/recordings/precommit.cast +++ b/docs/_static/recordings/precommit.cast @@ -111,8 +111,8 @@ [23.638003, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────────────────────────────\u001b[m\r\u001b[147C\u001b[;34m┐\u001b[m\r\u001b[148C\r\u001b[148C\u001b[;m \r\u001b[148C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;31m•\u001b[m\r\u001b[73C\u001b[;m \r\u001b[74C\u001b[;31maodn_cloud_optimised/bin/create_aws_registry_dataset.py\u001b[m\r\u001b[129C\u001b[;m:\r\u001b[130C\u001b[;38;2;6;122;0m311\u001b[m\r\u001b[133C\u001b[;m:\r\u001b[134C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[135C\u001b[;38;2;249;38;114mdef\u001b[m\r\u001b[138C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[139C\u001b[;38;2;166;226;46mmain\u001b[m\r\u001b[143C\u001b[;38;2;248;248;242m(): \u001b[m\r\u001b[147C\u001b[;34m│\u001b[m\r\u001b[148C\r\u001b[148C\u001b[;m \r\u001b[148C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────────────────────────────\u001b[m\r\u001b[147C\u001b[;34m┘\u001b[m\r\u001b[148C\r\u001b[148C\u001b[;m \r\u001b[148C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[76C\u001b[;38;2;117;113;94m\"\"\"\u001b[m\r\u001b[79C\r\u001b[79C\u001b[;m \r\u001b[79C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m Main function to convert JSON files to AWS OpenData Registry format.\u001b[m\r\u001b[144C\r\u001b[144C\u001b[;m \r\u001b[144C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;117;113;94;48;2;63;0;1m The script can be run in \u001b[m\r\u001b[101C\u001b[;48;2;144;16;17mthree\u001b[m\r\u001b[106C\u001b[;1;38;2;117;113;94;48;2;63;0;1m ways:\u001b[m\r\u001b[112C\r\u001b[112C\u001b[;m \r\u001b[112C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94;48;2;0;40;0m The script can be run in \u001b[m\r\u001b[101C\u001b[;38;2;117;113;94;48;2;0;96;0mdifferent\u001b[m\r\u001b[110C\u001b[;38;2;117;113;94;48;2;0;40;0m ways:\u001b[m\r\u001b[116C\r\u001b[116C\u001b[;m \r\u001b[116C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m 1. Convert a specific JSON file to AWS OpenData Registry format.\u001b[m\r\u001b[140C\r\u001b[140C\u001b[;m \r\u001b[140C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m 2. Convert all JSON files in the directory.\u001b[m\r\u001b[119C\r\u001b[119C\u001b[;m \r\u001b[119C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m 3. Run interactively to list all available JSON files and prompt the user to choose one to con\u001b[1B\r\u001b[72C\u001b[;38;2;117;113;94m\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94;48;2;0;40;0m Important:\u001b[m\r\u001b[86C\r\u001b[86C\u001b[;m \r\u001b[86C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94;48;2;0;40;0m If the -g option is provided, the script will download metadata from the GeoNetwork metada\u001b[1B\r\u001b[72C\u001b[;38;2;117;113;94;48;2;0;40;0m\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94;48;2;0;40;0m record and prompt the user to choose to replace existing values or not.\u001b[m\r\u001b[151C\r\u001b[151C\u001b[;m \r\u001b[151C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m Args (optional):\u001b[m\r\u001b[92C\r\u001b[92C\u001b[;m \r\u001b[92C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m -f, --file (str): Name of a specific JSON file to convert.\u001b[m\r\u001b[138C\r\u001b[138C\u001b[;m \r\u001b[138C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m -d, --dire"] [23.63834, "o", "ctory (str): Output directory to save converted YAML files.\u001b[m\r\u001b[149C\r\u001b[149C\u001b[;m \r\u001b[149C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m -a, --all: Convert all JSON files in the directory.\u001b[m\r\u001b[131C\r\u001b[131C\u001b[;m \r\u001b[131C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94;48;2;0;40;0m -g, --geonetwork: Retrieve metadata fields from GeoNetwork3 metadata record\u001b[m\r\u001b[155C\r\u001b[155C\u001b[;m \r\u001b[155C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m If the directory is not specified, a temporary directory is created.\u001b[m\r\u001b[144C\r\u001b[144C\u001b[;m \r\u001b[144C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;117;113;94m \"\"\"\u001b[m\r\u001b[79C\r\u001b[79C\u001b[;m \r\u001b[79C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[35A\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1B\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[36A\r\u001b[4C\u001b[?25h\u001b[?7h"] [24.740636, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[2C\u001b[;100m \u001b[m\u001b[;m \u001b[;m[ \u001b[m\u001b[;32mM\u001b[m\u001b[;m] aodn_cloud_optimised/bin/create_aws_registry_dataset.py\u001b[m\u001b[1B\r\u001b[2C\u001b[;1;38;5;32;48;5;237m▶\u001b[m\u001b[;48;5;237m \u001b[m\u001b[;1;38;5;254;48;5;237m[\u001b[m\u001b[;1;33;48;5;237mM\u001b[m\u001b[;1;38;5;254;48;5;237m\u001b[m\u001b[;1;32;48;5;237mM\u001b[m\u001b[;1;38;5;254;48;5;237m] aodn_cloud_optimised/config/dataset/argo.json\u001b[m\u001b[18B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[37A\r\u001b[4C\u001b[?25h\u001b[?7h"] -[24.805057, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┐\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;31m•\u001b[m\r\u001b[73C\u001b[;m \r\u001b[74C\u001b[;31maodn_cloud_optimised/config/dataset/argo.json\u001b[m\r\u001b[119C\u001b[;m:\r\u001b[120C\u001b[;38;2;6;122;0m3\u001b[m\r\u001b[121C\u001b[;m: \r\u001b[123C\u001b[;34m│\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┘\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"logger_name\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[89C\u001b[;38;2;230;219;116m\"argo\"\u001b[m\r\u001b[95C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[96C\r\u001b[96C\u001b[;m \r\u001b[96C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"handler_class\"\u001b[m\r\u001b[89C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[91C\u001b[;38;2;230;219;116m\"ArgoHandler\"\u001b[m\r\u001b[104C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[105C\r\u001b[105C\u001b[;m \r\u001b[105C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"cloud_optimised_format\"\u001b[m\r\u001b[98C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[100C\u001b[;38;2;230;219;116m\"parquet\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[74C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"cluster_options\"\u001b[m\r\u001b[95C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[98C\r\u001b[98C\u001b[;m \r\u001b[98C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"n_workers\"\u001b[m\r\u001b[91C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: [\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m2\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m80\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;248;248;242;48;2;63;0;1m],\u001b[m\r\u001b[82C\r\u001b[82C\u001b[;m \r\u001b[82C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"scheduler_vm_types\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[102C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[113C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[114C\r\u001b[114C\u001b[;m \r\u001b[114C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_vm_types\"\u001b[m\r\u001b[97C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[99C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[110C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[111C\r\u001b[111C\u001b[;m \r\u001b[111C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"allow_ingress_from\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[1"] -[24.805483, "o", "02C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"me\"\u001b[m\r\u001b[106C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"compute_purchase_option\"\u001b[m\r\u001b[105C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[107C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"spot_with_fallback\"\u001b[m\r\u001b[127C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[128C\r\u001b[128C\u001b[;m \r\u001b[128C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_options\"\u001b[m\r\u001b[96C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[99C\r\u001b[99C\u001b[;m \r\u001b[99C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[74C\u001b[;38;2;253;151;31;48;2;0;40;0m\"cluster_options\"\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"n_workers\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242;48;2;0;40;0m: [\u001b[m\r\u001b[90C\r\u001b[90C\u001b[;m \r\u001b[90C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m2\u001b[m\r\u001b[79C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m80\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m ],\u001b[m\r\u001b[78C\r\u001b[78C\u001b[;m \r\u001b[78C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"scheduler_vm_types\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_vm_types\"\u001b[m\r\u001b[93C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[95C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[106C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"allow_ingress_from\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"me\"\u001b[m\r\u001b[102C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[103C\r\u001b[103C\u001b[;m \r\u001b[103C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"compute_purchase_option\"\u001b[m\r\u001b[101C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[103C\u001b[;38;2;230;219;116;48;2;0;40;0m\"spot_with_fallback\"\u001b[m\r\u001b[123C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_options\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[95C\r\u001b[95C\u001b[;m \r\u001b[95C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"nthreads\"\u001b[m\r\u001b[88C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[90C\u001b[;38;2;190;132;255m8\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[92C\r\u001b[92C\u001b[;m \r\u001b[92C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"memory_limit\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[94C\u001b[;38;2;230;219;116m\"12GB\"\u001b[m\r\u001b[100C\r\u001b[100C\u001b[;m "] +[24.805057, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┐\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;31m•\u001b[m\r\u001b[73C\u001b[;m \r\u001b[74C\u001b[;31maodn_cloud_optimised/config/dataset/argo.json\u001b[m\r\u001b[119C\u001b[;m:\r\u001b[120C\u001b[;38;2;6;122;0m3\u001b[m\r\u001b[121C\u001b[;m: \r\u001b[123C\u001b[;34m│\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┘\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"logger_name\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[89C\u001b[;38;2;230;219;116m\"argo\"\u001b[m\r\u001b[95C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[96C\r\u001b[96C\u001b[;m \r\u001b[96C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"handler_class\"\u001b[m\r\u001b[89C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[91C\u001b[;38;2;230;219;116m\"ArgoHandler\"\u001b[m\r\u001b[104C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[105C\r\u001b[105C\u001b[;m \r\u001b[105C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"cloud_optimised_format\"\u001b[m\r\u001b[98C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[100C\u001b[;38;2;230;219;116m\"parquet\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[74C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"coiled_cluster_options\"\u001b[m\r\u001b[95C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[98C\r\u001b[98C\u001b[;m \r\u001b[98C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"n_workers\"\u001b[m\r\u001b[91C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: [\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m2\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m80\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;248;248;242;48;2;63;0;1m],\u001b[m\r\u001b[82C\r\u001b[82C\u001b[;m \r\u001b[82C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"scheduler_vm_types\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[102C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[113C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[114C\r\u001b[114C\u001b[;m \r\u001b[114C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_vm_types\"\u001b[m\r\u001b[97C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[99C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[110C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[111C\r\u001b[111C\u001b[;m \r\u001b[111C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"allow_ingress_from\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[1"] +[24.805483, "o", "02C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"me\"\u001b[m\r\u001b[106C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"compute_purchase_option\"\u001b[m\r\u001b[105C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[107C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"spot_with_fallback\"\u001b[m\r\u001b[127C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[128C\r\u001b[128C\u001b[;m \r\u001b[128C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_options\"\u001b[m\r\u001b[96C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[99C\r\u001b[99C\u001b[;m \r\u001b[99C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[74C\u001b[;38;2;253;151;31;48;2;0;40;0m\"coiled_cluster_options\"\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"n_workers\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242;48;2;0;40;0m: [\u001b[m\r\u001b[90C\r\u001b[90C\u001b[;m \r\u001b[90C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m2\u001b[m\r\u001b[79C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m80\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m ],\u001b[m\r\u001b[78C\r\u001b[78C\u001b[;m \r\u001b[78C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"scheduler_vm_types\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_vm_types\"\u001b[m\r\u001b[93C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[95C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[106C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"allow_ingress_from\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"me\"\u001b[m\r\u001b[102C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[103C\r\u001b[103C\u001b[;m \r\u001b[103C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"compute_purchase_option\"\u001b[m\r\u001b[101C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[103C\u001b[;38;2;230;219;116;48;2;0;40;0m\"spot_with_fallback\"\u001b[m\r\u001b[123C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_options\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[95C\r\u001b[95C\u001b[;m \r\u001b[95C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"nthreads\"\u001b[m\r\u001b[88C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[90C\u001b[;38;2;190;132;255m8\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[92C\r\u001b[92C\u001b[;m \r\u001b[92C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"memory_limit\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[94C\u001b[;38;2;230;219;116m\"12GB\"\u001b[m\r\u001b[100C\r\u001b[100C\u001b[;m "] [24.80574, "o", " \r\u001b[100C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m }\u001b[m\r\u001b[77C\r\u001b[77C\u001b[;m \r\u001b[77C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[36A\r\u001b[4C\u001b[?25h\u001b[?7h"] [26.475957, "o", "\u001b[?7l\u001b[?25l\r\u001b[5C\u001b[;1;38;5;110m < \u001b[m\u001b[;38;5;144m19/19 +S (1)\u001b[m\u001b[;38;5;59m \u001b[m\u001b[;38;5;59m────────────────────────────────────────────────\u001b[m\u001b[;m \u001b[2B\r\u001b[2C\u001b[;100m \u001b[m\u001b[;92;100m✓\u001b[m\u001b[;m[\u001b[m\u001b[;33mM\u001b[m\u001b[;m\u001b[m\u001b[;32mM\u001b[m\u001b[;m] aodn_cloud_optimised/config/dataset/argo.json\u001b[m\u001b[1B\r\u001b[2C\u001b[;1;38;5;32;48;5;237m▶\u001b[m\u001b[;48;5;237m \u001b[m\u001b[;1;38;5;254;48;5;237m[ \u001b[m\u001b[;1;32;48;5;237mM\u001b[m\u001b[;1;38;5;254;48;5;237m] notebooks/GetAodnData.ipynb\u001b[m\u001b[17B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[37A\r\u001b[4C\u001b[?25h\u001b[?7h"] [26.684918, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\u001b[1A\r\u001b[162C\u001b[;1;38;5;148m⠋ \u001b[m\u001b[;7;38;5;144m1/3588\u001b[m\u001b[1B\r\u001b[72C\r\u001b[72C\u001b[;34m──────────────────────────────────\u001b[m\r\u001b[106C\u001b[;34m┐\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;31m•\u001b[m\r\u001b[73C\u001b[;m \r\u001b[74C\u001b[;31mnotebooks/GetAodnData.ipynb\u001b[m\r\u001b[101C\u001b[;m:\r\u001b[102C\u001b[;38;2;6;122;0m18\u001b[m\r\u001b[104C\u001b[;m: \r\u001b[106C\u001b[;34m│\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;34m──────────────────────────────────\u001b[m\r\u001b[106C\u001b[;34m┘\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[75C\u001b[;38;2;230;219;116m\"execution_count\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[94C\u001b[;38;2;190;132;255m1\u001b[m\r\u001b[95C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[96C\r\u001b[96C\u001b[;m \r\u001b[96C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[75C\u001b[;38;2;230;219;116m\"id\"\u001b[m\r\u001b[79C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[81C\u001b[;38;2;230;219;116m\"2ceaf7d3-430a-49ba-a18b-aaf9a30f2196\"\u001b[m\r\u001b[119C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[120C\r\u001b[120C\u001b[;m \r\u001b[120C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[75C\u001b[;38;2;230;219;116m\"metadata\"\u001b[m\r\u001b[85C\u001b[;38;2;248;248;242m: {},\u001b[m\r\u001b[90C\r\u001b[90C\u001b[;m \r\u001b[90C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[75C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"outputs\"\u001b[m\r\u001b[84C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: [\u001b[m\r\u001b[87C\r\u001b[87C\u001b[;m \r\u001b[87C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m {\u001b[m\r\u001b[77C\r\u001b[77C\u001b[;m \r\u001b[77C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[77C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"name\"\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[85C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"stdout\"\u001b[m\r\u001b[93C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[77C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"output_type\"\u001b[m\r\u001b[90C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[92C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"stream\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[101C\r\u001b[101C\u001b[;m \r\u001b[101C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[77C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"text\"\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: [\u001b[m\r\u001b[86C\r\u001b[86C\u001b[;m \r\u001b[86C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/\u001b[1B\r\u001b[72C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m ]\u001b[m\r\u001b[78C\r\u001b[78C\u001b[;m \r\u001b[78C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m },\u001b[m\r\u001b[78C\r\u001b[78C\u001b[;m \r\u001b[78C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m {\u001b[m\r\u001b[77C\r\u001b[77C\u001b[;m \r\u001b[77C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[77C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"name\"\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[85C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"stderr\"\u001b[m\r\u001b[93C\u001b[;1;38;2;248;248;242;48;2;"] @@ -121,8 +121,8 @@ [26.685407, "o", "2;48;2;63;0;1m,\u001b[m\r\u001b[156C\r\u001b[156C\u001b[;m \r\u001b[156C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[32m+\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mdask\u001b[m\r\u001b[115C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[121C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[124C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[130C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==2024.6.2\u001b[m\r\u001b[143C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[149C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[152C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[154C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[155C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[156C\r\u001b[156C\u001b[;m \r\u001b[156C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[31m-\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mdistributed\u001b[m\r\u001b[122C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[128C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[131C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[137C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==2024.7.0\u001b[m\r\u001b[150C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[156C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[159C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[161C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[162C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[163C\r\u001b[163C\u001b[;m \r\u001b[163C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[32m+\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mdistributed\u001b[m\r\u001b[122C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[128C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[131C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[137C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==2024.6.2\u001b[m\r\u001b[150C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[156C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[159C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[161C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[162C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[163C\r\u001b[163C\u001b[;m \r\u001b[163C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[31m-\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mjsondiff\u001b[m\r\u001b[119C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[125C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[128C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[134C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==2.1.2\u001b[m\r\u001b[144C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[150C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[153C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[155C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[156C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[157C\r\u001b[157C\u001b[;m \r\u001b[157C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[32m+\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mjsondiff\u001b[m\r\u001b[119C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[125C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[128C\u001b[;1;38;2;190;13"] [26.685497, "o", "2;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[134C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==2.1.1\u001b[m\r\u001b[144C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[150C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[153C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[155C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[156C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[157C\r\u001b[157C\u001b[;m \r\u001b[157C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[31m-\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mjsonschema\u001b[m\r\u001b[121C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[127C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[130C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[136C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==4.23.0\u001b[m\r\u001b[147C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[153C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[156C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[158C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[159C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[160C\r\u001b[160C\u001b[;m \r\u001b[160C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\" \u001b[m\r\u001b[80C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[86C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[32m+\u001b[m\r\u001b[91C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[97C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[39m \u001b[m\r\u001b[102C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[108C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[1mjsonschema\u001b[m\r\u001b[121C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[127C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[130C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[136C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[2m==4.22.0\u001b[m\r\u001b[147C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\u001b\u001b[m\r\u001b[153C\u001b[;1;38;2;230;219;116;48;2;63;0;1m[0m\u001b[m\r\u001b[156C\u001b[;1;38;2;190;132;255;48;2;63;0;1m\\n\u001b[m\r\u001b[158C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"\u001b[m\r\u001b[159C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[160C\r\u001b[160C\u001b[;m \r\u001b[160C\u001b[35A\r\u001b[170C\u001b[;38;5;59m│\u001b[m\r\u001b[162C\u001b[;1;38;5;148m⠋ \u001b[m\u001b[;7;38;5;144m1/3588\u001b[m\u001b[1A\r\u001b[4C\u001b[?25h\u001b[?7h\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\r\u001b[164C\u001b[;1;38;5;148m\u001b[m\u001b[;7;38;5;144m1/3588\u001b[m\u001b[1A\r\u001b[4C\u001b[?25h\u001b[?7h"] [26.89053, "o", "\u001b[?7l\u001b[?25l\u001b[2B\r\u001b[2C\u001b[;1;38;5;32;48;5;237m▶\u001b[m\u001b[;92;48;5;237m✓\u001b[m\u001b[;1;38;5;254;48;5;237m[\u001b[m\u001b[;1;33;48;5;237mM\u001b[m\u001b[;1;38;5;254;48;5;237m\u001b[m\u001b[;1;32;48;5;237mM\u001b[m\u001b[;1;38;5;254;48;5;237m] aodn_cloud_optimised/config/dataset/argo.json\u001b[m\u001b[1B\r\u001b[2C\u001b[;100m \u001b[m\u001b[;m \u001b[;m[ \u001b[m\u001b[;32mM\u001b[m\u001b[;m] notebooks/GetAodnData.ipynb\u001b[m\u001b[17B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[1B\r\u001b[2C\u001b[;m \r\u001b[2C\u001b[37A\r\u001b[4C\u001b[?25h\u001b[?7h"] -[26.956071, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┐\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;31m•\u001b[m\r\u001b[73C\u001b[;m \r\u001b[74C\u001b[;31maodn_cloud_optimised/config/dataset/argo.json\u001b[m\r\u001b[119C\u001b[;m:\r\u001b[120C\u001b[;38;2;6;122;0m3\u001b[m\r\u001b[121C\u001b[;m: \r\u001b[123C\u001b[;34m│\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┘\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"logger_name\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[89C\u001b[;38;2;230;219;116m\"argo\"\u001b[m\r\u001b[95C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[96C\r\u001b[96C\u001b[;m \r\u001b[96C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"handler_class\"\u001b[m\r\u001b[89C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[91C\u001b[;38;2;230;219;116m\"ArgoHandler\"\u001b[m\r\u001b[104C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[105C\r\u001b[105C\u001b[;m \r\u001b[105C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"cloud_optimised_format\"\u001b[m\r\u001b[98C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[100C\u001b[;38;2;230;219;116m\"parquet\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[74C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"cluster_options\"\u001b[m\r\u001b[95C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[98C\r\u001b[98C\u001b[;m \r\u001b[98C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"n_workers\"\u001b[m\r\u001b[91C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: [\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m2\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m80\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;248;248;242;48;2;63;0;1m],\u001b[m\r\u001b[82C\r\u001b[82C\u001b[;m \r\u001b[82C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"scheduler_vm_types\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[102C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[113C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[114C\r\u001b[114C\u001b[;m \r\u001b[114C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_vm_types\"\u001b[m\r\u001b[97C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[99C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[110C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[111C\r\u001b[111C\u001b[;m \r\u001b[111C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"allow_ingress_from\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[1"] -[26.956198, "o", "02C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"me\"\u001b[m\r\u001b[106C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"compute_purchase_option\"\u001b[m\r\u001b[105C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[107C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"spot_with_fallback\"\u001b[m\r\u001b[127C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[128C\r\u001b[128C\u001b[;m \r\u001b[128C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_options\"\u001b[m\r\u001b[96C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[99C\r\u001b[99C\u001b[;m \r\u001b[99C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[74C\u001b[;38;2;253;151;31;48;2;0;40;0m\"cluster_options\"\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"n_workers\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242;48;2;0;40;0m: [\u001b[m\r\u001b[90C\r\u001b[90C\u001b[;m \r\u001b[90C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m2\u001b[m\r\u001b[79C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m80\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m ],\u001b[m\r\u001b[78C\r\u001b[78C\u001b[;m \r\u001b[78C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"scheduler_vm_types\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_vm_types\"\u001b[m\r\u001b[93C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[95C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[106C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"allow_ingress_from\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"me\"\u001b[m\r\u001b[102C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[103C\r\u001b[103C\u001b[;m \r\u001b[103C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"compute_purchase_option\"\u001b[m\r\u001b[101C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[103C\u001b[;38;2;230;219;116;48;2;0;40;0m\"spot_with_fallback\"\u001b[m\r\u001b[123C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_options\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[95C\r\u001b[95C\u001b[;m \r\u001b[95C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"nthreads\"\u001b[m\r\u001b[88C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[90C\u001b[;38;2;190;132;255m8\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[92C\r\u001b[92C\u001b[;m \r\u001b[92C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"memory_limit\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[94C\u001b[;38;2;230;219;116m\"12GB\"\u001b[m\r\u001b[100C\r\u001b[100C\u001b[;m "] +[26.956071, "o", "\u001b[?7l\u001b[?25l\u001b[1B\r\u001b[72C\r\u001b[72C\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┐\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;31m•\u001b[m\r\u001b[73C\u001b[;m \r\u001b[74C\u001b[;31maodn_cloud_optimised/config/dataset/argo.json\u001b[m\r\u001b[119C\u001b[;m:\r\u001b[120C\u001b[;38;2;6;122;0m3\u001b[m\r\u001b[121C\u001b[;m: \r\u001b[123C\u001b[;34m│\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;34m───────────────────────────────────────────────────\u001b[m\r\u001b[123C\u001b[;34m┘\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"logger_name\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[89C\u001b[;38;2;230;219;116m\"argo\"\u001b[m\r\u001b[95C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[96C\r\u001b[96C\u001b[;m \r\u001b[96C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"handler_class\"\u001b[m\r\u001b[89C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[91C\u001b[;38;2;230;219;116m\"ArgoHandler\"\u001b[m\r\u001b[104C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[105C\r\u001b[105C\u001b[;m \r\u001b[105C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[74C\u001b[;38;2;230;219;116m\"cloud_optimised_format\"\u001b[m\r\u001b[98C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[100C\u001b[;38;2;230;219;116m\"parquet\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[74C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[78C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"coiled_cluster_options\"\u001b[m\r\u001b[95C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[98C\r\u001b[98C\u001b[;m \r\u001b[98C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"n_workers\"\u001b[m\r\u001b[91C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: [\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m2\u001b[m\r\u001b[83C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[78C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[82C\u001b[;1;38;2;190;132;255;48;2;63;0;1m80\u001b[m\r\u001b[84C\r\u001b[84C\u001b[;m \r\u001b[84C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;248;248;242;48;2;63;0;1m],\u001b[m\r\u001b[82C\r\u001b[82C\u001b[;m \r\u001b[82C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"scheduler_vm_types\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[102C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[113C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[114C\r\u001b[114C\u001b[;m \r\u001b[114C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_vm_types\"\u001b[m\r\u001b[97C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[99C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"t3.xlarge\"\u001b[m\r\u001b[110C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[111C\r\u001b[111C\u001b[;m \r\u001b[111C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"allow_ingress_from\"\u001b[m\r\u001b[100C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[1"] +[26.956198, "o", "02C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"me\"\u001b[m\r\u001b[106C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"compute_purchase_option\"\u001b[m\r\u001b[105C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: \u001b[m\r\u001b[107C\u001b[;1;38;2;230;219;116;48;2;63;0;1m\"spot_with_fallback\"\u001b[m\r\u001b[127C\u001b[;1;38;2;248;248;242;48;2;63;0;1m,\u001b[m\r\u001b[128C\r\u001b[128C\u001b[;m \r\u001b[128C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;1;38;2;248;248;242;48;2;63;0;1m \u001b[m\r\u001b[76C\u001b[;48;2;144;16;17m \u001b[m\r\u001b[80C\u001b[;1;38;2;253;151;31;48;2;63;0;1m\"worker_options\"\u001b[m\r\u001b[96C\u001b[;1;38;2;248;248;242;48;2;63;0;1m: {\u001b[m\r\u001b[99C\r\u001b[99C\u001b[;m \r\u001b[99C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[74C\u001b[;38;2;253;151;31;48;2;0;40;0m\"coiled_cluster_options\"\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[94C\r\u001b[94C\u001b[;m \r\u001b[94C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"n_workers\"\u001b[m\r\u001b[87C\u001b[;38;2;248;248;242;48;2;0;40;0m: [\u001b[m\r\u001b[90C\r\u001b[90C\u001b[;m \r\u001b[90C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m2\u001b[m\r\u001b[79C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[78C\u001b[;38;2;190;132;255;48;2;0;40;0m80\u001b[m\r\u001b[80C\r\u001b[80C\u001b[;m \r\u001b[80C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m ],\u001b[m\r\u001b[78C\r\u001b[78C\u001b[;m \r\u001b[78C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"scheduler_vm_types\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[109C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[110C\r\u001b[110C\u001b[;m \r\u001b[110C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_vm_types\"\u001b[m\r\u001b[93C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[95C\u001b[;38;2;230;219;116;48;2;0;40;0m\"t3.xlarge\"\u001b[m\r\u001b[106C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[107C\r\u001b[107C\u001b[;m \r\u001b[107C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"allow_ingress_from\"\u001b[m\r\u001b[96C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[98C\u001b[;38;2;230;219;116;48;2;0;40;0m\"me\"\u001b[m\r\u001b[102C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[103C\r\u001b[103C\u001b[;m \r\u001b[103C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"compute_purchase_option\"\u001b[m\r\u001b[101C\u001b[;38;2;248;248;242;48;2;0;40;0m: \u001b[m\r\u001b[103C\u001b[;38;2;230;219;116;48;2;0;40;0m\"spot_with_fallback\"\u001b[m\r\u001b[123C\u001b[;38;2;248;248;242;48;2;0;40;0m,\u001b[m\r\u001b[124C\r\u001b[124C\u001b[;m \r\u001b[124C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242;48;2;0;40;0m \u001b[m\r\u001b[76C\u001b[;38;2;253;151;31;48;2;0;40;0m\"worker_options\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242;48;2;0;40;0m: {\u001b[m\r\u001b[95C\r\u001b[95C\u001b[;m \r\u001b[95C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"nthreads\"\u001b[m\r\u001b[88C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[90C\u001b[;38;2;190;132;255m8\u001b[m\r\u001b[91C\u001b[;38;2;248;248;242m,\u001b[m\r\u001b[92C\r\u001b[92C\u001b[;m \r\u001b[92C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m \u001b[m\r\u001b[78C\u001b[;38;2;253;151;31m\"memory_limit\"\u001b[m\r\u001b[92C\u001b[;38;2;248;248;242m: \u001b[m\r\u001b[94C\u001b[;38;2;230;219;116m\"12GB\"\u001b[m\r\u001b[100C\r\u001b[100C\u001b[;m "] [26.956404, "o", " \r\u001b[100C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;38;2;248;248;242m }\u001b[m\r\u001b[77C\r\u001b[77C\u001b[;m \r\u001b[77C\u001b[1B\r\u001b[72C\u001b[m\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[1B\r\u001b[72C\u001b[;m \r\u001b[72C\u001b[35A\r\u001b[170C\u001b[;38;5;59m \u001b[m\u001b[1A\r\u001b[4C\u001b[?25h\u001b[?7h"] [27.65763, "o", "\u001b[?7l\u001b[?25l\u001b[1A\r\u001b[J\u001b[?1000l\u001b[?1002l\u001b[?1006l\u001b[?25h\u001b[?7h"] [27.676373, "o", " \u001b[32mM\u001b[m aodn_cloud_optimised/bin/create_aws_registry_dataset.py\r\n\u001b[33mM\u001b[m aodn_cloud_optimised/config/dataset/argo.json\r\n \u001b[32mM\u001b[m notebooks/GetAodnData.ipynb\r\n \u001b[32mM\u001b[m notebooks/mooring_ctd_delayed_qc.ipynb\r\n \u001b[32mM\u001b[m notebooks/mooring_temperature_logger_delayed_qc.ipynb\r\n\u001b[36m??\u001b[m .hooks/remove_whitespace.sh\r\n\u001b[36m??\u001b[m Untitled.ipynb\r\n\u001b[36m??\u001b[m aodn_cloud_optimised/bin/gn3_query.py\r\n\u001b[36m??\u001b[m docs/_static/asciinema-player.css\r\n\u001b[36m??\u001b[m docs/_static/asciinema-player.min.js\r\n\u001b[36m??\u001b[m notebooks/NotWorkingExample1.ipynb\r\n\u001b[36m??\u001b[m notebooks/NotWorkingExample2.ipynb\r\n\u001b[36m??\u001b[m notebooks/Untitled.ipynb\r\n\u001b[36m??\u001b[m notebooks/Untitled1.ipynb\r\n\u001b[36m??\u001b[m notebooks/srs_issue.ipynb\r\n\u001b[36m??\u001b[m notebooks/srs_mfdataset_issue_showcase.ipynb\r\n\u001b[36m??\u001b[m notebooks/zarr_creation_mfdataset_test.ipynb\r\n\u001b[36m??\u001b[m precommit.cast\r\n\u001b[36m??\u001b[m test.json\r\n"] diff --git a/docs/development/dataset-configuration.rst b/docs/development/dataset-configuration.rst index d515a32..ce083b2 100644 --- a/docs/development/dataset-configuration.rst +++ b/docs/development/dataset-configuration.rst @@ -564,12 +564,15 @@ See :ref:`creating_the_schema` section above. As for Parquet... Cluster options --------------- -In order to create the dataset on a remote cluster (Coiled), the +In order to create the dataset on a remote cluster, the following configuration needs to be added: +Coiled Cluster configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + .. code:: json - "cluster_options" : { + "coiled_cluster_options" : { "n_workers": [2, 20], "scheduler_vm_types": "t3.small", "worker_vm_types": "t3.large", @@ -601,6 +604,25 @@ documentation `__ will lead to out of memory issues, and higher Global Interpreter Lock (GIL) + +EC2 Cluster configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code:: json + + "ec2_cluster_options": { + "n_workers": 1, + "scheduler_instance_type": "t3.xlarge", + "worker_instance_type": "t3.2xlarge", + "security": false, + "docker_image": "ghcr.io/aodn/aodn_cloud_optimised:latest" + }, + "ec2_adapt_options": { + "minimum": 1, + "maximum": 120 + }, + "batch_size": 1500, + .. _aws-opendata-registry-1: AWS OpenData registry diff --git a/notebooks/README.md b/notebooks/README.md index 8bd00c9..1e854de 100644 --- a/notebooks/README.md +++ b/notebooks/README.md @@ -18,13 +18,41 @@ You can also click on the binder/colab button above to spin the environment and - [mooring_hourly_timeseries_delayed_qc](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/mooring_hourly_timeseries_delayed_qc.ipynb) - [mooring_satellite_altimetry_calibration_validation.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/mooring_satellite_altimetry_calibration_validation.ipynb) - [mooring_temperature_logger_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/mooring_temperature_logger_delayed_qc.ipynb) +- [radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_CapricornBunkerGroup_wave_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb) +- [radar_CapricornBunkerGroup_wind_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CapricornBunkerGroup_wind_delayed_qc.ipynb) +- [radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_CoffsHarbour_wave_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_wave_delayed_qc.ipynb) +- [radar_CoffsHarbour_wind_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoffsHarbour_wind_delayed_qc.ipynb) +- [radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_RottnestShelf_wave_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_wave_delayed_qc.ipynb) +- [radar_RottnestShelf_wind_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_RottnestShelf_wind_delayed_qc.ipynb) +- [radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb) +- [radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb) +- [radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb) - [radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.ipynb) - [receiver_animal_acoustic_tagging_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/receiver_animal_acoustic_tagging_delayed_qc.ipynb) +- [satellite_chlorophylla_carder_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_carder_1day_aqua.ipynb) +- [satellite_chlorophylla_gsm_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_gsm_1day_aqua.ipynb) +- [satellite_chlorophylla_oc3_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_oc3_1day_aqua.ipynb) +- [satellite_chlorophylla_oci_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_chlorophylla_oci_1day_aqua.ipynb) +- [satellite_diffuse_attenuation_coefficent_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_diffuse_attenuation_coefficent_1day_aqua.ipynb) +- [satellite_ghrsst_l3c_1day_nighttime_himawari8.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3c_1day_nighttime_himawari8.ipynb) - [satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3s_1day_daynighttime_multi_sensor_southernocean.ipynb) - [satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_australia.ipynb) - [satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3s_1day_daynighttime_single_sensor_southernocean.ipynb) +- [satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l3s_1day_nighttime_geopolar_multi_sensor_australia.ipynb) - [satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l4_gamssa_1day_multi_sensor_world.ipynb) - [satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_ghrsst_l4_ramssa_1day_multi_sensor_australia.ipynb) +- [satellite_nanoplankton_fraction_oc3_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_nanoplankton_fraction_oc3_1day_aqua.ipynb) +- [satellite_net_primary_productivity_gsm_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_net_primary_productivity_gsm_1day_aqua.ipynb) +- [satellite_net_primary_productivity_oc3_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_net_primary_productivity_oc3_1day_aqua.ipynb) +- [satellite_optical_water_type_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_optical_water_type_1day_aqua.ipynb) +- [satellite_picoplankton_fraction_oc3_1day_aqua.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/satellite_picoplankton_fraction_oc3_1day_aqua.ipynb) - [slocum_glider_delayed_qc.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/slocum_glider_delayed_qc.ipynb) - [vessel_air_sea_flux_product_delayed.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/vessel_air_sea_flux_product_delayed.ipynb) - [vessel_air_sea_flux_sst_meteo_realtime.ipynb](https://githubtocolab.com/aodn/aodn_cloud_optimised/blob/main/notebooks/vessel_air_sea_flux_sst_meteo_realtime.ipynb) diff --git a/notebooks/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..161dc53 --- /dev/null +++ b/notebooks/radar_BonneyCoast_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2278 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Bonneycoast Velocity Hourly Averaged Delayed QC data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_BonneyCoast_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/38dd003d-2f71-4715-bd3f-4b1cfdce391d)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_BonneyCoast_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_radar_velocity(ds, time_start='2020-01-01T00:00:00')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91612657-ab54-446e-aed4-0cebb2b493ea", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..061fa51 --- /dev/null +++ b/notebooks/radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2269 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Capricornbunkergroup Velocity Hourly Averaged Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/8a2d2824-0557-4110-a561-01ec35a9583d)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CapricornBunkerGroup_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "plot_gridded_radar_velocity(ds, time_start='2020-01-01T00:00:00')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37315a39-777a-4cff-9040-6492f1d1622e", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb b/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb new file mode 100644 index 0000000..ec5b1c8 --- /dev/null +++ b/notebooks/radar_CapricornBunkerGroup_wave_delayed_qc.ipynb @@ -0,0 +1,2129 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Capricorn Bunker Group Wave Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CapricornBunkerGroup_wave_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/400a1237-af4d-45c6-a292-788cf0212522)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CapricornBunkerGroup_wave_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m230 packages\u001b[0m \u001b[2min 40ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 208MB\n",
+       "Dimensions:                (LATITUDE: 64, LONGITUDE: 72, TIME: 470)\n",
+       "Coordinates:\n",
+       "  * LATITUDE               (LATITUDE) float64 512B -21.92 -21.96 ... -24.2\n",
+       "  * LONGITUDE              (LONGITUDE) float64 576B 150.8 150.8 ... 153.5 153.6\n",
+       "  * TIME                   (TIME) datetime64[ns] 4kB 2009-08-01T00:30:00 ... ...\n",
+       "Data variables:\n",
+       "    VAVH                   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    VAVH_quality_control   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    VDIRT                  (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    VDIRT_quality_control  (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPDIT                  (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPDIT_quality_control  (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPFM                   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPFM_quality_control   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPPE                   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPPE_quality_control   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPSM                   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WPSM_quality_control   (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "Attributes: (12/36)\n",
+       "    Conventions:                   CF-1.5,IMOS-1.2\n",
+       "    abstract:                      The ACORN facility is producing NetCDF fil...\n",
+       "    acknowledgment:                Data was sourced from the Integrated Marin...\n",
+       "    author:                        Wyatt, Lucy\n",
+       "    author_email:                  lucy.wyatt@jcu.edu.au\n",
+       "    citation:                      The citation in a list of references is: I...\n",
+       "    ...                            ...\n",
+       "    site_code:                     CBG, Capricorn Bunker Group\n",
+       "    source:                        Terrestrial HF radar\n",
+       "    ssr_Stations:                  Tannum Sands (TAN), Lady Elliot Island(LEI)\n",
+       "    time_coverage_end:             2009-09-06T06:30:00Z\n",
+       "    time_coverage_start:           2009-09-06T06:30:00Z\n",
+       "    title:                         IMOS ACORN Capricorn Bunker Group (CBG), o...
" + ], + "text/plain": [ + " Size: 208MB\n", + "Dimensions: (LATITUDE: 64, LONGITUDE: 72, TIME: 470)\n", + "Coordinates:\n", + " * LATITUDE (LATITUDE) float64 512B -21.92 -21.96 ... -24.2\n", + " * LONGITUDE (LONGITUDE) float64 576B 150.8 150.8 ... 153.5 153.6\n", + " * TIME (TIME) datetime64[ns] 4kB 2009-08-01T00:30:00 ... ...\n", + "Data variables:\n", + " VAVH (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " VAVH_quality_control (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " VDIRT (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " VDIRT_quality_control (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPDIT (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPDIT_quality_control (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPFM (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPFM_quality_control (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPPE (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPPE_quality_control (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPSM (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + " WPSM_quality_control (TIME, LATITUDE, LONGITUDE) float64 17MB dask.array\n", + "Attributes: (12/36)\n", + " Conventions: CF-1.5,IMOS-1.2\n", + " abstract: The ACORN facility is producing NetCDF fil...\n", + " acknowledgment: Data was sourced from the Integrated Marin...\n", + " author: Wyatt, Lucy\n", + " author_email: lucy.wyatt@jcu.edu.au\n", + " citation: The citation in a list of references is: I...\n", + " ... ...\n", + " site_code: CBG, Capricorn Bunker Group\n", + " source: Terrestrial HF radar\n", + " ssr_Stations: Tannum Sands (TAN), Lady Elliot Island(LEI)\n", + " time_coverage_end: 2009-09-06T06:30:00Z\n", + " time_coverage_start: 2009-09-06T06:30:00Z\n", + " title: IMOS ACORN Capricorn Bunker Group (CBG), o..." + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaQAAAI4CAYAAAAlAJ2QAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABM80lEQVR4nO3deXxM1/8/8NfNNrJvslqSWPqJSEKFEi2KEKSqTexbhFIEJa0lrZ2Kpa2dtLSWfi2lK1pLrGmJnVqiaRC1JkFkxWS7vz/8MjpNcGeSa254PT3m8UjOvfOeM4O88z7n3HMFURRFEBERGZiRoTtAREQEMCEREZFCMCEREZEiMCEREZEiMCEREZEiMCEREZEiMCEREZEiMCEREZEiMCEREZEiMCFJMGDAAHh6ehq6G/QcDB8+HO3atTN0Nyo1QRAwYsSIZ54XGxuLmjVrQq1WP4deUWXw0iYkQRAkPfbv32/orj5RWloaPvroI3h7e8PCwgKWlpYICAjAzJkzkZmZaejuVTopKSlYuXIlPv74Y0N3RfEOHTqEqVOnluvf2YABA5Cfn48vv/yy4jpGlZqJoTtgKN9++63W92vXrkVcXFyp9nr16mHFihUoLi5+nt17pmPHjqFTp07Izc1F3759ERAQAAA4fvw4Zs+ejfj4eOzatcvAvaxcFi5cCC8vL7Ru3drQXVG8Q4cOYdq0aRgwYADs7Oz0ilGlShWEh4fjiy++wMiRIyEIQsV2kiqdlzYh9e3bV+v7w4cPIy4urlS7EmVmZuLdd9+FsbExTp06BW9vb63jn376KVasWGGg3j1dXl4eLC0tDd2NUgoKCrBu3ToMHTrUIK+v1M9Fbt27d8fcuXOxb98+tGnTxtDdIQN7aYfsdPHfOaQrV65AEAR89tlnWLp0KWrVqgULCwu0b98e165dgyiKmDFjBqpXrw5zc3N06dIFGRkZpeJu374dLVq0gKWlJaytrRESEoLz588/sz9ffvklbty4gS+++KJUMgIAFxcXTJw4Uatt2bJlqF+/PlQqFdzd3REZGak13DJixAhYWVnh/v37peL16tULrq6uKCoq0qnvAwYMgJWVFS5duoROnTrB2toaffr0AQD8/vvv6NatG2rWrAmVSoUaNWpgzJgxePDgQanX37x5M3x8fFClShX4+vrip59+KnNer7i4GAsWLED9+vVRpUoVuLi44P3338e9e/ee+Zn+8ccfuHPnDoKCgrTa9+/fD0EQ8N133+Hjjz+Gq6srLC0t8fbbb+PatWul4hw5cgQdOnSAra0tLCws0KpVKxw8eFDrnKlTp0IQBCQmJqJ3796wt7fHG2+88cS+rV69GoIg4I8//sCoUaPg5OQEOzs7vP/++8jPz0dmZib69+8Pe3t72NvbY9y4cfjvJv55eXn48MMPUaNGDahUKvzvf//DZ599Vuq8kvmfn3/+Gb6+vlCpVKhfvz527Nih1f+xY8cCALy8vDTD21euXNGK9bQYJQICAuDg4IBffvnlie+fXiIiiaIoipGRkeKTPo7w8HDRw8ND831KSooIQGzYsKHo4+MjfvHFF+LEiRNFMzMzsVmzZuLHH38sNm/eXFy0aJE4atQoURAEMSIiQivm2rVrRUEQxA4dOoiLFy8W58yZI3p6eop2dnZiSkrKU/vavHlz0dzcXFSr1ZLe25QpU0QAYlBQkLh48WJxxIgRorGxsdikSRMxPz9fFEVRjI+PFwGImzZt0npuXl6eaGlpKUZGRurc9/DwcFGlUom1a9cWw8PDxdjYWHHt2rWiKIriyJEjxU6dOomzZs0Sv/zyS3HQoEGisbGx2LVrV63X37ZtmygIgujv7y9+8cUX4qRJk0R7e3vR19dX6+9EFEXxvffeE01MTMTBgweLsbGx4vjx40VLS0ut9/kkM2fOFAVBELOysrTa9+3bJwIQ/fz8NH2YMGGCWKVKFfGVV14R79+/rzl3z549opmZmRgYGCh+/vnn4vz580V/f3/RzMxMPHLkSKm/Dx8fH7FLly7ismXLxKVLlz6xb6tWrdL8e+vQoYO4dOlSsV+/fiIAcdy4ceIbb7wh9u7dW1y2bJn41ltviQDENWvWaJ5fXFwstmnTRhQEQXzvvffEJUuWiJ07dxYBiKNHj9Z6LQBigwYNRDc3N3HGjBniggULxFq1aokWFhbinTt3RFEUxT///FPs1auXCECcP3+++O2334rffvutmJubKznGvwUFBYkBAQFP/fuhlwMT0v+nT0JycnISMzMzNe3R0dGa/4wFBQWa9l69eolmZmbiw4cPRVEUxZycHNHOzk4cPHiw1uukpqaKtra2pdr/y97eXmzQoIGk95Weni6amZmJ7du3F4uKijTtS5YsEQGI33zzjSiKj35oVatWTQwLC9N6/qZNm0QAYnx8vM59Dw8PFwGIEyZMKNWvf/8gLxETEyMKgiD+888/mjY/Pz+xevXqYk5OjqZt//79IgCtv5Pff/9dBCCuW7dOK+aOHTvKbP+vvn37io6OjqXaSxJStWrVxOzsbE17yeeycOFCURQffX5169YVg4ODxeLiYq336eXlJbZr107TVpKQevXq9dQ+lShJSP+NHRgYKAqCIA4dOlTTVlhYKFavXl1s1aqVpu3nn38WAYgzZ87Uitu1a1dREATx4sWLmjYAopmZmVbbn3/+KQIQFy9erGmbN2+eCKDMX56kxigxZMgQ0dzcXNJnQS82DtmVQ7du3WBra6v5vmnTpgAezU+ZmJhotefn5+PGjRsAgLi4OGRmZqJXr164c+eO5mFsbIymTZti3759T33d7OxsWFtbS+rj7t27kZ+fj9GjR8PI6PFf9+DBg2FjY4Nff/0VwKOhmm7duuG3335Dbm6u5rzvvvsO1apV0wwp6dP3YcOGlWozNzfXfJ2Xl4c7d+6gefPmEEURp06dAgDcvHkTZ8+eRf/+/WFlZaU5v1WrVvDz89OKt3nzZtja2qJdu3Za/QoICICVldUzP9O7d+/C3t7+icf79++v9Zl37doVbm5u+O233wAAp0+fRnJyMnr37o27d+9qXj8vLw9t27ZFfHx8qYUxus5XDRo0SGviv2nTphBFEYMGDdK0GRsbo3Hjxrh8+bKm7bfffoOxsTFGjRqlFe/DDz+EKIrYvn27VntQUBBq166t+d7f3x82NjZaMZ9Flxj29vZ48OBBmcPF9HJ5aRc1VISaNWtqfV+SnGrUqFFme8lcRnJyMgA8cRLXxsbmqa9rY2ODnJwcSX38559/AAD/+9//tNrNzMxQq1YtzXEA6NGjBxYsWIAtW7agd+/eyM3NxW+//Yb3339f84NQ176bmJigevXqpc67evUqJk+ejC1btpSa48nKytLqe506dUo9v06dOjh58qTm++TkZGRlZcHZ2bnMfqWnp5fZ/m/iU26eXLduXa3vBUFAnTp1NPMmJZ9LeHj4E2NkZWVpJT0vL69n9unfdPn39u/P9J9//oG7u3upX2Lq1aunOf601wEeJQ0pc3H6xCj53LnKjpiQysHY2Fin9pL/eCW/KX/77bdwdXUtdd6/q6uyeHt74/Tp08jPz4eZmZkuXX6qZs2awdPTE5s2bULv3r2xdetWPHjwAD169NCco2vfVSqVVmUGAEVFRWjXrh0yMjIwfvx4eHt7w9LSEjdu3MCAAQP0WmJfXFwMZ2dnrFu3rszjTk5OT32+o6OjTj9wy3p9AJg3bx4aNmxY5jn/rvIA7SpRCl3+vT0tuer7OrrE1CXGvXv3YGFhofPnQS8eJiQDKBnKcHZ2LrWqS4rOnTsjISEBP/zwA3r16vXUcz08PAAASUlJqFWrlqY9Pz8fKSkppV6/e/fuWLhwIbKzs/Hdd9/B09MTzZo1q7C+A8DZs2fx999/Y82aNejfv7+mPS4ursy+X7x4sVSM/7bVrl0bu3fvxuuvv67XDzZvb2+sW7cOWVlZWsOwJUoqoBKiKOLixYvw9/fXvD7wqELU93ORi4eHB3bv3o2cnBytKumvv/7SHNdVRVYzKSkpmmqNXm6cQzKA4OBg2NjYYNasWSgoKCh1/Pbt2099/tChQ+Hm5oYPP/wQf//9d6nj6enpmDlzJoBHY/lmZmZYtGiR1m+nX3/9NbKyshASEqL13B49ekCtVmPNmjXYsWMHunfvXqF9Bx7/9vzv/oiiiIULF2qd5+7uDl9fX6xdu1ZrXuvAgQM4e/as1rndu3dHUVERZsyYUer1CgsLn7mjQGBgIERRxIkTJ8o8vnbtWq1h0u+//x63bt1Cx44dATxavly7dm189tlnWn0tIeVzkUunTp1QVFSEJUuWaLXPnz8fgiBo3oMuSq6ZqogdQU6ePInmzZuXOw5VfqyQDMDGxgbLly9Hv3790KhRI/Ts2RNOTk64evUqfv31V7z++uulfnj8m729PX766Sd06tQJDRs21Nqp4eTJk9iwYQMCAwMBPBqqio6OxrRp09ChQwe8/fbbSEpKwrJly9CkSZNSFwI3atQIderUwSeffAK1Wq01XFcRfQceVSO1a9fGRx99hBs3bsDGxgY//PBDmUNms2bNQpcuXfD6668jIiIC9+7dw5IlS+Dr66v1g79Vq1Z4//33ERMTg9OnT6N9+/YwNTVFcnIyNm/ejIULF6Jr165P7NMbb7wBR0dH7N69u8z5MQcHB7zxxhuIiIhAWloaFixYgDp16mDw4MEAACMjI6xcuRIdO3ZE/fr1ERERgWrVquHGjRvYt28fbGxssHXr1qd+LnLp3LkzWrdujU8++QRXrlxBgwYNsGvXLvzyyy8YPXq01uIDqUr+vX3yySfo2bMnTE1N0blzZ50v7j1x4gQyMjLQpUsXnftALyBDLO1TIn2Wfc+bN0/rvJIlwps3b9ZqL1m2e+zYsVLnBwcHi7a2tmKVKlXE2rVriwMGDBCPHz8uqc83b94Ux4wZI77yyitilSpVRAsLCzEgIED89NNPS11Ps2TJEtHb21s0NTUVXVxcxGHDhon37t0rM+4nn3wiAhDr1KnzxNeW0vfw8HDR0tKyzOcnJiaKQUFBopWVlVi1alVx8ODBmqXBq1at0jp348aNore3t6hSqURfX19xy5YtYlhYmOjt7V0q7ldffSUGBASI5ubmorW1tejn5yeOGzdOvHnz5hPfS4lRo0aVes8lf6cbNmwQo6OjRWdnZ9Hc3FwMCQnRWp5e4tSpU2JoaKjo6OgoqlQq0cPDQ+zevbu4Z88ezTkly75v3779zD6J4pP//TwpTlmfe05OjjhmzBjR3d1dNDU1FevWrSvOmzdPaxm5KD5asv3va85KeHh4iOHh4VptM2bMEKtVqyYaGRlpLQHXJcb48ePFmjVrluoHvZwEUSzH7KfMLl++jC1btuDatWt49913ERAQwIlPAgA0bNgQTk5OpeadyuPy5cvw9vbG9u3b0bZtWwCPdmpo3bo1Nm/e/NQKi3SnVqvh6emJCRMm4IMPPjB0d0gBFDuHdPbsWQQGBmLXrl34+eef0a9fv1ITy/TiKygoQGFhoVbb/v378eeff+LNN9+s0NeqVasWBg0ahNmzZ1doXCrbqlWrYGpqarD9A0l5FDmHdOvWLfTo0QPDhw/HxIkTYWxsjPr16+PgwYOaVU30crhx4waCgoLQt29fuLu746+//kJsbCxcXV1l+UG2fPnyCo9JZRs6dCiTEWlRZEK6fPkyjI2N0bt3b82KLD8/P1y+fBn9+vVDmzZtEBQUVOqCQHrx2NvbIyAgACtXrsTt27dhaWmJkJAQzJ49G46OjobuHhFVIEUmpHv37iEtLQ2XLl1CzZo1sWjRIvz4448YOnQo7t69i+XLl+PUqVOYPXs2LCwsDN1dkpGtrS2+++47g73+m2++Wa6LTIlIOsUsaiguLoYoipqKqGPHjjhx4gT8/f3xxx9/4Oeff0aHDh0AAHPmzMGyZcvw+++/l7lFCRERVT6KqJASExMxa9YspKamwsvLCxEREdi+fTvOnDmD5ORkZGZmokmTJigsLISJiQlatmyJlStX4uHDh4buOhERVRCDr7JLSkpC8+bNUVRUhCZNmuDYsWMYPnw4xo4dC39/f7i5ueH+/ftwdHTU7JP2448/ws7O7pn7k5VQq9XIzs7WeqjVajnfFhER6cigQ3aiKGLixIm4ePGiZp4gJycHixYtwubNm9GiRQvMmDEDr732GpycnNC2bVvcvHkTP//8M/bs2YMGDRpIep2pU6di2rRpWm1TpkzB1KlTK/otEdELSmhXetf6iiLGXZctdmVi8DmkiIgIXL58GQcOHNC05ebm4ssvv8T69evRp08fBAcHY+TIkXj48CGqV6+OqVOnwsfHR/JrqNXqUhWRSqVClbd03zKFiOSl1B/OTEjyM9gckiiKEAQBjRo1QnJyMpKSkjT37LGyssLAgQORlJSEH3/8EaNHj8bevXuRn58PADrfckGlUkGlUlX4eyCilwjv1yQ7g80hlWxf36lTJyQlJWHu3LmazTJFUYS9vT0mTZqEQ4cOae5oaWZmVqH3/yEiIuUw+Cq72rVrY9OmTejYsSPMzc0xdepUVK1aFQBgamoKf39/ODg4GLiXRPTSM/gSsBefwRMSAM3mld26dcOtW7fQvXt3+Pv7Y+3atUhPT+eODERkeByyk53BFzX828mTJxEVFYUrV67AxMQExsbG2LhxI1599VVZXk/OSUoi0o9SJ/iFjvJdhC9uvypb7MpEERVSiUaNGmHLli3IyMhATk4O3NzcNMN3REQGxQJJdopKSMCjO5La2NgYuhtERPScKS4hEREpEueQZMd1I0REpAiskIiIpOCv77LjR0xERIrAComISArOIcmOCYmISArmI9lxyI6IiBSBFRIRkRRGLJHkxgqJiIgUgRUSEZEULJBkxwqJiIgUgRUSEZEUXPYtO1ZIRESkCKyQiIikYIEkOyYkIiIpuOxbdhyyIyIiRWCFREQkBQsk2bFCIiIiRWCFREQkBZd9y44VEhERKQIrJCIiKbjKTnaskIiISBFYIRERScECSXZMSEREUnBRg+w4ZEdERIrAComISAoWSLJjhURERIrAComISAou+5YdKyQiIlIEVkhERFKwQJIdKyQiIlIEVkhERFLwOiTZMSEREUnB8STZ8SMmIiJFYIVERCQFh+xkxwqJiIgUgRUSEZEULJBkxwqJiIgUgRUSEZEUnEOSHSskIiJSBFZIRERS8Nd32fEjJiIiRWCFREQkBeeQZMeEREQkBfOR7DhkR0REisAKiYhICt4xVnaskIiISBFYIRERScFFDbJjhURERIrAhEREJIUg40MHy5cvh7+/P2xsbGBjY4PAwEBs375dc/zhw4eIjIyEo6MjrKysEBYWhrS0NK0YV69eRUhICCwsLODs7IyxY8eisLBQt47IgAmJiKgSqV69OmbPno0TJ07g+PHjaNOmDbp06YLz588DAMaMGYOtW7di8+bNOHDgAG7evInQ0FDN84uKihASEoL8/HwcOnQIa9aswerVqzF58mRDvSUNQRRF0dCdMBShXXVDd4GI/kOMu27oLpTJ6AN/2WIXLzxTruc7ODhg3rx56Nq1K5ycnLB+/Xp07doVAPDXX3+hXr16SEhIQLNmzbB9+3a89dZbuHnzJlxcXAAAsbGxGD9+PG7fvg0zM7Nyvx99sUIiIpJAEATZHvoqKirCxo0bkZeXh8DAQJw4cQIFBQUICgrSnOPt7Y2aNWsiISEBAJCQkAA/Pz9NMgKA4OBgZGdna6osQ+EqOyIiA1Or1VCr1VptKpUKKpWqzPPPnj2LwMBAPHz4EFZWVvjpp5/g4+OD06dPw8zMDHZ2dlrnu7i4IDU1FQCQmpqqlYxKjpccMyRWSEREEgiCfI+YmBjY2tpqPWJiYp7Yl//97384ffo0jhw5gmHDhiE8PByJiYnP8dOQByskIiIDi46ORlRUlFbbk6ojADAzM0OdOnUAAAEBATh27BgWLlyIHj16ID8/H5mZmVpVUlpaGlxdXQEArq6uOHr0qFa8klV4JecYCiskIiIJjARBtodKpdIs4y55PC0h/VdxcTHUajUCAgJgamqKPXv2aI4lJSXh6tWrCAwMBAAEBgbi7NmzSE9P15wTFxcHGxsb+Pj4VNwHpgdWSERElUh0dDQ6duyImjVrIicnB+vXr8f+/fuxc+dO2NraYtCgQYiKioKDgwNsbGwwcuRIBAYGolmzZgCA9u3bw8fHB/369cPcuXORmpqKiRMnIjIyUqckKAcmJCIiCcqzGq4ipaeno3///rh16xZsbW3h7++PnTt3ol27dgCA+fPnw8jICGFhYVCr1QgODsayZcs0zzc2Nsa2bdswbNgwBAYGwtLSEuHh4Zg+fbqh3pIGr0MiIkVR6nVIqg9flS22+vNTssWuTFghERFJoJQK6UXGhEREJAETkvy4yo6IiBSBFRIRkQQskOTHComIiBSBFRIRkQScQ5IfKyQiIlIEVkhERBKwQpIfKyQiIlIEVkhERBIIYIUkNyYkIiIJOGQnPw7ZERGRIrBCIiKSgAWS/FghERGRIrBCIiKSwIglkuxYIRERkSKwQiIikoCr7OTHComIiBSBFRIRkQSskOTHhEREJAHzkfw4ZEdERIrAComISAIO2cmPFRIRESkCKyQiIglYIcmPFRIRESkCKyQiIglYIcmPFRIRESkCKyQiIglYIcmPCYmISALmI/lxyI6IiBSBFRIRkQQcspMfKyQiIlIEVkhERBKwQpIfKyQiIlIEVkhERBIYsUKSHSskIiJSBFZIREQSsECSHxMSEZEEXNQgPw7ZERGRIrBCIiKSQAArJLmxQiIiIkVghUREJAHnkOTHComIiBSBFRIRkQSskOTHComIiBSBFRIRkQQskOTHhEREJAGH7OTHITsiIlIEVkhERBKwQpIfKyQiIlIEVkhERBKwQpIfKyQiIlIEVkhERBKwQJIfKyQiIlIEVkhERBJwDkl+rJCIiEgRmJCIiCQQBEG2hy5iYmLQpEkTWFtbw9nZGe+88w6SkpK0znnzzTdLvcbQoUO1zrl69SpCQkJgYWEBZ2dnjB07FoWFheX+nMqDQ3ZERBIoZcjuwIEDiIyMRJMmTVBYWIiPP/4Y7du3R2JiIiwtLTXnDR48GNOnT9d8b2Fhofm6qKgIISEhcHV1xaFDh3Dr1i30798fpqammDVr1nN9P//GhEREVIns2LFD6/vVq1fD2dkZJ06cQMuWLTXtFhYWcHV1LTPGrl27kJiYiN27d8PFxQUNGzbEjBkzMH78eEydOhVmZmayvocn4ZAdEZEEgiDfQ61WIzs7W+uhVqsl9SsrKwsA4ODgoNW+bt06VK1aFb6+voiOjsb9+/c1xxISEuDn5wcXFxdNW3BwMLKzs3H+/PkK+LT0w4RERGRgMTExsLW11XrExMQ883nFxcUYPXo0Xn/9dfj6+mrae/fujf/7v//Dvn37EB0djW+//RZ9+/bVHE9NTdVKRgA036emplbQu9Idh+yIiCSQcw4pOjoaUVFRWm0qleqZz4uMjMS5c+fwxx9/aLUPGTJE87Wfnx/c3NzQtm1bXLp0CbVr166YTsuAFRIRkYGpVCrY2NhoPZ6VkEaMGIFt27Zh3759qF69+lPPbdq0KQDg4sWLAABXV1ekpaVpnVPy/ZPmnZ4HJiQiIgmUsuxbFEWMGDECP/30E/bu3QsvL69nPuf06dMAADc3NwBAYGAgzp49i/T0dM05cXFxsLGxgY+Pj079qUgcsiMiqkQiIyOxfv16/PLLL7C2ttbM+dja2sLc3ByXLl3C+vXr0alTJzg6OuLMmTMYM2YMWrZsCX9/fwBA+/bt4ePjg379+mHu3LlITU3FxIkTERkZKWmoUC6CKIqiwV7dwIR2Ty9ziej5E+OuG7oLZfJf9rZssc8M3yL53CdVVKtWrcKAAQNw7do19O3bF+fOnUNeXh5q1KiBd999FxMnToSNjY3m/H/++QfDhg3D/v37YWlpifDwcMyePRsmJoarU1ghERFJoJDrYvGsGqJGjRo4cODAM+N4eHjgt99+q6huVQjOIRERkSKwQiIikkApWwe9yFghERGRIrBCIiKSghWS7FghERGRIrBCIiKSgHNI8mOFREREisAKiYhIAhZI8mNCIiKSgEN28uOQHRERKQIrJCIiCVghyY8VEhERKQIrJCIiCVghaUtOTsa+ffuQnp6O4uJirWOTJ0/WKyYTEhER6WTFihUYNmwYqlatCldXV61kLQgCExIRkZxYID02c+ZMfPrppxg/fnyFxuUcEhER6eTevXvo1q1bhcdlQiIikkAQBNkelU23bt2wa9euCo/LITsiIgkqY+KoSIsWLdJ8XadOHUyaNAmHDx+Gn58fTE1Ntc4dNWqUXq8hiM+6H+4LTGhX3dBdIKL/EOOuG7oLZWq2prtssQ+Hb5ItdkXx8vKSdJ4gCLh8+bJer8EKiYhIgpe9QkpJSZH9NTiHREREOpk+fTru379fqv3BgweYPn263nGZkIiIJOCihsemTZuG3NzcUu3379/HtGnT9I7LhERERDoRRbHMRPrnn3/CwcFB77icQyIikqASFjIVzt7eXlPVvfLKK1pJqaioCLm5uRg6dKje8ZmQiIhIkgULFkAURQwcOBDTpk2Dra2t5piZmRk8PT0RGBiod3wmJCIiCSrjXE9FCw8PB/BoCXjz5s1LXX9UXkxIREQSMCE91qpVKxQXF+Pvv/8uc7fvli1b6hWXCYmIiHRy+PBh9O7dG//88w/+u7eCIAgoKirSKy4TEhGRBKyQHhs6dCgaN26MX3/9FW5ubhX22TAhERGRTpKTk/H999+jTp06FRqX1yEREUkgCPI9KpumTZvi4sWLFR6XFRIREelk5MiR+PDDD5Gamlrmbt/+/v56xWVCIiKSgHNIj4WFhQEABg4cqGkTBEGzgwMXNRAR0XMh187fTEhERFKwQtLw8PCQJS4TEhGRBByy03bp0iUsWLAAFy5cAAD4+Pjggw8+QO3atfWOyVV2RESkk507d8LHxwdHjx6Fv78//P39ceTIEdSvXx9xcXF6x2WFREQkgRELJI0JEyZgzJgxmD17dqn28ePHo127dnrFZYVEREQ6uXDhAgYNGlSqfeDAgUhMTNQ7LhMSEZEEvGPsY05OTjh9+nSp9tOnT8PZ2VnvuByyIyIinQwePBhDhgzB5cuX0bx5cwDAwYMHMWfOHERFRekdlwmJiEgCo0pYychl0qRJsLa2xueff47o6GgAgLu7O6ZOnYpRo0bpHZcJiYiIdCIIAsaMGYMxY8YgJycHAGBtbV3uuExIREQSVMa5nuehIhJRCSYkIiIJuAIMaNOmjaTz9u7dq1d8JiQiIpJk//798PDwQEhISKkdvisCExIRkQRc1ADMmTMHq1atwubNm9GnTx8MHDgQvr6+FRafVSgREUkyduxYJCYm4ueff0ZOTg5ef/11vPbaa4iNjUV2dna54zMhERFJwAtjHwsMDMSKFStw69YtREZG4ptvvoG7u3u5kxITEhER6eXkyZM4cOAALly4AF9f33LPK3EOiYhIAs4hPXLz5k2sXr0aq1evRnZ2Nvr27YsjR47Ax8en3LGZkIiISJJOnTph3759aN++PebNm4eQkBCYmFRcGhFEURQrLFolI7SrbuguENF/iHHXDd2FMnXZOli22L90XiFb7IpkZGQENzc3ODs7P3Xu6+TJk3rFZ4VERCQBJ9yBKVOmyBqfCYmIiCRhQiIiUgAuapAfq1AiokokJiYGTZo0gbW1NZydnfHOO+8gKSlJ65yHDx8iMjISjo6OsLKyQlhYGNLS0rTOuXr1KkJCQmBhYQFnZ2eMHTsWhYWFz/OtlMKEREQkgVIujD1w4AAiIyNx+PBhxMXFoaCgAO3bt0deXp7mnDFjxmDr1q3YvHkzDhw4gJs3byI0NFRzvKioCCEhIcjPz8ehQ4ewZs0arF69GpMnT66wz0sfXGVHRIqi1FV2XX99X7bY34d8qfdzb9++DWdnZxw4cAAtW7ZEVlYWnJycsH79enTt2hUA8Ndff6FevXpISEhAs2bNsH37drz11lu4efMmXFxcAACxsbEYP348bt++DTMzswp5X7pihUREJIGRIMj2UKvVyM7O1nqo1WpJ/crKygIAODg4AABOnDiBgoICBAUFac7x9vZGzZo1kZCQAABISEiAn5+fJhkBQHBwMLKzs3H+/Pmnvl5BQQHatm2L5ORknT4/KZiQiIgMLCYmBra2tlqPmJiYZz6vuLgYo0ePxuuvv67ZdTs1NRVmZmaws7PTOtfFxQWpqamac/6djEqOlxx7GlNTU5w5c0bqW9MJExIRkQSCjI/o6GhkZWVpPaKjo5/Zp8jISJw7dw4bN26syLf6TH379sXXX39d4XG57JuIyMBUKhVUKpVOzxkxYgS2bduG+Ph4VK/+eD7c1dUV+fn5yMzM1KqS0tLS4Orqqjnn6NGjWvFKVuGVnPM0hYWF+Oabb7B7924EBATA0tJS6/gXX3yh03spwYRERCSBUq5DEkURI0eOxE8//YT9+/fDy8tL63hAQABMTU2xZ88ehIWFAQCSkpJw9epVBAYGAnh0+4hPP/0U6enpcHZ2BgDExcXBxsZG0iap586dQ6NGjQAAf//9t9ax8txOgwmJiEgCpSSkyMhIrF+/Hr/88gusra01cz62trYwNzeHra0tBg0ahKioKDg4OMDGxgYjR45EYGAgmjVrBgBo3749fHx80K9fP8ydOxepqamYOHEiIiMjJVVq+/btk+W9cQ6JiKgSWb58ObKysvDmm2/Czc1N8/juu+8058yfPx9vvfUWwsLC0LJlS7i6uuLHH3/UHDc2Nsa2bdtgbGyMwMBA9O3bF/3798f06dN16svFixexc+dOPHjwAMCj6q08eB0SESmKUq9D6rszUrbY/xe8VLbYcrh79y66d++Offv2QRAEJCcno1atWhg4cCDs7e3x+eef6xWXFRIREelkzJgxMDU1xdWrV2FhYaFp79GjB3bs2KF3XM4hERFJoJQ5JCXYtWsXdu7cqbW6DwDq1q2Lf/75R++4rJCIiEgneXl5WpVRiYyMDJ2Xr/8bExIRkQRyXhhb2bRo0QJr167VfC8IAoqLizF37ly0bt1a77gcsiMiIp3MnTsXbdu2xfHjx5Gfn49x48bh/PnzyMjIwMGDB/WOywqJiEgCOTdXrWx8fX3x999/44033kCXLl2Ql5eH0NBQnDp1CrVr19Y7LiskIiIJKmPikJOtrS0++eSTCo3JhERERDq7d+8evv76a1y4cAEA4OPjg4iICM1tMPTBITsiIgmUcsdYJYiPj4enpycWLVqEe/fu4d69e1i0aBG8vLwQHx+vd1xWSEREpJPIyEj06NEDy5cvh7GxMYBHt0UfPnw4IiMjcfbsWb3i6p2QMjMzcfToUaSnp6O4uFjrWP/+/fUNS0SkSJxDeuzixYv4/vvvNckIeLQ/XlRUlNZycF3plZC2bt2KPn36IDc3FzY2NlolpyAITEhERC+wRo0a4cKFC/jf//6n1X7hwgU0aNBA77h6JaQPP/wQAwcOxKxZs8q8WpeI6EXD+uixUaNG4YMPPsDFixc1t7Q4fPgwli5ditmzZ2vd4tzf319yXL12+7a0tMTZs2dRq1YtXZ+qKNztm0h5lLrb9/t7R8sW+8s2C2SLLQcjo6evhxMEAaIoQhAEFBUVSY6rV4UUHByM48ePV/qEREQkFeeQHktJSZElruSEtGXLFs3XISEhGDt2LBITE+Hn5wdTU1Otc99+++2K6yERkQIwIT3m4eEhS1zJCemdd94p1VbW3QV1LdGIiIgAHRLSf5d2ExG9TCrjBayVjV47NaxduxZqtbpUe35+frnWoBMR0ctLr4QUERGBrKysUu05OTmIiIgod6eeRI8FgUREFcJIxgc9otdnUbKc77+uX78OW1vbcneqxM2bN3Hs2DFs27atzIqMiIiev2vXruH69cfL848ePYrRo0fjq6++KldcnZZ9v/rqq5rNANu2bQsTk8dPLyoqQkpKCjp06FCuDpU4c+YMunTpAicnJ1y/fh0qlQrR0dEIDQ1F1apVK+Q1iIik4hzSY71798aQIUPQr18/pKamol27dqhfvz7WrVuH1NRUTJ48Wa+4OiWkkpV2p0+fRnBwMKysrDTHzMzM4OnpibCwML068m/Xr19HWFgYIiIiMHjwYLi6uqJr16744IMPcOHCBYwdOxbu7u7lfh0iItLduXPn8NprrwEANm3aBF9fXxw8eBC7du3C0KFDn09CmjJlCgDA09MTPXr0QJUqVfR60Wc5f/48HB0dMXz4cM1eedHR0YiPj8eBAwdga2uLCRMmyPb6RET/xeuQHisoKIBKpQIA7N69W3Ptqbe3N27duqV3XL3mkMLDw1GlShXk5+fj+vXruHr1qtajvK5cuYLLly+jatWqMDMzAwDk5uYiMDAQfn5++Oqrr5Cenl7u1yEikoq3MH+sfv36iI2Nxe+//464uDjNVM3Nmzfh6Oiod1y9ElJycjJatGgBc3NzeHh4wMvLC15eXvD09ISXl5deHSkuLtZcUNulSxdYWFigT58+uHTpEg4ePIiQkBC8/vrrWLNmDWxsbLi8nIjIQObMmYMvv/wSb775Jnr16qXZ4XvLli2aoTx96LWX3YABA2BiYoJt27bBzc2t3JN9iYmJmDVrFlJTU1GnTh107NgR8+fPx8SJEzVvbujQoRg/fjwAwMnJCXl5eeV6TSIiXXBRw2Nvvvkm7ty5g+zsbNjb22vahwwZAktLS73j6pWQTp8+jRMnTsDb21vvFy6RlJSE5s2bo2PHjmjSpAl+++03nDlzBs2aNcPhw4dx48YN3L9/H40aNQIAqNVqWFlZoUaNGgCevAT939Rqdall4yXjn0REpJs2bdrgxx9/1EpGAODg4IB33nkHe/fu1SuuXgnJx8cHd+7c0esF/00URaxduxbBwcHYsGEDAODjjz/GwoULsWnTJjx8+BDLli3TnJ+Tk4NZs2bh5MmTWLp0KQBpv7XExMRg2rRpWm1TpkxR7Db3RKQ8Rrwjksb+/fuRn59fqv3hw4f4/fff9Y6rV0KaM2cOxo0bh1mzZpW527eNjY2kOIIg4ObNm0hNTdW0WVtb44MPPoC5uTk2btyI2bNnY8KECfjzzz8RGxuLLVu2YPv27Trd+iI6OhpRUVFabSqVCt9d+lZyDCJ6PnrU7mfoLtAT/PvGe4mJiVo/u4uKirBjxw5Uq1ZN7/h6JaSgoCAAQNu2bbXadbkhU8m5jRo1QnJyMpKSkjS3w7W2tsbAgQORlJSErVu3YvTo0WjQoAHatWuHcePG6bxwQqVScYiOiMqFc0hAw4YNNZsjtGnTptRxc3NzLF68WO/4eiWkffv26f2CJUr+cjt16oTp06dj7ty5WLhwIaysrCCKIuzt7TFp0iR4eHhgz549CAkJQWhoaLlfl4iI9JOSkgJRFFGrVi0cPXoUTk5OmmNmZmZwdnaGsbGx3vH1SkitWrXS+wX/q3bt2ti0aRM6duwIc3NzTJ06VbM1kKmpKfz9/eHg4FBhr0dEpI/KeL1QRSu5MZ9ctyPSKyEBQGZmJr7++mtcuHABwKMLpQYOHKjX5qqtW7fG5s2b0a1bN9y6dQvdu3eHv78/1q5di/T0dM2KOiIiQxG4qEFLcnIy9u3bh/T09FIJSt+tgwRRj3s6HD9+HMHBwTA3N9dcJ3Ts2DE8ePAAu3bt0izR1tXJkycRFRWFK1euwMTEBMbGxti4cSNeffVVveI9Cxc1ECmPUhc1fJzwiWyxZwV+KltsOaxYsQLDhg1D1apV4erqqjW/JggCTp48qVdcvRJSixYtUKdOHaxYsUKz43dhYSHee+89XL58GfHx8Xp1BgCys7ORkZGBnJwcuLm5ybqzNxMSkfIoNSF9cniibLE/bTZTtthy8PDwwPDhwzWbFVQUvYbsjh8/rpWMAMDExATjxo1D48aNy9UhGxsbycvGiYjo+bt37x66detW4XH12svOxsamzE1Ur127Bmtr63J3iohIabi56mPdunXDrl27KjyuXhVSjx49MGjQIHz22Wdo3rw5AODgwYMYO3YsevXqVaEdJCIiZalTpw4mTZqEw4cPl7k5wqhRo/SKq1dC+uyzzyAIAvr374/CwkKIoggzMzMMGzYMs2fP1qsjRERKJug3oPRC+uqrr2BlZYUDBw7gwIEDWscEQXi+CcnMzAwLFy5ETEwMLl26BODR9UQWFhZ6dYKIiCqPlJQUWeLqlJAGDhwo6bxvvvlGr84QESlVZZzrqWx0SkirV6+Gh4cHXn31VeixWpyIqNJ62feyi4qKwowZM2BpaVlqs+r/+uKLL/R6DZ0S0rBhw7BhwwakpKQgIiICffv25bY+REQvgVOnTqGgoEDz9ZOUJ3HrfGGsWq3Gjz/+iG+++QaHDh1CSEgIBg0ahPbt21e63yB4YSyR8ij1wtjpx6bLFntyE/222nnR6LxsRKVSoVevXoiLi0NiYiLq16+P4cOHw9PTE7m5uXL0kYiIFOr69eu4fr1ibnZarnWMRkZGEAQBoihKugcSEVFlxQtjHysuLsb06dNha2sLDw8PeHh4wM7ODjNmzCjXTuA6JyS1Wo0NGzagXbt2eOWVV3D27FksWbIEV69ehZWVld4dISKiyuGTTz7BkiVLMHv2bJw6dQqnTp3CrFmzsHjxYkyaNEnvuDotahg+fDg2btyIGjVqYODAgdiwYYOsm58SESlFZZsjl9OaNWuwcuVKvP3225o2f39/VKtWDcOHD8enn+q3e7lOCSk2NhY1a9ZErVq1yrxCt8SPP/6oV2eIiEj5MjIy4O3tXard29sbGRkZesfVKSH179+fvyUQ0UvJiFsHaTRo0ABLlizBokWLtNqXLFmCBg0a6B1X5wtjiYheRvxl/LG5c+ciJCQEu3fvRmBgIAAgISEB165dw2+//aZ3XKZ8IiLSSatWrfD3338jNDQUmZmZyMzMRGhoKJKSktCiRQu94+q1uSoR0cuGFdIjV65cQVxcHPLz89GzZ0/4+vpWWGwmJCIikmTfvn1466238ODBAwCP7hT+zTffoG/fvhUSn0N2REQSGEGQ7aGr+Ph4dO7cGe7u7hAEAT///LPW8QEDBkAQBK1Hhw4dtM7JyMhAnz59YGNjAzs7OwwaNOiZu+1MmjQJ7dq1w40bN3D37l0MHjwY48aN07n/T8KERERUyeTl5aFBgwZYunTpE8/p0KEDbt26pXls2LBB63ifPn1w/vx5xMXFYdu2bYiPj8eQIUOe+rrnzp3DrFmz4ObmBnt7e8ybNw/p6em4e/duhbwvDtkREUmgpDmkjh07omPHjk89R6VSwdXVtcxjFy5cwI4dO3Ds2DE0btwYALB48WJ06tQJn332Gdzd3ct8XnZ2ttZmCBYWFjA3N0dWVhYcHR31fDePMSERERmYWq2GWq3WalOpVFCpVHrH3L9/P5ydnWFvb482bdpg5syZmqSRkJAAOzs7TTICgKCgIBgZGeHIkSN49913nxh3586dsLW11XxfXFyMPXv24Ny5c5q2f+/goAsmJCIiCeTcBDUmJgbTpk3TapsyZQqmTp2qV7wOHTogNDQUXl5euHTpEj7++GN07NgRCQkJMDY2RmpqKpydnbWeY2JiAgcHB6Smpj41dnh4eKm2999/X/O1IAh6b7bNhEREJIGgx+IDqaKjo0vdhbU81VHPnj01X/v5+cHf3x+1a9fG/v370bZtW73jlmcnbym4qIGIyMBUKhVsbGy0HuVJSP9Vq1YtVK1aFRcvXgQAuLq6Ij09XeucwsJCZGRkPHHe6XlgQiIiksBIMJLtIbfr16/j7t27cHNzAwAEBgYiMzMTJ06c0Jyzd+9eFBcXo2nTprL350k4ZEdEVMnk5uZqqh0ASElJwenTp+Hg4AAHBwdMmzYNYWFhcHV1xaVLlzBu3DjUqVMHwcHBAIB69eqhQ4cOGDx4MGJjY1FQUIARI0agZ8+eT1xh9zwwIRERSaCkZd/Hjx9H69atNd+XzD+Fh4dj+fLlOHPmDNasWYPMzEy4u7ujffv2mDFjhtYw4Lp16zBixAi0bdsWRkZGCAsLK7V79/PGhEREVMm8+eabEEXxicd37tz5zBgODg5Yv359RXar3JiQiIgkkHOVHT3ChERERDopKirC/PnzsWnTJly9ehX5+flax/W9ayxX2RERSWAkCLI9Kptp06bhiy++QI8ePZCVlYWoqCiEhobCyMhI74t5ASYkIiJJBBn/VDbr1q3DihUr8OGHH8LExAS9evXCypUrMXnyZBw+fFjvuExIRESkk9TUVPj5+QEArKyskJWVBQB466238Ouvv+odlwmJiEgCDtk9Vr16ddy6dQsAULt2bezatQsAcOzYsXLtMMGEREREOnn33XexZ88eAMDIkSMxadIk1K1bF/3798fAgQP1jstVdkREEgjPYYufymL27Nmar3v06AEPDw8cOnQIdevWRefOnfWOy4REREQ6iY+PR/PmzWFi8iiFNGvWDM2aNUNhYSHi4+PRsmVLveIy5RMRScBVdo+1bt26zGuNsrKytLY00hUTEhER6UQUxTL39rt79y4sLS31jsshOyIiCSrjariKFhoaCuDRRrMDBgzQWlFXVFSEM2fOoHnz5nrHZ0IiIiJJbG1tATyqkKytrWFubq45ZmZmhmbNmmHw4MF6x2dCIiKSQEm3nzCUVatWAQA8PT3x0UcflWt4rixMSEREEhhVwsUHcpkyZYoscZmQiIhIZ99///0Td/s+efKkXjG5yo6ISAJBEGR7VDaLFi1CREQEXFxccOrUKbz22mtwdHTE5cuX0bFjR73jMiEREZFOli1bhq+++gqLFy+GmZkZxo0bh7i4OIwaNUqz0ao+mJCIiCQQBCPZHpXN1atXNcu7zc3NkZOTAwDo168fNmzYoHfcyvdJEBGRQbm6ump2aqhZs6bmHkgpKSkQRVHvuExIREQSGEGQ7VHZtGnTBlu2bAEAREREYMyYMWjXrh169OiBd999V++4XGVHREQ6+eqrr1BcXAwAiIyMhKOjIw4dOoS3334b77//vt5xmZCIiCSojKvh5GJkZAQjo8cDbD179kTPnj3LHZcJiYhIgsq4K7dckpOT8csvv+DKlSsQBAG1atXCO++8Ay8vr3LFZUIiIiLJYmJiMHnyZBQXF8PZ2RmiKOL27dsYP348Zs2ahY8++kjv2FzUQEQkAS+MBfbt24eJEyfik08+wZ07d3Dr1i2kpqbi9u3bmDBhAiZMmID4+Hi947NCIiIiSWJjY/Hee+9h6tSpWu0ODg6YPn06UlNTsXz5ct4xlohITlz2DRw9ehT9+vV74vF+/fpprknSBxMSERFJkpaWBk9Pzyce9/LyQmpqqt7xOWRHRCRBZdzip6I9fPgQZmZmTzxuampaaudvXTAhERGRZCtXroSVlVWZx0r2tNMXExIRkQS8DunRvnUrVqx45jn6YkIiIpKgMi3PlsuVK1dkjc9BUSIiUgRWSEREEnDITn6skIiISBFYIRERScA5JPmxQiIiIkVghUREJEFl2uKnsmJCIiIiSYyMjJ45dCkIAgoLC/WKz4RERCQB55CAn3766YnHEhISsGjRIs2tzfXBhEREJIHAKXd06dKlVFtSUhImTJiArVu3ok+fPpg+fbre8fkJExGRzm7evInBgwfDz88PhYWFOH36NNasWQMPDw+9Y7JCIiKSgEN2j2RlZWHWrFlYvHgxGjZsiD179qBFixYVEpsJiYiIJJk7dy7mzJkDV1dXbNiwocwhvPIQRFEUKzRiJfLdpW8N3QUi+o8etZ98R1JD2vrPD7LF7uwRJlvsimRkZARzc3MEBQXB2Nj4ief9+OOPesVnhURERJL0799f1qFLJiQiIgmMOIeE1atXyxqfq+yIiEgRWCEREUnA20/IjwmJiEgCLvuWH4fsiIhIEVghERFJwK2D5MdPmIiIFIEVEhGRBJxDkh8rJCIiUgQmJCIiCYwgyPbQVXx8PDp37gx3d3cIgoCff/5Z67goipg8eTLc3Nw0W/0kJydrnZORkYE+ffrAxsYGdnZ2GDRoEHJzc8vzEZUbExIRUSWTl5eHBg0aYOnSpWUenzt3LhYtWoTY2FgcOXIElpaWCA4OxsOHDzXn9OnTB+fPn0dcXBy2bduG+Ph4DBky5Hm9hTJxc1UiUhSlbq66+8avssUOqhai93MFQcBPP/2Ed955B8Cj6sjd3R0ffvghPvroIwCPbhnh4uKC1atXo2fPnrhw4QJ8fHxw7NgxNG7cGACwY8cOdOrUCdevX4e7u3u535M+WCEREUkgyPhHrVYjOztb66FWq/XqZ0pKClJTUxEUFKRps7W1RdOmTZGQkADg0e3G7ezsNMkIAIKCgmBkZIQjR46U74MqByYkIiIDi4mJga2trdYjJiZGr1ipqakAABcXF612FxcXzbHU1FQ4OztrHTcxMYGDg4PmHEPgsm8iIgnkXPYdHR2NqKgorTaVSiXb6ykVExIRkYGpVKoKS0Curq4AgLS0NLi5uWna09LS0LBhQ8056enpWs8rLCxERkaG5vmGwCE7IiIJ5Fv0XbE/hr28vODq6oo9e/Zo2rKzs3HkyBEEBgYCAAIDA5GZmYkTJ05oztm7dy+Ki4vRtGnTCu2PLlghERFVMrm5ubh48aLm+5SUFJw+fRoODg6oWbMmRo8ejZkzZ6Ju3brw8vLCpEmT4O7urlmJV69ePXTo0AGDBw9GbGwsCgoKMGLECPTs2dNgK+wAJiQiIkmUdMfY48ePo3Xr1prvS+afwsPDsXr1aowbNw55eXkYMmQIMjMz8cYbb2DHjh2oUqWK5jnr1q3DiBEj0LZtWxgZGSEsLAyLFi167u/l33gdEhEpilKvQzpwa5dssVu5tZctdmXCComISALeMVZ+TEhERBJwt2/5cZUdEREpAiskIiIJOGQnP1ZIRESkCKyQiIgk4ByS/FghERGRIrBCIiKSwIi/v8uOnzARESkCKyQiIgk4hyQ/JiQiIgm47Ft+HLIjIiJFYIVERCQBh+zkxwqJiIgUgRUSEZEEnEOSHyskIiJSBFZIREQSsEKSHyskIiJSBFZIRERScJWd7FghERGRIrBCIiKSgHNI8mNCIiKSgBfGyo9DdkREpAiskIiIJOCQnfxYIRERkSKwQiIikoAVkvxYIRERkSKwQiIikoCr7OTHComIiBSBFRIRkQScQ5IfExIRkQRMSPLjkB0RESkCKyQiIgm4qEF+rJCIiEgRWCEREUnAOST5sUIiIiJFYIVERCQB55DkxwqJiIgUgRUSEZEEnEOSHxMSEZEETEjy45AdEREpAiskIiIJuKhBfqyQiIhIEVghERFJwDkk+bFCIiIiRWCFREQkASsk+bFCIiIiRWCFREQkAVfZyY8JiYhIEiYkuXHIjoiIFIEVEhGRBByykx8rJCIiUgRWSEREEnDZt/xYIRERkSKwQiIikoAVkvxYIRERVSJTp06FIAhaD29vb83xhw8fIjIyEo6OjrCyskJYWBjS0tIM2GPpmJCIiCT4bxKoyIeu6tevj1u3bmkef/zxh+bYmDFjsHXrVmzevBkHDhzAzZs3ERoaWpEfhWw4ZEdEJIGShuxMTEzg6upaqj0rKwtff/011q9fjzZt2gAAVq1ahXr16uHw4cNo1qzZ8+6qTlghEREZmFqtRnZ2ttZDrVY/8fzk5GS4u7ujVq1a6NOnD65evQoAOHHiBAoKChAUFKQ519vbGzVr1kRCQoLs76O8mJCIiCQQZPwTExMDW1tbrUdMTEyZ/WjatClWr16NHTt2YPny5UhJSUGLFi2Qk5OD1NRUmJmZwc7OTus5Li4uSE1NfQ6fUvlwyI6IyMCio6MRFRWl1aZSqco8t2PHjpqv/f390bRpU3h4eGDTpk0wNzeXtZ9yY0IiIpJAzq2DVCrVExPQs9jZ2eGVV17BxYsX0a5dO+Tn5yMzM1OrSkpLSytzzklpOGRHRFSJ5ebm4tKlS3Bzc0NAQABMTU2xZ88ezfGkpCRcvXoVgYGBBuylNKyQiIgkUMoqu48++gidO3eGh4cHbt68iSlTpsDY2Bi9evWCra0tBg0ahKioKDg4OMDGxgYjR45EYGCg4lfYAUxIRESVyvXr19GrVy/cvXsXTk5OeOONN3D48GE4OTkBAObPnw8jIyOEhYVBrVYjODgYy5YtM3CvpRFEURQN3QlD+e7St4buAhH9R4/a/QzdhTLduH9FttjVLDxli12ZsEIiIpJAKUN2LzIuaiAiIkVghUREJAkrJLmxQiIiIkVghUREJAHrI/mxQiIiIkVghUREJIGcWwfRI6yQiIhIEVghERFJwgpJbkxIREQSMB3Jj0N2RESkCKyQiIgkYY0kN1ZIRESkCKyQiIgk4LJv+bFCIiIiRWBCIiIiRWBCIiIiReAcEhGRBLxBn/yYkIiIJGBCkh+H7IiISBGYkIiISBGYkIiISBE4h0REJAEvjJUfKyQiIlIEJiQiIlIEJiQiIlIEziEREUnA65DkxwqJiIgUgRUSEZEkrJDkxoRERCQB05H8OGRHRESKwAqJiEgCXhgrP1ZIRESkCKyQiIgkYYUkN1ZIRESkCKyQiIgkYH0kP1ZIRESkCKyQiIgkYY0kNyYkIiIJuOxbfhyyIyIiRWBCIiIiRWBCIiIiReAcEhGRBLwfkvxYIRERkSKwQiIikoQVktxYIRERkSKwQiIikoD1kfyYkIiIJOCFsfLjkB0RESkCKyQiIklYIcmNFRIRESkCKyQiIglYH8mPFRIRESkCKyQiIklYI8mNFRIRESkCKyQiIgl4HZL8WCEREVVCS5cuhaenJ6pUqYKmTZvi6NGjhu5SuTEhERFVMt999x2ioqIwZcoUnDx5Eg0aNEBwcDDS09MN3bVyYUIiIpJAkPGPrr744gsMHjwYERER8PHxQWxsLCwsLPDNN9/I8M6fHyYkIiIDU6vVyM7O1nqo1eoyz83Pz8eJEycQFBSkaTMyMkJQUBASEhKeV5dl8VIvauhRu5+hu0DlpFarERMTg+joaKhUKkN3h15gVYwtZIs9dcZUTJs2TattypQpmDp1aqlz79y5g6KiIri4uGi1u7i44K+//pKtj88DKySq1NRqNaZNm/bE3yaJKoPo6GhkZWVpPaKjow3drefupa6QiIiUQKVSSa7wq1atCmNjY6SlpWm1p6WlwdXVVY7uPTeskIiIKhEzMzMEBARgz549mrbi4mLs2bMHgYGBBuxZ+bFCIiKqZKKiohAeHo7GjRvjtddew4IFC5CXl4eIiAhDd61cmJCoUlOpVJgyZQoXNNBLpUePHrh9+zYmT56M1NRUNGzYEDt27Ci10KGyEURRFA3dCSIiIs4hERGRIjAhERGRIjAhERGRIjAhERGRIjAhERGRIjAhERGRIjAh0UuDVzgQKRsvjKUXUlJSEtavX49//vkHjRs3RqtWreDn5wdRFHkraiKFYoVEL5xz584hMDAQ169fR2ZmJn799Ve0atUKO3fuZDIiUjDu1EAvlLy8PISFhcHPzw/z5s0DAJw8eRJBQUG4f/8+vv32W3Tr1g3FxcUwMuLvY0RKwv+R9EJ5+PAhrl27hmbNmgF4NG/UqFEjtGnTBoGBgejbty+OHDnCZESkQPxfSS+U4uJi2Nra4q+//sLDhw8hCAJSUlKQkJCAkSNHok2bNli8eDGKioq4yIFIYbiogV4oTk5OaNq0KTZt2oTExEQ0bNgQ06dPR3h4OEJDQ3H58mWsXr0aADifRKQwTEhUqV25cgVxcXEwMjKCu7s7OnbsiPnz52PWrFk4ePAgtm/fjkmTJmHcuHEAAFtbW5ibm7M6IlIgJiSqtM6ePYvWrVujbt26uH37NtLS0hAWFoaFCxfi448/BgDk5OTA2tpa85zDhw/Dw8MDxcXFhuo2ET0BV9lRpZSbm4v27dujcePGWLRoEVJTU3H69Gn06dMHAQEBWL58OWrXrq05/88//8SqVauwevVq/PHHH/D19TVg74moLFzUQJWSiYkJ1Go1Xn/9dQCAq6srOnTogISEBJw6dQpjx47VVEFZWVk4e/Ys4uPjsX//fiYjIoViQqJKqaioCGlpaUhKStK0FRQU4JVXXsGePXuwa9cuzJo1C8CjeaOwsDDs3bsXDRs2NFCPiehZmJCoUrK0tERUVBRWrFiBbdu2AQBMTU1RUFAAf39/REdHY9u2bbh79y5EUYS5uTns7OwM22kieiouaqBK4datW7h27Rru3buHoKAgGBsbIzQ0FIcPH8bcuXNhZmaG9u3bw9TUFABQtWpVZGdnw9zcnMu7iSoJVkikeGfOnEFgYCD69euHHj16oH79+ti4cSOqVauGcePGwdbWFhMnTsTGjRsBPBq6u3z5MpydnVFUVGTg3hORVFxlR4p2+/ZttGzZEqGhoRg0aBCqVKmCqKgonDp1Cn369MH48ePx119/ITY2FitXrkT9+vVhbm6OpKQkzhkRVTJMSKRoiYmJCAkJwffff4+AgABN+4QJE7Bt2zZEREQgKioK9+/fx9mzZ7F79244OTmhbdu2qFOnjgF7TkS64hwSKVpBQQEKCwtx//59AMCDBw9gbm6O2bNn48GDB1i8eDHatWsHf39/NGvWTLOpKhFVPqyQSPFee+01WFlZYe/evQAAtVoNlUoFAGjSpAnq1KmDDRs2GLKLRFQBuKiBFCUvLw85OTnIzs7WtH355Zc4f/48evfuDQBQqVQoLCwEALRs2RJ5eXkG6SsRVSwmJFKMxMREhIaGolWrVqhXrx7WrVsHAKhXrx4WLlyIuLg4dOvWDQUFBZr7GaWnp8PS0hKFhYXcMJWokuMcEilCYmIiWrZsif79+6Nx48Y4ceIEIiIi4OPjg1dffRVvv/02LC0tMXz4cPj7+8Pb2xtmZmb49ddfcfjwYZiY8J8yUWXHOSQyuIyMDPTq1Qve3t5YuHChpr1169bw8/PDokWLNG05OTmYOXMmMjIyUKVKFQwbNgw+Pj6G6DYRVTD+WkkGV1BQgMzMTHTt2hXAo7u+GhkZwcvLCxkZGQAe3YpcFEVYW1tjzpw5WucR0YuB/5vJ4FxcXPB///d/aNGiBQBodleoVq2aJuEIggAjIyOtxQ7cEojoxcKERIpQt25dAI+qnpL96ERRRHp6uuacmJgYrFy5UrPCjgmJ6MXCITtSFCMjI4iiqEk2JRXS5MmTMXPmTJw6dYoLGIheUKyQSHFK1tmYmJigRo0a+OyzzzB37lwcP34cDRo0MHDviEgu/FWTFKekKjI1NcWKFStgY2ODP/74A40aNTJwz4hITqyQSLGCg4MBAIcOHULjxo0N3BsikhuvQyJFy8vLg6WlpaG7QUTPARMSEREpAofsiIhIEZiQiIhIEZiQiIhIEZiQiIhIEZiQiIhIEZiQiIhIEZiQSBFEUURQUJDmYth/W7ZsGezs7HD9+nUD9IyInhcmJFIEQRCwatUqHDlyBF9++aWmPSUlBePGjcPixYtRvXr1Cn3NgoKCCo1HROXDhESKUaNGDSxcuBAfffQRUlJSIIoiBg0ahPbt2+PVV19Fx44dYWVlBRcXF/Tr1w937tzRPHfHjh144403YGdnB0dHR7z11lu4dOmS5viVK1cgCAK+++47tGrVClWqVMG6desM8TaJ6Am4UwMpzjvvvIOsrCyEhoZixowZOH/+POrXr4/33nsP/fv3x4MHDzB+/HgUFhZi7969AIAffvgBgiDA398fubm5mDx5Mq5cuYLTp0/DyMgIV65cgZeXFzw9PfH555/j1VdfRZUqVeDm5mbgd0tEJZiQSHHS09NRv359ZGRk4IcffsC5c+fw+++/Y+fOnZpzrl+/jho1aiApKQmvvPJKqRh37tyBk5MTzp49C19fX01CWrBgAT744IPn+XaISCIO2ZHiODs74/3330e9evXwzjvv4M8//8S+fftgZWWleXh7ewOAZlguOTkZvXr1Qq1atWBjYwNPT08AwNWrV7Vic9dwIuXi/ZBIkUxMTDR3hs3NzUXnzp0xZ86cUueVDLl17twZHh4eWLFiBdzd3VFcXAxfX1/k5+drnc+dw4mUiwmJFK9Ro0b44Ycf4OnpWebty+/evYukpCSsWLECLVq0AAD88ccfz7ubRFROHLIjxYuMjERGRgZ69eqFY8eO4dKlS9i5cyciIiJQVFQEe3t7ODo64quvvsLFixexd+9eREVFGbrbRKQjJiRSPHd3dxw8eBBFRUVo3749/Pz8MHr0aNjZ2cHIyAhGRkbYuHEjTpw4AV9fX4wZMwbz5s0zdLeJSEdcZUdERIrAComIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBSBCYmIiBTh/wFR2Nf71BoMWAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nearest date in dataset: Size: 8B\n", + "array('2009-08-01T00:30:00.000000000', dtype='datetime64[ns]')\n", + "Coordinates:\n", + " TIME datetime64[ns] 8B 2009-08-01T00:30:00\n", + "Attributes:\n", + " axis: T\n", + " comment: Given time lies at the middle of the 1 hour averaging p...\n", + " local_time_zone: 8.0\n", + " long_name: time\n", + " standard_name: time\n", + " valid_max: 999999.0\n", + " valid_min: 0.0\n", + "Variable Long Name: sea_surface_wave_significant_height\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/lbesnard/github_repo/aodn_cloud_optimised/notebooks/parquet_queries.py:836: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", + " plt.tight_layout()\n" + ] + }, + { + "data": { + "image/png": "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P37cY/nTTz+txx57zP08PDxcHTt2VHh4uDZv3qw///xTkjRr1ixVqVJFkydPLnZfKlasqDZt2mjr1q2SpDVr1sg0TRmGoS1btujEiRPudc+ePasvv/xSl156qaRzV2hmq1+/fq4rHK306rbbbtOdd94p6dx9MufOnatbb73Vvc158+bp1KlT7ue33Xab+/+vW7dO1157rfuKXMMw1LZtW1WrVk07d+7Unj17JEmbNm3S1Vdfra+++qpIVx3mZPWzWpCvvvpK//znPz1eq1Wrlpo1a6Zvv/021xWIhVm6dKm7tvLly2vdunXumvbv36/p06fr/vvvL3Q72ffY3L9/v77++mv3602bNnXfb7N58+ZFqumFF17QAw884PFaXFycWrVqpYiICH377bd5Xk0sSdWqVVN8fLxiY2MVGhqqP/74Q9u2bXOfC59++qmmTZumsWPH5rv/ovakXLlySkxMVFpamsd3a6VKldS9e3f386Ied2FefPFFlS9fXu3bt9eBAwc8rvSeMmWK/v73v6t27dru10r6nZ+fX375RSNHjvQ4dytVqqQLL7xQu3fv1scff1ys48qeTSAhIUE1atTQunXr3J+blJQUPf744+7zuijfw1WqVCnSfjdu3Ojx/KKLLvL4Ls6pS5cu+vzzz93Ps6fhDwkJ0fDhw/XUU09Jkg4fPqwVK1aoT58+7nWzr6bPdv730dy5c5WUlOR+HhQUpA4dOig2Nlbbt293n+uffPKJbr75Zr333nv51rho0SJJ574TWrZsqT///FNBQUH5ru8rH330kSpXrqw2bdpoy5Yt7n+j/vzzT1144YVKS0tT7dq1lZCQoK+++kppaWmSzp1706dP13333efeljf7BwAAAOA8vh5ZBgAACBSNGjVyX4Fy880351r+3//+15w7d665fv1692uff/55rqt6zpw5416+e/dujysuc17d+NNPP+V5lYxpmubUqVM9tv3SSy9ZOq533nnHYzsHDhzwWJ6VlWVu3brVnDZtmsfr3r5iV1KufZw+fdr9/89fL78rw3744Yd8rwy65557PLZx/pWoX3zxhccywzDM1157zczKyvKo5bXXXnM/T0lJ8fjZ1a9f3zx06JB7+YkTJ8wLL7zQvTw0NNQ8fPhwnrUV5t577/Wo79tvvzVN0zSffPJJ92vZV/FNmDDBNM3c/b/99tu90qvjx4+b5cqVcy+7+OKLPd7bs2dP97KIiAiPK08vvvhi97Lg4GBzzZo17mVZWVnm7bff7rHfefPmWeqXlc+qaRZ8xW7Oq9qvuOIK9/l54sQJs2vXrgWeo3ldWXv+Zybn8p49e3q8v7DPW2FX7plmwVfsHj9+3IyKisp1zuQ8R5YvX27++OOP7ucpKSkez8+XnJzsca506NDBqz0p7DvGqpxXOcbHx5v79u0zTfPcVfK9evXyWP7GG2+431vS7/yCrtgdM2aMx7J27dq5/33IyMgwhwwZkquf58v58895nuRcXq9evVy9Kcr3cGFyXs183XXXFbj+jBkzPNaPjIx0L/vpp588rqYeOnSox3vr16/vXlarVi33zAmZmZlmnTp13MtiY2PNH374wf2+jIyMXLMafP311+7leZ27EyZM8Lhi+Px/v4oj53a9ecVuq1at3N/J33//fa599enTx133ggUL8v38lbR/AAAAAPLHFbsAAABeEh8fr59++kmStGzZMj311FNq1qyZGjRooAYNGqhChQoaPHiwx3sWLFjg8fyPP/7Q9ddf7/FaSEiI+/9/99132rdvn/tehfXr19e8efP0/vvva/v27UpOTtapU6fyvGddfvdsLMpxne8f//iHBgwYoAYNGqhRo0aqUqWK2rRpozZt2ljaflH16tXLfSVotrCwsGJto0GDBnrzzTe1YMECfffdd/r99989rh49365du9xXtn744Ycey4YNG6aRI0fmquX815YvX+5xtWxQUJDuuusuj/ecvzw9PV2ffvqppfsu9u7d231VmnTuXqItW7bU6tWrJUlNmjRRTEyMNm3a5L5K9/yrdbO3cT6rvYqOjta1116r119/XdK5K1n37t2revXq6eDBgx77veaaa1ShQgVJ0u+//66vvvrKvax8+fJ64YUXPO4ZnJyc7LHfxYsXu68ULA4rn9WCZGZmasWKFR6vTZ482X1+litXTo8++qjH1aKF6dChg8e5cOWVV3osz+/KWLssX75cf/31l/t5w4YNNXXqVAUHe/4nZc7zKCYmRr/++qvuuusurV27Vvv27dOJEyd09uzZXPso7DvKaT3J9s9//tP9PRkcHKwBAwZ4nA/n11XS7/yCfPbZZx7PH3roIcXExLjrevrpp/XBBx8U7aAk1axZU//617/cz7PvHZ19Hviq3znl9e9dtoYNG6pnz5764osvJJ3r/8mTJ1WuXDl99dVXHvcJv/nmm91X0W7dulUHDhxwL4uMjNSDDz7ose3Dhw97PF+8eLHatm2bZx2NGzfWY4895nE/4OL++1Ua7rnnHvd3crNmzVShQgWlpKS4lz/44IPuunv16uXx3vPPB2/3DwAAAMD/MLALAADgJf/617+0du1anTlzRocPH9aECRPcy0JDQ9W2bVtdf/31uu222xQaGipJ7ilts61bt67Q/ezdu1d169aVaZpKTEzMNT1wfnJOE1xUXbp0Uf/+/d1Th77//vvuaZElqUaNGurbt6/GjRunVq1aWdpHUfTo0aNE7z916pR69uyZa5rP/Jzfr/N/+S+pSAN0OX+2P/30k3swsajvKaquXbsqPDzcPU3qqlWrNGrUKH355ZeSzvUue2A3e3rm8wdYXS6XLrnkEvfzkvRKOjedafbArmmaeuutt/Tvf/9b77zzjscgzPnTnu7bt89jWUpKise0rnmx2i8rn9WC/PHHH+4pSbO30bRpU491ivvZaNeuncfz7AG6bGfOnCnW9koq52egS5cuuQZ18/LBBx/ohhtuyHMgN6fCvqOc1pNsxamrJN/5hdm/f7/H8wsuuMDjeZ06dRQTE1PkfwvatGmT62ccExPjHthNT08v0naKq3Llyh7Pjxw5UuD6Of/gI+eUz7fddpt7YPfkyZOaP3++brrpJo9pmF0ul2655Rb385w/p0OHDpXo+6hr166OnHo5p5YtW3o8j4qK8hjYbdGihcey8xV0npe0fwAAAAD+x1X4KgAAACiK7t2769tvv9Xdd9+tFi1aeFx1lZ6ervXr12vMmDH629/+VqL9nDx5UtK5exnmHNRt2bKlrrzySiUmJqpbt24eywq6qqkwixcv1qxZszRgwABVqlTJY9nhw4c1e/ZstW/f3n1vw7zkHNg5evRosWqoUaNGsdbPadq0aR4DlYZh6KKLLtLAgQOVmJioiy66yGP9kvTLquyfbXGFh4erS5cu7udr1qzR1q1blZqaKuncuZk9GJ19n93zB3YvvPBCxcXFuZ+XtFcdOnTwGMh8++23JXnez7J58+YeNVthtV92f1bzuu9vce8FXLFiRY/n/jAolFN6erpGjRrl8dmvXLmy+vXrp8TERCUmJioyMrLI23NqT+yuy+p5fv7VodmKcx7mPC6pdHrevn17j+dbtmzxuCd2Tudf6S/lHmi/+uqrPQaL33rrLaWnp3tcvXzppZd63AfZioJ+TiX996u0ZF+tmy3nORQbG2vbvq2e5wAAAEBZw8AuAACAFzVu3Fj/+c9/tGPHDqWlpenAgQNavHixmjdv7l5nwYIF2rdvnySpXr16Hu9/7733ZJpmgY/LL79ckrR27VqP9z755JP69ttvtXDhQs2bN0933HGH144rKChIw4cP18cff6zff/9dKSkp2rZtm8fUimfOnNH06dPdz3Ne6fjnn396PM9Zf2HyGqQojpz7e++997R582YtWLBA8+bN06BBg/J9b/369T2eZ09xXJCcP9s77rij0J/tM888U4wj8nT+FLi///67x8+iR48euvjii92DMrNnz/a4ui/n9Lkl6VW286/G/emnnzRt2jT98MMP7tduvfVWj/Xj4+M9Bp0SEhIK7dfXX39daB35Ke5ntSCVKlVSuXLl3M/PnDmjPXv2eKzzzTffWK7VCXJ+BtatW1foVbjff/+9jh075n7eunVrHTx4UMuWLdO8efP03nvv2VJrtuIOppeGknznFybntPnff/+9x/MDBw54XH3pVFdccYXHlcJ//fWXewaAnHbs2OG+Gjdbzu+n0NBQDRs2zP38iy++0IwZM/Tf//7X/dr531dS7p/TpZdeWujPad68efkeU0n//fI33u4fAAAAgP8pW/91AQAAYKPZs2dr6dKl7ukIg4ODVbt2bV1++eW5psTMnjoy5z0iH3zwwTynIzx06JCmTZumMWPGuF/LyMjwWOf8K9+Sk5P16KOPluyA/t+BAwf0/PPPe0zFGhMTo9atW+vGG2/0WPf8KTFzXqH07rvvuqcA3bRpk5588kmv1FdUBfXrxx9/9LiXa04DBw70eP7GG29o5syZubY/e/Zs9/NevXp57OONN97IdQ9M6dygxdy5c9W/f/+iHEa++vTp4/E8+yrZRo0aqXr16oqOjnbfB3nu3Lke6+Yc2C1Jr7INHTrU43333HOP+/+Hh4frpptu8li/SpUq6tixo/v5rl27NHnyZGVmZnqsd/bsWa1cuVIjR44s8lTROVn5rBYkKCjIYypr6dx0z9kDnydPnsx1f0l/07t3b5UvX979/KefftLo0aM9pqCWzv3Rw48//igp93kUGhrqvjo6KytL9913X673e1NERITH85z39PSFknznF6Zv374e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0r///W+tWLFCu3btUosWLdSgQQOVK1dOsbGxatasmXr37q3WrVtr6NChpTK1DwAAKFvIUgAAANaRpQAAAPzDggUL1LhxY918880KDg7WhAkT9OGHH+rTTz/Va6+9pu7du+vzzz9X/fr1dccdd+j3338v9j6Cbag7IEVGRur999/XxIkTdd9992nnzp165ZVXFBYW5pXtv/7662rYsKG6du3qle3l1KNHD23fvl1PPfWUgoKCVL16ddWoUUM1atRQ9erVtXr1av3zn//UwoUL9eCDD2rs2LEKDQ21pRYAAFD2kKUAAACsI0sBAAA431NPPaXnn39e/fv3l8uV+9ra7FteHDp0SFOmTNHbb7+tcePGFWsfDOwWg8vl0qRJk9SkSRONHDlSv/zyixYsWKBKlSqVaLupqamaO3euHnjgARmG4aVqc6tSpYqeeeaZPJc1aNBAgwYN0sSJE3X//fdr5syZevnll9WjRw/b6gEAAGULWQoAAMA6shQAACgRl3Hu4WtOqMEm69evL9J6NWvW1OTJky3tg6mYLRg6dKhWrlyp3bt3q0uXLvrzzz9LtL0ff/xRaWlpqlOnjpcqtKZChQp64YUXtG3bNhmGoXvuucen9QDeYmaZ+T4AAKWPLAUEjm5Xf5nvAwBgD7IUEDjIUgCA4mJg16LOnTtr3bp1+vPPPzVkyBBlZGRY3lbbtm115ZVXauzYsY64l0jLli1VpUoVNWrUyNelAACAAEWWAgAAsI4sBQAAis0wJMPlgEfgXrF7PtM0NXfuXN15550aPHiwBg0a5PGwioHdEmjYsKHmz5+vNWvWFHsO7PMZhqGZM2cqNDRUN910k7KysrxYZfGZpqkdO3aoZcuWPq0DAAAENrIUAACAdWQpAAAA5xo7dqxuvPFG7d27V+XLl1dMTIzHwyrusVtC3bt317Rp03T77berefPmGjVqlKXtVKpUSW+++ab69Omj5557zqfTzRw+fFgpKSlq0aKFz2oAAABlA1kKAADAOrIUAACAM7311lv68MMPNWDAAK9ulyt2veC2227TmDFjNGbMGK1cudLydnr37q177rlH999/v7Zu3erFCotnx44dksRfRgIAgFJBlgIAALCOLAUAAIrEMJzzKANiYmJUv359r2+XgV0vee6559SzZ08NHjxYe/bssbydxx57TC1bttR1112nkydPerHC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ycjIKPDPf7dZxcJuCGjSpIlmzJihHTt26MILL9TIkSNVp04dTZw4USdOnAh0eQAAAI5GlgIAALCOLAUAgDMYj8cxW7CKj4/X4cOHJUnly5dXfHx8oe3UfqtY2A0hjRo10nvvvaevv/5a3bp10x133KE6derolVde0Z9//hno8gAAAByNLAUAAGAdWQoAAAS7ZcuWKSEhQZK0fPlyLVu2rNB2ar9VLOyGoAYNGuidd97RN998ox49emj06NGqU6eOxo0bR5AGAAA4C7IUAACAdWQpAAACxBPmnC1IdenSRaVLl87/57/brCrtr2LhPvXr19fbb7+tRx55RE899ZTuvvtuPfPMM7r33nt16623Kjo6OtAlAgAAOBZZCk50wSVplt63ep71/6gEAMAKshTs9HeZiNwDACgpq1at0uuvv649e/Zo5syZOuecc/TOO+8oKSlJF1xwgaUxg3dZHEVWt25dTZ06VTt37lS/fv103333qXbt2vr4448DXRoAAIDjkaUAAACsI0sBAIBg9NFHH6lXr16KiorS5s2blZ2dLUlKT0/X008/bXlcFnaRr06dOnrrrbf03XffqX379ho4cKBuvvlmZWZmBro0AAAAxyNLAQAAWEeWAgDAXsYT5pgtFDz55JOaPHmy3nzzTYWHh+fv79SpkzZv3mx53NDoHnySlJSk2bNn64033tB7772n1q1ba+PGjYEuCwAAwBXIUgAAANaRpQAAQDDYuXOnOnfuXGh/XFycjh07ZnlcFnZxWh6PR8OHD9eWLVsUGxurDh06aOzYscrLywt0aQAAAI5HlgIAALCOLAUAANyuatWq2rVrV6H9q1evVu3atS2Py8Iu/lb9+vX1xRdf6N5779VDDz2kiy66SD/++GOgywIAAHAFshQAAIB1ZCkAAPzI43HOFgKGDx+uO+64Q+vWrZPH49H+/fv13nvv6e6771ZKSorlcVnYxVmFh4frqaee0ooVK/TDDz+oRYsWmjFjRqDLAgAAcAWyFAAAgHVkKQAA4Eb333+/rr32WnXv3l3Hjx9X586dddNNN+mWW27RyJEjLY9b2o81Ish17txZX375pW677TZde+21+uSTTzRp0iTFxcUFujQAAADHI0uhJKye1yXQJQAAYAuyFHxBJgIABJrH49FDDz2ke+65R7t27dLx48fVuHFjlStXrljjcscufFK+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lTzmsf3osf3osf3IUv/D4zm5BZoTaigBJ06c0BtvvKHPPvtMzZs3LzTHXnrpJUvj+rSwm5qaqunTp2vOnDmKiYnRwYMHJUlxcXGKiopS1apVT/tl0DVr1iw0wU/nscceU1ZWlvr27avExEQdO3ZMr7zyinJzc9WzZ09fSkWISk5O1qeffqotW7ZoyZIlWrBggcaMGaN7771X5557bn6Y7tGjR1D/JQgABCu3ZxG314/gR5YCgODm9izi9voR/MhSABDcyCLwxVdffaWWLVtKkrZv317gteL8sZdPC7uvvfaaJKlr164F9k+dOlVDhgyxXMQpXbp00aRJk3T99dfr0KFDio+PV6tWrbR48WI1aNCg2OMjdNSuXVsjRozQiBEj9Oeff2rVqlVasGCBFixYoClTpqh06dLq2LGj+vTpoz59+qh58+b81SQAuIDbs4jb60foIEsBQHByexZxe/0IHWQpAAhOZBH4Yvny5baM6/OjmH3ly3u6deumbt26+XwO4O9ERUUpOTlZycnJevnll7V3714tXLhQCxYs0BNPPKEHHnhA1apVU61atVS2bFlFR0cX+N8z/fPf7YuIiCCQA4AN3J5F3F4/QhNZCgCCh9uziNvrR2giSwFA8HB9FvGEyXjCzn6c3ZxQg4v5tLALBIOkpCSlpKQoJSVF2dnZWr16tZYsWaJDhw4pMzNTWVlZOnDggLKysvJ/zszMzP/novwiLlWqlBITE/XMM8/o8ssvJ0wDAICgQZYCAACwjiwFAEDo2Lhxo/79739r3759ysnJKfDarFmzLI3Jwi5CWpkyZdS9e3d17969SMcbY3TixIlC4fp/Q3ZmZqYWLlyoK6+8Uj169NCECRPUsGFDmz8NAABAySJLAQAAWEeWAgCUJCOPjAL/xz5OqKEkvP/++7r++uvVq1cvLV68WMnJyfruu+906NAhDRw40PK4LOwCPvB4PIqKilJUVJQqVKjwt8feeuut+vTTT3X77berefPmGj16tB5++GGVK1euhKoFAABwFrIUAACAdWQpAADc4+mnn9bLL7+s1NRUxcTEaPz48UpKStItt9yiatWqWR6XB1kDNurbt6+2b9+uRx55ROPHj1ejRo304YcfWnoWPwAAQKghSwEAAFhHlgIAIHB2796tfv36SZIiIiKUmZkpj8ejO++8U2+88YblcVnYBWwWGRmpRx55RF9//bVat26tK664Qr169dLOnTsDXRoAAIDjkaUAAACsI0sBAE4xnjDHbKEgPj5ef/zxhyTpnHPO0fbt2yVJx44dU1ZWluVxQ6N7gAMkJSVpzpw5mjdvnnbv3q1mzZrpgQceUGZmZqBLAwAAcDyyFAAAgHVkKQAASlbnzp21ZMkSSdIVV1yhO+64Q8OHD9c111yj7t27Wx6XhV2ghF188cXasWOHHn74YY0bN06NGjXSRx99xGNwAAAAioAsBQAAYB1ZCgCAkjFx4kRdffXVkqSHHnpIo0eP1qFDhzRo0CC99dZblsdlYRcIgMjISD366KPasWOHWrZsqcsvv1y9e/fWd999F+jSAAAAHI8sBQAAYB1ZCgBClEeSx+OALdCNKBkJCQmqXr26JCksLEz333+/5s6dqxdffFHx8fGWx2VhFwig2rVra+7cuZo7d66+//57NW3aVA899BCPwQEAACgCshQAAIB1ZCkAAOzz6aefatGiRYX2L168WAsWLLA8Lgu7gANccskl2rFjhx588EG9+OKLatSokWbNmsVjcAAAAIqALAUAAGAdWQoAAP+7//77lZeXV2i/1+vV/fffb3lcFnYBh4iKitJjjz2mHTt2qHnz5ho0aJD69Omj77//PtClAQAAOB5ZCgAAwDqyFAAEP6Mwx2yh4Pvvv1fjxo0L7W/YsKF27dpledzQ6B7gInXq1NH8+fM1d+5c7dy5U02bNtXDDz+srKysQJcGAADgeGQpAAAA68hSAAD4R1xcnPbs2VNo/65du1S2bFnL47KwCzjUJZdcoq+//lr333+/XnjhBTVu3Fgff/wxj8EBAAAoArIUAACAdWQpAAg+xuNxzBYK+vfvr1GjRmn37t35+3bt2qW77rpLl156qeVxWdgFHCwqKkqPP/64tm/frsaNG2vgwIHq169fsW7TBwAACBVkKQAAAOvIUgAAWPfcc8+pbNmyatiwoZKSkpSUlKRGjRqpQoUKeuGFFyyPy8Iu4AJ169bVJ598oo8//lhff/21mjRpokcffZTH4AAAABQBWQoAAMA6shQAAL6Li4vTF198oU8++US33Xab7rrrLi1dulTLli1T+fLlLY/Lwi7gEh6PR/3799fXX3+te++9V88++6xatGihX375JdClAQAAOB5ZCgAAwDqyFAC4n/GEOWYLFR6PR8nJybrnnns0YsQIde7cudhjlvZDXQBKUHR0tJ544gldd9116tGjh3r37q2VK1cqPj4+0KUBAAA4HlkKAADAOrIUAABn9sorr+jmm29WZGSkXnnllb899vbbb7d0DhZ2AZeqX7++Fi1apAsuuECXXHKJFi9erOjo6ECXBQAA4ApkKQAAAOvIUgAAFPbyyy9r8ODBioyM1Msvv3zG4zwej+WF3dC53xkIQo0aNdKnn36qLVu26KqrrlJubm6gSwIAAHANshQAAIB1ZCkAcBcjj2O2YLV161ZVqFBBkrR3794zbnv27LF8DhZ2AZdr166dZs2apYULF+rmm2+WMSbQJQEAALgGWQoAAMA6shQAAP+RkJCgw4cPS5IuuugiHTt2zO/nYGEXCAK9evXStGnTNG3aNN1///2BLgcAAMBVyFIAAADWkaUAADipXLly+u233yRJK1assOVpFnzHLhAkBg8erCNHjujOO+9U5cqVdddddwW6JAAAANcgSwEAAFhHlgIA5zOeMBlP4O/3dEINdunRo4e6deumRo0aSZIGDhyoiIiI0x67bNkyS+dgYRcIIqNGjdLhw4d19913q1KlSrr++usDXRIAAIBrkKUAAACsI0sBAELdu+++q7ffflu7d+9WWlqamjRpoujoaL+eg4VdIMg89dRTOnz4sG688UZVrFhRffv2DXRJAAAArkGWAgAAsI4sBQDOZTweGY8n0GU4oga7REVF6dZbb5Ukbdy4Uc8++6zKly/v13ME7/3OQIjyeDyaPHmyLr74Yl1++eVas2ZNoEsCAABwDbIUAACAdWQpAABOWr58ud8XdSXu2AWCUunSpTVjxgz16tVL/fr106pVq9SkSZNAlwUAAOAKZCkAAADryFIAgFA1evRoPfHEEypbtqxGjx79t8e+9NJLls7Bwi4QpKKiojR37lx17txZvXr10hdffKGaNWsGuiwAAABXIEsBAABYR5YCAOcx8sgo8I9BdkINdtmyZYtyc3Pz//lMPMV4HDULu0AQK1++vBYtWqSOHTuqV69eWrVqlSpWrBjosgAAAFyBLAUAAGAdWQoAEGqWL19+2n/2J75jFwhy1apV0+LFi/Xbb7/p4osv1vHjxwNdEgAAgGuQpQAAAKwjSwEA4F8s7AIhoF69elqwYIF27NihESNGBLocAAAAVyFLAQAAWEeWAgBnMJ4wx2yhIDMzU488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nf5cZCkACA3GGJ+OZ2EXgN577z398ssvuuqqqyRJBw4ckCRVq1at0LHVqlXT0aNH8wPxgQMHVKVKFXk8nkLHSdL+/fslSQ0aNJAkff755wWOW7VqlaSTof1sDhw4cMaa/vtckvTuu++qQYMG+sc//qHExES1aNFCmzdv1ueff67atWv79VwAACC0kaWKdy4AABDayFLFOxcAFJWRxzEbrCsd6AIABNa3336r1NRUdejQQTfccIMk6c8//5QklSlTptDxkZGR+ceUKVMm/3//7jhJat26tdq1a6dnn31W55xzjrp166ZvvvlGKSkpCg8Pzz/u7xT1XJIUExOjJk2aqEOHDurevbsOHjyoZ555RgMGDNCqVavy/wrUH+cCAAChiyxV/HMBAIDQRZYq/rkAAKGFhV0ghB08eFD9+vVTXFxc/veESP95LM1/f1/HKSdOnChwTFRUVJGOk05+P8pVV12lG2+8UZJUqlQpjR49Wmlpadq5c6ckKS8vT0eOHCkwVkJCgiIiIop8rr/++ks9evRQ165dNWHChPzjevTooSZNmuj555/Xs88+q5ycnELPrq9UqZJKlSrl0+cCAAChiSxFlgIAANaRpchSAADfsbALhKj09HT16dNHx44d06pVq1S9evX810491uXUo2/+24EDB5SQkJD/V4PVqlXT8uXLZYwp8NibU+/973HPOeccrV69Wt9//70OHjyoevXqqWrVqqpevbrq168vSfrpp5+UlJRU4JzLly9X165dVa1atdM+Gud/z7Vy5Upt375dL730UoHj6tWrp0aNGuU/dueLL75Qt27dChyzd+9e1apVS9WqVTvj5//fzwUAAEIPWYosBQAArCNLkaUAlDynPAbZCTW4GQu7QAg6ceKELrnkEn333Xf67LPP1Lhx4wKvn3POOapUqZI2btxY6L3r169Xy5Yt839u2bKlpkyZom+++abAOOvWrct//X/Vq1dP9erVkyR9/fXXOnDggIYMGSJJqlq1qpYsWVLg+BYtWuSPtXz5cmVkZCg2NvaM5zp06JCkk39l+b9yc3P1119/5Y/7v+eqWrVq/lirVq2S1+tVWNh/vo583bp1io6Ozg/8AAAg9JClyFIAAMA6shRZCgDwHxdeeKFPT2IIO/shAIJJXl6errrqKq1Zs0YzZ85Uhw4dTnvcoEGDNH/+fP3000/5+5YuXarvvvtOV1xxRf6+/v37Kzw8XK+++mr+PmOMJk+erHPOOUcdO3Y8Yy1er1f33nuvoqOjdeutt0o6+V0hPXr0KLDFx8dLki6//HLl5eXpjTfeyB8jOztbU6dOVbt27VSjRg1Jyg+377//foHzbd68WTt37lSrVq0kSfHx8YXOdeq7Si6//HIdOnRIs2bNyn//r7/+qpkzZ+qSSy457fecAACA4EeWIksBAADryFJkKQCBY4zHMVuo2L17tx5++GFdc801Onz4sCRpwYIF2rFjR/4xn376af7TKoqCO3aBEHPXXXdp7ty5uuSSS3T06FG9++67BV7/xz/+IUl68MEHNXPmTHXr1k133HGHjh8/rueff17NmjXT0KFD848/99xzNWrUKD3//PPKzc3V+eefr48//lirVq3Se++9l//9KJJ0xx136MSJE2rZsqVyc3M1ffp0rV+/Xm+//bZq1qx51trbtWunK664Qg888IAOHz6sunXr6u2339YPP/ygt956K/+4Nm3aqGfPnnr77beVkZGh5ORkHThwQBMmTFBUVJRGjRp11nNdfvnlat++vYYOHaqvv/5aFStW1Kuvvqq8vDw9/vjjBY5duXKlVq5cKUk6cuSIMjMz9eSTT0qSOnfurM6dO5/1fAAAwB3IUmQpAABgHVmKLAUAoSItLU19+vRRp06dtHLlSj311FOqXLmyvvzyS7311lv68MMPrQ1sAISULl26GEln3P7b9u3bTXJysomOjjbly5c3gwcPNgcPHiw0Zl5ennn66adNYmKiiYiIME2aNDHvvvtuoeOmTp1qWrRoYcqWLWtiYmJM9+7dzbJly3yq/88//zR33323qVq1qilTpow5//zzzcKFCwsdl5WVZf75z3+axo0bm6ioKBMXF2cuvvhis2XLliKf6+jRo2bYsGGmQoUKJjo62nTp0sVs2LCh0HFjxow5Yz/HjBnj0+cDAADORpbaUuRzkaUAAMD/IkttKfK5yFIA/CU9Pd1IMus2f2t2fP9LwLd1m781kkx6enqgW2Or9u3bmxdffNEYY0y5cuXM7t27jTHGrFu3zpxzzjmWx/UYY4y1JWEAAAAAAAAAAAAATpWRkaG4uDit3bxT5WJiAl2Ojv/xh9q3bqD09PQC31kebMqVK6dt27YpKSlJMTEx+vLLL1W7dm398MMPatiwoU6cOGFpXL5j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OrIUAABwMmOcs8G6oFrYTU9PD3QJAAAArkWWAgAAsI4sBQAAALsF1cLuH3/8EegSAAAAXIssBQAAYB1ZCgAAAHYrHegC/CkjIyPQJQAAALgWWQoAAMA6shQAAHAyrzm5BZoTanCzoLpjlwANAABgHVkKAADAOrIUAAAA7MYduwAAAJBElgIAACgOshQAAHAyY05ugeaEGtyMO3YBAAAgiSwFAABQHGQpAAAA2C2oFnbT09MDXQIAAIBrkaUAAACsI0sBAADAbkH1KOY//vgj0CUAAAC4FlkKAADAOrIUAABwMuM1Mt7APwfZCTW4WVDdscsjbwAAAKwjSwEAAFhHlgIAAIDdWNgFAACAJLIUAABAcZClAAAAYLcSXdh95pln5PF4NGrUqPx9J06cUGpqqipUqKBy5cpp0KBBOnToUP7r8+fPV926dXXs2LGzjk+ABgAgdNidK5yILAUAAPyFLHUSWQoAAFjhxizlNc7ZYF2JLexu2LBBr7/+upo3b15g/5133ql58+Zp5syZSktL0/79+3XZZZflvz5hwgTNmjVL5cuXP+s50tPT/V02AABwoJLIFU5DlgIAAP5ClvoPshQAAPBVKGYpOEeJLOweP35cgwcP1ptvvqn4+Pj8/enp6Xrrrbf00ksv6aKLLlKbNm00depUffHFF1q7dq3S09M1evToQhfHmWRkZMgYlvoBAAhmJZUrnIQsBQAA/IUsRZYCAADWuTlLGeOcDdaVyMJuamqq+vXrpx49ehTYv2nTJuXm5hbY37BhQ9WsWVNr1qxRXFycevXqVeTz/PXXX8rOzvZb3QAAwHlKKlc4CVkKAAD4C1nqP8hSAADAV6GYpeAspe0+wfvvv6/Nmzdrw4YNhV47ePCgIiIiCt12XqVKFR08eNDnc0VGRuq3335T5cqVrZZrq9zc3AL/C/+jx/ajx/ajx/ajx/az0uOiHFuSucIpyFL/wbVrP3psP3psP3psP3psP7KU/5Cl/oNr13702H702H702H702H5kKQQzWxd2f/rpJ91xxx1asmSJIiMj7TyVJOlf//qXNm7caPt5imvJkiWBLiHo0WP70WP70WP70WP7+dLjrKysv329pHOFE5ClTo9r13702H702H702H702H5kqeIhS50e16796LH96LH96LH96LH9yFIFeb1GXm/gn4PshBrczNaF3U2bNunw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wvPHXOGP9+wOshQAAIVHroA3eH2wm5qamu/vwcHBmj9/vubPn+/tUhzD5XJp6tSpCggI0J///Gc1b95cXbp0ueH+S5cuVePGjRUfH6+//e1vCggI8GhNY8aM0e9+9zvt379frVq18ui5AQAoLH/MFf54z0VFlgIA4Pr8MVf44z0XFVkKAIDrI1fADp5NVbDUE088od/97ncaNGiQvv766xvuW7VqVSUlJWnTpk2WfKdJXFyc6taty7tNAACAY5ClAAAAzCNLAQAA2I/BroMEBARo2bJlKlOmjPr27avs7Owb7h8XF6eEhAQ99thjOnz4sEdrCQwM1KhRo7RixQp99913Hj034HSlgksV+AAA2IcsBThf0rRqBT4AANYiSwEAANiPwa7DVKxYUStWrNC+ffv0xBNP3HT/5557Tg0aNFC/fv10+fJlj9YydOhQGYahpUuXevS8AAAAViFLAQAAmEeWAgAAsBeDXQeKiorS888/rxdffFHr16+/4b7BwcF66623dPz4cT388MMerSM7O1tly5bVkSNHPHpeAAAAK5GlAAAAzCNLAQAA2IfBrkNNnDhRXbt21ZAhQ3Ty5Mkb7tuwYUO9/PLLevXVV7VmzRqPXP/KlSvq2bOngoOD9cwzz3jknAAAAN5ClgIAADCPLAUAAGAPBrsO5XK5lJSUVOjvNRk1apS6deumYcOG6dSpU0W6tmEYGjlypD7++GOlpKSoevXqRTofAACAt5GlAAAAzCNLAQAA2IPBroNVrFhRK1eu1P79+zV58uQb7utyubR48WKVLFlS999/f5FC9KxZs/TGG29o8eLFatGihenzAAAA2IksBQAAYB5ZCgAAwPsY7DpcZGSkXnjhBb300ktat27dDfetXLmy3n77bR07dkwNGzbUokWLZBiGW9fbvHmzHnnkET366KPq379/UUoHAACwHVkKAADAPLIUAACAdzHYLQYeeughdevWTUOGDNFXX311w33btm2rf/7zn+rVq5ceeOABdezYUceOHSvUdT7//HP17dtXcXFxmjFjhidKB4qld2ffWuADAOB7yFIAAADmkaUAAAC8h8FuMeByubR06VKVK1dOffr00dWrV2+4f8WKFbVkyRJt3rxZX375pSIiIvTyyy8rJyenwGMyMjLUrVs3VatWTcnJyQoMDPT0bQAAANiCLAUAAGAeWQoAAMB7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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_gridded_variable(ds, start_date='2009-08-01', var_name='VAVH', n_days=6, coastline_resolution=\"50m\", time_name=\"TIME\", lat_name=\"LATITUDE\", lon_name=\"LONGITUDE\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4d6031fe-513a-40e9-b7cc-c8bf9ffae081", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CapricornBunkerGroup_wind_delayed_qc.ipynb b/notebooks/radar_CapricornBunkerGroup_wind_delayed_qc.ipynb new file mode 100644 index 0000000..ea34848 --- /dev/null +++ b/notebooks/radar_CapricornBunkerGroup_wind_delayed_qc.ipynb @@ -0,0 +1,1259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Capricorn Bunker Group Wind Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CapricornBunkerGroup_wind_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/742dc902-b300-4e3e-839f-04d03671aa09)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CapricornBunkerGroup_wind_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m230 packages\u001b[0m \u001b[2min 19ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 4MB\n",
+       "Dimensions:               (LATITUDE: 64, LONGITUDE: 72, TIME: 20)\n",
+       "Coordinates:\n",
+       "  * LATITUDE              (LATITUDE) float64 512B -21.92 -21.96 ... -24.16 -24.2\n",
+       "  * LONGITUDE             (LONGITUDE) float64 576B 150.8 150.8 ... 153.5 153.6\n",
+       "  * TIME                  (TIME) datetime64[ns] 160B 2009-08-01T00:30:00 ... ...\n",
+       "Data variables:\n",
+       "    WDIR                  (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WDIR_quality_control  (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WWAV                  (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WWAV_quality_control  (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WWDS                  (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "    WWDS_quality_control  (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array<chunksize=(5, 64, 72), meta=np.ndarray>\n",
+       "Attributes: (12/38)\n",
+       "    Conventions:                   CF-1.5,IMOS-1.2\n",
+       "    abstract:                      The ACORN facility is producing NetCDF fil...\n",
+       "    acknowledgment:                Data was sourced from the Integrated Marin...\n",
+       "    author:                        Wyatt, Lucy\n",
+       "    author_email:                  lucy.wyatt@jcu.edu.au\n",
+       "    citation:                      The citation in a list of references is: I...\n",
+       "    ...                            ...\n",
+       "    site_code:                     CBG, Capricorn Bunker Group\n",
+       "    source:                        Terrestrial HF radar\n",
+       "    ssr_Stations:                  Tannum Sands (TAN), LEI (LEI)\n",
+       "    time_coverage_end:             2009-08-01T15:30:00Z\n",
+       "    time_coverage_start:           2009-08-01T15:30:00Z\n",
+       "    title:                         IMOS ACORN Capricorn Bunker Group (CBG), o...
" + ], + "text/plain": [ + " Size: 4MB\n", + "Dimensions: (LATITUDE: 64, LONGITUDE: 72, TIME: 20)\n", + "Coordinates:\n", + " * LATITUDE (LATITUDE) float64 512B -21.92 -21.96 ... -24.16 -24.2\n", + " * LONGITUDE (LONGITUDE) float64 576B 150.8 150.8 ... 153.5 153.6\n", + " * TIME (TIME) datetime64[ns] 160B 2009-08-01T00:30:00 ... ...\n", + "Data variables:\n", + " WDIR (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array\n", + " WDIR_quality_control (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array\n", + " WWAV (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array\n", + " WWAV_quality_control (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array\n", + " WWDS (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array\n", + " WWDS_quality_control (TIME, LATITUDE, LONGITUDE) float64 737kB dask.array\n", + "Attributes: (12/38)\n", + " Conventions: CF-1.5,IMOS-1.2\n", + " abstract: The ACORN facility is producing NetCDF fil...\n", + " acknowledgment: Data was sourced from the Integrated Marin...\n", + " author: Wyatt, Lucy\n", + " author_email: lucy.wyatt@jcu.edu.au\n", + " citation: The citation in a list of references is: I...\n", + " ... ...\n", + " site_code: CBG, Capricorn Bunker Group\n", + " source: Terrestrial HF radar\n", + " ssr_Stations: Tannum Sands (TAN), LEI (LEI)\n", + " time_coverage_end: 2009-08-01T15:30:00Z\n", + " time_coverage_start: 2009-08-01T15:30:00Z\n", + " title: IMOS ACORN Capricorn Bunker Group (CBG), o..." + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAo8AAAI4CAYAAAALXwO2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRj0lEQVR4nO3deVxUdfv/8fcBZAkVdxEXwC3c0NRyz0zcs0wzI3PPytRSMtPKLUtM2zQty1KzuzRtsd3ctXIpU0uzzAUlU3AHIQWE8/vDH/NtAnFmZAYOvZ4+zuNmPuecaz4zetvl9VmOYZqmKQAAAMABXgXdAQAAAFgHySMAAAAcRvIIAAAAh5E8AgAAwGEkjwAAAHAYySMAAAAcRvIIAAAAh5E8AgAAwGEkjwAAAHAYySP+UwYOHKiwsLCC7gY84OGHH1aHDh0KuhuWZhiGRowYcdXr5s2bp2rVqiktLc0DvQJQ0EgeYXmGYTh0bNiwoaC7ekWJiYkaM2aMIiIidN111ykwMFBNmjTRs88+q3PnzhV09ywnLi5Ob731lp588smC7kqht3nzZk2ePPma/pwNHDhQ6enpeuONN/KvYwAKLZ+C7gBwrd59912714sXL9bq1atztNepU0fz589XVlaWJ7t3VT/++KO6du2qlJQU3XfffWrSpIkkafv27Zo+fbo2bdqkVatWFXAvrWXWrFkKDw9Xu3btCrorhd7mzZs1ZcoUDRw4UKVKlXIphr+/vwYMGKCXXnpJI0eOlGEY+dtJAIUKySMs77777rN7vXXrVq1evTpHe2F07tw53XnnnfL29tbOnTsVERFhd/65557T/PnzC6h3eUtNTVVgYGBBdyOHjIwMvffee3rooYcK5P0L6/fibnfffbdmzJih9evX69Zbby3o7gBwI4at8Z/y7zmPhw8flmEYeuGFFzR37lxVr15d1113nTp27Kg///xTpmlq6tSpqlKligICAnTHHXfozJkzOeJ+/fXXatOmjQIDA1WiRAl169ZNv/7661X788Ybb+ivv/7SSy+9lCNxlKSKFSvq6aeftmt77bXXVK9ePfn5+SkkJETDhw+3G3IcMWKEihcvrr///jtHvOjoaAUHByszM9Opvg8cOFDFixfXwYMH1bVrV5UoUUJ9+/aVJH377bfq3bu3qlWrJj8/P1WtWlWjR4/WhQsXcrz/8uXLVbduXfn7+6t+/fr65JNPcp2HmpWVpVdeeUX16tWTv7+/KlasqAcffFBnz5696nf63Xff6dSpU4qKirJr37BhgwzD0AcffKAnn3xSwcHBCgwM1O23364///wzR5xt27apc+fOCgoK0nXXXae2bdvq+++/t7tm8uTJMgxDe/fu1b333qvSpUurdevWV+zbokWLZBiGvvvuOz3yyCMqX768SpUqpQcffFDp6ek6d+6c+vfvr9KlS6t06dIaO3asTNO0i5GamqrHHntMVatWlZ+fn66//nq98MILOa7Lnq+4YsUK1a9fX35+fqpXr55Wrlxp1//HH39ckhQeHm6b4nH48GG7WHnFyNakSROVKVNGn3766RU/P4AiwgSKmOHDh5tX+qM9YMAAMzQ01PY6Li7OlGQ2atTIrFu3rvnSSy+ZTz/9tOnr62s2b97cfPLJJ82WLVuas2fPNh955BHTMAxz0KBBdjEXL15sGoZhdu7c2Xz11VfN559/3gwLCzNLlSplxsXF5dnXli1bmgEBAWZaWppDn23SpEmmJDMqKsp89dVXzREjRpje3t7mjTfeaKanp5umaZqbNm0yJZnLli2zuzc1NdUMDAw0hw8f7nTfBwwYYPr5+Zk1atQwBwwYYM6bN89cvHixaZqmOXLkSLNr167mtGnTzDfeeMMcMmSI6e3tbd5111127//FF1+YhmGYkZGR5ksvvWROmDDBLF26tFm/fn273xPTNM3777/f9PHxMYcOHWrOmzfPfOKJJ8zAwEC7z3klzz77rGkYhpmUlGTXvn79elOS2aBBA1sfxo0bZ/r7+5u1a9c2//77b9u1a9euNX19fc0WLVqYL774ovnyyy+bkZGRpq+vr7lt27Ycvx9169Y177jjDvO1114z586de8W+LVy40PbnrXPnzubcuXPNfv36mZLMsWPHmq1btzbvvfde87XXXjNvu+02U5L5zjvv2O7Pysoyb731VtMwDPP+++8358yZY3bv3t2UZI4aNcruvSSZDRs2NCtVqmROnTrVfOWVV8zq1aub1113nXnq1CnTNE3z559/NqOjo01J5ssvv2y+++675rvvvmumpKQ4HOOfoqKizCZNmuT5+wPA+kgeUeS4kjyWL1/ePHfunK19/Pjxtv9wZmRk2Nqjo6NNX19f8+LFi6Zpmub58+fNUqVKmUOHDrV7n4SEBDMoKChH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rUGDBikxMVGvvPKKatasqaFDh0qSvLy89NZbb6lLly6qV6+eBg0apMqVK+uvv/7S+vXrVbJkSX3++ed5fi/u0r17d7Vr105PPfWUDh8+rIYNG2rVqlX69NNPNWrUKLuFLY7K/vP21FNP6Z577lGxYsXUvXt3pzc6/+mnn3TmzBndcccdTvcBgMUUxBJvwJ1c2apn5syZdtdlb+uyfPlyu/bsrVZ+/PHHHNd36tTJDAoKMv39/c0aNWqYAwcONLdv3+5Qn48dO2aOHj3arF27tunv729ed911ZpMmTcznnnsux36Fc+bMMSMiIsxixYqZFStWNIcNG2aePXs217hPPfWUKcmsWbPmFd/bkb4PGDDADAwMzPX+vXv3mlFRUWbx4sXNcuXKmUOHDrVt57Jw4UK7a5cuXWpGRESYfn5+Zv369c3PPvvM7NWrlxkREZEj7ptvvmk2adLEDAgIMEuUKGE2aNDAHDt2rHns2LErfpZsjzzySI7PnP17umTJEnP8+PFmhQoVzICAALNbt252Wwpl27lzp9mzZ0+zbNmypp+fnxkaGmrefffd5tq1a23XZG/Vc/Lkyav2yTSv/OfnSnFy+97Pnz9vjh492gwJCTGLFStm1qpVy5w5c6bd1j+meXmbnX/u6ZktNDTUHDBggF3b1KlTzcqVK5teXl522/Y4E+OJJ54wq1WrlqMfAIoewzSvYTa2mx06dEifffaZ/vzzT915551q0qQJE7GBIqZRo0YqX758jnmS1+LQoUOKiIjQ119/rfbt20u6/ISZdu3aafny5XlWLuG8tLQ0hYWFady4cXr00UcLujsA3KzQznncvXu3WrRooVWrVmnFihXq169fjonuAKwjIyNDly5dsmvbsGGDfv75Z91yyy35+l7Vq1fXkCFDNH369HyNi9wtXLhQxYoVK7DniQPwrEI55/H48ePq06ePHn74YT399NPy9vZWvXr19P3339tWRAKwlr/++ktRUVG67777FBISot9//13z5s1TcHCwW5KO119/Pd9jIncPPfQQiSPwH1Iok8dDhw7J29tb9957r201Z4MGDXTo0CH169dPt956q6KionJsqAug8CpdurSaNGmit956SydPnlRgYKC6deum6dOnq2zZsgXdPQCAgwrlsPXZs2eVmJiogwcPKi0tTTNnztTHH3+stLQ0nT59Wq+//rpm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sC5yR49j2BoAAAAOI3kEAADW5WW473DSpk2b1L17d4WEhMgwDK1YscLuvGEYuR4zZ868YszJkyfnuD4iIsLpvuUnkkcAAIB8kJqaqoYNG2ru3Lm5nj9+/LjdsWDBAhmGoV69euUZt169enb3fffdd+7ovsOY8wgAAKyrEC2Y6dKli7p06XLF88HBwXavP/30U7Vr107Vq1fPM66Pj0+OewsSlUcAAIBcpKWlKTk52e5IS0vLl9iJiYn68ssvNWTIkKteu3//foWEhKh69erq27ev4uPj86UPriJ5BAAA1mW474iNjVVQUJDdERsbmy/dfuedd1SiRAn17Nkzz+uaNWumRYsWaeXKlXr99dcVFxenNm3a6Pz58/nSD1cwbA0AAJCL8ePHKyYmxq7Nz88vX2IvWLBAffv2lb+/f57X/XMYPDIyUs2aNVNoaKiWLVvmUNXSHUgeAQCAZRlunPPo5+eXb8niP3377bfat2+fPvjgA6fvLVWqlGrXrq0DBw7ke78cxbA1AACwrCttf5Mfh7u8/fbbatKkiRo2bOj0vSkpKTp48KAqVarkhp45huQRAAAgH6SkpGjXrl3atWuXJCkuLk67du2yW+CSnJys5cuX6/777881Rvv27TVnzhzb6zFjxmjjxo06fPiwNm/erDvvvFPe3t6Kjo5262fJC8PWAADAsgrRTj3avn272rVrZ3udPV9ywIABWrRokSRp6dKlMk3zisnfwYMHderUKdvro0ePKjo6WqdPn1b58uXVunVrbd26VeXLl3ffB7kKwzRNs8DevYAZHaoUdBcAALAEc/XRgu5CrnxGOz/066hLL//stthWRuURAABYlldhKj3+RzDnEQAAAA6j8ggAACzLnauikTsqjwAAAHAYlUcAAGBZVB49j+QRAABYFsmj5zFsDQAAAIdReQQAAJZF4dHzqDwCAADAYVQeAQCAZTHn0fOoPAIAAMBhVB4BAIBlUXn0PCqPAAAAcBiVRwAAYFmGqDx6GskjAACwLIatPY9hawAAADiMyiMAALAsCo+eR+URAAAADqPyCAAALMuL0qPHUXkEAACAw6g8AgAAy2K1tedReQQAAIDDqDwCAADLovLoeSSPAADAssgdPY9hawAAADiMyiMAALAshq09j8ojAAAAHEblEQAAWBaVR8+j8ggAAACHUXkEAACWReXR86g8AgAAwGFUHgEAgGVRefQ8kkcAAGBZ5I6ex7A1AAAAHEblEQAAWBbD1p5H5REAAAAOo/IIAAAsi8qj51F5BAAAgMOoPAIAAMvyovLocVQeAQAA4DAqjwAAwLIoPHoeySMAALAsFsx4HsPWAAAAcBiVRwAAYFmGqDx6GpVHAAAAOIzKIwAAsCzmPHoelUcAAIB8sGnTJnXv3l0hISEyDEMrVqywOz9w4EAZhmF3dO7c+apx586dq7CwMPn7+6tZs2b64Ycf3PQJHEPyCAAALOvfyVh+Hs5KTU1Vw4YNNXfu3Cte07lzZx0/ftx2LFmyJM+YH3zwgWJiYjRp0iTt2LFDDRs2VKdOnXTixAmn+5dfGLYGAADIB126dFGXLl3yvMbPz0/BwcEOx3zppZc0dOhQDRo0SJI0b948ffnll1qwYIHGjRt3Tf11FZVHAABgWYbhviMtLU3Jycl2R1pa2jX1d8OGDapQoYKuv/56DRs2TKdPn77itenp6frpp58UFRVla/Py8lJUVJS2bNlyTf24FiSPAADAstw5bB0bG6ugoCC7IzY21uW+du7cWYsXL9batWv1/PPPa+PGjerSpYsyMzNzvf7UqVPKzMxUxYoV7dorVqyohIQEl/txrRi2BgAAyMX48eMVExNj1+bn5+dyvHvuucf2c4MGDRQZGakaNWpow4YNat++vctxPY3kEQAAWJY7t+rx8/O7pmTxaqpXr65y5crpwIEDuSaP5cqVk7e3txITE+3aExMTnZo3md8YtgYAACgAR48e1enTp1WpUqVcz/v6+qpJkyZau3atrS0rK0tr165VixYtPNXNHEgeAQCAZRWmrXpSUlK0a9cu7dq1S5IUFxenXbt2KT4+XikpKXr88ce1detWHT58WGvXrtUdd9yhmjVrqlOnTrYY7du315w5c2yvY2JiNH/+fL3zzjv67bffNGzYMKWmptpWXxcEhq0BAADywfbt29WuXTvb6+z5kgMGDNDrr7+uX375Re+8847OnTunkJAQdezYUVOnTrUbGj948KBOnTple92nTx+dPHlSEydOVEJCgho1aqSVK1fmWETjSYZpmmaBvXsBMzpUKeguAABgCebqowXdhVxd//LVn9Diqn2jV7ottpUxbA0AAACHMWwNAAAsy52rrZE7Ko8AAABwGJVHAABgWVQePY/kEQAAWBbJo+cxbA0AAACHUXkEAACWReHR86g8AgAAwGFUHgEAgGUx59HzqDwCAADAYVQeAQCAZVF59DwqjwAAAHAYlUcAAGBZVB49j+QRAABYFrmj5zFsDQAAAIdReQQAAJbFsLXnUXkEAACAw6g8AgAA66Ly6HFUHgEAAOAwKo8AAMCymPPoeVQeAQAA4DAqjwAAwLIoPHoeySMAALAshq09j2FrAAAAOIzKIwAAsCwqj55H5REAAAAOo/IIAAAsi8rj1e3fv1/r16/XiRMnlJWVZXdu4sSJTscjeQQAACii5s+fr2HDhqlcuXIKDg62S7YNwyB5BAAA/y0UHvP27LPP6rnnntMTTzyRbzGZ8wgAAFBEnT17Vr17987XmCSPAADAsgzDcNtRFPTu3VurVq3K15gMWwMAAMsqKklefpo9e7bt55o1a2rChAnaunWrGjRooGLFitld+8gjjzgd3zBN07zmXlqU0aFKQXcBAABLMFcfLegu5Kr5O3e7LfbWAcvcFtudwsPDHbrOMAwdOnTI6fhUHgEAgGVRecwpLi7OrfGZ8wgAAFBEPfPMM/r7779ztF+4cEHPPPOMSzFJHgEAgGWxYCZvU6ZMUUpKSo72v//+W1OmTHEpJskjAABAEWWaZq6J8M8//6wyZcq4FJM5jwAAwLKKSIEw35UuXdpWQa1du7ZdApmZmamUlBQ99NBDLsUmeQQAAChiXnnlFZmmqcGDB2vKlCkKCgqynfP19VVYWJhatGjhUmySRwAAYFlFZW5ifhswYICky9v2tGzZMsf+jteC5BEAAFgWyWPe2rZtq6ysLP3xxx86ceKEsrKy7M7ffPPNTsckeQQAACiitm7dqnvvvVdHjhzRv58LYxiGMjMznY5J8ggAACyLymPeHnroITVt2lRffvmlKlWqlC/fF8kjAABAEbV//359+OGHqlmzZr7FZJ9HAABgWYbhvqMoaNasmQ4cOJCvMak8AgAAFFEjR47UY489poSEBDVo0CDHquvIyEinY5I8AgAAy2LOY9569eolSRo8eLCtzTAM25NnXFkww7A1AABAPti0aZO6d++ukJAQGYahFStW2M5lZGToiSeeUIMGDRQYGKiQkBD1799fx44dyzPm5MmTczxzOyIiwuE+xcXF5TgOHTpk+19XUHkEAADWVYgqj6mpqWrYsKEGDx6snj172p37+++/tWPHDk2YMEENGzbU2bNn9eijj+r222/X9u3b84xbr149rVmzxvbax8fx9C00NNS5D+EAkkcAAGBZhWnYukuXLurSpUuu54KCgrR69Wq7tjlz5uimm25SfHy8qlWrdsW4Pj4+Cg4OdrlfBw8e1CuvvKLffvtNklS3bl09+uijqlGjhkvxGLYGAADIRVpampKTk+2OtLS0fIuflJQkwzBUqlSpPK/bv3+/QkJCVL16dfXt21fx8fEOv8c333yjunXr6ocfflBkZKQiIyO1bds21atXL0cy6yjD/Pd24/8hRocqBd0FAAAswVx9tKC7kKv2H/Z3W+w2e6prypQpdm2TJk3S5MmTr3qvYRj65JNP1KNHj1zPX7x4Ua1atVJERITee++9K8b5+uuvlZKSouuvv17Hjx/XlClT9Ndff2nPnj0qUaLEVftxww03qFOnTpo+fbpd+7hx47Rq1Srt2LHjqjH+jeQRAABc1X8xefyq+/wclUY/Pz/5+fld9d68kseMjAz16tVLR48e1YYNG1SyZEmH+3Tu3DmFhobqpZde0pAhQ656vb+/v3bv3q1atWrZtf/xxx+KjIzUxYsXHX7vbMx5BAAAluXOOY+OJorOyMjI0N13360jR45o3bp1TiWOklSqVCnVrl3b4Y2/y5cvr127duVIHnft2qUKFSo49d7ZSB4BAAA8IDtx3L9/v9avX6+yZcs6HSMlJUUHDx5Uv379HLp+6NCheuCBB3To0CG1bNlSkvT999/r+eefV0xMjNPvL5E8AgAAC/MqRKutU1JS7CqCcXFx2rVrl8qUKaNKlSrprrvu0o4dO/TFF18oMzNTCQkJkqQyZcrI19dXktS+fXvdeeedGjFihCRpzJgx6t69u0JDQ3Xs2DFNmjRJ3t7eio6OdqhPEyZMUIkSJfTiiy9q/PjxkqSQkBBNnjxZjzzyiEufk+QRAAAgH2zfvl3t2rWzvc6u7A0YMECTJ0/WZ599Jklq1KiR3X3r16/XLbfcIunytjqnTp2ynTt69Kiio6N1+vRplS9fXq1bt9bWrVtVvnx5h/pkGIZGjx6t0aNH6/z585Lk0EKbvJA8AgAAyypM+zzecsstymsdsiNrlA8fPmz3eunSpdfaLZtrTRqzkTwCAADLYsPq3N16660OXbdu3TqnY5M8AgAAFDEbNmxQaGiounXrpmLFiuVrbJJHAABgWYVpwUxh8vzzz2vhwoVavny5+vbtq8GDB6t+/fr5EptqLwAAQBHz+OOPa+/evVqxYoXOnz+vVq1a6aabbtK8efOUnJx8TbFJHgEAgGUZhuG2oyho0aKF5s+fr+PHj2v48OFasGCBQkJCrimBJHkEAAAo4nbs2KGNGzfqt99+U/369a9pHiRzHgEAgGUx5/HKjh07pkWLFmnRokVKTk7Wfffdp23btqlu3brXFJfkEQAAoIjp2rWr1q9fr44dO2rmzJnq1q2bfHzyJ+0zTEd2rCyijA5VCroLAABYgrn6aEF3IVd3fD7UbbE/7T7fbbHdzcvLS5UqVVKFChXynL+5Y8cOp2NTeQQAAJbF4o3cTZo0yW2xSR4BAACKGJJHAACAXLBgxvOo9gIAAMBhVB4BAIBlFZXNvK2EyiMAAAAcRvIIAAAsy8sw3HZYXUZGhtq3b6/9+/fna1ySRwAAgCKoWLFi+uWXX/I9LskjAACwLMONR1Fw33336e23387XmCyYAQAAKKIuXbqkBQsWaM2aNWrSpIkCAwPtzr/00ktOxyR5BAAAllUU5ia60549e9S4cWNJ0h9//GF3ztWV6iSPAADAskge87Z+/fp8j8mcRwAAgCLuwIED+uabb3ThwgVJkmmaLscieQQAAJZlGIbbjqLg9OnTat++vWrXrq2uXbvq+PHjkqQhQ4bosccecykmySMAAEARNXr0aBUrVkzx8fG67rrrbO19+vTRypUrXYrJnEcAAGBZzHnM26pVq/TNN9+oSpUqdu21atXSkSNHXIpJ5REAAKCISk1Ntas4Zjtz5oz8/PxciknyCAAALItNwvPWpk0bLV682PbaMAxlZWVpxowZateunUsxGbYGAAAoombMmKH27dtr+/btSk9P19ixY/Xrr7/qzJkz+v77712KSeURAABYlpdhuO0oCurXr68//vhDrVu31h133KHU1FT17NlTO3fuVI0aNVyKSeURAABYVlFJ8twpKChITz31VL7FI3kEAAAows6ePau3335bv/32mySpbt26GjRokMqUKeNSPIatAQCAZbFJeN42bdqksLAwzZ49W2fPntXZs2c1e/ZshYeHa9OmTS7FpPIIAABQRA0fPlx9+vTR66+/Lm9vb0lSZmamHn74YQ0fPly7d+92OqbLyeO5c+f0ww8/6MSJE8rKyrI7179/f1fDAgAAOIw5j3k7cOCAPvzwQ1viKEne3t6KiYmx28LHGS4lj59//rn69u2rlJQUlSxZ0q60axgGySMAAEAh0LhxY/3222+6/vrr7dp/++03NWzY0KWYLiWPjz32mAYPHqxp06blums5AACAJ1B3zNsjjzyiRx99VAcOHFDz5s0lSVu3btXcuXM1ffp0/fLLL7ZrIyMjHYppmKZpOtuRwMBA7d69W9WrV3f21kLF6FDl6hcBAACZq48WdBdy9eC6UW6L/catr7gttqd4eeW9NtowDJmmKcMwlJmZ6VBMlyqPnTp10vbt2y2fPAIAAGtjzmPe4uLi8j2mw8njZ599Zvu5W7duevzxx7V37141aNBAxYoVs7v29ttvz78eAgAAXAHJY95CQ0PzPabDyWOPHj1ytD3zzDM52pwpewIAAMBaHE4e/70dDwAAQEErKpt5W4lLT5hZvHix0tLScrSnp6e7vGcQAAAACj+XksdBgwYpKSkpR/v58+c1aNCga+4UAACAI7zceCB3Ln032Uu6/+3o0aMKCgq65k4BAADg2v355586evT/tln64YcfNGrUKL355psux3Rqq54bbrjB9rDw9u3by8fn/27PzMxUXFycOnfu7HJnAAAAnMGcx7zde++9euCBB9SvXz8lJCSoQ4cOqlevnt577z0lJCRo4sSJTsd0KnnMXnG9a9cuderUScWLF7ed8/X1VVhYmHr16uV0JwAAAJD/9uzZo5tuukmStGzZMtWvX1/ff/+9Vq1apYceesj9yeOkSZMkSWFhYerTp4/8/f2dfkMAAID8wj6PecvIyJCfn58kac2aNba9uCMiInT8+HGXYro053HAgAHy9/dXenq6jh49qvj4eLsDAADAE7wMw22HszZt2qTu3bsrJCREhmFoxYoVdudN09TEiRNVqVIlBQQEKCoqSvv3779q3Llz5yosLEz+/v5q1qyZfvjhB4f7VK9ePc2bN0/ffvutVq9ebZteeOzYMZUtW9apz5fNpeRx//79atOmjQICAhQaGqrw8HCFh4crLCxM4eHhLnUEAADAylJTU9WwYUPNnTs31/MzZszQ7NmzNW/ePG3btk2BgYHq1KmTLl68eMWYH3zwgWJiYjRp0iTt2LFDDRs2VKdOnXTixAmH+vT888/rjTfe0C233KLo6Gg1bNhQ0uUnB2YPZzvLME3TdPamVq1aycfHR+PGjVOlSpVy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qGfPnjp06JAWLVokScx/BAAPInkEUCgcPnxYq1evlpeXl0JCQtSlSxe9/PLLmjZtmr7//nt9/fXXmjBhgsaOHStJCgoKUkBAAFVHAPAwkkcABW737t1q166datWqpZMnTyoxMVG9evXSrFmz9OSTT0qSzp8/rxIlStju2bp1q0JDQ5WVlVVQ3QaA/yRWWwMoUCkpKerYsaOaNm2q2bNnKyEhQbt27VLfvn3VpEkTvf7666pRo4bt+p9//lkLFy7UokWL9N1336l+/foF2HsA+O9hwQyAAuXj46O0tDS1atVKkhQcHKzOnTtry5Yt2rlzpx5//HFbdTEpKUm7d+/Wpk2btGHDBhJHACgAJI8AClRmZqYSExO1b98+W1tGRoZq166ttWvXatWqVZo2bZqky/Mce/XqpXXr1qlRo0YF1GMA+G8jeQRQoAIDAxUTE6P58+friy++kCQVK1ZMGRkZioyM1Pjx4/XFF1/o9OnTMk1TAQEBKlWqVMF2GgD+w1gwA8Cjjh8/rj///FNnz55VVFSUvL291bNnT23dulUzZsyQr6+vOnbsqGLFikmSypUrp+TkZAUEBLAlDwAUAlQeAXjML7/8ohYtWqhfv37q06eP6tWrp6VLl6py5coaO3asgoKC9PTTT2vp0qWSLg9fHzp0SBUqVFBmZmYB9x4AILHaGoCHnDx5UjfffLN69uypIUOGyN/fXzExMdq5c6f69u2rJ554Qr///rvmzZunt956S/Xq1VNAQID27dvHHEcAKERIHgF4xN69e9WtWzd9+OGHatKkia193Lhx+uKLLzRo0CDFxMTo77//1u7du7VmzRqVL19e7du3V82aNQuw5wCAf2LOIwCPyMjI0KVLl/T3339Lki5cuKCAgABNnz5dFy5c0KuvvqoOHTooMjJSzZs3V/PmzQu4xwCA3FB5BOAxN910k4oXL65169ZJktLS0uTn5ydJuvHGG1WzZk0tWbKkILsIALgKFswAcIvU1FSdP39eycnJtrY33nhDv/76q+69915Jkp+fny5duiRJuvnmm5WamlogfQUAOI7kEUC+27t3r3r27Km2bduqTp06eu+99yRJderU0axZs7R69Wr17t1bGRkZ8vK6/NfQiRMnFBgYqEuXLokBEQAovJjzCCBf7d27VzfffLP69++vpk2b6qefftKgQYNUt25d3XDDDbr99tsVGBiohx9+WJGRkYqIiJCvr6++/PJLbd26VT4+/LUEAIUZcx4B5JszZ84oOjpaERERmjVrlq29Xbt2atCggWbPnm1rO3/+vJ599lmdOXNG/v7+GjZsmOrWrVsQ3QYAOIF/4gPINxkZGTp37pzuuusuSVJWVpa8vLwUHh6uM2fOSJJM05RpmipRooSef/55u+sAAIUff1sDyDcVK1bU//73P7Vp00aSbE+FqVy5si05NAxDXl5edgtpeOwgAFgHySOAfFWrVi1Jl6uJ2c+nNk1TJ06csF0TGxurt956y7bSmuQRAKyDYWsAbuHl5SXTNG2JYXblceLEiXr22We1c+dOFscAgAVReQTgNtnr8Xx8fFS1alW98MILmjFjhrZv366GDRsWcO8AAK7gn/0A3Ca72lisWDHNnz9fJUuW1HfffafGjRsXcM8AAK6i8gjA7Tp16iRJ2rx5s5o2bVrAvQEAXAv2eQTgEampqQoMDCzobgAArhHJIwAAABzGsDUAAAAcRvIIAAAAh5E8AgAAwGEkjwAAAHAYySMAAAAcRvIIAAAAh5E8Ash3pmkqKirKtjn4P7322msqVaqUjh49WgA9AwBcK5JHAPnOMAwtXLhQ27Zt0xtvvGFrj4uL09ixY/Xqq6+qSpUq+fqeGRkZ+RoPAJA7kkcAblG1alXNmjVLY8aMUVxcnEzT1JAhQ9SxY0fdcMMN6tKli4oXL66KFSuqX79+OnXqlO3elStXqnXr1ipVqpTKli2r2267TQcPHrSdP3z4sAzD0AcffKC2bdvK399f7733XkF8TAD4z+EJMwDcqkePHkpKSlLPnj01depU/frrr6pXr57uv/9+9e/fXxcuXNATTzyhS5cuad26dZKkjz76SIZhKDIyUikpKZo4caIOHz6sXbt2ycvLS4cPH1Z4eLjCwsL04osv6oYbbpC/v78qVapUwJ8WAIo+kkcAbnXixAnVq1dPZ86c0UcffaQ9e/bo22+/1TfffGO75ujRo6patar27dun2rVr54hx6tQplS9fXrt371b9+vVtyeMrr7yiRx991JMfBwD+8xi2BuBWFSpU0IMPPqg6deqoR48e+vnnn7V+/XoVL17cdkREREiSbWh6//79io6OVvXq1VWyZEmFhYVJkuLj4+1iN23a1KOfBQAg+RR0BwAUfT4+PvLxufzXTUpKirp3767nn38+x3XZw87du3dXaGio5s+fr5CQEGVlZal+/fpKT0+3uz4wMND9nQcA2CF5BOBRjRs31kcffaSwsDBbQvlPp0+f1r59+zR//ny1adNGkvTdd995upsAgCtg2BqARw0fPlxnzpxRdHS0fvzxRx08eFDffPONBg0apMzMTJUuXVply5bVm2++qQMHDmjdunWKiYkp6G4DAP4/kkcAHhUSEqLvv/9emZmZ6tixoxo0aKBRo0apVKlS8vLykpeXl5YuXaqffvpJ9evX1+jRozVz5syC7jYA4P9jtTUAAAAcRuURAAAADiN5BAAAgMNIHgEAAOAwkkcAAAA4jOQRAAAADiN5BAAAgMNIHgEAAOAwkkcAAAA4jOQRAAAADiN5BAAAgMNIHgEAAOAwkkcAAAA47P8BMK5S4Kr/Zy0AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Nearest date in dataset: Size: 8B\n", + "array('2009-08-01T00:30:00.000000000', dtype='datetime64[ns]')\n", + "Coordinates:\n", + " TIME datetime64[ns] 8B 2009-08-01T00:30:00\n", + "Attributes:\n", + " axis: T\n", + " comment: Given time lies at the middle of the 1 hour averaging p...\n", + " local_time_zone: 8.0\n", + " long_name: time\n", + " standard_name: time\n", + " valid_max: 999999.0\n", + " valid_min: 0.0\n", + "Variable Long Name: Direction towards which the wind is blowing based on short wave direction\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/lbesnard/github_repo/aodn_cloud_optimised/notebooks/parquet_queries.py:838: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", + " plt.tight_layout()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAB34AAAPVCAYAAACJK0u7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gU1foH8O/2TScJEHoChN6kE5AOoTeD2FBQhAsiKiBix8YVxIYIdkGvICrCRQFRVEBEQEQQUURBkBo6SSBl2/n9kV/mZnb3THY32SQbvp/nyQM778yZM2fKvjtnik4IIUBERERERERERERERERERCFLX9YVICIiIiIiIiIiIiIiIiKi4mHHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxFROaHT6VR/er0eFosFlSpVQr169dCzZ09MnToV27dv1yynR48eqnKOHDlSOgtQio4cOaJaxh49epR1lagUVYRtfOzYsapl2LRpk1/TB6MNkpKSVGWWleK2TShZsmSJalmfeOKJUp1/cdp606ZNqmnHjh0btHoWKI/7TbCURfuWFH5Hq11NxzRfFG6LpKSksq4OhYCijodXyz5WEfYdp9OJTz75BKNHj0aDBg0QExMDi8WC6tWro2vXrnj00UfL9XdzcbjnIP78FWzToZTHEBERUdlixy8RUTklhIDNZkNGRgYOHz6MTZs24eWXX0ZKSgpSUlJw8ODBsq5iiSvrTpDSwBPidLUqLx3LRERERbkaclIqe6F8kY+/du/ejWbNmmHUqFFYunQpDh48iMzMTNhsNqSnp+P777/H7Nmz0aBBA8ycORMOh6Osq0xEREQUsoxlXQEiIvJuwIABCAsLQ0ZGBvbu3YuzZ88qse3bt6NNmzb46quv0KlTJ9V03bt3R+XKlZXPERERpVbn0hIREYG0tDTlc7NmzcqwNkSl72rYz68GSUlJqmNZ06ZNy7A2/qlSpYqq7u3bty/D2lQ8bF8iIt+0b98ely9fVj5XqVKlDGsTPIW/E6pWrVqGNfHftm3b0Lt3b+Tk5CjDTCYTOnXqhOjoaOzbtw///PMPAMDhcOC5557DwYMHsWLFigpzsaB77g4A//zzD3766Sflc+XKldG9e3ePaQu2aeb/RERE5Ct2/BIRlVOLFi1SHuMlhMDq1asxadIkpKenAwCysrIwbNgw/P7774iPj1eme/LJJ8uiuqWqSpUqWLFiRVlXg6jMXA37+dWgR48eIXvXf7NmzXgcDiK2LxGRbyZPnozJkyeXdTWCLlS/Ey5fvozrrrtO1enbvn17fPrpp6hdu7Yy7LXXXsPdd98Nl8sFAFi5ciVefPFFTJ8+vdTrHAzecvclS5bg9ttvVz4X9d3P/J+IiIh8xUc9ExGFAJ1Oh+HDh2Pjxo2qK3vPnDmDefPmqcbVevePt8cMX758GY888ggaNWoEq9Xq8c6onJwcvP766+jXrx+qVasGs9mMmJgYtGvXDk8++STOnz8vrbcQAp999hluvPFG1K9fH5GRkQgLC0OdOnUwYMAAvPbaawD+9zi9wj98gfwft94es+fr45L/+OMP3HvvvWjVqhViYmJgNptRtWpV9OrVC/Pnz1fdHaDVRnl5eXj++efRqlUrhIWFISYmBv379y/yfcveyq1bt65q+ObNmzWXxeVyYeXKlUhLS0OdOnUQFhaG8PBw1KtXDzfffDO+/vprj3k999xzqjJXr16tijdu3FiJ3XjjjarYE088oZp2w4YNSuyDDz7A+PHj0bFjR9SpUwdRUVEwmUyIj49HSkoKHn/8cZw+fdrr8ru/l8xms+G5555Dy5YtERER4XE1/++//45Ro0ahSpUqCAsLQ7NmzTB37lzY7fYi23r//v2YNGkSmjVrhqioKBiNRsTHx6NRo0YYPnw4nnnmGZ8flX769Gno9Xql7iNGjFDF58yZo8RMJpNqm3Lflm655RbNef3222+46aabkJCQAIvFguTkZDz22GPIy8vzGNeXd3zZ7XYsXboUw4cPV7adiIgIJCUlYcSIEfjoo4+KXP41a9agd+/eiImJQVhYGNq2bYv//Oc/RU5XWMEjngvu5Cjg/v4yLf60TYEtW7ZgzJgxaNCgASIjI2G1WlG3bl2MGTMGO3fu9GsZgPy7cQvqGh8fDyGEEtu+fbtqWdavX++1DXQ6HWrWrKkML+pRot7W87fffotBgwYhLi4OVqsVzZo1w0svvaSqT2HHjh3DuHHjUKNGDVitViQnJ+Ohhx7yevzzR1GPp3Q4HHjzzTfRt29fVK9eHRaLBWFhYahduzY6deqEu+66Cx988EGx6gAAv/zyC9LS0lClShWlPebNm+fTscKby5cvY8GCBejTpw8SEhKU77yWLVvinnvuwf79+z2mGThwoNIOBoMBFy9eVGLp6emqdnr99ddV0xZexxaLBVeuXAEQ2Dstd+/ejVGjRqFq1ao+7ScXL17EtGnTkJSUBIvFglq1auHOO+/E8ePHPb4LlixZElB7FrDb7Zg3bx5atGiBsLAwxMfHIy0tDb/88ovHuHl5eZg7dy5uuukmtGzZUtl2rVYratSogdTUVLz22muw2Wxe57Vjxw6MGTMGjRo1QkREBEwmE6pUqYKmTZti1KhRmDdvnnIRXWEOhwPLli3D0KFDUatWLVitVkRFRaFFixaYMWMGjh8/Ll2+YO1nBc6fP49///vfuPbaa1G5cmWYTCbExsaiXbt2eOihh3Ds2DGv03l7xP6nn36Knj17Fuu4XiDQti5MCIH3338fKSkpiIyMRGRkJLp27YovvvhCOk0g+yng/Zj66aefokePHqhUqZKyrfuTk2r5+OOPVdPMnz9fFe/fv78Sc3+Cj/v3w1tvvaXE1qxZg8mTJ+Paa69FUlISYmJilG2ibdu2mD59Ov7++29VeTt37lSVN2rUKK91vummm1Tjbdu2TRU/deoUZs2ahU6dOiEuLg4mkwmVK1dGnz598M477wR87HU4HHj55ZfRsmVLWK1WVK5cGddddx12795d5LRFvePX3xy0OMcCIP/4PXbsWDRu3BjR0dGwWCyoWbMmevbsiaeffloZR6fToWfPnqpp33vvPemx3305vDl27BgefvhhtG/fHrGxsUqe3qVLF8yePRvnzp3zOp172S6XC2+//TY6derk834ps3DhQtVxICoqCqtXr1Z1+gLApEmTMHXqVNWwZ599FtnZ2QCAQYMGqer5+++/e8zrwIEDqnH69eunigshsGbNGowaNQpJSUnK76pGjRph0qRJ+OOPP7wugy/HjtJ4t7RW/u/tN+ylS5cwffp0JCYmwmq1omHDhnj22WeVx2j/+eefuOWWW1C1alVYrVY0b94c8+fPl+aUgbYfERERlQFBRETlAgDV3+HDh72Od++996rGq127tirevXt3aTmHDx9WxVq1aiVatGihGpaYmKiM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4uDBg9JlioqKEpcvX1biWvuN+7GlY8eOqu/Gp59+WhWvWbOm6oRz4c6oNm3aKMMLLlgpfMwtOD7OmjVLVWbh45K/Hb/+7CfuT4UwGo2q/Xn16tUe20ZxO35nzJihxM+ePSuaN28urV9eXp7Yu3ev146jzMxMVeeW+1MrCndMFe5IL5Ceni7ef/991XfU22+/rarLXXfdpVq3W7duVZ0wHzx4sBIL9n524403qqYdOnSo0pHndDrFhAkTVPFOnTqppg/mcT2QthbCMx/o37+/8nSR9PR0UbVqVVW88MWNxd1P3Y8BlSpVEt9//70Sd7lcyneCrzlpUR544AFVOXv37hVCCDF37lxlWMHxoeDiMfd96F//+peqzN9//13aSX///ferpi3cmZyRkaG6kODaa69VTVv4KTNhYWGqtr322mtVx4zvvvtO1W7/+te/VPMtfKellry8PI+LQQrfrX348GFRvXp1v46HRXX8ynLQ4hwLvv32W9W0Op1OvP3226rjWG5urnj77bdVdSvqWC9bDveO306dOqnikyZNUuqek5Pj0Wl34403araRP/ulltOnT3uU/eWXX2pO474sd911lxJz/31a+O7lzZs3q2KFf999/fXXHsfSwvnfgQMHVBcHut/t7s+xwx/B7vgt/HSbGTNmeMQLP41o2LBhqljhnLK47UdERESlj+/4JSIKMS6Xy2NYUe/HlDEYDHjzzTdRqVIlZZjFYgEArFq1SjXutm3bMHLkSOXv448/VsU///xz5f8rV65UxWbOnInBgwerhkVGRuLWW28NqN5adu3ahZMnTyqfa9asiQceeED5HBsbiyeffFI1TeG6u7NarXj++edhMBgAAI0aNUKjRo2UuM1mk74vqzg+++wz1ecJEyagadOmyucePXrguuuuUz6L/3/nUoE+ffoo/3e5XNiyZQuA/HcKF8QTEhIAQHknlfu7qQqXAQB169bFwoUL0adPH9SsWRNhYWHKOy3dt4ei3vG0YMEC1btOC7a7wu8UBoD7778f1apVUz4//vjjiIqKkpabmJio/H/9+vV47rnnsGbNGuzfvx82mw2VKlXCyJEjPd6lp6Vbt24wm83K54I2LPgXgPL+3l27duHy5cs4cuSI6p227m3pbuLEiWjVqpXyeejQoar4iRMnfK6v+/733HPPISUlRTUsPj4eN9xwg2Y5s2fP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/vnnHvG+fft6lHPhwgVRv3596bZZ8Jux4E/W8fvDDz94LeO7776TLsPHH3/s9SIbb3/uvxu12Gw20b9/f6/l6PV6j20iWB2/QuT/PvOWO3v7GzdunGray5cve71I0P3P3fXXXy8d9/PPP/d5Od5//33pcb3gLy4uTnz55Zce0xZ3v/TFzp07ffpdaTAYxLRp07zmz4WlpqZ6TNurVy/p+BkZGaJfv34+rdvevXurpg3Fjt/KlSurcqk77rhDuh8dO3bM48I8q9WqOi/lb/vxvJR3vuZS8fHxokWLFuKxxx4Tb731lrjnnnuE2WwWjRs3FtnZ2UXO55dffhHdu3cXDz/8sHj99dfFggULxNChQwXgeWFkcc+BCeH7utq9e7ewWq2idevWqlyqf//+Ps2HiIh8x45fohK2detWj07bP//8U1gsFnHLLbeohk+aNEmEhYWJf/75Rxm2YcMGAag7CY8fPy5MJpOYPHmyMszlcomuXbuKWrVqKVfRnzx5UhiNRnHrrbeq5lPQsSO767SwHTt2CABi3rx5yrCcnBxRv359kZKSogyz2+0iLCxMjBw5UjX933//LQCIe+65p8h5ffTRRwKA+OSTT5RhZ86cEZUqVRI33XSTatyjR48qV/w2a9bMrwQ7OztbxMfHi0GDBqmG33LLLSIiIkJcuHBBGTZ37lwBQPz444/KsP379wuDweCRIPvK4XCIVq1aiUaNGqmGu69/bz+ajEajiI6OFklJSaJbt27innvuET/88IMQQt5+3jp+mzZtKlq1aiX++usvj3ns37+/yPZ76623xMCBA0WNGjWExWIRJpNJJCQkiC5duojp06eLb775xusV2U6nU6xcuVJcf/31IikpSYSFhQmLxSJq1aol+vXrJxYuXOgxzenTp8X48eNF7dq1PU7y+9PxK0T+nTJ33323aN68uYiKihJGo1FUrlxZdO/eXbz44osenQK+ll3cH/82m00888wzomnTph4dnIU7fgva8OOPPxbDhw8XtWrVEhaLRVitVpGUlCRuuOEGsX79es15PfTQQ6ryw8PDVSdSfv31V49t4qOPPvJa1t9//y1uvvlmUblyZWEymURiYqK45557xIULF4o8eVzUCSV3v/76qxg5cqSIj48XFotFNGrUSMyaNUtcuXJFs/137twpnn76aTFw4EDRoEEDERcXJwwGgwgP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RERlhblUaOdShc2bN08AEIcPH/YaP3nypNi/f7+w2WzKsDNnzngdd8iQIUKn04m//vpLGVbcvM3XdSWEEP379xfVq1cXmZmZyrC3335bABBffPGF1zoTERGVBeZSoZ1LnTp1StSrV0/UqFFDmkMVYC5FRETe6IRwe0YHERXLfffdh/nz52PIkCFer1gbPXq08v9jx46hdevWqFSpEu69915cvnwZ8+bNQ61atbBz507Vo34feOABzJs3DxMmTED79u3x3//+F2vXrsXSpUtx8803K+Pde++9yM3NxTXXXAO73Y5ly5bhxx9/xHvvvYdbb73Vp2UYNWoUVq1ahalTpyI5ORnvvfcefvzxR3zzzTfo1q2bMl5qaio2bNiAESNGIDU1FadOncKCBQtgs9mwa9cuNGrUSHM+TqcT1157Lfbt24cZM2agcuXKWLRoEY4ePYqdO3eqpv/uu++Ux9EsWLAA4eHhGDduHACgW7duqnp5s2jRIkyePBkjR45Ev379sGXLFrz//vuYPXs2Hn74YWW8rKwstG7dGllZWbj//vthMpnw4osvwul0Ys+ePahSpYoybo8ePbB582bVo45GjBiBzMxMdOvWDTVr1kR6ejqWLl2KP/74Ay+88AKmTZumjOvP+k9KSgIAHDlyJKD2W7NmDYYOHYqePXvixhtvxL59+/Dqq69i3LhxePPNNzXbjoiIqDQxlwrtXCojI0N5z97WrVuxfv16TJ8+HZUqVUKlSpVw9913K+OOHTsW7733Hg4fPqzkOvfddx+2bt2K/v37o06dOrhw4QI+/fRT7Ny5E1OmTMErr7yiTF/cvM2fdfXzzz+jc+fOaNq0KSZMmIDjx4/jhRdeQLdu3fDll19qth0REVFpYi4V2rnUNddcg19++QUPPPAAWrRooSojISEBffv2VT4zlyIiIq/KtNuZqALq3r27ACD9c7dv3z6RmpoqwsPDRaVKlcQtt9wi0tPTPcZzOp3i3//+t0hMTBRms1k0a9ZMfPDBBx7jLV68WLRq1UpERESIqKgo0bt3b/Htt9/6tQw5OTni/vvvF9WqVRMWi0W0b99erF+/3mO87Oxs8dRTT4mmTZuKsLAwERMTIwYPHix2797t87wuXLggxo0bJ+Lj40V4eLjo3r276krDArNmzZK26axZs3ya15tvvikaNWokzGazqF+/vnjppZeEy+XyGO/YsWNi5MiRIjo6WkRGRorBgwerrogsULCuC/vwww9Fnz59REJCgjAajSI2Nlb06dNHrF692mudfF3/iYmJIjEx0WO4r+0nhBCrVq0S11xzjbBYLKJWrVri0UcfVV0VSkREVB4wlwrtXOrw4cPS+bjnMmPGjPG4I/irr74SgwcPFjVq1BAmk0lERUWJLl26iMWLF5d43iaE7+tKCCG2bNkiOnfuLKxWq6hSpYqYPHmy6q4VIiKi8oC5VGjnUlrrzv0uY+ZSRETkDe/4JSIiIiIiIiIiIiIiIiIKcfqiRyEiIiIiIiIiIiIiIiIiovKMHb9ERERERERERERERERERCGOHb9ERERERERERERERERERCGOHb9ERERERERERERERERERCGOHb9ERERERERERERERERERCGOHb9ERERERERERERERERERCGOHb9ERERERERERERERERERCGOHb9ERERERERERERERERERCGOHb8++O677zBkyBDUqFEDOp0O//3vf1XxsWPHQqfTqf769++vGmf27Nno3LkzwsPDUalSJa/z+eyzz9CwYUM0atQIa9asUYYfOXLEo/yCv+3bt5f04pZrr732Glq2bIno6GhER0cjJSUFX3zxhRLPzc3F5MmTER8fj8jISKSlpeH06dNKfM2aNUhOTsalS5fKoPZlq7jb8ZEjRzBu3DjUrVsXYWFhqF+/PmbNmgWbzaYq56233kJiYiJat26NHTt2KMM3bdok3Y7T09ODuuzlDbfjwJTEsXjo0KGoU6cOrFYrqlevjltvvRUnT55UjcNt2DfcjskfzKXKD+67gWMuVX5wOw4Mc6nyhdsx+YO5VPnBfTdwzKXKD27HgWEuVb5wOyaSY8evD65cuYJWrVph4cKF0nH69++PU6dOKX8ffvihKm6z2XD99ddj0qRJXqfPy8vD5MmTsWjRIrz66quYNGmSR+Ly9ddfq+Zx6tQptG3btvgLGEJq1aqFOXPmYNeuXfjpp5/Qq1cvDBs2DL/99hsAYOrUqfj888/xySefYPPmzTh58iSuu+46ZfoFCxZg5cqV0h85FVlxt+M//vgDLpcLb7zxBn777Te89NJLeP311/Hwww8r4xw9ehTPPfccli9fjkceeQS33367xzwOHDjgsR1XrVq1ZBe2nON2HJiSOBb37NkTH3/8MQ4cOIBPP/0U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/vln7NixAwCQnJysGufw4cNISkrSLL979+5YuHAhbrvtNpw+fRqxsbFo3bo1vvrqKzRq1MifqhIREVEFFOq5SKjXn4iIiEJbqOcioV5/IiIiCm3MRSgU+P2oZy09evQochwtPXv2RM+ePQOenoiIiCq2UM9FQr3+REREFNpCPRcJ9foTERFRaGMuQqFAX9YVICIiIiIiIiIiIiIiIiKi4mHHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiGPHLxERERERERERERERERFRiDOWdQWIiIiIiIiIiIiIiIiIiK4mhw8fxpYtW/DPP/8gOzsbVapUQevWrZGSkgKr1RpQmez4JSIiIiIiIiIiIiIiIiIqBUuXLsX8+fPx008/ISEhATVq1EBYWBguXLiAQ4cOwWq14pZbbsHMmTORmJjoV9ns+CUiIiIiIiIiIiIiIiIiCrLWrVvDbDZj7Nix+PTTT1G7dm1VPC8vD9u2bcPy5cvRrl07LFq0CNdff73P5bPjl4iIiIiIiIiIiIiIiIgoyObMmYN+/fpJ4xaLBT169ECPHj0we/ZsHDlyxK/y2fFLRERERERERERERERERBRkWp2+7uLj4xEfH+9X+ez4JSIiIiIiIiIiIiIiIiIqZS6XCwcPHsSZM2fgcrlUsW7duvldHjt+iYiIiIiIiIiIiIiIiIhK0fbt23HzzTfjn3/+gRBCFdPpdHA6nX6XyY5fIiIiIiIiIiIiIiIiIqJSNHHiRLRr1w5r165F9erVodPpil0mO36JiIiIiIiIiIiIiIiIiErRX3/9hRUrViA5ObnEytSXWElERERERERERERERERERFSkjh074uDBgyVaJu/4JSIiIiIiIiIiIiIiIiIKsr179yr/nzJlCqZPn4709HS0aNECJpNJNW7Lli39Lp8dv0RERERERERERER0VTh8x9CAptMb5Q/PTHzzvwHWhoiIrjbXXHMNdDodhBDKsDvuuEP5f0FMp9PB6XT6XT47fomIiIiIiIiIiIiIiIiIguzw4cNBLZ8dv0REREREREREREREREREQZaYmKj8/7vvvkPnzp1hNKq7ax0OB3744QfVuL6SP5+CiIiIiIiIiIiIiIiIiIhKXM+ePXHhwgWP4RkZGejZs2dAZbLjl4iIiIiIiIiIiIiIiIioFBW8y9fd+fPnEREREVCZfNQzEREREREREREREREREVEpuO666wAAOp0OY8eOhcViUWJOpxN79+5F586dAyqbHb9EREREREREREREdFXIy8qVxvRG+QMyG364PhjVISKiq1BMTAyA/Dt+o6KiEBYWpsTMZjM6deqE8ePHB1Q2O36JiIiIiIiIiIiIiIiIiErB4sWLIYQAACxYsACRkZElVjbf8UtEREREREREREREREREVEqEEFi6dClOnTpVouWy45eIiIiIiIiIiIiIiIiIqJTo9Xo0aNAA58+fL9lyS7Q0IiIiIiIiIiIiIiIiIiLSNGfOHMyYMQP79u0rsTL5jl8iIiIiIiIiIiIiIiIiolJ02223ITs7G61atYLZbEZYWJgqfuHCBb/LZMcvEREREREREREREREREVEpevnll0u8THb8EhERERERFUPvG3+UxvQGg+qzyejCv64Dht25B+veax/sqhERERGRm8affCWNbWzQShprGIzKEBHRVW3MmDElXiY7fomIiIiIiIiIiIiIiIiISpnT6cR///tf7N+/HwDQrFkzDB06FAa3C8l9xY5fIiIiIiIiIiIiIiIiIqJSdPDgQQwcOBAnTpxAo0aNAADPPvssateujbVr16J+/fp+l6kv6UoSEREREREREREREREREZHcPffcg/r16+PYsWP4+eef8fPPP+Po0aOoW7cu7rnnnoDK5B2/RERERERERERERERERESlaPPmzdi+fTvi4uKUYfHx8ZgzZw66dOkSUJm845eIiIiIiIiIiIiIiIiIqBRZLBZkZWV5DL98+TLMZnNAZfKOX6Jy6sidw6Sxo9uPeh2efTRXOk3/zP0B1aPbiO9Vn80mF6bcAgy4ZRvy8nTS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sSNiY2MDKpMdv0REREREREREREREREREpcThcOCff/7BHXfcgVq1Su4GL77jl4iIiIiIiIiIiIiIiIiolBiNRsybNw8Oh/zJsAGVW6KlEREREREREREREREREVG5otPrNB8VX2r1EGVfh/KiV69e2Lx5M5KSkkqsTHb8EhERERERERERERERERGVogEDBuDBBx/Er7/+irZt2yIiIkIVHzp0qN9lsuOXiIiIiIiIiIiIiIiIqALTGfTQGcr+DbA6iLKuQrlx1113AQBefPFFj5hOp4PT6fS7THb8EhERERERERERERERERGVIpfLVeJlsuOXyrXfR/QOaDqXSwBO71eNOO3yHclp04jlyGO2C3ZpbG7/d6Wx8OhIaSzaJN89Zc/hd2lc/WHLyZPG5gx8Wxp79PuJqs/Cmv9v9gkbfuqeIp0uplasNNZg6TppLBj6HP81oOmev2WXNBYRI193VWvKl91iKfqwa9Dlb7tmkwFOYdAcd9T0I9LYhZPnpLGvP2xXZD2IiIi8ES75lbm5Z+Q5UY+R26Qxc5hVGnPYHdJYTuZlaUyrng+uu9PrcJ1J/p4hU5T8O9zlCOxq5bzTNmms67At0tiW1V0Dmp+Wgdl/yGMBlnntkM3S2KObJ0pj5jhTgHP0zpEr3y6PTrxOGqvz+soSrQcREVFRnDb5d5bW95nBJL97S2icUNaazimfHQwm77mPS3IuDgCgdT7Oj3NuIiy/zraLdsy59nXpdHqD/HyK0SzP66wmeR5itlrkZWqcx4uOj5LGTBp1CY+Sz8+h0Z4Ou/z84MXT8nVkl2x/uZdzpNP8smW/NPZW2FPSmDFc3s7H75Zvl7Ve/UQaIyIKRe+//z5uuOEGWCzqY77NZsPy5ctx2223+V1m2d/TTURERERERERERERERERBozfoys0f5bv99tuRkZHhMTwrKwu33357QGWy45eIiIiIiIiIiIiIiIiIqBQJIaDTeXaEHz9+HDExMQGVyUc9ExERERERERERERERERGVgtatW0On00Gn06F3794wGv/XXet0OnH48GH0798/oLLZ8UtERERERERERERERERUgel0Ouj0Zf+YZZ2r7OtQ1oYPHw4A2LNnD/r164fIyEglZjabkZSUhLS0tIDKZscvEREREREREREREREREVEpmDVrFgAgKSkJN9xwA6xWa4mVzY5fKtf0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rKwsSdKOHTtUrpz77dgAAABQGFkKAADAO7IUAAAAiqtDhw6aNGmS2rdvr1WrVunZZ5+VJG3atEl16tTx1GepvOJXEs9TAQAA8IAsBQAA4B1ZCgAAJCvLtpNmQK77779ffr9fL7zwgh566CEdccQRkqSFCxeqd+/envostVf8er0EGgAAoCwjSwEAAHhHlgIAAEBxHXnkkXr11VcLjb/rrrs891lqD/xyZiUAAED0yFIAAADekaUAAABgsnPnTlWqVCn//yZ5r4sGB36BGFjyVEtP0711TLprW6B8wLXNFyi5WyHYPqvAz5E0nyQpkOGTLxzx1KepftNtHizbcm1zIk7MpzMx9WlqM8mr5a//OhFHtt99mWwc0su1remzr3uqIxIKe5oOQOlAlkIivHBPQ9e2RZWOcW3LPMKQpY53/+PowHyTx2vGslz6kwpnm0hamiQpvWKabPfyjZyIewYL57i3hfaFPL6fe14KZbvnhoAh15mWtanN9vvca/Hnzl8kLTdHB8oFZPsdY7b5oENb17aT313h2gYAbshSpYzHfQa+zDT5w0Vvz056811PfXbs/45r240rxrq2XV/VffevL819m+vPMEx3TEXXNjeRsLdleSBrf07wBWxZjrf9L/G4xahp/nwe9xOZ9i+ZMpFXee8X9ud+9r50v3w+R5btniHN++O87eMDED+WbSXF718y1JBIVapU0Y8//qgaNWqocuXKsqzCy8NxHFmWpXA4+n31pe7Ab8WKucGDgA0AABA9shQAAIB3ZCkAAACY/N///Z+qVq2a//+iDvweilJ34Nfn86lChQoEbAAAAA/IUgAAAN6RpQAAAGDSuXPn/P936dIl5v2XugO/Uu5tdQjYAAAA3pClAAAAvCNLAQCAZGTZdlxud++lDuTq1KmTunTpos6dO6t9+/bKyMg45D5L5dKtWLGidu3alegyAAAAUhJZCgAAwDuyFAAAAIqjZ8+eWrFihfr376/KlSurQ4cOuv7667VkyRLt2bPHU5+l8opf27blOO4PlgcAAIA7shQAAIB3ZCkAAJCULCt3SLRkqCFJXH/99ZKkUCikDz74QG+99ZaWLVum22+/XbZta9++fVH3WSoP/AKpovNna2Pa35qu7V3bLNv9y9SJRPEHacAnSbIDPtlWpPjTFajF/WYDpjptn3ubuRLTzQ1iPw+mOosz73/9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KQAAAO/IUgAAAGWbZVm67rrrdMUVV+jLL7/Url27dOyxx6pChQqe+yyzV/xKuQF79erVCod5mDwAAEC0yFIAAADekaUAAECJsq3kGVBAWlqajj32WLVu3fqQDvpKZfyK39atW2vXrl364IMP1LZt20SXU0BOTo727NmjypUrJ7oUAACAIpGlAAAAvCNLAQAAlD0DBw4s9mvnzp0bdf9l+sBvmzZt1LRpU/Xt21dz585V586dE11SvokTJ2ratGnq3r27zjnnHJ155pnKyspKdFlx4UQihkbHMF3htqLGJTNTvabl4oSLni4Scj9TptVbb7u2fdL/VNc264Czb8KBNGn43/X58H4qX87nOp0vzf3rxbLdbzZg/gwNy8Qw3YHz8Fc+Q5sTcW8LB72dkV2cddTZv947jiMn4hxkPfHa5m1ZAsBfkaWSg2O4SsjUFgkVbovsvyGQZduu22vb777997o9NrV5FQ66b+tC2UUvl4hh+37yuytc29b27OjadmAmigTSpAsu1qeDT1dGmutk8qe7ZynTZ2BiymCmnOX1NlERl8waL7Yvdz1y9v9r+yzZjqWw4c8NE695qaTnG0DqIkulANO2s6i2vHGWJCv6fGPcvhSR3fKYspTX7OaFqb/mry51bTPtlzowS4UDAWnIRdp0/gBlGPZsm7bHXuc7HpnV636wZLmRp2mZsH8JAIr210zlOI7mzZunrKwstWrVSpK0Zs0abd++PaoDxH+VHFuIBMnMzNT777+v448/Xj169NDMmTMTXZIkadeuXXriiSfUt29fZWdn68ILL1TNmjU1aNAgvfDCC9q7d2+iSwQAACBLAQAAHAKyFAAAKFGWnTxDGTZz5sz8oWbNmho8eLC+/vprzZ07V3PnztVXX32loUOH6rDDDvPUf9leupKqVq2q119/XRdccIEuvPBCXXnllQl/tsoLL7yg3bt367777tOyZcu0ZcsW/fvf/9Y333yjs88+WzVr1tT555+v119/XaFQKKG1AgCAso0sBQAA4B1ZCgAAoOyaMWOGLr/8cvl8f96hw+fzadKkSZoxY4anPsv8gV9JCgQCmjZtmu68805NnTpVgwYN0q5duxJWz4wZM9StWzfVq1dPklSnTh1ddtllWr16tTZu3KjLLrtMK1asUO/evXX44YfrH//4h9577z1FTLdMBgAAiBOyFAAAgHdkKQAAgLIpFArp888/LzT+888/95ytOPC7n2VZuvTSS/Xyyy/rzTffVIcOHfTtt9+WeB2bNm3SO++8owsvvLDI9iZNmmjy5Mn6/PPPtWbNGo0YMUIvvfSSOnTooIYNG+rqq6/Wxx9/nP+MUAAAgJJAlgIAAPCOLAUAAOLOspJngCRp5MiRGjVqlO688069++67evfdd/Xf//5Xo0eP1siRIz31yYHfA5x++ul677339Pvvv6t169ZatWpVib7/rFmzVLlyZQ0YMMD4OsuydNJJJ2nq1KnasmWLli1bpt69e+vRRx/VCSecoBYtWuidd94pmaIBAAD2I0sBAAB4R5YCAAAoO6ZOnaorr7xS//3vf9WpUyd16tRJd955p6644grdcccdnvr0x7jGUqFFixZatWqVBgwYoM6dO2v27NkaPHhw3N83HA5r9uzZGjZsmDIzM4s9nW3b6ty5szp37qx7771XS5Ys0a233qouXbropptu0tVXX13g/uDwJhJ2P1vVibi3WXbsz15xrcVQ45qu7V3b0sqnubb5DPWHsr09y8eXljxfPZbtfv6L12fMh4Puz2MyrSslKVnqAFA6kaVKVmj3Xte24J5s17ZwTuHteDiSu913IhE5LrcUike2MTG9n9ftmVufls/9vVZ3PsW1zZ/unm0OrDHvZyfiKJzjnhmaPvu6a9vmEX1d20zLy5x7vGUit/VEKvmzjPMycsRy8n+2DPk4Fu9VFHIWgENFlipZlqk2w3e6HSi8/bft3L5sv0+2Ff32wLRdDQe93e4xHntg3HODe41re3Z0bbP97p+BZRfMSxEr97WRUERhw5XlTZ5e5Nq26Zzerm3x2I6bcoORYTrbF/t9kfb+LOzs/9f2WbIdS2Hu4g6UHradOyRaMtSQJGzb1pVXXqkrr7xSO3fulCRVqlTp0PqMRWGlUc2aNbV06VKdeeaZGjJkiG666aa436Zm8eLF+uGHH1xvp1McaWlp6tu3r5YuXarrr79eN9xwg3r37q2tW7fGsFIAAAAzshQAAIB3ZCkAAICypVKlSod80FfiwK9RRkaGnnrqKd10002aPHmyhg8frn379sXt/WbMmKEWLVropJNOOuS+/H6//vWvf2nJkiVav369TjjhBL355psxqBIAAKB4yFIAAADekaUAAABKn969e2vFihUHfd0ff/yh2267TQ888EBU/SfP/VaTlGVZuuGGG9S0aVOdf/75+vrrr/XSSy+pZs2aMX2fX3/9VfPnz9cdd9whK4YPtu7WrZs+/vhjnXvuuerRo4euuuoqHXvssfrxxx/1ww8/5P972GGH6T//+Y+OOeaYmL03AAAAWQoAAMA7shQAAIgZy/b+fMNY11GGnX322Ro0aJCysrJ0xhlnqFWrVjr88MOVkZGh33//XZ9++qneffddLViwQH379o36Wb8c+C2mwYMHq379+urfv79at26tV155RS1atIhZ/0899ZQkafjw4THrM0/NmjX1+uuv69Zbb9WNN96ocDisypUrq3bt2jr88MNVv359LV++XC1atNCECRM0efLkmFxODgAAkIcsBQAA4B1ZCgAAoHQYNWqUzj33XD3//PN69tln9cgjj2jHjh2Sck/6O/bYY9WrVy998MEHnk6KK9uH1aPUunVrrVq1SlWrVlX79u316quvxqRfx3H02GOPqX///jrssMNi0ueBbNvWtddeq19//VW7d+/OP2vgjTfe0BNPPKENGzboX//6lx5++GE1adJEjz/+uCKRSFxqAQAAZRNZCgAAwDuyFAAAQOmQnp6uc889V6+88op+//13/f777/rhhx+0b98+rV+/XlOnTvV8JxSu+I1S3bp19c477+jcc89Vv379dPfdd2vChAmH1Ocnn3yi9evX6+abb45Rle4qV65c5PiMjAxde+21Ou+883TFFVfo/PPP16JFizRnzpy41+RLC7i2hfblxPz9LDt2tyzK03Lpe65ta3t2dG074c13XdvWdG3v2uZLK3q8E3ZcpzHNtxNxn65QW97PEUcRx/2PMCcQRZ9/7T4Udm8zzJ9j+IPQF/C5tpnuKmFaZrbfvU9TnZbtbbkAQGlBloq9SMiwPQ4b2orY7iRqW9T02ddd274Yfppr29HPL3Jt+2xQj6jrCOe4b/tN23fztr/gZ5CXWZxIRKGge+759Mxurm2mHOJLc/8Tz+ceu419mli2+3TxyHwlKaqMXKCNAxUA4ocsFXuWz7AtC7tvr4x92pYsJ/r9T163nScsfse1bf3pXV3bmr+61LXNlEV8gaJ3pkTChixlqN+07QzuLdgWCeW+R2hvULbtPt2mc3q7tlm2+84gr3cftX3ecqRp3s15w/39zPvBot8/aFpeTsTb52peJsmRBYFSybZyh0RLhhqSTFZWlrKysmLSF1f8elChQgXNnTtXl156qS655BI988wzh9Rf9erVVblyZT311FNynMRu2OrWratnnnlGffv21U8//ZTQWgAAQOlElgIAAPCOLAUAAAA3HPj1yLZtTZ06Veeee65Gjhyp1atXe+6rZs2amjZtmp5//nnNmjUrdkUegi+++ELNmzdPdBkAAKCUIksBAAB4R5YCAABAUTjwewgsy9Kjjz6q448/Xv3799cPP/zgua/Bgwdr5MiRGj9+vL744osYVhm9vXv36ssvv9Rxxx2X0DoAAEDpRpYCAADwjiwFAACiYlm597RP+MCtnuOJA7+HKCMjQ/PmzZNlWRowYID27t3rua97771XtWvX1rBhw5STE/tn2xbXZ599pkgkQsAGAABxR5YCAADwjiwFAACAv+LAbwzUrl1b8+fP14YNGzR69GjPz0OpUKGC5syZo7Vr12ry5MkxrrL4NmzYIElq1qxZwmoAAABlB1kKAADAO7IUAAAoFstKngEF5OTk6LvvvtOWLVsKDF5w4DdGWrZsqVmzZmnOnDm69dZbPfdz8skn6+abb9Ztt92mpUuXxrDC4lu/fr3q16+vihUrJuT9AQBA2UOWAgAA8I4sBQAAkHq++OILdezYUZmZmapXr54aNGigBg0aqH79+mrQoIGnPv0xrrFMGzx4sD755BNde+21OvbYY9W/f39P/VxxxRVavHixzjvvPH388ceqVq1ajCs127Bhg5o3b15i72enua+GvkjEtS2cXfi8BcefO872+2Sr6GkjIfc+TZyI+xmza7q2d23zp/tc29ad1sXTdKHsosc74bDrNJGQe5sTMJ0D4t5m6rPR44td2zad09vwfu68fnYmtt99OVu2tzOPfIbl6RjWadM65sZrjSaRsLezwwHgUJGlvDFlKSsn6N5WxDakONsV0/bYlA3CQW/b8dA+93nYOKSXa5vtd98e+738GZQTcm0ybTsP3L7n/Xyw7b7X5WX6DG2fe5upHtOy9JJfDsa0HpnkzXte3nIiEWP2AoDShizljRUIuLcZ9rOYREJh12nj8Tf32p4dXdt8hqz42aAenqZz2/7bhlwQMeSQULZ7zjowE0Ws3J/DoYhCjvt0pv09aeXd20qaKUt5zVmmdcxnyIp5Weqv/1q2JUWRdQEA0bngggvk9/v16quvqnbt2rJicDU0V/zG2OTJkzVo0CANHz5c69at89SHz+fT448/rj179mjMmDGeb9Hj1fr163mOCgAASAiyFAAAgHdkKQAA4Mq2k2eAJGnt2rWaNm2a+vTpoxNOOEHHH398gcELlm6M2bat2bNn66ijjlK/fv30yy+/eOqnTp06mj59uubNm6fp06fHuEp3v//+u77//nsCNgAASAiyFAAAgHdkKQAAgNRx7LHH6tdff41pnxz4jYPy5ctr/vz52rt3rwYNGqScnBxP/QwcOFBjxozRJZdcos8//zzGVRZtw4YNklSit9QBAAD4K7IUAACAd2QpAACA1HDbbbfpyiuv1LJly/Tbb79p586dBQYvOPAbJ0ceeaTmzZunlStX6uKLL/Z8W5y77rpLRx55pIYNG6bsbJcHu8bQhg0b5Pf71bRp07i/FwAAgBuyFAAAgHdkKQAAUIhlJc8ASVL37t21YsUKdevWTTVq1FCVKlVUpUoVVa5cWVWqVPHUJwd+46hdu3Z65JFH9Nhjj+nee+/11Ef58uX19NNPa8OGDbruuutiXGFhhx12mEKhkHbs2BH39wIAADAhSwEAAHhHlgIAAEhuS5cu1dKlS/V///d/BYa8cV74Y1wjDnD++edrw4YNmjRpkg477DBVqFAh6j5OPPFE3XLLLbr88svVq1cv9ejRIw6V5urcubOqVKmiK664QrNmzYrb+/yVLz3NvTEScW2y/b5C4xxf7jjbZ8l2oj9rxDI8VNwX8HZ2rKlPyzbVaDovI1zk2EjYUKOhzfablnPB6SK2k/9ehT+BP316ZjfXtmPnvWmY0t0n/U/1NJ3pq84xrGOmz6Co9a84fBH3z8HZ32btP+PJsqyDrCOSYyofAEoBstTBpVVyXyaW4SzacHaw8Ov9gdx/bds1wziRwtPl9xl03zBFQkXnF0la27Oja1sgM+DaZtpOemmzfe7TOMZtv/u8mZhyiGW7v59jyBNNn33dtW3ziL6eanEi3s7GNvVpzK3GPg8+Xd5rnIhz0NcXp7+ipzMtL299AkA8kKUOLi//FNlmG26TXeT3/f59JsGwrHCoyMnM+yHced4PETDt24jtfg9T3jPnHkMdvgOW8/4cZ9uWnKD7NtdUSzjo3tbk6UWubV9f2M/T+3n9zE2ZwtRmysGmXHewfVDR1uG9jZ1dQNxYdu6QaMlQQ5Lo3LlzzPtk6ZaAW2+9Veeff74uuugiz31ceuml6tGjh0aMGKFffvklhtUVVKNGDd12222aPXu2li1bFrf3AQAAKC6yFAAAgHdkKQAAgOS1fft2/fe//9Xo0aM1evRo3XXXXYd09xMO/JYAn8+n6dOna8yYMZKkBx98MOo+bNvW7NmzFQqFNGrUKM/PZimOUaNGqV27dho7dqxycgxnNgIAAJQAshQAAIB3ZCkAAIDktHr1ajVq1Eh33XWXtm3bpm3btunOO+9Uo0aN9OGHH3rqkwO/JcS2bd1+++2SpGuuuUZTpkyJOiTXrl1bjz32mF555RU99NBD8ShTUm6tDz/8sL744gvdcccdcXsfAACA4iJLAQAAeEeWAgAAsmzJToKBWz3nu/TSS9WvXz/973//09y5czV37lx9/fXXOv300zVx4kRPfbJ0S1DeM9ZuuOEG3XDDDbrmmmuiDtn9+vXTxRdfrMsuu0yffPJJPMqUJDVv3lyTJk3SlClTtHnz5ri9DwAAQHGRpQAAALwjSwEAACSX1atX66qrrpLf788f5/f7deWVV2r16tWe+uTAbwJcfvnluuuuu3TbbbdpwoQJikT5wPqpU6eqYcOGGjZsmPbt2xenKqXJkyerRo0a+sc//hHXW/gAAABEgywFAADgHVkKAAAgOVSqVElbtmwpNP7bb79VxYoVPfXJgd8EmThxoqZNm6YHHnhAo0aNUjgcLva0mZmZevrpp/X555/r6quvjluN5cuX1/33369Fixbp+eefj9v7AAAARIssBQAA4B1ZCgCAMsiykmeAJGnIkCEaNWqUnn32WX377bf69ttv9cwzz2j06NE655xzPPVZogd+b731VlmWVeC+1Pv27dO4ceNUrVo1VahQQYMGDdJPP/2U3/7qq6+qcePG2r59e0mWWiIuuugiPfHEE3riiSc0bNgwBYPBYk/bokUL3X777brnnnu0cOHCuNV4xhlnaMCAAZo4caJ27NgRl/fwZ6a7Dr70NNfB8vmKGA6+SjuRiOtgYtmWp6EkORHHdQgHI+5Ddsh1KKqvvPeybNvT8En/U12H9ad3dR2M82AYIqGw62CazsT0mfvS/J4G2+/LHyQV+H+sRcKO62Baj4BkUhZzRVmcZxOyVC5/hXLuQ/lM18GXHig8pOXeWsj2Wa6DiSlnmbY9psHrNj4SihgGl2mM20dvGdLElJdMn4Eph3w2qIfrEMoOuQ6m7b95ObsPJZ0p8vvff1WY4xzae3nNS6bpgGRSFnNFWZxnE7LUfj6f++D3uw8GedugaAfTNt6f7nMdApkB18G0H8I0nT/d7zp4yYmm3OMLuA9/3Vdy4D4T0/IyZkxDTvzqgtNdB6+8rAuHkmFi3edRTy1wHZJlnyiQCOQKxMLUqVM1cOBAjRgxQvXr11f9+vV1wQUX6KyzztJtt93mqc8SO/D7wQcfaNq0aWrRokWB8ZdeeqleeeUVPf/883rrrbf0ww8/aODAgfnt9913n+bOnavKlSuXVKklavjw4Xr++ec1b948DRo0KKpb5EyYMEG9e/fWBRdcUODLI9buvfde7dy5U9dff33c3gMAgGiUxVxRFue5OMhSAABEryzmirI4z8VBlgIAIHrkCsRKWlqa7rnnHv3+++9au3at1q5dq23btumuu+5Senq6pz5L5MDvrl27NHz4cD366KOqUqVK/vgdO3boscce05133qlTTz1VLVu21MyZM/X+++9rxYoV2rFjhyZNmlTol6e0OfPMM/Xyyy9ryZIlOv3007V79+5iTWdZlmbNmiVJGjlyZNyed1K3bl3ddNNNeuCBBzw/TBoAgFgpi7miLM5zNMhSAAAUX1nMFWVxnqNBlgIAoPhSOldYdvIMKKBcuXJq3ry5mjdvrnLlyh1SXyWydMeNG6e+ffuqe/fuBcavWbNGwWCwwPijjz5aRx55pJYvX66srCz16tWrJEpMuN69e2vRokVauXKlevXqVezb19SsWVMzZ87UwoULdd9998WtvgkTJqhFixb629/+FtVzXwAAiLWymCvK4jxHiywFAEDxlMVcURbnOVpkKQAAiodcgUM1cOBA7dy5M///psEL8wMpYuCZZ57Rhx9+qA8++KBQ29atW5WWllbosvaaNWtq69atUb9XMBiM6nkkJS2vNrca27Vrp8WLF2vgwIHq3bu35s2bp2rVqh203x49eujSSy/V5MmT1alTJzVr1iymded56KGH1L17dz344IP6+9//HrN+Q7b7M0xDtvsqGvYVbssbF/YH3KcLuD+HLRJx/+PB6/PbLNv9/ArT8y5Mz92IhIueLhJy78/0TLFImvtnEAmkHfBzIP/fsN/b2byOZXg/271Pr88iCQfc3882rSuGNsfn7dm7Yb/7ZxT2F3zf/H8dw+dqWpaG9TniuK+XpuWczN+x0TjY9zEOnZdlXJzXlmSuSBZkqT+RpYoWMmwLTDkrLlnKlEUsb1kqEjDkQcM23kvOisgwb5YpJxY/o+Rlq0ggTRHHvU8rYDhH1zBvxvn2GXKp4VmFXp/RZsyzlqHNcH5yca4mi+xff/P+tSxv62Uk4l6HKUtFfGQpHDqyVOyQpf5ElipayLDdMW2TispZeeOKyll5jDnLsH0x8br9N+0TMe3PclsuYZf9VZJ5m2vcT3RAPvvrfinLtK/Ob8jBpnwZ42UimZeLKdt43Q92qJnvwP1Spu+1cMB9eRnzkiF3m/bBJvN3bDTIUvFHlnJhWblDoiVDDQmUlZWV/3dqpUqVjH+zehHXA7/ffvutLrnkEi1ZskQZGRnxfCtJ0uLFiw/5EuiSsGTJEmP7ww8/LElauXJlsfvs3LmzOnfurG+++UbffPPNIdVnMmfOHEnSggULYtdp466x62u/TX3PjXmfKOjb8y5KdAml3pf9zkt0CYX8EMvf/SRwsO9jHLpolvGePXuM7SWdK5IBWapoZKkDHNHW23RHuzeRpeLv+5Gx22GNon01aGSiSyjke7IUokSWOjRkqaKRpQ6Q3sjQZpiucnPXpk9OHey9HhQL+6Xib2Of4ZKkT02/b0NK9nPYQpZClMhSSEYzZ87M/3/eYzNiKa4HftesWaOff/5ZJ510Uv64cDist99+W/fff79ef/115eTkaPv27QXOgvjpp59Uq1atqN+vZ8+eqlSpUixKj4tgMKglS5aoR48eChjOhpKkTZs2qV+/fsrMzNQrr7yiOnXqHLT/zz77TF26dNF5552nqVOnxqrsAr799ls1b95c99xzj84///yY9Llr2g2ubcGdf7i27ft1e6FxYZ9f6zoMVKOXZssXKvoMndBe9zN3Qtkh1zbTWX0mXq+QiITcrwDJ2Z1T5PjgPm9XLPsMV8tkVi64EYsEAvru/L+rzuyHlZ7m7WqTSMhwZUXQdBWRt9s5+dPdv+oC5d3/ikuv6L4Bt71e8Ws4cyy0L7ct7A9oU99z1eS1J+ULBY3rZTjovkzC2YYrfg3LMmI4o/T4l193bUsl0XwfwxsvyzjvFiduSjpXJAOyVEFkqaLtffI/rm2hnbtc2/b8+EuhcWGfX2tbn6GmC59yzVLZu7Ld32+v+zYrlOPeZuJP83Ylqu2L/k4opu2j8epVQ5t9QI2RQJq+H/l3HTHzYfkNV/z60k13LIn9E3tMZxh7zbNe87MptxbnypewP6CvBl6ghnNnua7HeSJh9/cyZamwYX0OG7LuCa8uNtaTKshS8UeWig2yVEFkqaJlv+R+i2pn3z7Xtn0//FhoXMj2aVWTrjpu6fPyhYveVuzbude1T1MWMW2PTfs9bMOVr1733QT3Fr1fyrT/Qh6vXj3wTicRf0D/GzJK9Z99THZO0XUcjGXIUmnl0lzbTMsrbNifFQ66LxdTtvF6xa8pK9qGq4Hz1qOwP6CNfYbn/01gvDPcPvesFclxX59N64rp/Zq/tMi1LZWQpeKPLIVUceqpp2ru3LmFrhTfuXOnBgwYoP/7v/+Lus+4Hvjt1q2b1q9fX2DcyJEjdfTRR+uqq65S3bp1FQgE9Oabb2rQoEGSpI0bN2rLli065ZRTon6/QCCQEl+UxamzWbNmWrJkibp3764uXbrojTfe0FFHHWWcpkWLFrr55pv1j3/8Q927d9cZZ5wRy7IlSQ0bNlS3bt30wAMPaNSoUTG5BN20w8uJuIcAtwAtSb5Q0HUnTyToHgptQxAr6QO/MoR9t2BrGwKVY9ipZTuGHYvBoufbDgbl87iD0DIdwDUEZdMyMbFtw0HvkPvn6gsZlovhljRGhp2PzgFteeuxEzL84WT648FwUNi4LA23BU+F79hopMp2I5VFs4wP9rqSzhXJgCxVNLJUQUHHsE0y5Cy/xyzlM5zEFDG02R4P/NqG2wIaD/xGDMvWbVvn8cCvadvpdgDaDubINh34Ndym25TdvDJmtxQ78JvHtB7nsQw7tR1jzjK1ufeZCt+x0UiV7UYqI0sdGrJU0chSBYVlOPBm+Nvfb3i8ki8cki/skqUM2ybT/hLT9thneMyAaf+Fed+N6cT8oufBMWRBrwcx3Wq0Q0HZhn18JqYs5TM8usSYiQzLy7jvxnjg19u+J+N+PsPtlw9cj/L3S5lOgDTdGtcw36Z9sKb3S4Xv2GikynYjlZGlDmDbuUOiJUMNSWLZsmXKKeJ4z759+/TOO+946jOuB34rVqyo4447rsC48uXLq1q1avnjR40apUmTJqlq1aqqVKmSxo8fr1NOOUVt23q8ZV0p0rBhQ7399tvq3r27OnXqpDfeeOOgz0m5+OKLtWjRIl144YVat26dateuHfO6Lr74YvXp00crVqxIni8sAECpVxZzRVmc51giSwEA8KeymCvK4jzHElkKAIA/kSsQS+vWrcv//6efflrgOdDhcFiLFi3SEUcc4anvhB9Wv+uuu3T66adr0KBB6tSpk2rVqqW5c+cmuqykUadOHb399tuqUaOGOnfurDVr1hhfb1mWZsyYIb/fr/PPP18Rj2eGmfTs2VMNGzbUgw8+GPO+AQA4FGUxV5TFeY4GWQoAgOIri7miLM5zNMhSAAAUH7kCxXXCCSfoxBNPlGVZOvXUU3XCCSfkDy1bttSUKVN04403euq7xA/8Llu2THfffXf+zxkZGXrggQe0bds27d69W3PnzuV+5weoUaOGli5dqoYNG6pv374FjvwXpXr16po9e7aWLFlSYFnHim3bGjt2rJ577jn98kvhZ8MBAFBSymKuKIvzfKjIUgAAFK0s5oqyOM+HiiwFAEDRUi1XOJaVNENZ9/XXX2vz5s1yHEerVq3S119/nT98//332rlzpy688EJPfSf8il8UT9WqVfXKK6/IsiwNHz5c4bD5Wac9e/bUpEmTdPXVV+ujjz6KeT0jR46UbduaMWNGzPsGAACINbIUAACAd2QpAACA2KlXr57q16+vSCSiVq1aqV69evlD7dq15fO5P6/9YDjwm0Jq1qypOXPmaNmyZbr55psP+vr//Oc/atasmYYNG6Y9e/bEtJZq1app6NCheuihhw4a9gEAAJIBWQoAAMA7shQAAEBs3XLLLUWeyDZjxgzddtttnvr0H2pRKFldu3bVP//5T02ePFkdO3ZUt27dXF+bnp6up59+WieddJImTZqkhx9+OKa1XHzxxZo1a5YWLlyo008/3XM/luHMBcsq2XMTLDv27+dEHE/ThYOxfw6OFwfWEbFyfw6HInL87rdksP3uXy+23/0zNy2vSMi1ydinPyPg2pZWPs29U4+cODzDyAvL5pYZAHCgUpmlAu7bOWPOKmI7kTfOl+aXzy56m+zPcN/OmbaBpu2SafvvdbpQyH0nsJd8Fgl7y3Qmpnkz5VKv23ivy9lrRjavD+59+gLu663pczjqqQWSpGAwqC8WLNBRs+YpEAho45BehjoMedbn3sYhBgBlVWnMUjJt5wz7pYraluWNswM+2S5ZKpDpnt0k9zZfmvt+FtN21bQ9jhjyUijbfSdMaF+wyPHBvUWPPxh/uvu8FZrv/ft/fAGfbMd9OtO8mZaJab5N+55MucHxu38+kZDp8/GWP02Zz9TWcNarknKz1KcLFqj+Q88pYPhbQ5IxZ3kVj9wNYD/LMm7bSrQOSJKmTZumOXPmFBrfrFkzDR06VFdddVXUfSbBJ4xoXXvtterWrZuGDx9+0OeqHH300br77rs1bdo0zZs3L6Z1tGzZUocffrheeOGFmPYLAAAQT2QpAAAA78hSAAAAsbF161bVrl270Pjq1avrxx9/9NQnB35TkM/n05NPPinLsjRs2LCD3tJmzJgxOvPMMzV69Gh9//33Mavjpptu0o8//qizzjorZn0CAADEG1kKAADAO7IUAAApyrKTZ4AkqW7dunrvvfcKjX/vvfd0+OGHe+qTpZuiatasqaefflpvvfWWbrrpJuNrLcvSo48+qoyMDI0YMUKRGNyG9sUXX9S//vUv3XzzzYd2Ox0AAIAEIEsBAAB4R5YCAAA4dGPGjNHEiRM1c+ZMffPNN/rmm280Y8YMXXrppRozZoynPjnwm8K6dOmSH3LfeOMN42urVaumJ554QkuXLtWtt956SO+7bt06jRgxQoMHD9a11157SH0BAAAkClkKAADAO7IUAADAobniiis0atQoXXzxxWrYsKEaNmyo8ePHa8KECbrmmms89cmB3xR3zTXXqHv37ho+fPhB7/d96qmn6pprrtF1112noUOH6ueff476/X799Vf1799fTZo00YwZM2TxEG4AAJDCyFIAAADekaUAAEgdjmUlzYBclmXptttu0y+//KIVK1bo448/1rZt23TjjTd67tMfw/qQAHnPVTnhhBN0zjnn6I033pDf7/6xTpkyRc2aNdOECRN0zDHH6J577tHw4cOLFZSDwaDOPvts7d69W2+99ZbKly8fk3mwAu712ulp7m1+X6Fxji93nC/gk88q+tZBIdt9Xi1DWyTk/swaJ+K4tpUk22eo33Ceh2m+D5y3vJ+diCPHcHcmU5/m9yv8ueaxw+7L2Rdwn7+i1pU/a3GfzjHcfioScm0y8rKuRELudZj687pemtYjAChtSkWWSnPPS5bPsA0sYvto2fuzVFpAPpftQbph22naHoey3Teepm1dOMd9upAhn4WD0d9G0us20LTNPbCKiC/3tZGII7l/PMa8ZMo2XjOr6TOwbPfpvOYs07I2zbvP0PbF8NMkSWF/QBp4oTaPPku+UDCqrAsAiE5pyFJenzNoF7E/y7Zy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V69evbR582alp6erS5cu6tKlizIyMrR582b16tXLU/9c8YuotWjRQh988IGuvvpqTZw4UQsXLtTMmTNVu3btRJcGAACQ9MhSAAAA3pGlAADwxpEtx3TLgBKsoyybPHly/v9Hjx6tCRMm6Oabby70mm+//dZT/2V76cKzjIwM3X333Vq0aJE+/vhjtWjRQvPnz090WQAAACmBLAUAAOAdWQoAAJQGzz//vEaMGFFo/LnnnqsXX3zRU58c+MUh6dWrl9atW6f27dtrwIAB+vvf/67du3cnuiwAAICUQJYCAADwjiwFAABSWWZmpt57771C49977z1lZGR46pMDvzhk1atX17x58zRt2jQ98cQTOumkk7RmzZpElwUAAJASyFIAAADekaUAACgmy0qeAZKkiRMnauzYsZowYYKefPJJPfnkkxo/frzGjRunSy+91FOfHPhFTFiWpYsuukgffvihKlasqLZt2+qWW25ROBxOdGkAAABJjywFAADgHVkKAACkoquvvlqzZ8/WmjVrNGHCBE2YMEEffvihZs6cqauvvtpTn/4Y14gyrmnTpnr//ff1z3/+U9ddd50WLVqkJ554QkceeWSJ1lHhbzcrEAhEPV1WHGpBdJo8vahE3++78YNd22y/z7UtnJ3j2lb3Qfd77/9vdP/iFRYDlu1+5pRlu5/3Y5oOABBfsc5SmeddH+MKpSrXPRTzPhE7zeb/X4m+31cXnO7aZvvd84YTcc8b9ae7P6PR9H5HPbVAkhQMBrVxwQI1mv7CQf8m+Lh3J2O7GycY8TQdACC+kmW/VHrfv3vaL4XEO37R2yX6futO6+JpukjI/aQGUx789Mxurm3+jNx11olE8v91IhGFc0Ku04QNmSivn6LbHNc2AHFkWZKVBNeDcsVvAYMHD9bgwe7HKaKVBJ8wSpu0tDT95z//0dKlS/X111+rRYsWeuaZZxJdFgAAQEogSwEAAHhHlgIAAGUZB34RN507d9a6devUp08fnXPOOTrvvPO0Y8eORJcFAACQEshSAAAA3pGlAABAWcSBX8RV5cqVNWfOHD3xxBOaP3++jj/+eL377ruJLgsAACAlkKUAAAC8I0sBAPAnx7KSZkD8cOAXcWdZls4991x9/PHHqlOnjjp37qwbbrhBwWAwgHrosgABAABJREFU0aUBAAAkPbIUAACAd2QpAABQlnDg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jiwFAGWQJcmykmBI9IJIHtdff70WL16s7du3a+nSpTr99NO1evVq9e3bV1WrVvXUJwd+gQQ7+eSTtWLFCk2bNk0vv/yymjRpovvvv5/b7AAAABQDWQoAAMA7shQAAIn31Vdfaf369fr444+1bt06VaxYUX369PHUFwd+gSTg8/l00UUXadOmTRoyZIgmTJigk08+We+//36iSwMAAEh6ZCkAAADvyFIAACTGsGHDdMQRR6hdu3ZatGiR2rZtq4ULF+rXX3/VvHnzPPXJgV8giVSrVk3Tpk3TihUr5Pf71b59e1144YXcZgcAAKAYyFIAAADekaUAoHRzZCfNgFzPPPOMgsGgRo8erb///e8aM2aMjj/+eFmW9/ths3SBJNS6dWutWLFCDz/8sF566SU1bdpUDz74oMLhcKJLAwAASHpkKQAAAO/IUgAAlIzffvtN06dPV05Ojq655hoddthhateuna699lotXrzYU58c+AWSlM/n09/+9jdt2rRJZ511lsaNG5cfvAEAAGBGlgIAAPCOLAUAQPxVqVJF/fr105133qk1a9Zo3bp1atKkie644w6e8QuUVocddpgeffRRLV++XJJ0yimnaPTo0frll18SXBkAAEDyI0sBAAB4R5YCgNLDsaykGZDrt99+09y5czVhwgS1aNFCRx99tF599VWdccYZuvPOOz31yYFfIEW0bdtWq1at0oMPPqgXX3xRTZs21fTp0xNdFgAAQEogSwEAAHhHlgIAIPZq1KihsWPH6ocfftCYMWP00Ucf6ddff9XcuXN1ySWXeOqTA79ACvH5fBo7dqw2bdqkAQMGaMyYMbrnnnsSXRYAAEBKIEsBAAB4R5YCgNTmWHbSDMi1bt06/fTTT3rhhRc0fvx4NW/e/JD79MegLgAlrHr16poxY4aqV6+uiRMn6rDDDtPw4cMTXRYAAEBKIEsBAAB4R5YCACA2mjVrFvM+OfALpLBbb71VP//8sy644AJVq1ZNvXv3TnRJAAAAKYMsBQAA4B1ZCgCA5MP11EAKsyxLjz76qHr37q1BgwZp5cqViS4JAAAgZZClAAAAvCNLAUBqcWQlzYD44cAvkOL8fr+effZZnXjiierbt68+++yzRJcEAACQMshSAAAA3pGlAABILhz4BUqBcuXK6ZVXXlHt2rXVq1cvffvtt4kuCQAAIGWQpQAAALwj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7z1J0n333ae5c+e6/pFTmh3qevz5558rEolo2rRpaty4sTZs2KAxY8Zo9+7dmjp1qiRpy5Ytuv322/XMM8/o+++/18iRI/Xpp58WeI+NGzcWOounRo0asZrNlMB67E0svou7du2qa6+9VrVr19b333+vyy+/XGeddZbef/99SazD0WA9RjTIUsmD313vyFLJg/XYG7JUcmE9RjTIUsmD313vyFLJg/XYG7JUcmE9Rmmxe/du3XrrrXrzzTf1888/KxKJFGj/6quvou/UQVQkOfPmzSsw7vzzz3f69+9frOlnzpzpZGVlFRq/Y8cOp169es4vv/zi/PLLL079+vWdnTt3Oo7jOF9//bUjyfnoo48OrfhSqkqVKs706dOd7du3O4FAwHn++efz2z777DNHkrN8+XJn+/btzqJFixJYafI41PU4z+233+40aNAg/+f169c7rVq1cnbt2uV89dVXTv369fPbli5d6khyfv/990OovPRiPY5OrNbh+fPnO5ZlOTk5OY7jsA4fKtZjFAdZKvnwuxs9slTyYT2ODlkqObEeozjIUsmH393okaWSD+txdMhSyYn12N2OHTscSc7HH33ofPXlFwkfPv7oQ0eSs2PHjmLV/9Zbbzmnn366U7t27SJ//yQVOdx+++35r1mzZo3TvXt3Jysry6lataozZswY548//jC+79atW53zzz/fqV27tpOZmen06tXL2bRpU4HX/Pjjj865557r1KxZ0ylXrpxz4oknOi+88ELxPhjHcYYOHerUrl3bufLKK5277rrLufvuuwsMXnCr5xhZtmyZatSooaZNm2rs2LH67bffopq+UqVKGjlypGrXrq3DDz9cY8eOVcWKFeNUbekQDof1zDPPaPfu3TrllFO0Zs0aBYNBde/ePf81Rx99tI488kgtX75cWVlZ6tWrVwIrTn7Rrsc7duxQ1apV838+7rjj1KJFC2VlZalZs2aaMmVKvEtOeazHsRXNOrxt2zY99dRTateunQKBgCTWYa9YjxELZKmSx+9u7JGlSh7rcWyRpRKD9RixQJYqefzuxh5ZquSxHscWWSoxWI+Lz5GVNEM08q64f+CBB4ps//HHHwsMM2bMkGVZGjRokCTphx9+UPfu3dW4cWOtXLlSixYt0ieffKILLrjAfVk5jgYMGKCvvvpK8+fP10cffaR69eqpe/fu2r17d/7rRowYoY0bN+rll1/W+vXrNXDgQA0ePFgfffRRseZt4cKFev7553Xbbbdp4sSJuuSSSwoMXnCr5xjo3bu3Bg4cqAYNGmjz5s269tpr1adPHy1fvlw+n6/Y/UyePFkTJ06UbdtFhut27drJtgseq9+1a9ch159q1q9fr1NOOUX79u1ThQoVNG/ePB177LFau3at0tLSCt2eoWbNmmXyOQfRinY9/vLLL3Xffffl304nz2OPPabbb79d5cqVU2ZmZqHp6tSpU+DnevXq6ZNPPontzKQA1uPYK+46fNVVV+n+++/Xnj171LZt2wLPrpJYh6PBeoxYIUuVLH5344MsVbJYj2OPLFXyWI8RK2SpksXvbnyQpUoW63HskaVKHutx6tu5c2eBn9PT0wvdIl2S+vTpoz59+rj2U6tWrQI/z58/X127dlXDhg0l5T7TORAI6IEHHsjPMg8//LBatGihL7/8Uo0bNy7U5xdffKEVK1Zow4YN+Y+6eOihh1SrVi09/fTTGj16tCTp/fff10MPPaTWrVtLkq6//nrdddddWrNmjU488cSDLoMqVaoUOIkpFjjwGwNDhw7N/3/z5s3VokULNWrUSMuWLVO3bt2i6isrK8u17dlnn9Uxxxzjuc7SomnTplq7dq127NihF154Qeeff77eeuutRJeV8qJZj7///nv17t1bZ599tsaMGVOoL9Mzft55550Cf0DmndFW1rAex15x1+ErrrhCo0aN0jfffKN//etfGjFihF599VVZ1p9nmrEOFw/rMWKFLFWy+N2ND7JUyWI9jj2yVMljPUaskKVKFr+78UGWKlmsx7FHlip5rMfRcyxLjhXd1bbxqkOS6tatW2D85MmT9c9//vOQ+v7pp5/02muvafbs2fnjsrOzlZaWVuAEtrwTK959990iD/xmZ2dLkjIyMvLH2bat9PR0vfvuu/kHftu1a6dnn31Wffv2VeXKlfXcc89p37596tKlS7Hqvfnmm3XjjTdq9uzZKleuXNTzWxQO/MZBw4YNddhhh+nLL7+MOmCb1K1bt8gVsKxJS0vLXw4tW7bUBx98oHvuuUdDhgxRTk6Otm/fXuBsnp9++qnQGR84OLf1+IcfflDXrl3Vrl07PfLII1H326BBg0JnW5VFrMfx57YOH3bYYTrssMPUpEkTHXPMMapbt65WrFihU045pVj9sg7/ifUY8UKWii9+d0sGWSq+WI/jjywVf6zHiBeyVHzxu1syyFLxxXocf2Sp+GM9Tn3ffvutKlWqlP9zUVf7Rmv27NmqWLGiBg4cmD/u1FNP1aRJk3THHXfokksu0e7du3X11VdLyr1NdFHybg9+zTXXaNq0aSpfvrzuuusufffddwWmee655zRkyBBVq1ZNfr9f5cqV07x584yZ6cQTTyxwsseXX36pmjVrqn79+oVO5vjwww+jXgY84zcOvvvuO/3222+qXbt2okspEyKRiLKzs9WyZUsFAgG9+eab+W0bN27Uli1bir3hxJ+KWo+///57denSRS1bttTMmTML3eIJ3rEex15xvosjkYikP8/gwqFhPUaskKVKFr+78UGWKlmsx7FHlip5rMeIFbJUyeJ3Nz7IUiWL9Tj2yFIlj/U49VSqVKnAEIsDvzNmzNDw4cMLXKnbrFkzzZ49W//9739Vrlw51apVSw0aNFDNmjVdtyWBQEBz587Vpk2bVLVqVZUrV05Lly5Vnz59Ckxzww03aPv27XrjjTe0evVqTZo0SYMHD9b69etdaxwwYID69++fP1x22WW6/PLLddZZZxUY379/f0/LgCt+i2HXrl368ssv83/++uuvtXbtWlWtWlVVq1bVv/71Lw0aNEi1atXS5s2bdeWVV6px48YFHhC+ZcsWbdu2TVu2bFE4HNbatWslSY0bN1aFChWKVcdvv/1W6B70lStXLrACl3bXXHON+vTpoyOPPFJ//PGH5syZo2XLlun1119XVlaWRo0apUmTJqlq1aqqVKmSxo8fr1NOOUVt27ZNdOkJd6jrcV64rlevnqZOnapffvklv69ozpT6+eeftW/fvgLjqlWrVqZuS8J67M2hrsMrV67UBx98oA4dOqhKlSravHmzbrjhBjVq1Ciq0Mc6nIv1GNEgSyUPfne9I0slD9Zjb8hSyYX1GNEgSyUPfne9I0slD9Zjb8hSyYX12BvHseQ4SXCr5zjV8M4772jjxo169tlnC7UNGzZMw4YN008//aTy5cvLsizdeeed+c8BLkrLli3zbyeek5Oj6tWrq02bNmrVqpUkafPmzbr//vsLPAf4+OOP1zvvvKMHHnhADz/8cJH9Tp48OQZza+DgoJYuXepIKjScf/75zp49e5yePXs61atXdwKBgFOvXj1nzJgxztatWwv0cf755xfZx9KlSw/6/l9//XWR00pynn766TjNdXK68MILnXr16jlpaWlO9erVnW7dujmLFy/Ob9+7d69z8cUXO1WqVHHKlSvnnHnmmc6PP/6YwIqTx6GuxzNnznRdDw/l/SU5y5cvj9dsJyXWY28OdR1et26d07VrV6dq1apOenq6U79+fefvf/+789133x3S+5fFddhxWI8RHbJU8uB31zuyVPJgPfaGLJVcWI8RDbJU8uB31zuyVPJgPfaGLJVcWI+js2PHDkeS8+FHHztffPlVwocPP/rYkeTs2LEj6nmR5MybN6/ItvPPP99p2bJlsfp57LHHnHLlyjm///57sd9706ZNjm3bzuuvv+44Tu7vtSTn008/LfC6nj17OmPGjClWn1u2bHG+/fbb/J9XrlzpXHLJJc60adOKXdeBLMdxHAEAAAAAAAAAAAAoVXbu3KmsrCx9+NHHqlixYqLL0R9//KGTTjxeO3bsKPCMXzd/veL+xBNP1J133qmuXbv+P3v3HR5Vlf9x/DMzmTRIQuigNOmCYEUBaRawIoIrFqyoqwKKqKurrlhX7AW7sqi7uvaKyIL8ALGhAhYUQRGlF0ESICSZcn5/xESHzLlkLplkZni/nmceyP3OPffcMzczn8yZe0f169dXy5YtJZXtY7NmzXTvvffq4osvrtTGww8/rF69eqlu3bqaMWOGrr76ak2YMEGXXXZZxX06deqkO+64QyeffLIk6ZVXXlGjRo3UsmVLffPNN7r88st10EEH6bXXXpMkBQIB7bvvvmrWrJnuueceNWjQQG+++aauvvpqTZkyRccdd9wu961Pnz666KKLdNZZZ2ndunXq0KGDunbtqh9++EFjxozRjTfeuOsB3QmXegYAAAAAAAAAAABSmldGifD96LH14YsvvtCAAQMqfh43bpwk6ZxzztEzzzwjSXrxxRdljNHpp58etY3PPvtM48eP17Zt29SpUyc98cQTOuussyLus2TJEhUUFFT8vHbtWo0bN07r169Xs2bNdPbZZ+sf//hHRd3v92vq1Km69tprdeKJJ2rbtm1q166dnn322SpN+krSokWL1KNHD0nSyy+/rP32208fffSRpk+frosvvtjVxC9n/AIAAAAAAAAAAAAp6I8zfr9R3QQ443fb1q068ID9qnzGbyqrW7euFi1apNatW2vw4MHq3bu3rrnmGq1YsUIdO3bUjh07Ym4zEab2gZTy+eefa/To0erSpYvq1Kmjli1b6tRTT9XSpUuj3n/x4sU65phjVLduXdWvX19nnXWWNm7cWOl+4XBYd911l9q0aaPMzEx169ZN//3vf6O2+fDDD6tz587KyMjQXnvtpXHjxmn79u1V3oeSkhJdc801at68ubKysnTooYdqxowZUfv0+OOPa//991fdunXVpEkTHXvssfr444+rvK0tW7booosuUqNGjVSnTh0NGDBACxYsqHS/l156SSNGjFD79u3l8XjUv3//Km+j3KRJk9S5c2dlZmaqffv2mjhxYqX7vPHGGxo0aJCaN2+ujIwM7b333jrllFO0aNGiKm1jzZo1GjFihDp27KicnBzVq1dPPXr00LPPPqton7NZvXq1Tj31VNWrV0+5ubk66aST9NNPP1V5n6r6WEnSxx9/rMMPP1zZ2dlq2rSpLrvsMm3btq3K2wIAoCaQpZI7S+3s6KOPlsfj0ejRo6u0jW+//VZ/+ctftM8++yg7O1sNGzZU37599c4770S9f1Uff5uqjp8kvf322zrwwAOVmZmpli1bavz48QoGg1XeFgAANYEsldxZ6qabbpLH46l0y8zMrNI2yFIAkFy6dOmixx9/XHPnztWMGTN0zDHHSCqbZ2jQoIG7Rl1/OzCAqIYNG2aaNm1qxowZY5566ilz6623miZNmpg6deqYb775JuK+K1euNA0bNjRt27Y1Dz74oLn99ttNfn6+6d69uykpKYm477XXXmskmQsvvNA8+eST5vjjjzeSzH//+9+I+/3tb38zkswpp5xiHnvsMTNmzBiTlpZmBg4cWOV9OO2000xaWpq56qqrzBNPPGF69uxp0tLSzNy5cyPuN27cOCPJjBgxwjzxxBPmzjvvNPvss49JS0sz8+bN2+V2QqGQ6dWrl6lTp4656aabzMMPP2z23Xdfk5OTY5YuXRpx3379+pm6deuaAQMGmPz8fNOvX78q748xxjz++ONGkhk2bJh58sknzVlnnWUkmQkTJkTc7+abbzbDhw83EyZMME8//bS57bbbzD777GOysrLMl19+ucvtfPXVV6Zfv37muuuuM48//riZOHGiGTx4sJFk/v73v0fcd+vWraZ9+/amcePG5s477zT33XefadGihdl7773Nr7/+WqX9qupjtXDhQpOZmWkOOOAA89hjj5nr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P2+rRYsWle5b/p2DAAAkErJU8mUpJy1atKg0gR0LshQAJK6ZM2dq5syZ2rBhg8LhcETtX//6V8ztMfELxEFxcbFOPPFELV26VO+//7723XffSvfZa6+91KhRI33xxReVap999pn233//ip/3339/Pf3001q8eHFEW+WX0Pvzfcu1b99e7du3lyR99913Wrt2rc4991xJUtOmTTVjxoyI+3fv3r2irVmzZqmwsFC5ubnWba1fv15S2ac0dxYIBBQMBiva3XlbTZs2rWhr7ty5CofDEZdQnjdvnrKzsyv+INhd5X3+4osvdNxxx1Us/+KLLxQOh6OO38527NihgoIC130ov6xNeRter1f77bdf1Md/3rx52meffZSTk+PYZlUfq65duyotLU1ffPGFTj311Ir7lZaW6ssvv4xYBgBAIiBLJWeWWrFihQKBgHr37l2pjeeee07PPfec3njjDQ0ZMiTmPuycpWJ5/G2qOn5/3v8/vzG5Zs0arVq1ShdddFHM+wMAQDyRpZIzS9kYY/Tzzz/rgAMOcN0HshQAiUs9J6Kbb75Zt9xyiw4++GA1a9Ys4gNWrhkA1SoYDJrBgwebtLQ08+677zre9+KLLzZZWVlmxYoVFcvef/99I8k89thjFctWrlxp/H6/GTVqVMWycDhs+vTpY/baay8TDAat2wiFQub444832dnZ5pdfftll/z/99FMjydx9990Vy4qLi027du3MoYceWrHsiy++MJLMOeecE7H+/PnzjdfrNRdffPEut/Xiiy8aSeaVV16pWLZx40ZTr149M3z4cOt6Xbp0Mf369dtl++WKiopM/fr1zQknnBCxfMSIESY7O9ts2rSpYtn69esrrb98+XKTk5Nj+vTpE7F8zZo1ZvHixaa0tLRi2YYNG6L24cQTTzQej8f88MMPFcsmTJhgJJnPP/+8Ytn3339vfD6fueaaayLW/+WXX8zixYsjllX1sTLGmGOOOcY0a9bMFBYWVix7+umnjSTz3nvvRe0zAAC1gSyVvFlq8eLF5o033qh0k2SOO+4488Ybb5g1a9ZUrB8t30TLYqWlpebAAw80WVlZZuvWrRXLq/r4G2PMjz/+aH788ceIZbGMX6dOnUz37t0jjpUbbrjBeDwe891330UfOAAAagFZKnmzlDHR31d65JFHjCRz3333RSwnSwGoqoKCAiPJfLZwsfnux1W1fvts4WIjyRQUFNT20NS6pk2bmueee65a2/QYY8zuTx8DKDd27Fg9+OCDOvHEE6OeSTlixIiK/69cuVIHHHCA6tWrp8svv1zbtm3T3Xffrb333luff/55xCVV/va3v+nuu+/WRRddpEMOOURvvvmm3n33XT3//PM644wzKu53+eWXq7i4WPvvv78CgYBeeOEFffbZZ3r22Wd11llnVWkfTj31VL3xxhu64oor1K5dOz377LP67LPPNHPmTPXt27fifgMHDtSMGTN08skna+DAgVq7dq0mTpyo0tJSzZ8/Xx07dnTcTigU0uGHH65Fixbp6quvVsOGDfXoo49qxYoV+vzzzyPW/+CDD/TBBx9IkiZOnKjs7GyNHDlSktS3b9+IfkXz6KOPatSoUTrllFM0aNAgzZ07V88995xuv/12XXfddRX3a9KkiY488kjtv//+ys/P1w8//KBJkyapqKhIM2fOVK9evSrue+655+rZZ5+tuESQVPb4f/TRRzrmmGPUsmVLbd68Wa+99po+//xzjRkzRg899FDF+lu3btUBBxygrVu36qqrrpLf79d9992nUCikL7/8Uo0aNaq4b//+/TVnzhzt/JRd1cdqwYIF6tWrl/bdd19ddNFFWrVqle6991717dtX//vf/xzHDgCAmkSWSu4sFY3H49GoUaP08MMPRyyPlm9OPvlkFRYWqm/fvtprr720bt06Pf/88/r+++917733aty4cRX3jeXxL89qf74EdSzjN2XKFA0ePFgDBgzQaaedpkWLFunhhx/WyJEj9eSTTzruPwAANYksldxZKjs7W8OHD9d+++2nzMxMffjhh3rxxRfVvXt3ffTRRxFfmUGWAlBVhYWFysvL02cLF6vuLq4yWRO2bd2qHgd0VkFBQcTVHfZEDRo00Geffaa2bdtWX6PVOo0MwPTr189Ist52tmjRIjNw4ECTnZ1t6tWrZ84880yzbt26SvcLhULmn//8p2nVqpVJT083Xbp0Mf/5z38q3W/y5Mmme/fupk6dOiYnJ8cceeSR5v/+7/9i2ocdO3aYq666yjRt2tRkZGSYQw45xEybNq3S/YqKiswtt9xi9t13X5OVlWXy8vLMCSecYBYuXFjlbW3evNmMHDnSNGjQwGRnZ5t+/fpFnAFbbvz48dYxHT9+fJW29eSTT5qOHTua9PR007Zt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zSmLDNr0rbUGAHsaslTqKXr2FnsxyhcUBuWV8rtpxwt3KiD7a7lN9jk3xrxObcgd90C1trf1wSurtT1JWnHxUFfrtXz89WruidR92geu1nN6T7HNv9621pz23evf9XRA6Pf4GioNSqGgVo051XrfvSe+vMv2YjXlqX2rvU0ASFRnn322BgwYoL59+6pt27bV0qb9HZYkRMAGAABwjywFAADgHlkKAAAAsUhPT9cdd9yh9u3bq0WLFhoxYoSefvpp/fDDD67brNGJ3wkTJsjj8Wjs2LEVy4qLizVq1Cg1aNBAdevW1bBhw7R+/fqK+pQpU9SuXTtt2bJll+0TsAEA2HPEO1ckIrIUAACoLmSpMmQpAADgRjJmqbBJnBvKPP3001q6dKlWrlypu+66S3Xr1tW9996rTp06ae+993bVZo1N/H7++ed64okn1K1bt4jlV1xxhd555x298sormjNnjtasWaOhQ/+4HMXEiRP1+uuvq169ervcRkFBQXV3GwAAJKCayBWJhiwFAACqC1nqD2QpAAAQqz0xSyG+8vPz1aBBA+Xn56tevXpKS0tTo0aNXLVVIxO/27Zt05lnnqmnnnpK+fn5FcsLCgo0adIk3XfffTriiCN00EEHafLkyfr444/16aefqqCgQOPGjav0y2NTWFgoE+X7NQAAQOqoqVyRSMhSAACgupClyFIAAMC9PTFLIX6uu+469erVSw0aNNC1116r4uJiXXvttVq3bp0WLlzoqs0amfgdNWqUjj/+eB111FERy+fPn69AIBCxvFOnTmrZsqU++eQT5eXladCgQVXeTjAYVEmJ/UvvAQBA8qupXJFIyFIAAKC6kKX+QJYCAACxSuYsZUzi3FBmwoQJWrZsmcaPH68XX3xR999/v0466aSIDxXEKq0a+xfViy++qAULFujzzz+vVFu3bp3S09MrndbepEkTrVu3LuZtZWZmatOmTWrcuLHb7sZVIBCI+Be7Z/W4syotC/nSpAF/0cprRsoXCkZf0WNvM+TwWYjikrC1VrrNsi1JJVvtj/f2DaXW2m0d7rXWMrpkRl2en51lXcef7ndV21mar+xZOSvLq7DHYb93FFlrpUX2P4SLt2631sbNGmOteX32B9aX5bPWnExvZa8N+PFTV206Ofy7LySVPUfMmDFDh302W36/X7PaHWZdx2TYj9kjfvjYWrv7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YPfn7fgC7u+Bnedtf3zSbPdbfH7S7yzXMlMOicf+32teKkum5TblJQBIFLJU2bKqVHMvC+a4TxhhH+I7kKV8gYB8TuR1aOe47yHtkHsmCue6l9mG42de93Vejm2Y9rkf9z7DUzsOzhq2zykc7zO08eSF77mWmY6RmbKNafnCIff17HePz7J8hixvYGpLXo779mD5yi77mNphQj4DUJEcdthh6tu3b0zrTJb/xZPS5Zdfrv/7v//Te++9p44dO+rLL7+M6/ymTZsmSRo8eHCp6vH7/Ro1alThbXXatGmjKVOmxPRScQAAgEMhSwEAAHhHlgIAALFk25JtO0kwJHpNJI8pU6YYBy/o+D2EHj16aOXKldqzZ4/atWunFStWxGU+juPo2WefVe/evXXkkUfGpM6TTjpJq1ev1qBBgzRixAgNHTpUv//+e5HX/P777/r000+1bdu2mMwTAADgz8hSAAAA3pGlAAAAyr/t27dr+fLlWr58ubZv316quuj4LYGmTZtq1apVatiwobp27Vp4BmQsffDBB9q4caNGjBgR03orV66sZ555Ri+99JJmzZqlli1bqmvXrmrcuLGqV6+uatWqqVGjRqpXr55uuOEG7dmzJ6bzBwAAIEsBAAB4R5YCAAAon/bs2aMRI0bo6KOPVufOndW5c2fVqVNHI0eO1N69ez3VScdvCR111FF6++23NWDAAF1wwQW65ZZbZMfwevTnnntOxxxzjLKzs2NW558NHjxY69at06mnnqratWvrnHPO0cSJEzVt2jS98847uv766/Xggw+qUaNGmjFjBrffAQAAMUWWAgAA8I4sBQAASsux7aQZkG/ChAlaunSp3nzzTe3cuVM7d+7U7NmztXTpUl111VWe6gzEuI3lWnp6uqZOnaomTZro+uuv1+bNmzV16lRVrly5VPXu27dP06dP12WXXSa/3x+j1hbXsGFDzZw5M2JZ165dNWzYME2YMEEDBw7Uk08+qUmTJumkk06KW3sAAEDFQpYCAADwjiwFAABQvrz22mv697//rS5duhSOO/vss1WpUiX97W9/0xNPPBF1nXT8RsmyLF133XVq2LChLrjgAnXr1k1vv/12qUL2Rx99pJ07d6p169YxbGn0GjRooDfeeEMLFy7UqFGjdOGFF2rNmjXxn7FluRcF3P/hsCJMF2lcNOxQnmvZsY+96qnO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qdavX19s/KpVq7R27VpPddLxW0bOOussvfHGG5LyL+HeuXNn1HVcddVVOvPMMzV06FD9/PPPMW7hH5o3b64JEyboH//4h7744ou4zQcAAKCkyFIAAADekaUAAECqSktLU+vWrYucfGbbthYvXqysrKyI02RlZRU7WW3RokWur0+UMWPG6Jtvvik2/rvvvtOYMWM81UnHbxkq2KA+++wzde3aVdu3b49qep/Pp+eff145OTkaNWqUHCd+txebOHGiatasqcsvvzyu8wEAACgpshQAAIB3ZCkAAJCqJkyYoMmTJ+v555/XJ598otGjR2vPnj2Fj7EYOnSorr/++sLXjxs3TvPnz9cDDzygzZs369Zbb9XatWt1+eWXF75mx44dWr9+vf773/9KkrZs2aL169eX6XOA//vf/+qUU04pNr5Vq1aF7YoWHb8JMG/ePP3www86/fTT9f3330c17THHHKNnn31Ws2fP1tNPPx2nFkpVqlTRY489pvnz5+vVV1+N23wAAACiRZYCAADwjiwFAABSTf/+/XX//ffrlltu0cknn6z169dr/vz5qlWrliTp66+/1g8//FD4+g4dOmj69Ol6+umn1bJlS/373//WrFmz1KxZs8LXzJkzR61atdI555wjSRowYIBatWqlJ598ssyWKz09vdgtqSXphx9+UCAQ8FQnHb8J0LRpUy1btky//fabTjvtNH355ZdRTd+7d29deumluvLKK/XJJ5/Ep5GSzj33XPXp00fjx4/Xrl274jYfAACAaJClAAAAvCNLAQCAVHT55Zfrq6++Uk5OjlatWqV27doVli1ZskRTp04t8vrzzz9fW7ZsUU5OjjZt2qSzzz67SPmFF14ox3GKDbfeemsZLE2+7OxsXX/99UWyzs6dO3XDDTforLPO8lRnmXb83nPPPbIsS+PHjy8ct3//fo0ZM0ZHHHGEqlatqn79+hXp3Z47d65OPPFET88eSWYNGzbUe++9J8uydNppp+nTTz+NavoHHnhA9evX18CBA5WTkxOnVkqPPPKIdu/erZtvvjlu85Dlcx/8ftfBijj4DlRpuQ+W++ALBlyHQEbQMKS5Dv60gOsQeRnyB1NbXOsM+l0HE8d2SjzIPnCLJduRY9uug+k98AV8rsOW/t1dBxM77LgOls/nOvgCftfBtAzJwvQemNaJaTrj+w8kkYqYKyri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TLeWNmQR03EpU8fvwXX6cnPly82VDNPE4zvPl+uez1LhOzYaqbLfSGVkKSS7CRMmaMyYMdq/f78cx9Hq1av18ssv6+6779Yzzzzjqc64dvyWxIMPPiifz6d+/fopJydH3bt31+OPP57oZiUFn8+nSZMmqUqVKho3bpz27Nmj66+/3jhN8+bNdd999+mKK65Q9+7ddc4558S8XZdcconuu+8+zZgxQyNGjIh5/QAAeFURc0VFXOaSIksBABCdipgrKuIylxRZCgCA6JArEK1Ro0apUqVKuummmwpvN16nTh09/PDDGjBggKc6y7zjd8mSJUX+zsjI0KRJkzRp0qSybkpKsCxL9957r6pWraobbrhBeXl5uvnmm43TXH755Zo/f76GDx+ujz76SLVr145pm44//nj17NlTkyZN0vDhw2UZzsoDACCeKmKuqIjLXBpkKQAA3FXEXFERl7k0yFIAALgjV6A08vLyNH36dHXv3l2DBw/W3r179fvvv6tmzZqlqjcOD9pCrFmWpYkTJ+r222/XLbfconnz5h3y9VOmTJHP59Pw4cNlR3E7tJK67LLL9MEHH2jNmjUxrxsAACCWyFIAAADekaUAAABiLxAI6NJLL9X+/fslSZUrVy51p69Ex29KufHGG/WXv/xFQ4YM0TfffGN8bc2aNTV16lTNnz8/Ls9U6dGjh+rXr89tCgAAQMogSwEAAHhHlgIAAIittm3b6sMPP4xpnQl/xi9Kzufz6fnnn1erVq00YMAALVmyxPjA8R49emj8+PG69tpr1bVrV7Vs2TJmbfH7/br00ks1ceJEPfDAAzriiCO8V+Y4hiLDWaF2hOms/HGWZcnyRb7Vj79SumuVfve5yfK5nyfh5IVdy0J797mWhffnupbZhjodl7NlnUjr5BDTHHpeReu0rXDhNLZlmp97mT/ovi6N69mwDKbpfAFv8wvn5rmWefXpwB6HfE04EJT+OkqfjzhP/rxQzNtwKKb1DACprNxmKZfMI5n3cyaWz5Ill3otw3414J6mvN6G0TFkRdmGZQ+4T+cztNONKRfY4ZJnsIK/Hdt2zauStzZKks/vbXswtSUe5wt7za2m6QreB1v509shWwqZc01J6ou6jYbpACCVldcs5QTcD486wTTXMis9I8IE+ftTq3JlWXLZH/i97eMtw/EB457asK/LOMq9zPL9amhM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eaBiOO2003Tvvffqo48+0jfffKOnnnpKtWvX1v333682bdqodu3aGjJkiKZPn66ff/450c0FAJRQqmeRVG8/Kg6yFACUT6meRVK9/ag4yFIAUD6RRZAKor7Vc7SimaZr167q2rVr1PMATI499liNGjVKo0aNUigU0sqVK/XWW2/prbfe0ksvvSTLstSmTRs1aNBAVapUUeXKlYv8dPv94HEZGRk8uwUA4izVs0iqtx8VE1kKAMqPVM8iqd5+VExkKQAoP8giSAVRdfwCqS4YDKpz587q3Lmz7r77bn3//fdasGCBFi1apJ9++klfffWV9u7dqz179mjPnj2Fv4fD4UPWbVlWkdBdr1493XXXXcrKyiqDJQMAAIg/shQAAIB3ZCkAABBvdPyiQqtTp46GDx+u4cOHu77GcRyFQqFioTtSEP/zuIULF6pDhw4aMWKE7rnnHh111FFluGQAAADxR5YCAADwjiwFAABijY5f4BAsy1JaWprS0tJ0+OGHl3i6O+64Q5MnT9YNN9yg119/XXfeeacuueQS+f3+OLYWAAAguZClAAAAvCNLAQCAaPgS3QCgvPL7/br00kv16aef6q9//avGjBmjtm3b6v3330900wAAAJIeWQoAAMA7shQAABUTHb9AnB155JGaPHmyVq5cKUnKysrSyJEjtX379gS3DAAAIPmRpQAAALwjSwEAULHQ8QuUkfbt22v16tV6/PHH9frrr6thw4Z64oknFA6HE900AACApEeWAgAA8I4sBQBAxUDHL1CG/H6/Ro8erU8//VT9+vXTZZddprZt22rVqlWJbhoAAEDSI0sBAAB4R5YCAKD8o+MXSICjjjpKzzzzjFasWCHHcdS+fXuNGjWK2+wAAACUAFkKAADAO7IUAADlFx2/QAJlZWVpzZo1mjRpkl577TU1atRITz75JLfZAQAAKAGyFAAAgPQyP/cAAA74SURBVHdkKQAAyh86foEE8/v9uuyyy7Rlyxb16dNHo0ePVrt27bR69epENw0AACDpkaUAAAC8I0sBAFC+0PELJImaNWvqueee04oVKxQOh9W+fXtdfPHF+vnnnxPdNAAAgKRHlgIAAPCOLAUAQPlAxy+QZLKysrR27Vo9+uijeuWVV9SoUSM99dRT3GYHAACgBMhSAAAA3pGlAABIbXT8AknI7/drzJgx+vTTT9WrVy9d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OR9++GHpGl9OHX744c4zzzzj7Ny50wkGg86rr75aWPbJJ584kpyVK1c6O3fudObPn5/AliaP0m7HBe69916nQYMGhX9v3LjROfXUU53ff//d+d///ufUr1+/sOzdd991JDm//vprKVpefrEdRydW2/Ds2bMdy7Kc3Nxcx3HYhkuL7RglQZZKPnx2o0eWSj5sx9EhSyUntmOUBFkq+fDZjR5ZKvmwHUeHLJWc2I6BfFzxGyNLlixRzZo11ahRI40ePVq//PJLVNNXr15dw4cP19FHH606depo9OjRqlatWpxaWz6Ew2HNmDFDe/bsUVZWltatW6dQKKRu3boVvqZx48Y67rjjtHLlSmVmZqp79+4JbHHyi3Y73rVrl2rUqFH4d7NmzdSiRQtlZmbqpJNO0j/+8Y94NznlsR3HVjTb8I4dOzRt2jR16NBBwWBQEtuwV2zHiAWyVNnjsxt7ZKmyx3YcW2SpxGA7RiyQpcoen93YI0uVPbbj2CJLJQbbMVBUINENKA969Oih8847Tw0aNNAXX3yhG264QT179tTKlSvl9/tLXM/EiRM1fvx4+Xy+iOG6Q4cO8vmK9tX//vvvpW5/qtm4caOysrK0f/9+Va1aVW+88YaaNm2q9evXKy0trdjtGWrVqlUhn3MQrWi3488//1yPPvqo7r///iLjn332Wd17772qXLmyKlWqVGy6Y489tsjf9erVK7wFR0XCdhx7Jd2Gr732Wj322GPau3ev2rdvX+TZVRLbcDTYjhErZKmyxWc3PshSZYvtOPbIUmWP7RixQpYqW3x244MsVbbYjmOPLFX22I6ByOj4jYEBAwYU/t68eXO1aNFCJ5xwgpYsWaIzzzwzqroyMzNdy2bOnKkmTZp4bmd50ahRI61fv167du3Sv//9bw0bNkxLly5NdLNSXjTb8XfffacePXro/PPP10UXXVSsriOOOMJ1Pu+9916RfyALzmiraNiOY6+k2/A111yjkSNH6quvvtJtt92moUOHau7cubIsq/A1bMMlw3aMWCFLlS0+u/FBlipbbMexR5Yqe2zHiBWyVNnisxsfZKmyxXYce2Spssd2DERGx28cHH/88TryyCP1+eefRx2wTerWrasTTzwxZvWlqrS0tML10Lp1a61Zs0YPP/yw+vfvr9zcXO3cubPI2Tw//vijateunaDWpi637fj7779X165d1aFDBz399NNR19ugQYNiZ1tVRGzH8ee2DR955JE68sgj1bBhQzVp0kR169bV+++/r6ysrBLVyzb8B7ZjxAtZKr747JYNslR8sR3HH1kq/tiOES9kqfjis1s2yFLxxXYcf2Sp+GM7BiLjGb9x8O233+qXX37R0UcfneimVAi2bSsnJ0etW7dWMBjU4sWLC8u2bNmir7/+usQ7Tvwh0nb83XffqUuXLmrdurWmTJlS7BZP8I7tOPZK8l1s27YkKScnp6yaVa6xHSNWyFJli89ufJClyhbbceyRpcoe2zFihSxVtvjsxgdZqmyxHcceWarssR0D+bjitwR+//13ff7554V/b926VevXr1eNGjVUo0YN3XbbberXr59q166tL774Qn//+9914oknFnlA+Ndff60dO3bo66+/Vjgc1vr16yVJJ554oqpWrVqidvzyyy/F7kF/2GGHKSMjo/QLmSKuv/569ezZU8cdd5x+++03TZ8+XUuWLNGCBQuUmZmpkSNHasKECapRo4aqV6+usWPHKisrS+3bt0900xOutNtxQbiuV6+e7r//fm3fvr2wrmjOlPrpp5+0f//+IuOOOOKICnVbErZjb0q7Da9atUpr1qxRp06ddPjhh+uLL77QzTffrBNOOCGq0Mc2nI/tGNEgSyUPPrvekaWSB9uxN2Sp5MJ2jGiQpZIHn13vyFLJg+3YG7JUcmE7BgwcHNK7777rSCo2DBs2zNm7d6+TnZ3tHHXUUU4wGHTq1avnXHTRRc62bduK1DFs2LCIdbz77ruHnP/WrVsjTivJefnll+O01MlpxIgRTr169Zy0tDTnqKOOcs4880xn4cKFheX79u1zLrvsMufwww93Kleu7PTt29f54YcfEtji5FHa7XjKlCmu22Fp5i/JWblyZbwWOymxHXtT2m34o48+crp27erUqFHDSU9Pd+rXr+9ceumlzrfffluq+VfEbdhx2I4RHbJU8uCz6x1ZKnmwHXtDlkoubMeIBlkqefDZ9Y4slTzYjr0hSyUXtmPAneU4jiMAAAAAAAAAAAAAQMriQQgAAAAAAAAAAAAAkOLo+AUAAAAAAAAAAACAFEfHLwAAAAAAAAAAAACkODp+AQAAAAAAAAAAACDF0fELAAAAAAAAAAAAACmOjl8AAAAAAAAAAAAASHF0/AIAAAAAAAAAAABAiqPjFwAAAAAAAAAAAABSHB2/AAAAAAAAAAAAAJDi6PgFAAAAAAAAAAAAgBRHxy8AAAAAAAAAAAAApLj/D1X+hO4Hbtd3AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_gridded_variable(ds, start_date='2009-08-01', var_name='WDIR', n_days=6, coastline_resolution=\"50m\", time_name=\"TIME\", lat_name=\"LATITUDE\", lon_name=\"LONGITUDE\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa006bac-bdec-4e99-b5bc-28117925e4b5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..766b7e1 --- /dev/null +++ b/notebooks/radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Coffsharbour Velocity Hourly Averaged Delayed QC data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/85da1645-2c63-45fa-97b5-4125165b999d)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CoffsHarbour_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "plot_gridded_radar_velocity(ds, time_start='2020-01-01T00:00:00')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "afe2122b-a30b-41ad-b265-aa457482763d", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CoffsHarbour_wave_delayed_qc.ipynb b/notebooks/radar_CoffsHarbour_wave_delayed_qc.ipynb new file mode 100644 index 0000000..a0e9ec2 --- /dev/null +++ b/notebooks/radar_CoffsHarbour_wave_delayed_qc.ipynb @@ -0,0 +1,2259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Coffsharbour Wave Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CoffsHarbour_wave_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/e32e51d9-b0a5-4b95-9906-44e0c6c8d516)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CoffsHarbour_wave_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Timeseries at a point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CoffsHarbour_wind_delayed_qc.ipynb b/notebooks/radar_CoffsHarbour_wind_delayed_qc.ipynb new file mode 100644 index 0000000..fefed68 --- /dev/null +++ b/notebooks/radar_CoffsHarbour_wind_delayed_qc.ipynb @@ -0,0 +1,2259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Coffsharbour Wind Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CoffsHarbour_wind_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/ffe8f19c-de4a-4362-89be-7605b2dd6b8c)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CoffsHarbour_wind_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Timeseries at a point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..d1b8ad7 --- /dev/null +++ b/notebooks/radar_CoralCoast_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Coralcoast Velocity Hourly Averaged Delayed QC data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_CoralCoast_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/f7b36a1c-0936-4da6-b47f-94ed538b367e)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_CoralCoast_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_radar_velocity(ds, time_start='2020-01-01T00:00:00')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3ba3fabc-3f43-4153-9edb-a8960393459f", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..9931756 --- /dev/null +++ b/notebooks/radar_Newcastle_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2268 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Newcastle Velocity Hourly Averaged Delayed QC data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_Newcastle_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/6dca1f8a-8337-4551-ac4b-a2d35ec6f333)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_Newcastle_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_radar_velocity(ds, time_start=\"2021-04-02\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "37760294-805b-4920-bd20-54e6298445c0", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..b9caf23 --- /dev/null +++ b/notebooks/radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,1732 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Northwestshelf Velocity Hourly Averaged Delayed QC data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/23c27e4f-c982-44e9-9ab7-71094d297549)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_NorthWestShelf_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m230 packages\u001b[0m \u001b[2min 46ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 65MB\n",
+       "Dimensions:               (TIME: 320, LATITUDE: 51, LONGITUDE: 55)\n",
+       "Coordinates:\n",
+       "  * LATITUDE              (LATITUDE) float64 408B -22.58 -22.52 ... -19.21\n",
+       "  * LONGITUDE             (LONGITUDE) float64 440B 111.1 111.2 ... 115.0 115.0\n",
+       "  * TIME                  (TIME) datetime64[ns] 3kB 2021-04-01T00:30:00.00000...\n",
+       "Data variables:\n",
+       "    GDOP                  (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    NOBS1                 (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    NOBS2                 (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    UCUR                  (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    UCUR_quality_control  (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    UCUR_sd               (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    VCUR                  (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    VCUR_quality_control  (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "    VCUR_sd               (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array<chunksize=(20, 51, 55), meta=np.ndarray>\n",
+       "Attributes: (12/40)\n",
+       "    Conventions:                   CF-1.6,IMOS-1.4\n",
+       "    abstract:                      The IMOS Ocean Radar Facility is producing...\n",
+       "    acknowledgement:               Any users (including re-packagers) of IMOS...\n",
+       "    author:                        Cosoli, Simone; Hetzel, Yasha\n",
+       "    author_email:                  simone.cosoli@uwa.edu.au; yasha.hetzel@uwa...\n",
+       "    citation:                      The citation in a list of references is: I...\n",
+       "    ...                            ...\n",
+       "    source:                        Terrestrial HF radar\n",
+       "    ssr_Stations:                  Point Billie (PTB), Jurabi Turtle Centre (...\n",
+       "    standard_name_vocabulary:      NetCDF Climate and Forecast (CF) Metadata ...\n",
+       "    time_coverage_end:             2021-05-02T03:30:00Z\n",
+       "    time_coverage_start:           2021-05-02T03:30:00Z\n",
+       "    title:                         IMOS Ocean Radar Facility Northwest Shelf ...
" + ], + "text/plain": [ + " Size: 65MB\n", + "Dimensions: (TIME: 320, LATITUDE: 51, LONGITUDE: 55)\n", + "Coordinates:\n", + " * LATITUDE (LATITUDE) float64 408B -22.58 -22.52 ... -19.21\n", + " * LONGITUDE (LONGITUDE) float64 440B 111.1 111.2 ... 115.0 115.0\n", + " * TIME (TIME) datetime64[ns] 3kB 2021-04-01T00:30:00.00000...\n", + "Data variables:\n", + " GDOP (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " NOBS1 (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " NOBS2 (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " UCUR (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " UCUR_quality_control (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " UCUR_sd (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " VCUR (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " VCUR_quality_control (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + " VCUR_sd (TIME, LATITUDE, LONGITUDE) float64 7MB dask.array\n", + "Attributes: (12/40)\n", + " Conventions: CF-1.6,IMOS-1.4\n", + " abstract: The IMOS Ocean Radar Facility is producing...\n", + " acknowledgement: Any users (including re-packagers) of IMOS...\n", + " author: Cosoli, Simone; Hetzel, Yasha\n", + " author_email: simone.cosoli@uwa.edu.au; yasha.hetzel@uwa...\n", + " citation: The citation in a list of references is: I...\n", + " ... ...\n", + " source: Terrestrial HF radar\n", + " ssr_Stations: Point Billie (PTB), Jurabi Turtle Centre (...\n", + " standard_name_vocabulary: NetCDF Climate and Forecast (CF) Metadata ...\n", + " time_coverage_end: 2021-05-02T03:30:00Z\n", + " time_coverage_start: 2021-05-02T03:30:00Z\n", + " title: IMOS Ocean Radar Facility Northwest Shelf ..." + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "24dedfdb-a61e-4e31-ad26-dae18357e6eb", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/lbesnard/github_repo/aodn_cloud_optimised/notebooks/parquet_queries.py:604: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.\n", + " plt.tight_layout(rect=[0, 0, 0.9, 1]) # Leave space for the colorbar\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABZ8AAAXmCAYAAADoWdQMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3wU5d7+8Wt2ExISUoFAaAlFQi9SpSMdBURURAREbAgoih4PHBVQERW7NDlywEaRo5QjiiJKExBE6RClxFASakgggSS7e//+8Lf7ZMkm2SSbnd35Xu/nlddznGy5P5mZ3ZvJZkZTSikQEREREREREREREXmQSe8BEBEREREREREREZHx8OAzEREREREREREREXkcDz4TERERERERERERkcfx4DMREREREREREREReRwPPhMRERERERERERGRx/HgMxERERERERERERF5HA8+ExEREREREREREZHH8eAzEREREREREREREXkcDz4TERERERERERERkcfx4DMREREREREREREReRwPPpNP27VrF8aPH4/GjRsjNDQUtWrVwj333IM//vgj320PHz6Mvn37okKFCoiOjsaIESNw/vx5p9scOXIE//jHP9CiRQuEhYUhNjYWt912G3799dd8j5eYmIinnnoKHTp0QHBwMDRNQ1JSUrEbFi5ciIYNGyI4OBg33XQTPvjggyLv06tXL2iahvHjx7v9PDabDW+88QZq166N4OBgNGvWDEuXLs13m8WLF2PgwIGoWbMmQkND0aRJE7zyyiu4fv2643bdunWDpmlFfk2bNs1xn23btqFTp04ICQlB1apV8cQTT+Dq1av5xpmdnY3nnnsO1apVQ/ny5dGuXTusX7/ercZr165hzJgxaNKkCSIiIlChQgU0b94c7733HnJzc/Pd/vLly3jkkUdQuXJlhIaGonv37vjtt9/c/Im69zO1c2f7K8yaNWtw8803Izg4GLVq1cLUqVNhsVhK1aTXY27evNmxjQUHB6Nq1aro27cvfv75Z5eP6c6288ADDxS6LZ4+fRoAkJWVhTlz5qB3796IjY1FWFgYWrZsiXnz5sFqtbp8fiIi8n+cM3p2zggA//73v9G1a1dUqVIFQUFBqF27NkaPHu3UVlZzxuKsT1cuXryIWbNmoUuXLqhcuTIiIyPRvn17LF++3OXtd+/ejb59+yI8PBxhYWHo3bs39uzZ49ZzASiw+7XXXst322XLljnmUpUrV8aYMWNw4cIFt54nNzcX06dPR506dRAUFIQ6derglVdecTm/c7dJ78cEgN9++w0DBw5EdHQ0QkJC0KRJE7z//vsleszibjtffPEF2rdvj8jISFSsWBFdu3bF2rVrXd6WiIhKSBH5sCFDhqiqVauqCRMmqH//+9/q5ZdfVlWqVFGhoaFq//79jtudPHlSVapUSdWtW1e99957asaMGSoqKko1b95cZWdnO243adIkFRkZqcaMGaM+/PBD9cYbb6i6desqs9ms1q9f7/TcixYtUiaTSTVp0kS1aNFCAVAnTpwo1vjnz5+vAKghQ4aoBQsWqBEjRigA6rXXXivwPl9++aUKDQ1VANS4cePcfq5//vOfCoB6+OGH1YIFC9Rtt92mAKilS5c6bnPlyhUFQLVv31698sorasGCBWr06NHKZDKpbt26KZvNppRS6vvvv1effvqp4+uJJ55QANSUKVOclu/du1cppdTvv/+ugoODVcuWLdW8efPUv/71LxUUFKT69u2bb5z33nuvCggIUM8884z68MMP1S233KICAgLUli1bimy8ePGiateunXr22WfVnDlz1Lx589SIESOUpmlq2LBhTre1Wq2qQ4cOKjQ0VE2bNk3Nnj1bNWrUSIWFhak//vjDYz9Tpdzf/gryzTffKE3TVPfu3dWCBQvUhAkTlMlkUo899liJm/R8zH//+99q0KBB6pVXXlEfffSRmjVrlmrevLkymUzq22+/dbqtu9vOtm3bnLa9Tz/9VH3yyScqJCRENWrUyHG7/fv3K03TVM+ePdUbb7yh5s+frwYPHqwAqJEjRxa5LoiIyD9xzujZOaNSSo0dO1aNGjVKvfnmm2rhwoXq+eefV1WqVFGVKlVSp0+fVkqV3ZzR3fVZkP/9738qMDBQDRo0SL377rtq9uzZqnv37gqAevHFF51uu3v3bhUcHKxuuukm9eabb6o33nhDxcfHq/DwcHXkyBG3fqYAVK9evfLNVQ4cOOB0u7lz5yoAqkePHmrOnDlq8uTJKiQkRDVr1kxdu3atyOe55557lKZpasyYMWrevHlq1KhRjnVZ0iY9H1Mppb777jtVrlw51a5dO/X222+rBQsWqOeee049++yzJXrM4mw777//vgKgbrvtNjVv3jz1zjvvqObNmysA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fP6i5mY3rs/iunTpEj766CN07tzZaQwJCQnYsWOH04WJc3Jy8MsvvwCA04cTCtKhQwfMmDEDq1atwrx582A2mzF8+HDMmzfPcZubbroJmqbluwBzYmIizp8/j2vXriEtLa3A50hISACAfPffsmVLvnG626T3Y/7555+wWCwYNGgQ+vTpgy+//BIPPvgg5s+f7/hFR3Ef05WCtp33338f3bp1wxNPPIHatWujYcOG+OKLL7BhwwbccssthT4mERG5L6DomxD5Dvtvo2+55RaMGjUKAHDt2jUAQFBQUL7bBwcHO27j6vvnzp3Dfffdh9q1a+Mf//iHR8d67do1lCtXzuX3goODHeMGgJ9++glffvmlY/JWkucqqr8gr776Kn744QfMnTsXkZGRJXpuoOCff97nLs44p02b5nRl9Ly6d++O9evX4/Lly9iwYQP27t2LzMzMfONy97kWL16MxYsXl+j+pdn+3Ll/RkaGx8dU1o9p99prr2HSpEk4efIkPv74Y+Tk5Dhdkbw4286NlixZgsDAQNxzzz0F3sZu/PjxOHToENauXev0CwoiIjIuzhkLfq7izhm//fZbXL9+HYcPH8Znn32Wb85VnOcGSva+72p92j3wwAN44IEHCn1um82G4cOH4/Lly/jggw+cvvf4449j7NixGDNmDP7xj3/AZrPhlVdecRwsd2d+euNB0QcffBCtWrXClClT8MADD6B8+fKoVKkS7rnnHnz88cdo2LAhBg8ejNOnT2PChAkIDAxEbm5uoT+D/v37Iy4uDs888wxCQkLQqlUr/PLLL/jXv/6FgIAAp/u626T3Y169ehVZWVl47LHH8P777wMA7rzzTuTk5ODDDz/ESy+9hJtuuqlYj3mjwradkJAQJCQkoEaNGrj99ttx5coVvPPOO7jzzjuxZcsWp7+qJCKikuMnn8lvpKam4rbbbkNERAT++9//wmw2A/i/P79y9UkV+59rufoTsczMTMckY/Xq1ahQoUKJxnX+/HmkpqY6vq5evep4zpycHJf3uX79umNMFosFTzzxBEaMGFHkpzLzPk9qaqpjolW+fPli9wPA8uXL8fzzz2PMmDEYO3ase8E3KOrnn/e5SzrOG1WpUgU9e/bEXXfdhXnz5uH2229Hr169HH9K6Ynncvf+Jd3+8j5PYfcvyc9P78e0a9GiBXr16oUHH3wQ69ev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V66cqlu3rnrnnXfc+vQFAKdPpRTFarWqV199VcXFxaly5cqpxo0bq88++8zpNoU1AVCjRo1y+dhFfYpFKaW2bNmiOnTooIKDg1XlypXVuHHjXH5a4tq1a+qZZ55RVatWVUFBQapNmzZq3bp1+W43derUfM+5a9cudffdd6tatWqpoKAgFRoaqm6++Wb19ttvq9zc3HyPcenSJTVmzBhVsWJFFRISorp27ap27dqV73b27eLGTym58zO1c2f7s//8Xf2cV65cqVq0aKGCgoJUjRo11PPPP+/0SeziNun5mLNnz1adOnVSlSpVUgEBAapy5cpqwIABavPmzS4f091tRyml2rdvr2JiYpw+fZ3XTz/9VOg2PnXqVJf3IyIi/8Y5o2fnjNnZ2erJJ59UzZo1U+Hh4SowMFDFxcWpMWPGFPqpbk/NGYuzPhctWqQAqEWLFuVbVtBX3tsePXpU9e7dW1WqVEkFBQWpBg0aqJkzZ7r8xLKr+en333+vevXqpapWraoCAwNVZGSk6t27t9Nf5Nl9/fXXqm3btiosLEyFhISo9u3bqy+++MLlzwmA6tq1q9Oy119/XTVo0EAFBwerqKgoNXDgQPX777/nu29xmvR8TKX+/svAadOmqbi4OBUYGKjq1aun3nnnnRI/ZnG2ndzcXPXBBx+oFi1aqAoVKqgKFSqo7t27qx9//NHlWImIqGQ0pW642gQRERERERERERERUSnxgoNERERERERERERE5HE8+ExEREREREREREREHseDz0RERERERERERETkcTz4TEREREREREREREQex4PPRERERERERERERORxPPhMRERERERERERERB7Hg89ERERERERERERE5HE8+ExEREREREREREREHseDz2Vo8+bNGDBgAKpVqwZN07Bq1Sqn73/11Vfo3bs3KlasCE3TsGfPnnyPsWDBAnTr1g3h4eHQNA2XL18u8nmnTZsGTdOcvho0aOB0m8TERHTs2BE1atTAK6+84vS9+Pj4fPfXNA2vvfZacX8ETkr787h06RImTJiAhIQElC9fHrVq1cITTzyB9PR0p9utWbMG9evXR0JCAr7++mvH8qSkJJddmqZhx44dftF2owceeCBfS9++fZ1us337drRo0QLx8fFYuHCh0/cK+nksW7asxD8LwDPb/qOPPoq6deuifPnyqFy5MgYNGoQj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yIkTJ7Bnzx5ER0ejVq1auHTpEpKTk3HmzBkAQGJiIoC/fwNpv9BAamoqUlNTHY+zf/9+hIWFoVatWoiOjgYA9OjRA4MHD8b48eMBAM888wwGDBiAuLg4nDlzBlOnToXZbHb7N+TA35+mSE1NdVoWEhKC8PDwEv40Sv/zyMjIQO/evZGVlYXPPvsMGRkZyMjIAABUrlwZZrPZrXFcvHgxX1tkZGSp/lHirbYGDRpg5syZGDx4MK5evYrp06djyJAhqFq1Ko4dO4Z//OMfqFevXrEuBnT58uV8P4+wsLAC/zzLGz+P48ePY/ny5ejduzcqV66MU6dO4bXXXkP58uXRv39/t8fhi+va3TYp6zrv611etWrVQu3atd0eh6fXtbe6pKznY8eOYcmSJejfvz8qVqyIffv24amnnkKXLl3QrFkzt8dRFvs0kS/gnNEZ54ycM/r7nJHzRc/+PHx1vghwzngjzhmJyCX9TjdtfPYLvtz4NWrUKKWUUosWLXL5/alTpzoeY+rUqS5vs2jRIsdt4uLinO4zdOhQFRsbq8qVK6eqV6+uhg4dWuTFKfKKi4tz+ZyPPvqorj+Pgu4PQJ04caLI57dffMDV19KlS/2iLe+6z8rKUr1791aVK1dWgYGBKi4uTj388MMqNTXV7XEX9JwzZ87U9edx+vRp1a9fPxUTE6MCAwNVjRo11H333aeOHDni1vP78rp2t03Kui5orEVdZMWurNa1t7qkrOfk5GTVpUsXFR0drYKCglS9evXUs88+q9LT0916/rLcp4l8AeeMnv15cM4o5/3FV+eMnC969udR0Fj1ni96s03KuuackciYNKWUAhERERERERERERGRB5n0HgARERERERERERERGQ8PPhMRERERERERERGRx/HgMxERERERERERERF5HA8+ExEREREREREREZHH8eAzEREREREREREREXkcDz4TERERERERERERkcfx4DMREREREREREREReVyA3gPQ2/Xr15GTk6P3MIiIiCiPcuXKITg4WO9hEDlwzkhEROR7OGck8n2iDz5fv34dtWvXRmpqqt5DISIiojyqVq2KEydO8B8T5BM4ZyQiIvJNnDMS+T7RB59zcnKQmpqKkydPIjw8XO/hlIjVasWhQ4fQqFEjmM1mvYfjFRKbAZndEpsBmd1sltEMuNedkZGBmjVrIicnh/+QIJ/AOaN/ktgMyOyW2AzI7GazjGaAc0YiIxF98NkuPDzcb/8hYbFYkJubi7CwMAQEyFidEpsBmd0SmwGZ3WyW0QzI7SZj4JzRv0hsBmR2S2wGZHazWUYzILebyIh4wUEiIiIiIiIiIiIi8jgefCYiIiIiIiIiIiIij+PBZz9nMpmQkJAAk0nOqpTYDMjsltgMyOxmsxxSu4n0JnHfk9gMyOyW2AzI7GazHFK7iYxIU0opvQehl4yMDERERCA9Pd1vz99HRERkNHx/Jl/DbZKIiMj38P2ZyD/wV0h+zmq1YufOnbBarXoPxWskNgMyuyU2AzK72SyH1G4ivUnc9yQ2AzK7JTYDMrvZLIfUbiIj4sFnP6eUQlZWFiR9gF1iMyCzW2IzILObzXJI7SbSm8R9T2IzILNbYjMgs5vNckjtJjIiHnwmIiIiIiIiIiIiIo/jwWciIiIiIiIiIiIi8jhecNDPT06vlEJaWhqioqKgaZrew/EKic2AzG6JzYDMbjbLaAbc6zbC+zMZixG2SYmvORKbAZndEpsBmd1sltEMcM5IZCQ8+MwXKiIiIp/C92fyNdwmiYiIfA/fn4n8A0+74ecsFgu2bNkCi8Wi91C8RmIzILNbYjMgs5vNckjtJtKbxH1PYjMgs1tiMyCzm81ySO0mMiIefDYAq9Wq9xC8TmIzILNbYjMgs5vNckjtJtKbxH1PYjMgs1tiMyCzm81ySO0mMhoefCYiIiIiIiIiIiIij+PBZyIiIiIiIiIiIiLyOF5w0M9PTq+UQlZWFkJCQsRc+VZiMyCzW2IzILObzTKaAfe6jfD+TMZihG1S4muOxGZAZrfEZkBmN5tlNAOcMxIZCT/5bABBQUF6D8HrJDYDMrslNgMyu9ksh9RuIr1J3PckNgMyuyU2AzK72SyH1G4io+HBZz9ntVqxdetWUSfil9gMyOyW2AzI7GazHFK7ifQmcd+T2AzI7JbYDMjsZrMcUruJjIgHn4mIiIiIiIiIiIjI43jwmYiIiIiIiIiIiIg8jgefiYiIiIiIiIiIiMjjNKWU0nsQejHClVGVUrBarTCbzWKufCuxGZDZLbEZkNnNZhnNgHvdRnh/JmMxwjYp8TVHYjMgs1tiMyCzm80ymgHOGYmMhJ98NoDs7Gy9h+B1EpsBmd0SmwGZ3WyWQ2o3kd4k7nsSmwGZ3RKbAZndbJZDajeR0fDgs5+zWq3YtWuXqCvASmwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERsSDz0RERERERERERETkcTz4TEREREREREREREQex4PPBmA2m/UegtdJbAZkdktsBmR2s1kOqd1EepO470lsBmR2S2wGZHazWQ6p3URGoymllN6D0AuvjEpEROR7+P5MvobbJBERke/h+zORf+Ann/2cUgqXLl2CpN8hSGwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERsSDz37OarVi3759oq4AK7EZkNktsRmQ2c1mOaR2E+lN4r4nsRmQ2S2xGZDZzWY5pHYTGREPPhMRERERERERERGRx/HgMxERERERERERERF5HA8++zlN0xASEgJN0/QeitdIbAZkdktsBmR2s1kOqd1EepO470lsBmR2S2wGZHazWQ6p3URGVOyDz5s3b8aAAQNQrVo1aJqGVatWOX3/7NmzeOCBB1CtWjWEhISgb9+++PPPPwt9zMWLF0PTNKev4OBgp9ukpqaiX79+qFatGsaPHw+bzeb43okTJ3DfffehWrVqCA4ORo0aNTBo0CAcOXKkuHl+x2w2o23btjCbzXoPxWskNgMyuyU2AzK72SyHp7o5H/FtXD++R+JrjsRmQGa3xGZAZjeb5eCckcg4in3wOTMzE82bN8ecOXPyfU8phTvuuAPHjx/H6tWr8fvvvyMuLg49e/ZEZmZmoY8bHh6OlJQUx9dff/3l9P0XXngBrVu3xrfffovjx49j2bJlAIDc3Fz06tUL6enp+Oqrr5CYmIjly5ejadOmuHz5cnHz/I7NZkNKSorTC5nRSWwGZHZLbAZkdrNZDk91cz7i27h+fI/E1xyJzYDMbonNgMxuNsvBOSORcQQU9w79+vVDv379XH7vzz//xI4dO3DgwAE0btwYADBv3jxUrVoVS5cuxUMPPVTg42qahqpVqxb4/bS0NPTq1QtNmzZFnTp1HDvlwYMHcezYMWzYsAFxcXEAgLi4OHTs2LG4aX7JZrMhMTERlStXhskk4ywqEpsBmd0SmwGZ3WyW0Qx4rpvzEd/G9eN7JL7mSGwGZHZLbAZkdrNZRjPAOSORkXj0lSs7OxsAnP7cwGQyISgoCFu3bi30vlevXkVcXBxq1qyJQYMG4eDBg07f/+c//4kJEyYgKCgIv/32G0aOHAkAjhei//73v7BarZ7MISIiIj/E+Yhv4/ohIiIiX8A5CZF3FPuTz4Vp0KABatWqhcmTJ+PDDz9EaGgo3nnnHZw6dQopKSkF3i8hIQH/+c9/0KxZM6Snp+PNN99Ehw4dcPDgQdSoUQMA0Lp1a5w+fRoXLlxw+u1S9erV8f777+Mf//gHpk+fjtatW6N79+4YPnw46tSp49a4LRYLLBYLgL9/e2U2m2G1WqGUctzGZDLBZDK5vdxsNkPTNMfj5l0OIN+LTEHLAwICoJRyWm4fo81mg8Vicfz/vMvz/mmKvzW5Gnve5fZm+2MboSnv8sLGbl/XRmoqbLl9XdtvY4SmvGMsaD0ppZzWtRGaXI097/K8r2VGacrLVZP9f9+4rv25yZ315Op968YxlvbPK/11PiKFP68fzhl9q4lzRs4ZOWfknNEITXlxzli8OWPe/10S/jwnIfInmirF3qppGlauXIk77rjDsWz37t0YM2YM9u7dC7PZjJ49e8JkMkEphW+//datx83NzUXDhg0xbNgwvPzyy27d58qVK9i4cSN27NiB//3vf/jzzz+xZs0a9OrVq8D7ZGRkICIiAl9//TVCQ0MBALGxsUhISEBiYqLTi018fDzi4+Oxd+9epKWlOZYnJCQgNjYWO3fuRFZWlmN5s2bNEB0djS1btji9yLZp08blb9E6deqE7Oxs7Nq1y7HMbDajc+fOuHTpEvbt2+dYHhISgrZt2yIlJQWHDx/GuXPnEBMTg4oVK6J58+ZISkpCUlKS4/b+1pSYmOhYHhUVla/JZrMhJycHvXr1wtGjRw3RBBS9nn7//XckJiYiJiYGJpPJEE1FrSebzYZz586hR48eqFy5siGa7ApbTwEBAVi5cqVjXRuhqaj1ZF/X1apVQ5cuXQzRZFfQeipfvjyCg4NRsWJFHD161BBN7qyn48ePO963qlevXmBT7dq1kZ6ejvDwcBTF3+cjRmeE9cM5o282cc7IOSPnjJwzGqHJjnPG4s8Za9eujfj4eM4ZiXycxw8+26WnpyMnJweVK1dGu3bt0Lp1a5cneC/I3XffjYCAACxdurTY41JKoU+fPsjOzsamTZsKvJ39HxIXL150vFAZ5beERvzNJ5vYxCY2sUlG09WrVxEVFVWqf0jY+cN8xOiMsH44Z2QTm9jEJjaxyfeaMjMzERkZyTkjkY/z6Gk38oqIiADw9wncf/31V7d/+wP8/WK1f/9+9O/fv0TPrWkaGjRogG3btrl1+4CAAAQEOP8o7C+cNyru8hsftyTLNU1zudz+2+3k5GTUqlXL8d/2N4/Sjl2vJldjz7vcZrM5mo3S5M4YNU3DyZMnndZ1Ybf3h6ailudd1wWNpaCxF7Rc7yZ3xmiz2XDq1Kl867qg2/tDU1HL865rwBhNN7qxyWazISkpCbVq1SpWqy832RW2noD871s3jtHVfUvKn+YjEvnb+uGc0beaOGfknJFzRs4ZjdB0I84Z3Z8zaprmcgwl4W9zEiJ/Uux/3V29ehV79uzBnj17AAAnTpzAnj17kJycDABYsWIFNm7ciOPHj2P16tXo1asX7rjjDvTu3dvxGCNHjsTkyZMd//3SSy/h+++/x/Hjx/Hbb7/h/vvvx19//VXolUXt9uzZg0GDBuG///0vDh06hKNHj2LhwoX4z3/+g0GDBhU3z+/Y34jy/lbQ6CQ2AzK7JTYDMrvZLIenujkf8W1cP75H4muOxGZAZrfEZkBmN5vl4JyRyDiK/cnnX3/9Fd27d3f899NPPw0AGDVqFBYvXoyUlBQ8/fTTOHv2LGJjYzFy5Ei88MILTo+RnJzs9NuttLQ0PPzww0hNTUVUVBRatWqFbdu2oVGjRkWOp0aNGoiPj8f06dORlJQETdMc//3UU08VN4+IiIj8AOcjvo3rh4iIiHwB5yRE+ivVOZ/9nf38fe6eH8gXWSwWbN26FZ06dSrwz16MRmIzILNbYjMgs5vNMpoB97qN8P5MxmKEbVLia47EZkBmt8RmQGY3m2U0A5wzEhmJ506qSLrQNA2xsbEePdeRr5PYDMjsltgMyOxmsxxSu4n0JnHfk9gMyOyW2AzI7GazHFK7iYyIn3zmb8mIiIh8Ct+fyddwmyQiIvI9fH8m8g/85LOfs1qtSExMhNVq1XsoXiOxGZDZLbEZkNnNZjmkdhPpTeK+J7EZkNktsRmQ2c1mOaR2ExkRDz77OaUUUlJSIOkD7BKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwGZ3WyWQ2o3kRHx4DMREREREREREREReRwPPhMRERERERERERGRx/Hgs58zmUyIj4+HySRnVUpsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREakKcEn0OGVUYmIiHwP35/J13CbJCIi8j18fybyD/wVkp+zWq3Yu3evqCvASmwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERsSDz35OKYW0tDRRV4CV2AzI7JbYDMjsZrMcUruJ9CZx35PYDMjsltgMyOxmsxxSu4mMiAefiYiIiIiIiIiIiMjjePCZiIiIiIiIiIiIiDyOB5/9nMlkQkJCgqgrwEpsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREakKcEn0OGVUYmIiHwP35/J13CbJCIi8j18fybyD/wVkp+zWq3YuXOnqCvASmwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERsSDz35OKYWsrCxRV4CV2AzI7JbYDMjsZrMcUruJ9CZx35PYDMjsltgMyOxmsxxSu4mMiAefiYiIiIiIiIiIiMjjePCZiIiIiIiIiIiIiDyOFxz085PTK6WQlpaGqKgoaJqm93C8QmIzILNbYjMgs5vNMpoB97qN8P5MxmKEbVLia47EZkBmt8RmQGY3m2U0A5wzEhkJDz7zhYqIiMin8P2ZfA23SSIiIt/D92ci/8DTbvg5i8WCLVu2wGKx6D0Ur5HYDMjsltgMyOxmsxxSu4n0JnHfk9gMyOyW2AzI7GazHFK7iYyIB58NwGq16j0Er5PYDMjsltgMyOxmsxxSu4n0JnHfk9gMyOyW2AzI7GazHFK7iYyGB5+JiIiIiIiIiIiIyON48JmIiIiIiIiIiIiIPI4XHPTzk9MrpZCVlYWQkBAxV76V2AzI7JbYDMjsZrOMZsC9biO8P5OxGGGblPiaI7EZkNktsRmQ2c1mGc0A54xERsJPPhtAUFCQ3kPwOonNgMxuic2AzG42yyG1m0hvEvc9ic2AzG6JzYDMbjbLIbWbyGh48NnPWa1WbN26VdSJ+CU2AzK7JTYDMrvZLIfUbiK9Sdz3JDYDMrslNgMyu9ksh9RuIiPiwWciIiIiIiIiIiIi8jgefCYiIiIiIiIiIiIij+PBZyIiIiIiIiIiIiLyOE0ppfQehF6McGVUpRSsVivMZrOYK99KbAZkdktsBmR2s1lGM+BetxHen8lYjLBNSnzNkdgMyOyW2AzI7GazjGaAc0YiI+Ennw0gOztb7yF4ncRmQGa3xGZAZjeb5ZDaTaQ3ifuexGZAZrfEZkBmN5vlkNpNZDQ8+OznrFYrdu3aJeoKsBKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwGZ3WyWQ2o3kRHx4DMREREREREREREReRwPPhMRERERERERERGRx/HgswGYzWa9h+B1EpsBmd0SmwGZ3WyWQ2o3kd4k7nsSmwGZ3RKbAZndbJZDajeR0WhKKaX3IPTCK6MSERH5Hr4/k6/hNklEROR7+P5M5B/4yWc/p5TCpUuXIOl3CBKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwGZ3WyWQ2o3kRHx4LOfs1qt2Ldvn6grwEpsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbEg89ERERERERERERE5HE8+ExEREREREREREREHseDz35O0zSEhIRA0zS9h+I1EpsBmd0SmwGZ3WyWQ2o3kd4k7nsSmwGZ3RKbAZndbJZDajeREWlK8NnbeWVUIiIi38P3Z/I13CaJiIh8D9+fifwDP/ns52w2G1JSUmCz2fQeitdIbAZkdktsBmR2s1kOqd1EepO470lsBmR2S2wGZHazWQ6p3URGxIPPfs5msyExMVHUC7LEZkBmt8RmQGY3m+WQ2k2kN4n7nsRmQGa3xGZAZjeb5ZDaTWREPPhMRERERERERERERB7Hg89ERERERERERERE5HE8+OznNE1DVFSUqCvASmwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERqQppZTeg9ALr4xKRETke/j+TL6G2yQREZHv4fszkX/gJ5/9nM1mQ1JSkqiT8EtsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbEg89+TuILssRmQGa3xGZAZjeb5ZDaTaQ3ifuexGZAZrfEZkBmN5vlkNpNZERlfvB55syZaNOmDcLCwhATE4M77rgDiYmJTre5fv06xo0bh4oVK6JChQoYMmQIzp4963SbNWvWoH79+khISMDXX3/t9L2VK1eiffv2iIiIQFhYGBo3boyJEyeWdRoRERHphPML4+E6JSIiIk/i3ILIN5T5wedNmzZh3Lhx2LFjB9avX4/c3Fz07t0bmZmZjts89dRT+N///ocVK1Zg06ZNOHPmDO68807H97OzszFu3DjMnTsXs2fPxtixY5GTkwMA2LBhA4YOHYohQ4Zg586d2L17N2bMmIHc3NyyTiMiIiKdcH5hPFynRERE5EmcWxD5COVl586dUwDUpk2blFJKXb58WQUGBqoVK1Y4bnP48GEFQG3fvl0ppVR6erqKi4tT58+fV+fPn1fx8fEqIyNDKaXUk08+qbp161aisaSnpysAKj09vZRV+rFYLOrIkSPKYrHoPRSvkdislMxuic1KyexmsxzudJfk/dmX5hfkGb60Tjln9E8Sm5WS2S2xWSmZ3WyWoyzmjL40tyCSxOvnfE5PTwcAREdHAwB2796N3Nxc9OzZ03GbBg0aoFatWti+fTsAIDw8HKNHj0ZsbCyqVauGsWPHIiwsDABQtWpVHDx4EAcOHPByiW8wm81ISEiA2WzWeyheI7EZkNktsRmQ2c1mOcqqm/ML4+E69SyJrzkSmwGZ3RKbAZndbJajLLo5tyDSR4A3n8xms2HixIno2LEjmjRpAgBITU1FuXLlEBkZ6XTbKlWqIDU11fHfU6dOxcSJE2EymRw7OgBMmDABW7ZsQdOmTREXF4f27dujd+/eGD58OIKCgtwal8VigcViAQBomgaz2Qyr1QqllOM2JpMJJpPJ7eVmsxmapjkeN+9yALBarW4tDwgIgFLKabl9jDabDbm5uTh27Bjq1q2LgIAAx/K8J+X3tyZXY8+73Gq14vjx46hfvz4AGKIp7/KCxp6Tk4OjR4+ibt26MJvNhmgqarnVasWxY8dQv359BAQEGKIp7xgLWk9WqxV//PGHY10bocnV2PMut6/runXrIigoyBBNeblaTzabDSdOnECdOnWgaZohmtxZT67et24cY3EvLOOr8wsqOV9dp5wz+lYT54ycM3LOyDmjEZry4pyxeHPGvP+7KL46tyCSwKsHn8eNG4cDBw5g69atJbp/REREvmWhoaFYu3Ytjh07hp9++gk7duzApEmT8N5772H79u0ICQkp8nG3b9+O0NBQAEBsbCwSEhJw9OhRpKSkOG4THx+P+Ph4HDhwAGlpaY7lCQkJiI2Nxe7du5GVleVY3qxZM0RHR2P79u1OL7Jt2rRBUFBQvp9Bp06dkJ2djV27djmWmc1mdO7cGWlpadi3b59jeUhICNq2bYuzZ8/i8OHDSE5ORmpqKipWrIjmzZsjOTkZSUlJjtv7W1PeCwBERUXla7LZbLh06RJuuukmHDt2zBBNQNHr6eDBg9i7dy9SU1NhMpkM0VTUerLZbEhOTkalSpUQExNjiCa7wtaT2WzGzp07HevaCE1FrSf7uj5//jy6du1qiCa7gtZTcHAwrl+/jpCQEBw7dswQTe6sp+PHjzvet6pXr15gU3H46vyCSs5X1ynnjL7VxDkj54ycM3LOaIQmO84Ziz9nrF27Ntzlq3MLIgk0VZxfFZXC+PHjsXr1amzevNnpBeLHH39Ejx49kJaW5vTbpri4OEycOBFPPfVUsZ/rxIkTqF+/PhYsWIDRo0cXeLuMjAxERETg4sWLCA8PB+B/vyXMycnBtm3b0KFDBwQGBhr6N5/25RaLBdu2bUOXLl2gaZohmvIuL2js2dnZ+Pnnn9GhQwcEBAQYoqmo5fZ13blzZwQGBhqiKe8YC1pPFosFW7ZscaxrIzS5Gnve5fZ13aFDBwQHBxuiKS9X68lqtWL79u3o0KGD4x+M/t7kznpy9b514xivXr2KqKgopKenO96fC+KL8wsqHV9cp5wz+mYT54ycM3LOyDmjEZry4pyxeHPGzMxMREZGFjln9MW5BZEkZf7JZ6UUJkyYgJUrV2Ljxo35fjPVqlUrBAYGYsOGDRgyZAgAIDExEcnJybjllltK9Jzx8fEICQlxuoJpYQICAhxv1nb2F84bFXf5jY9bkuWaprlcbjKZHBNK+5+h2JfnfVMq6dj1anI19huX2/+3kZqKGqPZbHas67zP4+9NRS03mUyOPy8zSpM7Y3S1rgu7va83ubPc3gwYpymvol7LXS3356aC1pOr960bx+jqvjfyh/kFFY8/rFPOGX2riXNGzhk5Z+Sc0ShNeXHO6P6cMe9pSFzxh7kFkQRlfvB53LhxWLJkCVavXo2wsDDHeXMiIiJQvnx5REREYMyYMXj66acRHR2N8PBwTJgwAbfccgvat29f5ONPmzYNWVlZ6N+/P+Li4nD58mW8//77yM3NRa9evco6T3cmkwnx8fFu/UPdKCQ2AzK7JTYDMrvZLIenujm/MB6u07Il8TVHYjMgs1tiMyCzm81yeKKbcwsi31Dmp90o6DdRixYtwgMPPAAAuH79OiZNmoSlS5ciOzsbffr0wdy5c1G1atUiH/+nn37CnDlzsHPnTpw9exZRUVFo2bIl/vWvf6FTp06F3tf+J5Tu/FkvEREReYc778++PL+gkvHldco5IxERke8p6v3Zl+cWRJJ47ZzPvsgI/5CwWq04cOAAmjRpUuCfyRiNxGZAZrfEZkBmN5tlNAPudRvh/ZmMxQjbpMTXHInNgMxuic2AzG42y2gGOGckMhJZf7dhQEoppKWlQdLvECQ2AzK7JTYDMrvZLIfUbiK9Sdz3JDYDMrslNgMyu9ksh9RuIiPiwWciIiIiIiIiIiIi8jgefCYiIiIiIiIiIiIij+PBZz9nMpmQkJAg6sq3EpsBmd0SmwGZ3WyWQ2o3kd4k7nsSmwGZ3RKbAZndbJZDajeREfGCgzw5PRERkU/h+zP5Gm6TREREvofvz0T+gb9C8nNWqxU7d+6E1WrVeyheI7EZkNktsRmQ2c1mOaR2E+lN4r4nsRmQ2S2xGZDZzWY5pHYTGREPPvs5pRSysrJEXQFWYjMgs1tiMyCzm81ySO0m0pvEfU9iMyCzW2IzILObzXJI7SYyIh58JiIiIiIiIiIiIiKP48FnIiIiIiIiIiIiIvI4XnDQz09Or5RCWloaoqKioGma3sPxConNgMxuic2AzG42y2gG3Os2wvszGYsRtkmJrzkSmwGZ3RKbAZndbJbRDHDOSGQkPPjMFyoiIiKfwvdn8jXcJomIiHwP35+J/ANPu+HnLBYLtmzZAovFovdQvEZiMyCzW2IzILObzXJI7SbSm8R9T2IzILNbYjMgs5vNckjtJjIiHnw2AKvVqvcQvE5iMyCzW2IzILObzXJI7SbSm8R9T2IzILNbYjMgs5vNckjtJjIaHnwmIiIiIiIiIiIiIo/jwWciIiIiIiIiIiIi8jhecNDPT06vlEJWVhZCQkLEXPlWYjMgs1tiMyCzm80ymgH3uo3w/kzGYoRtUuJrjsRmQGa3xGZAZjebZTQDnDMSGQk/+WwAQUFBeg/B6yQ2AzK7JTYDMrvZLIfUbiK9Sdz3JDYDMrslNgMyu9ksh9RuIqPhwWc/Z7VasXXrVlEn4pfYDMjsltgMyOxmsxxSu4n0JnHfk9gMyOyW2AzI7GazHFK7iYyIB5+JiIiIiIiIiIiIyON48JmIiIiIiIiIiIiIPI4Hn4mIiIiIiIiIiIjI4zSllNJ7EHoxwpVRlVKwWq0wm81irnwrsRmQ2S2xGZDZzWYZzYB73UZ4fyZjMcI2KfE1R2IzILNbYjMgs5vNMpoBzhmJjISffDaA7OxsvYfgdRKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwGZ3WyWQ2o3kdHw4LOfs1qt2LVrl6grwEpsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbEg89ERERERERERERE5HE8+ExEREREREREREREHseDzwZgNpv1HoLXSWwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERqMppZTeg9ALr4xKRETke/j+TL6G2yQREZHv4fszkX/gJ5/9nFIKly5dgqTfIUhsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbEg89+zmq1Yt++faKuACuxGZDZLbEZkNnNZjmkdhPpTeK+J7EZkNktsRmQ2c1mOaR2ExkRDz4TERERERERERERkcfx4DMREREREREREREReRwPPvs5TdMQEhICTdP0HorXSGwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERqQpwWdv55VRiYiIfA/fn8nXcJskIiLyPXx/JvIP/OSzn7PZbEhJSYHNZtN7KF4jsRmQ2S2xGZDZzWY5pHYT6U3iviexGZDZLbEZkNnNZjmkdhMZEQ8++zmbzYbExERRL8gSmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN5ER8eAzEREREREREREREXkcDz4TERERERERERERkcfx4LOf0zQNUVFRoq4AK7EZkNktsRmQ2c1mOaR2E+lN4r4nsRmQ2S2xGZDZzWY5pHYTGZGmlFJ6D0IvvDIqERGR7+H7M/kabpNERES+h+/PRP6Bn3z2czabDUlJSaJOwi+xGZDZLbEZkNnNZjmkdhPpTeK+J7EZkNktsRmQ2c1mOaR2ExkRDz77OYkvyBKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwGZ3WyWQ2o3kRHx4DMREREREREREREReRwPPhMRERERERERERGRx/Hgs5/TNA2xsbGirgArsRmQ2S2xGZDZzWY5pHYT6U3iviexGZDZLbEZkNnNZjmkdhMZkaaUUnoPQi+8MioREZHv4fsz+Rpuk0RERL6H789E/oGffPZzVqsViYmJsFqteg/FayQ2AzK7JTYDMrvZLIfUbiK9Sdz3JDYDMrslNgMyu9ksh9RuIiPiwWc/p5RCSkoKJH2AXWIzILNbYjMgs5vNckjtJtKbxH1PYjMgs1tiMyCzm81ySO0mMiIefCYiIiIiIiIiIiIij+PBZyIiIiIiIiIiIiLyuGIdfJ45cybatGmDsLAwxMTE4I477kBiYqLTba5fv45x48ahYsWKqFChAoYMGYKzZ88W+rgPPPAANE1z+urbt6/TbbZv344WLVogPj4eCxcudPrepk2bcOuttyI6OhohISG46aabMGrUKOTk5BQnzy+ZTCbEx8fDZJLzewSJzYDMbonNgMxuNsvhqW7OSXwb14/vkfiaI7EZkNktsRmQ2c1mOTzRzfkIkW8o1l68adMmjBs3Djt27MD69euRm5uL3r17IzMz03Gbp556Cv/73/+wYsUKbNq0CWfOnMGdd95Z5GP37dsXKSkpjq+lS5c6fX/MmDF44YUXsGTJEsycORMnT54EABw6dAh9+/ZF69atsXnzZuzfvx8ffPABypUrJ+LE9BLfiCQ2AzK7JTYDMrvZLIenujkn8W1cP75H4muOxGZAZrfEZkBmN5vl8EQ35yNEPkKVwrlz5xQAtWnTJqWUUpcvX1aBgYFqxYoVjtscPnxYAVDbt28v8HFGjRqlBg0aVOhz1apVSx0/flxdvXpVtW7dWh08eFAppdQ777yj4uPjSzT+9PR0BUClp6eX6P6+wGKxqD179iiLxaL3ULxGYrNSMrslNisls5vNcrjTXZL3Z3+fkxidv68fzhn9k8RmpWR2S2xWSmY3m+Uoizmjv89HiPxVqX51lp6eDgCIjo4GAOzevRu5ubno2bOn4zYNGjRArVq1sH379kIfa+PGjYiJiUFCQgLGjh2LixcvOn3/xRdfRMOGDREREYH27dujUaNGAICqVasiJSUFmzdvLk2K31JKIS0tTdQVYCU2AzK7JTYDMrvZLEdZdXNO4tu4fvQn8TVHYjMgs1tiMyCzm81ylEU35yNE+ggo6R1tNhsmTpyIjh07okmTJgCA1NRUlCtXDpGRkU63rVKlClJTUwt8rL59++LOO+9E7dq1cezYMUyZMgX9+vXD9u3bYTabAfz9Jwv33nsvcnJyEBUV5bjv3Xffje+++w5du3ZF1apV0b59e/To0QMjR45EeHi4Wy0WiwUWiwUAoGkazGYzrFar04ucyWSCyWRye7nZbIamaY7HzbscQL4/pyhoeUBAAJRSTsvtY7TZbLBYLI7/n3e5zWbLd3t/aXI19rzL7c32xzZCU97lhY3dvq6N1FTYcvu6tt/GCE15x1jQelJKOa1rIzS5Gnve5Xlfy4zSlJerJvv/vnFd+3OTO+vJ1fvWjWPMe193GGlOYkRGWj+cM/pWE+eMnDNyzsg5oxGa8uKcsXhzxuIcmDbSfITI35T44PO4ceNw4MABbN26tdSDuPfeex3/u2nTpmjWrBnq1q2LjRs3okePHo7vhYaGIjQ01Om+ZrMZixYtwiuvvIIff/wRv/zyC1599VW8/vrr2LlzJ2JjY4t8/u3btzseNzY2FgkJCTh69ChSUlIct4mPj0d8fDwOHDiAtLQ0x/KEhATExsZi9+7dyMrKcixv1qwZoqOjsX37dqcX2TZt2iAoKCjfz61Tp07Izs7Grl27nNo6d+6MtLQ07Nu3z7E8JCQEbdu2xdmzZ3H48GEkJycDACpWrIjmzZsjOTkZSUlJjtv7W1PeCwBERUXla7LZbLh06RIAGKYJKHo9HTp0yLGuTSaTIZqKWk82mw3JyclIS0tDTEyMIZrsCltPZrPZaV0boamo9WRf12azGV27djVEk11B6yk4OBgAcPbsWRw7dswQTe6sp+PHjzu27+rVqxfYVBxGmpMYkZHWD+eMvtXEOSPnjJwzcs5ohCY7zhmLP2esXbs23GWk+QiRv9FUCf6GYfz48Vi9ejU2b97stLP/+OOP6NGjB9LS0px+cxQXF4eJEyfiqaeecvs5KleujFdeeQWPPvpocYeHtLQ01K9fH48//jimT59e4O0yMjIQERGBixcvOn7D5G+/JbRYLDh37hxiYmJgNpsN/ZtP+3KbzYbz588jNjYWSilDNOVdXtDYc3NzcfbsWcTExDiW+XtTUcttNhvOnTuH2NhYmM1mQzTlHWNB68lmsyElJcWxro3Q5GrseZfb13VMTAzKlStniKa8XK0npRQuXLiAypUrO93Wn5vc/RTLje9bN47x6tWriIqKQnp6epGfADHKnMSojLJ+OGf0zSbOGTln5JyRc0YjNOXFOWPx5oyZmZmIjIwscs5olPkIkb8q1ieflVKYMGECVq5ciY0bN+b7LVOrVq0QGBiIDRs2YMiQIQCAxMREJCcn45ZbbnH7eU6dOoWLFy+W+Dc+UVFRiI2NdbqCaWECAgIQEOD8o7C/cN6ouMtvfNySLNc0zeVyk8mEcuXKoUaNGvmW2ycf7ozR15pcjf3G5dWrV3f5XHb+2FTUGAMDA/Ot68Ju7w9N7izP22yUpqLGaDabXa7rgm7vD03uLM/bbJSmvFw1FfY+569NQOHrydX71o1jdHXfGxl1TmIURl0/nDP6VhPnjJwzcs7IOaNRmvLinNH9OaOmaS7HYGfU+QiRvynWBQfHjRuHzz77DEuWLEFYWBhSU1ORmpqKa9euAQAiIiIwZswYPP300/jpp5+we/dujB49Grfccgvat2/veJwGDRpg5cqVAP7+dNOzzz6LHTt2ICkpCRs2bMCgQYNQr1499OnTp8gxffjhhxg7diy+//57HDt2DAcPHsRzzz2HgwcPYsCAAcXJ80tWqxU7d+7M99tFI5PYDMjsltgMyOxmsxye6uacxLdx/fgeia85EpsBmd0SmwGZ3WyWwxPdnI8Q+YZiffJ53rx5AIBu3bo5LV+0aBEeeOABAMA777wDk8mEIUOGIDs7G3369MHcuXOdbp+YmOi4yqjZbMa+ffvw8ccf4/Lly6hWrRp69+6Nl19+GUFBQUWOqW3btti6dSsee+wxnDlzBhUqVEDjxo2xatUqdO3atTh5fkkphaysrGKdaN/fSWwGZHZLbAZkdrNZDk91c07i27h+fI/E1xyJzYDMbonNgMxuNsvhiW7OR4h8Q7FPu1GU4OBgzJkzB3PmzHHrccqXL4/vvvuuOMNw0rJlS3z66aclvj8RERH5H85JfBvXDxEREemN8xEi31Cs024QEREREREREREREblDU9L+diMP+5XLi7oyqi9TSiEtLQ1RUVFFnmzfKCQ2AzK7JTYDMrvZLKMZcK/bCO/PZCxG2CYlvuZIbAZkdktsBmR2s1lGM8A5I5GR8OAzX6iIiIh8Ct+fyddwmyQiIvI9fH8m8g887Yafs1gs2LJlCywWi95D8RqJzYDMbonNgMxuNsshtZtIbxL3PYnNgMxuic2AzG42yyG1m8iIePDZAKxWq95D8DqJzYDMbonNgMxuNsshtZtIbxL3PYnNgMxuic2AzG42yyG1m8hoePCZiIiIiIiIiIiIiDyOB5+JiIiIiIiIiIiIyON4wUE/Pzm9UgpZWVkICQkRc+Vbic2AzG6JzYDMbjbLaAbc6zbC+zMZixG2SYmvORKbAZndEpsBmd1sltEMcM5IZCT85LMBBAUF6T0Er5PYDMjsltgMyOxmsxxSu4n0JnHfk9gMyOyW2AzI7GazHFK7iYyGB5/9nNVqxdatW0WdiF9iMyCzW2IzILObzXJI7SbSm8R9T2IzILNbYjMgs5vNckjtJjIiHnwmIiIiIiIiIiIiIo/jwWciIiIiIiIiIiIi8jgefCYiIiIiIiIiIiIij9OUUkrvQejFCFdGVUrBarXCbDaLufKtxGZAZrfEZkBmN5tlNAPudRvh/ZmMxQjbpMTXHInNgMxuic2AzG42y2gGOGckMhJ+8tkAsrOz9R6C10lsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbDg89+zmq1YteuXaKuACuxGZDZLbEZkNnNZjmkdhPpTeK+J7EZkNktsRmQ2c1mOaR2ExkRDz4TERERERERERERkcfx4DMREREREREREREReVyA3gOg0jObzXoPweskNgMyuyU2AzK72SyH1G4ivUnc9yQ2AzK7JTYDMrvZLIfUbiq969evIycnx+vPW65cOQQHB3v9eX2dppRSeg9CL7wyKhERke/h+zP5Gm6TREREvofvz+TK9evXUTuuAlLPef984VWrVsWJEyd4APoG/OSzn1NKIS0tDVFRUdA0Te/heIXEZkBmt8RmQGY3m2U0A3K7ifQmcd+T2AzI7JbYDMjsZrOMZkBuN5VeTk4OUs9Z8dfueISHee9swxlXbIhrlYScnBwefL4Bz/ns56xWK/bt2yfqCrASmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN3lOeJgJ4WFmL37xEGtB+JMhIiIiIiIiIiIiIo/jaTeIiIiIiIiIiIjIMGxQsMHm1ecj1/jJZz+naRpCQkJEnQNJYjMgs1tiMyCzm81ySO0m0pvEfU9iMyCzW2IzILObzXJI7SYyIk0pJfbQPK+MSkRE5Hv4/ky+htskERGR7+H7M7li3y4u/lHb6xccrFj/BLdHF/jJZz9ns9mQkpICm817f0qgN4nNgMxuic2AzG42yyG1m0hvEvc9ic2AzG6JzYDMbjbLIbWbyIh48NnP2Ww2JCYminpBltgMyOyW2AzI7GazHFK7ifQmcd+T2AzI7JbYDMjsZrMcUrvJc6zK5vUvco0Hn4mIiIiIiIiIiIjI43jwmYiIiIiIiIiIiIg8jgef/ZymaYiKihJ1BViJzYDMbonNgMxuNsshtZtIbxL3PYnNgMxuic2AzG42yyG1m8iINKWU0nsQeuGVUYmIiHwP35/J13CbJCIi8j18fyZX7NtFamIthId57zO3GVdsqJqQzO3RBX7y2c/ZbDYkJSWJOgm/xGZAZrfEZkBmN5vlkNpNpDeJ+57EZkBmt8RmQGY3m+WQ2k1kRDz47OckviBLbAZkdktsBmR2s1kOqd1EepO470lsBmR2S2wGZHazWQ6p3STPnDlzEB8fj+DgYLRr1w47d+4s8LZfffUVWrdujcjISISGhqJFixb49NNPC7z9Y489Bk3T8O6775bByN3Hg89EREREREREREREXrR8+XI8/fTTmDp1Kn777Tc0b94cffr0wblz51zePjo6Gv/617+wfft27Nu3D6NHj8bo0aPx3Xff5bvtypUrsWPHDlSrVq2sM4rEg89ERERERERERERkGDYd/g/4+5zTeb+ys7MLHOPbb7+Nhx9+GKNHj0ajRo0wf/58hISE4D//+Y/L23fr1g2DBw9Gw4YNUbduXTz55JNo1qwZtm7d6nS706dPY8KECfj8888RGBjouR9qCfHgs5/TNA2xsbGirgArsRmQ2S2xGZDZzWY5pHYT6U3iviexGZDZLbEZkNnNZjmkdpP/q1mzJiIiIhxfM2fOdHm7nJwc7N69Gz179nQsM5lM6NmzJ7Zv317k8yilsGHDBiQmJqJLly6O5TabDSNGjMCzzz6Lxo0blz7IAwL0HgCVjtlsRkJCgt7D8CqJzYDMbonNgMxuNsshtZtIbxL3PYnNgMxuic2AzG42yyG1m/zfyZMnER4e7vjvoKAgl7e7cOECrFYrqlSp4rS8SpUqOHLkSIGPn56ejurVqyM7Oxtmsxlz585Fr169HN9//fXXERAQgCeeeKKUJZ7DTz77OavVisTERFitVr2H4jUSmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN/m/8PBwp6+CDj6XVFhYGPbs2YNdu3ZhxowZePrpp7Fx40YAwO7du/Hee+9h8eLFPvVXAzz47OeUUkhJSYFSSu+heI3EZkBmt8RmQGY3m+WQ2k2kN4n7nsRmQGa3xGZAZjeb5ZDaTXJUqlQJZrMZZ8+edVp+9uxZVK1atcD7mUwm1KtXDy1atMCkSZNw1113OU7tsWXLFpw7dw61atVCQEAAAgIC8Ndff2HSpEmIj48vy5xC8eAzERERERERERERGYZVKa9/FUe5cuXQqlUrbNiwwbHMZrNhw4YNuOWWW9x+HJvN5rio4YgRI7Bv3z7s2bPH8VWtWjU8++yz+O6774o1Pk/iOZ+JiIiIiIiIiIiIvOjpp5/GqFGj0Lp1a7Rt2xbvvvsuMjMzMXr0aADAyJEjUb16dccnm2fOnInWrVujbt26yM7OxjfffINPP/0U8+bNAwBUrFgRFStWdHqOwMBAVK1aVddzqPPgs58zmUyIj4+HySTnQ+wSmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN8kydOhQnD9/Hi+++CJSU1PRokULrFu3znERwuTkZKd9IDMzE48//jhOnTqF8uXLo0GDBvjss88wdOhQvRLcoinBJ9DJyMhAREQE0tPTna5ESURERPrh+zP5Gm6TREREvofvz+SKfbs4eaQ6wsO898uLjCs21GxwmtujC/wVkp+zWq3Yu3evqCvASmwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd3kOTYor3+Razz47OeUUkhLSxN1BViJzYDMbonNgMxuNsshtZtIbxL3PYnNgMxuic2AzG42yyG1m8iIePCZiIiIiIiIiIiIiDyOB5+JiIiIiIiIiIiIyOMC9B4AlY7JZEJCQoKoK8BKbAZkdktsBmR2s1kOqd1EepO470lsBmR2S2wGZHazWQ6p3eQ5NihYvXgeZp7zuWCaEnwCHV4ZlYiIyPfw/Zl8DbdJIiIi38P3Z3LFvl2cOBKLsDDv/fLiyhUbajdI4fboQpmvhZkzZ6JNmzYICwtDTEwM7rjjDiQmJjrdZsGCBejWrRvCw8OhaRouX76c73G2b9+OFi1aID4+HgsXLnT63qZNm3DrrbciOjoaISEhuOmmmzBq1Cjk5OSUZZpPsFqt2Llzp6grwEpsBmR2S2wGZHazWQ5PdXN+YTxcp2VL4muOxGZAZrfEZkBmN5vl8EQ35xZEvqHMDz5v2rQJ48aNw44dO7B+/Xrk5uaid+/eyMzMdNwmKysLffv2xZQpUwp8nDFjxuCFF17AkiVLMHPmTJw8eRIAcOjQIfTt2xetW7fG5s2bsX//fnzwwQcoV66ciBdnpRSysrJEXQFWYjMgs1tiMyCzm81yeKqb8wvj4TotWxJfcyQ2AzK7JTYDMrvZLIcnujm3IPINZX7O53Xr1jn99+LFixETE4Pdu3ejS5cuAICJEycCADZu3Fjg42RmZuLmm29GTEwMoqKicOXKFQDA999/j6pVq+KNN95w3LZu3bro27evZ0OIiIjIZ3B+YTxcp0RERORJnFvIZoPy6nmYec7ngnn9zO3p6ekAgOjo6GLd78UXX0TDhg0RERGB9u3bo1GjRgCAqlWrIiUlBZs3b/b4WImIiMg/cH5hPFynRERE5EmcWxDpw6sXHLTZbBg4cCAuX76MrVu35vv+xo0b0b17d6SlpSEyMjLf9zMzM5GTk4OoqCjHMqvVioceegiLFy9G1apV0b59e/To0QMjR44s8gTfRjg5vVIKaWlpiIqKgqZpeg/HKyQ2AzK7JTYDMrvZLKMZcK+7uO/Pvja/oNLztXXKOaN/ktgMyOyW2AzI7GazjGbA83NGX5tbUNmxbxfHjlT1+gUH6zZI9ev5Ylnx6sHnsWPH4ttvv8XWrVtRo0aNfN8vamcvzOnTp/Hjjz/il19+wVdffQWz2YydO3ciNja2wPvYN8iLFy86NgxN02A2m2G1Wp3OLWQymWAymdxebjaboWkaLBaL03OazWYAyHf+n4KWBwQEQCnltNw+RpvNBpvN5vZyNrGJTWxiE5v8oenq1auIiopye+Lma/MLKj1fW6ecM7KJTWzypab+5e+Dsv59G83sfFAu7/Jvri3xmyb7csA464lNZd+UmZmJyMhIt+aMvja3oLLDg8++p8zP+Ww3fvx4fP3119i8ebPLHb20qlevjhEjRmDEiBF4+eWXUb9+fcyfPx/Tp08v8r7bt29HaGgoACA2NhYJCQk4evQoUlJSHLeJj49HfHw8Dhw4gLS0NMfyhIQExMbGYvfu3cjKynIsb9asGaKjo7F9+3anF9k2bdogKCgo32/aOnXqhOzsbOzatcuxzGw2o3PnzkhLS8O+ffscy0NCQtC2bVucPXsWhw8fxsmTJ1GzZk1UrFgRzZs3R3JyMpKSkhy397emvFefjYqKytdks9lw+fJlDBw4EMeOHTNEE1D0etq3bx/27duHmjVrwmQyGaKpqPVks9lw8uRJ9OvXDzExMYZositsPZnNZixfvtyxro3QVNR6sq/r+Ph4dO3a1RBNdgWtp+DgYOTm5iI+Ph7Hjh0zRJM76+n48eOO963q1asX2OQuX55fUMn48jrlnNG3mjhn5JxR6pyxZqfKSNl1EVaLQqOhtZBxKgv4/8fpTm49j4AgE2LbVHT0+kOTu+uJc0bOGfM21a5dG+7w5bkFlR2rUrB68UKd3nwuf1Pmn3xWSmHChAlYuXIlNm7ciJtuuqnA25bmN003atasGXr37o0333yzwNsY4VMsOTk52LZtGzp06IDAwEARv/m0WCzYtm0bunTpAk3TDNGUd3lBY8/OzsbPP/+MDh06ICAgwBBNRS23r+vOnTsjMDDQEE15x1jQerJYLNiyZYtjXRuhydXY8y63r+sOHTogODjYEE15uVpPVqsV27dvR4cOHRy/ZPD3JnfWk6v3rZJ88tmX5xdUMr68Tjln9M0mzhk5Z5Q6Z7R/8lkza6jZuTJObbsAm+X/P/f//39G/eQz54ycMxbnk8++PLegsmOft/1xuIrXP/lcv+FZfvLZhTL/5PO4ceOwZMkSrF69GmFhYUhNTQUAREREoHz58gCA1NRUpKam4ujRowCA/fv3IywsDLVq1SryRPAffvgh9uzZg8GDB6Nu3bq4fv06PvnkExw8eBAffPCBW2MMCAhwHOCxs79w3qi4y2983JIs1zTN5XKTyeSYUAYEBDjGYH/zKO3Y9WpyNfYbl9v/t5Gaihqj2Wx2rOu8z+PvTUUtN5lM0DSt2GMvaLkvNLkzRlfrurDb+3qTO8vtzYBxmvIq6rXc1XJ/bipoPbl637pxjK7ueyN/mF9Q8fjDOuWc0beaOGfknFHqnNF+ao2//wO4YklDsvUYEtACJs3kuM2N4/flpuIs55wx/3J/birNnNG+zxfEH+YWRBKU+a8A5s2bh/T0dHTr1g2xsbGOr+XLlztuM3/+fLRs2RIPP/wwAKBLly5o2bIl1qxZU+Tjt23bFlevXsVjjz2Gxo0bo2vXrtixYwdWrVqFrl27llkXERER6YfzC+PhOiUiKpkAlEMsajkOPBPR3zi3IPINXr3goK8xypXLs7KyEBISUuRv/YxCYjMgs1tiMyCzm80ymgH3uo3w/kzGYoRtUuJrjsRmQGa3tOZeprsd/zswxIzcLKvL2623rfDWkLxG2roGZDYDnDNSydm3iyM6nHajAU+74RJ/NWoAQUFBeg/B6yQ2AzK7JTYDMrvZLIfUbiK9Sdz3JDYDMrslNgOAJdtW9I0MRuK6ltgMyO0mMhoefPZzVqsVW7duzXdSfyOT2AzI7JbYDMjsZrMcUruJ9CZx35PYDMjsltgM/H1RwZqdKkMzy/k0rMR1LbEZkNtNZEQ8+ExEREREREREREREHuf68qRERERERERE5HPs53K2WCzYunUrOnXqhIAA/tOeiCgvKxSs8N5l7rz5XP6Gn3wmIiIiIiIiIiIiIo/TlFJiD80b4cqoSilYrVaYzWYxV76V2AzI7JbYDMjsZrOMZsC9biO8P5OxGGGblPiaI7EZkNktsRmQ2c1mGc0A54xUcvbt4uDhGISFee8zt1eu2NC44Tlujy7wk88GkJ2drfcQvE5iMyCzW2IzILObzXJI7SbSm8R9T2IzILNbYjMgs5vNckjtJjIaHnz2c1arFbt27RJ1BViJzYDMbonNgMxuNsshtZtIbxL3PYnNgMxuic2AzG42yyG1mzzHqrz/Ra7x4DMREREREREREREReRwPPhMRERERERERERGRx/HgswGYzWa9h+B1EpsBmd0SmwGZ3WyWQ2o3kd4k7nsSmwGZ3RKbAZndbJZDajeR0WhKKbFnJeGVUYmIiHwP35/J13CbJCIi8j18fyZX7NvFnkMxCAvz3mdur1yxoUWjc9weXeAnn/2cUgqXLl2CpN8hSGwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2s1kOqd1ERsSDz37OarVi3759oq4AK7EZkNktsRmQ2c1mOaR2E+lN4r4nsRmQ2S2xGZDZzWY5pHYTGREPPhMRERERERERERGRxwXoPQAiIiIiIiIiIiIiT7FBgxWaV5+PXOMnn/2cpmkICQmBpsnZyCU2AzK7JTYDMrvZLIfUbiK9Sdz3JDYDMrslNgMyu9ksh9RuIiPSlOCzt/PKqERERL6H78/ka7hNEhER+R6+P5Mr9u3it0NVUCHMe5+5vXrFhpsbneX26AI/+eznbDYbUlJSYLPZ9B6K10hsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbEg89+zmazITExUdQLssRmQGa3xGZAZjeb5ZDaTaQ3ifuexGZAZrfEZkBmtyeaban13fryFRLXMyC3m8iIeMFBIiIiIiIiIjIsi8WCtWvXIjg4GBG264iKMCEqwozICBMCAnhOYSIjsqm/v7z5fOQaDz4TERERERERkWEFBAQgPj4ed911F44ePelYPn9WDB6+P0LHkRERGR9Pu+HnNE1DVFSUqCvASmwGZHZLbAZkdrNZDqndRHqTuO9JbAZkdktsBmR2l6a5efPm2L17N4bcXsGxbOZ7lzDv48seHKHnSVzPgNxuIiPSlFJiPxjOK6MSERH5Hr4/k6/hNklEZBzWlJsw5z/p2H84Gx3alke5QA3DBoflu52p6h86jI6Kg+/P5Ip9u/j1YBVUCPPeZ26vXrGhdeOz3B5d4Cef/ZzNZkNSUpKok/BLbAZkdktsBmR2s1kOqd1EepO470lsBmR2S2wGZHZ7olnTNIwfE4k3XqyEUfeEuzzw7EskrmdAbjd5jhWa17/INR589nMSX5AlNgMyuyU2AzK72SyH1G4ivUnc9yQ2AzK7JTYDMrs92RwRbvbAiMqexPUMyO0mMiIefCYiIiIiIiIiIiIijwvQewBEREREREREJFfTSe8UeRtLpwyYbECjc8C4i5tgc/FRuu/bzi/ycaqbffs0G0RERsODz35O0zTExsaKugKsxGZAZrfEZkBmN5vlkNpNpDeJ+57EZkBmt8RmQGa30oBL5f/+/yV12noFNauneG5QZUziegbkdpPnePs8zDznc8E0pZTSexB64ZVRiYiIfA/fn8nXcJskIipb7n7yOS/b9RxoQYFOBye/ajQXJ5OtOHnKisAADd1vDXL5WP508JkKxvdncsW+XWw7GIsKYd472/DVKzZ0aJzC7dEFnvPZz1mtViQmJsJqteo9FK+R2AzI7JbYDMjsZrMcUruJ9CZx35PYDMjsltgMGK8768wJXPx9C1I3/w9nfvwKNovF8T1bbjYy9x9H2qptCP70ZyQ9MRcpH6yCpmlQVisufb0Df46ehUYNzqFP74t46MHL2LEjB3/8YSnkGf2D0dazu6R2ExkRDz77OaUUUlJSIOkD7BKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwHjdQdVioUtNxtp+3cg48990Ez/d7hCMwfCdj0X1w4lITItF7kpF5F96vz//54Z0be3R9yMB3H3PeVhNgMmE7B+/XW8+soVvXI8xmjr2V1Su4mMiOd8JiIiIiIiIiJdmcsFo3Lbnohu3glZKUnOB59NJoS1SUBEqwREHb+G6CgLTJWc/6y9XLWKeOvtCDzxZCjmzsnEkxMrIDaWn7cjksqmNNhKc4L4EjwfucaDz0RERERERETkE8xBwQiLb1Dw9yuUR+XhPWHVXH8iNi4uAK+/EVFWwyMiomLirwH9nMlkQnx8PEwmOatSYjMgs1tiMyCzm81ySO0m0pvEfU9iMyCzW2IzILNbacC5Cn///7wXGjQyiesZkNtNZET85LOfs78gSyKxGZDZLbEZkNnNZjmkdhPpTeK+J7EZkNktsRmQ2W0/+CyJxPUMyO0mMiIefPZzVqsVBw4cQJMmTWA2m/UejldIbAZkdktsBmR2s1lGMyC3m0hvEvc9ic2AzG6JzYCxuve/9ZRbtyu6eapnB+YDjLSei0NqN3mOFRqs8N5fSHjzufwN/37BzymlkJaWJuoKsBKbAZndEpsBmd1slkNqN5HeJO57EpsBmd0SmwGZ3WyWQ2o3kRHx4DMREREREREREREReRwPPhMRERERERERERGRx/Gcz37OZDIhISFB1BVgJTYDMrslNgMyu9ksh9RuIr1J3PckNgMyuyU2AzK72SyH1G7yHCtMsHrxM7dWrz2T/9GU4BPoZGRkICIiAunp6QgPD9d7OERERAS+P5Pv4TZJRETke/j+TK7Yt4sfD9REhTDvHXy+esWGW5uc5PboAn+F5OesVit27twJq1XO71gkNgMyuyU2AzK72SyH1G4ivUnc9yQ2AzK7JTYDMrvZLIfUbiIj4sFnP6eUQlZWlqgrwEpsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbEcz4TERERERERERGRYSilwaY0rz4fucZPPhMRERERERERERGRx/Hgs58zm81o1qwZzGaz3kPxGonNgMxuic2AzG42yyG1m0hvEvc9ic2AzG6JzYDMbjbLIbWbyIh42g0/p2kaoqOj9R6GV0lsBmR2S2wGZHazWQ6p3UR6k7jvSWwGZHZLbAZkdrNZDqndREbETz77OYvFgi1btsBiseg9FK+R2AzI7JbYDMjsZrMcUruJ9CZx35PYDMjsltgMyOxmsxxSu8lzrNC8/kWu8eCzAVitVr2H4HUSmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN5HR8OAzEREREREREREREXlcsQ4+z5w5E23atEFYWBhiYmJwxx13IDEx0ek2CxYsQLdu3RAeHg5N03D58uUiH3fatGnQNM3pq0GDBk63SUxMRMeOHVGjRg288sorTt/bu3cvBg4ciJiYGAQHByM+Ph5Dhw7FuXPnipNHREREfoJzEt/G9UNERER643yEyDcU6+Dzpk2bMG7cOOzYsQPr169Hbm4uevfujczMTMdtsrKy0LdvX0yZMqVYA2ncuDFSUlIcX1u3bnX6/vjx43H//fdj9erVWL16NbZt2wYAOH/+PHr06IHo6Gh89913OHz4MBYtWoRq1ao5jcuozGYz2rRpI+oKsBKbAZndEpsBmd1slsNT3ZyT+DauH98j8TVHYjMgs1tiMyCzm81yeKKb8xHZrMrk9S9yLaA4N163bp3Tfy9evBgxMTHYvXs3unTpAgCYOHEiAGDjxo3FG0hAAKpWrVrg99PS0tCqVSs0a9YM1apVc/w26ueff0Z6ejo++ugjBAT8nVO7dm107969WM/vz4KCgvQegtdJbAZkdktsBmR2s1kOT3RzTuLbuH58k8TXHInNgMxuic2AzG42y1Habs5HiHxDqQ7Lp6enAwCio6NLPZA///wT1apVQ506dTB8+HAkJyc7ff+ll15Cz549ERISApPJhD59+gAAqlatCovFgpUrV0IpVepx+Bur1YqtW7eKOhG/xGZAZrfEZkBmN5vlKKtuzkl8G9eP/iS+5khsBmR2S2wGZHazWY6y6OZ8hEgfxfrkc142mw0TJ05Ex44d0aRJk1INol27dli8eDESEhKQkpKC6dOno3Pnzjhw4ADCwsIAAP3798f58+eRkZGBypUrO+7bvn17TJkyBffddx8ee+wxtG3bFrfeeitGjhyJKlWquPX8FosFFosFAKBpGsxmM6xWq9MLgclkgslkcnu52WyGpmmOx827HMh/1daClgcEBEAp5bTcPkabzQaLxeL4/3mX22y2fLf3lyZXY8+73N5sf2wjNOVdXtjY7evaSE2FLbeva/ttjNCUd4wFrSellNO6NkKTq7HnXZ73tcwoTXm5arL/7xvXtT83ubOeXL1v3TjGvPd1h5HmJEZkpPXDOaNvNXHOyDkj54ycMxqhKS/OGYs3ZyzOwVsjzUeI/E2JDz6PGzcOBw4cyHdem5Lo16+f4383a9YM7dq1Q1xcHL744guMGTPG8b2goCCnndZuxowZePrpp/Hjjz/il19+wfz58/Hqq69i8+bNaNq0aZHPv337doSGhgIAYmNjkZCQgKNHjyIlJcVxm/j4eMTHx+PAgQNIS0tzLE9ISEBsbCx2796NrKwsp47o6Ghs377d6UW2TZs2CAoKyvdz69SpE7Kzs7Fr1y7HMrPZjM6dOyMtLQ379u1zLA8JCUHbtm1x9uxZHD582PEbtooVK6J58+ZITk5GUlKS4/b+1pT3AgBRUVH5mmw2Gy5dugQAhmkCil5Phw4dcqxrk8lkiKai1pPNZkNycjLS0tIQExNjiCa7wtaT2Wx2WtdGaCpqPdnXtdlsRteuXQ3RZFfQegoODgYAnD17FseOHTNEkzvr6fjx447tu3r16gU2FYeR5iRGZKT1wzmjbzVxzsg5I+eMnDMaocmOc8bizxlr164NdxlpPkLusUGDrXQnfCjm8/GT7AXRVAk+5z9+/HisXr0amzdvLnBn37hxI7p37460tDRERkYWe2Bt2rRBz549MXPmzGLfNycnBy1btkTr1q3x8ccfF3i7jIwMRERE4OLFiwgPDwfgf78lzMnJwbZt29ChQwcEBgYa+jefeT/Fsm3bNnTp0gWaphmiKe/ygsaenZ2Nn3/+GR06dEBAQIAhmtz5FMu2bdvQuXNnBAYGGqIp7xgLWk8WiwVbtmxxrGsjNLka+42fYrG/lgUHBxuiKa+CPsWyfft2dOjQwfEPRn9vcmc9uXrfunGMV69eRVRUFNLT0x3vzwUxypzEqIyyfjhn9M0mzhk5Z+SckXNGIzTlxTlj8eaMmZmZiIyMLHLOaJT5CLnHPm9bu68OQsO8d6HOzCtW3NbsuFv/hpGmWJ98VkphwoQJWLlyJTZu3Fis3zIVx9WrV3Hs2DGMGDGiRPcvV64c6tat6/aVQgMCAhxv1nb2F84bFXf5jY9bkuWaprlcbjKZEBQUhC5dujjeGOzL874plXTsejW5Gnve5WazOV+zu2P31SZ3xliuXDmX3f7cVNTyvOu6uGMvaLneTe6MMSAgoMBt3F+bilp+47o2QtONbmwym83o1KlTga9l/thkV9h6cvW+deMYXd33RkadkxiFUdcP54y+1cQ5I+eMnDNyzmiEphtxzuj+nLGg13Y7o85HiPxNsT5/Pm7cOHz22WdYsmQJwsLCkJqaitTUVFy7ds1xm9TUVOzZswdHjx4FAOzfvx979uxx/MkbAPTo0QOzZ892/PczzzyDTZs2ISkpCdu2bcPgwYNhNpsxbNiwIsf09ddf4/7778fXX3+NP/74A4mJiXjzzTfxzTffYNCgQcXJ81vZ2dl6D8HrJDYDMrslNgMyu9kshye6OSfxbVw/vknia47EZkBmt8RmQGY3m+UobTfnI0S+oVgHn+fNm4f09HR069YNsbGxjq/ly5c7bjN//ny0bNkSDz/8MACgS5cuaNmyJdasWeO4zbFjx3DhwgXHf586dQrDhg1DQkIC7rnnHlSsWBE7duxweW6cGzVq1AghISGYNGkSWrRogfbt2+OLL77ARx99VOLfOvkTq9WKXbt25fvTFiOT2AzI7JbYDMjsZrMcnurmnMS3cf34HomvORKbAZndEpsBmd1slsMT3ZyPEPmGYp92oyjTpk3DtGnTCr1N3pPhA8CyZcuKMwwnderUwYIFC0p8fyIiIvI/nJP4Nq4fIiIi0hvnI7JZocGKwk/N4unnI9e8d9lHIiIiIiIiIiIiIhKDB58NoKALAxiZxGZAZrfEZkBmN5vlkNpNpDeJ+57EZkBmt8RmQGY3m+WQ2k1kNJpy5+8QDCojIwMRERFIT09HeHi43sMhIiIi8P2ZfA+3SSIiIt/D92dyxb5drNlXF6Fh3vsFRuYVKwY2O8bt0QV+8tnPKaVw6dIlt85lZBQSmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN3mOVZm8/kWu8Sfj56xWK/bt2yfqyrcSmwGZ3RKbAZndbJZDajeR3iTuexKbAZndEpsBmd1slkNqN5ER8eAzEREREREREREREXlcgN4DICIi/9TLdLdbt1tvW1HGIyEiIiIiIiIiX8SDz35O0zSEhIRA0zS9h+I1EpsBmd0SmwGZ3WyWQ2o3kd4k7nsSmwGZ3RKbAZndbJZDajd5jg0abPDe9uPN5/I3mhJ89nZeGZWIqOT4yWcqK3x/Jl/DbZKIiMj38P2ZXLFvF1/urY/QMLPXnjfzihVDmv/B7dEFnvPZz9lsNqSkpMBms+k9FK+R2AzI7JbYDMjsZrMcUruJ9CZx35PYDMjsltgMyOxmsxxSu4mMiAef/ZzNZkNiYqKoF2SJzYDMbonNgP92K6WQqa7gnDpd7Pv6a3NpSGwG5HYT6U3iviexGZDZLbEZkNnNZjmkdhMZEc/5TEREpWZTNiTjDxzFAYQhEjGorveQiIiIiIiISCgbTLB68TO3Nog9q3GR+MlnIiIqNZNmQgjCoEHDVaTDqqx6D4n8mODLURARERGRmzhnJPIP/OSzn9M0DVFRUaKuACuxGZDZLbEZ8N/uGK06mqr22I8duIrLiEBFt+/rr82lIbEZKLz7yJEjWLp0KXJycnQYGZGxSXzNkdgMyOyW2AzI7GazHAV1K6Wwf/9+LF26FKGhoTqNjoiKQ1OCf1XEK6MSEZVcL9PdLpefU6eRg2zU0OoAANbbVnhzWORnkpOTsWzZMixduhR79uxBeHg4Zs2ahUcffZTvz+QzOGckIiLS17Fjx7B06VIsXboUhw4dQnR0NGbPno377ruP78/kxD5vW7G3AULCzF573qwrVtzd/Ai3Rxd42g0/Z7PZkJSUJOok/BKbAZndEpsB/++O0aqjCmoU6z7+3lwSEpuBv7t///13zJ49G506dUJcXBymTp2Km266CV999RXOnj2Le++9V+9hEhmOxNccic2AzG6JzYDMbjbLYbPZ8Ouvv+Ltt99G27ZtUa9ePbz22mto2bIlvv76a6SkpOC2227Te5jkw6zK5PUvco2n3fBz9jeiGjVqwGSSsaFLbAZkdktsBvyn25OfaPaXZk+S1pyRkYGVK1di2bJlyM7OxrZt29CjRw98+umnGDRoEMLCwhy35Wk3iDxP2msOILMZkNktsRmQ2c1m4zdfunQJX375JZYtWwabzYZffvkFffr0wTPPPIPbb78dISEhjttev35dx5ESkbt48JmIiIjKxLVr17B27VosXboUa9euRXZ2Nrp27Yrbb78dS5cuRZUqVfQeIhERERHp7OrVq1izZg2WLl2K7777DlarFT169MDtt9+OFStWoFKlSnoPkYhKwfi/NiMiIiKvyc3NxbfffouRI0eiSpUquPvuu/HXX39hxowZOHnyJH744Qe0bt0aFSu6f0FKIiIiIjKW7OxsrF69Gvfeey+qVKmC4cOH4+LFi3jrrbdw+vRpfPPNN2jZsiUiIyP1HioRlRI/+eznNE1DbGysqCvfSmwGZHZLbAZkdrPZv9lsNvz8889YsmQJ/vvf/+LChQtISEjApEmTMGzYMNSvX99xW6vVaphuIn9ipNccd0lsBmR2S2wGZHaz2b9ZrVZs3LgRS5cuxZdffonLly+jadOmeP7553Hvvfeidu3aTrc1SjfpwwYTbF78zK0NymvP5W80pZTYnw6vXE5ERFQySin8/vvvWLp0KZYtW4ZTp06hZs2auPfeezFs2DC0aNGixP9Y4Psz+Rpuk0RERCWjlMIvv/yCpUuX4osvvkBqairq1KmDYcOGYdiwYWjcuHGJH5vvz+SKfbtYsqcJQsLMXnverCtW3NfiALdHF3jaDT9ntVqRmJgIq9Wq91C8RmIzILNbYjMgs5vN/iMxMRHTpk1DgwYN0KpVKyxevBgDBgzA5s2bkZSUhDfeeAMtW7Ys8MCzv3YT+TuJ+57EZkBmt8RmQGY3m/3H/v37MWXKFNStWxe33HILvvjiCwwdOhQ7duzA0aNH8corrxR64Nlfu4koPx589nNKKaSkpEDSB9glNgMyuyU2AzK72ez7fvjhB7Rt2xYNGjTA22+/jfbt2+Pbb7/FmTNnMHfuXHTu3NmtK7D7WzeRUUjc9yQ2AzK7JTYDMrvZ7NuUUlizZg2aN2+OZs2aYd68eejRowc2bNiAU6dO4d1330W7du3c+us4f+omosLxnM9ERERUoBMnTmDSpElYuXIlOnbsiBUrVuC2225D+fLl9R4aEREREfmII0eOYOLEifjuu+/Qs2dPrF69Gn369EFQUJDeQyOhrEqDVXnvnOHefC5/w4PPRERElE9mZiZee+01zJo1C5UqVcKSJUtw77338qIvREREROSQnp6Ol156Ce+//z5q1aqFVatWYeDAgZwzEpEDDz77OZPJhPj4eLf+1NkoJDYDMrslNgMyu9nsO5RSWL58OZ599lmcP38ezzzzDCZPnozQ0FCPPL6vdhMZncR9T2IzILNbYjMgs5vNvsNms2Hx4sWYPHkyrl69iunTp+Ppp59GcHCwRx7fV7uJqPg0JfgEOrwyKhER0f/Zs2cPnnjiCWzZsgWDBw/Gm2++iTp16nh9HHx/Jl/DbZKIiOj/7NixA0888QR27dqF++67D6+//jpq1Kjh9XHw/ZlcsW8Xn/7eFCFhZq89b9YVK0a03M/t0QX+CsnPWa1W7N27V9QVYCU2AzK7JTYDMrvZrK8LFy5g7NixaNWqFS5cuIDvv/8eX331VZkcePalbiJJJO57EpsBmd0SmwGZ3WzWV0pKCkaNGoVbbrkFFosFW7Zsweeff14mB559qZv8kxUmr3+Razzthp9TSiEtLU3UFWAlNgMyuyU2AzK72awPi8WC+fPn44UXXoBSCm+//TYef/xxBAYGltlz+kI3kUQS9z2JzYDMbonNgMxuNusjOzsb7733Hl5++WUEBwdjwYIFePDBB2E2l92nSn2hm4g8gwefiYiIBPrxxx/x5JNP4uDBg3jooYcwY8YMVK5cWe9hEREREZEPWbt2LSZOnIgTJ05g/PjxmDp1KqKiovQeFhH5EX4mnIiISJCkpCTcdddd6NGjB8LDw7Fr1y4sWLCAB56JiIiIyCExMRH9+/fH7bffjri4OOzduxfvvvsuDzwTUbHxk89+zmQyISEhQdQVYCU2AzK7JTYDMrvZXPaysrLw+uuv44033kB0dDQ+++wz3HfffdA0zSvPbydxXRP5Aon7nsRmQGa3xGZAZjeby15GRgZefvllvPfee6hevTq++uor3HHHHZwzkt+xKRNsynvbj42niCkQDz77OZPJhNjYWL2H4VUSmwGZ3RKbAZndbC47SimsWLECzzzzDM6ePYtJkyZhypQpqFChQpk/tysS1zWRL5C470lsBmR2S2wGZHazuezYbDZ88skn+Oc//4krV67gxRdfxKRJk1C+fPkyf25XJK5rIqPir5D8nNVqxc6dO0VdAVZiMyCzW2IzILO7NM2nTp3Cpk2bymBUZcsb61kphcceewxDhw5Fy5YtcejQIbz66qu6HXgGZG7fRL5A4r4nsRmQ2S2xGZDZXZrm48ePY/v27WUwqrLljfVstVoxbNgwjB49Gt27d8eRI0fw/PPP63bg2T4mads3kVHx4LOfU0ohKytL1BVgJTYDMrslNgMyu0vSfP78eTz99NOoV68eunfvjrS0tDIcoed5Yz1PmzYNCxYswMKFC7F69WrUrVu3zJ7LXRK3byJfIHHfk9gMyOyW2AzI7C5J8+nTpzF27FgkJCTg1ltvRXZ2dhmO0PPKej0rpTBx4kT897//xYoVK7B06VLUrFmzTJ6ruOOStn0TGRUPPhMRkV+5fPkyXnjhBdSpUwcLFy7Eo48+CqWUX36SpSx9+OGHeOmll/Daa6/hwQcf1Hs4RERERF514cIFPPPMM6hXrx6++OILPPzww7h+/Tp+++03vYfmU15//XXMnj0bc+fOxV133aX3cIg8xgqT17/INf5kiIjIL2RmZuL1119HnTp18NZbb2HcuHE4ceIE3n33XcTExODnn3/We4g+Y9WqVXj88ccxYcIE/OMf/9B7OERERERek5GRgWnTpqFOnTpYsGABnnvuOZw4cQLvvfceQkJCOGfM4+OPP8bkyZPx4osv4tFHH9V7OERkUDz47OfMZjOaNWsGs9ms91C8RmIzILNbYjMgs7uw5uzsbMyePRv16tXDCy+8gPvuuw/Hjh3Da6+9hujoaGiaho4dO/rdPyTKaj3//PPPGDZsGIYMGYJ33nnH61cmL4rE7ZvIF0jc9yQ2AzK7JTYDMrsLa87KysKsWbNQu3ZtvP7663j00Udx/PhxTJs2DeHh4QgMDETbtm05Z/z/1q1bhzFjxuChhx7CtGnTPPrYniBx+yYyKh589nOapjkOvkghsRmQ2S2xGZDZ7arZYrFg8eLFSEhIwJNPPom+ffvijz/+wOzZs/Nd+bpjx47YuXMncnNzvT30EiuL9Xzo0CEMGDAA7dq1wyeffOKTk3WJ2zeRL5C470lsBmR2S2wGZHa7as7JycG8efNQr149TJkyBffccw+OHj2KWbNmoVKlSk73t39gwZ/OI1wW63nXrl2466670L9/f8ybN88ntyGJ2zeRUfHgs5+zWCzYsmULLBaL3kPxGonNgMxuic2AzO68zTabDf/973/RtGlTjB49Gm3atMGBAwewaNEixMfHu7x/x44dce3aNezZs8er4y4NT6/nU6dOoW/fvqhRowZWrVqF4OBgjzyup0ncvol8gcR9T2IzILNbYjMgsztvs9VqxaeffooGDRpg3Lhx6NmzJxITEzFv3jxUr17d5f07duyI8+fP49ixY14eecl5ej0fPXoUt912G5o2bYply5YhICDAI4/raRK3byKj4sFnA7BarXoPweskNgMyuyU2AzK7rVYrLl26hG7duuHuu+9G7dq1sXv3bqxYsQINGzYs9L4tW7ZEUFCQ3/0ZpafW8+XLl9GvXz9omoZvv/0WkZGRHnncsiJx+ybyBRL3PYnNgMxuic2AzG6r1YqUlBS0a9cOI0eORIsWLbB//3588sknqFOnTqH3bd++PQCInTOePXsWffr0QXR0NL7++muEhIR45HHLisTtmzzHBsCqNK992fQO9mE8+ExERD7h8uXL6NatG44cOYIff/wR33zzDW6++Wa37hsUFIQ2bdr43T8kPOH69esYNGgQTp8+jXXr1hX4SR8iIiIiIzh//jy6dOmCs2fPYvv27fjqq6/QuHFjt+4bFRWFxo0bi5wzXrlyBf3798e1a9ewbt06VKxYUe8hEZEQvvn3FUREJMrevXuxcOFCWCwWbNu2DfXq1Sv2Y3Ts2BGffPIJlFJizg1ntVoxYsQI7Ny5Exs2bCjyE+JERERE/uyXX37BokWLEB4ejrVr16JGjRrFfoyOHTti69atZTA635WTk4O77roLR48exebNmws8lR0RUVngJ5/9nNlsRps2bXzyolJlRWIzILNbYjMgr/vHH39E9+7dcfHiRWzZsqVEB56Bv/8hkZKSgqSkJM8OsIyUdj0rpTBx4kR89dVXWLZsGTp06ODhEZYNads3ka+QuO9JbAZkdktsBuR1r1mzBr169UJOTg42btxYogPPwN9zxkOHDuHSpUseHmHZKO16ttlsGDNmDDZu3IhVq1ahefPmHh5h2ZC2fRMZGQ8+G0BQUJDeQ/A6ic2AzG6JzYCc7mXLlqFv377o0KEDvvnmG8TExJT4sWrVqgXg7wvv+YvSrOfXX38ds2fPxrx58zBo0CAPjqrsSdm+iXyNxH1PYjMgs1tiMyCn+9///jcGDx6M/v37Y9WqVaW6voV9znjmzBkPja7slWY9T548GZ999hk++eQTdO/e3YOjKntStm8qGzaYvP5FrvEn4+esViu2bt0q6kT8EpsBmd0SmwE53W+//TaGDRuGYcOGYeXKldizZ0+pmg8ePAgAbp/zT2+lWc8ff/wxJk+ejKlTp+KRRx4pg9GVHSnbN5GvkbjvSWwGZHZLbAZkdCulMG3aNDzyyCMYO3YsPv/8c/z666+lnjMGBATgpptu8uBIy05p1vN7772HN954A++++y6GDh1aBqMrOxK2byIpePCZiIi8ymazYdKkSZg0aRL++c9/YvHixQgMDCz14+7btw81atRAdHS0B0bpu7799luMGTMGDz/8MKZOnar3cIiIiIjKhMViwaOPPorp06fj1VdfxQcffOCRUzDs27cPDRs2NPynapcvX46nnnoKzz77LJ588km9h0NEgvGCg0RE5FXPPPMM3n33Xbz//vuYMGGCxx537969fnMOu5L69ddfcdddd6F///6YO3eumAsrEhERkTwPP/wwPv30UyxevBijRo3y2ONKmDNu3LgRI0eOxPDhw/Haa6/pPRwiEo6ffCYiIq+5cOEC5syZg+nTp3v0wDNg/H9I5Obm4oEHHkDDhg2xbNkyBATw98dERERkTElJSfj444/x7rvvevTAs9Vqxf79+w09Z8zKysKoUaPQoUMHLFy4ECYTD/uQTFZl8voXucZ/ufo5s9mMTp06iboCrMRmQGa3xGbA2N0LFy6EpmkYO3as0/LS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Evc9iZkBmbklZgZcVzPec889qFevXom1URQSx1piZkBubiI9MihHLnCjU7xzORFJlJ6ejkqVKmHixIl47bXX3N0donz4+UyehtskEUn077//onLlynj//fcxevRod3eHKB9+PpM9udvFsK194FOmlMvazUzLxry2K7g92sEznzXObDYjPj4eZrPZ3V1xGYmZAZm5JWYGSj73999/j7S0NAwYMKBE1l8cEsdaYmZAbm4id5O470nMDMjMLTEzUPK5ly1bBqUUHn300RJZf3FIHGuJmQG5uYn0iAefNU4phcTERIfu0KoXEjMDMnNLzAyUfO5FixahTZs2qF69eomsvzgkjrXEzIDc3ETuJnHfk5gZkJlbYmbANTVjt27dEBoaWiLrLw6JYy0xMyA3N5Eeebm7A0RE5DoXLlzA+vXrMW/ePHd3hYiIiIg81PHjx7F7925899137u4KERFpHA8+4+b1YLQqJycH6enpSE1NhZeXjOGUmBmQmVtiZqBkc3/xxRfw8vJC586dPeq9T+JYS8wMOJbbk7ZNory0vG1KfM+RmBmQmVtiZqBkc3/22WcICgpC27ZtPeq9T+JYS8wMsGakO6eUERblugs+KBe2pTVy3rns8Pb2RqVKlVCtWjV3d4WIyKXCw8Pd3QWi26pUqRK8vb3d3Q0iAKwZiUiuChUquLsLRLfFmpHI84k++Ozr64vTp08jKyvL3V0hIiKiPLy9veHr6+vubhABYM1IRETkqVgzEnk+0QefgZt/TPCNioiIiIhuhzUjEREREVHRiT/4TERERERERERERPphhgFmGFzaHtnHq2ETERERERERERERkdPx4DMREREREREREREROR0PPhMRERERERERERGR0/Gaz0RERERERERERKQbFgVYlOuuw2xRLmtKc3jmMxERERERERERERE5HQ8+l6CtW7eie/fuqFy5MgwGA77//nub51euXInY2FiUK1cOBoMBBw8ezLeO+fPno3379ggMDITBYMDVq1cLbXfy5MkwGAw2jzp16tjMEx8fj1atWqFq1ap48803bZ6LjIzMt7zBYMA777xT1JfAxp2+HpcvX8bo0aMRHR0NPz8/hIeHY8yYMUhJSbGZb/Xq1ahduzaio6OxZs0a6/QzZ87YzWUwGLBr1y5NZLvVE088kS9Lly5dbObZuXMnGjdujMjISHz++ec2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ERERERE5Ha/5TERERERERERERLqhYHDpdZgVr/lcIJ75TEREREREREREREROx4PPREREREREREREROR0PPhMRERERERERERERE7Haz4TERERERERERGRbliUARbluuswu7ItreGZz0RERERERERERETkdDz4TB5tz549GDVqFOrXr4/SpUsjPDwcffv2xZ9//plv3mPHjqFLly4oU6YMQkJC8Pjjj+Off/6xmef48eN47rnn0LhxYwQEBCAsLAwPPPAA9u7dm2998fHxGD9+PFq2bAlfX18YDAacOXOmyBk+//xz1K1bF76+vqhVqxY+/vjjQpfp1KkTDAYDRo0a5XA7FosF7733HqKiouDr64uYmBh8/fXX+eb79NNP0a5dO1SsWBE+Pj6IiorC4MGDbbK1b98eBoOh0MfkyZOty+zYsQOtW7eGv78/KlWqhDFjxiAtLc2m7c2bNxe4rl27dhWa8dy5c5gyZQqaNWuG4OBglC9fHu3bt8f69evtzr9u3Tprn4KDg/HQQw85PIZnzpwpsK/ffPNNvvlnzZqFunXrwsfHB1WqVMGzzz6L9PR0h9pKS0vDuHHjULVqVfj4+KBu3bqYO3fuHWVy9zoBYP369bj//vsRFBSEgIAANGnSBMuWLSvWOjds2IAnn3wStWvXhr+/P6pXr46nnnoKiYmJ+ea1WCz45JNP0LhxY5QpUwYVK1ZE165dsWPHjgL7SkRE2saaUV81Y679+/ejR48eCAkJgb+/Pxo0aICZM2cWmvH69esYMmQIGjRogKCgIJQpUwaNGjXCRx99hOzs7HzzX716FU8//TRCQ0NRunRp3Hfffdi/f3/hL+b/5+hrCji2/d3O6tWrcffdd8PX1xfh4eGYNGkScnJy7iiTu9a5detW9OjRA9WqVYOvry8qVaqELl264Ndff7W7Tke2nSeeeOK22+KFCxcAABkZGZg9ezZiY2MRFhaGgIAA3HXXXZg7dy7MZrPd9omIqHh42Q3yaO+++y5+/fVXPPzww4iJiUFSUhJmzZqFu+++G7t27UKDBg0AAOfPn0fbtm0RFBSEt99+G2lpaZg+fTp+//137N69G97e3gCAzz77DJ9//jn69OmDESNGICUlBfPmzUOLFi3w888/o2PHjta2d+7ciZkzZ6JevXqoW7cuDh48WOT+z5s3D8888wz69OmDZ599Ftu2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Av7++2/cc889+eZt1qwZDhw4UOg6k5KS8h3UvFO57d7aryZNmsBoNObr19mzZ/HOO+/g3XffLfIBsgMHDqB06dI2P28EYL28gL3XIDk5GX///Tf27t1rvVxFhw4ditQuAPz+++/IycnJl9Pb2xuNGze22/bgwYMRGBgIX19f3HfffXavn5h7DeXdu3cX2oekpCT4+/vD398fAKzFr73X0d/fHxcvXkRSUpJ12osvvoi6detarwGX15QpU1CmTBn4+vqiadOm+OWXX2yeL6it3L7s27fvtn3PzMyEyWTK9wfzrcsXJZM71wncvNZznTp18OOPP6Jq1aoICAhAuXLl8Oqrr9r84ViUddqTlpaGtLQ0m33Xz88PzZs3x8KFC7FkyRKcPXsWhw8fxhNPPIHg4GA8/fTTt10nERHpB2tG+21poWZcv349AgMDceHCBURHR6NMmTIIDAzE8OHDcePGDZvlb1czZmVl4d9//8W5c+ewatUqTJ8+HRERETaXeztw4ADuvvvufF9yN2vWDBkZGTbXDbdXMzr6mt7p9lfQdlK5cmVUrVrVZnlHM7l7nblSU1OtXyK89NJLOHLkiM02Vpy/N3JlZ2fj22+/RcuWLa1fPtxObu3r7P2ciEgyHnwmzVmyZAkuXLiARx55BACsNxwLCwvLN29YWBguX75sc8bCrbZt24adO3da1+csiYmJMJlMqFChgs10b29vlCtXDhcvXrSZPmHCBNx11135zgJ1tK2KFSvCYDDYTM99TW5tCwCqVKmCihUromnTptixYwdmzpyJTp06FavtvG3d2n7etr29vdGnTx989NFHiIuLw5tvvonff/8dbdq0cegPPntOnjyJlStXok+fPjCZTACAihUromzZsvluVpKcnIyjR48CgN0DzXkZjUbExsZi2rRpWL16NWbMmIG///4bXbt2tTkDKTo6GgDytZV7Vm9h7URHR8NsNue74eKtyxclkzvXCQAnTpzAuXPnMHjwYDz55JP47rvv0LVrV7z55pt4+eWXi5y9IB9++CGysrLy7buLFy9GdHQ0BgwYgIiICDRq1Aj79+/Hr7/+iurVq992nUREpB+sGe23pYWa8cSJE8jJyUHPnj3RuXNnrFixAk8++SQ++eQTm3t8FGblypUIDQ1FeHg4HnzwQVStWhX/+9//bM7ITUxMLLBPgP3X5NZcjrym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3reqVasW2rRpg0qVKuHo0aNITExEx44dHVqvyWRC48aN0apVK5QpUwbr168HALvLO5rJXets0qQJgPzXbM69Ht+tr52j/UxOTkZsbCwyMzOxdu1au9f9u3TpEgDYPYs+Ozvb5iecRESkL6wZ9VMzFrWWcFTuwcy8/W/cuDH2799vc1Nk4OZr4u/vX+iJBI6+pkXd/uy1A+TfTi5evIjz58/bLO9oJnevsyDXr1+HUsp6qbbi/r2xZMkSlClTJt9JCXnFxcXhqaeewoMPPojZs2cX2jciIioGReTBcnJyVI8ePZSXl5f64YcfCpzvmWeeUX5+furs2bPWaevXr1cA1Ny5c23mHTFihAKg5s2b53A/pk2bpgCo06dPO7xMRkaGCgkJUf/5z39spg8YMED5+/ur5ORkpZRSx44dU6tWrcr3AKC6deumVq1apS5evHjbts6dO6dKlSqlRo4caZ1msVhUmzZtVJUqVVROTo5SSqns7Gx1+fLlfMv/9ttvymQyqccff9zu+pcvX64AqE2bNtl9vkuXLiosLEylpqZap3322WcKgPrpp5+s0/7+++98yx48eFCVKlVK9ejRw2b6P//8o44dO6bS09Ntpr/33nsKgHrppZfs9uV23nnnHQVAfffddzbTL168qI4dO6aysrJu29fz58+r4OBgFRMTc9t2zGazeuCBB5S/v7/666+/rNOzsrLUsWPHCh3Pv//+W4WHh6uYmBhlNpuLlcmd68zdfvOOkdlsVq1bt1YhISHqxo0bRV5nWlqaatasmQoICFB79+4tcPm9e/cqAGrQoEE20/ft26eMRqN65plnbpuJiIi0iTWjvmrG/fv3KwCqX79+Nss/9thjysvLS124cME6zV7N+M8//yiLxZKv/VGjRikAasOGDdZp33zzjQKgli9fbrN82bJl1SOPPGKzvL2a0dHXVCnHt7+CasY6deqoRo0a2azzlVdeUQaDQR09erRYmdy5zkuXLqlbXblyRVWrVk1Vq1bNZrqj206uv//+W3l5eRW4rSql1JYtW5Svr6+67777blufEpG2pKSkKACq+y9D1IO/DnfZo/svQxQAlZKS4u6XwOPwKvrk0SZMmIDVq1eje/fuuHz5MhYvXmzz/IABAwAAL730EpYvX4777rsPY8eORVpaGqZNm4aGDRva3BH7ww8/xJw5c3DvvffC398/3/p69+6N0qVLA7h5RkTutWdzf6o/a9YslC1bFmXLlsWoUaNu23c/Pz+88cYbGDlyJB5++GF07twZ27Ztw+LFi/HWW28hJCQEAFCnTh3UqVPH7jqioqLQq1evQl+nqlWrYty4cZg2bRqys7PRtGlTfP/999i2bRuWLFlivdZhWloaqlWrhkceeQT169dH6dKl8fvvv2PBggUICgqyuat0Ubz11lto2bIl2rVrh6effhrnz5/H+++/j9jYWHTp0sU63yOPPAI/Pz+0bNkSFSpUwNGjRzF//nz4+/vb3DAQuPlaT5kyBZs2bbLeQGbVqlV47rnnrJdQuHX8OnXqZP155uLFi7FixQq0bdvWejbtt99+i6eeegp9+vSxWe7FF1/El19+idOnT1tvIPPcc88hISEBHTp0QOXKlXHmzBnMmzcP6enp+Oijj2yWHzt2LG7cuIHGjRsjOzsbS5cuxe7du/Hll18iPDzcOt+FCxdQt25dDBo0CAsXLrROb9euHe69917UrFkTSUlJmD9/PtLS0rBmzRoYjf/3A5WiZHLnOnv27IkOHTpg6tSp+Pfff9GoUSN8//332L59O+bNm2fzk1JH19m/f3/s3r0bTz75JI4dO2ZzdlGZMmWs+0mTJk3QqVMnfPnll0hNTUVsbCwSExPx8ccfw8/PD+PGjQMREekPa0Z91Yx33XUXnnzySXzxxRfIyclBu3btsHnzZixfvhwvvviizWUW7NWMixcvxieffIJevXqhevXquHbtGtauXYt169ahe/fuNpdse+ihh9CiRQsMHjwYR48eRfny5TFnzhyYzWZMmTLFpv/2akZHX1PA8e2voJpx2rRp6NGjB2JjY/Hoo4/iyJEjmDVrFp566inUrVu3WJncuc6uXbuiatWqaN68OSpUqICzZ89iwYIFuHjxovVSMUXddnItW7YMOTk5BV5y46+//kKPHj1gMBjw0EMPYfny5TbPx8TEICYmxu6yRERURO4++k10O+3atVMACnzkdeTIERUbG6v8/f1V2bJlVf/+/VVSUpLNPIMGDbrt+vKepXL69OkC54uIiHA4w/z581V0dLTy9vZWNWrUUDNmzLB7JsatANicQVEYs9ms3n77bRUREaG8vb1V/fr11eLFi23myczMVGPHjlUxMTEqMDBQlSpVSkVERKghQ4bc9gydws5iUUqpbdu2qZYtWypfX18VGhqqRo4caXNmglJKffTRR6pZs2YqJCREeXl5qbCwMDVgwAB14sSJfOubNGlSvjZzpxX0yDvvb7/9ptq2bauCg4OVr6+vatSokfrkk0/svva520Xe12Dp0qWqbdu2KjQ0VHl5eany5cur3r17q3379uVbfsGCBapRo0aqdOnSKiAgQHXo0EFt3Lgx33y529StZ+WOHz9eVa9eXfn4+KjQ0FDVr18/lZCQkG/5omRy5zqVUuratWtq7NixqlKlSsrb21s1bNgw3/ZYlHVGREQ4vD9mZGSo119/XdWrV0/5+fmpoKAg9Z///EcdOHDAbl+JiEj7WDPqq2ZU6ubZv5MnT1YRERGqVKlSqmbNmmrGjBn55rNXM+7Zs0c9/PDDKjw8XPn4+KjSpUuru+++W33wwQcqOzs73zouX76shgwZosqVK6f8/f1Vu3bt1J49e/LNZ69mVMqx1zSXI9tfQTWjUjd/Yda4cWPl4+Ojqlatql555RWbM7GLmsmd65w1a5Zq3bq1Kl++vPLy8lKhoaGqe/fuauvWrXbX6ei2o5RSLVq0UBUqVLA5+zqvTZs23XYfnzRpkt3liMjz8cxnz2NQ6pY7IxARERERERERERFpTGpqKoKCgtD9lyEoVdrbZe1mp2fhf7GfIyUlBYGBgS5rVwt42Q0iIiIiIiIiIiLSDYsywKIMLm2P7DMWPgsRERERERERERERUdHw4DMREREREREREREROR0PPhMRERERERERERGR0/Gaz0RERERERERERKQbvOaz5+CZz0RERERERERERETkdDz4TEREREREREREREROx4PPREREREREREREROR0PPhcgrZu3Yru3bujcuXKMBgM+P77722eX7lyJWJjY1GuXDkYDAYcPHgw3zrmz5+P9u3bIzAwEAaDAVevXi203cmTJ8NgMNg86tSpYzNPfHw8WrVqhapVq+LNN9+0eS4yMjLf8gaDAe+8805RXwIbd/p6XL58GaNHj0Z0dDT8/PwQHh6OMWPGICUlxWa+1atXo3bt2oiOjsaaNWus08+cOWM3l8FgwK5duzSR7VZPPPFEvixdunSxmWfnzp1o3LgxIiMj8fnnn9s8V9Dr8c033xT7tQCcs+0PGzYMNWrUgJ+fH0JDQ9GzZ08cP37cZh4tjrWj2W6l57HOpZRC165d7a7H1WPtqly30vM4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bhz69u2L48ePY8qUKQWuB9K2bVts375dV+cRdsd6/vXXX/Hwww/j/vvvx0cffeSV25DE7ZtcTNXgRg55379KySkWiwVbt26FxWLReigeI7EZkNktsRmQ2Z232WazYenSpWjYsCEGDRqEdu3a4eDBg/jkk09QvXp1h9/ftm1bXL9+HXv27PHswEvB1ev51KlT6NGjB2rWrInly5d77YV0JG7fRN5A4mtPYjMgs1tiMyCzO2+zxWLB559/jnr16uHFF1/Efffdh//973+YOXMmIiMjHX5/27ZtceHCBRw9etTDIy85V6/nxMRE3Hfffbj99tuxZMkSrz2yWOL2TWRU3PlsAFarVesheJzEZkBmt8RmQGa31WrFxYsX0a5dO/Tp0wcNGjTAnj17sHTpUtSrV++W39usWTMEBATo7tQbrlrPly9fRrdu3eDr64sffvgBISEhLlmuu0jcvom8gcTXnsRmQGa3xGZAZrfVasVff/2F5s2bY8CAAWjVqhUOHDiAzz//HNHR0bf83tatW0NRFLFzxuTkZHTv3h2VKlXC6tWrERgY6JLluovE7ZvIiLjzmYiIvEJKSgo6duyI48ePY8uWLVi9ejWaNGlSrO/18/NDixYtdPcPCVfIzMzEAw88gPPnz+Onn35CVFSU1kMiIiIicpvz58+jQ4cOSElJwa5du/DVV1+hfv36xfrecuXKoVGjRiLnjGlpaejRowdycnKwdu3aAqckISJyF15wkIiINPf777/js88+g6Io2L59O2rVquX0Mtq2bYv58+dDVVUx54azWq3o06cP/vjjD2zYsKHII8SJiIiI9OyXX37BvHnzEB4eju+//x6VK1d2ehlt27bFli1b3DA675WVlYV///vfSEpKwrZt21CtWjWth0Tkdop64+bJ5yPHeOSzzpnNZrRo0cJrz9PkDhKbAZndEpsBed0///wzOnfujNTUVGzZsqVEO56BG/+QOHv2LE6cOOHiEbpHadezqqoYNmwYvvvuO3z11Vdo1aqVi0foHtK2byJvIfG1J7EZkNktsRmQ1718+XJ069YNVqsVGzduLNGOZ+DGnPHQoUO4fPmyi0foHqVdzzabDU899RS2bduG1atXo3Hjxi4eoXtI276JjIw7nw3AWy8q5U4SmwGZ3RKbATndixcvxn333YcOHTpgzZo1qFixYomXlXsEx5kzZ1w1PLcrzXqePHky5syZg48//hj33XefC0flflK2byJvI/G1J7EZkNktsRmQ0x0XF4f//Oc/6NmzJ1asWIHQ0NASLyt3zpicnOyq4bldadbzqFGjsGzZMnzxxRfo0KGDC0flflK2byKj485nnbNardi2bZuoE/FLbAZkdktsBmR0q6qKqVOn4oknnsATTzyBb775Bn/88Uepmg8cOAAAaNSokauG6ValWc+fffYZ3nzzTUycOBFPP/20G0bnPhK2byJvJPG1J7EZkNktsRmQ0a2qKsaMGYOhQ4di+PDhWLRoEXbt2lXqOaOvry/q1q3rwpG6T2nW87Rp0/DBBx9g5syZeOihh9wwOveRsH0TScFzPhMRkUfZbDa8+OKLmDFjBsaMGYOJEye6ZFKZkJCAatWqISwszAWj9F5r1qzBs88+i8GDB2PMmDFaD4eIiIjILXJycvDss89i3rx5eO+99zBy5EiXzRkbNGgAPz8/F4zSey1ZsgQvv/wyRo8ejaFDh2o9HCLPU/++efL5yCHufCYiIo8aMWIEPvroI8TFxWHw4MEuW25CQgKaNGnisuV5o507d+KRRx7BAw88gJkzZ4q5sCIRERHJM2DAACxduhSLFy/G448/7rLlSpgzbtiwAU899RSeeuopTJo0SevhEJFwPO0GERF5zPnz5zF37lxMmjTJpTueAeP/QyInJwdPPfUUbrvtNnzxxRe8+AoREREZ1vHjx7F48WLMmDHDpTuerVYr9u3bZ+g5Y0ZGBp566il06NABH3/8MQ9WICLN8chnnTObzWjXrp2onRASmwGZ3RKbAWN3f/bZZzCZTHjuuefy3V/a5vPnz+Ps2bO6+oeEs82zZs1CYmIifv/9dwQGBrp5dO5j5O2byJtJfO1JbAZkdktsBozdPWfOHJQrVw5PPvlkvvtL23z06FFkZmYaes747rvv4ty5c9i4cSN8fX3dPDr3MfL2TSSN2498njJlClq0aIHg4GBERETgwQcfRGJiov3rly9fxvPPP4+YmBgEBgaievXqeOGFF5CamppvOatXr0a9evUQExODNWvW5PvaihUr0Lp1a4SGhiI4OBiNGjXCiBEj3J3mNbKysrQegsdJbAZkdktsBozZbbVaMWfOHDz22GMIDw8v8PXSNCckJACArv4hARS/+cKFCxg/fjwGDRqku0ZHXLF9c35hPFyn7mfE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9gDUwYMHq338gwcPVnr7BQsW+EVb+XVfXFys0tLSVExMjAoMDFRJSUnqvvvuU7m5uW4vd2WPOW3aNF2fjyNHjqjBgwer2NhYFRgYqBo3bqxuu+02tXfvXrce35fXtbttUtZ1Zcu6ePFitx7/Uq1rb3VJWc/Z2dmqd+/eKjo6WgUHB6vLLrtMPfnkkyo/P9+tx7+U2zSRL+CY0bPPB8eMcj5ffHXMyPGiZ5+PypZV7/GiN9ukrGuOGckT8vPzFQDV6eaXVdfbZnntp9PNLysAbr9eJdGUUgpEREREREREREREfqygoAARERHodPPLCAj03tHulrJz2Prl35Gfn39RfwFmRCa9F4CIiIiIiIiIiIiIjIc7n4mIiIiIiIiIiIjI43jBQSIiIiIiIiIiIjIMTZ3/8ebjkWs88pmIiIiIiIiIiIiIPI47n4mIiIiIiIiIiIjI47jzmYiIiIiIiIiIiIg8jud8JiIiIiIiIiIiIuNQ//fjzccjl3jkMxERERERERERERF5HHc+ExEREREREREREZHHceczEREREREREREREXkcz/lMREREREREREREhqHZzv948/HINR75TEREREREREREREQex53PRERERERERERERORx3PlMRERERERERERERB7Hcz4TERERERERERGRcaj/+/Hm45FLPPKZiIiIiIiIiIiIiDyOO5+JiIiIiIiIiIiIyOO485mIiIiIiIiIiIiIPI47n8mnbd68GePHj0fbtm1Rt25dJCYm4pZbbsEff/xRYd49e/Zg0KBBqFevHqKjo3HnnXfixIkTTvPs3bsXTz31FDp27IiwsDDEx8fj2muvxZYtWyrcX0ZGBh5//HF0794dISEh0DQNWVlZNW746KOP0Lp1a4SEhKBFixaYPXt2tbcZMGAANE3D+PHj3X4cm82GGTNmoGnTpggJCUFqaioWLFhQYb4PPvgAffr0QcOGDREcHIymTZtizJgxTm19+/aFpmnV/rz44ouO26xfvx49e/ZEaGgo4uLi8Oijj6KwsLDC4+/btw+33norGjdujNDQULRq1QpTp05FcXFxtY2HDh3ClClT0KVLF0RFRaFBgwbo27cvfvrpJ5fzL1++3LFMUVFRuOmmm9xeh1lZWZV2f/755xXmnzNnDlq3bo3g4GA0atQIEydORFFRkVuPVVhYiAkTJqBx48YIDg5G69at8c4771xUk973CQA//fQTrrnmGkRERCAsLAydOnXCwoULa3WfK1aswD333IOWLVsiNDQUzZo1w7333oucnJwK89psNrz77rvo2LEj6tWrh4YNG2Lw4MFYv359pctKRET+jWNG/xgz/vjjjxg7dizatWsHs9mM5ORkl8tYk+e/Mq+++iq6deuGmJgYx3M6YcKECuu6Js9JVZYuXYorrrgCISEhSExMxOTJk2GxWCrMd+bMGdx///2IiYlB3bp1cfXVV+PXX391+3Hcef3WtEmv+zx69CjuuOMOpKSkICwsDJGRkejSpQs+/vhjKFXx5KlHjhzBLbfcgsjISISHh2PYsGE4cOCA0zzz5s2r8rX42WefOeb9+uuvMXLkSDRr1gyhoaFISUnBE088gTNnzrhsIiL/oinv/5BrvOAg+bTXXnsNv/zyC26++WakpqYiNzcXc+bMwRVXXIENGzagXbt2AIDDhw+jd+/eiIiIwKuvvorCwkLMmjULO3fuxKZNmxAUFAQA+PDDD/HRRx9hxIgRePjhh5Gfn4/33nsP3bp1w/fff4/+/fs7Hjs9PR1vvvkm2rRpg9atW2P79u01Xv733nsPDz74IEaMGIGJEydi7dq1ePTRR1FcXIxJkya5vM3XX3+N9PT0Gj/Wc889h+nTp+O+++5D586dsWTJEtx2223QNA233nqrY75t27ahadOmuP766xEVFYWDBw/igw8+wLfffovffvsNCQkJeO6553Dvvfc6brN582a8+eabePbZZ9G6dWvH9NTUVADA9u3b0a9fP7Ru3Rr/+Mc/cPjwYcyaNQv79u3DsmXLHPMfOnQIXbp0QUREBMaPH4/o6Gikp6dj8uTJ2Lp1K5YsWVJl45IlS/Daa69h+PDhGD16NCwWCz755BMMGDAA//73vzFmzBjHvN9++y2GDRuGK664AtOnT0dBQQH+9a9/oWfPnti2bRtiYmLcel5HjRqFIUOGOE276qqrnP570qRJmDFjBm666SY89thj2L17N2bPno3ff/8dP/zwQ5X3b7VaMXDgQGzZsgXjxo1DixYt8MMPP+Dhhx9GXl4enn322Ro36X2fADB37lyMHTsWAwYMwKuvvgqz2YyMjAwcOnSoVu2TJk3C6dOncfPNN6NFixY4cOAA5syZg2+//Rbbt29HXFycY94nn3wS//jHP3DHHXfg4YcfxpkzZ/Dee++hT58++OWXX9ClS5cq1wkREfkfjhndp+eYcf78+Vi4cCGuuOIKJCQkVLqMNXn+K7N161Z07NgRt956K8LCwrBnzx588MEH+O9//4vt27ejbt26NX5OKrNs2TIMHz4cffv2xezZs7Fz5068/PLLOH78uNOX6jabDddeey1+++03PPnkk2jQoAHefvtt9O3bF1u3bkWLFi2qfBx3X781adLzPk+ePInDhw/jpptuQmJiIsrKyrB8+XLcfffdyMjIwKuvvuq4z8LCQlx99dXIz8/Hs88+i8DAQLzxxhvo06cPtm/fjvr16wMAevfujf/3//5fhefujTfewG+//YZ+/fo5pt1///1ISEjAHXfcgcTEROzcuRNz5szBd999h19//RV16tSpdt0TEZEbFJEP++WXX1RJSYnTtD/++EMFBwer22+/3THtoYceUnXq1FF//vmnY9ry5csVAPXee+85pm3ZskWdPXvW6f5OnjypYmJiVI8ePZymnzp1ShUUFCillJo5c6YCoA4ePOj2shcXF6v69eura6+91mn67bffrurWratOnz5d4TZ//fWXSk5OVlOnTlUA1Lhx49x6rMOHD6vAwECn+W02m+rVq5dq3LixslgsVd5+y5YtCoCaNm2ay99/+eWXCoBauXKly98PHjxYxcfHq/z8fMe0Dz74QAFQP/zwg2PaK6+8ogCoXbt2Od3+rrvuUgBcPifl7dq1S504ccJp2rlz51SrVq1U48aNnaa3adNGXXbZZU6vn+3btyuTyaQmTpxY5eMopdTBgwcVADVz5swq5zt69KgKCAhQd955p9P02bNnKwBq6dKlVd7+iy++UADURx995DR9xIgRKiQkRB07dqzGTXrf58GDB1WdOnXUo48+6rH21atXK6vV6jTf6tWrFQD13HPPOaaVlZWpOnXqqJtuuslp3gMHDigA1S4TERH5J44Z/WPMeOTIEVVaWqqUUuraa69VSUlJlT6Ou89/TSxatEgBUAsWLHBMu9jnRKnz46kOHTqosrIyx7TnnntOaZqm9uzZ45i2cOFCBUB9+eWXjmnHjx9XkZGRatSoUdU+jruv35o06XmflbnuuutU3bp1ne7ztddeUwDUpk2bHNP27NmjzGazeuaZZ6q8v+LiYhUWFqYGDBjgNN3V6/Tjjz9WANQHH3xQ7XISkW/Kz89XAFSX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91YxMTEqICBANWjQQN1www1q69atFW4/d+5c1aFDB1W3bl0VFham+vXrp37++ecK89lfUxcelfv444+rZs2aqeDgYBUTE6Nuu+02lZmZ6fK5c7dJz/tUSqmzZ8+qxx57TMXFxamgoCDVvn37Cq/HmtxnUlKS29tjcXGxmjp1qmrTpo2qU6eOioiIUNddd53atm2by2UlIiL/xzGjf4wZ586dW+lzVX58VJPnf+XKlQqAmjx5smPaiRMn1P33369atWql6tatq4KCglSLFi3UhAkTnI6QrslzUn75586dW+F3ixcvVh07dlTBwcGqcePG6u9//7vTX9XZnT59Wo0dO1bVr19fhYaGqj59+jgdzWuXlJTk8vXjzuu3Jk163uePP/6orrvuOpWQkKACAwNVWFiY6tGjh5o7d67L1/6hQ4fUTTfdpMLDw1W9evXUdddd53R0dHlPP/20AqB27Njh8vdKqSpfY3369Kn0dkTk23jks+/RlLrgigFEREREREREREREfqagoAARERHoet1LCAgM8drjWsrOYeO3zyM/Px/h4eFee1x/YKp+FiIiIiIiIiIiIiKimuHOZyIiIiIiIiIiIiLyOO58JiIiIiIiIiIiIiKPC9B7AYiIiIiIiIiIiIg8RVPnf7z5eOQaj3wmIiIiIiIiIiIiIo/jzmciIiIiIiIiIiIi8jjufCYiIiIiIiIiIiIij+M5n4mIiIiIiIiIiMg4lDr/483HI5d45PMltGbNGgwdOhQJCQnQNA3ffPON0++//vprpKWloX79+tA0Ddu3b69wH++//z769u2L8PBwaJqGM2fOVPu4L774IjRNc/pp1aqV0zwZGRno0aMHGjdujJdfftnpd8nJyRVur2kapk+fXtOnwMnFPh+nT5/GI488gpSUFNSpUweJiYl49NFHkZ+f7zTf0qVL0bJlS6SkpODbb791TM/KynLZpWkaNmzY4BdtF7r77rsrtAwaNMhpnvT0dHTs2BHJycn46KOPnH5X2fPx+eef1/q5ADzz2n/ggQfQvHlz1KlTBzExMRg2bBj27t3rNI8/rmt32y5k5HVtp5TC4MGDXd6Pt9e1t7ouZOT13Ldv3wrL9eCDDzrNo8c2TeQLOGZ0xjEjx4x2/jpm5HjRmVHHi95su5CR1zXHjETGw53Pl1BRURE6dOiAt956q9Lf9+zZE6+99lql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aprml2w2GzIyMhATEwOTScZZVCQ2AzK7JTYDMrvZLKMZ8Fw3xyO+jevH90h8z5HYDMjsltgMyOxms4xmgGNG8gClzv948/HIJY++c5WUlACA058bmEwmBAcHY926dVXetrCwEElJSWjSpAmGDRuG33//3en3Tz/9NB555BEEBwfj119/xV133QUAjjeiRYsWwWq1ejKHiIiI/BDHI76N64eIiIh8AcckRN5R4yOfq9KqVSskJibimWeewXvvvYe6devijTfewOHDh5GTk1Pp7VJSUvDvf/8bqampyM/Px6xZs9C9e3f8/vvvaNy4MQDgyiuvxJEjR3Dy5Emnb5caNWqEN998E0899RSmTJmCK6+8EldffTVuv/12NGvWzK3ltlgssFgsAM5/e2U2m2G1WqHKfWthMplgMpncnm42m6FpmuN+y08HUOFNprLpAQEBUEo5Tbcvo81mg8Vicfxv+enl/zTF35pcLXv56fZm+30boan89KqW3b6ujdRU1XT7urbPY4Sm8stY2XpSSjmtayM0uVr28tPLv5cZpak8V032/3/huvbnJnfWk6vPrQuX8WL/vNJfxyNS+PP64ZjRt5o4ZuSYkWNGjhmN0FQex4w1GzOW//+14c9jEiJ/oqmL2Fo1TcPixYsxfPhwx7StW7di7Nix+O2332A2m9G/f3+YTCYopbBs2TK37resrAytW7fGqFGj8NJLL7l1m7Nnz2LVqlXYsGED/vOf/2Dfvn1YunQpBgwYUOltCgoKEBERgW+//RZ169YFAMTHxyMlJQUZGRlObzbJyclITk7Gb7/9hry8PMf0lJQUxMfHY9OmTSguLnZMT01NRXR0NNauXev0Jtu5c2eX36L17NkTJSUl2Lx5s2Oa2WxGr169cPr0aezYscMxPTQ0FF26dEFOTg727NmD48ePIzY2FvXr10eHDh2QlZWFrKwsx/z+1pSRkeGYHhUVVaHJZrOhtLQUAwYMwP79+w3RBFS/nrZt24aMjAzExsbCZDIZoqm69WSz2XD8+HH069cPMTExhmiyq2o9BQQEYPHixY51bYSm6taTfV0nJCSgd+/ehmiyq2w91alTByEhIahfvz72799viCZ31tOBAwccn1uNGjWqtKlp06bIz89HeHg4quPv4xGjM8L64ZjRN5s4ZuSYkWNGjhmN0GTHMWPNx4xNmzZFcnIyx4zk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82U3HqRt27YPfc6963Fzc8POnTvLUkYxjz32GNatW2f167XObDYjJSUFNWvWtOhrynogYmZAzNwiZgbsl3vdunXw9vZGly5dbLYNS4k41iJmBuTLzZ5E3Tg+6iPie46ImQExc4uYGbBf7sjISAQGBqJNmzY224alRBxrETMD8uRmP0KkDuK8cxERUSGTyYT169fjtddeg4uLi9LlEBEREZEK3blzB5s3b8abb74p1MQnERHJh58eREQC2rdvH65cuYL+/fsrXQoRERERqdT333+PzMxMvPnmm0qXQkREGsXJZ40zGAzw9/d/6F1e9UTEzICYuUXMDNgnd2RkJEJDQ9G8eXObbaMsRBxrETMD4uYmUpqIx56ImQExc4uYGbBfz9iiRQvUrVvXZtsoCxHHWsTMgLi5ifTIIFlygRud4p3LiUhE2dnZeOSRRzB16lRMmTJF6XKI7sPPZ1Ib7pNEJKLr16+jevXq+OKLLxAeHq50OUT34eczkTbwzGeNM5lMSEhIgMlkUroUuxExMyBmbhEzA7bPvW3bNuTm5qJfv342Wb81RBxrETMD4uYmUpqIx56ImQExc4uYGbB97o0bN8LBwQF9+vSxyfqtIeJYi5gZEDc3kR5x8lnjJElCamqqRXdo1QsRMwNi5hYxM2D73JGRkXj++ecREBBgk/VbQ8SxFjEzIG5uIqWJeOyJmBkQM7eImQH79Ixdu3aFt7e3TdZvDRHHWsTMgLi5ifSIk89ERAK5dOkS9u7dyxsNEhEREVGpTp8+jd9++409IxERlZuT0gWoQVZWltIlWM1oNCInJwdZWVlwchJjOEXMDIiZW8TMgG1zr169Gq6urmjfvr2q3vtEHGsRMwOW5VbTvklUlJb3TRHfc0TMDIiZW8TMgG1zr1q1Cl5eXmjVqpWq3vtEHGsRMwPsGYn0RJx3rhK4uLjAz88Pjz76qNKlEBHZVc2aNZUugeiB/Pz84OLionQZRADYMxKRuHx8fJQugeiB2DMSqZ9BEvwCOnfu3EF+fr7SZRAREVERLi4uqFChgtJlEBViz0hERKQ+7BmJ1E/4yWciIiIiIiIiIiIikh9vOEhEREREREREREREsuPkMxERERERERERERHJjpPPRERERERERERERCQ7Tj4TERERERERERERkew4+UxEREREREREREREsuPkMxERERERERERERHJ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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_gridded_radar_velocity(ds, time_start=\"2021-04-02\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8237601b-d9d6-4859-b238-e9c8d90cf72b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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0tLS0NDQgDNnzlBZJLMmFothZmYGFxcXzd8lJydrymJQUBB+//vfIyUlBWFhYXjttdc0t6urq8PNN9+MtLQ0xMfH47333tO87/Tp01i6dClSU1ORlJSEXbt2ad73wQcfIDw8HElJSXjrrbemzNbc3IyKigpNWWxsbISTkxP++Mc/Ijk5GeHh4cjPz8fjjz+OxMREzJs3D+Xl5ZqPLyoqQmRkJEQiEX788UfEx8drbrd3714AgIeHB0JDQ/Hzzz/P8SsJgCNEC44dO8aFhYVx999/PzcwMMA6DjFg+/fvZx2BGKixsTHuqaee4gICAri9e/eyjkMMnEKh4CorKzmFQjHlbZRKJbdmzRrO2dmZW7VqFffqq69yra2tmvcHBgZyd999N6dSqbju7m7O39+fy8/P5xQKBZeSksJVVVVxHMdxIyMjXFxcHFdYWMj19/dziYmJXHt7O8dxnObjWltbubKyMs7T01PzvmeeeYabqmp99tln3Nq1azV/bmho4ABwe/bs4TiO47Zt28bZ2dlxhw8f5jiO41599VXutttu09z+mWee4T744AOO4zguPj6eO3HihOZz7u/v19zuhRde4H73u9/N+etJI4xEK7Kzs3H27Fm4uroiPj4eH330kd6uESGEGL/vvvsOcXFxGBwcRGlpKVauXMk6EuEBoVCI7777DidOnMCNN96I/Px8xMbGor6+XnObX/ziFxAIBHBzc8OaNWtw8OBB1NTUoKKiAnfccQcSExORkZGB4eFhVFZW4sSJE7hw4QJuuukmJCYmYvny5QCAmpoaHD58GDfddBO8vb0BAA8++OCU2VpbW+Hp6XnJ31lbW2PVqlUAgNTUVNjb2yMnJwcAkJ6ejrq6Os1tf/jhB9x6660AgGXLluGxxx7Dq6++inPnzl2yKMzLywutra2z/yL+H9q4iGiNra0tXn75Zdx77714+OGHsWPHDrz//vtISkpiHY0QYqDq6urwm9/8Br29vfj666+RnJzMOhLhoaioKERFReGBBx7AjTfeiB9++GHKo28FAgE4joOLiwtKS0uveP+///1vxMbG4sSJE1e8b+KUsfq+pmJrawupVHrJ303cgN7MzAzW1taX/FmhUAAAamtr4eTkpCmcb775JioqKnDkyBFs2rQJd955JzZv3gzg4olI2jhbnUYYidZFRETg559/xpNPPok1a9bg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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..1ddf9a2 --- /dev/null +++ b/notebooks/radar_RottnestShelf_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2268 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Rottnestshelf Velocity Hourly Averaged Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_RottnestShelf_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/028b9801-279f-427c-964b-0ffcdf310b59)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_RottnestShelf_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_radar_velocity(ds, time_start=\"2021-04-02\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1c118a5d-d910-42e2-b32b-700a73868e72", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_RottnestShelf_wave_delayed_qc.ipynb b/notebooks/radar_RottnestShelf_wave_delayed_qc.ipynb new file mode 100644 index 0000000..4dae57f --- /dev/null +++ b/notebooks/radar_RottnestShelf_wave_delayed_qc.ipynb @@ -0,0 +1,2259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Rottnestshelf Wave Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_RottnestShelf_wave_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/9c6d6a0c-4983-4cb5-b119-02c11ce6af4e)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_RottnestShelf_wave_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Timeseries at a point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_RottnestShelf_wind_delayed_qc.ipynb b/notebooks/radar_RottnestShelf_wind_delayed_qc.ipynb new file mode 100644 index 0000000..d421c94 --- /dev/null +++ b/notebooks/radar_RottnestShelf_wind_delayed_qc.ipynb @@ -0,0 +1,2259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Rottnestshelf Wind Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_RottnestShelf_wind_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/5ad9a6da-3f0b-4b2f-8212-48b386e1b98c)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_RottnestShelf_wind_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Timeseries at a point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb b/notebooks/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb new file mode 100644 index 0000000..cbe9ba4 --- /dev/null +++ b/notebooks/radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc.ipynb @@ -0,0 +1,2279 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Southaustraliagulfs Velocity Hourly Averaged Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/cb2e22b5-ebb9-460b-8cff-b446fe14ea2f)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_SouthAustraliaGulfs_velocity_hourly_averaged_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds, time_var=\"TIME\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_radar_velocity(ds, time_start=\"2021-04-02\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db505ff7-d771-4286-bc72-8c7387be8618", + "metadata": {}, + "outputs": [], + "source": [ + "plot_radar_velocity_rose(ds, time_start='2021-04-02T00:00:00', time_end='2021-04-03T00:00:00')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb b/notebooks/radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb new file mode 100644 index 0000000..e8001aa --- /dev/null +++ b/notebooks/radar_SouthAustraliaGulfs_wave_delayed_qc.ipynb @@ -0,0 +1,2259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Southaustraliagulfs Wave Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_SouthAustraliaGulfs_wave_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/19da2ce7-138f-4427-89de-a50c724f5f54)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_SouthAustraliaGulfs_wave_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Timeseries at a point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb b/notebooks/radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb new file mode 100644 index 0000000..6c9afd4 --- /dev/null +++ b/notebooks/radar_SouthAustraliaGulfs_wind_delayed_qc.ipynb @@ -0,0 +1,2259 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "88c3eb1c37778d59", + "metadata": {}, + "source": [ + "## Access Radar Southaustraliagulfs Wind Delayed Qc data in Zarr\n", + "A jupyter notebook to show how to access and plot the AODN radar_SouthAustraliaGulfs_wind_delayed_qc dataset available as a [Zarr](https://zarr.dev/) dataset on S3.\n", + "\n", + "More information about the dataset available [here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/db049981-3d4e-4cb2-9c4b-e697650845b9)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "db60797ca5fabcce", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_name = \"radar_SouthAustraliaGulfs_wind_delayed_qc\"" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "166447a8-1632-439f-8fc8-17adf9e9318c", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "import fsspec" + ] + }, + { + "cell_type": "markdown", + "id": "f167c284-0324-49e7-8fcc-c57abde81ab1", + "metadata": {}, + "source": [ + "## Install/Update packages and Load common functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "db6a4be5-7b34-44b1-b1cb-5bd053ba13d4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: uv in /home/lbesnard/miniforge3/envs/AodnCloudOptimised/lib/python3.12/site-packages (0.4.18)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", + "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", + "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", + "\u001b[2mAudited \u001b[1m228 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + ] + } + ], + "source": [ + "# only run once, then restart session if needed\n", + "!pip install uv\n", + "\n", + "import os\n", + "import sys\n", + "\n", + "def is_colab():\n", + " try:\n", + " import google.colab\n", + " return True\n", + " except ImportError:\n", + " return False\n", + "\n", + "# Get the current directory of the notebook\n", + "current_dir = os.getcwd()\n", + "\n", + "# Check if requirements.txt exists in the current directory\n", + "local_requirements = os.path.join(current_dir, 'requirements.txt')\n", + "if os.path.exists(local_requirements):\n", + " requirements_path = local_requirements\n", + "else:\n", + " # Fall back to the online requirements.txt file\n", + " requirements_path = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/notebooks/requirements.txt'\n", + "\n", + "# Install packages using uv and the determined requirements file\n", + "if is_colab():\n", + " xr.set_options(display_style='text')\n", + " os.system(f'uv pip install --system -r {requirements_path}')\n", + "else:\n", + " os.system('uv venv')\n", + " os.system(f'uv pip install -r {requirements_path}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f97afd2652e7e52", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import os\n", + "if not os.path.exists('parquet_queries.py'):\n", + " print('Downloading parquet_queries.py')\n", + " url = 'https://raw.githubusercontent.com/aodn/aodn_cloud_optimised/main/aodn_cloud_optimised/lib/ParquetDataQuery.py'\n", + " response = requests.get(url)\n", + " with open('parquet_queries.py', 'w') as f:\n", + " f.write(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "768f83ce-7b66-4b36-be31-0d380fbd8d45", + "metadata": {}, + "outputs": [], + "source": [ + "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "521f88c5-01bc-4b77-88ad-2dba57457ab7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 21TB\n",
+       "Dimensions:                  (time: 8777, lat: 4500, lon: 6000)\n",
+       "Coordinates:\n",
+       "  * lat                      (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n",
+       "  * lon                      (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n",
+       "  * time                     (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n",
+       "Data variables:\n",
+       "    dt_analysis              (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    l2p_flags                (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    quality_level            (time, lat, lon) float32 948GB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    satellite_zenith_angle   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sea_surface_temperature  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_bias                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_count               (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sses_standard_deviation  (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_count                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_dtime                (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_mean                 (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "    sst_standard_deviation   (time, lat, lon) float64 2TB dask.array<chunksize=(5, 1000, 1000), meta=np.ndarray>\n",
+       "Attributes: (12/50)\n",
+       "    Conventions:                      CF-1.6\n",
+       "    Metadata_Conventions:             Unidata Dataset Discovery v1.0\n",
+       "    Metadata_Link:                    TBA\n",
+       "    acknowledgment:                   Any use of these data requires the foll...\n",
+       "    cdm_data_type:                    grid\n",
+       "    comment:                          HRPT AVHRR experimental L3 retrieval pr...\n",
+       "    ...                               ...\n",
+       "    summary:                          A merged, day+night, multi-sensor L3S f...\n",
+       "    time_coverage_end:                20071028T194035Z\n",
+       "    time_coverage_start:              20071027T225055Z\n",
+       "    title:                            IMOS L3S Day and Night gridded multiple...\n",
+       "    uuid:                             0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n",
+       "    westernmost_longitude:            70.01000213623047
" + ], + "text/plain": [ + " Size: 21TB\n", + "Dimensions: (time: 8777, lat: 4500, lon: 6000)\n", + "Coordinates:\n", + " * lat (lat) float32 18kB 19.99 19.97 ... -69.97 -69.99\n", + " * lon (lon) float32 24kB 70.01 70.03 ... 190.0 190.0\n", + " * time (time) datetime64[ns] 70kB 2019-01-01T09:20:00 ....\n", + "Data variables:\n", + " dt_analysis (time, lat, lon) float64 2TB dask.array\n", + " l2p_flags (time, lat, lon) float32 948GB dask.array\n", + " quality_level (time, lat, lon) float32 948GB dask.array\n", + " satellite_zenith_angle (time, lat, lon) float64 2TB dask.array\n", + " sea_surface_temperature (time, lat, lon) float64 2TB dask.array\n", + " sses_bias (time, lat, lon) float64 2TB dask.array\n", + " sses_count (time, lat, lon) float64 2TB dask.array\n", + " sses_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + " sst_count (time, lat, lon) float64 2TB dask.array\n", + " sst_dtime (time, lat, lon) float64 2TB dask.array\n", + " sst_mean (time, lat, lon) float64 2TB dask.array\n", + " sst_standard_deviation (time, lat, lon) float64 2TB dask.array\n", + "Attributes: (12/50)\n", + " Conventions: CF-1.6\n", + " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", + " Metadata_Link: TBA\n", + " acknowledgment: Any use of these data requires the foll...\n", + " cdm_data_type: grid\n", + " comment: HRPT AVHRR experimental L3 retrieval pr...\n", + " ... ...\n", + " summary: A merged, day+night, multi-sensor L3S f...\n", + " time_coverage_end: 20071028T194035Z\n", + " time_coverage_start: 20071027T225055Z\n", + " title: IMOS L3S Day and Night gridded multiple...\n", + " uuid: 0bb17ca7-d72b-4ac9-aed5-54d74a364c1f\n", + " westernmost_longitude: 70.01000213623047" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# remote zarr dataset\n", + "url = f's3://aodn-cloud-optimised/{dataset_name}.zarr/'\n", + "ds = xr.open_zarr(fsspec.get_mapper(url, anon=True), consolidated=True)\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "fbdae3d5-6930-4359-9424-c2fb4389d081", + "metadata": {}, + "source": [ + "## Plot time coverage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "63740a54-5aeb-4204-beb1-070422ad3412", + "metadata": {}, + "outputs": [], + "source": [ + "plot_time_coverage(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "1ad856eb-e72a-4b7f-9bfb-648c37176b2a", + "metadata": {}, + "source": [ + "## Timeseries at a point" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "844adf8b-4944-4b67-9627-ff1882fdd1fb", + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "time_series_df = create_timeseries(ds, 'analysed_sst', lat=-40, lon=130, start_time='2007-12-01', end_time='2008-12-31')" + ] + }, + { + "cell_type": "markdown", + "id": "23a9d042-1f02-4d6c-aa91-6bea18787807", + "metadata": {}, + "source": [ + "## Plot a gridded variable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "900c2d3c-b212-47b8-b440-35a8eea52186", + "metadata": {}, + "outputs": [], + "source": [ + "plot_gridded_variable(ds, start_date='2008-06-01', lon_slice=(120, 150), lat_slice=(-50, -30), var_name='analysed_sst', n_days=6, coastline_resolution=\"50m\")" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.ipynb b/notebooks/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.ipynb index 5d3fa1a..3401004 100644 --- a/notebooks/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.ipynb +++ b/notebooks/radar_TurquoiseCoast_velocity_hourly_average_delayed_qc.ipynb @@ -49,7 +49,7 @@ "Using CPython 3.12.6 interpreter at: \u001b[36m/home/lbesnard/miniforge3/envs/AodnCloudOptimised/bin/python\u001b[39m\n", "Creating virtual environment at: \u001b[36m.venv\u001b[39m\n", "Activate with: \u001b[32msource .venv/bin/activate\u001b[39m\n", - "\u001b[2mAudited \u001b[1m230 packages\u001b[0m \u001b[2min 29ms\u001b[0m\u001b[0m\n" + "\u001b[2mAudited \u001b[1m230 packages\u001b[0m \u001b[2min 27ms\u001b[0m\u001b[0m\n" ] } ], @@ -106,12 +106,24 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 16, "id": "6818ca6e-e3fe-43d7-8715-b2ce97370012", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ImportError", + "evalue": "cannot import name 'plot_radar_velocity_rose' from 'parquet_queries' (/home/lbesnard/github_repo/aodn_cloud_optimised/notebooks/parquet_queries.py)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_3978912/1927658611.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mparquet_queries\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcreate_timeseries\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mplot_time_coverage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mplot_gridded_radar_velocity\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mplot_radar_velocity_rose\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mImportError\u001b[0m: cannot import name 'plot_radar_velocity_rose' from 'parquet_queries' (/home/lbesnard/github_repo/aodn_cloud_optimised/notebooks/parquet_queries.py)" + ] + } + ], "source": [ - "from parquet_queries import plot_gridded_variable, create_timeseries, plot_time_coverage" + "from parquet_queries import create_timeseries, plot_time_coverage, plot_gridded_radar_velocity, plot_radar_velocity_rose" ] }, { @@ -534,13 +546,13 @@ " standard_name_vocabulary: NetCDF Climate and Forecast (CF) Metadata ...\n", " time_coverage_end: 2020-12-26T17:00:00Z\n", " time_coverage_start: 2020-12-26T17:00:00Z\n", - " title: IMOS Ocean Radar Facility Turqoise Coast (...