U g-%@s|ddlZddlZddlZddlZddlTddlmZmZddlZddlZddl Z ddl Z d ddZ dd Z Gd d d ZdS) N)*)datetime timedelta& .>cCsz|dks|dkrtd||kr$dSt|s8t|r4szdict_compare..)setkeys intersectiondictr) rrZd1_keysZd2_keysZintersect_keysaddedremovedmodifiedrZf0f1f2samerrr dict_compare's    r%c@seZdZdZdZdZdZdZdZdZ dZ d Z d Z d d Z d dZddZddZddZddZddZddZddZd%ddZed d!Zd"d#Zd$S)& TimeSliceCz Description: Store one time slice data (from Canadian data) Author: Tim Hunter (tim.hunter@noaa.gov) drawing HEAVILY on original code by Zhengtao Cui (Zhengtao.Cui@noaa.gov) Date: Feb 15, 2018 z"WSC station id padded to length 15UTCzYYYY-MM-DD_HH:mm:ss UTCzm^3/sz!Discharge.cubic_meters_per_second-z/Discharge quality 0 to 100 to be scaled by 100.cCs |jtjd|_||_||_dS)Ntzinfo)replacepytzr)centralTimeStampsliceTimeResolutionobvStationTimeValue)selfZ time_stamp resolutionZstation_time_valuerrr__init__HszTimeSliceC.__init__cCs|j Sr)r1)r2rrrisEmptyNszTimeSliceC.isEmptycCs6|jD]*}td|j|d|d|dqdS)NzSlice: central time: rrr)r1printr/ isoformat)r2errrprint_station_time_valueQs  z#TimeSliceC.print_station_time_valuecCsg}|jD]z}|t|ddd|D]V}t||jkrbtt||jD]}|ddqNq,t||jkr,|d|jd}q,q |S)Nr r)r1appendlistlenstationIdStrLenrangeinsert)r2ZstationLr8sirrr getStationIDsWs zTimeSliceC.getStationIDscCs"g}|jD]}||dq |S)Nrr1r<)r2valuesr8rrrgetDischargeValuescs zTimeSliceC.getDischargeValuescCs,g}|jD]}|t|ddq |S)Nr%Y-%m-%d_%H:%M:00)r1r<r=strftime)r2Zobvtimesr8rrrgetDischargeTimesis zTimeSliceC.getDischargeTimescCs,g}|jD]}|t|dq |S)Nr)r1r<calendarZtimegm utctimetuple)r2Zqtimesr8rrr getQueryTimesos zTimeSliceC.getQueryTimescCsB|jjdd|jjd}|jdtt|dd}|S)N<z%Y-%m-%d_%H_%M_00.rzmin.wscTimeSlice.ncdf)r0dayssecondsr/rIstrintzfill)r2ZtvalfilenamerrrgetSliceNCFileNameus zTimeSliceC.getSliceNCFileNamecCs"g}|jD]}||dq |S)NrE)r2Zdqr8rrrgetDischargeQuality{s zTimeSliceC.getDischargeQuality./c Cs|d|}tj|ddd}|d|j|dd|d|j|dd d }||jd d |d d d}||j |j d |ddd}||j |j d |ddd}||j |jdd|ddd}|ddi|jjdd|jjd} |td|jdtt| dd||dd<||dd<|} | |dd<||dd<||dd<|dS)N/wZNETCDF4)formatr? stationIdInd timeStrLen stationIdZS1)r]r?r*) long_nameunitstime)r]r^ dischargeZf4)r]discharge_qualityZi2z0.01)r`raZ multfactor queryTimeZi4raz*seconds since 1970-01-01 00:00:00 local TZrNrOrHr)ZfileUpdateTimeUTCsliceCenterTimeUTCsliceTimeResolutionMinutes)rVnetCDF4DatasetZcreateDimensionr?r^ZcreateVariableZ setncattsstationIdLong_name timeLong_nametimeUnitdischargeLong_name dischargeUnitdischargeQualityLong_namedischargeQualityUnitr0rPrQrutcnowrIr/rRrSrTrGrMrDrJrXclose) r2 outputdirfnamenc_fidr_rbrcrdreZtresstationsrrrtoNetCDFsj     zTimeSliceC.toNetCDFcCst|d}t|dd}tt|dd}t|jddd}|jddd}|jddd}|jd dd}g} t ||||D]6\} } } } | d | t | j tjd | | fq||||| S) NrrfrHrg)minutesr_rcrerdzCAN.r+)rhrirstrptimeZ getncattrrrSZ chartostringZ variableszipr<striputcfromtimestampr-r.r)rr)r2Z ncfilenameru timestampZ time_resolrvrcrequalityZstationTimeValuerBdqZqualrrr fromNetCDFs2   zTimeSliceC.fromNetCDFc Cs|j|jks|j|jkrRtd|jtd|jtd|jtd|jtdnt}|jD](}|d|d|df||d <t}q^|jD]"}|d|d|df||d <qt||\}}}}|s|sd S||g|_|D]0} |j| || d || d|| dfqd S) Nznew_cts=zold_cts=znew_res=zold_res=z9FATAL ERROR: the two time slices differ, not merging ...rrrWrFT) r/r0r6 RuntimeErrorrr1r%updater<) r2Z oldTimeSliceZsite_time_valuer8Zold_site_time_valuerr r!r$ZsiterrrmergeOlds6               zTimeSliceC.mergeOldN)rY)__name__ __module__ __qualname____doc__r?rjr^rlrkrnrmrpror4r5r9rDrGrJrMrVrXrw classmethodrrrrrrr&7s0  5 r&)rr)ossysrbrstringrrrKrhZnumpyZnpr.rr%r&rrrrs