24 from astropy.io.votable.tree
import Info
25 from astropy.io.votable
import from_table
26 from astropy.table
import Column
33 """Select records from source catalog 37 record : `lsst.afw.detect.SourceRecord` 40 'all' to select all records. 'blended parents' to select records with 41 more than zero children. 'deblended children' to select records with 42 non-zero parents. 'isolated' to select records that are not blended, 43 meaning zero parents and zero children. 44 Values to check for sel 46 nChildren = record.get(
'deblend_nChild')
47 parentId = record.getParent()
48 if selection ==
'all':
50 elif selection ==
'blended parents':
51 return (nChildren > 0)
52 elif selection ==
'deblended children':
54 elif selection ==
'isolated':
55 return ((parentId == 0)
and (nChildren == 0))
57 raise RuntimeError(
'invalid selection: {}'.
format(selection) +
58 '\nMust be one of "all", "blended parents", ' +
59 '"deblended children", "isolated"')
63 """make a VOTable of SourceData table and footprints 67 catalog : `lsst.afw.table.SourceCatalog` 68 Source catalog from which to display footprints. 69 xy0 : tuple or list or None 70 Pixel origin to subtract off from the footprint coordinates. 71 If None, the value used is (0,0) 73 Column at which to insert the "family_id" and "category" columns 77 `astropy.io.votable.voTableFile` 78 VOTable object to upload to Firefly 84 _catalog.extend(catalog, deep=
True)
85 sourceTable = _catalog.asAstropy()
88 for colName
in sourceTable.colnames:
89 if sourceTable[colName].dtype.num == 9:
90 sourceTable[colName].dtype = np.dtype(
'long')
92 inputColumnNames = sourceTable.colnames
103 for record
in catalog:
104 footprint = record.getFootprint()
105 recordId = record.getId()
106 spans = footprint.getSpans()
107 scoords = [(s.getY()-y0, s.getX0()-x0, s.getX1()-x0)
for s
in spans]
108 scoords = np.array(scoords).flatten()
109 scoords = np.ma.MaskedArray(scoords, mask=np.zeros(len(scoords),
111 fpbbox = footprint.getBBox()
112 corners = [(c.getX()-x0, c.getY()-y0)
for c
in fpbbox.getCorners()]
113 fpxll.append(corners[0][0])
114 fpyll.append(corners[0][1])
115 fpxur.append(corners[2][0])
116 fpyur.append(corners[2][1])
117 peaks = footprint.getPeaks()
118 pcoords = [(p.getFx()-x0, p.getFy()-y0)
for p
in peaks]
119 pcoords = np.array(pcoords).flatten()
120 pcoords = np.ma.MaskedArray(pcoords, mask=np.zeros(len(pcoords),
122 fpbbox = footprint.getBBox()
123 parentId = record.getParent()
124 nChild = record.get(
'deblend_nChild')
126 familyList.append(recordId)
129 categoryList.append(
'blended parent')
132 categoryList.append(
'isolated')
135 familyList.append(parentId)
136 categoryList.append(
'deblended child')
137 spanList.append(scoords)
138 peakList.append(pcoords)
140 sourceTable.add_column(Column(np.array(familyList)),
143 sourceTable.add_column(Column(np.array(categoryList)),
145 index=insertColumn+1)
146 sourceTable.add_column(Column(np.array(spanList)), name=
'spans')
147 sourceTable.add_column(Column(np.array(peakList)), name=
'peaks')
148 sourceTable.add_column(Column(np.array(fpxll)), name=
'footprint_corner1_x')
149 sourceTable.add_column(Column(np.array(fpyll)), name=
'footprint_corner1_y')
150 sourceTable.add_column(Column(np.array(fpxur)), name=
'footprint_corner2_x')
151 sourceTable.add_column(Column(np.array(fpyur)), name=
'footprint_corner2_y')
153 outputVO = from_table(sourceTable)
154 outTable = outputVO.get_first_table()
156 outTable.infos.append(Info(name=
'contains_lsst_footprints', value=
'true'))
157 outTable.infos.append(Info(name=
'contains_lsst_measurements', value=
'true'))
158 outTable.infos.append(Info(name=
'FootPrintColumnNames',
159 value=
'id;footprint_corner1_x;footprint_corner1_y;' +
160 'footprint_corner2_x;footprint_corner2_y;spans;peaks'))
161 outTable.infos.append(Info(name=
'pixelsys', value=
'zero-based'))
163 if ((
'slot_Centroid_x' in inputColumnNames)
and 164 (
'slot_Centroid_y' in inputColumnNames)
and 165 np.isfinite(outTable.array[
'slot_Centroid_x']).
any()
and 166 np.isfinite(outTable.array[
'slot_Centroid_y']).
any()):
167 coord_column_string =
'slot_Centroid_x;slot_Centroid_y;ZERO_BASED' 168 elif ((
'coord_ra' in inputColumnNames)
and 169 (
'coord_dec' in inputColumnNames)
and 170 np.isfinite(outTable.array[
'coord_ra']).
any()
and 171 np.isfinite(outTable.array[
'coord_dec']).
any()):
172 coord_column_string =
'coord_ra;coord_dec;EQ_J2000' 173 elif ((
'base_SdssCentroid_x' in inputColumnNames)
and 174 (
'base_SdssCentroid_y' in inputColumnNames)
and 175 np.isfinite(outTable.array[
'base_SdssCentroid_x']).
any()
and 176 np.isfinite(outTable.array[
'base_SdssCentroid_y']).
any()):
177 coord_column_string =
'base_SdssCentroid_x;base_SdssCentroid_y;ZERO_BASED' 178 elif ((
'base_NaiveCentroid_x' in inputColumnNames)
and 179 (
'base_NaiveCentroid_y' in inputColumnNames)
and 180 np.isfinite(outTable.array[
'base_NaiveCentroid_x']).
any()
and 181 np.isfinite(outTable.array[
'base_NaiveCentroid_y']).
any()):
182 coord_column_string =
'base_NaiveCentroid_x;base_NaiveCentroid_y;ZERO-BASED' 184 raise RuntimeError(
'No valid coordinate columns in catalog')
185 outTable.infos.append(Info(name=
'CatalogCoordColumns',
186 value=coord_column_string))
188 for f
in outTable.fields:
189 if f.datatype ==
'bit':
190 f.datatype =
'boolean' 192 outTable._config[
'version_1_3_or_later'] =
True 193 outputVO.set_all_tables_format(
'binary2')
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
bool any(CoordinateExpr< N > const &expr) noexcept
Return true if any elements are true.