[Dachs-support] iterOtherAxis error with transformation matrix
Markus Demleitner
msdemlei at ari.uni-heidelberg.de
Fri Jun 14 07:52:16 CEST 2024
Ixaka,
On Thu, Jun 13, 2024 at 05:41:36PM +0200, Ixaka Labadie wrote:
> I am testing a SODA-like service with 3D data where the spectral one can be
> either wavelength or velocity.
> I was using "fits_makeWCSParams()" with "axisMetaOverrides" = 3 but with
> some new cubes I am getting an error.
> I traced the error to "fitstools.WCSAxis.fromHeader()"
> inĀ "iterOtherAxisKeys()", which raises a ValueError if the axis is mentioned
> in the transformation matrix (CPi_j or PCi_j), which it is. The
> transformation matrix is the identity matrix.
>
> I saw that this can be fixed with the "forceSeparable" argument but there is
> no way to set it in "fits_makeWCSParams()". I could write a new
> "dataFunction" myself or try using "fits_makeBandMeta" and
> "fits_VelocityMeta" but with the latter option I do not know how to
> differentiate between cubes with velocity or wavelength not to raise an
> error.
>
> Is there a proper way to fix this?
Probably not with the code as it is.
However, after *a bit* of thought (disclaimer: it's been a while
since I last played with cube WCS in any depth), it would seem to me
that in protocols.soda.iterOtherAxisKeys, it is safe to pass
forceSeparable to the WCSAxis constructor; after all, a human has
asked for it.
So, what happens if you apply the following patch?
diff --git a/gavo/protocols/soda.py b/gavo/protocols/soda.py
index a6933019..3f12c094 100644
--- a/gavo/protocols/soda.py
+++ b/gavo/protocols/soda.py
@@ -194,7 +194,10 @@ def iterOtherAxisKeys(descriptor, axisMetaOverrides):
continue
try:
- ax = fitstools.WCSAxis.fromHeader(descriptor.hdr, fitsAxis)
+ ax = fitstools.WCSAxis.fromHeader(
+ descriptor.hdr,
+ fitsAxis,
+ forceSeparable=True)
except ValueError:
# probably botched WCS, or an inseparable axis.
# Just ignore this axis, operators can add it manually
(well, just edit
/usr/lib/python3/dist-packages/gavo/protocols/soda.py by hand; if you
do want to use patch, in Debian it would be <become root> cd
/usr/lib/python3/dist-packages/gavo/protocols/ patch -p 3 <
/path/to/patch I think).
If that doesn't do it, it would be great if you could prepare some
reproducer with the RD and one header of each kind.
Thanks,
Markus
More information about the Dachs-support
mailing list