Example #1
0
    def findGeometry(self):
        w, b, ub, e = self.spectrumOf('b')
        w, rsovera, ursovera, e = self.spectrumOf('rsovera')
        wdt, dt, udt, edt = self.spectrumOf('dt')

        colors = np.array([np.array(bin.color) for bin in self.bins])
        ok = ub > 0
        weight = ((ub)**2 + (ursovera / rsovera)**2)**(-1)
        ink_errorbar(b[ok],
                     rsovera[ok],
                     xerr=ub[ok],
                     yerr=ursovera[ok],
                     colors=colors[ok],
                     alpha=weight[ok] / max(weight[ok]))

        bestb = np.sum(b[ok] / ub[ok]**2) / np.sum(1.0 / ub[ok]**2)
        bestrsovera = np.sum(rsovera[ok] / ursovera[ok]**2) / np.sum(
            1.0 / ursovera[ok]**2)

        plt.plot(bestb, bestrsovera, 'o', markersize=20, alpha=0.5)

        ok = udt > 0.0
        bestdt = np.sum(dt[ok] / udt[ok]**2) / np.sum(1.0 / udt[ok]**2)

        return bestb, bestrsovera, bestdt
Example #2
0
    def plot(self, rvcs, xlim=(-.1, 0.1), ylim=(-15,15), binsize=6.0/24.0/60.0, title='', **kwargs):

        for rvc in rvcs:
            x, y, yerr = self.x(rvc), self.y(rvc), self.yerr(rvc)

            cmap = zachopy.cmaps.one2another(bottom='white', top='orangered')

            kw = dict(linewidth=0, elinewidth=1.5, capthick=1.5, marker='o', markersize=4, markeredgecolor='none')

            plt.sca(self.axes[self.label])

            minimumuncertainty = np.min(rvc.effective_uncertainty)
            weights = np.minimum((minimumuncertainty/rvc.effective_uncertainty)**2, 1)
            ink_errorbar(x, y, yerr, colors=cmap(weights), alpha=1, zorder=weights, **kw)
            print weights
            print cmap(weights)

            ghosts = [-1,1]
            for ghost in ghosts:
                bwcmap = zachopy.cmaps.one2another(bottom='white', top='silver')
                ink_errorbar(x+ ghost*rvc.TM.planet.period.value, y, yerr, colors=bwcmap(weights), zorder=weights, **kw)#grayscale=True,

            tm = rvc.TM


            chunks = ghosts
            chunks.append(0)
            for ghost in ghosts:
                t = np.arange(tm.planet.period.value*(-0.5 + ghost), tm.planet.period.value*(0.5 + ghost), 0.01)
                x, y = t, scale*(tm.stellar_rv(t=t + tm.planet.t0.value) - tm.star.gamma.value)
                sorted = np.argsort(x)
                x = x[sorted]
                y = y[sorted]

                if ghost == 0:
                    self.axes[self.label].plot(x, y, linewidth=1.5, alpha=1, color=cmap(0.5), zorder=0.5)
                else:
                    self.axes[self.label].plot(x, y, linewidth=1.5, alpha=1, color='lightgray', zorder=0.5)


        kw = dict(linestyle='--', linewidth=2, alpha=0.3, color='gray', zorder=-102)
        self.axes[self.label].axvline(tm.planet.period.value/2.0, **kw)
        self.axes[self.label].axvline(-tm.planet.period.value/2.0, **kw)
        xlim = rvc.TM.planet.period.value*np.array([-0.75, 0.75])
        self.axes[self.label].set_xlim(*xlim)
        self.axes[self.label].set_ylim(*ylim)
        ax = self.axes[self.label]
        plt.setp(ax.get_xticklabels(), fontsize=8)
        plt.setp(ax.get_yticklabels(), fontsize=8)
Example #3
0
    def plot(self, key, labels=False, ax=None, **kw):
        self.set(key)
        try:
            self.ax
        except AttributeError:
            self.setup(ax=ax)

        plt.sca(self.ax)
        self.ax.set_xscale(self.xscale)
        self.ax.set_yscale(self.yscale)

        rlower = np.abs(self.pop.planet_radius_lower)
        rupper = np.abs(self.pop.planet_radius_upper)
        rissmallenough = 0.5*(rlower+rupper)/self.pop.planet_radius < 1.0/1.0#2.5#/2.5
        risntzero = 0.5*(rlower+rupper) > 0.0

        mlower = np.abs( self.pop.planet_mass_lower)
        mupper = np.abs(self.pop.planet_mass_upper)
        missmallenough = 0.5*(mlower+mupper)/self.pop.planet_mass < 1.0/1.0#2.5#/2.5
        misntzero = 0.5*(mlower+mupper) > 0.0

        self.ok = (rissmallenough*risntzero*missmallenough*misntzero)
        #assert(len(self.ok) ==1)
        #self.ok = ok.nonzero()

        #self.ok = np.arange(len(self.pop.planet_mass))
        x = self.pop.planet_mass[self.ok]
        try:
            xerr = np.vstack([-self.pop.planet_mass_lower[self.ok].filled(), self.pop.planet_mass_upper[self.ok].filled()])
        except:
            xerr = np.vstack([-self.pop.planet_mass_lower[self.ok], self.pop.planet_mass_upper[self.ok]])

        y = self.pop.planet_radius[self.ok]
        try:
            yerr = np.vstack([-self.pop.planet_radius_lower[self.ok].filled(), self.pop.planet_radius_upper[self.ok].filled()])
        except:
            yerr = np.vstack([-self.pop.planet_radius_lower[self.ok], self.pop.planet_radius_upper[self.ok]])


        #print self.ok
        width=1
        kw = dict(marker='o', linewidth=0, elinewidth=width, alpha=1.0,  label=self.pop.name, color=self.pop.color, markeredgecolor=self.pop.color, capthick=width, capsize=2, markersize=3)

        #    self.ax.errorbar(x, y, xerr=xerr, yerr=yerr, **kw)

        color = self.pop.color
        r, g, b = zachopy.color.name2color(color.lower())
        n = len(x)
        rgba = np.zeros((n, 4))
        rgba[:,0] = r
        rgba[:,1] = g
        rgba[:,2] = b

        mass = x
        radius = y
        density = mass/radius**3
        merr = 0.5*(mlower + mupper)[self.ok]
        rerr = 0.5*(rlower + rupper)[self.ok]

        #density_uncertainty = np.sqrt((merr/mass)**2 + 9*(rerr/radius)**2)
        #density = mass/radius**3
        density_uncertainty = np.sqrt((merr/mass)**2 + (rerr/radius)**2)#*density

        #assert(False)
        weights = np.minimum((0.1*np.sqrt(2)/density_uncertainty)**2, 1)
        over = weights > 1
        weights[over] = 1
        kw['zorder'] = weights

        #rgba[:,3] = 1.0*weights
        rgba[:,:3] = 1.0 - (1.0 - rgba[:,:3])*weights.reshape(len(weights), 1)
        rgba[:,3] = 1.0#*weights
        #print rgba
        if len(x) > 1:
            self.speak(key)
            ink_errorbar(x, y, xerr=xerr, yerr=yerr, colors=rgba, **kw)
            #assert(False)
        else:
            kw['zorder'] = 1e6
            self.ax.errorbar(x, y, xerr=xerr, yerr=yerr, **kw)
        #l = []
        #l.extend(self.pop.name)

        #if len(self.ok) > 1:
        """
        if len(x) > 0:
            for i, name in enumerate(self.pop.name[self.ok]):
                self.ax.text(x[i], y[i], name)"""



        self.ax.set_ylim(*self.ylim)
        self.ax.set_xlim(*self.xlim)
        self.ax.set_xlabel(self.xlabel)
        self.ax.set_ylabel(self.ylabel)


        #self.ax.yaxis.set_major_formatter(plt.matplotlib.ticker.ScalarFormatter('{}'))
        #self.ax.yaxis.set_minor_formatter(plt.matplotlib.ticker.ScalarFormatter())

        if labels:
            best = np.argsort(self.size)
            for i in best[-10:]:
                try:
                    plt.text(self.x[i], self.y[i], self.pop.name[i])
                except:
                    print '!#!!@$!@$!@$'
                    print self.pop.name[i]


        plt.draw()