Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

differentiate satellite GRIB2 products #268

Open
brancomat opened this issue May 5, 2021 · 11 comments
Open

differentiate satellite GRIB2 products #268

brancomat opened this issue May 5, 2021 · 11 comments
Assignees
Labels

Comments

@brancomat
Copy link
Member

Risolta la #264 si apre altro tema:
al momento mi pare che non ci sia modo di distinguere in un filter di un dataset (o in una query arkimet) i diversi canali dei dati satellitari.

Al momento mi sembra che l'unica differenza fra i grib di canali diversi sia il parametro scaledValueOfCentralWaveNumber

Se questo è formalmente corretto (e mi pare di sì, in caso contrario tocca rimettere mano a ARPA-SIMC/meteosatlib#2), per gestire la cosa la chiave suppongo dovrebbe finire rappresentata in qualche modo nel proddef o product dei GRIB2.

Se non sbaglio però è una chiave dipendente dal parametro "Number of contributing spectral bands (NB)" (https://apps.ecmwf.int/codes/grib/format/grib2/templates/4/32) quindi quando entrano in gioco più bande (ma non è il caso dei dati che gestiamo al momento) c'è da capire come gestire la cosa.

Al momento non mi vengono proposte intelligenti, ma ho tanta fiducia in @spanezz e @dcesari

(issue collegata: ARPA-SIMC/cosudo#108)

@dcesari
Copy link
Member

dcesari commented May 5, 2021

Non mi ero accorto che questa è un chiave "vettoriale" e quindi credo esuli dal data model dei nostri metadati. Non saprei come fare, se non sperare che abbiano una sola banda.
Per far le cose fatte bene, credo dovremmo anche includere nei metadati satelliteSeries, satelliteNumber e instrumentType oltre che considerare lo scaleFactorOfCentralWaveNumber o in quest'ultimo caso rinormalizzare lo scaledValue con uno scaleFactor predefinito, es. 0 con il rischio di avere numeri molto grandi (usare intero a 64 bit?). Purtroppo non sono un gran esperto di dati satellitari, ma temo che i colleghi che sono esperti li abbiano visti raramente in grib.

P.S. il template 32 è per dati satellitari simulati da modelli (in teoria potremmo avere anche quelli), quello per i dati osservati è il 31, ma il succo non cambia.

@spanezz
Copy link
Contributor

spanezz commented May 7, 2021

Se ho capito bene, un grib satellitare può avere un valore di lunghezza d'onda, o essere un prodotto calcolato a partire da piú lunghezze d'onda (tipo la riflettanza), per cui è sempre un prodotto unico, ma calcolato a partire da N lunghezze d'onda e un algoritmo.

Se stiamo parlando specificatamente di meteosat, il set di possibili lunghezze d'onda è specifico al SERVIRI e ogni lunghezza d'onda ha un nome descrittivo, per cui ci potremmo salvare in proddef il nome del canale ed eventualmente dei nomi di possibili elaborazioni come la riflettanza. In questo modo uno può chiedere, tipo, "IR_016" per la tal data/ora.

Se stiamo parlando di altri tipi di prodotti, a parte descrivere come sono rappresentati, chiedo di ragionare anche di quali esigenze ci sono in fase di estrazione: cioè, sia in base a quali parametri serve distinguere i GRIB perché non conflittino, che in base a quali parametri serva effettivamente tirarli fuori

@brancomat
Copy link
Member Author

Per le nostre attuali esigenze il nome del canale in proddef sarebbe perfetto. La riflettanza non è un problema nel senso che per meteosatlib è un canale virtuale che ricava dinamicamente a partire dai canali disponibili (che siano in HRIT o GRIB2) e quindi non dovrebbe essere necessario archiviarla.

Sulle esigenze in fase di estrazione da quel che capisco io il tutto si limita a reftime e canale.

L'unico tema che resta scoperto è il satellite: l'informazione MSG4/MSG3... è ricavabile? Ignoro se serva in fase di estrazione (mi informo) ma temo serva per alcuni tipi di processing.

@spanezz
Copy link
Contributor

spanezz commented May 28, 2021

Scartabellando dentro meteosatlib (gdal/grib.cc) vedo che Il tipo di satellite viene salvato nella chiave satelliteNumber, che dovreste riuscire a vedere con un grib_dump.

Quindi sí, anche l'informazione sul tipo di MSG è ricavabile dal GRIB, e possiamo infilarla nel proddef

@brancomat
Copy link
Member Author

Provando a tirare le somme: da quel che riesco a capire un proddef con nome del canale + nome del satellite sarebbe sufficiente a coprire i nostri attuali usi, voterei per procedere in questo senso.

@spanezz
Copy link
Contributor

spanezz commented Jun 4, 2021

Certo. Avete qualche GRIB di esempio?

@brancomat
Copy link
Member Author

Certo. Avete qualche GRIB di esempio?

https://github.com/ARPA-SIMC/qc_sample_data/tree/master/satellite/grib

@spanezz
Copy link
Contributor

spanezz commented Jun 4, 2021

Nota: se ci sono dataset con scansionati dati post #264, il valore proddef cambierà con l'aggiunta dei dati del meteosat

@spanezz
Copy link
Contributor

spanezz commented Jun 4, 2021

Ho usato questi nomi per i satelliti:

METEOSAT_NAMES = {
    55: "MSG1",
    56: "MSG2",
    57: "MSG3",
    70: "MSG4",
}

E questi nomi per i canali:

METEOSAT_CHAN_NAMES = {
    6:   "VIS006",
    8:   "VIS008",
    16:  "IR016",
    39:  "IR039",
    62:  "WV062",
    73:  "WV073",
    87:  "IR087",
    97:  "IR907",
    108: "IR108",
    120: "IR120",
    134: "IR134",
    7:   "HRV",
}

Meteosatlib mette un underscore per avere un nome canale sempre di 3 lettere (tipo IR_016 e VIS007). Mi sembra superfluo nei metadati, ma se preferite possiamo mantenerlo.

Ho usato sat e ch come chiavi in proddef: proddef: GRIB(ch=WV062, sat=MSG4, tod=0). Se preferite possiamo usare c e s, o altre chiavi: non so come preferite che sia organizzato il namespace di proddef

@spanezz
Copy link
Contributor

spanezz commented Jun 4, 2021

È in master. Lo lascio aperto come proposta implementativa in attesa di review

@spanezz spanezz added the review label Jun 4, 2021
@spanezz spanezz removed their assignment Jun 4, 2021
@brancomat
Copy link
Member Author

Va benissimo, grazie.

L'unico dubbio è sul mantenere 1:1 gli stessi nomi dei canali (underscore incluso) perché è la denominazione con cui arrivano i file HRIT dal software di acquisizione e pare una convenzione de facto su vari software derivati che manipolano dati meteosat/seviri, ma quella è una modifica che posso fare io al volo su conf/scan/grib2.py una volta decisa la cosa internamente.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants