Exemple #1
0
 def test_epoch_folding_search_expocorr_fails(self):
     """Test pulse phase calculation, frequency only."""
     frequencies = np.arange(9.8, 9.99, 0.1/self.tseg)
     with pytest.raises(ValueError) as excinfo:
         freq, stat = epoch_folding_search(self.event_times, frequencies,
                                           nbin=23, expocorr=True)
     assert 'To calculate exposure correction' in str(excinfo)
Exemple #2
0
 def test_epoch_folding_search_expocorr_fails(self):
     """Test pulse phase calculation, frequency only."""
     frequencies = np.arange(9.8, 9.99, 0.1 / self.tseg)
     with pytest.raises(ValueError) as excinfo:
         freq, stat = epoch_folding_search(self.event_times,
                                           frequencies,
                                           nbin=23,
                                           expocorr=True)
     assert 'To calculate exposure correction' in str(excinfo)
Exemple #3
0
    def test_epoch_folding_search_weights(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.8, 9.99, 0.1/self.tseg)
        freq, stat = epoch_folding_search(self.times, frequencies,
                                          nbin=16, weights=self.counts)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq[np.argmax(stat)]
        assert np.allclose(maxstatbin, frequencies[minbin], atol=0.1/self.tseg)
Exemple #4
0
    def test_epoch_folding_search_expocorr(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.8, 9.99, 0.1/self.tseg)
        freq, stat = epoch_folding_search(self.event_times, frequencies,
                                          nbin=42, expocorr=True, gti=self.gti)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq[np.argmax(stat)]
        assert np.allclose(maxstatbin, frequencies[minbin], atol=0.1/self.tseg)
Exemple #5
0
    def test_epoch_folding_search_expocorr(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.89, 9.91, 0.1/self.tseg)
        freq, stat = epoch_folding_search(self.event_times, frequencies,
                                          nbin=16, expocorr=True)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq[np.argmax(stat)]
        assert maxstatbin == frequencies[minbin]
Exemple #6
0
    def test_epoch_folding_search(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.85, 9.95, 0.1 / self.tseg)
        freq, stat = epoch_folding_search(self.event_times,
                                          frequencies,
                                          nbin=16)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq[np.argmax(stat)]
        assert maxstatbin == frequencies[minbin]
Exemple #7
0
    def test_epoch_folding_search_fdot(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.8, 9.99, 0.1/self.tseg)
        fdots = [-0.1, 0, 0.1]
        freq, fdot, stat = epoch_folding_search(self.event_times, frequencies,
                                                nbin=43, fdots=fdots)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq.flatten()[np.argmax(stat)]
        assert np.allclose(maxstatbin, frequencies[minbin], atol=0.1/self.tseg)
        maxfdot = fdot.flatten()[np.argmax(stat)]
        assert np.allclose(maxfdot, 0.0, atol=0.1/self.tseg)
Exemple #8
0
    def test_epoch_folding_search_weights(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.8, 9.99, 0.1 / self.tseg)
        freq, stat = epoch_folding_search(self.times,
                                          frequencies,
                                          nbin=16,
                                          weights=self.counts)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq[np.argmax(stat)]
        assert np.allclose(maxstatbin,
                           frequencies[minbin],
                           atol=0.1 / self.tseg)
Exemple #9
0
    def test_epoch_folding_search_expocorr(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.8, 9.99, 0.1 / self.tseg)
        freq, stat = epoch_folding_search(self.event_times,
                                          frequencies,
                                          nbin=42,
                                          expocorr=True,
                                          gti=self.gti)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq[np.argmax(stat)]
        assert np.allclose(maxstatbin,
                           frequencies[minbin],
                           atol=0.1 / self.tseg)
Exemple #10
0
    def test_epoch_folding_search_fdot(self):
        """Test pulse phase calculation, frequency only."""
        frequencies = np.arange(9.8, 9.99, 0.1 / self.tseg)
        fdots = [-0.1, 0, 0.1]
        freq, fdot, stat = epoch_folding_search(self.event_times,
                                                frequencies,
                                                nbin=43,
                                                fdots=fdots)

        minbin = np.argmin(np.abs(frequencies - self.pulse_frequency))
        maxstatbin = freq.flatten()[np.argmax(stat)]
        assert np.allclose(maxstatbin,
                           frequencies[minbin],
                           atol=0.1 / self.tseg)
        maxfdot = fdot.flatten()[np.argmax(stat)]
        assert np.allclose(maxfdot, 0.0, atol=0.1 / self.tseg)
Exemple #11
0
c1 = fits.Column(name='TIMES', array=TIME, format='D')

t = fits.BinTableHDU.from_columns([c1], name='VALUES')
t.writeto('fits_folder/' + add_space(source) + '_nustar_times.fits',
          overwrite=True)

times = TIME

print('Search for the best frequency')

# We will search for pulsations over a range of frequencies around the known pulsation period.

df = (period_ranges[1] - period_ranges[0]) / period_bins
frequencies = 1 / np.arange(period_ranges[0], period_ranges[1], df)

freq, efstat = epoch_folding_search(times, frequencies, nbin=nbin)
pulse_frequency = freq[np.where(efstat == max(efstat))[0][0]]

print('pulse frequency', pulse_frequency)
_ = write_files('pulse_frequency_NuSTAR', pulse_frequency)

#fitting epoch folding distribution with Lorentzian curve
g_init = models.Lorentz1D(
    amplitude=max(efstat) - min(efstat),
    x_0=pulse_frequency,
    fwhm=pulse_frequency / 500) + models.Const1D(amplitude=min(efstat))
fit_g = fitting.LevMarLSQFitter()
bin_max = [np.where(efstat == max(efstat))[0][0]][0]
bin_left_min = 0
bin_right_min = len(efstat)