U #ùÎgžã@sbdgZddlZddlZddlmZddlmZddlm Z ddl Z d dd„Z dd „Z d d d „Z dS)Ú get_vitalséNé)Úcounter)Ú isnonempty)Ú exceptionscCs¢|dkrt d¡}zXg}g}g}t|ttfƒrJ|D]} | |  ¡¡q4n2t|tƒrd| | ¡¡n| d¡d} t   | ¡‚t |dƒ2} | D] } t   d| ¡} | d|krŽ| d| ¡krŽt|ƒdkrô| td | d | d g¡ƒ¡| | ¡qŽtd | d | d g¡ƒ|krr| td | d | d g¡ƒ¡}t| ƒt||ƒkrœtd | d | d g¡ƒ||<| ||<qŽ| td | d | d g¡ƒ¡| | ¡qŽd d „tt||ƒƒDƒ}W5QRXtƒ}t |d ƒŽ} |D]r} | ¡t| dd…| dd…ƒ}t| dd…| dd…ƒ}t| dd…| dd…ƒ}t| dd…| dd…ƒ}t| ƒdkrœ|  d| dd…| dd…| dd…| dd…||||f¡n®t| dd…| dd…ƒ}t| dd…| dd…ƒ}t| dd…| dd…ƒ}t| dd…| dd …ƒ}|  d!| dd…| dd…| dd…| dd…||||||||f ¡qØ|  d"d#¡W5QRX|jWStk rœ}ztd$|ƒW5d}~XYnXdS)%z×!Reads tcvitals @param vitalfile File to parse @param centerid Forecast center: NHC or JTWC @param stormid three character storm ID (ie.: 12L, 19W) @param yyyy Year. @param trackfile Output file.NÚpomzInvalid Center TypeÚrtz[\s]\s*rrÚéécSsg|] \}}|‘qS©r )Ú.0ÚxÚyr r ú7/lfs/h1/ops/prod/packages/hwrf.v13.2.9/ush/pom/track.pyÚ >szget_vitals..ÚwtéEéIéNéSéXé]é`z%s%s%s%s%s%s%s%s ééé$é%é*é+é_édéiénész%s%s%s%s%s%s%s%s%s%s%s%s ú%s ú9000 000 00000 000000 0000 000 0000 000 000 0000 0000z%s)ÚloggingÚ getLoggerÚ isinstanceÚlistÚtupleÚappendÚupperÚstrÚcriticalrÚPOMConfigErrorÚopenÚreÚsplitÚlenÚintÚjoinÚindexÚsortedÚziprÚupÚqckÚwriteÚvalueÚIOErrorÚprint)Z vitalfileZcenteridÚstormidÚyyyyÚ trackfileÚloggerÚvitalsÚdatesZ centeridlstZcidÚmsgÚfÚlineÚfieldsÚnÚcZr1sZr2sZr3sZr4sZr5sZr6sZr7sZr8sÚerrr r rrs„       ÿ        " $ ÿ $ ÿ cCs*t|ƒt|ƒkst|ƒdkr"d}n|}|S)z!Quality check function: if a>b or b is 999, returns -999, otherwise returns b @param astr,bstr string values containing integers a and biçz -999)r5)ÚastrZbstrZnstrr r rr;Vsr;c Cs|dkrt d¡}tj |¡r&t|ƒsD| d|¡td|ƒdSt|ƒˆ}t|dƒr}t ƒ}d}|D]N}|  |¡|  ¡|dd…|d d …krh|d d …|d d …krhd}q¸qh|  dd¡W5QRXW5QRX|r| d||f¡td||fƒdS|j SdS)a,!Removes unwanted parts of the track file from get_vitals() @param fin,fout input and output files @param ymdh date and hour of interest as a ten digit number in a string @param logger a logging.Logger for log messages @returns 0 on error, or the number of lines kept in fin otherwiseNrz%s does not exists rrTréééééé Fr%r&z%s does not Found in %s) r'r(ÚosÚpathÚexistsrÚerrorr?r1rr<r:r=) ÚfinÚfoutÚymdhrCÚfidÚforKÚwarnÚlr r rÚ track_shorten_s,     0"r_)N)N)Ú__all__Úos.pathrTr2ÚutilrÚprodutil.fileoprr rr'rr;r_r r r rÚ s    @