ó
ýšÉXc           @   s¿   d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l m
 Z
 d d l m Z d d l j Z d d l m Z d	 e f d
 „  ƒ  YZ d S(   s.   
Created on Oct 24, 2016

@author: roj- LouVD
iÿÿÿÿN(   t   gmtime(   t   ProcessingUnit(   t
   Parameters(   t	   transpose(   t   cm(   t   griddatat   BLTRProcessc           B   sk   e  Z e Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d d „ Z d d d	 „ Z d d
 „ Z RS(   c   
      C   s\   t  j |  ƒ t ƒ  |  _ d } d } d } d } d } d } d } d } d }	 d |  _ d S(   s*   
        Inputs: None
           
        i    N(   R   t   __init__R   t   dataOutt   Nonet   flagfirstmode(
   t   selft   snr_valt   valuet   svalue2t   methodt   factort   filtert   npointst   status_valuet   width(    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyR   0   s    c         C   s,   |  j  j d k r( |  j j |  j  ƒ n  d  S(   NR   (   t   dataInt   typeR   t   copy(   R   (    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt   runD   s    c         C   sß  t  j  |  j j |  j j |  j j ƒ t  j d d ƒ } t  j  |  j j |  j j |  j j ƒ t  j d d ƒ t  j d d ƒ } t j | j ƒ  ƒ } t j | j ƒ  ƒ } d } |  j j	 } t
 j |  j j d d d … f | k ƒ } t
 j |  j j d d d … f | k  ƒ } g  }	 x2 | d D]& }
 |
 | d k r!|	 j |
 ƒ q!q!Wt
 j |	 d d ƒ}	 | t |	 ƒ } t |	 ƒ d k rM|  j j d d … |	 f |  _ |  j j |	 d d … d d … d d … f } |  j j d |	 d d … d d … f } |  j j d |	 d d … d d … f } |  j j d	 |	 d d … d d … f } n  | d k ro|  j d d d … f |  _ |  j j |  _ | |  _ | |  _ | |  _ | |  _ g  |  _ g  |  _ x„ |  j D]y } t j | ƒ } | j } | j } | j } | j } | j  } | j! } t  j  | | | | | | ƒ } |  j j | ƒ qÄW|  j |  j |  j |  j |  j |  j |  j f Sd |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d
 GH|  j |  j |  j |  j |  j |  j f Sd S(   sn   
        Selecting the time array according to the day of the experiment with a duration of 24 hours 
        t   hoursi   i   i    Nt   dtypet   inti   i   s   Invalid time(#   t   datetimeR   t   yeart   montht   dayt	   timedeltat   timet   mktimet	   timetuplet   doyt   numpyt   wheret   appendt   arrayt   lent	   f_timesect   data_SNRt   data_outputt   timesec1t   heightt   f_heightt   f_zont   f_mert   f_vert   f_snrt
   f_timedatet   f_timeR    t   tm_yeart   tm_mont   tm_mdayt   tm_hourt   tm_mint   tm_secR	   (   R   t   k1t   k2t
   limit_sec1t
   limit_sec2t
   valid_dataR$   t   t1t   t2t   time_selectt   val_sect   snrt   zont   mert   vert   valuett   time_tR   R   R   t   hourt   minutet   secondt   f_timedate_0(    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt
   TimeSelectI   sb    7G++.)),												.							c         C   sÿ   | d k r- | d k r- t  d j | ƒ ‚ n  | d } d j | | ƒ GHx° t |  j j ƒ D]œ } x“ t |  j j ƒ D] } |  j j | | | f | k rt t j |  j j	 d | | f <t j |  j j	 d | | f <t j |  j j	 d | | f <qt qt Wq[ Wd S(   s<   
        Inputs: snr_val - Threshold value
        
        i   i   sQ   Mode to filter should be "1" or "2". {} is not valid, check "Modetofilter" value.s5       SNR filter [mode {}]: SNR <= {}: data_output = NAi    N(
   t
   ValueErrort   formatt   rangeR   t	   nchannelst   nrangesR+   R%   t   nanR,   (   R   R   t   modetofiltert   mt   kt   r(    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt	   SnrFilterŠ   s    
c      
   C   sx  | d k r- | d k r- t  d j | ƒ ‚ n  | d } d j | | | | ƒ GHd } d }	 | d k ry |  j j d }
 nG | d	 k r˜ |  j j d }
 n( | d
 k r· |  j j d }
 n	 d GHd S| d k r|  j j } t j |  j j g |  j j g g ƒ } nK | d k rDt j |  j j g |  j j g g ƒ } |  j j } n	 d GHd S|
 } |
 d d … | f } t j t	 |  j j
 | d d … f ƒ ƒ } | d k rÍt j | ƒ } t j t	 |  j j ƒ ƒ } n  | | d d … f } | } xñt t	 | ƒ ƒ D]Ý} | r†t j | | d | ƒ| | <t j | t j | | d k ƒ | f <| t j | | d k ƒ d | t j | | d k ƒ <n  t	 t j t j | | ƒ ƒ d ƒ } |	 t	 | | d d … f ƒ } | | k rá| } n  | | k rü| d k r&| | |  j d | | d | d d ƒ } n  | d k rY| | |  j d | | d | ƒ } n  t j | t j t j | ƒ ƒ d d ƒ} | | } t j | t j | | k ƒ | f <t j | t j | d | k  ƒ | f <qüqüW| d k rût j | ƒ } n  | | d d … | f <| d k r0| |  j j d <n> | d	 k rO| |  j j d <n | d
 k rn| |  j j d <n  |  j j S(   s˜  
        Inputs:
            svalue    -  string to select array velocity
            svalue2    -  string to choose axis filtering
            method    - 0 for SMOOTH or 1 for MEDIAN
            factor    - number used to set threshold 
            filter    - 1 for data filtering using the standard deviation criteria else 0
            npoints    - number of points for mask filter
            
        i   i   sQ   Mode to filter should be "1" or "2". {} is not valid, check "Modetofilter" value.s5       Outliers Filter [mode {}]: {} {} / threshold = {}i	   gš™™™™™¹?t   zonali    t
   meridionalt   verticals   value is not definedNt   inTimet   inHeights.   svalue2 is required, either inHeight or inTimet   ddofi   t   inputR   t   edge_truncateiÿÿÿÿ(   RP   RQ   R   R,   R.   R%   R(   t   time1t   zerosR)   R!   R   RR   t   stdRU   R&   t   isfinitet   Smootht   Median(   R   RV   t   svalueR   R   R   R   R   RW   t   novalidR   t   yaxist   xaxist   output_arrayt
   value_tempt   errort   htempRe   t   ht   nvalues_validt   minvalidt   wt   dwt	   threshold(    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt   OutliersFilter   st    
*'+&;& 	-'+
"-c         C   s&  t  j | d ƒ d k r/ t | d d ƒ } n  d } g  } x– t t | ƒ ƒ D]‚ } | | k rN | t | ƒ | k  rN | | | | | d !} t  j t  j | ƒ ƒ } | | }	 t  j |	 ƒ }
 | j |
 ƒ qN qN Wt  j	 | ƒ } t  j
 | d | !| f ƒ } t  j
 | | | t | ƒ !f ƒ } | S(   s~   
        Inputs:
            input - Velocity array
            width - Number of points for mask filter
            
        i   i   i    (   R%   t   modR   RR   R)   R&   Rf   t   medianR'   R(   t   hstack(   R   Ra   R   t   pct   contt   outputt   it   new2t   tempt   newR   (    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyRh     s    "
#c         C   s!  t  j | d ƒ d k r/ | d } | d } n | } | d d } t | ƒ d } t | ƒ } t  j | d d ƒ} t  j | ƒ }	 d }
 t  j t  j | ƒ ƒ } t | d ƒ d k ré d }
 t  j t | ƒ ƒ } d | | <d | | <n  | t	 k rt  j
 | |	 | d d	 ƒ} n | t k s,| d k r“t  j
 | |	 | d d
 ƒ} t  j | d | !| f ƒ } t  j | | t | ƒ | t | ƒ !f ƒ } n  |
 rt  j
 | |	 | d d
 ƒ} t  j t  j | ƒ | f ƒ } t  j | t  j | ƒ f ƒ } t  j | t  j | d k ƒ <t  j | | <n  | S(   sÃ   
        Inputs:
            input - Velocity array
            width - Number of points for mask filter
            edge_truncate - 1 for truncate the convolution product else 
        
        i   i    i   R   t   floatg      ð?g        t   modet   samet   validg§èH.ÿï?N(   R%   Rx   R   R)   t   onest   sumR&   t   isnanRd   t   Truet   convolvet   FalseR	   Rz   RU   (   R   Ra   R   Rb   t
   real_widtht   nzerost
   half_widtht   lengtht   gatet   norm_of_gatet   nan_processt   nan_idt   pbR}   (    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyRg     s:    	

/i    i   c   <      C   sÏ  d } d } d } d } d |  j  j d | k r} d } |  j  j d k r|  j  j d k rz |  j  j d	 k  rz d
 } qz qnˆ d |  j  j d | k râ d } |  j  j d k r|  j  j d k rß |  j  j d	 k  rß d
 } qß qn# d |  j  j d | k rd } n  d } d d d d d d d
 d g }	 d }
 d } | |
 |	 | } t j | ƒ } t j | ƒ |	 | } |  j  j } | d k rt |  j  j ƒ | |  j  j } d | } | | } xL t	 |  j  j ƒ D]5 } t j | ƒ | |  j  j
 | d f | d } qÌWn  g  } g  } g  } g  } g  } x“	t	 | ƒ D]…	} | } t j |  j  j |  j  j |  j  j ƒ t j d t | | ƒ ƒ t j d d ƒ } t j |  j  j |  j  j |  j  j ƒ t j d t | | ƒ ƒ t j d d ƒ } t j | j ƒ  ƒ } t j | j ƒ  ƒ } t j |  j | k ƒ } t j |  j | k  ƒ }  g  }! x2 | d D]& }" |" |  d k rL|! j |" ƒ qLqLWt j |! d d ƒ}! t j | | ƒ }# t j |  j  j |  j  j g d d ƒt j }$ t j |  j  j |  j  j g d d ƒt j }% t j |  j  j |  j  j g d d ƒt j }& | d k r¯t j | |  j  j g d d ƒt j }' t j | |  j  j g d d ƒt j }( t j | |  j  j g d d ƒt j }) n  t |! ƒ |# k r3|  j |! }* x>t	 |  j  j ƒ D]*} xšt	 |  j  j ƒ D]†}+ t j t j |  j |! |+ | f ƒ ƒ |# k r€t j |  j |! |+ | f ƒ t j t j |  j |! |+ | f ƒ ƒ |$ |+ | f <n  t j t j |  j |! |+ | f ƒ ƒ |# k r t j |  j |! |+ | f ƒ t j t j |  j |! |+ | f ƒ ƒ |% |+ | f <n  t j t j |  j  |! |+ | f ƒ ƒ |# k rút j |  j  |! |+ | f ƒ t j t j |  j  |! |+ | f ƒ ƒ |& |+ | f <qúqúW| d k ráxxt	 | ƒ D]g}+ t j | ƒ | |+ }, t j t j |$ |, | f ƒ ƒ |# k r(t j |$ |, | f ƒ t j t j |$ |, | f ƒ ƒ |' |+ | f <n  t j t j |% |, | f ƒ ƒ |# k r–t j |% |, | f ƒ t j t j |% |, | f ƒ ƒ |( |+ | f <n  t j t j |& |, | f ƒ ƒ |# k rt j |& |, | f ƒ t j t j |& |, | f ƒ ƒ |) |+ | f <qqWqáqáW| d k r6|' }$ |( }% |) }& | } n  |* d }- |* d }. t j! |- ƒ }/ |/ j" }0 |/ j# }1 |/ j$ }2 |/ j% }3 |/ j& }4 |/ j' }5 | j t j |0 |1 |2 |3 |4 |5 ƒ ƒ t j g  ƒ }6 t j g  ƒ }7 t j g  ƒ }8 t j g  ƒ }9 |  j  j d k r±
xut	 |  j  j ƒ D]a} | d k r	t j t j( | d d d … f d k | d d d … f | k t j | d d d … f ƒ ƒ ƒ }: nc t j t j( | d d d … f | k | d d d … f d k  t j | d d d … f ƒ ƒ ƒ }: |: d }; t j) |6 | | |; f f ƒ }6 t j) |7 |$ |; | f f ƒ }7 t j) |8 |% |; | f f ƒ }8 t j) |9 |& |; | f f ƒ }9 q	W| j |6 ƒ | j |7 ƒ | j |8 ƒ | j |9 ƒ q¸t j t j( | d d d … f | k t j | d d d … f ƒ ƒ ƒ }: |: d }; t j) |6 | | |; f f ƒ }6 t j) |7 |$ |; | f f ƒ }7 t j) |8 |% |; | f f ƒ }8 t j) |9 |& |; | f f ƒ }9 | j |6 ƒ | j |7 ƒ | j |8 ƒ | j |9 ƒ q3q3W| | | | | f S(   sº   
        Inputs:
            aver - Indicates the time period over which is averaged or consensus data
            nhaver - Indicates the decimation factor in heights  
        
        i0   g®Gáz®Àg®Gáz(Àg333333Às   %2.2fg      @iÓ  i   i@   i   g      @gš™™™™™É?i   i   i   i   i   i   i   i    gš™™™™™©?g       @R   i   R   R   t   f4iÿÿÿÿNi   (*   R   t   latR   R$   R%   t   aranget
   heightListR)   t   nmodesRR   R.   R   R   R   R    R   R!   R"   R#   R&   R*   R'   R(   t   ceilRd   RT   RU   R‡   Rf   R0   t   nansumR1   R2   R    R6   R7   R8   R9   R:   R;   t   bitwise_andRz   (<   R   t   avert   nhavert   nhpointst	   lat_piurat   lat_huancayot   lat_porcuyat   hcmt   pdatat   tavert   t0t   tft   ntimet   tit
   old_heightt   num_heit   delthat	   minhvalidt   imt
   new_heightt   data_fHeigths_Listt   data_fZonal_Listt   data_fMeridional_Listt   data_fVertical_Listt   startDTListR~   R.   t   startt   stopR>   R?   RA   RB   RC   RD   Rs   t   zon_avert   mer_avert   ver_avert   new_zon_avert   new_mer_avert   new_ver_avert   time_averaget   iht   hvalidt   tstartt   tendt	   startTimeR   R   R   RK   RL   RM   t   o_heightt
   o_zon_avert
   o_mer_avert
   o_ver_avert   h_selectt   ht(    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt   AverageL  sî    $$	 

6QQ...((+.R.R.V(F(F(Q	

						%fc
#J
c   	      C   sº  | d } d j  | ƒ GH| d k p- | d k s? t d ƒ ‚ n  |  j d k r® |  j j j ƒ  |  _ |  j j j ƒ  |  _ |  j j	 j ƒ  |  _
 |  j j j ƒ  |  _ d |  _ nE |  j |  j _ |  j |  j _ |  j
 |  j _	 |  j |  j _ d |  _ |  j j d d d … f |  j _ |  j j d d … d d … | f } t | ƒ |  j _ | d k r‹|  j j d d k r‹d GHd GHd GH|  j j d d d … | f } |  j j d d d … | f } t j | d | d ƒ } t j | | ƒ } | |  j j d d d … | f <| |  j j d d d … | f <|  j j d d d … | f t j |  j j d d d … | f ƒ } d	 GHd
 Gt j | ƒ GHd	 GHn  |  j j d d … d d … | f |  j _ d S(   s  
      Inputs: 
      
          self.dataOut.data_output - Zonal, Meridional and Vertical velocity array  
          self.dataOut.height - height array
          self.dataOut.time  - Time array (seconds)
          self.dataOut.data_SNR - SNR array
  
          i   s       [Plotting mode {}]i    s    'Mode' must be egual to : 1 or 2Ni   s	   *********s   MODO 2t    t   VmagAverage(   RQ   t
   IndexErrorR
   R   R,   R   t   data_output_copyR.   t   data_height_copyR!   t   data_time_copyR+   t   data_SNR_copyR˜   R   t   counter_recordsR%   t   sqrtt   arctan2Rˆ   t   mean(	   R   t
   modeselectRW   R+   t   Vxt   Vyt   Vmagt   Vangt   prin(    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt   prePlotü  sB    
	"%"FN(   t   __name__t
   __module__R‹   t   isConfigR   R   RO   RZ   Rw   Rh   R	   Rg   RÉ   RÛ   (    (    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyR      s   			A		g	-°(   t   __doc__R%   R   R   R!   R    t   jroproc_baseR   t   schainpy.model.data.jrodataR   R   t
   matplotlibR   t   matplotlib.pyplott   pyplott   pltt   matplotlib.mlabR   R   (    (    (    sK   /home/erick/workspace/schainroot/source/schainpy/model/proc/jroproc_bltr.pyt   <module>   s   