Skip to content
Snippets Groups Projects
Commit 593cab32 authored by Nick Bearson's avatar Nick Bearson
Browse files

first cut at supporting alternative system environment prefixes, for example: CG_ instead of OR_

parent 89b7ecfd
No related branches found
No related tags found
1 merge request!12Resolve "filename prefix change"
...@@ -85,6 +85,10 @@ def create_parser(): ...@@ -85,6 +85,10 @@ def create_parser():
help="enable 'realtime' mode, where we expect only one input file,\n" help="enable 'realtime' mode, where we expect only one input file,\n"
"find the surrounding trio, and automatically determine if a full minute\n" "find the surrounding trio, and automatically determine if a full minute\n"
"of data is available (default: off)") "of data is available (default: off)")
parser.add_argument('--system-environment-prefix', default="CG",
help="set the system environment prefix for the output grids (default: CG)")
parser.add_argument('--system-environment-prefix-tiles', default="OR",
help="set the system environment prefix for the output tiles (default: OR)")
# from Requirements: "Input is one or more GLM LCFA (L2+) files in mission standard format (nominally three 20-second input files)" # from Requirements: "Input is one or more GLM LCFA (L2+) files in mission standard format (nominally three 20-second input files)"
parser.add_argument(dest='filenames', metavar='filename', nargs='+') parser.add_argument(dest='filenames', metavar='filename', nargs='+')
return parser return parser
...@@ -132,6 +136,45 @@ def get_start_end(filenames, start_time=None, end_time=None): ...@@ -132,6 +136,45 @@ def get_start_end(filenames, start_time=None, end_time=None):
return start_time, end_time return start_time, end_time
def get_sector_shortstring(args):
if args.goes_sector == 'full':
return 'F'
elif args.goes_sector == 'conus':
return 'C'
elif args.goes_sector == 'meso':
return 'M1'
else:
raise RuntimeError("sector not recognized")
def get_outpath_base(args):
"""create a base outpath string to feed glmtools
from glmtools:
outpath can be a template string; defaults to {'./{dataset_name}'}
Available named arguments in the template are:
dataset_name: standard GOES imagery format, includes '.nc'. Looks like
OR_GLM-L2-GLMM1-M3_G16_s20181830432000_e20181830433000_c20200461148520.nc
start_time, end_time: datetimes that can be used with strftime syntax, e.g.
'./{start_time:%y/%b/%d}/GLM_{start_time:%Y%m%d_%H%M%S}.nc'
"""
print(parse_glm_filename(args.filenames[0]))
ops_environment, algorithm, platform, start_time, end_time, created_time = parse_glm_filename(args.filenames[0])
sector_short = get_sector_shortstring(args)
mode = "M3" # FIXME: we're not always in M3
# example string: OR_GLM-L2-GLMC-M3_G17_s20182750032000_e20182750033000_c20210431923130.nc
dsname = "{environment_prefix}_GLM-L2-GLM{sector_short}-{mode}_{platform}_s{start_time}_e{end_time}_c{created_time}.nc".format(
environment_prefix=args.system_environment_prefix,
sector_short=sector_short,
mode=mode,
platform=platform,
start_time=start_time.strftime("%Y%j%H%M%S0"),
end_time=end_time.strftime("%Y%j%H%M%S0"),
created_time=datetime.utcnow().strftime("%Y%j%H%M%S0")
)
return dsname
def grid_setup(args, work_dir=os.getcwd()): def grid_setup(args, work_dir=os.getcwd()):
# When passed None for the minimum event or group counts, the gridder will skip # When passed None for the minimum event or group counts, the gridder will skip
...@@ -171,7 +214,7 @@ def grid_setup(args, work_dir=os.getcwd()): ...@@ -171,7 +214,7 @@ def grid_setup(args, work_dir=os.getcwd()):
base_date = datetime(start_time.year, start_time.month, start_time.day) base_date = datetime(start_time.year, start_time.month, start_time.day)
proj_name = 'geos' proj_name = 'geos'
outputpath = os.path.join(work_dir, "{dataset_name}") # GLMTools expects a template in addition to the path outputpath = os.path.join(work_dir, get_outpath_base(args)) # GLMTools expects a template in addition to the path
goes_position = get_goes_position(args.filenames) goes_position = get_goes_position(args.filenames)
...@@ -287,10 +330,11 @@ if __name__ == '__main__': ...@@ -287,10 +330,11 @@ if __name__ == '__main__':
gridder, glm_filenames, start_time, end_time, grid_kwargs = grid_setup(args, work_dir=tempdir_path) gridder, glm_filenames, start_time, end_time, grid_kwargs = grid_setup(args, work_dir=tempdir_path)
gridder(glm_filenames, start_time, end_time, **grid_kwargs) gridder(glm_filenames, start_time, end_time, **grid_kwargs)
# FIXME: rather than using globs (below), gridder (above) returns some sort of zipped structure that contains the output filenames
# pick up gridded files from the tempdir # pick up gridded files from the tempdir
# output looks like: OR_GLM-L2-GLMC-M3_G17_s20202691559400_e20202691600400_c20210120141010.nc # output looks like: OR_GLM-L2-GLMC-M3_G17_s20202691559400_e20202691600400_c20210120141010.nc
log.debug("gridded files in {}".format(tempdir_path)) log.debug("gridded files in {}".format(tempdir_path))
gridded_path = os.path.join(tempdir_path, 'OR_GLM-L2-GLM?-M?_G??_s*_e*_c*.nc') gridded_path = os.path.join(tempdir_path, '{}_GLM-L2-GLM*-M?_G??_s*_e*_c*.nc'.format(args.system_environment_prefix))
log.debug(gridded_path) log.debug(gridded_path)
gridded_files = glob(gridded_path) gridded_files = glob(gridded_path)
log.debug(gridded_files) log.debug(gridded_files)
...@@ -302,6 +346,15 @@ if __name__ == '__main__': ...@@ -302,6 +346,15 @@ if __name__ == '__main__':
# (optionally) do tiling # (optionally) do tiling
if args.create_tiles: if args.create_tiles:
sector = get_goes_position(glm_filenames)
if sector == "east":
sector_id = "GOES_EAST"
elif sector == "west":
sector_id = "GOES_WEST"
else:
raise RuntimeError("could not determine sector_id")
from satpy import Scene from satpy import Scene
for gridded_file in gridded_files: for gridded_file in gridded_files:
log.info("TILING: {}".format(gridded_files)) log.info("TILING: {}".format(gridded_files))
...@@ -315,19 +368,20 @@ if __name__ == '__main__': ...@@ -315,19 +368,20 @@ if __name__ == '__main__':
scn.save_datasets(writer='awips_tiled', scn.save_datasets(writer='awips_tiled',
template='glm_l2_radf', template='glm_l2_radf',
sector_id="GOES_EAST", # sector_id becomes an attribute in the output files and may be another legacy kind of thing. I'm not sure how much is is actually used here. sector_id=sector_id, # sector_id becomes an attribute in the output files and may be another legacy kind of thing. I'm not sure how much is is actually used here.
source_name="", # You could probably make source_name an empty string. I think it is required by the writer for legacy reasons but isn't actually used for the glm output source_name="", # You could probably make source_name an empty string. I think it is required by the writer for legacy reasons but isn't actually used for the glm output
base_dir=tempdir_path, # base_dir is the output directory. I think blank is the same as current directory. base_dir=tempdir_path, # base_dir is the output directory. I think blank is the same as current directory.
tile_size=(506, 904), # tile_size is set to the size of the GLMF sample tiles we were given and should match the full disk ABI tiles which is what they wanted tile_size=(506, 904), # tile_size is set to the size of the GLMF sample tiles we were given and should match the full disk ABI tiles which is what they wanted
check_categories=False, # check_categories is there because of that issue I mentioned where DQF is all valid all the time so there is no way to detect empty tiles unless we ignore the "category" products check_categories=False, # check_categories is there because of that issue I mentioned where DQF is all valid all the time so there is no way to detect empty tiles unless we ignore the "category" products
environment_prefix=args.system_environment_prefix_tiles,
compress=True) compress=True)
# pick up output files from the tempdir # pick up output files from the tempdir
# output looks like: OR_GLM-L2-GLMC-M3_G17_T03_20200925160040.nc # output looks like: CG_GLM-L2-GLMC-M3_G17_T03_20200925160040.nc
log.debug("files in {}".format(tempdir_path)) log.debug("files in {}".format(tempdir_path))
log.debug(os.listdir(tempdir_path)) log.debug(os.listdir(tempdir_path))
log.debug("moving output to {}".format(args.output_dir)) log.debug("moving output to {}".format(args.output_dir))
tiled_path = os.path.join(tempdir_path, 'OR_GLM-L2-GLM?-M?_G??_T??_*.nc') tiled_path = os.path.join(tempdir_path, '{}_GLM-L2-GLM*-M?_G??_T??_*.nc'.format(args.system_environment_prefix_tiles))
tiled_files = glob(tiled_path) tiled_files = glob(tiled_path)
for f in tiled_files: for f in tiled_files:
add_gglm_attrs(f, glm_filenames) add_gglm_attrs(f, glm_filenames)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment