Examples
===============

.. p23ready

The following examples demonstrate the functionality of the PyPDM module.

Using the Scanner
--------------------

This example demonstrates the use of the *Scanner* class.

.. IsPyAExample
::
    
    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()
