This package implements epoch folding in pure Julia. Epoch folding is a technique used to determine the periodicity of pulsed emission, as seen from sources like pulsars, magnetars, and others. Quoting from Bachetti et a. (2021):
Let
$(t _{j}, X _{j}) \forall j = 1, \dots N$ be pairs of flux measurements$X _{j}$ at times$t _{j}$ . If we define$f$ as the candidate, and$\dot f, \ddot f, \dots$ as the frequency derivatives measured at a reference time$t _{\mathrm{ref}}$ , we calculate the pulse phase of each$X _{j}$ as:
$$\phi _{j}(t) = \phi _{0} + f(t _{j} - t _{\mathrm{ref}}) + 0.5 \dot{f} (t _{j} - t _{\mathrm{ref}})^{2} + \cdots ,$$ where
$\phi _{0}$ is the pulse phase at$t _{\mathrm{ref}}$ , which is set to zero for unknown or candidate pulsars. [...] The folded or pulsed profile is then a histogram of these phases falling into$N _{\mathrm{bin}}$ equal phase bins between zero and$2\pi$ , weighted by the flux in each sample:
$$p _{i} = \sum _{j = 1} ^{N} X _{j} \theta (\phi _{j} - \phi _{\mathrm{mid}, i}), \quad i = 1, \dots, N _{\mathrm{bin}},$$ where
$$\phi _{\mathrm{mid}, i} = 2\pi \frac{i - 0.5}{N _{\mathrm{bin}}}$$ is the phase corresponding to the middle of bin
$i$ and
$$ \theta (x) = \begin{cases} 1, & \text{if}\ |x| < 0.5 / N _{\mathrm{bin}} \\ 0, & \text{otherwise.} \end{cases} $$
While the approach described above is the most common way to fold radio data, some software packages like PRESTO
use a slightly different approach: they assume that each sample is finite in duration and "drizzle" it over the appropriate pulse phase bins. Both approaches are implemented in this package; in fact, the code for both approaches is almost directly inspired from the code in PRESTO
, with the occasional change made for Julia. Like PRESTO
, this code also calculates and returns the statistics associated with the folded profile, including the
Here is an example of using EpochFolding.jl
to fold data for the pulsar B1929+10:
Install it by typing and running:
] add EpochFolding
in the Julia REPL.