Skip to content

Commit 4c0bd2e

Browse files
authored
Merge pull request #1595 from TOMToolkit/1594-add-wavelength-unit-for-spectroscopyreduceddatum
1594 add wavelength unit for spectroscopyreduceddatum
2 parents ff671ac + 1ed3642 commit 4c0bd2e

6 files changed

Lines changed: 35 additions & 6 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.14 on 2026-07-02 21:57
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('tom_dataproducts', '0016_reduceddatum_instrument_reduceddatum_telescope_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='spectroscopyreduceddatum',
15+
name='wavelength_unit',
16+
field=models.TextField(blank=True, default=''),
17+
),
18+
]

tom_dataproducts/models.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ class SpectroscopyReducedDatum(ReducedDatumCommon):
465465
flux = FloatArrayField(blank=True, default=list)
466466
error = FloatArrayField(blank=True, default=list)
467467
flux_unit = models.TextField(blank=True, default="")
468+
wavelength_unit = models.TextField(blank=True, default="")
468469

469470
class Meta:
470471
constraints = [
@@ -554,14 +555,16 @@ def _build_photometry_reduced_datum(data: dict) -> PhotometryReducedDatum:
554555

555556
def _build_spectroscopy_reduced_datum(data: dict) -> SpectroscopyReducedDatum:
556557
FLUX_FIELDS = {"flux", "f"}
557-
WAVELENGTH_FIELDS = {"wavelength", "wave", "wl"}
558+
WAVELENGTH_FIELDS = {"wavelength", "wave", "wl", "lambda"}
558559
ERROR_FIELDS = {"error", "err", "flux_error", "f_error"}
559560
FLUX_UNIT_FIELDS = {"flux_unit", "f_unit", "flux_units", "f_units"}
561+
WAVELENGTH_UNIT_FIELDS = {"wavelength_unit", "w_unit", "wavelength_units", "w_units", "lambda_unit", "lambda_units"}
560562

561563
flux = _pop_find_field(FLUX_FIELDS, data) or []
562564
wavelength = _pop_find_field(WAVELENGTH_FIELDS, data) or []
563565
error = _pop_find_field(ERROR_FIELDS, data) or []
564566
flux_unit = _pop_find_field(FLUX_UNIT_FIELDS, data) or ""
567+
wavelength_unit = _pop_find_field(WAVELENGTH_UNIT_FIELDS, data) or ""
565568

566569
extra_fields = _extract_extra_fields(data, SpectroscopyReducedDatum)
567570

@@ -570,6 +573,7 @@ def _build_spectroscopy_reduced_datum(data: dict) -> SpectroscopyReducedDatum:
570573
flux=flux,
571574
error=error,
572575
flux_unit=flux_unit,
576+
wavelength_unit=wavelength_unit,
573577
value=extra_fields,
574578
**data,
575579
)

tom_dataproducts/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def _get_typed_value(self, instance):
7171
'wavelength': instance.wavelength,
7272
'error': instance.error,
7373
'flux_unit': instance.flux_unit,
74+
'wavelength_unit': instance.wavelength_unit,
7475
'telescope': instance.telescope,
7576
'instrument': instance.instrument,
7677
}

tom_dataproducts/sharing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ def process_spectro_data_for_download(datum):
205205
'instrument': datum.instrument,
206206
'setup': datum.setup,
207207
'flux_unit': datum.flux_unit,
208+
'wavelength_unit': datum.wavelength_unit,
208209
'source_name': datum.source_name,
209210
}
210211
for i, (wavelength, flux) in enumerate(zip(datum.wavelength, datum.flux)):

tom_dataproducts/tests/test_api.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ def test_upload_spectroscopy_datum(self):
226226
payload = {
227227
"data_product": "",
228228
"data_type": "spectroscopy",
229-
"value": {"flux": [123.4, 4.321], "wavelength": [150, 151], "error": [0.005], "flux_unit": "s"},
229+
"value": {"flux": [123.4, 4.321], "wavelength": [150, 151], "error": [0.005], "flux_unit": "s",
230+
"wavelength_unit": "Angstrom"},
230231
"target": self.st.id,
231232
"timestamp": "2012-02-12T01:40:47Z",
232233
}
@@ -303,7 +304,7 @@ def test_spectroscopy_representation(self):
303304
"""SpectroscopyReducedDatum is serialized to the legacy wire format."""
304305
SpectroscopyReducedDatum.objects.create(
305306
target=self.st, flux=[1.0, 2.0], wavelength=[6000.0, 6001.0],
306-
error=[0.1, 0.1], flux_unit='erg/cm2/s/A'
307+
error=[0.1, 0.1], flux_unit='erg/cm2/s/A', wavelength_unit="um",
307308
)
308309

309310
result = self.client.get(reverse('api:reduceddatums-list')).data['results'][0]
@@ -313,6 +314,7 @@ def test_spectroscopy_representation(self):
313314
self.assertEqual(result['value']['wavelength'], [6000.0, 6001.0])
314315
self.assertEqual(result['value']['error'], [0.1, 0.1])
315316
self.assertEqual(result['value']['flux_unit'], 'erg/cm2/s/A')
317+
self.assertEqual(result['value']['wavelength_unit'], 'um')
316318

317319
def test_astrometry_representation(self):
318320
"""AstrometryReducedDatum is serialized to the legacy wire format."""

tom_dataproducts/tests/tests.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,8 @@ def test_create_spectra_with_flux_data(self):
564564
exposure_time=1000.0,
565565
flux=flux,
566566
wavelength=wavelength,
567-
flux_unit="Å",
567+
flux_unit="mJy",
568+
wavelength_unit="µm",
568569
)
569570
rd.refresh_from_db() # ensure we round trip to the database
570571
self.assertEqual(flux, rd.flux)
@@ -578,7 +579,8 @@ def test_create_spectra_with_error_data(self):
578579
flux=[1.0, 2.0, 3.0, 4.0],
579580
wavelength=[1, 2, 3, 4],
580581
error=error,
581-
flux_unit="Å",
582+
flux_unit="erg / s / cm2 / Å",
583+
wavelength_unit="Å",
582584
)
583585
rd.refresh_from_db()
584586
self.assertEqual(error, rd.error)
@@ -591,7 +593,8 @@ def test_create_spectra_bad_flux(self):
591593
exposure_time=1000.0,
592594
flux=[1.0, 2.0, 3.0, "asd"],
593595
wavelength=[1, 2, 3, 4],
594-
flux_unit="cm^2",
596+
flux_unit="erg / s / cm2 / Å",
597+
wavelength_unit="µm",
595598
)
596599

597600

0 commit comments

Comments
 (0)