from os import path import logging import subprocess import tempfile from filefinder.library import get_date from lib import get_args, check_output_dir import lib.data.modis import lib.data.images logging.basicConfig() log = logging.getLogger(__name__) log.setLevel(logging.INFO) file_dir = path.dirname(path.realpath(__file__)) def main(): def add_args(parser): parser.add_argument('-nx', type=int, default=200) parser.add_argument('-ny', type=int, default=200) parser.add_argument('-stepx', type=int, default=10) parser.add_argument('-stepy', type=int, default=10) parser.add_argument('-cover_threshold', type=float, default=0.70) args = get_args(['region', 'year', 'fixes'], add_args, "Extract images from regridded swaths.") find_images(args) def find_images(args): log.info('finding images') with tempfile.TemporaryDirectory(suffix='find_images_') as tdir: filelist = path.join(tdir, 'filelist.txt') namelist = path.join(tdir, 'namelist.txt') write_filelist(args, filelist) write_namelist(args, namelist, filelist) exe_filename = path.join(file_dir, 'find_images.exe') if not path.isfile(exe_filename): raise RuntimeError("Fortran find_images not compiled. Compile with " "`gfortran -O2 -I... -lnetcff -o find_images.x " "find_images.f90`") log.info('launching fortran subprocess') clo = [exe_filename, namelist] subprocess.call(clo) def write_filelist(args, filename): log.info('writing filelist') finder = lib.data.modis.get_finder(args) files = finder.get_files() # Create all folders images_dir = set() for f in files: images_dir.add(path.dirname(lib.data.images.nc2ext(f, 'txt'))) for d in images_dir: check_output_dir(d, log) with open(filename, 'w') as filelist: filelist.write("{}\n".format(len(files))) for f in files: date = get_date(finder.get_matches(f, relative=False)) filelist.write("{}\n".format(f)) filelist.write("{}\n".format(lib.data.images.nc2ext(f, 'txt'))) filelist.write("{}\n".format(date.strftime('%Y-%m-%d'))) def write_namelist(args, filename, filelist): with open(filename, 'w') as f: f.write('&input\n') f.write(' filelist = "{}"\n'.format(filelist)) f.write(' nx = {:d}\n'.format(args['nx'])) f.write(' ny = {:d}\n'.format(args['ny'])) f.write(' stepx = {:d}\n'.format(args['stepx'])) f.write(' stepy = {:d}\n'.format(args['stepy'])) f.write(' cover_threshold = {:f}\n'.format(args['cover_threshold'])) f.write('/\n') if __name__ == '__main__': main()