U

������g�����������������������@���sZ���d�dl�Z�d�dlZd�dlT�d�dlmZmZ�d�dlZd�dlmZ�d�dl	m	Z	�G�dd��d�Z
dS�)�����N)�*)�datetime�	timedelta)�copyfile)�
RFCTimeSeriesc�������������������@���sB���e�Zd�ZdZdd��Zdd��Zdd��Zdd	��Zd
d��Zdd
d�Z	dS�)�	RFCHelperzStore all RFC datac�����������������C���s����t��t�|�_||�_|�js td��d|�_|�jd�jd�|�jd�jd�f|�_|�jD�]X}|�jd�|jd�kr||jd�|�jd�f|�_|�jd�|jd�k�rN|�jd�|jd�f|�_qNdS�)z�
              Initialize the RFCHelper object for a given
             RFC forecasts 

              Input: list of forecast object
           z%FATAL ERROR: rfcForecasts has no data�����r�������N)	�logging�	getLogger�__name__�logger�rfcForecasts�RuntimeError�index�	fstPeriod�
timePeriod)�selfZrfcdata�fst��r����D/lfs/h1/ops/prod/packages/nwm.v3.0.13/ush/rfc_ingestion/RFCHelper.py�__init__���s"�����
��zRFCHelper.__init__c�����������������C���s���|�S�)z)
               The iterator
            r����r���r���r���r����__iter__7���s����zRFCHelper.__iter__c�����������������C���s6���|�j�t|�j�d�krd|�_�t�|�j�d�|�_�|�j|�j��S�)z8
               The next RFC_Forecast object
           r	���r���)r����lenr����
StopIterationr���r���r���r����__next__=���s
����zRFCHelper.__next__c�����������������C���s���|�j�S�)z�
                  Get the earlist and latest time for all observations

                  Return: Tuple of start time and end time
                )r���r���r���r���r����timePeriodForAllG���s����zRFCHelper.timePeriodForAllc�����������������C���s����g�}|�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)�isEmpty�getT0�list�map�int�getSyntheticValuesr����get5CharStationIDr����getTimeStepInSeconds�getStartTime�getValuesInCMS�
getQuality�getQueryTime�missVal�append)r���Z
timeseriesr����	timestamp�
syntheticsZ
timeSeriesr���r���r����makeTimeSeriesO���s$�����
zRFCHelper.makeTimeSeries�RFCTimeSeries.ncdfc�����������	������C���s ��|�����}d}|�r|D�]�}|�j�d|�d�|�|����|d�|�|��}tj�|�r�t�|�}|�	|�r�|�j�|�|�d���nR|�j�|�|�d���|�
|�}|s�|�j�d|�|��d���|�||��|d�}q|�||��|�j�|�|�d	���|d�}qn|�j�d
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
            r���zMaking time series:  �/z has no change!z	 updated!zRFCHelper :z is not mergedr	���z	 created!zSkip making time series for z
 - no data)r/���r
����info�getSeriesNCFileName�os�path�isfiler����
fromNetCDF�compare�mergeOld�toNetCDF�	startTime�	isoformat)	r����outdir�suffix�series�count�sZseriesfilenameZ	oldseriesZismergedr���r���r����makeAllTimeSeriesh���sR�������

��
��
���zRFCHelper.makeAllTimeSeriesN)r0���)
r����
__module__�__qualname__�__doc__r���r���r���r���r/���rB���r���r���r���r���r������s���
r���)r4���r
����stringr���r����dateutil.parser�dateutil�shutilr���r���r���r���r���r���r����<module>���s���