Skip to content

oxy_sat() reverses adjusted / real-time logic when p.has_adjusted == True #154

Description

@CarolinaAmadio

Titolo

oxy_sat() reverses adjusted / real-time logic when p.has_adjusted == True

Descrizione

Nel file oxygen_saturation.py, la funzione oxy_sat(p) sembra selezionare il profilo di temperatura e salinità con una logica invertita rispetto al comportamento definito in BioFloat.read().

Codice attuale

if p.has_adjusted:
    PresT, Temp, QcT = p.read('TEMP', read_adjusted=False)
    PresS, Sali, QcS = p.read('PSAL', read_adjusted=False)
else:
    PresT, Temp, QcT = p.read('TEMP')
    PresS, Sali, QcS = p.read('PSAL')

Perché il comportamento sembra errato

In bio_float.py, il metodo:

BioFloat.read(var, read_adjusted=True)

restituisce i dati adjusted, mentre:

read_adjusted=False

restituisce i dati real-time / non-adjusted.

Di conseguenza, nel ramo:

if p.has_adjusted:

la funzione sta leggendo esplicitamente i dati non-adjusted, mentre il ramo else utilizza implicitamente read_adjusted=True (default), tentando quindi di leggere dati adjusted.

Questo sembra invertire la logica attesa.

Possibile fix

Una possibile soluzione potrebbe essere quella di tentare prima la lettura dei profili adjusted di temperatura e salinità, utilizzando i dati real-time/non-adjusted solo come fallback nel caso in cui i dati adjusted non siano disponibili o siano insufficienti.

Ho implementato un approccio simile nel branch fix-qc-superfloat, ad esempio in superfloat_oxygen.py:

def read_temp_psal(p):
    PresT, Temp, QcT = p.read('TEMP', read_adjusted=True)
    Pres, Sali, QcS = p.read('PSAL', read_adjusted=True)

    if (Pres is None or PresT is None or Temp is None or
        Sali is None or len(Pres) < 5 or len(PresT) < 5):

        PresT, Temp, QcT = p.read('TEMP', read_adjusted=False)
        Pres, Sali, QcS = p.read('PSAL', read_adjusted=False)

    return PresT, Temp, QcT, Pres, Sali, QcS

Questo approccio mantiene la logica attesa:

  1. utilizzare i dati adjusted quando disponibili;
  2. effettuare fallback ai dati real-time solo se necessario.

File coinvolti

  • oxygen_saturation.py
  • bio_float.py (comportamento di read_adjusted)
  • superfloat_oxygen.py (esempio implementato nel branch fix-qc-superfloat)

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions