Exemple #1
0
def gen_ginfo(arr):

    l = arr['param'][:, 0]
    b = arr['param'][:, 1]
    plx = arr['param'][:, 2]
    pmra = arr['param'][:, 3]
    pmdec = arr['param'][:, 4]

    # correct for 0 ~ 360 jump
    if np.max(l) - np.min(l) > 180.:
        ids = np.where(l > 180.)[0]
        l[ids] -= 360.

    l0 = np.average(l)
    b0 = np.average(b)
    pmra0 = np.average(pmra)
    pmdec0 = np.average(pmdec)
    plx0 = np.average(plx)

    g0 = Galactic(l=l0 * u.degree, b=b0 * u.degree)
    gs = Galactic(l=l * u.degree, b=b * u.degree)

    rs = g0.separation(gs).degree
    r_max = np.max(rs)

    dpm = np.sqrt((pmra - pmra0)**2 + (pmdec - pmdec0)**2)
    dpm_max = np.max(dpm)

    dplx_max = np.max(np.abs(plx - plx0))

    tpl = [len(arr), l0, b0, r_max, pmra0, pmdec0, dpm_max, plx0, dplx_max]
    return tpl
Exemple #2
0
def is_overlap(g0, g1):

    fac = 1.0

    p0 = Galactic(l=g0[1] * u.degree, b=g0[2] * u.degree)
    p1 = Galactic(l=g1[1] * u.degree, b=g1[2] * u.degree)
    dr = p0.separation(p1).degree
    if dr > (g0[3] + g1[3]) * fac:
        return False

    dpm = np.sqrt((g0[4] - g1[4])**2 + (g0[5] - g1[5])**2)
    if dpm > (g0[6] + g1[6]) * fac:
        return False

    dplx = np.abs(g0[7] - g1[7])
    if dplx > (g0[8] + g1[8]) * fac:
        return False

    return True
Exemple #3
0
    def fof(self):

        tree = self.build_tree()
        nloop = 0
        while self.nassigned < self.nstar:

            for i in range(self.nstar):
                if self.s2g[i] > 0:
                    continue
                ids = tree.query_radius([self.X[i]], r=self.b_fof)[0]
                gid = -1
                for k in ids:
                    if self.s2g[k] >= 0:
                        gid = self.s2g[i]
                        break
                if gid < 0:
                    self.groups.append([])
                    gid = self.ngroup
                    self.ngroup += 1

                self.update_neighbor(gid, ids)

            nloop += 1
            print 'loop %d: %d stars assigned, %d groups' % \
                (nloop, self.nassigned, self.ngroup)

        self.clear_group()
        print '%d groups constructed.' % (self.ngroup)

        ginfo0 = []
        lens = []
        l_key = []
        for grp in self.groups:
            if len(grp) < n_star_min:
                continue

            lens.append(len(grp))

            l = self.l[grp]
            b = self.b[grp]
            plx = self.plx[grp]
            pmra = self.pmra[grp]
            pmdec = self.pmdec[grp]
            l_key.append(self.keys[grp])

            # 0 to 360 jump of l has been corrected.
            l0 = np.average(l)
            b0 = np.average(b)
            pmra0 = np.average(pmra)
            pmdec0 = np.average(pmdec)
            plx0 = np.average(plx)

            g0 = Galactic(l=l0 * u.degree, b=b0 * u.degree)
            gs = Galactic(l=l * u.degree, b=b * u.degree)

            rs = g0.separation(gs).degree
            r_max = np.max(rs)

            dpm = np.sqrt((pmra - pmra0)**2 + (pmdec - pmdec0)**2)
            dpm_max = np.max(dpm)

            dplx_max = np.max(np.abs(plx - plx0))

            #            tpl =   (l0, b0, r_max, pmra0, pmdec0, dpm_max, plx0, dplx_max, grp, seg)
            tpl = [
                len(grp), l0, b0, r_max, pmra0, pmdec0, dpm_max, plx0, dplx_max
            ]
            ginfo0.append(tpl)

        ids = np.argsort(lens)[::-1]
        l_key1 = []
        ginfos = []
        for id in ids:
            ginfos.append(ginfo0[id])
            l_key1.append(l_key[id])

        return ginfos, l_key1