def run(self, datasets): """Run light curve extraction. Normalize integral and energy flux between emin and emax. Parameters ---------- datasets : list of `~gammapy.datasets.SpectrumDataset` or `~gammapy.datasets.MapDataset` Spectrum or Map datasets. Returns ------- lightcurve : `~gammapy.estimators.FluxPoints` Light curve flux points """ datasets = Datasets(datasets) if self.time_intervals is None: gti = datasets.gti else: gti = GTI.from_time_intervals(self.time_intervals) gti = gti.union(overlap_ok=False, merge_equal=False) rows = [] valid_intervals = [] for t_min, t_max in progress_bar(gti.time_intervals, desc="Time intervals"): datasets_to_fit = datasets.select_time(time_min=t_min, time_max=t_max, atol=self.atol) if len(datasets_to_fit) == 0: log.info( f"No Dataset for the time interval {t_min} to {t_max}. Skipping interval." ) continue valid_intervals.append([t_min, t_max]) fp = self.estimate_time_bin_flux(datasets=datasets_to_fit) for name in ["counts", "npred", "npred_null"]: fp._data[name] = self.expand_map(fp._data[name], dataset_names=datasets.names) rows.append(fp) if len(rows) == 0: raise ValueError( "LightCurveEstimator: No datasets in time intervals") gti = GTI.from_time_intervals(valid_intervals) axis = TimeMapAxis.from_gti(gti=gti) return FluxPoints.from_stack( maps=rows, axis=axis, )
def gti(self): """GTI table""" time_intervals = [] for dataset in self: interval = (dataset.gti.time_start[0], dataset.gti.time_stop[-1]) time_intervals.append(interval) return GTI.from_time_intervals(time_intervals)
def run(self, datasets): """Run light curve extraction. Normalize integral and energy flux between emin and emax. Parameters ---------- datasets : list of `~gammapy.datasets.SpectrumDataset` or `~gammapy.datasets.MapDataset` Spectrum or Map datasets. Returns ------- lightcurve : `~gammapy.estimators.LightCurve` the Light Curve object """ datasets = Datasets(datasets) if self.time_intervals is None: gti = datasets.gti else: gti = GTI.from_time_intervals(self.time_intervals) gti = gti.union(overlap_ok=False, merge_equal=False) rows = [] for t_min, t_max in gti.time_intervals: datasets_to_fit = datasets.select_time(t_min=t_min, t_max=t_max, atol=self.atol) if len(datasets_to_fit) == 0: log.debug( f"No Dataset for the time interval {t_min} to {t_max}") continue row = {"time_min": t_min.mjd, "time_max": t_max.mjd} row.update(self.estimate_time_bin_flux(datasets_to_fit)) rows.append(row) if len(rows) == 0: raise ValueError( "LightCurveEstimator: No datasets in time intervals") table = table_from_row_data(rows=rows, meta={"SED_TYPE": "likelihood"}) model = datasets.models[self.source] # TODO: cleanup here... fp = FluxPoints(table, reference_spectral_model=model.spectral_model.copy()) table_flux = fp.to_table(sed_type="flux") table_flux.remove_columns(["stat", "ts", "sqrt_ts", "e_min", "e_max"]) return LightCurve(hstack([table, table_flux]))
def gti(self): """GTI table""" time_intervals = [] for dataset in self: if dataset.gti is not None and len(dataset.gti.table) > 0: interval = (dataset.gti.time_start[0], dataset.gti.time_stop[-1]) time_intervals.append(interval) if len(time_intervals) == 0: return None return GTI.from_time_intervals(time_intervals)
def run(self, datasets): """Run light curve extraction. Normalize integral and energy flux between emin and emax. Parameters ---------- datasets : list of `~gammapy.spectrum.SpectrumDataset` or `~gammapy.cube.MapDataset` Spectrum or Map datasets. Returns ------- lightcurve : `~gammapy.time.LightCurve` the Light Curve object """ datasets = Datasets(datasets) if self.time_intervals is None: gti = datasets.gti else: gti = GTI.from_time_intervals(self.time_intervals) gti = gti.union(overlap_ok=False, merge_equal=False) rows = [] for t_min, t_max in gti.time_intervals: datasets_to_fit = datasets.select_time(t_min=t_min, t_max=t_max, atol=self.atol) if len(datasets_to_fit) == 0: log.debug( f"No Dataset for the time interval {t_min} to {t_max}") continue row = {"time_min": t_min.mjd, "time_max": t_max.mjd} data = self.estimate_time_bin_flux(datasets_to_fit) row.update(data) row.update(self.estimate_counts(datasets_to_fit)) rows.append(row) if len(rows) == 0: raise ValueError( "LightCurveEstimator: No datasets in time intervals") table = table_from_row_data(rows=rows, meta={"SED_TYPE": "likelihood"}) table = FluxPoints(table).to_sed_type("flux").table return LightCurve(table)
def run(self, datasets): """Run light curve extraction. Normalize integral and energy flux between emin and emax. Parameters ---------- datasets : list of `~gammapy.datasets.SpectrumDataset` or `~gammapy.datasets.MapDataset` Spectrum or Map datasets. Returns ------- lightcurve : `~gammapy.estimators.LightCurve` the Light Curve object """ datasets = Datasets(datasets) if self.time_intervals is None: gti = datasets.gti else: gti = GTI.from_time_intervals(self.time_intervals) gti = gti.union(overlap_ok=False, merge_equal=False) rows = [] for t_min, t_max in progress_bar(gti.time_intervals, desc="Time intervals"): datasets_to_fit = datasets.select_time(t_min=t_min, t_max=t_max, atol=self.atol) if len(datasets_to_fit) == 0: log.debug( f"No Dataset for the time interval {t_min} to {t_max}") continue row = {"time_min": t_min.mjd, "time_max": t_max.mjd} fp = self.estimate_time_bin_flux(datasets_to_fit) fp_table = fp.to_table() for column in fp_table.colnames: if column == "counts": data = fp_table[column].quantity.sum(axis=1) else: data = fp_table[column].quantity row[column] = data fp_table_flux = fp.to_table(sed_type="flux") for column in fp_table_flux.colnames: if "flux" in column: row[column] = fp_table_flux[column].quantity rows.append(row) if len(rows) == 0: raise ValueError( "LightCurveEstimator: No datasets in time intervals") table = table_from_row_data(rows=rows, meta={"SED_TYPE": "likelihood"}) # TODO: use FluxPoints here return LightCurve(table=table)