ITA-Solar / solo-spice-ql

Quicklook software for Solar Orbiter SPICE
MIT License
7 stars 1 forks source link

XCFIT_BLOCK, FITS file #30

Closed martinwiesmann closed 2 years ago

martinwiesmann commented 3 years ago

How should we save the ana parameters into a FITS file?

https://github.com/ITA-Solar/solo-spice-ql/wiki/spice_xcit_block_plan#fits-file

martinwiesmann commented 3 years ago

From the email 19.8.2021 from Stein Vidar:

Angående innhold i Level 3-filene for SPICE (og dermed SOLARNET), så er det to hensyn vi må forholde oss til:

  1. Det er ønskelig å lagre all informasjon om én emisjonslinje (intensitet, hastighet og bredde) i samme ekstensjon

  2. Hver fil bør inneholde alt av informasjon om hele tilpasningen, dvs. at de bør inkludere alle data om alle emisjonslinjer involvert i tilpasningen, pluss bakgrunn. Og bakgrunnen er jo felles for alle emisjonslinjene!

Så altså:

En ekstensjon har én ekstradimensjon á la STOKES i polarisasjonsdata, der koordinatverdiene kan ha følgende verdier/betydning:

FITPARAM = 0 == intensity FITPARAM = 1 == velocity FITPARAM = 2 == width FITPARAM = 3+ == polynomial coefficients (background)

Merk at en bakgrunner er et polynom som potensielt har multiple koeffisienter, så vi trenger mer enn én, der. Men så er det andre typer parametre.. hva gjør vi da? Vel, for STOKES bruker man også negative verdier, for disse andre polarisasjons greiene (ikke IQUV men, uh, de andre greiene). Da har vi plass til i det minste én ekstra type. Eller egentlig uendelig mange, så lenge alle har et forhåndsbestemt antall parametre. I verste fall kan man si at "verdier mellom 10 og 49 betyr positive parametre for f.eks. eksponensialfunksjoner c_{n} e^{n} = c_1 e^{1} + c2 * e^{2}, og verdier 50-99 er negative eksponensialer som c{n} * e^{-n}...

Og så videre. Med denne metoden kan man så legge til et "uendelig" antall komponenttyper ved å si at "values between 200 and 299 means xxx-parameters, values between 300 and 399 means yyy-parameters...".

Man må da av og til bruke tabulerte FITPARAM-koordinater, men...

Noen protester? Jeg verker etter en runde med Le Doc-oppdateringer! Not!

martinwiesmann commented 3 years ago

From the email from 22.9.2021 from Stein Vidar:

Så var det lagringsformat - som fungerer som definisjon av SPICE L3 og SOLARNET-anbefaling!!

Et absolutt krav er at man kan gå begge veier, fra ANA til FITS og tilbake uten tap av (viktig) informasjon. Og naturligvis fra minst ett av formatene til noe SPICE-objekt-liknende... Hmm det trenger vel ikke være i slekt med eksisterende objekt(er) i det hele tatt??? Og må det i det hele tatt være SPICE-spesifikt???

Merk ang. uten tap: data minus modell fra parametre = residuals, men man kan løse likn. for data slik at de er gitt ved modell + residuals. Og vi vil at residuals skal være så synlige som mulige - ergo lagrer vi residuals, ikke data.

Noen hensyn vi bør ta ift. filstørrelser? Optional parts?

--- SEPARATE-EXTENSIONS SCHEME ------------

One extension per ANA component, include all info from ANA component so it's reconstructable Define coordinates akin to STOKES on a per-component-type basis? E.g:

------ first extension CTYPE1 = GAUSS-PARAMETER CRVAL1 = 1 CRPIX1 = 1

GAUSS-PARAMETER = 1 means Intensity GAUSS-PARAMETER = 2 means Width GAUSS-PARAMETER = 3 means Velocity (or line position - look at ANA component contents, there's a zero point)

------ second extension CTYPE1 = 'POLYNOMIAL' ...

POLYNOMIAL = 1 => a (constant) POLYNOMIAL = 2 => b (+ bx) POLYNOMIAL = 3 => c (+ cx^2)

How to bind all components together? How to mark them as ANA extensions?

--- SINGLE-EXTENSION SCHEME ------

Explicitly ordered components => explicitly numbered fit parameters => single extension for fit parameters?

ANACMPnn => Type of ANA component n? Up to 99? Or is 26 (letter a) enough ANACNTnn => number of components for component n => 3 for Gauss => n for polynomials of order (n-1) ANAPRnna => ANA component number nn, parameters descriptions (Intensity/Width/Velocity), up to 27 ("a", ... "z")

Data cube becomes [n-param, x, y, time, ...]

martinwiesmann commented 3 years ago

We decided to go with the SINGLE_EXTENSION SCHEME. So that one window from level 2 gets into one extension in level 3, plus residuals etc...

martinwiesmann commented 2 years ago

Solution: ANA2FITS and FITS2ANA