Commit 703ad44e authored by Michele Maris's avatar Michele Maris
Browse files

u

parent 9b35c430
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ from .DummyCLI import DummyCLI
from .nearly_even_split import nearly_even_split
from .geometry import ElipsoidTriangulation 
from .template_subs import discoverKeys, templateFiller
from .periodic_stats import periodic_stats

#from import .grep
#import .intervalls
+29 −0
Original line number Diff line number Diff line
""" periodic stats is a collection of tools for statistics over periodic quantities """

import numpy as np

def periodic_stats(alpha,deg=False) :
    """ statistics of a periodic alpha (radiants)
    
    If alpha is a vector of angles (radiants) find the average number and the std deviation avoiding the problem of the switch between -180,180 or 360 and 0
    
    example: alpha=np.array([-180,180]) 
    
    """
    u=np.cos(alpha)
    v=np.sin(alpha)
    #
    rr=np.array([np.nanmean(u),np.nanmean(v)])
    rr=rr/rr.dot(rr)**0.5
    #
    up=rr[0]*u+rr[1]*v ;
    vp=-rr[1]*u+rr[0]*v
    #
    ap=np.rad2deg(np.arctan2(vp,up).std())
    #
    return np.arctan2(rr[1],rr[0]), np.nanvar(np.arctan2(vp,up))**0.5

if __name__=='__main__' :
   alpha_deg=np.arange(350,371)
   print(np.deg2rad(alpha-360).mean(),np.deg2rad(alpha-360).std())
   print(periodic_stats(np.deg2rad(alpha)))