DataSet: Targets observed by a Survey

DataSet: Targets observed by a Survey#

Learn how to merge target inside a survey and simulate a dataset (observed version of target’s data).

import skysurvey
import numpy as np

Build Targets#

Following what we learned in Quickstart: target, let’s create a SNeIa dataset:

  • 1 000 targets

  • observed between \(\mathrm{ra}\in[100, 200]\) deg and \(\mathrm{dec}\in[-20, 30]\)

  • with \(z<0.3\)

  • between mjd = 56 000 and 56 200

Target | data given by nature#

%%time
snia = skysurvey.SNeIa.from_draw(1_000, 
                                 zmax=0.3,
                                 tstart=58_000, tstop=58_200,
                                 radec={"ra_range":[100, 200], "dec_range":[-20,30]}, )

tip: from_draw() (like draw()) accepts that you change any model kwargs with way: param_name = kwargs. Here param_name is radec and the new kwargs are {"ra_range":[100, 200], "dec_range":[-20,30]} ; See self.model:

snia.model
{'redshift': {'func': 'draw_redshift',
              'kwargs': {'zmax': 0.3, 'rate': 23500.0, 'zmin': 0},
              'as': 'z'},
 'x1': {'func': <function SNeIaStretch.nicolas2021 at 0x1a3a034c0>,
        'kwargs': {}},
 'c': {'func': <function SNeIaColor.intrinsic_and_dust at 0x1a3a03420>,
       'kwargs': {}},
 't0': {'func': <bound method Generator.uniform of Generator(PCG64) at 0x1A8CEEC00>,
        'kwargs': {'low': 58000, 'high': 58200}},
 'magabs': {'func': <function SNeIaMagnitude.tripp1998 at 0x1a3a03560>,
            'kwargs': {'x1': '@x1', 'c': '@c', 'mabs': -19.3, 'sigmaint': 0.1}},
 'magobs': {'func': 'magabs_to_magobs',
            'kwargs': {'z': '@z', 'magabs': '@magabs'}},
 'radec': {'func': <function random_radec at 0x1a3947ce0>,
           'kwargs': {'ra_range': [100, 200], 'dec_range': [-20, 30]},
           'as': ['ra', 'dec']}}

Survey#

Let’s define a random survey:

  • Observing strategy:

    • 50 000 poitings

    • starts 10 days before the first SNeIa, stops 20 days after the last

    • covers \(\mathrm{ra}\in[100, 200]\) deg and \(\mathrm{dec}\in[-20, 30]\)

    • has a skynoise \(\mathcal{N}(350,20)\)

    • has a gain of 2

    • has a zp of 30

    • observed in \(desg\), \(desr\), \(degi\)

  • footprint:

    • a 2-degree radius circle

# Observing
from skysurvey.tools import random_radec

# footprint
from shapely import geometry
footprint = geometry.Point(0,0).buffer(2) # circle centered on 0,0 with radius of 2

npointings = 50_000
mjd_range = [snia.data["t0"].min()-10, snia.data["t0"].max()+20]

seed = 1234
rng = np.random.default_rng(seed=seed)
data = {}
data["mjd"] = rng.uniform(*mjd_range, size=npointings)
data["ra"], data["dec"] = random_radec(ra_range=[100,200], dec_range=[-20, 30], size=npointings)
data["skynoise"] = rng.normal(loc=350, scale=20, size=npointings)
data["gain"] = 2
data["zp"] = 30
data["band"] = rng.choice(["desg","desr","desi"], size=npointings)
mysurvey = skysurvey.Survey.from_pointings(data, footprint=footprint)
mysurvey.show()
../_images/9ca8046f747aae2a1fd9ceb8f03fc05f1213e3bdb4f8b10cd6c373a6d99fa7b7.png

Loads a dataset#

dset = skysurvey.DataSet.from_targets_and_survey(snia, mysurvey)
dset.get_ndetection()
index
0      27
1      10
2      17
4      21
5       2
       ..
995    36
996    35
997    29
998    32
999    37
Length: 965, dtype: int64
fig = dset.show_target_lightcurve(index=4, phase_window=[-50, 200])
../_images/d5239cb32479d49908ec5c4ff84f4934da141024425ef0416ec6c970f5498820.png