コード例 #1
0
ファイル: test_search.py プロジェクト: abigailStev/stingray
 def test_plot_phaseogram_direct(self):
     import matplotlib.pyplot as plt
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency)
     plot_phaseogram(phaseogr, phases, times)
     plt.savefig('phaseogram_direct.png')
     plt.close(plt.gcf())
コード例 #2
0
 def test_phaseogram_mjdref_pepoch(self):
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency,
                    mjdref=57000, out_filename='phaseogram_mjdref.png',
                    pepoch=57000)
     assert np.all(times >= 57000)
     assert np.all((phases >= 0) & (phases <= 2))
コード例 #3
0
ファイル: test_search.py プロジェクト: abigailStev/stingray
 def test_phaseogram_mjdref_pepoch(self):
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency,
                    mjdref=57000, out_filename='phaseogram_mjdref.png',
                    pepoch=57000)
     assert np.all(times >= 57000)
     assert np.all((phases >= 0) & (phases <= 2))
コード例 #4
0
 def test_plot_phaseogram_direct(self):
     import matplotlib.pyplot as plt
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency)
     plot_phaseogram(phaseogr, phases, times)
     plt.savefig('phaseogram_direct.png')
     plt.close(plt.gcf())
コード例 #5
0
ファイル: test_search.py プロジェクト: abigailStev/stingray
 def test_plot_phaseogram_fromfunc(self):
     import matplotlib.pyplot as plt
     fig = plt.figure('Phaseogram from func')
     ax = plt.subplot()
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency, mjdref=57000,
                    pepoch=57000, phaseogram_ax=ax, plot=True)
     plt.savefig('phaseogram_fromfunc.png')
     plt.close(fig)
コード例 #6
0
 def test_plot_phaseogram_fromfunc(self):
     import matplotlib.pyplot as plt
     fig = plt.figure('Phaseogram from func')
     ax = plt.subplot()
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency, mjdref=57000,
                    pepoch=57000, phaseogram_ax=ax, plot=True)
     plt.savefig('phaseogram_fromfunc.png')
     plt.close(fig)
コード例 #7
0
 def test_phaseogram_weights(self):
     phaseogr, phases, times, additional_info = \
         phaseogram(self.times, self.pulse_frequency, weights=self.counts,
                    nph=16)
     assert np.all(times < 25.6)
     assert np.any(times > 25)
     assert np.all((phases >= 0) & (phases <= 2))
     import matplotlib.pyplot as plt
     fig = plt.figure('Phaseogram direct weights')
     plot_phaseogram(phaseogr, phases, times)
     plt.savefig('phaseogram_weights.png')
     plt.close(fig)
コード例 #8
0
ファイル: test_search.py プロジェクト: abigailStev/stingray
 def test_phaseogram_weights(self):
     phaseogr, phases, times, additional_info = \
         phaseogram(self.times, self.pulse_frequency, weights=self.counts,
                    nph=16)
     assert np.all(times < 25.6)
     assert np.any(times > 25)
     assert np.all((phases >= 0) & (phases <= 2))
     import matplotlib.pyplot as plt
     fig = plt.figure('Phaseogram direct weights')
     plot_phaseogram(phaseogr, phases, times)
     plt.savefig('phaseogram_weights.png')
     plt.close(fig)
コード例 #9
0
ファイル: phaseogram.py プロジェクト: astrojuan/HENDRICS
def normalized_phaseogram(norm, *args, **kwargs):
    phas, phases, times, additional_info = phaseogram(*args, **kwargs)
    if norm is None:
        pass
    elif norm == 'to1':
        minarr = np.min(phas, axis=0)
        maxarr = np.max(phas, axis=0)
        for i in range(phas.shape[0]):
            phas[i][:] -= minarr
            phas[i][:] /= (maxarr - minarr)
    elif norm == 'mediansub':
        medarr = np.median(phas, axis=0)
        for i in range(phas.shape[0]):
            phas -= medarr
    else:
        warnings.warn('Profile normalization '
                      '{} not known. Using default'.format(norm))
    return phas, phases, times, additional_info
コード例 #10
0
    def recalculate(self, event):
        dfreq, dfdot, dfddot = self._read_sliders()
        pepoch = self.pepoch

        self.fddot = self.fddot - dfddot
        self.fdot = self.fdot - dfdot
        self.freq = self.freq - dfreq

        self.phaseogr, _, _, _ = \
            phaseogram(self.ev_times, self.freq, fdot=self.fdot, plot=False,
                       nph=self.nph, nt=self.nt, pepoch=pepoch,
                       fddot=self.fddot)

        self.reset(1)

        self.fig.canvas.draw()
        print("------------------------")
        print("PEPOCH    {} + MJDREF".format(self.pepoch / 86400))
        print("F0        {}".format(self.freq))
        print("F1        {}".format(self.fdot))
        print("F2        {}".format(self.fddot))
        print("------------------------")
コード例 #11
0
def stingphase(evt_data,
               freq,
               figsize=(10, 10),
               nbins=32,
               save=False,
               pname='stingphase',
               mjd=False):
    '''
    Plots Stingray phaseogram.
    Inputs:
    -------
    evt_data
    freq
    
    figsize
    nbins: number of bins for histogram and phaseogram
    save: bool for whether or not to save plot as png
    pname: string of path and name of output png file to save
    
    TO DO:
    add option to put MJD referencce time
    '''
    plt.figure(figsize=figsize)
    gs = GridSpec(2, 1, height_ratios=(1, 3))
    ax0 = plt.subplot(gs[0])
    ax1 = plt.subplot(gs[1], sharex=ax0)
    plt.subplots_adjust(wspace=0, hspace=0)
    phaseogr, phases, times, additional_info = \
            phaseogram(evt_data['TIME'], freq, return_plot=True,nt=nbins,nph=nbins)
    mean_phases = (phases[:-1] + phases[1:]) / 2
    plot_profile(mean_phases, np.sum(phaseogr, axis=1), ax=ax0)
    _ = plot_phaseogram(phaseogr,
                        phases,
                        times,
                        ax=ax1,
                        vmin=np.median(phaseogr))
    if save:
        plt.savefig(pname + '.png', dpi=200, bbox_inches='tight')
コード例 #12
0
    def recalculate(self, event):
        self.orbital_period, self.asini, self.t0 = self._read_sliders()

        corrected_times = self.ev_times - self._delay_fun(self.ev_times)

        self.phaseogr, _, _, _ = \
            phaseogram(corrected_times, self.freq, fdot=self.fdot, plot=False,
                       nph=self.nph, nt=self.nt, pepoch=self.pepoch,
                       fddot=self.fddot)

        self._set_lines(False)
        self.pcolor.set_array(self.phaseogr.T.ravel())
        self.sasini.valinit = self.asini
        self.speriod.valinit = self.orbital_period
        self.st0.valinit = self.t0
        self.st0.valmin = self.t0 - self.orbital_period
        self.st0.valmax = self.t0 + self.orbital_period
        self.fig.canvas.draw()
        print("------------------------")
        print("PB (s)     {}  ({} d)".format(self.orbital_period,
                                             self.orbital_period / 86400))
        print("A1 (l-s)   {}".format(self.asini))
        print("T0 (MET)   {}".format(self.t0))
        print("------------------------")
コード例 #13
0
 def test_phaseogram(self):
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency)
     assert np.all(times < 25.6)
     assert np.any(times > 25)
     assert np.all((phases >= 0) & (phases <= 2))
コード例 #14
0
 def test_phaseogram_bad_weights(self):
     with pytest.raises(ValueError) as excinfo:
         phaseogr, phases, times, additional_info = \
             phaseogram(self.event_times, self.pulse_frequency,
                        weights=[0, 2])
     assert 'must match' in str(excinfo)
コード例 #15
0
ファイル: test_search.py プロジェクト: abigailStev/stingray
 def test_phaseogram_bad_weights(self):
     with pytest.raises(ValueError) as excinfo:
         phaseogr, phases, times, additional_info = \
             phaseogram(self.event_times, self.pulse_frequency,
                        weights=[0, 2])
     assert 'must match' in str(excinfo)
コード例 #16
0
    def __init__(self,
                 ev_times,
                 freq,
                 nph=128,
                 nt=128,
                 test=False,
                 pepoch=None,
                 fdot=0,
                 fddot=0,
                 **kwargs):

        self.fdot = fdot
        self.fddot = fddot
        self.nt = nt
        self.nph = nph

        self.pepoch = assign_value_if_none(pepoch, ev_times[0])
        self.ev_times = ev_times
        self.freq = freq

        self.fig, ax = plt.subplots()
        plt.subplots_adjust(left=0.25, bottom=0.30)

        corrected_times = self.ev_times - self._delay_fun(self.ev_times)
        self.phaseogr, phases, times, additional_info = \
            phaseogram(corrected_times, freq, return_plot=True, nph=nph, nt=nt,
                       fdot=fdot, fddot=fddot, plot=False, pepoch=pepoch)
        self.phases, self.times = phases, times

        self.pcolor = plt.pcolormesh(phases,
                                     times,
                                     self.phaseogr.T,
                                     cmap='magma')
        plt.xlabel('Phase')
        plt.ylabel('Time')
        plt.colorbar()
        self.lines = []
        self.line_phases = np.arange(-2, 3, 0.5)
        for ph0 in self.line_phases:
            newline, = plt.plot(np.zeros_like(times) + ph0,
                                times,
                                zorder=10,
                                lw=2,
                                color='w')
            self.lines.append(newline)

        plt.xlim([0, 2])

        axcolor = '#ff8888'
        self.slider_axes = []
        self.slider_axes.append(
            plt.axes([0.25, 0.1, 0.5, 0.03], facecolor=axcolor))
        self.slider_axes.append(
            plt.axes([0.25, 0.15, 0.5, 0.03], facecolor=axcolor))
        self.slider_axes.append(
            plt.axes([0.25, 0.2, 0.5, 0.03], facecolor=axcolor))

        self._construct_widgets(**kwargs)

        self.closeax = plt.axes([0.15, 0.020, 0.15, 0.04])
        self.button_close = Button(self.closeax,
                                   'Quit',
                                   color=axcolor,
                                   hovercolor='0.8')

        self.recalcax = plt.axes([0.3, 0.020, 0.15, 0.04])
        self.button_recalc = Button(self.recalcax,
                                    'Recalculate',
                                    color=axcolor,
                                    hovercolor='0.975')

        self.resetax = plt.axes([0.45, 0.020, 0.15, 0.04])
        self.button_reset = Button(self.resetax,
                                   'Reset',
                                   color=axcolor,
                                   hovercolor='0.975')

        self.zoominax = plt.axes([0.6, 0.020, 0.15, 0.04])
        self.button_zoomin = Button(self.zoominax,
                                    'Zoom in',
                                    color=axcolor,
                                    hovercolor='0.975')

        self.zoomoutax = plt.axes([0.75, 0.020, 0.15, 0.04])
        self.button_zoomout = Button(self.zoomoutax,
                                     'Zoom out',
                                     color=axcolor,
                                     hovercolor='0.975')

        self.button_reset.on_clicked(self.reset)
        self.button_zoomin.on_clicked(self.zoom_in)
        self.button_zoomout.on_clicked(self.zoom_out)
        self.button_recalc.on_clicked(self.recalculate)
        self.button_close.on_clicked(self.quit)

        if not test:
            plt.show()
コード例 #17
0
ファイル: test_search.py プロジェクト: abigailStev/stingray
 def test_phaseogram(self):
     phaseogr, phases, times, additional_info = \
         phaseogram(self.event_times, self.pulse_frequency)
     assert np.all(times < 25.6)
     assert np.any(times > 25)
     assert np.all((phases >= 0) & (phases <= 2))