@@ -189,8 +189,8 @@ def add_more_metadata(metadata):
189
189
190
190
if 'exposure' not in metadata .keys ():
191
191
metadata ['exposure' ] = {}
192
- if 'guidestar ' not in metadata .keys ():
193
- metadata ['guidestar ' ] = {}
192
+ if 'guide_star ' not in metadata .keys ():
193
+ metadata ['guide_star ' ] = {}
194
194
read_pattern = metadata ['exposure' ].get (
195
195
'read_pattern' ,
196
196
parameters .read_pattern [metadata ['exposure' ]['ma_table_number' ]])
@@ -204,73 +204,32 @@ def add_more_metadata(metadata):
204
204
for prefix , offset in offsets .items ():
205
205
metadata ['exposure' ][f'{ prefix } _time' ] = Time ((
206
206
starttime + offset ).isot )
207
- metadata ['exposure' ][f'{ prefix } _time_mjd' ] = (
208
- starttime + offset ).mjd
209
- metadata ['exposure' ][f'{ prefix } _time_tdb' ] = (
210
- starttime + offset ).tdb .mjd
211
- metadata ['exposure' ]['ngroups' ] = len (read_pattern )
212
- metadata ['exposure' ]['sca_number' ] = (
213
- int (metadata ['instrument' ]['detector' ][- 2 :]))
214
- metadata ['exposure' ]['integration_time' ] = openshuttertime
215
- metadata ['exposure' ]['elapsed_exposure_time' ] = openshuttertime
216
- # ???
217
- metadata ['exposure' ]['groupgap' ] = 0
207
+ metadata ['exposure' ]['nresultants' ] = len (read_pattern )
218
208
metadata ['exposure' ]['frame_time' ] = parameters .read_time
219
209
metadata ['exposure' ]['exposure_time' ] = openshuttertime
220
- metadata ['exposure' ]['effective_exposure_time' ] = openshuttertime
221
- metadata ['exposure' ]['duration' ] = openshuttertime
222
- metadata ['guidestar' ]['gw_window_xsize' ] = 16
223
- metadata ['guidestar' ]['gw_window_ysize' ] = 16
224
- if 'gw_window_xstart' in metadata ['guidestar' ]:
225
- metadata ['guidestar' ]['gw_window_xstop' ] = (
226
- metadata ['guidestar' ]['gw_window_xstart' ])
227
- metadata ['guidestar' ]['gw_window_ystop' ] = (
228
- metadata ['guidestar' ]['gw_window_ystart' ])
229
- # integration_start? integration_end? nints = 1? ...
230
-
231
- if 'target' not in metadata .keys ():
232
- metadata ['target' ] = {}
233
- target = metadata ['target' ]
234
- target ['type' ] = 'FIXED'
235
- if 'wcsinfo' in metadata .keys ():
236
- target ['ra' ] = metadata ['wcsinfo' ]['ra_ref' ]
237
- target ['dec' ] = metadata ['wcsinfo' ]['dec_ref' ]
238
- target ['proposer_ra' ] = target ['ra' ]
239
- target ['proposer_dec' ] = target ['dec' ]
240
- target ['ra_uncertainty' ] = 0
241
- target ['dec_uncertainty' ] = 0
242
- target ['proper_motion_ra' ] = 0
243
- target ['proper_motion_dec' ] = 0
244
- target ['proper_motion_epoch' ] = 'J2000'
245
- target ['source_type' ] = 'EXTENDED'
246
-
247
- # there are a few metadata keywords that have problematic, too-long
248
- # defaults in RDM.
249
- # program.category
250
- # ephemeris.ephemeris_reference_frame
251
- # guidestar.gs_epoch
252
- # this truncates these to the maximum allowed characters. Alternative
253
- # solutions would include doing things like:
254
- # making the roman_datamodels defaults archivable
255
- # making the roman_datamodels validation check lengths of strings
256
- if 'program' in metadata :
257
- metadata ['program' ]['category' ] = metadata ['program' ]['category' ][:6 ]
258
- if 'ephemeris' in metadata :
259
- metadata ['ephemeris' ]['ephemeris_reference_frame' ] = (
260
- metadata ['ephemeris' ]['ephemeris_reference_frame' ][:10 ])
261
- if 'guidestar' in metadata and 'gs_epoch' in metadata ['guidestar' ]:
262
- metadata ['guidestar' ]['gs_epoch' ] = (
263
- metadata ['guidestar' ]['gs_epoch' ][:10 ])
264
-
265
-
266
- def update_aperture_and_wcsinfo_metadata (metadata , gwcs ):
267
- """Update aperture and wcsinfo keywords to use the aperture for this SCA.
210
+ effexptime = parameters .read_time * (
211
+ np .mean (read_pattern [- 1 ]) - np .mean (read_pattern [0 ]))
212
+ metadata ['exposure' ]['effective_exposure_time' ] = effexptime
213
+ metadata ['guide_star' ]['window_xsize' ] = 16
214
+ metadata ['guide_star' ]['window_ysize' ] = 16
215
+ if 'window_xstart' in metadata ['guide_star' ]:
216
+ metadata ['guide_star' ]['window_xstop' ] = (
217
+ metadata ['guide_star' ]['window_xstart' ])
218
+ metadata ['guide_star' ]['window_ystop' ] = (
219
+ metadata ['guide_star' ]['window_ystart' ])
220
+ if 'visit' not in metadata .keys ():
221
+ metadata ['visit' ] = dict ()
222
+ metadata ['visit' ]['status' ] = 'SUCCESSFUL'
223
+
224
+
225
+ def update_pointing_and_wcsinfo_metadata (metadata , gwcs ):
226
+ """Update pointing and wcsinfo keywords to use the aperture for this SCA.
268
227
269
228
Updates metadata in place, setting v2/v3_ref to be equal to the V2 and V3 of
270
229
the center of the detector, and ra/dec_ref accordingly. Also updates the
271
- aperture to refer to this SCA.
230
+ pointing to refer to this SCA and ra/dec_v1 to point along the boresight .
272
231
273
- No updates are performed if gwcs is not a gWCS object or if aperture and
232
+ No updates are performed if gwcs is not a gWCS object or if pointing and
274
233
wcsinfo are not present in metadata.
275
234
276
235
Parameters
@@ -280,15 +239,14 @@ def update_aperture_and_wcsinfo_metadata(metadata, gwcs):
280
239
gwcs : WCS object
281
240
image WCS
282
241
"""
283
- if 'aperture ' not in metadata or 'wcsinfo' not in metadata :
242
+ if 'pointing ' not in metadata or 'wcsinfo' not in metadata :
284
243
return
285
244
if isinstance (gwcs , wcs .GWCS ):
286
245
gwcs = gwcs .wcs
287
246
if not isinstance (gwcs , gwcsmod .wcs .WCS ):
288
247
return
289
- metadata ['aperture' ]['name' ] = (
290
- metadata ['instrument' ]['detector' ][:3 ] + '_'
291
- + metadata ['instrument' ]['detector' ][3 :] + '_FULL' )
248
+ metadata ['wcsinfo' ]['aperture_name' ] = (
249
+ metadata ['instrument' ]['detector' ] + '_FULL' )
292
250
distortion = gwcs .get_transform ('detector' , 'v2v3' )
293
251
center = (galsim .roman .n_pix / 2 - 0.5 , galsim .roman .n_pix / 2 - 0.5 )
294
252
v2v3 = distortion (* center )
@@ -314,6 +272,16 @@ def update_aperture_and_wcsinfo_metadata(metadata, gwcs):
314
272
metadata ['wcsinfo' ]['v3_ref' ] = v2v3 [1 ]
315
273
metadata ['wcsinfo' ]['roll_ref' ] = roll_ref
316
274
275
+ boresight = t2sky (0 , 0 )
276
+ metadata ['pointing' ]['ra_v1' ] = boresight [0 ]
277
+ metadata ['pointing' ]['dec_v1' ] = boresight [1 ]
278
+ boresightn = t2sky (0 , 1 )
279
+ pa_v3 = (
280
+ SkyCoord (boresight [0 ] * u .deg , boresight [1 ] * u .deg ).position_angle (
281
+ SkyCoord (boresightn [0 ] * u .deg , boresightn [1 ] * u .deg )))
282
+ pa_v3 = pa_v3 .to (u .deg ).value
283
+ metadata ['pointing' ]['pa_v3' ] = pa_v3
284
+
317
285
318
286
def king_profile (r , rc , rt ):
319
287
"""Compute the King profile.
@@ -532,12 +500,10 @@ def update_photom_keywords(im, gain=None):
532
500
cc [0 ].position_angle (cc [2 ]))
533
501
area = (cc [0 ].separation (cc [1 ]) * cc [0 ].separation (cc [2 ])
534
502
* np .sin (angle .to (u .rad ).value ))
535
- im ['meta' ]['photometry' ]['pixelarea_steradians' ] = area .to (u .sr ).value
536
- im ['meta' ]['photometry' ]['pixelarea_arcsecsq' ] = (
537
- area .to (u .arcsec ** 2 )).value
503
+ im ['meta' ]['photometry' ]['pixel_area' ] = area .to (u .sr ).value
538
504
val = (gain * (3631 / bandpass .get_abflux (
539
- im .meta ['instrument' ]['optical_element' ]) /
540
- 10 ** 6 / im ['meta' ]['photometry' ]['pixelarea_steradians ' ]))
505
+ im .meta ['instrument' ]['optical_element' ]) /
506
+ 10 ** 6 / im ['meta' ]['photometry' ]['pixel_area ' ]))
541
507
im ['meta' ]['photometry' ]['conversion_megajanskys' ] = val
542
508
im ['meta' ]['photometry' ]['conversion_microjanskys' ] = (
543
509
val * u .MJy / u .sr ).to (u .uJy / u .arcsec ** 2 ).value
0 commit comments