Examples

The following examples demonstrate the functionality of the PyPDM module.

Using the Scanner

This example demonstrates the use of the Scanner class.

from __future__ import print_function, division
# Import PDM module
from PyAstronomy.pyTiming import pyPDM

# Get Scanner instance
scanner = pyPDM.Scanner(minVal=0.5, maxVal=1.0, dVal=0.05, mode="period")
# Print the periods covered by the scanner
print("Periods: ", end=' ')
for period in scanner:
    print(period, end=' ')

Carry out a PDM analysis

Here we demonstrate how to use the pyPDM class to carry out a PDM analysis.

import numpy
import matplotlib.pylab as plt
from PyAstronomy.pyTiming import pyPDM

# Create artificial data with frequency = 3,
# period = 1/3
x = numpy.arange(100) / 100.0
y = numpy.sin(x*2.0*numpy.pi*3.0 + 1.7)

# Get a ``scanner'', which defines the frequency interval to be checked.
# Alternatively, also periods could be used instead of frequency.
S = pyPDM.Scanner(minVal=0.5, maxVal=5.0, dVal=0.01, mode="frequency")

# Carry out PDM analysis. Get frequency array
# (f, note that it is frequency, because the scanner's
# mode is ``frequency'') and associated Theta statistic (t).
# Use 10 phase bins and 3 covers (= phase-shifted set of bins).
P = pyPDM.PyPDM(x, y)
f1, t1 = P.pdmEquiBinCover(10, 3, S)
# For comparison, carry out PDM analysis using 10 bins equidistant
# bins (no covers).
f2, t2 = P.pdmEquiBin(10, S)


# Show the result
plt.figure(facecolor='white')
plt.title("Result of PDM analysis")
plt.xlabel("Frequency")
plt.ylabel("Theta")
plt.plot(f1, t1, 'bp-')
plt.plot(f2, t2, 'gp-')
plt.legend(["pdmEquiBinCover", "pdmEquiBin"])
plt.show()