Crab Nebula example for low zenith range#

from datetime import datetime, timezone
from pathlib import Path


from astroplan import Observer, FixedTarget
from astropy.time import Time
import astropy.units as u
from astropy.visualization import quantity_support
import matplotlib.pyplot as plt
from ipywidgets import interact, DatetimePicker

from iact_estimator import RESOURCES_PATH
from iact_estimator.io import read_yaml
from iact_estimator.core import (

    initialize_model,
    prepare_data,
    source_detection,
    calculate,
)
from iact_estimator.plots import plot_spectrum, plot_sed, plot_transit, plot_altitude_airmass
output_path=Path.cwd()
config = read_yaml(RESOURCES_PATH/"config.yml")
source_name = "Crab"

observer = Observer.at_site("Roque de los Muchachos")

crab = FixedTarget.from_name(source_name)
plotting_options = config["plotting_options"]
use_seaborn = config["use_seaborn"]
if use_seaborn:
    import seaborn as sns

    seaborn_options = config["seaborn_options"]
    sns.set_theme(**seaborn_options)


assumed_spectrum = initialize_model(config)

plot_energy_bounds = [
    u.Quantity(plotting_options["min_energy"]),
    u.Quantity(plotting_options["max_energy"]),
]

Source transit#

target_source = FixedTarget.from_name(source_name)
observer = Observer.at_site("Roque de los Muchachos")

date_time = DatetimePicker(
    value=datetime.now(timezone.utc),
    description='Select a datetime',
    disabled=False
)

crab = FixedTarget.from_name("Crab")
plot_crab = True if (crab.coord == target_source.coord) else False

def interactive_plot_transit(date_time):
        with quantity_support():
                plot_transit(
                        config,
                        source_name,
                        target_source,
                        observer,
                        time = Time(date_time).utc,
                        merge_profiles=True,
                        plot_crab=False,
                        savefig=False,
                )

interact(interactive_plot_transit, date_time=date_time)
plt.show()

Altitude and airmass#

date_time = DatetimePicker(
    value=datetime.now(timezone.utc),
    description='Select a datetime',
    disabled=False
)

def plot_alt(date_time):

    print(date_time)

    plot_altitude_airmass(
                config,
                source_name,
                target_source,
                observer,
                time=Time(date_time).utc,
                brightness_shading=True,
                airmass_yaxis=True,
                savefig=False,
            )

interact(plot_alt, date_time=date_time)
plt.show()

Spectrum#

plot_spectrum(
            config,
        plot_energy_bounds,
        assumed_spectrum,
        source_name,
        plotting_options,
        savefig=False,
        )
_images/b82f1d8c3b7d908d1e2872275ebfaef2ce8eb15fa1d140d6f69598a6da565ba2.png

Spectral energy distribution#

energy_bins, gamma_rate, background_rate = prepare_data(config)

en, sed, dsed, sigmas, detected = calculate(
    energy_bins, gamma_rate, background_rate, config, assumed_spectrum
)

combined_significance = source_detection(
    sigmas, u.Quantity(config["observation_time"])
)
There are 14 energy bins
39.8 GeV-63.0 GeV GeV: exc. = 2455.3+-130.8 ev., SBR=22.34%, sigma = 19.4  DETECTION
63.0 GeV-100.0 GeV GeV: exc. = 9030.0+-159.0 ev., SBR=74.14%, sigma = 62.4  DETECTION
100.0 GeV-158.0 GeV GeV: exc. = 12870.0+-150.0 ev., SBR=178.01%, sigma = 101.7  DETECTION
158.0 GeV-251.0 GeV GeV: exc. = 10110.0+-110.8 ev., SBR=624.07%, sigma = 123.5  DETECTION
251.0 GeV-398.0 GeV GeV: exc. = 4080.0+-65.9 ev., SBR=2060.61%, sigma = 92.7  DETECTION
398.0 GeV-631.0 GeV GeV: exc. = 3660.0+-61.4 ev., SBR=4518.52%, sigma = 93.2  DETECTION
631.0 GeV-1000.0 GeV GeV: exc. = 2640.0+-51.9 ev., SBR=6616.54%, sigma = 80.7  DETECTION
1000.0 GeV-1585.0 GeV GeV: exc. = 1740.0+-42.0 ev., SBR=9830.51%, sigma = 66.5  DETECTION
1585.0 GeV-2512.0 GeV GeV: exc. = 900.0+-30.2 ev., SBR=11111.11%, sigma = 48.0  DETECTION
2512.0 GeV-3981.0 GeV GeV: exc. = 498.0+-22.5 ev., SBR=8300.00%, sigma = 35.4  DETECTION
3981.0 GeV-6310.0 GeV GeV: exc. = 279.0+-16.9 ev., SBR=6642.86%, sigma = 26.2  DETECTION
6310.0 GeV-10000.0 GeV GeV: exc. = 180.0+-14.1 ev., SBR=1304.35%, sigma = 18.5  DETECTION
10000.0 GeV-15848.9 GeV GeV: exc. = 53.6+-7.8 ev., SBR=1070.00%, sigma = 9.8  DETECTION
Combined significance (using the 13 data points shown in the SED) = 215.8
The source probably will be detected in 50.0 h.
annotation_options = {"rotation": 45,
        "xytext": (10, 10),
        "size": 15}

with quantity_support():
    plot_sed(
            config,
            sigmas,
            combined_significance,
            source_name,
            assumed_spectrum,
            en,
            sed,
            dsed,
            detected,
            savefig=False,
            annotation_options=annotation_options,
            )
    plt.ylim(1.e-12, 2.e-10)
_images/ac6f3de6cef624abe56df66e57ae8797eb7c7e720228b42c3fdfb860a9b60581.png