Source code for pycif.plugins.datastreams.fluxes.GCP_1x1_N2O.utils
import datetime
import glob
import os
import calendar
import numpy as np
[docs]
def find_valid_file(ref_dir, file_format, dd):
# Get all files and dates matching the file and format
#print('Here, basic listing of all available files')
list_files_orig = os.listdir(ref_dir)
list_files_avail = []
for f in list_files_orig:
try:
check = datetime.datetime.strptime(f, file_format)
list_files_avail.append(f)
except:
continue
#print('All availables files',list_files_avail)
list_files = []
list_dates = []
# XXXXXXX sans closest year pour le moment, A AJOUTER PLUS TARD XXXXXX
# actually in each file, information every month
for f in list_files_avail:
year_beg_file = (f.split('-')[0]).split('.')[-1]
#date_beg = datetime.datetime(year = int(year_beg_file), month = 1, day = 15)
year_end_file = (f.split('-')[1]).split('.')[0]
#date_end = datetime.datetime(year = int(year_end_file), month = 12, day = 15)
nb_deltas = (int(year_end_file) - int(year_beg_file) + 1 ) * 12
list_dates_covered = []
yy = int(year_beg_file)
mm =1
for k in range(nb_deltas):
list_dates_covered.append(datetime.datetime(year = yy , month = mm , day =15))
mm = mm + 1
if mm == 13 :
yy = yy + 1
mm =1
for d in list_dates_covered:
list_files.append(f)
list_dates.append(d)
list_files = np.array(list_files)
list_dates = np.array(list_dates)
# Sorting along dates
isort = np.argsort(list_dates)
list_dates = list_dates[isort]
list_files = list_files[isort]
if list_files == []:
raise Exception("Did not find any valid GCP flux files in {} "
"with format {}. Please check your yml file"
.format(ref_dir, file_format))
# Compute deltas
mask = (list_dates - dd) <= datetime.timedelta(0)
#print(mask)
file_ref1 = ref_dir + list_files[mask][np.argmax(list_dates[mask])]
date_ref1 = list_dates[mask].max()
#print('111111111',file_ref1, date_ref1)
mask = (list_dates - dd) >= datetime.timedelta(0)
#print('mmmm',mask)
file_ref2 = ref_dir + list_files[mask][np.argmin(list_dates[mask])]
date_ref2 = list_dates[mask].min()
#print('2222222222',file_ref2, date_ref2)
return [file_ref1, file_ref2], [date_ref1, date_ref2]