U g@sZddlZddlZddlTddlmZmZddlZddlmZddl m Z GdddZ dS)N)*)datetime timedelta)copyfile) RFCTimeSeriesc@sBeZdZdZddZddZddZdd Zd d Zdd dZ dS) RFCHelperzStore all RFC datacCstt|_||_|js tdd|_|jdjd|jdjdf|_|jD]X}|jd|jdkr||jd|jdf|_|jd|jdkrN|jd|jdf|_qNdS)z Initialize the RFCHelper object for a given RFC forecasts Input: list of forecast object z%FATAL ERROR: rfcForecasts has no datarN) logging getLogger__name__logger rfcForecasts RuntimeErrorindex fstPeriod timePeriod)selfZrfcdatafstrD/lfs/h1/ops/prod/packages/nwm.v3.0.13/ush/rfc_ingestion/RFCHelper.py__init__s"  zRFCHelper.__init__cCs|S)z) The iterator rrrrr__iter__7szRFCHelper.__iter__cCs6|jt|jdkrd|_t|jd|_|j|jS)z8 The next RFC_Forecast object r r)rlenr StopIterationrrrr__next__=s  zRFCHelper.__next__cCs|jS)z Get the earlist and latest time for all observations Return: Tuple of start time and end time )rrrrrtimePeriodForAllGszRFCHelper.timePeriodForAllc Csg}|D]z}|s|}ttt|}t||gt| d| | g| g|g| g| g|j }||q|S)zw Create time series from forecast data Return: list of time series objects )seconds)isEmptygetT0listmapintgetSyntheticValuesrget5CharStationIDrgetTimeStepInSeconds getStartTimegetValuesInCMS getQuality getQueryTimemissValappend)rZ timeseriesr timestamp syntheticsZ timeSeriesrrrmakeTimeSeriesOs$  zRFCHelper.makeTimeSeriesRFCTimeSeries.ncdfc Cs |}d}|r|D]}|jd|d|||d||}tj|rt|}| |r|j||dnR|j||d| |}|s|jd||d| |||d}q| |||j||d |d}qn|jd t d |S) a Create the time series NetCDF files for all USGS observations Input: outdir - the output directory suffix - suffix of the filename Return: Total number of time series files created rzMaking time series: /z has no change!z updated!z RFCHelper :z is not mergedr z created!zSkip making time series for z - no data)r/r infogetSeriesNCFileNameospathisfiler fromNetCDFcomparemergeOldtoNetCDF startTime isoformat) routdirsuffixseriescountsZseriesfilenameZ oldseriesZismergedrrrmakeAllTimeSerieshsR         zRFCHelper.makeAllTimeSeriesN)r0) r __module__ __qualname____doc__rrrrr/rBrrrrrs r) r4r stringrrdateutil.parserdateutilshutilrrrrrrrs