#!/usr/bin/env python # encoding: utf-8 import glob import subprocess import sys import os import re from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta HSRTV_SCRIPT='/delta/users/nickb/code/hsrtv/hsrtv.py' # NEED TO ADD IASI AND CrIS (NOTE CrIS USES TWO INPUT FILES GASP) # CrIS: GCRSO & SCRIS # # IASI: L1C # /delta/instruments/IASI/L1C YEARS=[2012] MONTHS=[2,5,8,11] inst = sys.argv[1] # ------------------------------- def get_infiles(inst, infile): if inst == "airs": return [infile] elif inst == "cris": flist = [] flist.append(infile) gcrso_tag = re.sub("c[0-9]{20}", "*", infile) scris_tag = re.sub("GCRSO", "SCRIS", gcrso_tag) scris_glob = glob.glob(scris_tag) if len(scris_glob) > 1: raise RuntimeError flist.append(scris_glob[0]) return flist elif inst == "iasi": return [infile] else: raise NotImplementedError def getdirs(inst): if inst == "airs": INDIR='/delta/instruments/AIRS/%(YEAR)s/%(DOY)s' # AIRS L1B OUTDIR='/delta/instruments/AIRS/HSRTV/%(YEAR)s/%(DOY)s' elif inst == "cris": INDIR='/delta/instruments/CrIS/%(YEAR)s/%(DOY)s/GCRSO' OUTDIR='/delta/instruments/CrIS/%(YEAR)s/%(DOY)s/HSRTV' elif inst == "iasi": INDIR='/delta/instruments/IASI/metop-a/%(YEAR)s/%(DOY)s/IASI_L1C' OUTDIR='/delta/instruments/IASI/metop-a/%(YEAR)s/%(DOY)s/HSRTV' else: raise NotImplementedError return INDIR, OUTDIR def check_output(inst, FMTDICT): return False # FIXME: shortcircuit for now until finished outdir = getdirs(inst) if inst == "airs": outfile = "AIRS_%(YEAR)s%(MONTH)s%(DAY)s_%(HOUR)s%(MINUTE)s%(SECOND)s*" elif inst == "cris": outfile = "CrIS_%(YEAR)s%(MONTH)s%(DAY)s_%(HOUR)s%(MINUTE)s%(SECOND)s*" elif inst == "iasi": outfile = "IASI_%(YEAR)s%(MONTH)s%(DAY)s_%(HOUR)s%(MINUTE)s%(SECOND)s*" outfile = outfile % FMTDICT def daterange(start_date, end_date): for n in range(int ((end_date - start_date).days)): yield (start_date + timedelta(n)) # ------------------------------- INDIR, OUTDIR = getdirs(inst) for YEAR in YEARS: for MONTH in MONTHS: start = datetime(YEAR, MONTH, 1) end = start + relativedelta(months=+1) # end = datetime(YEAR, MONTH+1, 1) # FIXME: things fall apart if month+1 = 13 for dt in daterange(start, end): DOY = dt.timetuple().tm_yday FMTDICT = {} FMTDICT['YEAR'] = str(dt.year) FMTDICT['MONTH'] = str(dt.month) FMTDICT['DAY'] = str(dt.day) FMTDICT['DOY'] = "%03d" % (DOY) IN_URL = INDIR % FMTDICT OUT_URL = OUTDIR % FMTDICT inglob = glob.glob(IN_URL+'/*') # AIRS doesn't have hour/min/day in infile, so for now just skip if indir size = outdir size outglob = glob.glob(OUT_URL+'/*') if len(inglob) == len(outglob): continue for INFILE in inglob: # FMTDICT['HOUR'] = # FMTDICT['MINUTE'] = # FMTDICT['SECOND'] = if not check_output(inst, FMTDICT): hsrtv_call = "/opt/hhg-200911-x86_64/bin/python %s %s %s" % (HSRTV_SCRIPT, inst, OUT_URL) for fin in get_infiles(inst, INFILE): hsrtv_call += " "+fin cmd = hsrtv_call # cmd = 'qsub -p -100 -l matlab=0 -p -100 -N hsrtv -o %s -e %s -b y %s' % (LOGDIR, LOGDIR, hsrtv_call) print cmd # subprocess.check_call(cmd, shell=True)