Mercurial > repos > ecology > iabiodiv_smartbiodiv_med_environ
diff med_environ.py @ 0:f82f266381be draft
planemo upload for repository https://github.com/jeremyfix/medenv commit 6068531bc50297a9c8f2c24e748d7d791fe5f2ba
author | ecology |
---|---|
date | Thu, 15 Feb 2024 20:01:29 +0000 |
parents | |
children | b79faea33a8a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/med_environ.py Thu Feb 15 20:01:29 2024 +0000 @@ -0,0 +1,107 @@ +# coding: utf-8 + +# Standard imports +import argparse +import os +import pathlib +from datetime import datetime + +# External imports +import medenv + +import pandas as pd + + +def environment_observation( + row, + fetcher, + lat_key, + long_key, + depth_key, + date_key, + tol_spatial_coordinates, + verbose, +): + lat0 = ( + row[lat_key] - tol_spatial_coordinates / 2.0, + row[lat_key] + tol_spatial_coordinates / 2.0, + ) + long0 = ( + row[long_key] - tol_spatial_coordinates / 2.0, + row[long_key] + tol_spatial_coordinates / 2.0, + ) + depth = row[depth_key] + date = datetime.strptime(row[date_key], "%Y-%m-%dT%H:%M:%SZ") + + values, info_values = fetcher.get_values(date, (long0, lat0), depth) + + if verbose: + print( + f"Was fetching for date={date}, long={long0}, lat={lat0}," + f"depth={depth} and got {values} at the coordinates {info_values}" + ) + for fname, fvalue in values.items(): + row[fname] = fvalue + return row + + +def environment_dataset(args): + # Note: galaxy is given us, for boolean parameters, the string + # "true" or the string "false" that we need to convert to a bool + verbose = True if args.verbose == "true" else False + + if args.keyfile is not None and os.path.exists(args.keyfile): + with open(args.keyfile, "r") as fh: + key_lines = fh.readlines() + cmems_username = key_lines[0].split(":")[1].strip() + cmems_password = key_lines[1].split(":")[1].strip() + os.environ["CMEMS_USERNAME"] = cmems_username + os.environ["CMEMS_PASSWORD"] = cmems_password + + features = args.variables.split(",") + fetcher = medenv.Fetcher(features, reduction="mean") + + # Loads the input dataset + df = pd.read_csv(args.datafile, sep="\t") + lat_key = df.columns[args.lat_key] + long_key = df.columns[args.long_key] + depth_key = df.columns[args.depth_key] + date_key = df.columns[args.date_key] + print(lat_key, long_key, depth_key, date_key) + + df = df.apply( + environment_observation, + args=( + fetcher, + lat_key, + long_key, + depth_key, + date_key, + args.tol_spatial_coordinates, + verbose, + ), + axis=1, + ) + + df.to_csv(args.out_file, header=True, index=False, sep="\t") + + +def __main__(): + parser = argparse.ArgumentParser() + parser.add_argument("--datafile", type=pathlib.Path, required=True) + parser.add_argument("--out_file", type=pathlib.Path, required=True) + parser.add_argument("--lat_key", type=int, required=True) + parser.add_argument("--long_key", type=int, required=True) + parser.add_argument("--date_key", type=int, required=True) + parser.add_argument("--depth_key", type=int, required=True) + parser.add_argument("--variables", type=str, required=True) + parser.add_argument("--tol_spatial_coordinates", type=float, required=True) + parser.add_argument("--keyfile", type=pathlib.Path, default=None) + parser.add_argument("--verbose", type=str, default=False) + args = parser.parse_args() + + environment_dataset(args) + + +if __name__ == "__main__": + __main__()