Mercurial > repos > ecology > argo_getdata
comparison argo_getdata.py @ 0:055a934a380f draft
planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/ocean commit d3171d27d35f51b8e7464082610431642f1e4660
| author | ecology |
|---|---|
| date | Thu, 21 Dec 2023 13:21:21 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:055a934a380f |
|---|---|
| 1 # author: Marie Jossé | |
| 2 | |
| 3 # Python script | |
| 4 | |
| 5 ############################# | |
| 6 # Argo data access # | |
| 7 ############################# | |
| 8 | |
| 9 # Packages : argopy | |
| 10 | |
| 11 | |
| 12 # Load arguments | |
| 13 import argparse | |
| 14 import sys | |
| 15 | |
| 16 import argopy | |
| 17 | |
| 18 command_line_args = sys.argv[1:] | |
| 19 | |
| 20 | |
| 21 parser = argparse.ArgumentParser(description="Retrieve argo Data") | |
| 22 # Add arguments | |
| 23 | |
| 24 parser.add_argument("--user", type=str, | |
| 25 help="User mode : standard, expert or research") | |
| 26 parser.add_argument("--cardinal_1", type=float, help="Longitude min") | |
| 27 parser.add_argument("--cardinal_2", type=float, help="Longitude max") | |
| 28 parser.add_argument("--cardinal_3", type=float, help="Latitude min") | |
| 29 parser.add_argument("--cardinal_4", type=float, help="Latitude max") | |
| 30 parser.add_argument("--pressure_1", type=float, help="Pressure min") | |
| 31 parser.add_argument("--pressure_2", type=float, help="Pressure max") | |
| 32 parser.add_argument("--date_1", type=str, help="Starting date") | |
| 33 parser.add_argument("--date_2", type=str, help="Ending date.") | |
| 34 parser.add_argument("--wmo", type=str, help="WMO: argo's identifier") | |
| 35 parser.add_argument("--profile", type=str, help="Number of profiles") | |
| 36 parser.add_argument("--params", type=str, help="List of bgc parameters") | |
| 37 parser.add_argument("--measured", type=str, help="List of bgc parameters") | |
| 38 parser.add_argument("--output_argo", type=str, help="Output data from argo") | |
| 39 | |
| 40 args = parser.parse_args(command_line_args) | |
| 41 | |
| 42 | |
| 43 # Parse the command line arguments | |
| 44 | |
| 45 print(args) | |
| 46 # Import data | |
| 47 | |
| 48 user = args.user | |
| 49 cardinal_1 = args.cardinal_1 | |
| 50 cardinal_2 = args.cardinal_2 | |
| 51 cardinal_3 = args.cardinal_3 | |
| 52 cardinal_4 = args.cardinal_4 | |
| 53 pressure_1 = args.pressure_1 | |
| 54 pressure_2 = args.pressure_2 | |
| 55 date_1 = args.date_1 | |
| 56 date_2 = args.date_2 | |
| 57 wmo = args.wmo | |
| 58 if wmo is not None: | |
| 59 wmo = list(map(int, wmo.split(","))) | |
| 60 profile = args.profile | |
| 61 if profile is not None: | |
| 62 profile = list(map(int, profile.split(","))) | |
| 63 params = args.params | |
| 64 if params is not None: | |
| 65 params = params.split(",") | |
| 66 if len(params) == 83: | |
| 67 params = "all" | |
| 68 measured = args.measured | |
| 69 if measured is not None: | |
| 70 measured = measured.split(",") | |
| 71 | |
| 72 # Let’s import the argopy data fetcher: | |
| 73 | |
| 74 ###################### | |
| 75 # User mode # | |
| 76 ###################### | |
| 77 # By default, | |
| 78 # all argopy data fetchers are set to work with a standard user mode. | |
| 79 # To change that | |
| 80 | |
| 81 argopy.set_options(mode=user) | |
| 82 | |
| 83 ###################### | |
| 84 # Fetching Argo data # | |
| 85 ###################### | |
| 86 # Data selection # | |
| 87 | |
| 88 # To access Argo data with a DataFetcher, | |
| 89 # you need to define how to select your data of interest. | |
| 90 # argopy provides 3 different data selection methods: | |
| 91 | |
| 92 argo_data = argopy.DataFetcher() | |
| 93 | |
| 94 # 🗺 For a space/time domain # | |
| 95 | |
| 96 if (cardinal_1 is not None): | |
| 97 mode = "region" | |
| 98 argo_data = argo_data.region([cardinal_1, cardinal_2, | |
| 99 cardinal_3, cardinal_4, | |
| 100 pressure_1, pressure_2, | |
| 101 date_1, date_2]) | |
| 102 | |
| 103 # ⚓ For one or more profiles # | |
| 104 # Use the fetcher access point argopy.DataFetcher.profile() | |
| 105 # to specify the float WMO platform number | |
| 106 # and the profile cycle number(s) to retrieve profiles for. | |
| 107 elif (wmo is not None and profile is not None): | |
| 108 argo_data = argo_data.profile(wmo, profile) | |
| 109 # can also be argo_data = argo_data.profile(6902755, [3, 12]) | |
| 110 mode = "profile" | |
| 111 | |
| 112 # 🤖 For one or more floats # | |
| 113 # If you know the Argo float unique identifier number called a WMO number | |
| 114 # you can use the fetcher access point DataFetcher.float() | |
| 115 # to specify one or more float WMO platform numbers to select. | |
| 116 else: | |
| 117 argo_data = argo_data.float(wmo) | |
| 118 # can also be argo_data = argo_data.float([6902746, 6902755]) | |
| 119 mode = "float" | |
| 120 | |
| 121 # Data sources # | |
| 122 # Let’s start with standard import: | |
| 123 # argopy.reset_options() | |
| 124 # Specify data source erddap, gdac or argovis | |
| 125 | |
| 126 # if (ftp != "") : | |
| 127 # argopy.set_options(src = "gdac", ftp = ftp) | |
| 128 # else : | |
| 129 # argopy.set_options(src = "erddap") | |
| 130 | |
| 131 # With remote, online data sources, | |
| 132 # it may happens that the data server is experiencing down time. | |
| 133 print(argopy.status()) | |
| 134 | |
| 135 # Dataset # | |
| 136 # Argo data are distributed as a single dataset. | |
| 137 # It is referenced at https://doi.org/10.17882/42182. | |
| 138 # But they are several Argo missions with specific files and parameters | |
| 139 # that need special handling by argopy, namely: | |
| 140 # - the core Argo Mission: from floats that measure temperature, | |
| 141 # salinity, pressure down to 2000m, | |
| 142 # - the Deep Argo Mission: from floats that measure temperature, | |
| 143 # salinity, pressure down to 6000m, | |
| 144 # - and the BGC-Argo Mission: from floats that measure temperature, | |
| 145 # salinity, pressure and oxygen, pH, nitrate, chlorophyll, | |
| 146 # backscatter, irradiance down to 2000m. | |
| 147 # You can choose between phy or bgc | |
| 148 if (params is None): | |
| 149 argopy.set_options(dataset="phy") | |
| 150 else: | |
| 151 argopy.set_options(dataset="bgc") | |
| 152 if (measured != ['None'] and measured is not None): | |
| 153 argo_data = argopy.DataFetcher(params=params, measured=measured) | |
| 154 if (mode == "region"): | |
| 155 argo_data = argo_data.region([cardinal_1, cardinal_2, | |
| 156 cardinal_3, cardinal_4, | |
| 157 pressure_1, pressure_2, | |
| 158 date_1, date_2]) | |
| 159 elif (mode == "profile"): | |
| 160 argo_data = argo_data.profile(wmo, profile) | |
| 161 else: | |
| 162 argo_data = argo_data.float(wmo) | |
| 163 else: | |
| 164 argo_data = argopy.DataFetcher(params=params, measured=None) | |
| 165 if (mode == "region"): | |
| 166 argo_data = argo_data.region([cardinal_1, cardinal_2, | |
| 167 cardinal_3, cardinal_4, | |
| 168 pressure_1, pressure_2, | |
| 169 date_1, date_2]) | |
| 170 elif (mode == "profile"): | |
| 171 argo_data = argo_data.profile(wmo, profile) | |
| 172 else: | |
| 173 argo_data = argo_data.float(wmo) | |
| 174 | |
| 175 # Data fetching # | |
| 176 # To fetch (i.e. access, download, format) Argo data, | |
| 177 # argopy provides the DataFetcher class. | |
| 178 # Several DataFetcher arguments exist to help you select the dataset, | |
| 179 # the data source and the user mode the most suited for your applications; | |
| 180 # and also to improve performances. | |
| 181 | |
| 182 # You define the selection of data you want to fetch | |
| 183 # with one of the DataFetcher methods: region, float or profile. | |
| 184 # 2 lines to download Argo data: import and fetch ! | |
| 185 | |
| 186 argo_data = argo_data.load().data | |
| 187 argo_data.to_netcdf("argo_data.nc") | |
| 188 | |
| 189 # argo_metadata = argo_data.to_index() | |
| 190 | |
| 191 print(argo_data) |
