Source code for pycif.plugins.datastreams.fluxes.flexpart.fetch

import os
import pandas as pd
import datetime
import numpy as np
from .....utils import path
from .....utils.classes.domains import Domain


[docs] def fetch(ref_dir, ref_file, date_interval, target_dir, tracer=None, **kwargs): datei, datef = date_interval datei = datetime.datetime(year=datei.year, month=1, day=1) datef = datetime.datetime(year=datef.year + 1, month=1, day=1) list_period_dates = pd.date_range(datei, datef, freq="1YS") list_dates = {} list_files = {} for dd in list_period_dates: file = dd.strftime("{}/{}".format(ref_dir, ref_file)) if os.path.isfile(file): ddf = datetime.datetime(year=dd.year + 1, month=1, day=1) file_dates = pd.date_range( dd, ddf, freq="1MS") list_dates[dd] = [ [mm0, mm1] for mm0, mm1 in zip(file_dates[:-1], file_dates[1:])] list_files[dd] = (len(file_dates) * [file]) # Fetching target_file = "{}/{}".format(target_dir, os.path.basename(file)) path.link(file, target_file) # Fetching global files as well if hasattr(tracer, "file_glob"): file_glob = dd.strftime( "{}/{}".format(ref_dir, tracer.file_glob)) target_file = '{}/{}'.format(target_dir, os.path.basename(file_glob)) path.link(file_glob, target_file) # Update the FLEXPART domain with only one level domain_in = tracer.domain domain_out = Domain(nlon=domain_in.nlon, nlat=domain_in.nlat, xmin=domain_in.xmin, xmax=domain_in.xmax, ymin=domain_in.ymin, ymax=domain_in.ymax, zlon=domain_in.zlon, zlat=domain_in.zlat, zlonc=domain_in.zlonc, zlatc=domain_in.zlatc, lon_in=domain_in.lon_in, lat_in=domain_in.lat_in, zlon_in=domain_in.zlon_in, zlat_in=domain_in.zlat_in, zlonc_in=domain_in.zlonc_in, zlatc_in=domain_in.zlatc_in, nlon_side=domain_in.nlon_side, nlat_side=domain_in.nlat_side, zlon_side=domain_in.zlon_side, zlat_side=domain_in.zlat_side, zlonc_side=domain_in.zlonc_side, zlatc_side=domain_in.zlatc_side, nlev=1, pressure_unit="Pa", nested=domain_in.nested, sigma_b_mid=np.array([1]), sigma_a_mid=np.array([0]), raveled_indexes_glob=domain_in.raveled_indexes_glob, unstructured_domain=domain_in.unstructured_domain, regular_degrees=domain_in.regular_degrees ) tracer.domain = domain_out return list_files, list_dates