A Quick Start Guide for Minke

This tutorial will quickly walk you through the steps required to produce a waveform using one of Minke’s supported waveform generators, and is a good place to start if you’re encountering the package for the first time.

First you’ll need to import minke, you can do this by running

import minke

We’ll also need to have access to the astropy.units package, which we’ll import as u.

import astropy.units as u

This will allow us to explicitly state the units which we’re using to retrieve the waveform, for example 10 * u.solMass indicates a quantity of 10 solar masses.

Next we’ll import and set up our waveform generator

from minke.models.cbc import IMRPhenomPv2
model = IMRPhenomPv2()

The waveform generator will allow us to produce representations of the waveform in both the time and frequency domains. At the moment let’s concentrate on producing a waveform in the time domain, for which we’ll need to specify a few parameters.

parameters = {"mass_ratio": 0.7, "total_mass": 100*u.solMass, "luminosity_distance": 10*u.megaparsec}

Then to generate the waveform we use the time_domain method on the generator

data = model.time_domain(parameters)

Alternatively you can specify the parameters as keyword arguments

data = model.time_domain(mass_ratio=0.7, total_mass=100*u.solMass, luminosity_distance: 10*u.megaparsec)

Either of these will return a WaveformDict which contains the two polarisations of the waveform, plus and cross.

You can plot an individual polarisation

f = data['plus'].plot()
f.savefig("waveform.png")

The waveforms which Minke returns use gwpy timeseries to store the waveform, so it is possible to produce spectrograms, and various other useful plots which gwpy supports. For example

specgram = data['plus'].spectrogram(20, fftlength=8, overlap=4) ** (1/2.)
specgram.plot(norm='log', vmin=1e-23, vmax=1e-19)

We can also produce burst-like waveforms using the minke.models.bursts module:

For example we can produce a sine-Gaussian with

from minke.models.bursts import SineGaussian

model = SineGaussian()

parameters = {"centre_frequency": 20,
              "phase": 0,
              "eccentricity": 0,
              "q": 1.,
              "hrss": 1e-22,
              "duration": 2}

data = model.time_domain(parameters)
f = data['plus'].plot()

Normally we’ll want to be able to produce the waveform as it is received by a detector. For this we need to project the waveform onto the detector. For example, if we want to project in for LIGO Hanford we need to specify the detector, the time, sky location, polarisation angle, the initial phase, and the inclination angle of the source.

from minke.detector import AdvancedLIGOHanford

detector = AdvancedLIGOHanford()

projected = data.project(detector,
             time=1000,
             ra=1, dec=0.5,
             iota=0.4,
             phi_0=0,
             psi=0
             )

f = projected.plot()
f.savefig("projected_waveform.png")
© Copyright 2024, Daniel Williams.
Created using Sphinx 8.1.3.