================================================================================ NOTICE TECHNIQUE : SPECIFICATIONS DES FORMATS DE DONNEES OHMCV ================================================================================ *** AUTEUR : Fabien MINISCLOUX (LTHE) *** *** DATE : Mai 2002 *** *** MODIF : *** ---------------- 0 - INTRODUCTION ---------------- Ce document a pour but de specifier les formats de donnees OHMCV preconiser pour le stockage et le traitement des donnees de l'Observatoire. Deux types de format ASCII ont ete defini : - format OHMIM (OHMcv IMage) : stockage des "grilles" de valeurs - format OHMTS (OHMcv Time Serie) : stockage d'une serie chronologique de valeurs ----------------- I - FORMAT OHMIM ----------------- I-1) CARACTERISTIQUES GENRERALES --------------------------------- Le format OHMIM permet de stocker 1 ou plusieurs grilles de valeurs, ainsi qu'un ensemble de meta-donnees decrivant le contenu de ces grilles. Selon le type de donnees, le formatage de ces meta-donnees change. C'est pourquoi la structure du fichier OHMIM est modulaire : [1er module : COMMENTAIRES_LIBRES ] ----------------------------------------- [separateur = ligne de 50 tirets] [2eme module : HEADER_GENERAL ] ----------------------------------------- [id] [3eme module : HEADER_DONNEES ] ----------------------------------------- [id] [4eme module : HEADER_GRILLE N°1 ] ----------------------------------------- [id] [5eme module : GRILLE N°1 ] Les modules 4 et 5 se repetent autant de fois que necessaires lors de l'ecriture de plusieurs grilles. Dans la suite, on decrit le structure de chacun de ces blocs. I-2) COMMENTAIRES_LIBRES ------------------------- << NUMBER_LINE | Nombre de lignes de commentaires # ligne de commentaires 1 # ligne de commentaires 2 # etc >> Remarque 1: Une ligne de commentaire commence necessairement par les caracteres : ' #' I-3) HEADER_GENERAL -------------------- << FORMAT_TYPE | Type de format ohmcv : 'grid' DATA_TYPE | cartepluvio ou radar_polar ou | radar_cartesian ou mnt ou autre NUMBER_GRID | Nombre de grilles MISS_VALUE | Code de valeur manquante | (par defaut -999.) >> Remarque 1 : DATA_TYPE contraint le choix d'un HEADER_DONNEES et eventuellement la facon d'ecrire le grille. C'est le cas avec 'radar_polar' puisque dans ce cas, on rajoute pour chaque ligne l'azimuth et le site de chaque radiale. ------------------- II - HEADER DONNEES ------------------- Pour chaque type de DATA_TYPE, il y a un type de HEADER associe. II-1) HEADER_NETWORK [DATA_TYPE='cartepluvio'] -------------------- << HEADER_NETWORK | Flag indiquant le debut du header NUMBER_STATION | Nombre de stations UNITX | Unite sur l'axe des X ('km' ou 'deg') UNITY | Unite sur l'axe des Y UNITZ | Unite sur l'axe des Z de i=1,NUMBER_STATION XSTAT(i),YSTAT(i),ZSTAT(i) | Coordonnees X,Y et Z de chaque station >> II-2) HEADER_RADAR [DATA_TYPE='radar_cartesian' ou 'radar_polar'] ------------------ << RADAR_NAME | Nom du radar ADMIN_NAME | Administrateur : 'MTOFRANCE' ou 'LTHE' XRADLIIE, YRADLIIE, ZRAD | Coordonnees X,Y,Z du radar | (km Lambert II etendu pour X et Y) | (m pour l'altitude) LATRAD, LONRAD | Latitude et longitude du radar (en deg) TRANS_POWER | Puissance transmise (kW) FREQUENCY | Frequence (GHz) PULSE_LENGTH | Duree du pulse (en micro-sec) PULSE_REP_FREQ | PRF (Hz) POWER_GAIN | Gain en puissance (dB) THETA3DB | Ouverture du faisceau a 3dB NUMBER_SWEEP, REV_TIME | Nombre de balayages et | temps de revisite (min) de i=1,NUMBER_SWEEP AZ_BEGIN(i) | Azimut de depart (deg) [meme ligne] AZ_DELTA(i) | Increment d'azimut (deg) [meme ligne] AZ_NUMBER(i) | Nombre d'azimuts [meme ligne] EL_BEGIN(i) | Site de depart (deg) [meme ligne] EL_DELTA(i) | Increment de site (deg) [meme ligne] EL_NUMBER(i) | Nombre de sites [meme ligne] BIN_SIZE(i) | Taille de la porte (km) [meme ligne] BIN_NUMBER(i) | Nombre de portes [meme ligne] MIN_RANGE(i) | Distance a la premiere porte [meme ligne] PULSE_AV_NUMBER(i) | Nombre de tirs successifs moyennes [meme ligne] BIN_AV_NUMBER(i) | Nombre de portes successives moyennees PRODUCT_TYPE | 'PPI','RHI','RTI','HTI','CAPPI','HYPPI' | 'VOLUME' VARIABLE_NAME | 'reflectivity', | 'standart_deviation_reflectivity', | 'doppler_velocity', | 'rain_intensity', | 'rain_accumulation' VARIABLE_UNIT | 'dbz','m/s','mm/h','mm' RECORD_TYPE | 'mean','instantaneous', | 'sum','min','max' AND, MOISD, JOURD, HEURED, MINUTED | Debut de l'evenement ANF, MOISF, JOURF, HEUREF, MINUTEF | Fin de l'evenement >> Remarque 1 : Les dates sont codees de la facon suivante : annee : INTEGER(4) mois : INTEGER(2) jour : INTEGER(2) heure : INTEGER(2) minute :INTEGER(2) II-3) HEADER_MNT [DATA_TYPE='mnt'] ----------------- [indisponible] ------------ III) GRILLE ------------ III-1) HEADER_GRILLE --------------------- XMIN, XMAX, YMIN, YMAX, DX, DY, NX, NY | Caracteristiques de la grille X_UNIT | Unite de l'axe X : 'km' ou 'deg' | ou 'min' Y_UNIT | Idem ANDEB, MOISDEB, JOURDEB, | Date Image Debut ... HEUREDEB, MINUTEDEB | ANFIN, MOISFIN? JOURFIN, | Date Image Fin ... HEUREFIN, MINUTEFIN | ZMINPOS, ZMAXPOS | Valeurs min et max autorisees pour | la variable consideree ZMIN, ZMAX | Valeurs min et max dans la grille XZMIN, YZMIX | Localisation X, Y de la valeur min XZMAX, YZMAX | Localisation X, Y de la valeur max COMPRESS_STATUS | 'COMPRESSED' ou 'NOT_COMPRESSED' | indiquent si les donnees de la grille | sont compressees ou non si 'COMPRESSED' alors on code : CONTROL_VALUE ! Valeur de controle utilisee dans la ! compression des valeurs de la grille ! (Voir methode de compression) WRITING_FORMAT | Indique le type de format utilise pour | l'ecriture des valeurs de la grille. | 10 caracteres sous la forme : | (nnnFxx.p) ou seuls les champs xx et p | sont remplis. Remarque 1 : (XMIN YMIN) et (XMAX YMAX) sont respectivement les coordonnees au centre de la maille des points (1,1) et (NX,NY). DX et DY designent respectivement le pas de la grille suivant X et suivant Y. NX et NY designent respectivement le nombre de points suivant X et suivant Y. Un test est effectue pour verifier la coherence de ces 6 valeurs. III-2) GRILLE -------------- si DATA_TYPE='radar_polar' : | Si coordonnees polaires, on ecrit AZ(1),SITE(1) | l'azimuth et le site de la 1ere | radiale. M(1,1) M(1,2) M(1,3) ... M(1,NY)/ | Si 'NOT_COMPRESSED' alors on ecrit | NY valeurs (dimension suivant Y). | Si 'COMPRESSED' alors on ecrit le | nombre de valeurs une fois la ligne | compressee. | Le caractere '/' marque la fin de la | ligne DANS TOUS LES CAS. | REMARQUE : En FORTRAN, le caractere '/' | marque la fin de lecture d'une liste de | valeurs. Ex : read(10,*) (tab(i),i=1,100) | marche meme s'il n'y a que 10 valeurs suivies | d'un '/' (slash). si DATA_TYPE='radar_polar' : AZ(2),SITE(2) M(2,1) M(2,2) M(2,3) ... M(2,NY) ... ... Remarque 1 : M(i,j) designe la grille de valeurs a ecrire. Par convention : - l'indice i designe les colonnes - l'indice j designe les lignes - le point M(1,1) est en bas a gauche, donc i croit vers la gauche et j croit vers le haut Remarque 2 : Algorithme de compression. On code systématiquement les valeurs redondantes de la maniere suivante : 2. 3. 3. 3. 3. 4. 4. 5. devient 2. -1004. 3. -1002. 4. 5. Soit : -(CONTROL_VALUE + nombre_fois) valeur si nombre_fois > 1 Dans le cas ou on veuille coder : 50. {2000 fois la valeur "zero"} 60. devient 50. -3000. 0. 60. avec CONTROL_VALUE=1000. 50. -2000. 0. 60. avec CONTROL_VALUE=0. Remarque 3 : Choix de CONTROL_VALUE. On choisit : CONTROL_VALUE=ABS(MIN(ZMIN-1, 0)) eventuellement arrondi a l'entier superieur De cet facon, l'algorithme de compression permet de coder des valeurs > ou = a ZMIN. ------------------ IV - FORMAT OHMTS ------------------ [a venir]