# -*- coding: utf-8 -*- #--------------------------------------------------------------------# # Blowing Snow Index # # Filename: blowing_snow.py # # Description: Generates impacts for falling snow combined with wind # # Authors: Nathan Foster/Josh Kastman # # Created by Nathan Foster (WFO Las Vegas) nathan.foster@noaa.gov # # Change Log: # # Output for rolling 24 hour periods - Kastman 2018-10-11 # # Updated for rolling 24 hr output - Kastman 2021-6-30 # #--------------------------------------------------------------------# # Imports import arcpy, os, shutil, datetime, time, sys from datetime import datetime from time import gmtime, strftime from arcpy import env from arcpy.sa import * import traceback from shutil import copyfile import wssi_config as cfg import wssi_general_functions as gfunc import glob import os.path from os import path import logging # set up log file log_stamp = strftime("%Y%m%d%H", gmtime()) logging.basicConfig(filename=cfg.log_dir+'/wssi_log_'+str(log_stamp)+'_BlSn.log',level=logging.DEBUG, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') def blowing_snow(): #-----------------# # Set local lists # #-----------------# file = cfg.work_dir+'precp_num_list.txt' data = open(file, 'r') precip_num_text = data.readline() precip_num_list = precip_num_text.split() file = cfg.work_dir+'precip_hrs.txt' data = open(file, 'r') precip_hrs_txt = data.readline() precip_hrs = precip_hrs_txt.split() #precip_hrs = ['6', '12', '18', '24', '30', '36', '42', '48', '54', '60', '66'] print (precip_hrs) logging.debug("precip_hrs "+str(precip_hrs)) #print (['6', '12', '18', '24', '30', '36', '42', '48', '54', '60']) file = cfg.work_dir+'wgust_num_list.txt' data = open(file, 'r') wgust_num_text = data.readline() wgust_num_list = wgust_num_text.split() #print wgust_num_list file = cfg.work_dir+'wgust_hrs.txt' data = open(file, 'r') wgust_hrs_txt = data.readline() wgust_hrs = wgust_hrs_txt.split() #wgust_hrs =['6', '12', '18', '24', '30', '36', '42', '48', '54', '60'] print wgust_hrs logging.debug("wgust_hrs "+str(wgust_hrs)) try: file = cfg.work_dir+'d4wgust_num_list.txt' data = open(file, 'r') d4wgust_num_text = data.readline() d4wgust_num_list = d4wgust_num_text.split() except: print(traceback.format_exc()) print ("DAY 4 ERROR") logging.error(traceback.format_exc()) logging.error("DAY 4 ERROR") pass #print d4wgust_num_list try: file = cfg.work_dir+'d4wgust_hrs.txt' data = open(file, 'r') d4wgust_hrs_txt = data.readline() d4wgust_hrs = d4wgust_hrs_txt.split() except: print(traceback.format_exc()) print ("DAY 4 ERROR") logging.error(traceback.format_exc()) logging.error("DAY 4 ERROR") pass #print d4wgust_hrs file = cfg.work_dir+'wgust_max_valid.txt' data = open(file, 'r') max_vars = data.readline() #print max_vars #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # DAY 4 TEMPORARILY COMMENTED OUT ! #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: precip_num_list_d4 = cfg.precip_num_list_d4 precip_d4_hrs = cfg.precip_d4_hrs rdict = cfg.rdict rdict_d4 = cfg.rdict_d4 d4wgust_hrs = d4wgust_hrs_txt.split() except: print(traceback.format_exc()) print ("DAY 4 ERROR") logging.error(traceback.format_exc()) logging.error("DAY 4 ERROR") pass all_hrs = [] for hr in precip_hrs: all_hrs.append(hr) for d4hr in precip_d4_hrs: all_hrs.append(d4hr) last_gust = wgust_num_list[-1] logging.debug("all_hrs "+str(all_hrs)) logging.debug("last_gust "+str(last_gust)) wgust_dict = dict(zip(wgust_num_list, wgust_hrs)) #print wgust_dict d4wgust_dict = dict(zip(d4wgust_num_list, d4wgust_hrs)) #print d4wgust_dict rlist_6hr = gfunc.rolling_periods(fp = precip_hrs[-1], rHR=4, step=6, hr_list = precip_hrs) rlist_nums = gfunc.rolling_periods(fp = precip_num_list[-1], rHR=4, step=6, hr_list = precip_num_list) start_time = strftime("%a, %d %b %Y %H:%M:%S", gmtime()) #print "WSSI Blowing Snow Start Time "+start_time logging.debug ("WSSI Blowing Snow Start Time "+start_time) arcpy.env.overwriteOutput = True arcpy.SetLogHistory(False) #Get Spatial Analyst License try: if arcpy.CheckExtension("Spatial") == "Available": arcpy.CheckOutExtension("Spatial") else: # Raise a custom exception raise LicenseError except LicenseError: print "Spatial Analyst license is unavailable" #----------------------------------# # Generate list of Wing Gust files # #----------------------------------# for p,d in zip (d4wgust_num_list,d4wgust_hrs): #print cfg.grb_dir+"wgust_d4"+str(p)+".flt" #print cfg.work_dir+"wgust_max_f"+d+".tif" arcpy.gp.CellStatistics_sa(cfg.grb_dir+"wgust_d4"+str(p)+".flt", cfg.work_dir+"wgust_max_f"+d+".tif", "MAXIMUM", "DATA") wgust_all_nums = [] wgust_all_hrs = [] for file in glob.glob(cfg.work_dir+"*wgust_max_f*"+"*.tif"): wgust_all_nums.append(file) wgust_all_hrs.append(file[44:-4]) #print wgust_all_nums base = len(wgust_all_nums) pos = base +1 #print pos bl_sn_nums = [] bl_sn_hrs = wgust_all_hrs for f in range (1,pos): #bl_sn_hrs.append(rdict[str(f)]) bl_sn_nums.append(str(f)) #----------------------------------------------------------------------------# # Generate list of rolling 24 hour periods based on number of periods needed # #----------------------------------------------------------------------------# rbl_sn_list = gfunc.rolling_periods(fp = precip_hrs[-1], rHR=4, step=1, hr_list = precip_hrs) #--------------------------------------------------------------------------------------# # Generate 6 hour time step Blowing Snow. Simple formula: # # BLSN_6h = 6h max wind gust reclass value * 6h SLR * 6h snow amount * land use factor # # (wgust_max) (slr) (sn6) (cfg.landuse) # # Vars used below list within () under BLSN_6H formula. cfg.landuse is a constant grid # #--------------------------------------------------------------------------------------# #for fhr in range (1,pos): ############ # Days 1-3 # ############ proc_hrs = [] missing_hr = [] for fhr,n in zip (precip_hrs, precip_num_list): print cfg.work_dir+"wgust_max_f"+fhr+".tif" logging.debug(cfg.work_dir+"wgust_max_f"+fhr+".tif") #print 'rc into' #print cfg.in_mem+"wgust_max_f"+fhr+"bnsn_rc" #print "using: "+cfg.grb_dir+"snow"+str(n)+".flt" wgust_max = cfg.work_dir+"wgust_max_f"+fhr+".tif" if path.exists(wgust_max) == True: wgust_blsn_rc = cfg.in_mem+"wgust_max_f"+fhr+"bnsn_rc" slr = cfg.work_dir+"slr_f"+fhr+"hr.tif" blsn = cfg.in_mem+"blsn1_f"+fhr+"hr" blsn2 = cfg.in_mem+"blsn2_f"+fhr+"hr" p6_blsn = cfg.work_dir+"p6_blsn_f"+fhr+"hr.tif" p12_blsn = cfg.work_dir+"p12_blsn_f"+fhr+"hr.tif" sn6 = cfg.grb_dir+"snow"+str(n)+".flt" blsn_6 = cfg.work_dir+"blsn_f"+fhr+"hr.tif" arcpy.gp.Reclassify_sa(wgust_max, "Value", "0 13 1;13 16 2;16 20 3;20 23 4;23 27 5;27 30 6;30 35 7;35 39 8;39 43 9;43 150 10", wgust_blsn_rc, "NODATA") arcpy.gp.Times_sa(wgust_blsn_rc, slr, blsn) arcpy.gp.Times_sa(sn6, blsn, blsn2) arcpy.gp.Times_sa(blsn2, cfg.landuse, blsn_6) arcpy.gp.Times_sa(blsn_6, "0.5", p6_blsn) arcpy.gp.Times_sa(blsn_6, "0.25", p12_blsn) arcpy.Delete_management(wgust_blsn_rc) arcpy.Delete_management(blsn) arcpy.Delete_management(blsn2) print blsn_6+ " and its attendant grids have been created" proc_hrs.append(fhr) #print "" logging.debug(blsn_6+ " and its attendant grids have been created") if path.exists(wgust_max) == False: missing_hr.append(fhr) logging.debug(blsn_6+ " and its attendant grids have been skipped") #print (blsn_6+ " and its attendant grids have been skipped") continue ######### # Day 4 # ######### #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # DAY 4 TEMPORARILY COMMENTED OUT ! #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: logging.debug("Missing Hour(s)" + str(missing_hr)) for fhr,n in zip (precip_d4_hrs, precip_num_list_d4): #print cfg.work_dir+"wgust_max_f"+fhr+".tif" #print 'rc into' #print cfg.in_mem+"wgust_max_f"+fhr+"bnsn_rc" #print "using: "+cfg.grb_dir+"snow"+str(n)+".flt" wgust_max = cfg.work_dir+"wgust_max_f"+fhr+".tif" wgust_blsn_rc = cfg.in_mem+"wgust_max_f"+fhr+"bnsn_rc" slr = cfg.work_dir+"slr_f"+fhr+"hr.tif" blsn = cfg.in_mem+"blsn1_f"+fhr+"hr" blsn2 = cfg.in_mem+"blsn2_f"+fhr+"hr" p6_blsn = cfg.work_dir+"p6_blsn_f"+fhr+"hr.tif" p12_blsn = cfg.work_dir+"p12_blsn_f"+fhr+"hr.tif" sn6 = cfg.grb_dir+"snow"+str(n)+".flt" blsn_6 = cfg.work_dir+"blsn_f"+fhr+"hr.tif" arcpy.gp.Reclassify_sa(wgust_max, "Value", "0 13 1;13 16 2;16 20 3;20 23 4;23 27 5;27 30 6;30 35 7;35 39 8;39 43 9;43 150 10", wgust_blsn_rc, "NODATA") arcpy.gp.Times_sa(wgust_blsn_rc, slr, blsn) arcpy.gp.Times_sa(sn6, blsn, blsn2) arcpy.gp.Times_sa(blsn2, cfg.landuse, blsn_6) arcpy.gp.Times_sa(blsn_6, "0.5", p6_blsn) arcpy.gp.Times_sa(blsn_6, "0.25", p12_blsn) arcpy.Delete_management(wgust_blsn_rc) arcpy.Delete_management(blsn) arcpy.Delete_management(blsn2) #print blsn_6+ " and its attendant grids have been created" #print "" logging.debug(blsn_6+ " and its attendant grids have been created") except: print(traceback.format_exc()) print ("DAY 4 ERROR") logging.error(traceback.format_exc()) logging.error("DAY 4 ERROR") pass #------------------------------------------------------------------------------# # Calculate cumulative blowing snow amounts. Simple Formula: # # c_blsn_6 = currnet blsn_6 + (6h prior blsn_6*0.5) + (12h prior blsn_6*0.25) # # (blsn_6) (p6_blsn) (p12_blsn) # # Vars used below list within () under c_blsn_6 formula. # #------------------------------------------------------------------------------# try: print proc_hrs logging.debug(proc_hrs) arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f6hr.tif", cfg.work_dir+"c_blsn_6hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f12hr.tif;"+cfg.work_dir+"p6_blsn_f6hr.tif", cfg.work_dir+"c_blsn_12hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f18hr.tif;"+cfg.work_dir+"p6_blsn_f12hr.tif;"+cfg.work_dir+"p12_blsn_f6hr.tif", cfg.work_dir+"c_blsn_18hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f24hr.tif;"+cfg.work_dir+"p6_blsn_f18hr.tif;"+cfg.work_dir+"p12_blsn_f12hr.tif", cfg.work_dir+"c_blsn_24hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f30hr.tif;"+cfg.work_dir+"p6_blsn_f24hr.tif;"+cfg.work_dir+"p12_blsn_f18hr.tif", cfg.work_dir+"c_blsn_30hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f36hr.tif;"+cfg.work_dir+"p6_blsn_f30hr.tif;"+cfg.work_dir+"p12_blsn_f24hr.tif", cfg.work_dir+"c_blsn_36hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f42hr.tif;"+cfg.work_dir+"p6_blsn_f36hr.tif;"+cfg.work_dir+"p12_blsn_f30hr.tif", cfg.work_dir+"c_blsn_42hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f48hr.tif;"+cfg.work_dir+"p6_blsn_f42hr.tif;"+cfg.work_dir+"p12_blsn_f36hr.tif", cfg.work_dir+"c_blsn_48hr.tif", "SUM", "DATA") if len(precip_hrs) == len(proc_hrs): print "precip and proc are equal" if len(proc_hrs) == int(12): arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f54hr.tif;"+cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f60hr.tif;"+cfg.work_dir+"p6_blsn_f54hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f60hr.tif;"+cfg.work_dir+"p12_blsn_f54hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f72hr.tif;"+cfg.work_dir+"p12_blsn_f60hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") # D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p6_blsn_f72hr.tif;"+cfg.work_dir+"p12_blsn_f66hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f72hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") if len(proc_hrs) == int(11): if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f54hr.tif;"+cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f60hr.tif;"+cfg.work_dir+"p6_blsn_f54hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f60hr.tif;"+cfg.work_dir+"p12_blsn_f54hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") #arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f72hr.tif;"+cfg.work_dir+"p12_blsn_f60hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") # D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f66hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") else: if len(proc_hrs) == int(12): print 'all data present' arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f54hr.tif;"+cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f60hr.tif;"+cfg.work_dir+"p6_blsn_f54hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f66hr.tif;"+cfg.work_dir+"p6_blsn_f60hr.tif;"+cfg.work_dir+"p12_blsn_f54hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f72hr.tif;"+cfg.work_dir+"p6_blsn_f66hr.tif;"+cfg.work_dir+"p12_blsn_f60hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") # D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p6_blsn_f72hr.tif;"+cfg.work_dir+"p12_blsn_f66hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f72hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") if len(proc_hrs) != int(12): print 'missing hr list' print missing_hr if missing_hr[0] == '54': logging.debug('missing 54') print 'missing 54' arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f60hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f66hr.tif;"+cfg.work_dir+"p6_blsn_f60hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f66hr.tif;"+cfg.work_dir+"p12_blsn_f60hr.tif;", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") #D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f66hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") if missing_hr[0] == '60': logging.debug('missing 60') print 'missing 60' arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f54hr.tif;"+cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f54hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f66hr.tif;"+cfg.work_dir+"p12_blsn_f54hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f72hr.tif;"+cfg.work_dir+"p6_blsn_f66hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") #D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p6_blsn_f72hr.tif;"+cfg.work_dir+"p12_blsn_f66hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f72hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") if missing_hr[0] == '66': print 'missing 66' logging.debug('missing 66') arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f54hr.tif;"+cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f60hr.tif;"+cfg.work_dir+"p6_blsn_f54hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f60hr.tif;"+cfg.work_dir+"p12_blsn_f54hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") if path.exists(cfg.work_dir+"blsn_f72hr.tif") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f72hr.tif;"+cfg.work_dir+"p12_blsn_f60hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") #D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p6_blsn_f72hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f72hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") if path.exists(cfg.work_dir+"blsn_f72hr.tif") == False: arcpy.gp.CellStatistics_sa(cfg.work_dir+"p12_blsn_f60hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") #D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") if missing_hr[0] == '72': print 'missing 72' logging.debug('missing 72') arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f54hr.tif;"+cfg.work_dir+"p6_blsn_f48hr.tif;"+cfg.work_dir+"p12_blsn_f42hr.tif", cfg.work_dir+"c_blsn_54hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f60hr.tif;"+cfg.work_dir+"p6_blsn_f54hr.tif;"+cfg.work_dir+"p12_blsn_f48hr.tif", cfg.work_dir+"c_blsn_60hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f66hr.tif;"+cfg.work_dir+"p6_blsn_f60hr.tif;"+cfg.work_dir+"p12_blsn_f54hr.tif", cfg.work_dir+"c_blsn_66hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"p6_blsn_f66hr.tif;"+cfg.work_dir+"p12_blsn_f60hr.tif", cfg.work_dir+"c_blsn_72hr.tif", "SUM", "DATA") #D4 if path.exists(cfg.grb_dir+"ds.wpc_d4snow.bin") == True: arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f78hr.tif;"+cfg.work_dir+"p12_blsn_f66hr.tif", cfg.work_dir+"c_blsn_78hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f84hr.tif;"+cfg.work_dir+"p6_blsn_f78hr.tif", cfg.work_dir+"c_blsn_84hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f90hr.tif;"+cfg.work_dir+"p6_blsn_f84hr.tif;"+cfg.work_dir+"p12_blsn_f78hr.tif", cfg.work_dir+"c_blsn_90hr.tif", "SUM", "DATA") arcpy.gp.CellStatistics_sa(cfg.work_dir+"blsn_f96hr.tif;"+cfg.work_dir+"p6_blsn_f90hr.tif;"+cfg.work_dir+"p12_blsn_f84hr.tif", cfg.work_dir+"c_blsn_96hr.tif", "SUM", "DATA") except: logging.error(traceback.format_exc()) logging.debug(traceback.format_exc()) pass print 'this blows, but we continue' print "generating out to:" + precip_hrs[-1] logging.debug("generating out to:" + precip_hrs[-1]) arcpy.env.mask = cfg.States ############ # Days 1-3 # ############ #---------------------------------------------------------# # Generate full period max cumulative blowing snow values # #---------------------------------------------------------# tot_cblsn_list = [] for b in precip_hrs: tot_cblsn_list.append(cfg.work_dir+"c_blsn_"+b+"hr.tif") tot_cblsn_join = ';'.join(tot_cblsn_list) print tot_cblsn_join tmax_cblsn = cfg.in_mem+"max_cum_blsn" final_blsn = cfg.work_dir+"total_cum_max.tif" arcpy.gp.CellStatistics_sa(tot_cblsn_join, tmax_cblsn, "MAXIMUM", "DATA") arcpy.gp.Reclassify_sa(tmax_cblsn, "Value", "0 1 0;1 100 1;100 200 2;200 300 3;300 400 4;400 500 5;500 600 6;600 700 7;700 800 8;800 900 9;900 10000 10;NODATA 0", final_blsn, "DATA") arcpy.Delete_management(tmax_cblsn) ######### # Day 4 # ######### #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # DAY 4 TEMPORARILY COMMENTED OUT ! #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: for h in precip_d4_hrs: precip_hrs.append(h) print precip_hrs tot_cblsn_list = [] for b in precip_hrs: tot_cblsn_list.append(cfg.work_dir+"c_blsn_"+b+"hr.tif") tot_cblsn_join = ';'.join(tot_cblsn_list) print tot_cblsn_join tmax_cblsn = cfg.in_mem+"max_cum_blsn_d4" final_blsn = cfg.work_dir+"total_cum_max_d4.tif" arcpy.gp.CellStatistics_sa(tot_cblsn_join, tmax_cblsn, "MAXIMUM", "DATA") arcpy.gp.Reclassify_sa(tmax_cblsn, "Value", "0 1 0;1 100 1;100 200 2;200 300 3;300 400 4;400 500 5;500 600 6;600 700 7;700 800 8;800 900 9;900 10000 10;NODATA 0", final_blsn, "DATA") arcpy.Delete_management(tmax_cblsn) except: print(traceback.format_exc()) print ("DAY 4 ERROR") logging.error(traceback.format_exc()) logging.error("DAY 4 ERROR") pass #----------------------------------------------------------------------------# # Generate list of rolling 24 hour periods based on number of periods needed # #----------------------------------------------------------------------------# #rbl_sn_list = gfunc.rolling_periods(fp = proc_hrs[-1], rHR=4, step=1, hr_list = proc_hrs) ############ # Days 1-3 # ############ #---------------------------------------------------------# # Generate rolling 24h max cumulative blowing snow values # #---------------------------------------------------------# print 'rolling max gust' logging.debug('rolling max gust') #rbl_sn_list for r in range (0,len(rbl_sn_list)): #print r ravg = [] for s in range (0,4): ravg.append(cfg.work_dir+"c_blsn_"+str(rbl_sn_list[r][s])+"hr.tif") ravg_join = ';'.join(ravg) #print (ravg_join) max_cblsn_6 = cfg.in_mem+"max_blsn_f"+rbl_sn_list[r][-1]+"h" #print max_cblsn_6 fmax_cblsn_6 = cfg.work_dir+"v"+rbl_sn_list[r][-1]+"hr_cum_max.tif" #print fmax_cblsn_6 arcpy.gp.CellStatistics_sa(ravg_join, max_cblsn_6, "MAXIMUM", "DATA") #print cfg.in_mem+"max_cum_blsn_f"+rbl_sn_list[r][-1]+"h" arcpy.gp.Reclassify_sa(max_cblsn_6, "Value", "0 1 0;1 100 1;100 200 2;200 300 3;300 400 4;400 500 5;500 600 6;600 700 7;700 800 8;800 900 9;900 10000 10;NODATA 0", fmax_cblsn_6, "DATA") arcpy.Delete_management(max_cblsn_6) arcpy.Delete_management(ravg_join) ######### # Day 4 # ######### #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # DAY 4 TEMPORARILY COMMENTED OUT ! #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try: for h in precip_d4_hrs: d4_cblsn_6 = cfg.work_dir+"c_blsn_"+h+"hr.tif" d4_fin_cblsn_6 = cfg.work_dir+"v"+h+"hr_cum_max.tif" arcpy.gp.Reclassify_sa(d4_cblsn_6, "Value", "0 1 0;1 100 1;100 200 2;200 300 3;300 400 4;400 500 5;500 600 6;600 700 7;700 800 8;800 900 9;900 10000 10;NODATA 0", d4_fin_cblsn_6, "DATA") logging.debug('Blowing Snow Finished') except: print(traceback.format_exc()) print ("DAY 4 ERROR") logging.error(traceback.format_exc()) logging.error("DAY 4 ERROR") pass ## #----------------------------------------------------------------------------------------------------# # Copy total, day1 and day2 output to components output folder. Day3 will be coppied in summary step # #----------------------------------------------------------------------------------------------------# os.chdir(cfg.work_dir) if precip_num_list[-1] == str(11): d3 = "v66hr_cum_max.tif" else: d3 = "v72hr_cum_max.tif" infiles = ["total_cum_max.tif","v24hr_cum_max.tif","v48hr_cum_max.tif",d3, "v96hr_cum_max.tif"] outfiles = ["bl_sn_fp.tif","bl_sn_d1.tif","bl_sn_d2.tif","bl_sn_d3.tif", "bl_sn_d4.tif"] for i,o in zip (infiles,outfiles): try: copyfile(cfg.work_dir+i, cfg.comp_out+o) logging.debug("final files: "+str(o)) except: logging.error(traceback.format_exc()) pass rolling_web_list = [] for file in glob.glob("*hr_cum_max.tif"): rolling_web_list.append(file) print rolling_web_list logging.debug("final rolling files: "+str(rolling_web_list)) for f in rolling_web_list: rf = 'r24h_BlowingSnow_f'+f[1:3]+'.tif' copyfile(cfg.work_dir+f, cfg.roll_out+rf) end_time = strftime("%a, %d %b %Y %H:%M:%S", gmtime()) #print "WSSI Blowing Snow Start Time "+start_time #print "WSSI Blowing Snow End Time "+end_time logging.debug("WSSI Blowing Snow Start Time "+start_time) logging.debug("WSSI Blowing Snow End Time "+end_time) blowing_snow()