Tutorial: Signal sets with an SNR cut-off

While Minke’s primary purpose is to produce MDC sets for analysis, it is also capable of producing sets of simulation signals for more general purposes.

In this tutorial we’ll make a set of SineGaussian signals, and impose an SNR threshold on the waveforms which are included in the set, with regards to the PSD from the detector.

We’ll start by importing minke::
>>> from minke import mdctools, distribution, sources, noise

Then we can create the signal Set. To do that we need to tell Minke which interferometers are being simulated. We’ll assume we’re simulating the O1 configuration, which was LIGO Livingston, and LIGO Hanford (4km).:

>>> mdcset = mdctools.MDCSet(['L1', 'H1'])
Next we define a distribution for the times of the injections. Here we’ll produce 1000 signals over the entire O1 run, made randomly according to a uniform distribution over times. ::
>>> times = distribution.uniform_time(start =  1126620016, stop = 1136995216, numer = 1000)
We can also define a distribution over strains.::
>>> hrss_values = distribution.log_uniform(5e-23, 1e-20, len(times))

In order to perform thresholding of the injections according to their SNR we need to define a PSD. We can do that by loading in a file. Here we’ll use the O1 semi-analytic PSD from LIGO-P1200087.

>>> o1psd = noise.PSD("LIGO-P1200087-v18-AdV_EARLY_HIGH.txt")

Making a single injection is simple. All of the injection waveforms are located in Minke’s source module. For our Sine Gaussian we can make the injection with a single line.

>>> sg = sources.SineGaussian(q = 10, frequency=10, hrss=1e-23, time=1126630000)
We now calculate the SNRs, both the network and the individual detector SNRs. ::
>>> network, snrs = o1psd.SNR(sg, ['L1', 'H1'])
We can add this injection to our MDC set iff its network SNR > 8, using standard python syntax.::
>>> if network > 8 :
...    mdcset + sg

Of course, we need injections for the entire run, so we can set this up in a Python loop.:

>>> for hrss, time in zip(hrss_values, times):
...    sg = sources.WhiteNoiseBurst(q=10, frequency=1000,
...                                  hrss=hrss, time=time)
...    network, snrs = o1psd.SNR(sg, ['L1', 'H1'])
...    if network > 8 :
...       mdcset + sg

Now that we have the MDC set (and it might take a while, especially for white noise burst sets), we can produce the various data products that we need for MDC analyses.

The XML file which defines the injection set can be produced using the save_xml method of the mdcset.:

>>> mdcset.save_xml('signal_set.xml.gz')