Esempio n. 1
0
    def spectral_model(self):
        """Best fit spectral model (`~gammapy.modeling.models.SpectralModel`)."""
        spec_type = self.data["SpectrumType"].strip()

        pars, errs = {}, {}
        pars["amplitude"] = self.data["Flux_Density"]
        errs["amplitude"] = self.data["Unc_Flux_Density"]
        pars["reference"] = self.data["Pivot_Energy"]

        if spec_type == "PowerLaw":
            pars["index"] = self.data["Spectral_Index"]
            errs["index"] = self.data["Unc_Spectral_Index"]
            model = PowerLawSpectralModel(**pars)
        elif spec_type == "PLExpCutoff":
            pars["index"] = self.data["Spectral_Index"]
            pars["ecut"] = self.data["Cutoff"]
            errs["index"] = self.data["Unc_Spectral_Index"]
            errs["ecut"] = self.data["Unc_Cutoff"]
            model = ExpCutoffPowerLaw3FGLSpectralModel(**pars)
        elif spec_type == "LogParabola":
            pars["alpha"] = self.data["Spectral_Index"]
            pars["beta"] = self.data["beta"]
            errs["alpha"] = self.data["Unc_Spectral_Index"]
            errs["beta"] = self.data["Unc_beta"]
            model = LogParabolaSpectralModel(**pars)
        elif spec_type == "PLSuperExpCutoff":
            # TODO: why convert to GeV here? Remove?
            pars["reference"] = pars["reference"].to("GeV")
            pars["index_1"] = self.data["Spectral_Index"]
            pars["index_2"] = self.data["Exp_Index"]
            pars["ecut"] = self.data["Cutoff"].to("GeV")
            errs["index_1"] = self.data["Unc_Spectral_Index"]
            errs["index_2"] = self.data["Unc_Exp_Index"]
            errs["ecut"] = self.data["Unc_Cutoff"].to("GeV")
            model = SuperExpCutoffPowerLaw3FGLSpectralModel(**pars)
        else:
            raise ValueError(f"Invalid spec_type: {spec_type!r}")

        model.parameters.set_parameter_errors(errs)
        return model
Esempio n. 2
0
     name="norm-ecpl",
     model=ExpCutoffPowerLawNormSpectralModel(
         index=1.6 * u.Unit(""),
         norm=4 * u.Unit(""),
         reference=1 * u.TeV,
         lambda_=0.1 / u.TeV,
     ),
     val_at_2TeV=u.Quantity(1.080321705479446, ""),
     integral_1_10TeV=u.Quantity(3.765838739678921, "TeV"),
     eflux_1_10TeV=u.Quantity(9.901735870666526, "TeV2"),
 ),
 dict(
     name="ecpl_3fgl",
     model=ExpCutoffPowerLaw3FGLSpectralModel(
         index=2.3 * u.Unit(""),
         amplitude=4 / u.cm ** 2 / u.s / u.TeV,
         reference=1 * u.TeV,
         ecut=10 * u.TeV,
     ),
     val_at_2TeV=u.Quantity(0.7349563611124971, "cm-2 s-1 TeV-1"),
     integral_1_10TeV=u.Quantity(2.6034046173089, "cm-2 s-1"),
     eflux_1_10TeV=u.Quantity(5.340285560055799, "TeV cm-2 s-1"),
 ),
 dict(
     name="plsec_4fgl",
     model=SuperExpCutoffPowerLaw4FGLSpectralModel(
         index_1=1.5,
         index_2=2,
         amplitude=1 / u.cm ** 2 / u.s / u.TeV,
         reference=1 * u.TeV,
         expfactor=1e-2,
     ),