pz-rail-astro-tools 1.0.5__py3-none-any.whl → 1.0.6__py3-none-any.whl
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.
Potentially problematic release.
This version of pz-rail-astro-tools might be problematic. Click here for more details.
- {pz_rail_astro_tools-1.0.5.dist-info → pz_rail_astro_tools-1.0.6.dist-info}/METADATA +1 -1
- {pz_rail_astro_tools-1.0.5.dist-info → pz_rail_astro_tools-1.0.6.dist-info}/RECORD +7 -8
- {pz_rail_astro_tools-1.0.5.dist-info → pz_rail_astro_tools-1.0.6.dist-info}/WHEEL +1 -1
- rail/astro_tools/_version.py +2 -2
- rail/creation/degraders/unrec_bl_model.py +51 -13
- rail/creation/degraders/bl_demo.ipynb +0 -206
- {pz_rail_astro_tools-1.0.5.dist-info → pz_rail_astro_tools-1.0.6.dist-info}/LICENSE +0 -0
- {pz_rail_astro_tools-1.0.5.dist-info → pz_rail_astro_tools-1.0.6.dist-info}/top_level.txt +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
rail/astro_tools/__init__.py,sha256=4J-E0Ug0RP3Y38g8kJ6auAPDPEI4Osf19tuSOAACfxk,432
|
|
2
|
-
rail/astro_tools/_version.py,sha256=
|
|
3
|
-
rail/creation/degraders/bl_demo.ipynb,sha256=GgaIU1hH_6WgnAJxWDzg79j-fO3_bvjOXbwRIzdAgnM,5633
|
|
2
|
+
rail/astro_tools/_version.py,sha256=T17ZEPR5Omt5RLA0TuZWTufRi58PzGIPek75nFcuMQY,411
|
|
4
3
|
rail/creation/degraders/grid_selection.py,sha256=gJKM0AYdG-HgvjTS3ovupbyoB5bxKhZn9FAAb94pQXY,12429
|
|
5
4
|
rail/creation/degraders/observing_condition_degrader.py,sha256=y6Nal_kSdAz6N8amY4oV6mQ3upa2nIgVbV9P6F0PKwA,19977
|
|
6
5
|
rail/creation/degraders/photometric_errors.py,sha256=xeLI5dH4P-kseClMsy7vTes6EBXh2Ca8_-9-nnFt3b0,4396
|
|
7
6
|
rail/creation/degraders/spectroscopic_degraders.py,sha256=27kylHksXf4MhgdfefSL7C2S3WCK-0YQ1Oc8dOHIBhc,5350
|
|
8
7
|
rail/creation/degraders/spectroscopic_selections.py,sha256=TXlghBWLAniokbUpgw4IQVf3y3R6BwralS0ddiVgMp4,22205
|
|
9
|
-
rail/creation/degraders/unrec_bl_model.py,sha256=
|
|
8
|
+
rail/creation/degraders/unrec_bl_model.py,sha256=8kDTDADMOu46BPRBKG9HtVCI9Q71WeQkxYcItzcQC8M,5192
|
|
10
9
|
rail/creation/engines/gcr_engine.py,sha256=LSp599uQGu8GcFNUmib792ScQwSB_Og8VxPLTt9aSNU,2981
|
|
11
10
|
rail/examples_data/creation_data/data/HSC_grid_settings.pkl,sha256=zpJoSR9TSnDyL64DPXivIMam3fn6GOZoyoJoeBj2LAk,141
|
|
12
11
|
rail/examples_data/creation_data/data/hsc_ratios_and_specz.hdf5,sha256=liH54wuuuHxToqjoAwQ_fFmEefk3haNweVThMwdDKN4,13823712
|
|
@@ -19,8 +18,8 @@ rail/pipelines/degradation/apply_phot_errors.py,sha256=vj2avYWxfavORIXzJ7925V9Yk
|
|
|
19
18
|
rail/pipelines/degradation/blending.py,sha256=oxZHy1Tai70wT4g4xnBr24z2LxmR1p_J6lMoTN0nFc8,564
|
|
20
19
|
rail/pipelines/degradation/spectroscopic_selection_pipeline.py,sha256=D0sDi6nrasv5CvQkLXgmMp0QbDrhGFRXzt6sWjlbD68,2028
|
|
21
20
|
rail/tools/photometry_tools.py,sha256=wfKAeMz5T_CYDPC661MHtU1aJXVqomvahZl87KuE7uY,19541
|
|
22
|
-
pz_rail_astro_tools-1.0.
|
|
23
|
-
pz_rail_astro_tools-1.0.
|
|
24
|
-
pz_rail_astro_tools-1.0.
|
|
25
|
-
pz_rail_astro_tools-1.0.
|
|
26
|
-
pz_rail_astro_tools-1.0.
|
|
21
|
+
pz_rail_astro_tools-1.0.6.dist-info/LICENSE,sha256=tLMEN21HbzvT-7umOVVvPjaJZbQxCa-2bAeYLwG5Q04,1102
|
|
22
|
+
pz_rail_astro_tools-1.0.6.dist-info/METADATA,sha256=FZnRuWE7ouiTsuikU28i2mrssyUgeGsNsEcYW6xzpGs,4040
|
|
23
|
+
pz_rail_astro_tools-1.0.6.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
|
24
|
+
pz_rail_astro_tools-1.0.6.dist-info/top_level.txt,sha256=6R6sqn-85I8YZTzmB9gv7sqckB2QaOTHbu-QLGTWBRE,5
|
|
25
|
+
pz_rail_astro_tools-1.0.6.dist-info/RECORD,,
|
rail/astro_tools/_version.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from ceci.config import StageParameter as Param
|
|
4
4
|
from rail.creation.degrader import Degrader
|
|
5
|
+
from rail.core.data import PqHandle
|
|
5
6
|
import numpy as np, pandas as pd
|
|
6
7
|
import FoFCatalogMatching
|
|
7
8
|
|
|
@@ -27,6 +28,46 @@ class UnrecBlModel(Degrader):
|
|
|
27
28
|
b=Param(str, 'semi_minor', msg='semi minor axis column name'),
|
|
28
29
|
theta=Param(str, 'orientation', msg='orientation angle column name'))
|
|
29
30
|
|
|
31
|
+
outputs = [("output", PqHandle), ("compInd", PqHandle)]
|
|
32
|
+
|
|
33
|
+
def __call__(self, sample, seed: int = None):
|
|
34
|
+
"""The main interface method for ``Degrader``.
|
|
35
|
+
|
|
36
|
+
Applies degradation.
|
|
37
|
+
|
|
38
|
+
This will attach the sample to this `Degrader` (for introspection and
|
|
39
|
+
provenance tracking).
|
|
40
|
+
|
|
41
|
+
Then it will call the run() and finalize() methods, which need to be
|
|
42
|
+
implemented by the sub-classes.
|
|
43
|
+
|
|
44
|
+
The run() method will need to register the data that it creates to this
|
|
45
|
+
Estimator by using ``self.add_data('output', output_data)``.
|
|
46
|
+
|
|
47
|
+
Finally, this will return a PqHandle providing access to that output
|
|
48
|
+
data.
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
sample : table-like
|
|
53
|
+
The sample to be degraded
|
|
54
|
+
seed : int, default=None
|
|
55
|
+
An integer to set the numpy random seed
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
output_data : PqHandle
|
|
60
|
+
A handle giving access to a table with degraded sample
|
|
61
|
+
"""
|
|
62
|
+
if seed is not None:
|
|
63
|
+
self.config.seed = seed
|
|
64
|
+
|
|
65
|
+
self.set_data("input", sample)
|
|
66
|
+
self.run()
|
|
67
|
+
self.finalize()
|
|
68
|
+
|
|
69
|
+
return {'output':self.get_handle("output"), 'compInd':self.get_handle("compInd")}
|
|
70
|
+
|
|
30
71
|
def __match_bl__(self, data):
|
|
31
72
|
|
|
32
73
|
"""Group sources with friends of friends"""
|
|
@@ -43,7 +84,7 @@ class UnrecBlModel(Degrader):
|
|
|
43
84
|
## adding the group id as the last column to data
|
|
44
85
|
matchData = pd.merge(data, results, left_index=True, right_index=True)
|
|
45
86
|
|
|
46
|
-
return matchData
|
|
87
|
+
return matchData, results
|
|
47
88
|
|
|
48
89
|
def __merge_bl__(self, data):
|
|
49
90
|
|
|
@@ -53,30 +94,25 @@ class UnrecBlModel(Degrader):
|
|
|
53
94
|
unique_id = np.unique(group_id)
|
|
54
95
|
|
|
55
96
|
ra_label, dec_label = self.config.ra_label, self.config.dec_label
|
|
56
|
-
|
|
57
|
-
cols = list(data.columns)
|
|
58
|
-
ra_ind = cols.index(ra_label)
|
|
59
|
-
dec_ind = cols.index(dec_label)
|
|
60
|
-
bands_ind = {b:cols.index(b) for b in self.config.bands}
|
|
97
|
+
cols = [ra_label, dec_label] + [b for b in self.config.bands] + ['group_id']
|
|
61
98
|
|
|
62
99
|
N_rows = len(unique_id)
|
|
63
100
|
N_cols = len(cols)
|
|
64
101
|
|
|
65
102
|
mergeData = np.zeros((N_rows, N_cols))
|
|
66
|
-
|
|
67
103
|
for i, id in enumerate(unique_id):
|
|
68
104
|
|
|
69
105
|
this_group = data.query(f'group_id=={id}')
|
|
70
106
|
|
|
71
107
|
## take the average position for the blended source
|
|
72
|
-
mergeData[i,
|
|
73
|
-
mergeData[i,
|
|
108
|
+
mergeData[i, cols.index(ra_label)] = this_group[ra_label].mean()
|
|
109
|
+
mergeData[i, cols.index(dec_label)] = this_group[dec_label].mean()
|
|
74
110
|
|
|
75
111
|
## sum up the fluxes into the blended source
|
|
76
112
|
for b in self.config.bands:
|
|
77
|
-
mergeData[i,
|
|
113
|
+
mergeData[i, cols.index(b)] = -2.5*np.log10(np.sum(10**(-this_group[b]/2.5)))
|
|
78
114
|
|
|
79
|
-
mergeData[
|
|
115
|
+
mergeData[:,cols.index('group_id')] = unique_id
|
|
80
116
|
mergeData_df = pd.DataFrame(data=mergeData, columns=cols)
|
|
81
117
|
mergeData_df['group_id'] = mergeData_df['group_id'].astype(int)
|
|
82
118
|
|
|
@@ -89,10 +125,12 @@ class UnrecBlModel(Degrader):
|
|
|
89
125
|
data = self.get_data("input")
|
|
90
126
|
|
|
91
127
|
# Match for close-by objects
|
|
92
|
-
matchData = self.__match_bl__(data)
|
|
128
|
+
matchData, compInd = self.__match_bl__(data)
|
|
93
129
|
|
|
94
130
|
# Merge matched objects into unrec-bl
|
|
95
131
|
blData = self.__merge_bl__(matchData)
|
|
96
132
|
|
|
97
|
-
# Return the new catalog
|
|
133
|
+
# Return the new catalog and component index in original catalog
|
|
98
134
|
self.add_data("output", blData)
|
|
135
|
+
self.add_data("compInd", compInd)
|
|
136
|
+
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"cells": [
|
|
3
|
-
{
|
|
4
|
-
"cell_type": "markdown",
|
|
5
|
-
"id": "2610a0f0-0c71-4401-896f-734442bcd66d",
|
|
6
|
-
"metadata": {},
|
|
7
|
-
"source": [
|
|
8
|
-
"## Blending Degrader demo\n",
|
|
9
|
-
"\n",
|
|
10
|
-
"author: Shuang Liang\n",
|
|
11
|
-
"\n",
|
|
12
|
-
"This notebook demonstrate the use of `rail.creation.degradation.unrec_bl_model`, which uses Friends of Friends to finds sources close to each other and merge them into unrecognized blends"
|
|
13
|
-
]
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"cell_type": "code",
|
|
17
|
-
"execution_count": null,
|
|
18
|
-
"id": "f7a6adc3-68e8-4a1d-842f-bfb0960a1c4a",
|
|
19
|
-
"metadata": {},
|
|
20
|
-
"outputs": [],
|
|
21
|
-
"source": [
|
|
22
|
-
"from rail.creation.degraders.unrec_bl_model import UnrecBlModel\n",
|
|
23
|
-
"\n",
|
|
24
|
-
"from rail.core.data import PqHandle\n",
|
|
25
|
-
"from rail.core.stage import RailStage\n",
|
|
26
|
-
"\n",
|
|
27
|
-
"import matplotlib.pyplot as plt\n",
|
|
28
|
-
"import pandas as pd, numpy as np"
|
|
29
|
-
]
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"cell_type": "code",
|
|
33
|
-
"execution_count": null,
|
|
34
|
-
"id": "6912a740-31ea-4987-b06d-81ff17cd895a",
|
|
35
|
-
"metadata": {},
|
|
36
|
-
"outputs": [],
|
|
37
|
-
"source": [
|
|
38
|
-
"DS = RailStage.data_store\n",
|
|
39
|
-
"DS.__class__.allow_overwrite = True\n"
|
|
40
|
-
]
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"cell_type": "markdown",
|
|
44
|
-
"id": "a282c2ed-141b-4507-8254-dc8fbc9864dc",
|
|
45
|
-
"metadata": {},
|
|
46
|
-
"source": [
|
|
47
|
-
"### Create a random catalog with ugrizy+YJHF bands as the the true input"
|
|
48
|
-
]
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"cell_type": "code",
|
|
52
|
-
"execution_count": null,
|
|
53
|
-
"id": "1078bc2a-fc54-41c3-bd30-6c447bb971d4",
|
|
54
|
-
"metadata": {},
|
|
55
|
-
"outputs": [],
|
|
56
|
-
"source": [
|
|
57
|
-
"data = np.random.normal(23, 3, size = (1000,12))\n",
|
|
58
|
-
"data[:, 0] = np.random.uniform(low=0, high=0.03, size=1000)\n",
|
|
59
|
-
"data[:, 1] = np.random.uniform(low=0, high=0.03, size=1000)\n",
|
|
60
|
-
"\n",
|
|
61
|
-
"data_df = pd.DataFrame(data=data, # values\n",
|
|
62
|
-
" columns=['ra', 'dec', 'u', 'g', 'r', 'i', 'z', 'y', 'Y', 'J', 'H', 'F'])\n",
|
|
63
|
-
"\n",
|
|
64
|
-
"data_truth = DS.add_data('input', data_df, PqHandle)"
|
|
65
|
-
]
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
"cell_type": "code",
|
|
69
|
-
"execution_count": null,
|
|
70
|
-
"id": "33c99a4d-8375-4003-9a9a-70fa85a3eb82",
|
|
71
|
-
"metadata": {},
|
|
72
|
-
"outputs": [],
|
|
73
|
-
"source": [
|
|
74
|
-
"#data_df.to_parquet('bl_test.pq')"
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"cell_type": "code",
|
|
79
|
-
"execution_count": null,
|
|
80
|
-
"id": "a5636721-a734-4746-bd93-8101bc558b6e",
|
|
81
|
-
"metadata": {},
|
|
82
|
-
"outputs": [],
|
|
83
|
-
"source": [
|
|
84
|
-
"plt.scatter(data_truth.data['ra'], data_truth.data['dec'], s=5)\n",
|
|
85
|
-
"plt.xlabel(\"Ra [Deg]\", fontsize=14)\n",
|
|
86
|
-
"plt.ylabel(\"Dec [Deg]\", fontsize=14)\n",
|
|
87
|
-
"plt.show()\n"
|
|
88
|
-
]
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
"cell_type": "markdown",
|
|
92
|
-
"id": "1da27deb-d167-4f38-8c59-f270184d6ab3",
|
|
93
|
-
"metadata": {},
|
|
94
|
-
"source": [
|
|
95
|
-
"### The blending model"
|
|
96
|
-
]
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
"cell_type": "code",
|
|
100
|
-
"execution_count": null,
|
|
101
|
-
"id": "a07f72a0-e24c-4844-90f0-d5a49ac4362b",
|
|
102
|
-
"metadata": {},
|
|
103
|
-
"outputs": [],
|
|
104
|
-
"source": [
|
|
105
|
-
"## radius cut is in arcsecs\n",
|
|
106
|
-
"blModel = UnrecBlModel.make_stage(name='unrec_bl_model', ra_label='ra', dec_label='dec', linking_lengths=1.0, \\\n",
|
|
107
|
-
" bands='ugrizyYJHF')\n",
|
|
108
|
-
"blModel.get_config_dict()\n"
|
|
109
|
-
]
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"cell_type": "code",
|
|
113
|
-
"execution_count": null,
|
|
114
|
-
"id": "e5f4862a-0621-46d4-8901-7e84b461c424",
|
|
115
|
-
"metadata": {},
|
|
116
|
-
"outputs": [],
|
|
117
|
-
"source": [
|
|
118
|
-
"samples_w_bl = blModel(data_truth)\n",
|
|
119
|
-
"samples_w_bl()\n"
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"cell_type": "code",
|
|
124
|
-
"execution_count": null,
|
|
125
|
-
"id": "bc5158dd-f474-4731-b847-b4a7358656b9",
|
|
126
|
-
"metadata": {},
|
|
127
|
-
"outputs": [],
|
|
128
|
-
"source": [
|
|
129
|
-
"fig, ax = plt.subplots(figsize=(6, 5), dpi=100)\n",
|
|
130
|
-
"\n",
|
|
131
|
-
"ax.scatter(data_truth.data['ra'], data_truth.data['dec'], s=10, facecolors='none', edgecolors='b', label='Original')\n",
|
|
132
|
-
"ax.scatter(samples_w_bl.data['ra'], samples_w_bl.data['dec'], s=5, c='r', label='w. Unrec-BL')\n",
|
|
133
|
-
"\n",
|
|
134
|
-
"ax.legend(loc=2, fontsize=12)\n",
|
|
135
|
-
"ax.set_xlabel(\"Ra [Deg]\", fontsize=14)\n",
|
|
136
|
-
"ax.set_ylabel(\"Dec [Deg]\", fontsize=14)\n",
|
|
137
|
-
"\n",
|
|
138
|
-
"plt.show()\n"
|
|
139
|
-
]
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
"cell_type": "code",
|
|
143
|
-
"execution_count": null,
|
|
144
|
-
"id": "268b3d37-b7fd-4ac1-8457-2104a87c9e6d",
|
|
145
|
-
"metadata": {},
|
|
146
|
-
"outputs": [],
|
|
147
|
-
"source": [
|
|
148
|
-
"b = 'r'\n",
|
|
149
|
-
"plt.hist(data_truth.data[b], bins=np.linspace(10, 30, 20), label='Original')\n",
|
|
150
|
-
"plt.hist(samples_w_bl.data[b], bins=np.linspace(10, 30, 20), fill=False, label='w. Unrec-BL')\n",
|
|
151
|
-
"\n",
|
|
152
|
-
"plt.xlabel(fr'Magnitude ${b}$', fontsize=14)\n",
|
|
153
|
-
"plt.legend(fontsize=12)\n",
|
|
154
|
-
"plt.show()\n"
|
|
155
|
-
]
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"cell_type": "code",
|
|
159
|
-
"execution_count": null,
|
|
160
|
-
"id": "a1d51c15-1e04-4b22-9abb-9b267965dbeb",
|
|
161
|
-
"metadata": {},
|
|
162
|
-
"outputs": [],
|
|
163
|
-
"source": [
|
|
164
|
-
"flux = 10**(-(data_truth.data[b]-28.10)/2.5) # r band zp for lsst is 28.10\n",
|
|
165
|
-
"flux_bl = 10**(-(samples_w_bl.data[b]-28.10)/2.5)\n",
|
|
166
|
-
"\n",
|
|
167
|
-
"plt.hist(flux, bins=np.linspace(0, 10000, 40), label='Original')\n",
|
|
168
|
-
"plt.hist(flux_bl, bins=np.linspace(0, 10000, 40), fill=False, label='w. Unrec-BL')\n",
|
|
169
|
-
"\n",
|
|
170
|
-
"plt.xlabel(fr'Flux ${b}$', fontsize=14)\n",
|
|
171
|
-
"plt.yscale('log')\n",
|
|
172
|
-
"plt.legend(fontsize=12)\n",
|
|
173
|
-
"plt.show()\n"
|
|
174
|
-
]
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"cell_type": "code",
|
|
178
|
-
"execution_count": null,
|
|
179
|
-
"id": "da2b37c8-4667-4ad2-ad09-b1c68d2612b8",
|
|
180
|
-
"metadata": {},
|
|
181
|
-
"outputs": [],
|
|
182
|
-
"source": []
|
|
183
|
-
}
|
|
184
|
-
],
|
|
185
|
-
"metadata": {
|
|
186
|
-
"kernelspec": {
|
|
187
|
-
"display_name": "Python 3 (ipykernel)",
|
|
188
|
-
"language": "python",
|
|
189
|
-
"name": "python3"
|
|
190
|
-
},
|
|
191
|
-
"language_info": {
|
|
192
|
-
"codemirror_mode": {
|
|
193
|
-
"name": "ipython",
|
|
194
|
-
"version": 3
|
|
195
|
-
},
|
|
196
|
-
"file_extension": ".py",
|
|
197
|
-
"mimetype": "text/x-python",
|
|
198
|
-
"name": "python",
|
|
199
|
-
"nbconvert_exporter": "python",
|
|
200
|
-
"pygments_lexer": "ipython3",
|
|
201
|
-
"version": "3.12.3"
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
"nbformat": 4,
|
|
205
|
-
"nbformat_minor": 5
|
|
206
|
-
}
|
|
File without changes
|
|
File without changes
|