antares-devkit 0.6.4__tar.gz → 0.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/PKG-INFO +1 -1
- antares_devkit-0.7.0/antares_devkit/filters/decam_shadow/__init__.py +75 -0
- antares_devkit-0.7.0/antares_devkit/filters/microlensing/__init__.py +505 -0
- antares_devkit-0.7.0/antares_devkit/filters/uniform_random_sample/__init__.py +29 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/utils.py +3 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/pyproject.toml +1 -1
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/LICENSE.txt +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/README.md +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/bad_detection/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/bad_seeing/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/crash_filter/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/desi_target/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/dwarf_nova_outburst/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/ecl_transient_1/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/ecl_transient_2/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/extragalactic/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/highamp/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/highfluxchange/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/highsnr/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/if_anomaly_detection/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/if_anomaly_detection/data/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/if_anomaly_detection/data/paleo2_106IFmodel_472727objs_nest=1000_cont=0.001_transf.pkl +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/imbh/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/inm31/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/laiss_rfc_ad_filter/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/laiss_rfc_ad_filter/data/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/laiss_rfc_ad_filter/data/cls=binary_n_estimators=100_max_depth=35_rs=11_max_feats=35_cw=balanced.pkl +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/lsst_ddf/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/lsst_transient_quality_scimma/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/malanchev_anomaly_transient_dmdt/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/malanchev_anomaly_transient_dmdt/data/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/malanchev_anomaly_transient_dmdt/data/malanchev_ssiforest_v1.pickle +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/malanchev_features_v1/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/novtest/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/nuclear_transient/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/nuttela_tao/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/persistent_dimmers/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/random_tagger_filter/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/recent_reddening/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/refitt_newsources_snrcut/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/rubin_NovTest_soraisam/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/sample_filter/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/shadow_virgo/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/siena_mag_coord_cut/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/sso/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/sub_lum/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/superphot_plus_v1/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/superphot_plus_ztf_v3/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/test_dev_all/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/test_dev_lsst/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/test_dev_ztf/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/vpdf/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/vpdf/data/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/vpdf/data/matheson_percent_grid_v1 +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/young_extragalactic_candidate/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/young_rubin_transients_soraisam/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/models.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/Dockerfile +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/__init__.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/conftest.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/data/large_locus.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/data/small_locus.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/filters/test_test_dev_all.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/filters/test_test_dev_lsst.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/filters/test_test_dev_ztf.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/test_models.py +0 -0
- {antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/test_filters.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: antares-devkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Provides tools and utility methods to write and debug ANTARES filters with Python.
|
|
5
5
|
Keywords: antares,devkit,filter development
|
|
6
6
|
Author-Email: NSF NOIRLab ANTARES Team <antares@noirlab.edu>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""Description
|
|
2
|
+
This filter finds locus located within a radius of 1.1 deg from the center of the Shadow Project's Virgo, Hydra, Fornax, Antlia, and Dorado Pointings.
|
|
3
|
+
"""
|
|
4
|
+
from antares_devkit.models import BaseFilter
|
|
5
|
+
|
|
6
|
+
class InDecamShadow(BaseFilter):
|
|
7
|
+
NAME = 'in_decam_shadow' #for this default filter, name is same as its tag
|
|
8
|
+
|
|
9
|
+
SLACK_CHANNEL = "#filter-in-decam-shadow"
|
|
10
|
+
|
|
11
|
+
## bare absolute minimum alert properties proving it's good to go
|
|
12
|
+
REQUIRED_ALERT_PROPERTIES = [
|
|
13
|
+
'ant_ra',
|
|
14
|
+
'ant_dec',
|
|
15
|
+
'ant_survey'
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
OUTPUT_TAGS = [
|
|
19
|
+
{
|
|
20
|
+
'name': 'in_decam_shadow',
|
|
21
|
+
'description': 'Locus is along the line of sight to the Virgo, Antlia, Dorado, Fornax, Hydra, Virgo fields covered by the DECam Shadow Project',
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
def _run(self, locus):
|
|
26
|
+
import numpy as np
|
|
27
|
+
from astropy import units as u
|
|
28
|
+
from astropy.coordinates import SkyCoord
|
|
29
|
+
if locus.alert.properties['ant_survey'] == 2: #be sure we don't work with upper limits
|
|
30
|
+
#print('upper limit')
|
|
31
|
+
return
|
|
32
|
+
|
|
33
|
+
if locus.alert.properties['ant_survey'] == 4:
|
|
34
|
+
#print(locus.alert.properties['lsst_diaSource_ssObjectId'], locus.alert.properties['lsst_diaSource_ssObjectId'] != 0, 'lsst_diaSource_ssObjectId')
|
|
35
|
+
if (locus.alert.properties['lsst_diaSource_ssObjectId'] != 0) is True:
|
|
36
|
+
return
|
|
37
|
+
elif locus.alert.properties['ant_survey'] == 1:
|
|
38
|
+
#print(locus.alert.properties['ztf_ssnamenr'], locus.alert.properties['ztf_ssnamenr'] !='null', 'ztf_ssnamenr')
|
|
39
|
+
if locus.alert.properties['ztf_ssnamenr'] != 'null':
|
|
40
|
+
return
|
|
41
|
+
|
|
42
|
+
# return
|
|
43
|
+
ra = locus.alert.properties['ant_ra']
|
|
44
|
+
dec = locus.alert.properties['ant_dec']
|
|
45
|
+
#https://github.com/lsstshadow/shadowpointings/tree/main
|
|
46
|
+
shadow_virgo_ra = np.array([187.7014, 186.0754, 187.9486, 189.4263, 189.1219, 187.4805,
|
|
47
|
+
185.9601, 187.6007, 186.0131, 184.8111, 184.3502, 183.9883,
|
|
48
|
+
184.4658, 186.3005, 191.0718, 190.5631, 189.1516, 188.7788,
|
|
49
|
+
186.6354, 185.6507, 182.4151, 193.2665, 189.5427, 190.6638,
|
|
50
|
+
193.4287, 188.2634, 185.2524, 188.0598, 193.0875, 191.0943])
|
|
51
|
+
shadow_virgo_dec = np.array([12.46, 13.4965, 14.307, 13.3041, 11.295, 10.4477,
|
|
52
|
+
11.6469, 8.4389, 7.1655, 5.7578, 12.8014, 7.6415,
|
|
53
|
+
14.6628, 15.364, 12.0456, 10.0351, 8.9448, 6.8992,
|
|
54
|
+
5.3375, 8.9489, 13.7313, 8.2527, 4.8363, 2.8801,
|
|
55
|
+
1.8786, 2.356, 3.7762, 0.1955, -1.1488, -0.0399])
|
|
56
|
+
shadow_antlia_ra = np.array([ 157.3975])
|
|
57
|
+
shadow_antlia_dec = np.array([-35.3325])
|
|
58
|
+
shadow_dorado_ra = np.array([ 71.4476, 66.7167, 63.6977, 65.9529, 62.6324])
|
|
59
|
+
shadow_dorado_dec = np.array([-59.2477, -55.0722, -55.6902, -57.0202, -57.7644])
|
|
60
|
+
shadow_fornax_ra = np.array([ 54.5484, 54.1655, 52.4792, 52.8626, 54.9590, 56.6247,
|
|
61
|
+
56.2302, 52.1175, 51.1123, 50.5994, 55.8479, 58.3521,
|
|
62
|
+
53.6473, 51.4467, 63.1329])
|
|
63
|
+
shadow_fornax_dec = np.array([-35.5388, -33.7261, -34.8784, -36.6898, -37.3477, -36.1969,
|
|
64
|
+
-34.3845, -33.0674, -37.8454, -35.8702, -32.5273, -34.962,
|
|
65
|
+
-31.6796, -31.2712, -32.3313])
|
|
66
|
+
shadow_hydra_ra = np.array([ 159.2305, 159.2126, 157.6973])
|
|
67
|
+
shadow_hydra_dec = np.array([-27.5186, -25.3493, -29.1417])
|
|
68
|
+
shadow_all_ra = np.hstack((shadow_virgo_ra, shadow_antlia_ra, shadow_dorado_ra, shadow_fornax_ra, shadow_hydra_ra))
|
|
69
|
+
shadow_all_dec = np.hstack((shadow_virgo_dec, shadow_antlia_dec, shadow_dorado_dec, shadow_fornax_dec, shadow_hydra_dec))
|
|
70
|
+
field_centers = SkyCoord(ra=shadow_all_ra*u.deg, dec=shadow_all_dec*u.deg)
|
|
71
|
+
c = SkyCoord(ra*u.deg, dec*u.deg, frame='icrs')
|
|
72
|
+
sep = c.separation(field_centers)
|
|
73
|
+
#print(sep.min())
|
|
74
|
+
if (sep.deg < 1.1).any(): #DECam FOV = 2.2 deg diameter
|
|
75
|
+
locus.tag('in_decam_shadow')
|
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
# Filter for microlensing events designed for the ANTARES broker
|
|
2
|
+
|
|
3
|
+
# Authors: Somayeh Khakpash, Natasha Abrams, Rachel Street, Atousa Kalantari
|
|
4
|
+
|
|
5
|
+
import antares_devkit as dk
|
|
6
|
+
from antares_devkit.models import DevKitLocus
|
|
7
|
+
from antares_devkit.models import BaseFilter
|
|
8
|
+
import warnings
|
|
9
|
+
import math
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class microlensing(BaseFilter):
|
|
13
|
+
INPUT_LOCUS_PROPERTIES = [
|
|
14
|
+
'ant_object_id',
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
REQUIRED_TAGS = ['lc_feature_extractor']
|
|
18
|
+
|
|
19
|
+
OUTPUT_TAGS = [
|
|
20
|
+
{
|
|
21
|
+
'name': 'microlensing_candidate',
|
|
22
|
+
'description': 'Locus - a transient candidate - exhibits a microlensing-like variability',
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
np = None
|
|
27
|
+
curve_fit = None
|
|
28
|
+
skew = None
|
|
29
|
+
sigma_clip = None
|
|
30
|
+
|
|
31
|
+
# Define a Paczyński microlensing model
|
|
32
|
+
def paczynski(self, t, t0, u0, tE, F_s):
|
|
33
|
+
"""
|
|
34
|
+
Paczyński microlensing light curve model
|
|
35
|
+
t0 : peak time
|
|
36
|
+
u0 : impact parameter
|
|
37
|
+
tE : Einstein crossing time
|
|
38
|
+
F_s : source flux
|
|
39
|
+
F_b : blended flux
|
|
40
|
+
"""
|
|
41
|
+
u = self.np.sqrt(u0 ** 2 + ((t - t0) / tE) ** 2)
|
|
42
|
+
A = (u ** 2 + 2) / (u * self.np.sqrt(u ** 2 + 4))
|
|
43
|
+
return F_s * (A) + (1 - F_s)
|
|
44
|
+
|
|
45
|
+
def fit_paczynski(self, times, mags, flxs, flx_errs):
|
|
46
|
+
"""
|
|
47
|
+
Fit the Paczyński microlensing model to flux data.
|
|
48
|
+
Returns best-fit parameters and chi-squared value.
|
|
49
|
+
"""
|
|
50
|
+
if len(times) < 4:
|
|
51
|
+
return None, None # Not enough data
|
|
52
|
+
|
|
53
|
+
# initial guesses
|
|
54
|
+
t0_guess = times[self.np.argmin(flxs)]
|
|
55
|
+
u0_guess = 1.0 / (self.np.max(flxs))
|
|
56
|
+
|
|
57
|
+
tE_guess = 20.0
|
|
58
|
+
F0_guess = 0.5
|
|
59
|
+
|
|
60
|
+
initial_guess = [t0_guess, u0_guess, tE_guess, F0_guess]
|
|
61
|
+
|
|
62
|
+
bounds = (
|
|
63
|
+
[times.min() - 50, 0, 1.0, 0.0],
|
|
64
|
+
[times.max() + 50, self.np.inf, 500.0, 1]
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
popt, _ = self.curve_fit(
|
|
69
|
+
self.paczynski,
|
|
70
|
+
times, flxs,
|
|
71
|
+
p0=initial_guess,
|
|
72
|
+
sigma=flx_errs,
|
|
73
|
+
bounds=bounds,
|
|
74
|
+
|
|
75
|
+
maxfev=5000
|
|
76
|
+
)
|
|
77
|
+
chi2 = self.np.sum(((flxs - self.paczynski(times, *popt)) / flx_errs) ** 2) / len(times)
|
|
78
|
+
return popt, chi2
|
|
79
|
+
except Exception as e:
|
|
80
|
+
print(f" Paczynski fitting error: {e}")
|
|
81
|
+
return None, None
|
|
82
|
+
|
|
83
|
+
def mag_to_flux(self, mag, F0=1.0):
|
|
84
|
+
"""
|
|
85
|
+
Convert magnitude to flux.
|
|
86
|
+
|
|
87
|
+
Parameters:
|
|
88
|
+
- mag : magnitude (float or array)
|
|
89
|
+
- F0 : reference flux (zeropoint), default=1.0 for relative flux
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
- flux : flux corresponding to the magnitude
|
|
93
|
+
"""
|
|
94
|
+
flux = F0 * 10 ** (-0.4 * mag)
|
|
95
|
+
flux = flux / self.np.min(flux)
|
|
96
|
+
return flux
|
|
97
|
+
|
|
98
|
+
def magerr_to_fluxerr(self, mag, mag_err, F0=1.0):
|
|
99
|
+
"""
|
|
100
|
+
Convert magnitude uncertainty to flux uncertainty.
|
|
101
|
+
|
|
102
|
+
Parameters:
|
|
103
|
+
- mag : magnitude value or array
|
|
104
|
+
- mag_err : magnitude uncertainty value or array
|
|
105
|
+
- F0 : zeropoint flux (default=1.0 for relative flux)
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
- flux_err : flux uncertainty
|
|
109
|
+
"""
|
|
110
|
+
flux = self.mag_to_flux(mag, F0)
|
|
111
|
+
flux_err = 0.4 * self.np.log(10) * flux * mag_err
|
|
112
|
+
return flux_err
|
|
113
|
+
|
|
114
|
+
# Chi squared functions for BAGLE model
|
|
115
|
+
def calc_chi2_mean(self, times, mag, mag_err, verbose=False):
|
|
116
|
+
"""
|
|
117
|
+
Parameters
|
|
118
|
+
----------
|
|
119
|
+
params : str or dict, optional
|
|
120
|
+
model_params = 'best' will load up the best solution and calculate
|
|
121
|
+
the chi^2 based on those values. Alternatively, pass in a dictionary
|
|
122
|
+
with the model parameters to use.
|
|
123
|
+
"""
|
|
124
|
+
# Get likelihoods.
|
|
125
|
+
lnL_phot = self.log_likely_photometry(times, mag, mag_err)
|
|
126
|
+
|
|
127
|
+
# Lists to store lnL, chi2, and constants for each filter.
|
|
128
|
+
chi2_phot_filts = []
|
|
129
|
+
lnL_const_phot_filts = []
|
|
130
|
+
|
|
131
|
+
# Calculate the lnL for just a single filter.
|
|
132
|
+
lnL_phot_nn = self.log_likely_photometry(times, mag, mag_err)
|
|
133
|
+
|
|
134
|
+
# Calculate the chi2 and constants for just a single filter.
|
|
135
|
+
lnL_const_phot_nn = -0.5 * self.np.log(2.0 * math.pi * mag_err ** 2)
|
|
136
|
+
lnL_const_phot_nn = lnL_const_phot_nn.sum()
|
|
137
|
+
|
|
138
|
+
chi2_phot_nn = (lnL_phot_nn - lnL_const_phot_nn) / -0.5
|
|
139
|
+
|
|
140
|
+
# Save to our lists
|
|
141
|
+
chi2_phot_filts.append(chi2_phot_nn)
|
|
142
|
+
lnL_const_phot_filts.append(lnL_const_phot_nn)
|
|
143
|
+
|
|
144
|
+
lnL_const_phot = sum(lnL_const_phot_filts)
|
|
145
|
+
|
|
146
|
+
# Calculate chi2.
|
|
147
|
+
chi2 = (lnL_phot - lnL_const_phot) / -0.5
|
|
148
|
+
|
|
149
|
+
if verbose:
|
|
150
|
+
fmt = '{0:13s} = {1:f} '
|
|
151
|
+
ff = 0
|
|
152
|
+
print(fmt.format('chi2_phot' + str(ff + 1), chi2_phot_filts[ff]))
|
|
153
|
+
|
|
154
|
+
print(fmt.format('chi2', chi2))
|
|
155
|
+
|
|
156
|
+
return chi2
|
|
157
|
+
|
|
158
|
+
def log_likely_photometry(self, times, mag, mag_err, verbose=False):
|
|
159
|
+
|
|
160
|
+
lnL_phot = 0.0
|
|
161
|
+
|
|
162
|
+
# commenting out weight stuff for now
|
|
163
|
+
# weight = self.weights[i]
|
|
164
|
+
lnL_phot_unwgt = self.log_likely_photometry_each(times, mag, mag_err)
|
|
165
|
+
lnL_phot_i = lnL_phot_unwgt # * weight
|
|
166
|
+
lnL_phot += lnL_phot_i
|
|
167
|
+
|
|
168
|
+
if verbose:
|
|
169
|
+
print(
|
|
170
|
+
f'lnL_phot: i = {i} L_unwgt = {lnL_phot_unwgt:15.1f}, L_wgt = {lnL_phot_i:15.1f}, weight = {weight:.1e}')
|
|
171
|
+
|
|
172
|
+
return lnL_phot
|
|
173
|
+
|
|
174
|
+
def log_likely_photometry_each(self, t_obs, mag_obs, mag_err_obs, filt_idx=0):
|
|
175
|
+
"""
|
|
176
|
+
Get the natural log of the likelihood for the input photometric data in the
|
|
177
|
+
specified filter or data sets. Note, this function returns a list and it
|
|
178
|
+
is the full ln(likelihood), including the normalization constant.
|
|
179
|
+
|
|
180
|
+
Parameters
|
|
181
|
+
----------
|
|
182
|
+
t_obs : array_like
|
|
183
|
+
List of times in MJD for the observations.
|
|
184
|
+
mag_obs : array_like
|
|
185
|
+
List of observed photometric measurements of the microlensing event in magnitudes.
|
|
186
|
+
Length must be the same as t_obs.
|
|
187
|
+
mag_obs_err : array_like
|
|
188
|
+
List of observed photometric uncertainties of the microlensing event in magnitudes.
|
|
189
|
+
Length must be the same as t_obs.
|
|
190
|
+
filt_idx : int, optional
|
|
191
|
+
Index of the photometric filter or data set.
|
|
192
|
+
|
|
193
|
+
Returns
|
|
194
|
+
-------
|
|
195
|
+
ln_L : array_like
|
|
196
|
+
List of ln(likelihood) for each photometric measurement.
|
|
197
|
+
|
|
198
|
+
"""
|
|
199
|
+
|
|
200
|
+
chi2_m = self.get_chi2_photometry_mean(t_obs, mag_obs, mag_err_obs, filt_idx=filt_idx)
|
|
201
|
+
|
|
202
|
+
lnL_const_m = self.get_lnL_constant(mag_err_obs)
|
|
203
|
+
|
|
204
|
+
lnL = (-0.5 * chi2_m) + lnL_const_m
|
|
205
|
+
|
|
206
|
+
return lnL.sum()
|
|
207
|
+
|
|
208
|
+
def get_chi2_photometry_mean(self, t_obs, mag_obs, mag_err_obs, filt_idx=0):
|
|
209
|
+
"""
|
|
210
|
+
Get chi^2 values for THE MEAN OF DATA and input photometric data in the
|
|
211
|
+
specified photometric filter or data set.
|
|
212
|
+
|
|
213
|
+
Parameters
|
|
214
|
+
----------
|
|
215
|
+
t_obs : array_like
|
|
216
|
+
List of times in MJD for the observations.
|
|
217
|
+
mag_obs : array_like
|
|
218
|
+
List of observed photometric measurements of the microlensing event in magnitudes.
|
|
219
|
+
Length must be the same as t_obs.
|
|
220
|
+
mag_obs_err : array_like
|
|
221
|
+
List of observed photometric uncertainties of the microlensing event in magnitudes.
|
|
222
|
+
Length must be the same as t_obs.
|
|
223
|
+
filt_idx : int, optional
|
|
224
|
+
Index of the photometric filter or data set.
|
|
225
|
+
|
|
226
|
+
Returns
|
|
227
|
+
-------
|
|
228
|
+
chi2 : array_like
|
|
229
|
+
List of chi^2 values from the model and photometric data.
|
|
230
|
+
|
|
231
|
+
"""
|
|
232
|
+
sigma_clip_mag = self.sigma_clip(mag_obs)
|
|
233
|
+
mag_model = self.np.mean(sigma_clip_mag)
|
|
234
|
+
|
|
235
|
+
chi2 = ((mag_obs - mag_model) / mag_err_obs) ** 2
|
|
236
|
+
|
|
237
|
+
return chi2
|
|
238
|
+
|
|
239
|
+
def get_lnL_constant(self, err_obs):
|
|
240
|
+
"""
|
|
241
|
+
Get the natural log of the constant normalization terms of the likelihood.
|
|
242
|
+
|
|
243
|
+
.. math:: -0.5 * \ln{2 \pi \sigma_{obs}^2}
|
|
244
|
+
|
|
245
|
+
Parameters
|
|
246
|
+
----------
|
|
247
|
+
err_obs : array_like
|
|
248
|
+
List of the uncertainties.
|
|
249
|
+
|
|
250
|
+
Returns
|
|
251
|
+
-------
|
|
252
|
+
List of ln(likelihood constants).
|
|
253
|
+
|
|
254
|
+
"""
|
|
255
|
+
lnL_const = -0.5 * self.np.log(2.0 * math.pi * err_obs ** 2)
|
|
256
|
+
|
|
257
|
+
return lnL_const
|
|
258
|
+
|
|
259
|
+
def is_known_other_phenomenon(self, locus, locus_params):
|
|
260
|
+
"""
|
|
261
|
+
Method to check the locus' pre-existing parameters indicated that it has
|
|
262
|
+
been identified or is likely to be a variable of a type other than microlensing
|
|
263
|
+
|
|
264
|
+
:param locus:
|
|
265
|
+
:param locus_params:
|
|
266
|
+
:return: boolean
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
# Default result is not a known variable
|
|
270
|
+
known_var = False
|
|
271
|
+
|
|
272
|
+
# Tunable detection thresholds.
|
|
273
|
+
# Ref: Sokolovsky et al. 2016: https://ui.adsabs.harvard.edu/abs/2017MNRAS.464..274S/abstract
|
|
274
|
+
period_peak_sn_threshold = 20.0 # Based on tests with ZTF alerts
|
|
275
|
+
stetson_k_threshold = 0.8 # The expected K-value for a constant lightcurve with Gaussian noise
|
|
276
|
+
|
|
277
|
+
# Check for periodicity
|
|
278
|
+
feature_period_s_to_n_0_magn_r_exists = 'feature_period_s_to_n_0_magn_r' in locus_params.keys()
|
|
279
|
+
if feature_period_s_to_n_0_magn_r_exists:
|
|
280
|
+
if locus_params['feature_period_s_to_n_0_magn_r'] >= period_peak_sn_threshold:
|
|
281
|
+
known_var = True
|
|
282
|
+
|
|
283
|
+
# Check Stetson-K index
|
|
284
|
+
feature_stetson_k_magn_r_exists = 'feature_stetson_k_magn_r' in locus_params.keys()
|
|
285
|
+
if feature_stetson_k_magn_r_exists:
|
|
286
|
+
if locus_params['feature_stetson_k_magn_r'] <= stetson_k_threshold:
|
|
287
|
+
known_var = True
|
|
288
|
+
|
|
289
|
+
# If the alert has parameters from JPL Horizons, then it is likely cause by
|
|
290
|
+
# a Solar System object
|
|
291
|
+
if 'horizons_targetname' in locus_params.keys():
|
|
292
|
+
known_var = True
|
|
293
|
+
|
|
294
|
+
# Check whether the ANTARES crossmatch against known galaxy catalogs threw up any matches
|
|
295
|
+
# The locus.catalog_objects attribute is a dictionary of lists of known objects for each
|
|
296
|
+
# catalogs. If a match has been found, then the key for the corresponding catalog will be
|
|
297
|
+
# in the list of keys. So we can use that to check for matches with galaxy catalogs.
|
|
298
|
+
# Of those available in the list the Gemini NIR survey of known quasars is the closest
|
|
299
|
+
if 'gnirs_dqs' in locus.catalog_objects.keys():
|
|
300
|
+
known_var = True
|
|
301
|
+
|
|
302
|
+
return known_var
|
|
303
|
+
|
|
304
|
+
def calculate_eta(self, mag):
|
|
305
|
+
""" Via puzle https://github.com/jluastro/puzle/blob/main/puzle/stats.py"""
|
|
306
|
+
delta = self.np.sum((self.np.diff(mag) * self.np.diff(mag)) / (len(mag) - 1))
|
|
307
|
+
variance = self.np.var(mag)
|
|
308
|
+
eta = delta / variance
|
|
309
|
+
return eta
|
|
310
|
+
|
|
311
|
+
def return_eta_residual_slope_offset(self):
|
|
312
|
+
"""
|
|
313
|
+
Via puzle https://github.com/jluastro/puzle/blob/main/puzle/cands.py
|
|
314
|
+
TODO is 6 months and a year - calculate slope and intercept based on real Rubin data
|
|
315
|
+
"""
|
|
316
|
+
slope = 3.8187919463087248
|
|
317
|
+
offset = -0.07718120805369133
|
|
318
|
+
return slope, offset
|
|
319
|
+
|
|
320
|
+
def make_bagle_data_dir(self, times, mags, errors):
|
|
321
|
+
data = {}
|
|
322
|
+
data['target'] = 'single_event'
|
|
323
|
+
data['phot_data'] = 'alert'
|
|
324
|
+
data['phot_files'] = ['locus']
|
|
325
|
+
data['ast_data'] = 'None'
|
|
326
|
+
data['ast_files'] = []
|
|
327
|
+
|
|
328
|
+
data['t_phot1'] = times
|
|
329
|
+
data['mag1'] = mags
|
|
330
|
+
data['mag_err1'] = errors
|
|
331
|
+
|
|
332
|
+
return data
|
|
333
|
+
|
|
334
|
+
def is_microlensing_candidate(self, locus, times, mags, errors, verbose):
|
|
335
|
+
"""
|
|
336
|
+
Example of a set of Microlensing detection criteria
|
|
337
|
+
"""
|
|
338
|
+
if len(times) < 10: # Too few data points
|
|
339
|
+
if verbose == True:
|
|
340
|
+
print('Too Few Datapoints')
|
|
341
|
+
return False
|
|
342
|
+
|
|
343
|
+
# Extract the full parameter set from the locus and the alert
|
|
344
|
+
locus_params = locus.properties
|
|
345
|
+
|
|
346
|
+
# Use the pre-calculated properties of the locus to eliminate those
|
|
347
|
+
# which show signs of variability, e.g. in their periodicity signature or
|
|
348
|
+
# the Stetson-K index
|
|
349
|
+
known_var = self.is_known_other_phenomenon(locus, locus_params)
|
|
350
|
+
if known_var:
|
|
351
|
+
if verbose == True:
|
|
352
|
+
print('Other known phenomenon')
|
|
353
|
+
return False
|
|
354
|
+
|
|
355
|
+
# Sort data by time
|
|
356
|
+
sorted_idx = self.np.argsort(times)
|
|
357
|
+
times, mags, errors = times[sorted_idx], mags[sorted_idx], errors[sorted_idx]
|
|
358
|
+
npts = len(times)
|
|
359
|
+
|
|
360
|
+
# 1. Check for smoothness (low skewness means symmetric light curve)
|
|
361
|
+
# TODO: Check for threshold with parallax and maybe remove or lower threshold
|
|
362
|
+
if abs(self.skew(mags)) > 1:
|
|
363
|
+
if verbose == True:
|
|
364
|
+
print('Too skewed')
|
|
365
|
+
return False
|
|
366
|
+
|
|
367
|
+
# TODO is 6 months and a year - calculate this based on percentile of real data
|
|
368
|
+
eta_thresh = 1.255 # Avg from ZTF level 2 (low eta)
|
|
369
|
+
# Do check for existance since if there's only one band of data, only one will exist
|
|
370
|
+
eta_r_exists = 'feature_eta_e_magn_r' in locus_params.keys()
|
|
371
|
+
eta_g_exists = 'feature_eta_e_magn_g' in locus_params.keys()
|
|
372
|
+
if eta_r_exists:
|
|
373
|
+
eta_r = locus_params['feature_eta_e_magn_r']
|
|
374
|
+
if eta_g_exists:
|
|
375
|
+
eta_g = locus_params['feature_eta_e_magn_g']
|
|
376
|
+
if eta_r_exists and eta_g_exists:
|
|
377
|
+
if eta_r >= eta_thresh and eta_g >= eta_thresh:
|
|
378
|
+
if verbose == True:
|
|
379
|
+
print('Failed von Neumann threshold')
|
|
380
|
+
return False
|
|
381
|
+
elif eta_r_exists:
|
|
382
|
+
if eta_r >= eta_thresh:
|
|
383
|
+
if verbose == True:
|
|
384
|
+
print('Failed von Neumann threshold')
|
|
385
|
+
return False
|
|
386
|
+
elif eta_g_exists:
|
|
387
|
+
if eta_g >= eta_thresh:
|
|
388
|
+
if verbose == True:
|
|
389
|
+
print('Failed von Neumann threshold')
|
|
390
|
+
return False
|
|
391
|
+
|
|
392
|
+
# 2. Check variability (microlensing should have a clear peak)
|
|
393
|
+
# Decrease threshold with longer baseline
|
|
394
|
+
# Q for broker - 365 days or full lightcurve?
|
|
395
|
+
if self.np.ptp(mags) < 0.5: # Peak-to-peak magnitude difference
|
|
396
|
+
if verbose == True:
|
|
397
|
+
print('Too small magnitude change')
|
|
398
|
+
return False
|
|
399
|
+
|
|
400
|
+
flxs = self.mag_to_flux(mags)
|
|
401
|
+
flx_errs = self.magerr_to_fluxerr(mags, errors)
|
|
402
|
+
|
|
403
|
+
# 3. Perform a lightweight template fit (Paczyński model)
|
|
404
|
+
|
|
405
|
+
popt, chi2_paczynski = self.fit_paczynski(times, mags, flxs, flx_errs)
|
|
406
|
+
resid = flxs - self.paczynski(times, *popt)
|
|
407
|
+
chi2_val = self.np.sum((resid / flx_errs) ** 2) / npts
|
|
408
|
+
|
|
409
|
+
# 4. Apply a simple chi2 threshold
|
|
410
|
+
if chi2_val > 2: # Poor-fit light curves fails
|
|
411
|
+
if verbose == True:
|
|
412
|
+
print('Failed simple fit chi^2 threshold', chi2_val)
|
|
413
|
+
return False
|
|
414
|
+
# except RuntimeError:
|
|
415
|
+
# return False # Fit failed
|
|
416
|
+
|
|
417
|
+
# 5. Check that the residual isn't correlated in all avaliable bands
|
|
418
|
+
eta_resid = self.calculate_eta(resid)
|
|
419
|
+
eta_slope, eta_offset = self.return_eta_residual_slope_offset()
|
|
420
|
+
if eta_r_exists and eta_g_exists:
|
|
421
|
+
if (eta_resid < eta_r * eta_slope + eta_offset) and (eta_resid < eta_g * eta_slope + eta_offset):
|
|
422
|
+
if verbose == True:
|
|
423
|
+
print('Failed eta residual threshold')
|
|
424
|
+
return False
|
|
425
|
+
elif eta_r_exists:
|
|
426
|
+
if (eta_resid < eta_r * eta_slope + eta_offset):
|
|
427
|
+
if verbose == True:
|
|
428
|
+
print('Failed eta residual threshold')
|
|
429
|
+
return False
|
|
430
|
+
elif eta_g_exists:
|
|
431
|
+
if (eta_resid < eta_g * eta_slope + eta_offset):
|
|
432
|
+
if verbose == True:
|
|
433
|
+
print('Failed eta residual threshold')
|
|
434
|
+
return False
|
|
435
|
+
|
|
436
|
+
# outbase = 'microlens_fit_'
|
|
437
|
+
# data = self.make_bagle_data_dir(times, mags, errors)
|
|
438
|
+
# fitter = model_fitter.PSPL_Solver(data,
|
|
439
|
+
# model.PSPL_Phot_noPar_Param2,
|
|
440
|
+
# importance_nested_sampling=False,
|
|
441
|
+
# n_live_points=200,
|
|
442
|
+
# outputfiles_basename=outbase)
|
|
443
|
+
|
|
444
|
+
# fitter.priors['tE'] = model_fitter.make_gen(1, 400)
|
|
445
|
+
# #1 year before start and 1 years after end of data
|
|
446
|
+
# fitter.priors['t0'] = model_fitter.make_gen(self.np.min(times) - 365.25, self.np.max(times) + 365.25)
|
|
447
|
+
# fitter.priors['b_sff1'] = model_fitter.make_gen(0.001, 1.25)
|
|
448
|
+
|
|
449
|
+
# fitter.solve()
|
|
450
|
+
|
|
451
|
+
# fit_vals = fitter.get_best_fit(def_best='map')
|
|
452
|
+
# chi2_red_bagle = fitter.calc_chi2(params=fit_vals) / (npts - len(fit_vals))
|
|
453
|
+
# chi2_red_flat = self.calc_chi2_mean(times, mags, errors)
|
|
454
|
+
|
|
455
|
+
# # Delta chi^2 threshold
|
|
456
|
+
# delta_chi2_threshold = 100
|
|
457
|
+
# if self.np.abs(chi2_red_bagle - chi2_red_flat) < delta_chi2_threshold:
|
|
458
|
+
# if verbose == True:
|
|
459
|
+
# print('Failed BAGLE fit chi^2 threshold', 'delta chi^2 = ', self.np.abs(chi2_red_bagle - chi2_red_flat))
|
|
460
|
+
# return False
|
|
461
|
+
|
|
462
|
+
# fit_vals['b_sff'] = fit_vals.pop('b_sff1')
|
|
463
|
+
# fit_vals['mag_base'] = fit_vals.pop('mag_base1')
|
|
464
|
+
# for key in fit_vals.keys():
|
|
465
|
+
# locus.set_property('feature_microlensing_' + key, fit_vals[key])
|
|
466
|
+
# locus.set_property('feature_microlensing_chi2_red', chi2_red_bagle)
|
|
467
|
+
|
|
468
|
+
return True
|
|
469
|
+
|
|
470
|
+
def _run(self, locus):
|
|
471
|
+
import numpy as np
|
|
472
|
+
import astropy
|
|
473
|
+
from scipy.optimize import curve_fit
|
|
474
|
+
from scipy.stats import skew
|
|
475
|
+
from astropy.stats import sigma_clip
|
|
476
|
+
|
|
477
|
+
self.np = np
|
|
478
|
+
self.curve_fit = curve_fit
|
|
479
|
+
self.skew = skew
|
|
480
|
+
self.sigma_clip = sigma_clip
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
print('Processing Locus:', locus.locus_id)
|
|
484
|
+
|
|
485
|
+
with warnings.catch_warnings():
|
|
486
|
+
# The cast of locus.timeseries: astropy.table.Table to a pandas
|
|
487
|
+
# dataframe results in the conversion of some integer-valued
|
|
488
|
+
# columns to floating point represntation. This can result in a
|
|
489
|
+
# number of noisy warning so we will catch & ignore them for the
|
|
490
|
+
# next couple of lines.
|
|
491
|
+
warnings.simplefilter("ignore", astropy.table.TableReplaceWarning)
|
|
492
|
+
df = locus.timeseries().to_pandas()
|
|
493
|
+
|
|
494
|
+
data = df[['ant_mjd', 'ant_passband', 'ant_mag', 'ant_magerr']].dropna()
|
|
495
|
+
|
|
496
|
+
# Split into g-band and i-band
|
|
497
|
+
band_list = np.unique(data['ant_passband'])
|
|
498
|
+
for band in band_list: # 1 = g-band, 2 = i-band
|
|
499
|
+
band_data = data[data['ant_passband'] == band]
|
|
500
|
+
times, mags, errors = band_data['ant_mjd'].values, band_data['ant_mag'].values, band_data[
|
|
501
|
+
'ant_magerr'].values
|
|
502
|
+
|
|
503
|
+
if self.is_microlensing_candidate(locus, times, mags, errors, verbose=False):
|
|
504
|
+
print(f'Locus {locus.locus_id} is a microlensing candidate in band {band}')
|
|
505
|
+
locus.tag('microlensing_candidate')
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from antares_devkit.models import BaseFilter
|
|
2
|
+
|
|
3
|
+
class UniformRandomSample(BaseFilter):
|
|
4
|
+
"""
|
|
5
|
+
This filter aims to uniformly and randomly select 1% of all LSST alerts.
|
|
6
|
+
This is implemented by filtering for diaSourceId % 113 == 0, which roughly
|
|
7
|
+
selects everything 100th alert in chronological order. The 113 value is chosen
|
|
8
|
+
to be close to but arbitrarily different from 100, to avoid any potential
|
|
9
|
+
collisions with processing that might happen on every 100th alert.
|
|
10
|
+
"""
|
|
11
|
+
SLACK_CHANNEL = "#filter-uniformrandomsample"
|
|
12
|
+
TRIGGERING_SURVEY = "lsst"
|
|
13
|
+
|
|
14
|
+
REQUIRED_ALERT_PROPERTIES = [
|
|
15
|
+
"lsst_diaSource_diaSourceId"
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
OUTPUT_LOCUS_PROPERTIES = []
|
|
19
|
+
OUTPUT_LOCUS_TAGS = [{
|
|
20
|
+
'name': 'uniform_random_sample',
|
|
21
|
+
'description': '1% of all LSST Alerts uniformly and randomly sampled'
|
|
22
|
+
}]
|
|
23
|
+
|
|
24
|
+
def _run(self, locus):
|
|
25
|
+
"""
|
|
26
|
+
If a LSST alert's diaSourceId % 113 == 0, tag with 'uniform_random_sample'
|
|
27
|
+
"""
|
|
28
|
+
if locus.alert.properties['lsst_diaSource_diaSourceId'] % 113 == 0:
|
|
29
|
+
locus.tag("uniform_random_sample")
|
|
@@ -24,10 +24,12 @@ def get_filters_path():
|
|
|
24
24
|
"IF_anomaly_detection": "antares_devkit.filters.if_anomaly_detection", # ["numpy", "pandas", "sklearn", "astropy"]
|
|
25
25
|
"IMBH": "antares_devkit.filters.imbh",
|
|
26
26
|
"In_LSSTDDF": "antares_devkit.filters.lsst_ddf", # ["astropy", "numpy"]
|
|
27
|
+
"InDecamShadow": "antares_devkit.filters.decam_shadow", # ["astropy", "numpy"]
|
|
27
28
|
"InM31": "antares_devkit.filters.inm31",
|
|
28
29
|
"LAISS_RFC_AD_filter": "antares_devkit.filters.laiss_rfc_ad_filter", # ["astropy", "timeout_decorator", "alerce", "numpy", "pandas", "matplotlib", "astro_ghost", "sklearn", "scipy"]
|
|
29
30
|
"AnomalyTransientDmDt": "antares_devkit.filters.malanchev_anomaly_transient_dmdt", # ["numpy", "astropy", "light_curve"]
|
|
30
31
|
"Features": "antares_devkit.filters.malanchev_features_v1", # ["numpy", "astropy", "light_curve"]
|
|
32
|
+
"microlensing": "antares_devkit.filters.microlensing",
|
|
31
33
|
"NovTest": "antares_devkit.filters.novtest",
|
|
32
34
|
"NuclearTransient": "antares_devkit.filters.nuclear_transient",
|
|
33
35
|
"NUTTelA_TAO": "antares_devkit.filters.nuttela_tao",
|
|
@@ -50,6 +52,7 @@ def get_filters_path():
|
|
|
50
52
|
"rubin_NovTest_soraisam": "antares_devkit.filters.rubin_NovTest_soraisam",
|
|
51
53
|
"young_rubin_transients_soraisam": "antares_devkit.filters.young_rubin_transients_soraisam",
|
|
52
54
|
"LsstTransientQualityFilterScimma": "antares_devkit.filters.lsst_transient_quality_scimma",
|
|
55
|
+
"UniformRandomSample": "antares_devkit.filters.uniform_random_sample",
|
|
53
56
|
}
|
|
54
57
|
|
|
55
58
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/bad_detection/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/crash_filter/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/desi_target/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/dwarf_nova_outburst/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/ecl_transient_1/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/ecl_transient_2/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/extragalactic/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/highfluxchange/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/laiss_rfc_ad_filter/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/nuclear_transient/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/nuttela_tao/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/persistent_dimmers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/recent_reddening/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/sample_filter/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/shadow_virgo/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/siena_mag_coord_cut/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/superphot_plus_v1/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/test_dev_all/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/test_dev_lsst/__init__.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/antares_devkit/filters/test_dev_ztf/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/filters/test_test_dev_all.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/filters/test_test_dev_lsst.py
RENAMED
|
File without changes
|
{antares_devkit-0.6.4 → antares_devkit-0.7.0}/test/unit/antares_devkit/filters/test_test_dev_ztf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|