;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ ;+ ; NAME:litchamp ; ; PURPOSE:permet de lire un simple tableau ou une structure ; correspondant a un champ. ; Si en entree on a : ; -un simple tableau, litchamp renvoie le tableau ; -une stucture, litchamp renvoie le premier element de la structure ; qui doit obligatoirement etre le champ sous forme d''un tableau. ; Au passage litchamp regarde les autres elements de la structure et ; met a jour si besoin les variables globales qui se rapportent au ; champ: vargrid, varname, varunit, vardate, varexp , valmask, ; niveau et time ; ; CATEGORY:permet d''appeler plt, pltz, pltt ... avec un tableau ou une ; structure et de mettre a jour les variables globales liees au champ. ; ; CALLING SEQUENCE:res=litchamp(struct) ; ; INPUTS: ; struct: c''est soit un tableau soit une structure. ; Si struct est une structure, elle doit suivre les regles ; suivantes: ; -le premier element est le tableau contenant le champ. ; -les autres elements sont des strings qui contiennent des ; informations sur le champ SAUF pour l''element relatif a ; date. Ce dernier peut etre soit un string pour designer une date ; particuliere (ex: 'August 1999') ou bien un vecteur de jours ; juliens (d''IDL) correspondant au calendrier a associer au ; champ si c'est une serie temporelle. ; -l''ordre des elements (autre que le premier) n''a pas ; d''importance. ; -les autres elements (autre que le premier) sont tous ; optionnels. ; -ils sont reconnus par la premiere lettre de leur nom: ; g pour actualiser vargrid ; u pour actualiser varunit ; e pour actualiser varexp ; d pour actualiser vardate ; n pour actualiser varname ; m pour actualiser valmask ; l pour actualiser niveau (l pour level! et non pas n) ; ; KEYWORD PARAMETERS: ; ; /GRID: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'g' si il existe et '' dans le cas contraire. ; ; /UNIT: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'u' si il existe et '' dans le cas contraire. ; ; /EXP: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'e' si il existe et '' dans le cas contraire. ; ; /DATE: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'd' si il existe et '' dans le cas contraire. ; ; /NAME: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'n' si il existe et '' dans le cas contraire. ; ; /LEVEL: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'l' si il existe et -1 dans le cas contraire. ; ; /MASK: activer ce mot cle si on veut que litchamp renvoie la ; variable associee a l''element de la structure commencant ; par 'm' si il existe et -1 dans le cas contraire. ; ; OUTPUTS:c''est le tableau qui continent le champ. ; ; COMMON BLOCKS: ; common.pro ; ; SIDE EFFECTS: actualise au besion les variables globales vargrid, ; varname, varunit, vardate, varexp, valmask, niveau et time. ; ; RESTRICTIONS: ; ; EXAMPLE: ; ; IDL> print, vargrid,', ', varname,', ', varunit,', ', vardate,', ', varexp ; T, , , 0, ; IDL> help, litchamp({a:indgen(5), u:'C', name:'toto'}) ; INT = Array[5] ; IDL> print, vargrid,', ', varname,', ', varunit,', ', vardate,', ', varexp ; T, toto, C, 0, ; IDL> help, litchamp({a:indgen(5), da:'1999'}) ; INT = Array[5] ; IDL> print, vargrid,', ', varname,', ', varunit,', ', vardate,', ', varexp ; T, toto, C, 1999, ; ; ; MODIFICATION HISTORY: Sebastien Masson (smasson@lodyc.jussieu.fr) ; 28/5/1999 ;- ;------------------------------------------------------------ ;------------------------------------------------------------ ;------------------------------------------------------------ FUNCTION litchamp, struct, GRID = grid, NAME = name, UNIT = unit, EXP = exp, DATE = date $ , LEVEL = level, MASK = mask @common ;------------------------------------------------------------ if size(struct, /type) ne 8 then BEGIN ; alors contour n''est pas une structure if keyword_set(grid) then return, '' if keyword_set(name) then return, '' if keyword_set(unit) then return, '' if keyword_set(exp) then return, '' if keyword_set(date) then return, '' if keyword_set(level) then return, -1 if keyword_set(mask) then return, -1 return, struct ENDIF ;------------------------------------------------------------ IF n_tags(struct) EQ 1 then BEGIN ; la structure n'a qu''un element if keyword_set(grid) then return, '' if keyword_set(name) then return, '' if keyword_set(unit) then return, '' if keyword_set(exp) then return, '' if keyword_set(date) then return, '' if keyword_set(level) then return, -1 if keyword_set(mask) then return, -1 return, struct.(0) ENDIF ;------------------------------------------------------------ nomelements = tag_names(struct) for i = 1, n_tags(struct)-1 do begin case strlowcase(strmid(nomelements[i], 0, 1)) of 'g':BEGIN if keyword_set(grid) then return, strupcase(struct.(i)) vargrid = strupcase(struct.(i)) END 'n':BEGIN if keyword_set(name) then return, struct.(i) varname = struct.(i) END 'u':BEGIN if keyword_set(unit) then return, struct.(i) varunit = struct.(i) END 'e':BEGIN if keyword_set(exp) then return, struct.(i) varexp = struct.(i) END 'l':BEGIN if keyword_set(level) then return, struct.(i) niveau = struct.(i) END 'm':BEGIN if keyword_set(mask) then return, struct.(i) valmask = struct.(i) END 'd':BEGIN if size(struct.(i),/type) EQ 7 THEN BEGIN vardate = struct.(i) ENDIF ELSE BEGIN time = struct.(i) jpt = n_elements(time) if jpt EQ 1 then vardate = strtrim(vairdate((struct.(i))[0]), 2)$ ELSE vardate = strtrim(vairdate((struct.(i))[0]), 2)+' - ' $ +strtrim(vairdate((struct.(i))[jpt-1]), 2) ENDELSE if keyword_set(date) then return, vardate END 'h':BEGIN computehopegrid, (struct.(i)).xaxis, (struct.(i)).yaxis $ , (struct.(i)).zaxis, (struct.(i)).linetype $ , FIRSTS = (struct.(i)).firsts, LASTS = (struct.(i)).lasts $ , FORTHEMASK = struct.(0), pttype = (struct.(i)).pttype END ELSE:BEGIN ras = report('Le nom '+nomelements[i]+' ne correspont a aucun element reconnu de la structure. cf. IDL> xhelp, ''litchamp''') end endcase endfor ;------------------------------------------------------------ if keyword_set(grid) then return, '' if keyword_set(name) then return, '' if keyword_set(unit) then return, '' if keyword_set(exp) then return, '' if keyword_set(date) then return, '' if keyword_set(level) then return, -1 if keyword_set(mask) then return, -1 return, struct.(0) end