[15] | 1 | function lecteur_norm, filenames,infonames, lecteurs, varid, output_varid,transfos, ether_norm_struct, daterange=daterange, lonrange=lonrange, latrange=latrange, param_aux=param_aux,densite=densite,erreur=erreur |
---|
| 2 | ; |
---|
| 3 | ; filenames : tableau de string |
---|
| 4 | ; |
---|
| 5 | ; infonames : tableau de string |
---|
| 6 | ; lecteurs : tableau de string |
---|
| 7 | ; varid : tableau de structures du type [{variable:'Aerosol', nature:'Mes', subvariable:'1018IR', unite:'m/s'},{variable:'Altitude',, nature:'Mes', subvariable:''}] |
---|
| 8 | ;output_varid : tableau de structure. parametres en sortie du lecteur (apres transformation) |
---|
| 9 | ; transfos : tableau de structures [ptr_new([{nom:'t9',aux1:4,aux2:999},{nom:'c1',aux1:999,aux2:999}],ptr_new([{nom:'c1',aux1:999,aux2:999},{nom:'t4',aux1:4,aux2:999},{nom:'c2',aux1:999,aux2:999}]] |
---|
| 10 | ; ether_norm_struct : |
---|
| 11 | ; Tags de la structure ETHER_NORM_STRUCT |
---|
| 12 | ; --------------------------------- |
---|
| 13 | ; nb_prof (scalaire entier): |
---|
| 14 | ; nombre de profils |
---|
| 15 | ; nombre de profils total issu de chaque fichier de donnees traité et inclus dans les plages daterange, lonrange, latrange |
---|
| 16 | ; nb_var (scalaire entier): |
---|
| 17 | ; nombre de variables |
---|
| 18 | ; nombre de variables en sortie = N_elements(output_varid) |
---|
| 19 | ; nb_niv (scalaire entier): |
---|
| 20 | ; nombre de niveaux verticaux des profils |
---|
| 21 | ; nombre de niveaux MAX issu de chaque fichier de donnees traité |
---|
| 22 | ; Nota : si le nombre de niveaux est differents selon le fichier de donnee traitee , mettre des valeurs 999.999 dans tableau aux niveaux non definis |
---|
| 23 | ; date (tableau de chaines de caractËres de dimension nbprof): |
---|
| 24 | ; date de chacun des profils au format AAAAMMJJhhmmss |
---|
| 25 | ; latitude (tableau de reels de dimension nbprof): |
---|
| 26 | ; latitude de chacun des profils (en °, entre -90° au S et +90° au N) |
---|
| 27 | ; longitude (tableau de reels de dimension nbprof): |
---|
| 28 | ; longitude de chacun des profils (en °, entre -180° à l'W et +180° à l'E) |
---|
| 29 | ; numorb tableau de chaines de caracteres de dimension nbprof): |
---|
| 30 | ; numero d'orbite pour chacun des profils |
---|
| 31 | ; dans le cas d'instruments embarques sur satellite |
---|
| 32 | ; zensol (tableau de reels de dimension nbprof): |
---|
| 33 | ; angle zenithal solaire pour chacun des profils |
---|
| 34 | ; comment (tableau de chaines de caracteres de dimension nbprof): |
---|
| 35 | ; informations specifiques aux fichiers |
---|
| 36 | ; variable (tableau de chaines de caracteres de dimension nb_var): |
---|
| 37 | ; liste des variables lues dans le fichier |
---|
| 38 | ; (especes chimiques ou parametres physiques) |
---|
| 39 | ; subvariable (tableau de chaines de caracteres de dimension nb_var): |
---|
| 40 | ; liste des sous-variables (information complementaire à propos des variables) |
---|
| 41 | ; unite (tableau de chaines de caracteres de dimension nb_var): |
---|
| 42 | ; unite dans laquelle est exprimee chacune des variables |
---|
| 43 | ; nature (tableau de chaines de caracteres de dimension nb_var): |
---|
| 44 | ; nature de chacune des variables (provenant de mesures ou d'un modele) |
---|
| 45 | ; tableau (tableau de reels de dimension nb_prof x nb_var x nb_niv): |
---|
| 46 | ; valeurs prises par chacune des variables, par niveau vertical et par profil |
---|
| 47 | ; |
---|
| 48 | ; NOTA : pour chaque variable de sortie (i) decrite dans output_varid , il existe un index (idx) unique telque : |
---|
| 49 | ; ether_norm_struct.variable[idx]=output_varid[i].variable |
---|
| 50 | ; ether_norm_struct.subvariable[idx]=output_varid[i].subvariable |
---|
| 51 | ; ether_norm_struct.nature[idx]=output_varid[i].nature |
---|
| 52 | ; ether_norm_struct.unite[idx]]=output_varid[i].unite |
---|
| 53 | ; ether_norm_struct.tableau[*,idx,*] : ensemble des valeurs calculee pour la variable (i) par profil et par niveau |
---|
| 54 | ; |
---|
| 55 | ; daterange=[20040601120054,20040602120054] |
---|
| 56 | ; lonrange=[20,180] |
---|
| 57 | ; param_aux=param_aux ; ex : [ptr_new({nomfile:<file>,nomvariable:'Press',nomsubvariable:'.',nomnature:'Mes', nominfo:'<file>'}, |
---|
| 58 | ; {nomfile:aux_input,nomvariable:'Temp',nomsubvariable:'.',nomnature:'Mes', nominfo:'<file>'}])) |
---|
| 59 | ; densite=densite ; 1 ou 0 |
---|
| 60 | ; erreur=erreur |
---|
| 61 | ; |
---|
| 62 | |
---|
| 63 | if densite eq 3 then begin |
---|
| 64 | |
---|
| 65 | ether_struct = CALL_FUNCTION(lecteurs[0],filenames[0]) |
---|
| 66 | |
---|
| 67 | endif else begin |
---|
| 68 | |
---|
| 69 | |
---|
| 70 | ;setdata,systime(),0,1 |
---|
| 71 | IF N_ELEMENTS(filenames) eq 0 THEN BEGIN |
---|
| 72 | erreur='At least one file must be specified' |
---|
| 73 | print,erreur |
---|
| 74 | RETURN,'-1' |
---|
| 75 | ENDIF |
---|
| 76 | IF N_ELEMENTS(infonames) eq 0 THEN BEGIN |
---|
| 77 | erreur='At least one information file must be specified' |
---|
| 78 | print,erreur |
---|
| 79 | RETURN,'-1' |
---|
| 80 | ENDIF |
---|
| 81 | IF N_ELEMENTS(lecteurs) eq 0 THEN BEGIN |
---|
| 82 | erreur='At least one reader program must be specified' |
---|
| 83 | print,erreur |
---|
| 84 | RETURN,'-1' |
---|
| 85 | ENDIF |
---|
| 86 | IF N_ELEMENTS(infonames) ne N_ELEMENTS(filenames) THEN BEGIN |
---|
| 87 | erreur='The number of information files must be equal to the number of files' |
---|
| 88 | print,erreur |
---|
| 89 | RETURN,'-1' |
---|
| 90 | ENDIF |
---|
| 91 | IF N_ELEMENTS(varid) ne N_ELEMENTS(transfos) THEN BEGIN |
---|
| 92 | erreur='The number of transformations must be equal to the number of variables' |
---|
| 93 | print,erreur |
---|
| 94 | RETURN,'-1' |
---|
| 95 | ENDIF |
---|
| 96 | IF N_ELEMENTS(varid) lt 2 THEN BEGIN |
---|
| 97 | erreur='At least 2 variables must be specified' |
---|
| 98 | print,erreur |
---|
| 99 | RETURN,'-1' |
---|
| 100 | ENDIF |
---|
| 101 | IF N_ELEMENTS(output_varid) lt 2 THEN BEGIN |
---|
| 102 | erreur='At least 2 variables must be specified for the output variables' |
---|
| 103 | print,erreur |
---|
| 104 | RETURN,'-1' |
---|
| 105 | ENDIF |
---|
| 106 | IF N_ELEMENTS(param_aux) ne N_ELEMENTS(filenames) THEN BEGIN |
---|
| 107 | IF N_ELEMENTS(param_aux) eq 1 THEN param_aux = REPLICATE(param_aux, N_ELEMENTS(filenames)) ELSE BEGIN |
---|
| 108 | if n_elements(param_aux) eq 0 then param_aux = replicate([ptr_new([{nomfile:'',nomvariable:'',nomsubvariable:'',nomnature:'',nominfo:''}])],n_elements(filenames)) else begin |
---|
| 109 | erreur='The number of auxiliary parameters must be equal to the number of files' |
---|
| 110 | print,erreur |
---|
| 111 | RETURN,'-1' |
---|
| 112 | endelse |
---|
| 113 | endelse |
---|
| 114 | ENDIF |
---|
| 115 | |
---|
| 116 | IF SIZE(output_varid[0],/type) ne 8 THEN BEGIN |
---|
| 117 | erreur='The output variables must be contained in a structure' |
---|
| 118 | print,erreur |
---|
| 119 | RETURN,'-1' |
---|
| 120 | END |
---|
| 121 | tag = TAG_NAMES(output_varid[0]) |
---|
| 122 | IF TOTAL(STRMATCH(tag,'variable',/fold_case)) eq 0 THEN BEGIN |
---|
| 123 | erreur="The tag 'variable' is not defined in output variables" |
---|
| 124 | print,erreur |
---|
| 125 | RETURN,'-1' |
---|
| 126 | ENDIF |
---|
| 127 | IF TOTAL(STRMATCH(tag,'subvariable',/fold_case)) eq 0 THEN BEGIN |
---|
| 128 | erreur="The tag 'subvariable' is not defined in output variables" |
---|
| 129 | print,erreur |
---|
| 130 | RETURN,'-1' |
---|
| 131 | ENDIF |
---|
| 132 | IF TOTAL(STRMATCH(tag,'nature',/fold_case)) eq 0 THEN BEGIN |
---|
| 133 | erreur="The tag 'nature' is not defined in output variables" |
---|
| 134 | print,erreur |
---|
| 135 | RETURN,'-1' |
---|
| 136 | ENDIF |
---|
| 137 | |
---|
| 138 | IF SIZE(varid[0],/type) ne 8 THEN BEGIN |
---|
| 139 | erreur='The variables must be contained in a structure' |
---|
| 140 | print,erreur |
---|
| 141 | RETURN,'-1' |
---|
| 142 | END |
---|
| 143 | tag = TAG_NAMES(varid[0]) |
---|
| 144 | IF TOTAL(STRMATCH(tag,'variable',/fold_case)) eq 0 THEN BEGIN |
---|
| 145 | erreur="The tag 'variable' is not defined" |
---|
| 146 | print,erreur |
---|
| 147 | RETURN,'-1' |
---|
| 148 | ENDIF |
---|
| 149 | IF TOTAL(STRMATCH(tag,'subvariable',/fold_case)) eq 0 THEN BEGIN |
---|
| 150 | erreur="The tag 'subvariable' is not defined" |
---|
| 151 | print,erreur |
---|
| 152 | RETURN,'-1' |
---|
| 153 | ENDIF |
---|
| 154 | IF TOTAL(STRMATCH(tag,'nature',/fold_case)) eq 0 THEN BEGIN |
---|
| 155 | erreur="The tag 'nature' is not defined" |
---|
| 156 | print,erreur |
---|
| 157 | RETURN,'-1' |
---|
| 158 | ENDIF |
---|
| 159 | |
---|
| 160 | |
---|
| 161 | IF N_ELEMENTS(daterange) lt 2 THEN daterange=[ulong64(0),ulong64(30000000000000)] |
---|
| 162 | IF N_ELEMENTS(lonrange) lt 2 THEN lonrange=[-180,360] |
---|
| 163 | IF N_ELEMENTS(latrange) lt 2 THEN latrange=[-90,90] |
---|
| 164 | |
---|
| 165 | |
---|
| 166 | ; initialisation des variables de sortie |
---|
| 167 | varx = ptr_new() |
---|
| 168 | vary = ptr_new() |
---|
| 169 | |
---|
| 170 | vardate = ptr_new() |
---|
| 171 | varlatitude = ptr_new() |
---|
| 172 | varlongitude = ptr_new() |
---|
| 173 | varnumorb = ptr_new() |
---|
| 174 | varzensol = ptr_new() |
---|
| 175 | varcomment = ptr_new() |
---|
| 176 | |
---|
| 177 | |
---|
| 178 | ; boucle sur les fichiers |
---|
| 179 | erreur='' |
---|
| 180 | erreur0='' |
---|
| 181 | niveau_norm=1 |
---|
| 182 | tot_nbprof=0 |
---|
| 183 | FOR ifile = 0, N_ELEMENTS(filenames)-1 DO BEGIN |
---|
| 184 | ; filenames[ifile] est bien accessible ? |
---|
| 185 | IF FILE_TEST(filenames[ifile],/read) eq 0 THEN print,"The file "+filenames[ifile]+" does not exist or is not readable" ELSE BEGIN |
---|
| 186 | |
---|
| 187 | ; lecture du fichier |
---|
| 188 | ;print,'filename=',filenames[ifile] |
---|
| 189 | ether_struct = CALL_FUNCTION(lecteurs[0],filenames[ifile],infonames[ifile],densite=densite,paramaux=*param_aux[ifile]) |
---|
| 190 | print,'size(ether_struct->reader',size(ether_struct.tableau) |
---|
| 191 | ;print,'******************' |
---|
| 192 | ;print,ether_struct.variable |
---|
| 193 | ;print,'*******************' |
---|
| 194 | |
---|
| 195 | ;print,'******************' |
---|
| 196 | ;print,ether_struct.subvariable |
---|
| 197 | ;nprint,'*******************' |
---|
| 198 | |
---|
| 199 | ;print,'******************' |
---|
| 200 | ;print,ether_struct.nature |
---|
| 201 | ;print,'*******************' |
---|
| 202 | |
---|
| 203 | |
---|
| 204 | ; extraction des variables; combien il y en a, d'abord ? |
---|
| 205 | |
---|
| 206 | nvar = N_ELEMENTS(varid) |
---|
| 207 | ; declaration array de pointeurs car la dimension des profils n'est pas connue |
---|
| 208 | var = ptrarr(nvar) |
---|
| 209 | |
---|
| 210 | ; commence par la fin -> sont stockees les variables auxiliaires et au passage application des tranformations |
---|
| 211 | noprof=0 |
---|
| 212 | |
---|
| 213 | FOR ivar = nvar-1,0,-1 DO BEGIN |
---|
| 214 | ; print,'ivar=',ivar |
---|
| 215 | ; print,'ether_struct.nature=',ether_struct.nature |
---|
| 216 | ; print,'varid[ivar].nature=',varid[ivar].nature |
---|
| 217 | ; print,'****************************************' |
---|
| 218 | ; print,'ether_struct.variable=',ether_struct.variable |
---|
| 219 | ; print,'varid[ivar].variable=',varid[ivar].variable |
---|
| 220 | |
---|
| 221 | |
---|
| 222 | ; if ether_struct.nature eq varid[ivar].nature then begin |
---|
| 223 | ; print,'OUI NATURE' |
---|
| 224 | ; endif else begin |
---|
| 225 | ; print, 'NON NATURE' |
---|
| 226 | ; endelse |
---|
| 227 | |
---|
| 228 | ; if ether_struct.subvariable eq varid[ivar].subvariable then begin |
---|
| 229 | ; print, 'OUI SUB' |
---|
| 230 | ; endif else begin |
---|
| 231 | ; print, 'NON SUB' |
---|
| 232 | ; endelse |
---|
| 233 | |
---|
| 234 | |
---|
| 235 | idx = WHERE(STRMATCH(ether_struct.variable,varid[ivar].variable) ne 0 and $ |
---|
| 236 | ether_struct.nature eq varid[ivar].nature and $ |
---|
| 237 | ether_struct.subvariable eq varid[ivar].subvariable,count) |
---|
| 238 | ;print,'variable=',ether_struct.variable |
---|
| 239 | ;print,'longitude=',ether_struct.longitude |
---|
| 240 | ;print,'latitude=',ether_struct.latitude |
---|
| 241 | |
---|
| 242 | IF count eq 0 and varid[ivar].variable ne 'phi' and varid[ivar].nature ne 'ARL' THEN BEGIN |
---|
| 243 | erreur0=erreur0+"!cThe variable ("+varid[ivar].variable+","$ |
---|
| 244 | +varid[ivar].nature+","+varid[ivar].subvariable+") is not available in the file "+filenames[ifile] |
---|
| 245 | noprof=1 |
---|
| 246 | print,'!!>>',erreur0 |
---|
| 247 | ENDIF ELSE BEGIN |
---|
| 248 | isel = WHERE(ether_struct.longitude ge lonrange[0],count) |
---|
| 249 | if count eq 0 then begin |
---|
| 250 | print,'pb lonmin' |
---|
| 251 | endif |
---|
| 252 | |
---|
| 253 | isel = WHERE(ether_struct.longitude le lonrange[1],count) |
---|
| 254 | if count eq 0 then begin |
---|
| 255 | print,'pb lonmax' |
---|
| 256 | endif |
---|
| 257 | |
---|
| 258 | isel = WHERE(ether_struct.latitude ge latrange[0],count) |
---|
| 259 | if count eq 0 then begin |
---|
| 260 | print,'pb latmin' |
---|
| 261 | endif |
---|
| 262 | |
---|
| 263 | isel = WHERE(ether_struct.latitude le latrange[1],count) |
---|
| 264 | if count eq 0 then begin |
---|
| 265 | print,'pb latmax' |
---|
| 266 | endif |
---|
| 267 | |
---|
| 268 | isel = WHERE( ulong64(ether_struct.date) ge daterange[0],count) |
---|
| 269 | if count eq 0 then begin |
---|
| 270 | print,'pb datemin' |
---|
| 271 | endif |
---|
| 272 | |
---|
| 273 | isel = WHERE( ulong64(ether_struct.date) le daterange[1],count) |
---|
| 274 | if count eq 0 then begin |
---|
| 275 | print,'pb datemax' |
---|
| 276 | endif |
---|
| 277 | |
---|
| 278 | isel = WHERE(ether_struct.longitude ge lonrange[0] and ether_struct.longitude le lonrange[1] and $ |
---|
| 279 | ether_struct.latitude ge latrange[0] and ether_struct.latitude le latrange[1] and $ |
---|
| 280 | ulong64(ether_struct.date) ge daterange[0] and ulong64(ether_struct.date) le daterange[1] ,count) |
---|
| 281 | |
---|
| 282 | |
---|
| 283 | IF count eq 0 THEN BEGIN |
---|
| 284 | erreur='No drawing in the selected range of date/latitude/longitude!c -> Directory : '+$ |
---|
| 285 | strmid(filenames[ifile],0,strpos(filenames[ifile],'/',/reverse_search))+'!c -> File : '+$ |
---|
| 286 | strmid(filenames[ifile],strpos(filenames[ifile],'/',/reverse_search)+1) |
---|
| 287 | |
---|
| 288 | print,erreur |
---|
| 289 | erreur0=erreur0+'!c'+erreur |
---|
| 290 | noprof=1 |
---|
| 291 | break |
---|
| 292 | ENDIF |
---|
| 293 | |
---|
| 294 | IF densite eq 0 THEN nbniv = (size(ether_struct.tableau))[3] else nbniv = 1 |
---|
| 295 | |
---|
| 296 | ; Lancement du script ARLETTY |
---|
| 297 | IF varid[ivar].nature eq 'ARL' THEN BEGIN |
---|
| 298 | arletty,ether_struct,isel,count,varid,ivar,numreq,erreur=erreur |
---|
| 299 | erreur0=erreur0+'!c'+erreur |
---|
| 300 | ENDIF ELSE BEGIN |
---|
| 301 | IF varid[ivar].variable eq 'phi' THEN BEGIN |
---|
| 302 | dumvar = fltarr(count,nbniv) |
---|
| 303 | FOR iniv = 0L, nbniv-1 DO BEGIN |
---|
| 304 | dumvar[*,iniv]=ether_struct.latitude[isel] |
---|
| 305 | ENDFOR |
---|
| 306 | ENDIF ELSE BEGIN |
---|
| 307 | ; print,'size(n_elements)=',size(ether_struct.tableau) |
---|
| 308 | ; print,'idx=',idx |
---|
| 309 | IF n_elements(ether_struct.tableau[isel,idx,*]) eq 1 THEN BEGIN |
---|
| 310 | dumvar =ether_struct.tableau[isel,idx,*] |
---|
| 311 | ENDIF ELSE BEGIN |
---|
| 312 | ; print,'count=',count |
---|
| 313 | ; print,'nbniv=',nbniv |
---|
| 314 | ; print,'size(ether_struct.tableau[isel,idx,*]=',size(ether_struct.tableau[isel,idx,*]) |
---|
| 315 | ; print,'n_elements(ether_struct.tableau[isel,idx,*])=",n_elements(ether_struct.tableau[isel,idx,*]) |
---|
| 316 | dumvar = REFORM(ether_struct.tableau[isel,idx,*],count,nbniv) |
---|
| 317 | ENDELSE |
---|
| 318 | ENDELSE |
---|
| 319 | ENDELSE |
---|
| 320 | |
---|
| 321 | ; print,'ivar=',ivar,' | ','dumvar=',dumvar |
---|
| 322 | |
---|
| 323 | nbprof=count |
---|
| 324 | |
---|
| 325 | if ivar eq 0 then begin |
---|
| 326 | tot_nbprof = tot_nbprof + nbprof |
---|
| 327 | endif |
---|
| 328 | |
---|
| 329 | ;transformations/conversions |
---|
| 330 | ntransfo = N_ELEMENTS(*transfos[ivar]) |
---|
| 331 | |
---|
| 332 | FOR itransfo = 0, ntransfo-1 DO BEGIN |
---|
| 333 | |
---|
| 334 | idx = (*transfos[ivar])[itransfo].aux1 |
---|
| 335 | |
---|
| 336 | IF idx ge 2 and idx lt nvar THEN BEGIN |
---|
| 337 | |
---|
| 338 | IF STREGEX(varid[idx].variable,'phi',/fold_case) ge 0 THEN aux1=ether_struct.latitude ELSE aux1=*var[idx] |
---|
| 339 | |
---|
| 340 | ENDIF ELSE aux1=dumvar |
---|
| 341 | |
---|
| 342 | idx = (*transfos[ivar])[itransfo].aux2 |
---|
| 343 | IF idx ge 2 and idx lt nvar THEN BEGIN |
---|
| 344 | IF STREGEX(varid[idx].variable,'phi',/fold_case) ge 0 THEN aux2=ether_struct.latitude ELSE aux2=*var[idx] |
---|
| 345 | ENDIF ELSE aux2=dumvar |
---|
| 346 | |
---|
| 347 | idx = WHERE(dumvar ne 999 and aux1 ne 999 and aux2 ne 999,count) |
---|
| 348 | |
---|
| 349 | IF count ne 0 THEN BEGIN |
---|
| 350 | FOR iprof = 0L, nbprof-1 DO BEGIN |
---|
| 351 | dumvar[iprof,*] = CALL_FUNCTION((*transfos[ivar])[itransfo].nom,dumvar[iprof,*],aux1=aux1[iprof,*],$ |
---|
| 352 | aux2=aux2[iprof,*]) |
---|
| 353 | IF n_elements(dumvar[iprof,*]) gt niveau_norm THEN niveau_norm=n_elements(dumvar[iprof,*]) |
---|
| 354 | ENDFOR |
---|
| 355 | IF densite eq 0 THEN BEGIN |
---|
| 356 | var[ivar] = ptr_new(reform(dumvar,nbprof,(size(ether_struct.tableau))[3])) |
---|
| 357 | |
---|
| 358 | ENDIF ELSE BEGIN |
---|
| 359 | IF n_elements(dumvar) eq 1 THEN BEGIN |
---|
| 360 | var[ivar] = ptr_new(dumvar) |
---|
| 361 | ENDIF ELSE var[ivar] = ptr_new(REFORM(dumvar,nbprof,1)) |
---|
| 362 | ENDELSE |
---|
| 363 | |
---|
| 364 | ENDIF ELSE BEGIN |
---|
| 365 | print,'err0=',erreur0 |
---|
| 366 | erreur0=erreur0+'!cImpossible transformation : '+(*transfos[ivar])[itransfo].nom |
---|
| 367 | var[ivar] = ptr_new(999) |
---|
| 368 | ENDELSE |
---|
| 369 | ENDFOR |
---|
| 370 | |
---|
| 371 | ENDELSE |
---|
| 372 | ENDFOR |
---|
| 373 | donnee='' |
---|
| 374 | IF noprof eq 0 THEN BEGIN |
---|
| 375 | varx = [varx, var[0]] |
---|
| 376 | vary = [vary, var[1]] |
---|
| 377 | |
---|
| 378 | varlongitude = [varlongitude, ptr_new(reform(ether_struct.longitude[isel]))] |
---|
| 379 | varlatitude = [varlatitude, ptr_new(reform(ether_struct.latitude[isel]))] |
---|
| 380 | vardate = [vardate, ptr_new(reform(ether_struct.date[isel]))] |
---|
| 381 | varnumorb = [varnumorb, ptr_new(reform(ether_struct.numorb[isel]))] |
---|
| 382 | varzensol = [varzensol, ptr_new(reform(ether_struct.zensol[isel]))] |
---|
| 383 | varcomment = [varcomment, ptr_new(reform(ether_struct.zensol[isel]))] |
---|
| 384 | ENDIF |
---|
| 385 | ENDELSE |
---|
| 386 | ENDFOR |
---|
| 387 | |
---|
| 388 | if n_elements(varx) le 1 then return,'-1' |
---|
| 389 | ;print,'varx=',varx |
---|
| 390 | varx = varx[1:*] |
---|
| 391 | vary = vary[1:*] |
---|
| 392 | varlongitude = varlongitude[1:*] |
---|
| 393 | varlatitude = varlatitude[1:*] |
---|
| 394 | vardate = vardate[1:*] |
---|
| 395 | varnumorb = varnumorb[1:*] |
---|
| 396 | varzensol = varzensol[1:*] |
---|
| 397 | varcomment = varcomment[1:*] |
---|
| 398 | |
---|
| 399 | pl_varx=varx |
---|
| 400 | |
---|
| 401 | ;if n_elements(varx) le 1 then return,'-1 |
---|
| 402 | |
---|
| 403 | pl_vary=vary |
---|
| 404 | pl_varlongitude=varlongitude |
---|
| 405 | pl_varlatitude=varlatitude |
---|
| 406 | pl_vardate=vardate |
---|
| 407 | pl_varnumorb=varnumorb |
---|
| 408 | pl_varzensol=varzensol |
---|
| 409 | pl_varcomment=varcomment |
---|
| 410 | |
---|
| 411 | ;dimension 2 de ether_norm_struct=nombre de variable en sortie |
---|
| 412 | nbvar=n_elements(output_varid) |
---|
| 413 | |
---|
| 414 | ;calcul du nombre total de profils |
---|
| 415 | nivtab=tot_nbprof |
---|
| 416 | |
---|
| 417 | ; construction de la structure ether normalisee |
---|
| 418 | ether_norm_struct = {nb_prof : nivtab, nb_var : nbvar, nb_niv : niveau_norm, $ |
---|
| 419 | date : strarr(nivtab), $ |
---|
| 420 | latitude : fltarr(nivtab), longitude : fltarr(nivtab), $ |
---|
| 421 | numorb : strarr(nivtab), zensol : fltarr(nivtab), $ |
---|
| 422 | comment : strarr(nivtab), $ |
---|
| 423 | variable : strarr(n_elements(output_varid)), subvariable : strarr(n_elements(output_varid)), $ |
---|
| 424 | unite : strarr(n_elements(output_varid)), nature: strarr(n_elements(output_varid)), $ |
---|
| 425 | tableau : fltarr(nivtab,nbvar,niveau_norm)} |
---|
| 426 | |
---|
| 427 | indice=0 |
---|
| 428 | |
---|
| 429 | |
---|
| 430 | ;on parcourt le tableaux de points transformes des profils retenus |
---|
| 431 | ;pour remplir ether_norm_struct.tableau |
---|
| 432 | |
---|
| 433 | for n=0L,n_elements(pl_varx)-1 do begin |
---|
| 434 | nbprof=(size(*pl_varx[n],/dimensions))[0] |
---|
| 435 | |
---|
| 436 | for iprof=0L,nbprof-1 do begin |
---|
| 437 | m=0L |
---|
| 438 | for m=0L,n_elements((*pl_varx[n])[iprof,*])-1 do begin |
---|
| 439 | ether_norm_struct.tableau[indice,0,m]=(*pl_varx[n])[iprof,m] |
---|
| 440 | ether_norm_struct.tableau[indice,1,m]=(*pl_vary[n])[iprof,m] |
---|
| 441 | ; ether_norm_struct.tableau[indice,2,m]=(*pl_vary[n])[iprof,m] |
---|
| 442 | endfor |
---|
| 443 | |
---|
| 444 | ether_norm_struct.longitude[indice]=(*pl_varlongitude[n])[iprof] |
---|
| 445 | ether_norm_struct.latitude[indice]=(*pl_varlatitude[n])[iprof] |
---|
| 446 | ether_norm_struct.zensol[indice]=(*pl_varzensol[n])[iprof] |
---|
| 447 | ether_norm_struct.date[indice]=(*pl_vardate[n])[iprof] |
---|
| 448 | ether_norm_struct.numorb[indice]=(*pl_varnumorb[n])[iprof] |
---|
| 449 | ether_norm_struct.comment[indice]=(*pl_varcomment[n])[iprof] |
---|
| 450 | |
---|
| 451 | ;si ce profil n'a pas le nombre de niveau maximum, initialisation valeur a 999.999 |
---|
| 452 | if m lt niveau_norm-1 then begin |
---|
| 453 | for k=m, niveau_norm-1 do begin |
---|
| 454 | ether_norm_struct.tableau[indice,0,k]=999.999 |
---|
| 455 | ether_norm_struct.tableau[indice,1,k]=999.999 |
---|
| 456 | ; ether_norm_struct.tableau[indice,2,k]=999.999 |
---|
| 457 | endfor |
---|
| 458 | endif |
---|
| 459 | indice=indice+1 |
---|
| 460 | endfor |
---|
| 461 | |
---|
| 462 | endfor |
---|
| 463 | |
---|
| 464 | ;on renseigne ether_norm_struct des variables de sortie listees dans output_varid |
---|
| 465 | ;print,'n_elements(output_varid)=',output_varid[2] |
---|
| 466 | for n=0L,n_elements(output_varid)-1 do begin |
---|
| 467 | ether_norm_struct.variable[n]=output_varid[n].variable |
---|
| 468 | ether_norm_struct.subvariable[n]=output_varid[n].subvariable |
---|
| 469 | ether_norm_struct.unite[n]=output_varid[n].unite |
---|
| 470 | ether_norm_struct.nature[n]=output_varid[n].nature |
---|
| 471 | endfor |
---|
| 472 | erreur=erreur0 |
---|
| 473 | ;setdata,systime(),1,1 |
---|
| 474 | ;print,'*******VARIABLES**********' |
---|
| 475 | ;print,ether_norm_struct.tableau |
---|
| 476 | ;print,'**************************' |
---|
| 477 | |
---|
| 478 | endelse |
---|
| 479 | RETURN, '0' |
---|
| 480 | END |
---|
| 481 | |
---|