Пример #1
0
def getCorrelation2InRotatedFrame(beta,vals):
    # lon0, lat0 : main vehicle lat and lon used as initial conditions for debris propagation
    # beta : main vehicle heading angle (counterclockwise starting East) [deg]
    
    lonlat = vals[0]
    nSamples = vals[1]
    lon0 = vals[2]
    lat0 = vals[3]
    R1 = Rotz(lon0*np.pi/180.) # generating rotation matrices
    R2 = Roty(-lat0*np.pi/180.)
    R3 = Rotx(beta*np.pi/180.)
    
    Uint = np.dot(R2,R1)
    U  = np.dot(R3,Uint)
    UT = U.T
    xyz,x,y,z = getxyz(lonlat)
    pqr = np.dot(U,xyz) # rotating point to new frame...(P frame)
    p = pqr[0,:] 
    q = pqr[1,:]
    r = pqr[2,:]
    lonlatPframe = getlonlat(p,q,r)
    lonlatPframe = lonlatChecks.fixlon4pdf(lonlatPframe,nSamples)
    mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
    #D,Ulocal = np.linalg.eig(covar)
    #lonlatAframe = np.dot(lonlatPframe,Ulocal) 
    #lonlatAframe = lonlatChecks.fixlon4pdf(lonlatAframe,nSamples)
    
    #mean,covar = meancov.meancovmatrix(lonlatAframe,nSamples)
    sigma1 = (covar[0,0])**.5
    sigma2 = (covar[1,1])**.5
    correlation = covar[0,1]/(sigma1*sigma2)
    #print sigma1,sigma2,correlation

    return abs(correlation)*sigma2 # objective function for optimization part (minimizing rho) 
Пример #2
0
def pdfSetup(lonlat=None,nSamples=None,delta=None,nsigma=None,pdfoption=None):
         

    # lon0, lat0 : main vehicle lat and lon used as initial conditions for debris propagation
    # beta : main vehicle heading angle (counterclockwise starting East) [deg]
    #import time

    xyz,x,y,z = getxyz(lonlat)
    xmean = np.mean(x)
    ymean = np.mean(y)
    zmean = np.mean(z)
    mag = (xmean**2+ymean**2+zmean**2)
    lonlat0 = getlonlat(xmean/mag,ymean/mag,zmean/mag)
    lon0 = lonlat0[0,0]
    lat0 = lonlat0[0,1]
    beta = 0 # initial guess
    beta = optimizeHeadingAngle(lonlat,nSamples,lon0,lat0,beta)

    R1 = Rotz(lon0*np.pi/180.) # generating rotation matrices
    R2 = Roty(-lat0*np.pi/180.)
    R3 = Rotx(beta*np.pi/180.)
    transformDetails = [R1,R2,R3,lon0,lat0,beta]

    Uint = np.dot(R2,R1)
    U  = np.dot(R3,Uint)
    lonlatPframe = originalFrame2Pframe(lonlat,U)

    # error check for this case not yet implemented

    #mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
    #D,Ulocal = np.linalg.eig(covar)

    #lonlatAframe = np.dot(lonlatPframe,Ulocal) 

    #    ZZ = meancov.normalbivariate(mean,covar,XX,YY,xlen,ylen) #fortran version
    if pdfoption.lower()=='kde' or pdfoption.lower()=='kernel':
        xMeshP,yMeshP,xlen,ylen,areaInt= statsPython.areaOfInterestKDE(lonlatPframe,nMesh = 50) # A frame could also be used
        #xMeshP,yMeshP,xlen,ylen,areaInt = statsPython.areaOfInterestKDE(lonlatPframe,delta) # A frame could also be used

    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
        xMeshP,yMeshP,xlen,ylen = statsPython.areaOfInterest(mean,covar,delta,nsigma)
            
            
            
    lonlatPframeMesh = np.zeros((np.size(xMeshP),2))
    lonlatPframeMesh[:,0] = np.reshape(xMeshP,np.size(xMeshP))
    lonlatPframeMesh[:,1] = np.reshape(yMeshP,np.size(yMeshP))

            
    lonlatOrFrameMesh = Pframe2originalFrame(lonlatPframeMesh,U)
    lonOrMesh = np.reshape(lonlatOrFrameMesh[:,0],np.shape(xMeshP))
    latOrMesh = np.reshape(lonlatOrFrameMesh[:,1],np.shape(xMeshP))


    return (lonlatPframe,lonOrMesh,latOrMesh,U,xMeshP,yMeshP,transformDetails,areaInt)
Пример #3
0
def getPDFfromSetup(pdfoption,lonlatPframe,xMeshP,yMeshP):
    
    row,col = np.shape(xMeshP)
    if pdfoption.lower()=='kde' or pdfoption.lower()=='kernel':
        ZZpdfPframe = SK.serialK(int(nSamples),lonlatPframe,row,col,xMeshP,yMeshP,.0,0)
    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        nSamples,dims = np.shape(lonlatPframe)
        if dims!=2:
            print 'Error in lonlatPframe, dimensions are not correct'
            print 'Check inputs to getPDFfromSetup in casualtyEstimate.py'
            exit() 
        mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
        ZZpdfPframe = meancov.normalbivariate(mean,covar,xMeshP,yMeshP,col,row) #fortran version    
    return ZZpdfPframe
Пример #4
0
def getPDFfromSetup(pdfoption, lonlatPframe, xMeshP, yMeshP):

    row, col = np.shape(xMeshP)
    if pdfoption.lower() == 'kde' or pdfoption.lower() == 'kernel':
        ZZpdfPframe = SK.serialK(int(nSamples), lonlatPframe, row, col, xMeshP,
                                 yMeshP, .0, 0)
    elif pdfoption == 'normal' or pdfoption == 'gaussian' or pdfoption == 'gauss':
        nSamples, dims = np.shape(lonlatPframe)
        if dims != 2:
            print 'Error in lonlatPframe, dimensions are not correct'
            print 'Check inputs to getPDFfromSetup in casualtyEstimate.py'
            exit()
        mean, covar = meancov.meancovmatrix(lonlatPframe, nSamples)
        ZZpdfPframe = meancov.normalbivariate(mean, covar, xMeshP, yMeshP, col,
                                              row)  #fortran version
    return ZZpdfPframe
Пример #5
0
def getPDF4KLDiv(lonlat, nSamples, pdfoption, lonMesh, latMesh, R1, R2, R3,
                 xlen, ylen):
    # lon0, lat0 : main vehicle lat and lon used as initial conditions for debris propagation
    # beta : main vehicle heading angle (counterclockwise starting East) [deg]
    # this routine should only be used for KL Divergence check.
    # SIMPLE MODIFICATION FROM pdfCoordTrans.py

    xyz, x, y, z = pdf.getxyz(lonlat)

    Uint = np.dot(R2, R1)
    U = np.dot(R3, Uint)
    #U = Uint
    UT = U.T
    pqr = np.dot(U, xyz)  # rotating point to new frame...(P frame)

    p = pqr[0, :]
    q = pqr[1, :]
    r = pqr[2, :]
    lonlatPframe = pdf.getlonlat(p, q, r)
    lonlatPframe = lonlatChecks.fixlon4pdf(lonlatPframe, nSamples)
    '''
    mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
    #print 'Mean in P frame =',mean
    D,Ulocal = np.linalg.eig(covar)
    
    
    
    lonlatAframe = np.dot(lonlatPframe,Ulocal) 
    #lonlatAframe = lonlatChecks.fixlon4pdf(lonlatAframe,nSamples)
    
    mean,covar = meancov.meancovmatrix(lonlatAframe,nSamples)
  
    
    
    if pdfoption=='KDE':
        ZZpdf = meancov.kde(lonlatAframe,XX,YY,[nSamples, xlen,ylen])
    elif pdfoption=='normal':
        ZZpdf = meancov.normalbivariate(mean,covar,XX,YY,xlen,ylen) #fortran version
    '''

    lonVec = np.reshape(lonMesh, np.size(lonMesh))
    latVec = np.reshape(latMesh, np.size(latMesh))
    lonlatVec = np.zeros((len(lonVec), 2))
    lonlatVec[:, 0] = lonVec
    lonlatVec[:, 1] = latVec
    lonlatVecP = pdf.originalFrame2Pframe(lonlatVec, U)
    ylen, xlen = np.shape(lonMesh)
    lonMeshP = np.reshape(lonlatVecP[:, 0], [ylen, xlen])
    latMeshP = np.reshape(lonlatVecP[:, 1], [ylen, xlen])

    pqrVec, pVec, qVec, rVec = pdf.getxyz(
        lonlatVecP)  # mesh locations in P frame

    if pdfoption == 'KDE':
        ZZpdf = meancov.kde(lonlatPframe, lonMeshP, latMeshP,
                            [nSamples, xlen, ylen])
    elif pdfoption == 'normal' or pdfoption == 'gaussian' or pdfoption == 'gauss':
        mean, covar = meancov.meancovmatrix(lonlatPframe, nSamples)
        ZZpdf = meancov.normalbivariate(mean, covar, lonMeshP, latMeshP, xlen,
                                        ylen)  #fortran version

    pdfN = pdf.transformPDF(U, pqrVec, np.pi / 180 * lonlatVec[:, 0],
                            np.pi / 180 * lonlatVec[:, 1],
                            np.reshape(ZZpdf, xlen * ylen))

    ZZpdfN = np.reshape(pdfN, [ylen, xlen])

    return (ZZpdfN)
Пример #6
0
def getPDF(lonlat,nSamples,delta,nsigma,pdfoption):
    # lon0, lat0 : main vehicle lat and lon used as initial conditions for debris propagation
    # beta : main vehicle heading angle (counterclockwise starting East) [deg]
    
    
    xyz,x,y,z = getxyz(lonlat)
    xmean = np.mean(x)
    ymean = np.mean(y)
    zmean = np.mean(z)
    mag = (xmean**2+ymean**2+zmean**2)**.5
    lonlat0 = getlonlat(xmean/mag,ymean/mag,zmean/mag)
    lon0 = lonlat0[0,0]
    lat0 = lonlat0[0,1]
    beta = 0 # initial guess
    beta = optimizeHeadingAngle(lonlat,nSamples,lon0,lat0,beta)

    R1 = Rotz(lon0*np.pi/180.) # generating rotation matrices
    R2 = Roty(-lat0*np.pi/180.)
    R3 = Rotx(beta*np.pi/180.)
    transformDetails = [R1,R2,R3,lon0,lat0,beta]
    
    Uint = np.dot(R2,R1)
    U  = np.dot(R3,Uint)
    lonlatPframe = originalFrame2Pframe(lonlat,U)
    # error check for this case not yet implemented
    
    #mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
    #D,Ulocal = np.linalg.eig(covar)

    #lonlatAframe = np.dot(lonlatPframe,Ulocal) 
    
    
    
    #    ZZ = meancov.normalbivariate(mean,covar,XX,YY,xlen,ylen) #fortran version
    if pdfoption.lower()=='kde' or pdfoption.lower()=='kernel':
        xMeshP,yMeshP,xlen,ylen,areaInt = statsPython.areaOfInterestKDE(lonlatPframe,delta) # A frame could also be used
    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
        xMeshP,yMeshP,xlen,ylen = statsPython.areaOfInterest(mean,covar,delta,nsigma)
   
        
    lonlatPframeMesh = np.zeros((np.size(xMeshP),2))
    lonlatPframeMesh[:,0] = np.reshape(xMeshP,np.size(xMeshP))
    lonlatPframeMesh[:,1] = np.reshape(yMeshP,np.size(yMeshP))
    lonlatOrFrameMesh = Pframe2originalFrame(lonlatPframeMesh,U)
    lonMesh,latMesh = getLonLatMesh(lonlatOrFrameMesh[:,0],lonlatOrFrameMesh[:,1],delta)

    lonVec = np.reshape(lonMesh,np.size(lonMesh))
    latVec = np.reshape(latMesh,np.size(latMesh))
    lonlatVec = np.zeros((len(lonVec),2))
    lonlatVec[:,0] = lonVec
    lonlatVec[:,1] = latVec
    lonlatVecP = originalFrame2Pframe(lonlatVec,U)
    ylen,xlen = np.shape(lonMesh)
    lonMeshP = np.reshape(lonlatVecP[:,0],[ylen,xlen])
    latMeshP = np.reshape(lonlatVecP[:,1],[ylen,xlen])


    pqrVec ,pVec,qVec,rVec= getxyz(lonlatVecP) # mesh locations in P frame

          
    if pdfoption.lower()=='kde' or pdfoption.lower()=='kernel':
        #ZZpdf = meancov.kde(lonlatPframe,lonMeshP,latMeshP,[nSamples, xlen,ylen])
        print 'Starting quad KDE'
        ZZpdf = SK.serialK(nSamples,lonlatPframe,ylen,xlen,lonMeshP,latMeshP,.1,1)
        print 'Done with quad KDE'
    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        ZZpdf = meancov.normalbivariate(mean,covar,lonMeshP,latMeshP,xlen,ylen) #fortran version

 
    pdfN = transformPDF(U,pqrVec,np.pi/180*lonlatVec[:,0],np.pi/180*lonlatVec[:,1],np.reshape(ZZpdf,xlen*ylen))
    ZZpdfN = np.reshape(pdfN,[ylen,xlen])
    #plt.figure()
    #plt.contourf(lonMesh,latMesh,np.reshape(pdfN,[ylen,xlen]))
    #plt.show()
    return (lonMesh,latMesh,ZZpdfN,lonMeshP,latMeshP,xlen,ylen,transformDetails,areaInt) #
Пример #7
0
def getPDF2(lonlat,nSamples,delta,nsigma,pdfoption):
    # lon0, lat0 : main vehicle lat and lon used as initial conditions for debris propagation
    # beta : main vehicle heading angle (counterclockwise starting East) [deg]
    #import time
    
    xyz,x,y,z = getxyz(lonlat)
    xmean = np.mean(x)
    ymean = np.mean(y)
    zmean = np.mean(z)
    mag = (xmean**2+ymean**2+zmean**2)
    lonlat0 = getlonlat(xmean/mag,ymean/mag,zmean/mag)
    lon0 = lonlat0[0,0]
    lat0 = lonlat0[0,1]
    beta = 0 # initial guess
    beta = optimizeHeadingAngle(lonlat,nSamples,lon0,lat0,beta)
    
    R1 = Rotz(lon0*np.pi/180.) # generating rotation matrices
    R2 = Roty(-lat0*np.pi/180.)
    R3 = Rotx(beta*np.pi/180.)
    transformDetails = [R1,R2,R3,lon0,lat0,beta]
    
    Uint = np.dot(R2,R1)
    U  = np.dot(R3,Uint)
    lonlatPframe = originalFrame2Pframe(lonlat,U)

    # error check for this case not yet implemented
    
    #mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
    #D,Ulocal = np.linalg.eig(covar)
    
    #lonlatAframe = np.dot(lonlatPframe,Ulocal) 
    
    
    #    ZZ = meancov.normalbivariate(mean,covar,XX,YY,xlen,ylen) #fortran version
    if pdfoption.lower()=='kde' or pdfoption.lower()=='kernel':
        xMeshP,yMeshP,xlen,ylen= statsPython.areaOfInterestKDE(lonlatPframe,delta) # A frame could also be used
    
    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
        xMeshP,yMeshP,xlen,ylen = statsPython.areaOfInterest(mean,covar,delta,nsigma)
    
    lonlatPframeMesh = np.zeros((np.size(xMeshP),2))
    lonlatPframeMesh[:,0] = np.reshape(xMeshP,np.size(xMeshP))
    lonlatPframeMesh[:,1] = np.reshape(yMeshP,np.size(yMeshP))
    row,col = np.shape(xMeshP)
    #print xMeshP
    if pdfoption.lower()=='kde' or pdfoption.lower()=='kernel':
        
  
        ZZpdfPframe = SK.serialK(int(nSamples),lonlatPframe,row,col,xMeshP,yMeshP,.0,0)
 
    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        ZZpdfPframe = meancov.normalbivariate(mean,covar,xMeshP,yMeshP,col,row) #fortran version    
    #ZZpdf on P frame

    
    lonlatOrFrameMesh = Pframe2originalFrame(lonlatPframeMesh,U)
    lonOrMesh = np.reshape(lonlatOrFrameMesh[:,0],[ylen,xlen])
    latOrMesh = np.reshape(lonlatOrFrameMesh[:,1],[ylen,xlen])

    '''
    print 'maxABS',np.max(np.abs(ZZpdfPframe-ZZpdfPframe0))
    plt.figure()
    plt.contourf(xMeshP,yMeshP,ZZpdfPframe)
    plt.figure()
    plt.contourf(xMeshP,yMeshP,ZZpdfPframe0)
    plt.figure()
    plt.contourf(xMeshP,yMeshP,ZZpdfPframe0-ZZpdfPframe)


    plt.figure()
    plt.plot(lonlatPframe[:,0],lonlatPframe[:,1],'x')
    plt.figure()
    plt.contourf(lonOrMesh,latOrMesh,ZZpdfPframe)
    plt.plot(lonlat[:,0],lonlat[:,1],'x')
    plt.show()
    '''
    return (xMeshP,yMeshP,ZZpdfPframe,lonOrMesh,latOrMesh,xlen,ylen,transformDetails) #
Пример #8
0
def getPDF4KLDiv(lonlat,nSamples,pdfoption,lonMesh,latMesh,R1,R2,R3,xlen,ylen):
    # lon0, lat0 : main vehicle lat and lon used as initial conditions for debris propagation
    # beta : main vehicle heading angle (counterclockwise starting East) [deg]
    # this routine should only be used for KL Divergence check. 
    # SIMPLE MODIFICATION FROM pdfCoordTrans.py
    
    xyz,x,y,z = pdf.getxyz(lonlat)

    
    
    Uint = np.dot(R2,R1)
    U  = np.dot(R3,Uint)
    #U = Uint
    UT = U.T
    pqr = np.dot(U,xyz) # rotating point to new frame...(P frame)
    
    p = pqr[0,:] 
    q = pqr[1,:]
    r = pqr[2,:]
    lonlatPframe = pdf.getlonlat(p,q,r)
    lonlatPframe = lonlatChecks.fixlon4pdf(lonlatPframe,nSamples)
    '''
    mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
    #print 'Mean in P frame =',mean
    D,Ulocal = np.linalg.eig(covar)
    
    
    
    lonlatAframe = np.dot(lonlatPframe,Ulocal) 
    #lonlatAframe = lonlatChecks.fixlon4pdf(lonlatAframe,nSamples)
    
    mean,covar = meancov.meancovmatrix(lonlatAframe,nSamples)
  
    
    
    if pdfoption=='KDE':
        ZZpdf = meancov.kde(lonlatAframe,XX,YY,[nSamples, xlen,ylen])
    elif pdfoption=='normal':
        ZZpdf = meancov.normalbivariate(mean,covar,XX,YY,xlen,ylen) #fortran version
    '''
    
    
    
    lonVec = np.reshape(lonMesh,np.size(lonMesh))
    latVec = np.reshape(latMesh,np.size(latMesh))
    lonlatVec = np.zeros((len(lonVec),2))
    lonlatVec[:,0] = lonVec
    lonlatVec[:,1] = latVec
    lonlatVecP = pdf.originalFrame2Pframe(lonlatVec,U)
    ylen,xlen = np.shape(lonMesh)
    lonMeshP = np.reshape(lonlatVecP[:,0],[ylen,xlen])
    latMeshP = np.reshape(lonlatVecP[:,1],[ylen,xlen])
    
    
    pqrVec ,pVec,qVec,rVec= pdf.getxyz(lonlatVecP) # mesh locations in P frame
    

    if pdfoption=='KDE':
        ZZpdf = meancov.kde(lonlatPframe,lonMeshP,latMeshP,[nSamples, xlen,ylen])
    elif pdfoption=='normal' or pdfoption=='gaussian' or pdfoption=='gauss':
        mean,covar = meancov.meancovmatrix(lonlatPframe,nSamples)
        ZZpdf = meancov.normalbivariate(mean,covar,lonMeshP,latMeshP,xlen,ylen) #fortran version

    pdfN = pdf.transformPDF(U,pqrVec,np.pi/180*lonlatVec[:,0],np.pi/180*lonlatVec[:,1],np.reshape(ZZpdf,xlen*ylen))
    
    ZZpdfN = np.reshape(pdfN,[ylen,xlen])

    
 
    return (ZZpdfN)