Exemple #1
0
def drift(lat, lon, gcomps, order=10):
    theta = numpy.deg2rad(90 - lat)
    phi = numpy.deg2rad(lon)

    declinations = numpy.empty_like(data.years)
    inclinations = numpy.empty_like(data.years)

    for i, y in enumerate(data.years):
        dec, inc, f, h = xyzfield.xyz2difh(*xyzfield.xyzfieldv2(gcomps[i, :], phi, theta, order))
        declinations[i] = dec
        inclinations[i] = inc
        intensities[i] = f

    return declinations, inclinations, intensities
Exemple #2
0
def invert_dif(thetav, phiv, data, order=13, g0=-30000, steps=5):

    g=numpy.zeros(order*(order+2)); g[0]=g0
    Ax,Ay,Az = condition_array_xyz(thetav,phiv,order)

    dec0, inc0, int0 = data

    dec0_f = dec0[~numpy.isnan(dec0)]
    inc0_f = inc0[~numpy.isnan(inc0)]
    int0_f = int0[~numpy.isnan(int0)]
    
    dif0=numpy.concatenate((dec0_f,inc0_f,int0_f))
    dif=dif0.copy()

    for iteration in range(steps):
        x,y,z=xyzfield.xyzfieldv2(g,phiv,thetav, rparam=1.0, order=order)
        #pyplot.show(xyzfield.xyzcontour(thetav,phiv,x,y,z,regular=False))
        
        dec,inc,intensity,horizontal=xyzfield.xyz2difh(x,y,z)
        
        Ad, Ai, Af = condition_array_dif(x,y,z,intensity,horizontal, Ax, Ay, Az, order)
        #remove emptys
        Ad=Ad[:,~numpy.isnan(dec0)]
        Ai=Ai[:,~numpy.isnan(inc0)]
        Af=Af[:,~numpy.isnan(int0)]

        dec=dec[~numpy.isnan(dec0)]
        inc=inc[~numpy.isnan(inc0)]
        intensity=intensity[~numpy.isnan(int0)]

        Adif=numpy.concatenate((Ad,Ai,Af), axis=1)
        dif = numpy.concatenate((dec,inc,intensity))
        
        #get delta
        delta=dif0-dif
        #g = numpy.linalg.inv(Adif @ Adif.transpose()) @ Adif @ dif0
        g = g + numpy.linalg.inv(Adif @ Adif.transpose()) @ Adif @ delta
        #print(g[:5], sum(abs(delta)))

    if (sum(abs(delta)) > 1000): warnings.warn("inversion might not have converged (╯°□°)╯︵ ┻━┻")
    return g