Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
6dde5b4
IRF sample and collection classes
IevgenVovk Feb 6, 2024
77bbdec
IRF collection / sample: __str__ method for easier user overview
IevgenVovk Feb 6, 2024
d34197b
IRFSample: export to dict
IevgenVovk Feb 6, 2024
88a7c92
Sky run simulation with gammapy
IevgenVovk Feb 6, 2024
de66033
Facilitating imports from gpy.run
IevgenVovk Feb 6, 2024
57930be
gammapy-compatible sky runs generators
IevgenVovk Feb 6, 2024
a037217
DL3 simulation script prototype
IevgenVovk Feb 13, 2024
07e577f
sim_dl3: reading model from a new field in the config file
IevgenVovk Feb 13, 2024
72227fc
DL3 (gammapy) AltAzBoxGenerator generator: moving run duration
IevgenVovk Feb 14, 2024
a3a205b
Adding FixedObsGenerator.
IevgenVovk Feb 14, 2024
d67ed05
FixedObsGenerator: docstrings
IevgenVovk Feb 14, 2024
16756bd
MapDatasetMaker: re-implemantation of gammapy class with DRIFT
IevgenVovk Feb 14, 2024
00b8351
MapDatasetEventSampler: re-implementation of the gammapy clas with DRIFT
IevgenVovk Feb 14, 2024
93bea03
Fixed alt/az (aka "DRIFT") data run.
IevgenVovk Feb 14, 2024
7713cef
FixedPointingDataRun: move calculation, specific to this run type, to
IevgenVovk Feb 15, 2024
f099cba
Making run type specification internal to the run class - rather than
IevgenVovk Feb 15, 2024
1a401ea
DL3 base DataRun: generic implementation to support different run types.
IevgenVovk Feb 15, 2024
93a701d
SkyDataRun & FixedPointingDataRun: refactoring to inherit common
IevgenVovk Feb 15, 2024
2d48e44
Cleaning unused imports.
IevgenVovk Feb 15, 2024
e7b1897
DL3 DataRun: docstrings.
IevgenVovk Feb 15, 2024
7b9df07
DataRun: more consistent parameter name.
IevgenVovk Feb 15, 2024
134d265
DL3 SkyDataRun: docstrings.
IevgenVovk Feb 15, 2024
847aff7
DL3 FixedPointingDataRun: docstrings.
IevgenVovk Feb 15, 2024
ceef239
Dropping unused imports.
IevgenVovk Feb 15, 2024
d47a0a7
Bumping the version number to signify the introduced changes in funct…
IevgenVovk Feb 15, 2024
cc944f4
Customized gammapy makers: class docstring with the refence to the
IevgenVovk Feb 15, 2024
6f1e2d5
More appropriate dataset name
IevgenVovk Mar 18, 2024
a31fc46
Dependencies: allowing newer python package versions
IevgenVovk Mar 18, 2024
4381e72
Merge branch 'master' into gammapy-simulations
IevgenVovk Mar 18, 2024
98e4b1d
Restricting package versions to ensure it still works today.
IevgenVovk Dec 11, 2024
941187f
Refine required versions.
IevgenVovk Dec 12, 2024
5f49764
drift makers: use fixed time step to avoid performance drop for short
IevgenVovk Dec 24, 2024
950f645
gpy: reduce map sampling (unnecessarity detailed for LST1) to speed u…
IevgenVovk Dec 24, 2024
25f6389
gpy: split observation in intervals to account for telescope movement in
IevgenVovk Dec 24, 2024
dc978a8
Silence some expected warnings
IevgenVovk Dec 24, 2024
881eda6
Make compatible with gammapy 1.3
IevgenVovk Jan 20, 2025
34f99c0
remove deprecated pointing mode passing.
IevgenVovk Jan 20, 2025
13e8565
import fixed obs along with the sky one
IevgenVovk Jan 23, 2025
1759e01
data run: move sampler inside the loop to increase the randomness in the
IevgenVovk Jan 23, 2025
21788cc
simdl3: allow run in parallel and improvem memory usage.
IevgenVovk Jan 23, 2025
a1e9b98
Add message on the selected run.
IevgenVovk Jan 23, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[build-system]
requires = ["setuptools>=61.0"]
requires = ["setuptools>=70.0"]
build-backend = "setuptools.build_meta"

[project]
name = "srcsim"
version = "1.0.0"
version = "2.0.0"
authors = [
{ name="Ievgen Vovk", email="[email protected]" },
{ name="Marcel Strzys", email="[email protected]" },
Expand All @@ -20,12 +20,13 @@ classifiers = [
"Operating System :: OS Independent",
]
dependencies = [
"astropy==5.1",
"astropy<6",
"gammapy>=1.1",
"numpy>=1.21.0",
"pandas==1.4.1",
"scipy>=1.5.0",
"tables==3.7.0",
"PyYAML==5.3.1"
"pandas>=1.4.1",
"scipy<1.12",
"tables>=3.7.0",
"PyYAML>=5.3.1"
]

[project.urls]
Expand All @@ -35,3 +36,4 @@ dependencies = [
[project.scripts]
getruns = "srcsim.scripts.get_runs:main"
simrun = "srcsim.scripts.sim_run:main"
simdl3 = "srcsim.gpy.scripts.sim_dl3:main"
118 changes: 118 additions & 0 deletions src/srcsim/gpy/irf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import re
import glob
import numpy as np
from dataclasses import dataclass

from astropy.coordinates import SkyCoord
from gammapy.irf.effective_area import EffectiveAreaTable2D
from gammapy.irf.edisp.core import EnergyDispersion2D
from gammapy.irf.background import Background2D
from gammapy.irf.psf.table import PSF3D

from gammapy.irf import load_irf_dict_from_file


@dataclass
class IRFSample:
altaz: SkyCoord = None
aeff: EffectiveAreaTable2D = None
edisp: EnergyDispersion2D = None
bkg: Background2D = None
psf: PSF3D = None

def __str__(self):
desc = f"""{type(self).__name__} instance
{'AltAz':.<20s}: {self.altaz}
"""
return desc

@classmethod
def from_fits(cls, file_name):
parsed = re.findall(
'.*node_corsika_theta_([\d\.]+)_az_([\d\.]+).*',
file_name
)
if not len(parsed):
raise RuntimeError(
f'can not parse pointing alt/az from "{file_name}"'
)

try:
theta = float(parsed[0][0])
az = float(parsed[0][1])
altaz = SkyCoord(az, 90-theta, unit='deg', frame='altaz')
except Exception as exc:
raise RuntimeError(
f'can not convert pointing ({theta}; {az}) to SkyCoord'
)

irfs = load_irf_dict_from_file(file_name)

return cls(altaz, irfs.get('aeff'), irfs.get('edisp'), irfs.get('bkg'), irfs.get('psf'))

def to_dict(self):
data = dict(
aeff = self.aeff,
edisp = self.edisp,
bkg = self.bkg,
psf = self.psf
)
return data


class IRFCollection:
def __init__(self, file_mask=None, samples=None):
self.file_mask = file_mask

if samples is None:
self.samples = self.read_files(file_mask)
else:
self.samples = samples

def __str__(self):
desc = f"""{type(self).__name__} instance
{'Sample alt/az':.<20s}: {SkyCoord([sample.altaz for sample in self.samples])}
"""
return desc

@classmethod
def read_files(cls, file_mask):
file_list = glob.glob(file_mask)

samples = tuple(
IRFSample.from_fits(file_name)
for file_name in file_list
)

return samples

def get_closest(self, target_position):
altaz = SkyCoord([sample.altaz for sample in self.samples])
separation = altaz.separation(target_position)
idx = separation.argmin()

return IRFCollection(samples=(self.samples[idx],))

def get_nearby(self, target_position, search_radius):
samples = tuple(
filter(
lambda sample: sample.altaz.separation(target_position) <= search_radius,
self.samples
)
)

return IRFCollection(samples=samples)

def get_in_box(self, target_position, max_lon_offset, max_lat_offset):
centers = SkyCoord([sample.altaz for sample in self.samples])
target_position = SkyCoord(target_position.altaz.az, target_position.altaz.alt, frame='altaz')

lon_offset, lat_offset = centers.altaz.spherical_offsets_to(target_position.altaz)
inbox = (np.absolute(lon_offset) <= max_lon_offset) & (np.absolute(lat_offset) <= max_lat_offset)

if sum(inbox):
samples = tuple(sample for sample, take_it in zip(self.samples, inbox) if take_it)
else:
samples = ()

return IRFCollection(samples=samples)
2 changes: 2 additions & 0 deletions src/srcsim/gpy/run/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .sky import SkyDataRun
from .fixed import FixedPointingDataRun
Loading