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()
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])