Esempio n. 1
0
def a2(m, x, y, nbin):
    rcil = np.sqrt(x**2 + y**2)
    rbin, nodos = bines.rbin1(rcil, nbin)

    A2v = np.ndarray(nbin)
    phiv = np.ndarray(nbin)

    n = len(x)
    delta = n / nbin

    r_sort = np.sort(rcil)

    for j in range(0, nbin):
        mask, = np.where((rcil > r_sort[j * (delta - 1)])
                         & (rcil <= r_sort[(delta - 1) * (j + 1)]))

        xn = x[mask]
        yn = y[mask]

        titaj = np.arctan2(yn, xn)

        a0 = np.sum(m[mask])
        a2 = np.sum(m[mask] * np.cos(2. * titaj))
        b2 = np.sum(m[mask] * np.sin(2. * titaj))

        A2v[j] = np.sqrt(a2**2 + b2**2) / a0
        phiv[j] = np.arctan2(b2, a2) / 2.

    return A2v, phiv, rbin
Esempio n. 2
0
def a2max(m,x,y,nbin):
    rcil = np.sqrt(x**2 + y**2)
    rbin, nodos = bines.rbin1(rcil, nbin)
    
    A2v  = np.ndarray(nbin)
    phiv = np.ndarray(nbin)
    
    n = len(x)
    delta = n / nbin
    
    r_sort = np.sort(rcil)
    
    for j in range(0, nbin):
        mask, = np.where((rcil > r_sort[j*(delta-1)]) & (rcil <= r_sort[(delta-1)*(j+1)]))
        
        xn = x[mask]
        yn = y[mask]
        
        titaj = np.arctan2(yn,xn)
        
        a0 = np.sum(m[mask])
        a2 = np.sum(m[mask]*np.cos(2.*titaj))
        b2 = np.sum(m[mask]*np.sin(2.*titaj))
        
        A2v[j]  = np.sqrt(a2**2 + b2**2) / a0
        phiv[j] = np.arctan2(b2,a2) / 2.
        
    A2max_arg = np.argmax(A2v)
    
    A2max   = A2v[A2max_arg]
    rbinmax = rbin[A2max_arg]
    phimax  = phiv[A2max_arg]
    phimed  = np.mean([phiv[A2max_arg],phiv[A2max_arg+1],phiv[A2max_arg-1],phiv[A2max_arg+2],phiv[A2max_arg-2]])
 
    return A2max, rbinmax, phimax, phimed 
Esempio n. 3
0
def a2max(m, x, y, nbin):

    Rcil = np.sqrt(x**2 + y**2)
    rbin = bines.rbin1(Rcil, nbin)

    A2v = np.ndarray(nbin)
    phiv = np.ndarray(nbin)

    for j in range(0, nbin - 1):
        mask, = np.where((Rcil > rbin[j]) & (Rcil <= rbin[j + 1]))

        xn = x[mask]
        yn = y[mask]

        titaj = np.arctan2(yn, xn)

        a0 = sum(m[mask])
        a2 = sum(m[mask] * np.cos(2. * titaj))
        b2 = sum(m[mask] * np.sin(2. * titaj))

        A2v[j] = np.sqrt(a2**2 + b2**2) / a0
        phiv[j] = np.arctan2(b2, a2) / 2.

    A2max_arg = np.argmax(A2v)

    A2max = max(A2v)
    rbinmax = rbin[A2max_arg]
    phimax = phiv[A2max_arg]

    return A2max, rbinmax, phimax
def met(R, z, FeH, nbin):

    med, nodos = bines2.rbin1(R, nbin)

    Fe_H = np.zeros(nbin)

    for i in range(nbin):

        mask, = np.where((R < nodos[i + 1]) & (R > nodos[i]) & (z > 0))

        Fe_H[i] = np.median(FeH[mask])

    return med, Fe_H
Esempio n. 5
0
def vol_density(r, m, nbin):
    
    med, nodos = bines2.rbin1(r, nbin)
    
    rho = np.zeros(nbin)
    
    for i in range(nbin):
        vol = (4/3.)*np.pi*(nodos[i+1]**3 - nodos[i]**3)
        
        mask, = np.where((r < nodos[i+1]) & (r > nodos[i]))
        
        rho[i] = np.sum(m[mask])/vol
        
    return rho, med
Esempio n. 6
0
def Vc_bin(r, m, nbin, G=4.299e-6):

    med, nodos = bines2.rbin1(r, nbin)

    Vcir = np.zeros(nbin)

    for i in range(nbin):
        limit = np.where(r < med[i])

        M = np.sum(m[limit])

        Vcir[i] = np.sqrt(G * M / med[i])

    return Vcir, med
Esempio n. 7
0
def surf_density(R,m,nbin):
    
    med, nodos = bines2.rbin1(R, nbin)
    
    sigma = np.zeros(nbin)
    
    for i in range(nbin):
        area = np.pi*(nodos[i+1]**2 - nodos[i]**2)
        
        mask, = np.where((R < nodos[i+1]) & (R > nodos[i]))
        
        sigma[i] = np.sum(m[mask])/area
        
    return sigma, med
Esempio n. 8
0
def surf_density(R,m,nbin):
    
    if len(R) != len(m):
        print ('Error: vector lengths do not match')
        
    med, nodos = bines2.rbin1(R, nbin)
    
    sigma = np.zeros(nbin)
    
    for i in range(nbin):
        area = np.pi*np.abs(nodos[i+1]**2 - nodos[i]**2)
        
        mask, = np.where((R < nodos[i+1]) & (R > nodos[i]))
        
        sigma[i] = np.sum(m[mask])/area
        
    return sigma, med
Esempio n. 9
0
def HMSH(R,z,m,nbin):
    
    med, nodos = bines2.rbin1(R, nbin)
    
    z50 = np.zeros(nbin)
    
    for i in range(nbin):
        
        mask, = np.where((R < nodos[i+1]) & (R > nodos[i]) & (z>0))
        
        zorder = np.argsort(z[mask])
        
        zsort = z[mask][zorder]
        msort = m[mask][zorder]
        
        mtot   = np.cumsum(msort)
        m_mean, = np.where(mtot < mtot[-1]/2.)
        
        z50[i] = zsort[m_mean][-1]
        
    return med, z50
Esempio n. 10
0
def elipsoide2(x,y,z,vx,vy,vz,m,radio, nbin=20):
    

    if np.isnan(radio)== True:
        omegabar = np.nan
        goto .end
    
    r = np.sqrt(x**2 + y**2 + z**2)

    limit, = np.where(r < radio)
    
    jx = sum(m[limit]*(y[limit]*vz[limit]-z[limit]*vy[limit]))
    jy = sum(m[limit]*(z[limit]*vx[limit]-x[limit]*vz[limit]))
    jz = sum(m[limit]*(x[limit]*vy[limit]-y[limit]*vx[limit]))

    j = np.sqrt(jx**2 + jy**2 + jz**2)
    Jt = np.ndarray(3)
    Jt[0] = jx
    Jt[1] = jy
    Jt[2] = jz
    
    tensor   = ten.tenf(x[limit], y[limit], z[limit]) #calculo el tensor de forma
    matriz   = np.linalg.eig(tensor) #saco los autovalores
    autoval  = matriz[0]
    autovec  = matriz[1]

    asort  = np.argsort(autoval) #los ordeno de menor a mayor

    A = np.sqrt(autoval[asort][2]) #semiejes
    B = np.sqrt(autoval[asort][1])
    C = np.sqrt(autoval[asort][0])
    
    V1 = autovec[:,asort][:,2] 
    V2 = autovec[:,asort][:,1]
    V3 = autovec[:,asort][:,0]
    
    
    modV = np.sqrt(np.dot(V3,V3))
    tita = np.arccos(np.dot(Jt,V3)/(j*modV))
    
    if tita > np.pi/2.:
        V3 = -V3
        
    cruz = np.cross(V3,V1)
    test = np.sign(cruz) == np.sign(V2)
    if test.all() == False:
        V2 = cruz

    aa = radio #normalizo al radio que yo quiero
    bb = (B/A)*radio
    cc = (C/A)*radio
    
    pos = np.ndarray([len(x[limit]),3])
    pos[:,0] = x[limit]
    pos[:,1] = y[limit]
    pos[:,2] = z[limit]
    
    xx = np.zeros(len(x[limit]))
    yy = np.zeros(len(x[limit]))
    zz = np.zeros(len(x[limit]))
    
    xx[:] = np.dot(pos[:],V1)
    yy[:] = np.dot(pos[:],V2)
    zz[:] = np.dot(pos[:],V3)

    Relip = np.sqrt((xx/aa)**2 + (yy/bb)**2 + (zz/cc)**2) # formula del elipsoide
    mask, = np.where(Relip <= 1.)

    xn  = xx[mask]
    yn  = yy[mask]
    zn  = zz[mask]
    
    vel = np.ndarray([len(x[limit]),3])
    vel[:,0] = vx[limit]
    vel[:,1] = vy[limit]
    vel[:,2] = vz[limit]
    
    vxx = np.zeros(len(x[limit]))
    vyy = np.zeros(len(x[limit]))
    vzz = np.zeros(len(x[limit]))
    
    vxx[:] = np.dot(vel[:],V1)
    vyy[:] = np.dot(vel[:],V2)
    vzz[:] = np.dot(vel[:],V3)
    
    vxn = vxx[mask]
    vyn = vyy[mask]
    vzn = vzz[mask]

    rn = np.sqrt(xn**2 + yn**2 + zn**2)
    Rn = np.sqrt(xn**2 + yn**2)

    Vtg = (-yn*vxn + xn*vyn)/Rn

    omega = Vtg/Rn

    med, nodos = bine.rbin1(rn,nbin)
    omega_mean = np.zeros(nbin)

    for i in range(0,nbin):
        inbin, = np.where((rn > nodos[i]) & (rn < nodos[i+1]))

        omega_mean[i] = np.mean(omega[inbin])

    finterp = sint.interp1d(med,omega_mean,fill_value="extrapolate")

    omegabar = finterp(radio)
    
    label .end
    return omegabar #xn, yn, zn, V1, V2, V3, A, B, C
Esempio n. 11
0
def elipsoide(x, y, z, vx, vy, vz, radio, phi=0, nbin=20):

    if radio == np.nan:
        omegabar = np.nan
    else:
        xx = x * np.cos(phi) + y * np.sin(phi)
        yy = x * -np.sin(phi) + y * np.cos(phi)
        zz = z

        r = np.sqrt(xx**2 + yy**2 + zz**2)

        limit, = np.where(r < radio)

        tensor = ten.tenf(xx[limit], yy[limit],
                          zz[limit])  #calculo el tensor de forma
        matriz = np.linalg.eig(tensor)  #saco los autovalores
        autoval = matriz[0]
        autovec = matriz[1]

        #         print autovec, '\n'

        asort = np.sort(autoval)  #los ordeno de menor a mayor

        A = np.sqrt(asort[2])  #semiejes
        B = np.sqrt(asort[1])
        C = np.sqrt(asort[0])

        aa = radio  #normalizo al radio que yo quiero
        bb = (B / A) * radio
        cc = (C / A) * radio

        Relip = np.sqrt((xx / aa)**2 + (yy / bb)**2 +
                        (zz / cc)**2)  # formula del elipsoide
        mask, = np.where(Relip <= 1.)

        xn = x[mask]
        yn = y[mask]
        zn = z[mask]
        vxn = vx[mask]
        vyn = vy[mask]
        vzn = vz[mask]

        rn = np.sqrt(xn**2 + yn**2 + zn**2)
        Rn = np.sqrt(xn**2 + yn**2)

        Vtg = (-yn * vxn + xn * vyn) / Rn

        omega = Vtg / Rn

        med, nodos = bine.rbin1(rn, nbin)
        omega_mean = np.zeros(nbin)

        for i in range(0, nbin):
            inbin, = np.where((rn > nodos[i]) & (rn < nodos[i + 1]))

            omega_mean[i] = np.mean(omega[inbin])

        finterp = sint.interp1d(med, omega_mean, fill_value="extrapolate")

        omegabar = finterp(radio)

    return omegabar, xn, yn, zn, autovec, A, B, C