def test_mde_sample_weak_src(dataset, models): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 10.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create( obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs, location=LOCATION, ) models[0].parameters["amplitude"].value = 1e-25 dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) assert len(events.table) == 18 assert_allclose(len(np.where(events.table["MC_ID"] == 0)[0]), len(events.table), rtol=1e-5)
def test_mde_run(dataset): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 10.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create(obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs) sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) dataset_bkg = dataset.copy() dataset_bkg.models = dataset_bkg.models[1] events_bkg = sampler.run(dataset=dataset_bkg, observation=obs) assert len(events.table) == 2422 assert_allclose(events.table["ENERGY"][0], 1.56446303986587, rtol=1e-5) assert_allclose(events.table["RA"][0], 268.8180057255861, rtol=1e-5) assert_allclose(events.table["DEC"][0], -28.45051813404372, rtol=1e-5) assert len(events_bkg.table) == 12 assert_allclose(events_bkg.table["ENERGY"][0], 1.377619454, rtol=1e-5) assert_allclose(events_bkg.table["RA"][0], 265.09135019, rtol=1e-5) assert_allclose(events_bkg.table["DEC"][0], -30.631115659801, rtol=1e-5) assert_allclose(events_bkg.table["MC_ID"][0], 0, rtol=1e-5) meta = events.table.meta assert meta["RA_PNT"] == 266.4049882865447 assert meta["ONTIME"] == 36000.0 assert meta["OBS_ID"] == 1001 assert meta["RADECSYS"] == "icrs"
def test_mde_run_switchoff(dataset, models): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 1.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create(obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs) dataset.models = models dataset.psf = None dataset.edisp = None dataset.background = None sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) assert len(events.table) == 88 assert_allclose(events.table["ENERGY"][0], 2.751205, rtol=1e-5) assert_allclose(events.table["RA"][0], 266.559566, rtol=1e-5) assert_allclose(events.table["DEC"][0], -28.742429, rtol=1e-5) meta = events.table.meta assert meta["RA_PNT"] == 266.4049882865447 assert meta["ONTIME"] == 3600.0 assert meta["OBS_ID"] == 1001 assert meta["RADECSYS"] == "icrs"
def test_events_datastore(tmp_path, dataset, models): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 10.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create( obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs, location=LOCATION, ) dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) primary_hdu = fits.PrimaryHDU() hdu_evt = fits.BinTableHDU(events.table) hdu_gti = fits.BinTableHDU(dataset.gti.table, name="GTI") hdu_all = fits.HDUList([primary_hdu, hdu_evt, hdu_gti]) hdu_all.writeto(str(tmp_path / "events.fits")) DataStore.from_events_files([str(tmp_path / "events.fits")])
def test_mde_sample_psf(dataset): sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) events = sampler.sample_psf(dataset.psf, events) assert len(events.table) == 348 assert_allclose(events.table["ENERGY_TRUE"][0], 3.536090852832, rtol=1e-5) assert events.table["ENERGY_TRUE"].unit == "TeV" assert_allclose(events.table["RA"][0], 266.2757792220, rtol=1e-5) assert events.table["RA"].unit == "deg" assert_allclose(events.table["DEC"][0], -29.030939, rtol=1e-5) assert events.table["DEC"].unit == "deg"
def test_mde_sample_psf(dataset): sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) events = sampler.sample_psf(dataset.psf, events) assert len(events.table) == 2407 assert_allclose(events.table["ENERGY_TRUE"][0], 2.2450239, rtol=1e-5) assert events.table["ENERGY_TRUE"].unit == "TeV" assert_allclose(events.table["RA"][0], 266.895383, rtol=1e-5) assert events.table["RA"].unit == "deg" assert_allclose(events.table["DEC"][0], -29.052050, rtol=1e-5) assert events.table["DEC"].unit == "deg"
def test_mde_sample_psf(dataset, models): dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) events = sampler.sample_psf(dataset.psf, events) assert len(events.table) == 88 assert_allclose(events.table["ENERGY_TRUE"][0], 2.751205, rtol=1e-5) assert events.table["ENERGY_TRUE"].unit == "TeV" assert_allclose(events.table["RA"][0], 266.556053, rtol=1e-5) assert events.table["RA"].unit == "deg" assert_allclose(events.table["DEC"][0], -28.746459, rtol=1e-5) assert events.table["DEC"].unit == "deg"
def test_irf_alpha_config(dataset, models): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-caldb/Prod5-South-20deg-AverageAz-14MSTs37SSTs.180000s-v0.1.fits.gz" ) livetime = 1.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create(obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs) dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) assert events is not None
def test_mde_sample_background(dataset): sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_background(dataset=dataset) assert len(events.table["ENERGY"]) == 15 assert_allclose(events.table["ENERGY"][0], 1.894698, rtol=1e-5) assert events.table["ENERGY"].unit == "TeV" assert_allclose(events.table["RA"][0], 266.454448, rtol=1e-5) assert events.table["RA"].unit == "deg" assert_allclose(events.table["DEC"][0], -30.870316, rtol=1e-5) assert events.table["DEC"].unit == "deg" assert_allclose(events.table["MC_ID"][0], 0, rtol=1e-5)
def test_mde_sample_sources(dataset): sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) assert len(events.table["ENERGY_TRUE"]) == 2407 assert_allclose(events.table["ENERGY_TRUE"][0], 2.245024, rtol=1e-5) assert events.table["ENERGY_TRUE"].unit == "TeV" assert_allclose(events.table["RA_TRUE"][0], 266.912888, rtol=1e-5) assert events.table["RA_TRUE"].unit == "deg" assert_allclose(events.table["DEC_TRUE"][0], -29.034641, rtol=1e-5) assert events.table["DEC_TRUE"].unit == "deg" assert_allclose(events.table["MC_ID"][0], 1, rtol=1e-5)
def test_mde_sample_edisp(dataset): sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) events = sampler.sample_edisp(dataset.edisp, events) assert len(events.table) == 348 assert_allclose(events.table["ENERGY"][0], 3.53609085283, rtol=1e-5) assert events.table["ENERGY"].unit == "TeV" assert_allclose(events.table["RA_TRUE"][0], 266.296592804, rtol=1e-5) assert events.table["RA_TRUE"].unit == "deg" assert_allclose(events.table["DEC_TRUE"][0], -29.05652195, rtol=1e-5) assert events.table["DEC_TRUE"].unit == "deg" assert_allclose(events.table["MC_ID"][0], 1, rtol=1e-5)
def test_mde_sample_edisp(dataset, models): dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) events = sampler.sample_edisp(dataset.edisp, events) assert len(events.table) == 88 assert_allclose(events.table["ENERGY"][0], 2.751205, rtol=1e-5) assert events.table["ENERGY"].unit == "TeV" assert_allclose(events.table["RA_TRUE"][0], 266.559566, rtol=1e-5) assert events.table["RA_TRUE"].unit == "deg" assert_allclose(events.table["DEC_TRUE"][0], -28.742429, rtol=1e-5) assert events.table["DEC_TRUE"].unit == "deg" assert_allclose(events.table["MC_ID"][0], 1, rtol=1e-5)
def test_mde_sample_background(dataset, models): dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_background(dataset=dataset) assert len(events.table["ENERGY"]) == 15 assert_allclose(events.table["ENERGY"][0], 1.894698, rtol=1e-5) assert events.table["ENERGY"].unit == "TeV" assert_allclose(events.table["RA"][0], 266.571824, rtol=1e-5) assert events.table["RA"].unit == "deg" assert_allclose(events.table["DEC"][0], -27.979152, rtol=1e-5) assert events.table["DEC"].unit == "deg" assert events.table["DEC_TRUE"][0] == events.table["DEC"][0] assert_allclose(events.table["MC_ID"][0], 0, rtol=1e-5)
def test_mde_sample_sources(dataset): sampler = MapDatasetEventSampler(random_state=0) events = sampler.sample_sources(dataset=dataset) assert len(events.table["ENERGY_TRUE"]) == 348 assert_allclose(events.table["ENERGY_TRUE"][0], 3.536090852832, rtol=1e-5) assert events.table["ENERGY_TRUE"].unit == "TeV" assert_allclose(events.table["RA_TRUE"][0], 266.296592804, rtol=1e-5) assert events.table["RA_TRUE"].unit == "deg" assert_allclose(events.table["DEC_TRUE"][0], -29.056521954, rtol=1e-5) assert events.table["DEC_TRUE"].unit == "deg" assert_allclose(events.table["TIME"][0], 32.73797244764, rtol=1e-5) assert events.table["TIME"].unit == "s" assert_allclose(events.table["MC_ID"][0], 1, rtol=1e-5)
def test_event_det_coords(dataset): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 1.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create( obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs ) sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) assert len(events.table) == 374 assert_allclose(events.table["DETX"][0], -2.44563584, rtol=1e-5) assert events.table["DETX"].unit == "deg" assert_allclose(events.table["DETY"][0], 0.01414569, rtol=1e-5) assert events.table["DETY"].unit == "deg"
def simulate_events(filename_model, filename_dataset, nobs): """Simulate events for a given model and dataset. Parameters ---------- filename_model : str Filename of the model definition. filename_dataset : str Filename of the dataset to use for simulation. nobs : int Number of obervations to simulate. """ log.info(f"Reading {IRF_FILE}") irfs = load_cta_irfs(IRF_FILE) log.info(f"Reading {filename_dataset}") dataset = MapDataset.read(filename_dataset) log.info(f"Reading {filename_model}") models = Models.read(filename_model) models.append(FoVBackgroundModel(dataset_name=dataset.name)) dataset.models = models # dataset.models.extend(models) sampler = MapDatasetEventSampler(random_state=0) for obs_id in np.arange(nobs): observation = Observation.create( obs_id=obs_id, pointing=POINTING, livetime=LIVETIME, irfs=irfs ) events = sampler.run(dataset, observation) path = get_filename_events(filename_dataset, filename_model, obs_id) log.info(f"Writing {path}") path.parent.mkdir(exist_ok=True, parents=True) events.table.write(str(path), overwrite=True)
def test_mde_run(dataset): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 1.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create(obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs) sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) dataset_bkg = dataset.copy() dataset_bkg.models = dataset_bkg.models[1] events_bkg = sampler.run(dataset=dataset_bkg, observation=obs) assert len(events.table) == 374 assert_allclose(events.table["ENERGY"][0], 4.09979515940, rtol=1e-5) assert_allclose(events.table["RA"][0], 263.611383742, rtol=1e-5) assert_allclose(events.table["DEC"][0], -28.89318805, rtol=1e-5) assert len(events_bkg.table) == 10 assert_allclose(events_bkg.table["ENERGY"][0], 2.84808850102, rtol=1e-5) assert_allclose(events_bkg.table["RA"][0], 266.6138405848, rtol=1e-5) assert_allclose(events_bkg.table["DEC"][0], -29.0489180785, rtol=1e-5) assert_allclose(events_bkg.table["MC_ID"][0], 0, rtol=1e-5) meta = events.table.meta assert meta["RA_PNT"] == 266.4049882865447 assert meta["ONTIME"] == 3600.0 assert meta["OBS_ID"] == 1001 assert meta["RADECSYS"] == "icrs" assert meta["ALT_PNT"] == "20.000" assert meta["AZ_PNT"] == "0.000"
def test_mde_run(dataset): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 1.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create(obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs) sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) dataset_bkg = dataset.copy() dataset_bkg.models = dataset_bkg.models[1] events_bkg = sampler.run(dataset=dataset_bkg, observation=obs) assert len(events.table) == 374 assert_allclose(events.table["ENERGY"][0], 4.09979515940, rtol=1e-5) assert_allclose(events.table["RA"][0], 263.611383742, rtol=1e-5) assert_allclose(events.table["DEC"][0], -28.89318805, rtol=1e-5) assert len(events_bkg.table) == 10 assert_allclose(events_bkg.table["ENERGY"][0], 2.84808850102, rtol=1e-5) assert_allclose(events_bkg.table["RA"][0], 266.6138405848, rtol=1e-5) assert_allclose(events_bkg.table["DEC"][0], -29.0489180785, rtol=1e-5) assert_allclose(events_bkg.table["MC_ID"][0], 0, rtol=1e-5) meta = events.table.meta assert meta["HDUCLAS1"] == "EVENTS" assert meta["EXTNAME"] == "EVENTS" assert (meta["HDUDOC"] == "https://github.com/open-gamma-ray-astro/gamma-astro-data-formats") assert meta["HDUVERS"] == "0.2" assert meta["HDUCLASS"] == "GADF" assert meta["OBS_ID"] == 1001 assert_allclose(meta["TSTART"], 0.0) assert_allclose(meta["TSTOP"], 3600.0) assert_allclose(meta["ONTIME"], 3600.0) assert_allclose(meta["LIVETIME"], 3600.0) assert_allclose(meta["DEADC"], 0.0) assert_allclose(meta["RA_PNT"], 266.4049882865447) assert_allclose(meta["DEC_PNT"], -28.936177761791473) assert meta["EQUINOX"] == "J2000" assert meta["RADECSYS"] == "icrs" assert "Gammapy" in meta["CREATOR"] assert meta["EUNIT"] == "TeV" assert meta["EVTVER"] == "" assert meta["OBSERVER"] == "Gammapy user" assert meta["DSTYP1"] == "TIME" assert meta["DSUNI1"] == "s" assert meta["DSVAL1"] == "TABLE" assert meta["DSREF1"] == ":GTI" assert meta["DSTYP2"] == "ENERGY" assert meta["DSUNI2"] == "TeV" assert ":" in meta["DSVAL2"] assert meta["DSTYP3"] == "POS(RA,DEC) " assert "CIRCLE" in meta["DSVAL3"] assert meta["DSUNI3"] == "deg " assert meta["NDSKEYS"] == " 3 " assert_allclose(meta["RA_OBJ"], 266.4049882865447) assert_allclose(meta["DEC_OBJ"], -28.936177761791473) assert_allclose(meta["TELAPSE"], 1000.0) assert_allclose(meta["MJDREFI"], 51544) assert_allclose(meta["MJDREFF"], 0.0007428703684126958) assert meta["TIMEUNIT"] == "s" assert meta["TIMESYS"] == "tt" assert meta["TIMEREF"] == "LOCAL" assert meta["DATE-OBS"] == "2000-01-01" assert meta["DATE-END"] == "2000-01-01" assert meta["TIME-OBS"] == "00:01:04.184" assert meta["TIME-END"] == "00:17:44.184" assert_allclose(meta["TIMEDEL"], 1e-09) assert meta["CONV_DEP"] == 0 assert meta["CONV_RA"] == 0 assert meta["CONV_DEC"] == 0 assert meta["MID00001"] == 1 assert meta["MID00002"] == 2 assert meta["NMCIDS"] == 2 assert meta["ALTITUDE"] == "20.000" assert meta["ALT_PNT"] == "20.000" assert meta["AZ_PNT"] == "0.000" assert meta["ORIGIN"] == "Gammapy" assert meta["CALDB"] == "1dc" assert meta["IRF"] == "South_z20_50" assert meta["TELESCOP"] == "CTA" assert meta["INSTRUME"] == "1DC" assert meta["N_TELS"] == "" assert meta["TELLIST"] == "" assert meta["GEOLON"] == "" assert meta["GEOLAT"] == ""
def test_mde_run(dataset, models): irfs = load_cta_irfs( "$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits" ) livetime = 1.0 * u.hr pointing = SkyCoord(0, 0, unit="deg", frame="galactic") obs = Observation.create(obs_id=1001, pointing=pointing, livetime=livetime, irfs=irfs) dataset.models = models sampler = MapDatasetEventSampler(random_state=0) events = sampler.run(dataset=dataset, observation=obs) dataset_bkg = dataset.copy(name="new-dataset") dataset_bkg.models = [FoVBackgroundModel(dataset_name=dataset_bkg.name)] events_bkg = sampler.run(dataset=dataset_bkg, observation=obs) assert len(events.table) == 102 assert_allclose(events.table["ENERGY"][0], 5.792375, rtol=1e-5) assert_allclose(events.table["RA"][0], 263.777097, rtol=1e-5) assert_allclose(events.table["DEC"][0], -30.302968, rtol=1e-5) assert len(events_bkg.table) == 16 assert_allclose(events_bkg.table["ENERGY"][0], 4.014328, rtol=1e-5) assert_allclose(events_bkg.table["RA"][0], 267.488623, rtol=1e-5) assert_allclose(events_bkg.table["DEC"][0], -30.924333, rtol=1e-5) assert_allclose(events_bkg.table["MC_ID"][0], 0, rtol=1e-5) meta = events.table.meta assert meta["HDUCLAS1"] == "EVENTS" assert meta["EXTNAME"] == "EVENTS" assert (meta["HDUDOC"] == "https://github.com/open-gamma-ray-astro/gamma-astro-data-formats") assert meta["HDUVERS"] == "0.2" assert meta["HDUCLASS"] == "GADF" assert meta["OBS_ID"] == 1001 assert_allclose(meta["TSTART"], 0.0) assert_allclose(meta["TSTOP"], 3600.0) assert_allclose(meta["ONTIME"], 3600.0) assert_allclose(meta["LIVETIME"], 3600.0) assert_allclose(meta["DEADC"], 1.0) assert_allclose(meta["RA_PNT"], 266.4049882865447) assert_allclose(meta["DEC_PNT"], -28.936177761791473) assert meta["EQUINOX"] == "J2000" assert meta["RADECSYS"] == "icrs" assert "Gammapy" in meta["CREATOR"] assert meta["EUNIT"] == "TeV" assert meta["EVTVER"] == "" assert meta["OBSERVER"] == "Gammapy user" assert meta["DSTYP1"] == "TIME" assert meta["DSUNI1"] == "s" assert meta["DSVAL1"] == "TABLE" assert meta["DSREF1"] == ":GTI" assert meta["DSTYP2"] == "ENERGY" assert meta["DSUNI2"] == "TeV" assert ":" in meta["DSVAL2"] assert meta["DSTYP3"] == "POS(RA,DEC) " assert "CIRCLE" in meta["DSVAL3"] assert meta["DSUNI3"] == "deg " assert meta["NDSKEYS"] == " 3 " assert_allclose(meta["RA_OBJ"], 266.4049882865447) assert_allclose(meta["DEC_OBJ"], -28.936177761791473) assert_allclose(meta["TELAPSE"], 1000.0) assert_allclose(meta["MJDREFI"], 51544) assert_allclose(meta["MJDREFF"], 0.0007428703684126958) assert meta["TIMEUNIT"] == "s" assert meta["TIMESYS"] == "tt" assert meta["TIMEREF"] == "LOCAL" assert meta["DATE-OBS"] == "2000-01-01" assert meta["DATE-END"] == "2000-01-01" assert meta["CONV_DEP"] == 0 assert meta["CONV_RA"] == 0 assert meta["CONV_DEC"] == 0 assert meta["MID00001"] == 1 assert meta["MID00002"] == 2 assert meta["NMCIDS"] == 2 assert_allclose(float(meta["ALT_PNT"]), float("-13.5345076464"), rtol=1e-7) assert_allclose(float(meta["AZ_PNT"]), float("228.82981620065763"), rtol=1e-7) assert meta["ORIGIN"] == "Gammapy" assert meta["TELESCOP"] == "CTA" assert meta["INSTRUME"] == "1DC" assert meta["N_TELS"] == "" assert meta["TELLIST"] == ""