Changeset 226 for trunk/SRC/ToBeReviewed/PLOTS
- Timestamp:
- 03/16/07 10:22:26 (17 years ago)
- Location:
- trunk/SRC/ToBeReviewed/PLOTS
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SRC/ToBeReviewed/PLOTS/DESSINE/pltbase.pro
r171 r226 5 5 ; 6 6 ; @file_comments 7 ; Overlayer contour to trace a field which can be mask. 7 ; Overlayer contour to trace a field which can be mask. 8 8 ; Elementary brick of plt, pltz et pltt. 9 9 ; 10 ; @categories 10 ; @categories 11 11 ; Graphics 12 12 ; … … 21 21 ; 22 22 ; @param MASK {in}{required}{type=array} 23 ; It is the array who mask z2d (with 0s on points we want to mask and 1s on others). 23 ; It is the array who mask z2d (with 0s on points we want to mask and 1s on others). 24 24 ; If z2d is not masked, put this argument equal to 1. 25 25 ; 26 26 ; @param XM {in}{required} 27 ; Axis of the mask. Vector or array of the same size that mask. 27 ; Axis of the mask. Vector or array of the same size that mask. 28 28 ; This is the coordinate of mask on x. 29 29 ; 30 30 ; @param YM {in}{required} 31 ; Axis of the mask. Vector or array of the same size that mask. 31 ; Axis of the mask. Vector or array of the same size that mask. 32 32 ; This is the coordinate of mask on y. 33 33 ; 34 34 ; @param LEVELS {in}{optional}{type=vector} 35 ; Vectors which contain levels needed at the contour. 35 ; Vectors which contain levels needed at the contour. 36 36 ; If it is not given, we take 20 levels between the min and the max. 37 ; 37 ; 38 38 ; @param COLORS {in}{optional}{type=vector} 39 ; Vectors which contain colors needed at the contour. 39 ; Vectors which contain colors needed at the contour. 40 40 ; If it is not given, we take 20 levels between the min and the max. 41 41 ; 42 ; @keyword COLORTRICHAMP 42 ; @keyword COLORTRICHAMP 43 43 ; The color we want to use to draw the triangulation which is used to make contours of the field. 44 44 ; 45 ; @keyword COLORTRIMASK 45 ; @keyword COLORTRIMASK 46 46 ; The color we want to use to draw the triangulation which is used to make contours of the mask. 47 47 ; 48 ; @keyword COLOR_C 48 ; @keyword COLOR_C 49 49 ; To draw the contour in color instead of in black 50 ; with filling in color 51 ; 52 ; @keyword CONT_NOFILL 53 ; Activate it not to fill the point mask to let them transparent! 50 ; with filling in color 51 ; 52 ; @keyword CONT_NOFILL 53 ; Activate it not to fill the point mask to let them transparent! 54 54 ; Comment: Nevertheless, we trace mask's contour. 55 55 ; … … 57 57 ; The color of the continent. 58 58 ; 59 ; @keyword DESSTRICHAMP 60 ; To draw the triangulation which is used to make field's contours. 61 ; 62 ; @keyword DESSTRIMASK 59 ; @keyword DESSTRICHAMP 60 ; To draw the triangulation which is used to make field's contours. 61 ; 62 ; @keyword DESSTRIMASK 63 63 ; To draw the triangulation which is used to make mask's contours. 64 ; 65 ; @keyword FORPLT 64 ; 65 ; @keyword FORPLT 66 66 ; To activate if we want that the drawing of coast be realized by tracecote rather than tracemask. 67 67 ; 68 68 ; @keyword I_COLORS {type=vector} 69 ; It is a vector specifying the colors to use to trace contours. 69 ; It is a vector specifying the colors to use to trace contours. 70 70 ; It is the same thing that c_colors which act on contours. 71 71 ; … … 74 74 ; % Out of range subscript encountered: <LONG Array[38911]>. 75 75 ; % Execution halted at: PLTBASE 151 76 ; If the bug still exist, increase the value of more! 76 ; If the bug still exist, increase the value of more! 77 77 ; (The explanation and the justification of this method do not have scientific bases yet...). 78 78 ; … … 89 89 ; I specify we only label one contour on two. 90 90 ; 91 ; @keyword CONTOUR 91 ; @keyword CONTOUR 92 92 ; To be used since plt, pltz or pltt. (Have a look on these routines). 93 93 ; 94 ; @keyword _EXTRA 94 ; @keyword _EXTRA 95 95 ; Used to pass your keywords 96 96 ; … … 106 106 ; 8/2/2000 check if the tri array is not equal to 107 107 ; -1. allow contour with out using a triangulation. 108 ; 108 ; 109 109 ; @version 110 110 ; $Id$ … … 146 146 ;--------------------------------------------------------- 147 147 ; 148 ; Explanation concerning contour. This keyword is activated when we trace a 148 ; Explanation concerning contour. This keyword is activated when we trace a 149 149 ; colored contour different from the one with black trait. 150 150 ; If it is activated (case n_elements(contour) NE 0), we pass 2 time in pltbase: 151 151 ; 1) We trace colors then we leave, it is the case: 152 152 ; n_elements(contour) NE 0 AND n_elements(contour) NE 4) 153 ; 2) We trace contours in traits then continents, it is the case: 153 ; 2) We trace contours in traits then continents, it is the case: 154 154 ; n_elements(contour) NE 0 AND n_elements(contour) EQ 4) 155 155 ; … … 162 162 ; If levels and colors aren't given 163 163 ;---------------------------------------------------------------------- 164 if n_params() EQ 4 then $ 164 if n_params() EQ 4 then $ 165 165 label, 0, min(z2d*mask), max(z2d*mask), ncontour, levels, colors 166 166 ; attention bidouille inexplicable pour que tout se passe bien avec les … … 171 171 ; Is cell_fill is a part of _extra, we desactive it if it is nt equal to 2 172 172 ;---------------------------------------------------------------------- 173 IF chkstru(ex, 'CELL_FILL') THEN BEGIN 173 IF chkstru(ex, 'CELL_FILL') THEN BEGIN 174 174 cell_fill = ex.CELL_FILL 175 175 if ex.CELL_FILL NE 2 then ex.CELL_FILL = 0 176 176 ENDIF ELSE cell_fill = 0 ; 177 177 ;---------------------------------------------------------------------- 178 ; I) Filling of contours in palette colors 178 ; I) Filling of contours in palette colors 179 179 ;---------------------------------------------------------------------- 180 180 if NOT keyword_set(more) then more = 10 181 181 if NOT keyword_set(nofill) AND NOT keyword_set(color_c) then begin 182 if n_elements(contour) NE 4 THEN BEGIN 182 if n_elements(contour) NE 4 THEN BEGIN 183 183 if usetri EQ 2 then BEGIN 184 184 IF size(x, /n_dimensions) EQ 1 THEN x = x#replicate(1, (size(z2d))[2]) … … 191 191 IF size(y, /n_dimensions) EQ 2 THEN y = reform(y[0, *]) 192 192 contour, z2d, x, y, levels = levels, c_color = colors, /noerase $ 193 , /fill, _extra = ex 193 , /fill, _extra = ex 194 194 ENDELSE 195 195 ENDIF 196 196 ENDIF 197 if n_elements(contour) NE 0 AND n_elements(contour) NE 4 THEN GOTO, fini 197 if n_elements(contour) NE 0 AND n_elements(contour) NE 4 THEN GOTO, fini 198 198 IF chkstru(ex, 'C_ORIENTATION') THEN ex = extractstru(ex, 'C_ORIENTATION') 199 199 IF chkstru(ex, 'C_SPACING') THEN ex = extractstru(ex, 'C_SPACING') … … 207 207 ; 208 208 IF (n_elements(mask) GT 1 OR n_elements(masknan) GT 1) $ 209 AND NOT keyword_set(cont_nofill) THEN BEGIN 210 IF keyword_set(maskorg) THEN tonan = maskorg*masknan ELSE tonan = mask*masknan 209 AND NOT keyword_set(cont_nofill) THEN BEGIN 210 IF keyword_set(maskorg) THEN tonan = maskorg*masknan ELSE tonan = mask*masknan 211 211 tonan = where(remplit(tonan, nite = 1, mask = tonan $ 212 212 , /basique, fillval = 0 $ 213 213 , fillxdir = keyword_set(realsection)) EQ 0, count) 214 214 IF count NE 0 THEN z2d[temporary(tonan)] = !values.f_nan 215 ENDIF 215 ENDIF 216 216 ; 217 217 ; We do not pass if we have to make differents contours... … … 232 232 ENDCASE 233 233 ; 234 IF usetri EQ 2 THEN BEGIN 234 IF usetri EQ 2 THEN BEGIN 235 235 IF size(x, /n_dimensions) EQ 1 THEN x = x#replicate(1, (size(z2d))[2]) 236 236 IF size(y, /n_dimensions) EQ 1 THEN y = replicate(1, (size(z2d))[1])#y … … 253 253 IF chkstru(ex, 'LEVELS') THEN ex = extractstru(ex, 'LEVELS') 254 254 IF chkstru(ex, 'NODATA') THEN ex = extractstru(ex, 'NODATA') 255 IF NOT keyword_set(cont_color) THEN cont_color = (!d.n_colors-1) < 255 256 ; 257 ; If there is points at NaN 258 ; We trace points in white at NaN b afore drawing coasts with a trait.255 IF NOT keyword_set(cont_color) THEN cont_color = (!d.n_colors-1) < 255 256 ; 257 ; If there is points at NaN 258 ; We trace points in white at NaN before drawing coasts with a trait. 259 259 ; 260 260 if keyword_set(trinan) THEN BEGIN … … 298 298 , COINDESCEND = coindescendmask, CONT_COLOR = cont_color, _extra = ex 299 299 END 300 ELSE:BEGIN 300 ELSE:BEGIN 301 301 IF size(xm, /n_dimensions) EQ 2 THEN xm = xm[*, 0] 302 302 IF size(ym, /n_dimensions) EQ 2 THEN ym = reform(ym[0, *]) … … 310 310 ;------------------------------------------------------------ 311 311 case 1 of 312 keyword_set(realsection) AND NOT keyword_set(cont_nofill): 312 keyword_set(realsection) AND NOT keyword_set(cont_nofill): 313 313 keyword_set(realsection) AND keyword_set(cont_nofill): $ 314 314 drawsectionbottom, mask, xm, ym $ … … 334 334 ; 335 335 fini: 336 IF keyword_set(key_performance) THEN print, 'temps pltbase', systime(1)-tempsun 336 IF keyword_set(key_performance) THEN print, 'temps pltbase', systime(1)-tempsun 337 337 338 338 return -
trunk/SRC/ToBeReviewed/PLOTS/DESSINE/pltz.pro
r172 r226 4 4 ;+ 5 5 ; 6 ; @file_comments 6 ; @file_comments 7 7 ; Trace vertical graphs. 8 8 ; 9 ; @categories 9 ; @categories 10 10 ; Graphics 11 11 ; 12 ; @param TAB 12 ; @param TAB 13 13 ; The field whose we want to make a vertical cut can be 2 kind of thing: 14 ; 1) An 2d or 3d array. 15 ; If the field is 2d, indicate, with the keyword BOXZOOM, geographic delineations of the boxzoom. 14 ; 1) An 2d or 3d array. 15 ; If the field is 2d, indicate, with the keyword BOXZOOM, geographic delineations of the boxzoom. 16 16 ; If the field is 3d, we extract the section on we average possibly before to do the plot. 17 ; 2) a structure respecting all criterions specified by litchamp.pro. 17 ; 2) a structure respecting all criterions specified by litchamp.pro. 18 18 ; See IDL> xhelp,'litchamp'. The array contained in the structure must be 2 or 3d (See case 1) 19 19 ; 20 20 ; ces arguments ne sont pas obligatoires: 21 ; 21 ; 22 22 ; MAX: valeur maximum que l'on veut prendre en compte dans le trace 23 23 ; des contours. Par defaut on prend le max de tab1 (sur les pts mer) … … 26 26 ; des contours. Par defaut on prend le min de tab1 (sur les pts mer) 27 27 ; 28 ; @keyword BOXZOOM 29 ; Vector indicating the geographic zone on which we want to cut the map. 28 ; @keyword BOXZOOM 29 ; Vector indicating the geographic zone on which we want to cut the map. 30 30 ; If BOXZOOM has : 31 31 ; 1 element : The extraction is made on [lon1, lon2, lat1, lat2, 0.,boxzoom[0]] … … 37 37 ; Where lon1, lon2,lat1,lat2 are global variables defined at the last domdef! 38 38 ; 39 ; @keyword CONTINTERVALLE 40 ; When CONTOUR is activated, it is the value between 2 isolines 41 ; traced by a trait. So it can be different from the one specified by INTERVALLE which, 42 ; in this case, does not control colored isolines in color anymore. If there is noone 43 ; specified min, we choose a contour min which goes well with the specified interval! 44 ; If this keyword is not specified, we trace 20 isolines from the min to the max. 39 ; @keyword CONTINTERVALLE 40 ; When CONTOUR is activated, it is the value between 2 isolines 41 ; traced by a trait. So it can be different from the one specified by INTERVALLE which, 42 ; in this case, does not control colored isolines in color anymore. If there is noone 43 ; specified min, we choose a contour min which goes well with the specified interval! 44 ; If this keyword is not specified, we trace 20 isolines from the min to the max. 45 45 ; 46 46 ; @keyword CONTLABEL {type=integer} 47 47 ; When CONTOUR is activated, if n 48 ; is different of 0, choose the label type corresponding to n cases for 49 ; the traced by a traitisolines. To specify the type of label of the 48 ; is different of 0, choose the label type corresponding to n cases for 49 ; the traced by a traitisolines. To specify the type of label of the 50 50 ; colored contour, use LABEL 51 51 ; 52 52 ; @keyword CONTMAX {default=max of the keyword CONTOUR (on ocean points)} 53 ; When CONTOUR is activated, max value we want to consider in the isoline 53 ; When CONTOUR is activated, max value we want to consider in the isoline 54 54 ; traced by a trait's line. 55 55 ; 56 56 ; @keyword CONTMIN {default=min of the keyword CONTOUR (on ocean points)} 57 ; When CONTOUR is activated, min value we want to consider in the isoline 58 ; traced by a trait's line. 57 ; When CONTOUR is activated, min value we want to consider in the isoline 58 ; traced by a trait's line. 59 59 ; 60 60 ; @keyword CONTNLEVEL {default=20} … … 63 63 ; CONTLABEL=0). 64 64 ; 65 ; @keyword CONTOUR 66 ; If we want to trace contours of a different field than the one 67 ; whose we have the colored drawing (by example E-P in color and QSR in contours). 65 ; @keyword CONTOUR 66 ; If we want to trace contours of a different field than the one 67 ; whose we have the colored drawing (by example E-P in color and QSR in contours). 68 68 ; It must be a field respecting same characteristics than the argument number one of plt. 69 69 ; 70 ; @keyword ENDPOINTS 71 ; keyword specifying that we want to make a vertical cut in diagonal. Then coordinated of extremities 72 ; of these one are defined by the 4 elements of the vector ENDPOINTS: [x1,y1,x2,y2] which are 73 ; coordinates. 74 ; 75 ; @keyword INTERVALLE 76 ; Value of an internal between to isoline. If there is none specified min, 77 ; we choose a min contour which goes well with the specified interval!. If this keyword is not 78 ; specified, we trace 20 isoline from the min to the max. Comment: When CONTOUR is activated, 79 ; INTERVALLE only specify the interval between 2 colored isoline. To specify the interval 70 ; @keyword ENDPOINTS 71 ; keyword specifying that we want to make a vertical cut in diagonal. Then coordinated of extremities 72 ; of these one are defined by the 4 elements of the vector ENDPOINTS: [x1,y1,x2,y2] which are 73 ; coordinates. 74 ; 75 ; @keyword INTERVALLE 76 ; Value of an internal between to isoline. If there is none specified min, 77 ; we choose a min contour which goes well with the specified interval!. If this keyword is not 78 ; specified, we trace 20 isoline from the min to the max. Comment: When CONTOUR is activated, 79 ; INTERVALLE only specify the interval between 2 colored isoline. To specify the interval 80 80 ; between 2 isolines traced by a trait, use CONTINTERVALLE. 81 81 ; 82 ; @keyword INV 83 ; Invert the color vector used to color the graph 82 ; @keyword INV 83 ; Invert the color vector used to color the graph 84 84 ; (without use the black, the white and the used palette) 85 85 ; 86 86 ; @keyword ZRATIO {default=2./3} 87 ; When the drawing has a zoomed part, it is the size rapport between the zoomed part, 87 ; When the drawing has a zoomed part, it is the size rapport between the zoomed part, 88 88 ; hz (zoom height), and the whole drawing, ht (total height). 89 89 ; 90 90 ; @keyword LABEL {default=0}{type=integer} 91 91 ; It choose the label's type corresponding to cases in label.pro. 92 ; Comment: When CONTOUR is activated, it only specify the label's type for colored isolines. 93 ; For these one traced by a trait, use CONTLABEL. 94 ; 95 ; @keyword MAXIN 92 ; Comment: When CONTOUR is activated, it only specify the label's type for colored isolines. 93 ; For these one traced by a trait, use CONTLABEL. 94 ; 95 ; @keyword MAXIN 96 96 ; to specify the max value we want to plot with a keyword instead of with the 97 97 ; input parameter max. If max is defined by both, parameter and keyword, the 98 98 ; keyword is retained. 99 99 ; 100 ; @keyword MININ 100 ; @keyword MININ 101 101 ; to specify the min value we want to plot with a keyword instead of with the 102 102 ; input parameter min. If min is defined by both, parameter and keyword, the … … 106 106 ; Number of contour to draw by default =20. active if 107 107 ; LABEL=0 or is not specified. 108 ; 109 ; @keyword NOTRI 110 ; To force not to use the triangulation. Beware, in this case, the 111 ; drawing only works if the grid is undeformed (It means that each point of a longitude 112 ; give one latitude and each point of a latitude give one longitude) except if we use 113 ; the keyword CELL_FILL=2. 108 ; 109 ; @keyword NOTRI 110 ; To force not to use the triangulation. Beware, in this case, the 111 ; drawing only works if the grid is undeformed (It means that each point of a longitude 112 ; give one latitude and each point of a latitude give one longitude) except if we use 113 ; the keyword CELL_FILL=2. 114 114 ; Comment: if the field contain points !values.f_nan, then we even do a triangulation. 115 115 ; 116 ; @keyword OVERPLOT 117 ; To make a plot over an other one. 118 ; Comment: Contrarily to the use of CONTOUR or VECTEUR, the use of this keyword 116 ; @keyword OVERPLOT 117 ; To make a plot over an other one. 118 ; Comment: Contrarily to the use of CONTOUR or VECTEUR, the use of this keyword 119 119 ; does not the caption and/or the color bar. 120 120 ; 121 ; @keyword SIN 122 ; Activate this keyword if we want the x axis to be traced in sinus of the 121 ; @keyword SIN 122 ; Activate this keyword if we want the x axis to be traced in sinus of the 123 123 ; latitude when we make a drawing f(y) 124 124 ; 125 ; @keyword STRICTFILL 126 ; Activate this keyword to that the filling of contours be 127 ; precisely done between the min and the max specified letting values inferior at the 125 ; @keyword STRICTFILL 126 ; Activate this keyword to that the filling of contours be 127 ; precisely done between the min and the max specified letting values inferior at the 128 128 ; specified min and values superior at the specified max in white. 129 129 ; … … 131 131 ; Contour's style to adopt to draw isolines 132 132 ; 133 ; @keyword WDEPTH 134 ; To specify that the field is at W depth instead of T 133 ; @keyword WDEPTH 134 ; To specify that the field is at W depth instead of T 135 135 ; depth (automatically activated if vargrid eq 'W') 136 136 ; … … 209 209 IF usetri EQ 1 AND keyword_set(realsection) THEN usetri = 0 210 210 ; did we specify the type ? 211 if keyword_set(typein) then BEGIN 211 if keyword_set(typein) then BEGIN 212 212 if size(type, /type) NE 7 AND size(type, /type) NE 0 then begin 213 213 if n_elements(min) NE 0 then max = min … … 216 216 type = typein 217 217 ENDIF 218 ; 218 ; 219 219 checktypeminmax, 'pltz', TYPE = type, MIN = min, MAX = max $ 220 220 , XZ = xz, YZ = yz, ENDPOINTS = endpoints, _extra = ex 221 221 ; 222 222 if keyword_set(endpoints) then begin 223 section, tab, z2d, glam, gphi, ENDPOINTS = endpoints, TYPE = type $ 223 section, tab, z2d, glam, gphi, ENDPOINTS = endpoints, TYPE = type $ 224 224 , BOXZOOM = boxzoom, DIREC = direc, WDEPTH = wdepth, _extra = ex 225 if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN 225 if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN 226 226 restoreboxparam, 'boxparam4pltz.dat' 227 227 return 228 228 ENDIF 229 nx = n_elements(glam) 229 nx = n_elements(glam) 230 230 ny = nx 231 231 if strupcase(vargrid) EQ 'W' then begin … … 240 240 z2d = checkfield(tab, 'pltz', TYPE = type, BOXZOOM = boxzoom $ 241 241 , DIREC = direc, WDEPTH = wdepth, _extra = ex) 242 if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN 242 if z2d[0] EQ -1 AND n_elements(contour) ne 4 then BEGIN 243 243 restoreboxparam, 'boxparam4pltz.dat' 244 244 return … … 260 260 z2d = reverse(z2d, 2) 261 261 ;----------------------------------------------------------------------------- 262 ; Determination of the mi:min and of the ma:max of z2d in the same way 262 ; Determination of the mi:min and of the ma:max of z2d in the same way 263 263 ; as max: max and min: min for the drawing. 264 264 ;----------------------------------------------------------------------------- … … 316 316 z2d = remplit(z2d, nite = 1-(n_elements(maskfill) NE 0) $ 317 317 , mask = z2d LT valmask/10, /basique, _extra = ex) 318 ENDIF ELSE BEGIN 318 ENDIF ELSE BEGIN 319 319 ; filling the mask values with 8 neighbourg 320 320 z2d = remplit(z2d, nite = (1+(vargrid NE 'T')+keyword_set(nan)) $ 321 321 *(1-(n_elements(maskfill) NE 0)), mask = mask*masknan $ 322 322 , /basique, _extra = ex) 323 ENDELSE 323 ENDELSE 324 324 if keyword_set(strictfill) EQ 0 AND n_elements(maskfill) EQ 0 $ 325 325 then z2d = min > z2d < max … … 329 329 ENDIF 330 330 ;---------------------------------------------------------- 331 ; check the mask and the triangulation according to the grid type and 331 ; check the mask and the triangulation according to the grid type and 332 332 ; nan values. find the coordinates of the mask 333 ;---------------------------------------------------------- 333 ;---------------------------------------------------------- 334 334 ; if (where(mask EQ 0))[0] EQ -1 AND NOT keyword_set(nan) then notri = 1 335 335 ; if keyword_set(notri) then trifield = -1 $ … … 347 347 xmask = xxaxis 348 348 zmask = zzaxis 349 ENDELSE 350 ; 351 if (usetri GE 1 AND (vargrid NE 'T' AND vargrid NE 'W')) THEN BEGIN 349 ENDELSE 350 ; 351 if (usetri GE 1 AND (vargrid NE 'T' AND vargrid NE 'W')) THEN BEGIN 352 352 IF keyword_set(realsection) THEN trimsk = triangule(mask, /basic) $ 353 353 ELSE trimsk = triangule(mask, /basic, coinmonte = coinmontemask $ 354 354 , coindescend = coindescendmask) 355 ENDIF 355 ENDIF 356 356 ;------------------------------------------------------------ 357 357 ; dessin en lui meme … … 387 387 return 388 388 endif 389 if keyword_set(contour) THEN BEGIN 389 if keyword_set(contour) THEN BEGIN 390 390 pourlegende = [1, 1, 1, 1] 391 391 oldattributs = saveatt() … … 403 403 ; 3rd part: drawing of the frame, caption, colorbar... 404 404 ;------------------------------------------------------------ 405 if keyword_set(overplot) then BEGIN 405 if keyword_set(overplot) then BEGIN 406 406 !y.range = [zoom, profmin] ; We get back on physic coordinates 407 407 plot, [0], [0], /nodata, /noerase, title = '', subtitle = '', xstyle = 5, ystyle = 5 … … 409 409 endif 410 410 ;------------------------------------------------------------ 411 ; Caption + d ysplay of them411 ; Caption + display of them 412 412 ;------------------------------------------------------------ 413 413 legende, mi, ma, type, CONTOUR = pourlegende, INTERVALLE = intervalle, DIREC = direc, endpoints = endpoints, _EXTRA = ex … … 423 423 ; Y axis in 1 or 2 part 424 424 ;------------------------------------------------------------ 425 if n_elements(ex) NE 0 then BEGIN 425 if n_elements(ex) NE 0 then BEGIN 426 426 ; To do not put title anymore 427 427 if (where(tag_names(ex) EQ 'TITLE'))[0] NE -1 then ex.TITLE = ' ' … … 429 429 if (where(tag_names(ex) EQ 'SUBTITLE'))[0] NE -1 then ex.SUBTITLE = ' ' 430 430 ; To have just one ytitle 431 if (where(tag_names(ex) EQ 'YTITLE'))[0] NE -1 then BEGIN 431 if (where(tag_names(ex) EQ 'YTITLE'))[0] NE -1 then BEGIN 432 432 ytitle = ex.YTITLE 433 433 ex.YTITLE = ' ' … … 480 480 restoreboxparam, 'boxparam4pltz.dat' 481 481 ; 482 if keyword_set(key_performance) NE 0 THEN print, 'temps pltz', systime(1)-tempsun 482 if keyword_set(key_performance) NE 0 THEN print, 'temps pltz', systime(1)-tempsun 483 483 return 484 484 end -
trunk/SRC/ToBeReviewed/PLOTS/DESSINE/scontour.pro
r223 r226 43 43 ; 1) I reinitializate the graphic environment (variables !x, !y et !p): 44 44 if NOT keyword_set(NOREINITPLT) then reinitplt, _extra = ex 45 ; 2) i put the drawing on the screen like on the post cript45 ; 2) i put the drawing on the screen like on the postscript 46 46 ; if ex contains norease and c_orientation keywords we force ex.noerase = 0 47 47 IF chkstru(ex, 'overplot') EQ 0 THEN placedessin, 'autre', _extra = ex 48 ; fiddle when noerase is used with c_or entation...48 ; fiddle when noerase is used with c_orientation... 49 49 ; call contour with /nodata to get the graphic environment, then force 50 50 ; noerase = 0 and overplot = 1 51 51 IF size(ex, /type) EQ 8 THEN BEGIN 52 ; check if noerase is used with c_or entation52 ; check if noerase is used with c_orientation 53 53 alltags = strlowcase(tag_names(ex)) 54 54 dummy = where(alltags EQ 'noerase', count1) … … 71 71 3:contour, x, y, z, xstyle = 1, ystyle = 1, _EXTRA = ex 72 72 ENDCASE 73 ; fiddle when noerase is used with c_or entation... draw the contour axis73 ; fiddle when noerase is used with c_orientation... draw the contour axis 74 74 IF keyword_set(noerase_orientation) THEN BEGIN 75 75 ex.noerase = 1 -
trunk/SRC/ToBeReviewed/PLOTS/DESSINE/splot.pro
r223 r226 47 47 ; 1) I reinitializate the graphic environment (les variables !x, !y et !p): 48 48 if NOT keyword_set(NOREINITPLT) then reinitplt, _extra = ex 49 ; 2) i put the drawing on the screen like on the post cript49 ; 2) i put the drawing on the screen like on the postscript 50 50 placedessin, 'autre', _extra = ex 51 51 ; 3) Drawing -
trunk/SRC/ToBeReviewed/PLOTS/DESSINE/tvplus.pro
r163 r226 7 7 ; Enhanced version of tvscl 8 8 ; 9 ; @categories quick exploration of 2D arrays 10 ; 11 ; INPUTS: 9 ; @categories quick exploration of 2D arrays 12 10 ; 13 11 ; @param Z2D {in}{required} … … 21 19 ; of cellsize that forces tvplus to create a window larger than 22 20 ; the screen, a "scrolling window" will be displayed instead of a 23 ; regular window. Unfortunately the nice function nalities of tvplus21 ; regular window. Unfortunately the nice functionalities of tvplus 24 22 ; are not coded for "scrolling window" case... 25 23 ; … … 33 31 ; The color number that should be used for the mask values. 34 32 ; 35 ; @keyword OFFSET 33 ; @keyword OFFSET 36 34 ; 2 elements vector used by tvplus itself when showing zoom. 37 35 ; It is used to shift the ranges of xaxis and yaxis. 38 ; For example: tvplus,sst[x1:x2,y1:y2],off est=[x1,y1]39 ; 40 ; @keyword MASK 36 ; For example: tvplus,sst[x1:x2,y1:y2],offset=[x1,y1] 37 ; 38 ; @keyword MASK 41 39 ; The mask value. Note that if abs(mask) < 1.e6, then the 42 40 ; exact value of the mask is used to find the maskwd point. … … 67 65 ; @keyword _EXTRA 68 66 ; used to pass keywords to TV, PLOT, COLORBAR 69 ; 70 ; @restrictions 67 ; 68 ; @restrictions 71 69 ; use your mouse to scan the array values... 72 70 ; left button : mouse position and associated array value … … 74 72 ; right button : quit 75 73 ; 76 ; the nice function nalities of tvplus are not coded74 ; the nice functionalities of tvplus are not coded 77 75 ; for "scrolling window" case... 78 76 ; … … 102 100 arr = reform(float(z2d)) 103 101 ;------------------------------------------------------------ 104 ; check the size of the input array 102 ; check the size of the input array 105 103 ;------------------------------------------------------------ 106 104 if (size(arr))[0] NE 2 then begin … … 130 128 ;------------------------------------------------------------ 131 129 ; Compute the size (in pixel) of the square representing 1 132 ; point of the input array 130 ; point of the input array 133 131 ;------------------------------------------------------------ 134 132 dimensions = GET_SCREEN_SIZE() 135 if n_elements(cellsize) EQ 0 then BEGIN 133 if n_elements(cellsize) EQ 0 then BEGIN 136 134 cellsize = min(floor(dimensions/(size(z2d))[1: 2]*.75)) 137 ENDIF ELSE $ 135 ENDIF ELSE $ 138 136 ; we need to use a scrolling bar window 139 137 if cellsize GE min(floor(dimensions/(size(z2d))[1: 2]*.75)) then scrolling = 1 … … 145 143 ; Change the value of the masked value for the min of the non-masked values 146 144 ;------------------------------------------------------------ 147 if n_elements(mask) then BEGIN 148 if abs(mask) LT 1e6 then BEGIN 145 if n_elements(mask) then BEGIN 146 if abs(mask) LT 1e6 then BEGIN 149 147 masked = where(arr EQ mask) 150 148 if masked[0] NE -1 then arr[masked] = min(arr[where(arr NE mask)]) 151 ENDIF ELSE BEGIN 149 ENDIF ELSE BEGIN 152 150 masked = where(abs(arr) GE abs(mask)/10.) 153 151 if masked[0] NE -1 then arr[masked] = min(arr[where(abs(arr) LT abs(mask)/10.)]) … … 157 155 ; apply min/max keywords 158 156 ;------------------------------------------------------------ 159 if n_elements(min) NE 0 then BEGIN 157 if n_elements(min) NE 0 then BEGIN 160 158 arr = min > arr 161 159 truemin = min 162 160 ENDIF ELSE truemin = min(arr) 163 if n_elements(max) NE 0 then BEGIN 161 if n_elements(max) NE 0 then BEGIN 164 162 arr = arr < max 165 163 truemax = max … … 171 169 ENDIF 172 170 ;------------------------------------------------------------ 173 ; apply other keywords (nointerp, c_nan, c_mask) 171 ; apply other keywords (nointerp, c_nan, c_mask) 174 172 ;------------------------------------------------------------ 175 173 if NOT keyword_set(nointerp) then BEGIN … … 177 175 m = 1.*(ncolors-1)/(truemax-truemin) 178 176 p = bottom-1.*truemin*m 179 arr = round(m*temporary(arr)+p) 180 endif 181 ; set c_nan for NaN values 177 arr = round(m*temporary(arr)+p) 178 endif 179 ; set c_nan for NaN values 182 180 if keyword_set(nan) then begin 183 181 if n_elements(c_nan) NE 0 THEN arr[nanindex] = c_nan < (ncolmax -1) $ … … 190 188 arr = byte(temporary(arr)) 191 189 ; increase the size of the array in order to be displayed 192 ; with the suitable size 190 ; with the suitable size 193 191 szarr = size(arr, /dimensions) 194 192 arr = congrid(temporary(arr), szarr[0]*cellsize, szarr[1]*cellsize) … … 205 203 if NOT keyword_set(window) then window = 0 206 204 window, window, xsize = nx+marginpix[0]+marginpix[1] $ 207 , ysize = ny+marginpix[2]+marginpix[3] 205 , ysize = ny+marginpix[2]+marginpix[3] 208 206 ; for 24 bits colors, make sure thate the background color is the good one... 209 207 if !d.n_colors gt 256 then BEGIN … … 215 213 tv, arr, marginpix[0], marginpix[2], _EXTRA = ex 216 214 ; 217 ; axis and plot frame 215 ; axis and plot frame 218 216 ; 219 217 ; get the normalized position of the tv (we just done above) … … 233 231 xenvsauve = !x & yenvsauve = !y & penvsauve = !p 234 232 ; 235 ; draw the colorbar 233 ; draw the colorbar 236 234 ; 237 235 IF truemin ne truemax THEN BEGIN … … 244 242 ENDIF 245 243 ; !p.position = poscadre 246 ENDIF ELSE BEGIN 244 ENDIF ELSE BEGIN 247 245 ;------------------------------------------------------------ 248 246 ; scrolling bar window case... … … 261 259 , yvisible = round(.7*dimensions[1]) < (size(arr))[2], /register, congrid = 0, show_full = 0 262 260 return 263 ENDELSE 261 ENDELSE 264 262 ;------------------------------------------------------------ 265 263 ; Use the mouse to get nice functionalities -
trunk/SRC/ToBeReviewed/PLOTS/DIVERS/barrecouleur.pro
r163 r226 5 5 ; 6 6 ; @file_comments 7 ; Overlaye ur of colorbar7 ; Overlayer of colorbar 8 8 ; 9 9 ; @categories … … 23 23 ; 24 24 ; @keyword NOCOLORBAR 25 ; 25 ; 26 26 ; 27 27 ; @keyword CB_TITLE 28 ; 28 ; 29 29 ; 30 30 ; @keyword NOFILL 31 ; 31 ; 32 32 ; 33 33 ; @keyword COLOR_c 34 ; 34 ; 35 35 ; 36 36 ; @keyword MIN … … 41 41 ; 42 42 ; @keyword DIVISIONS 43 ; 43 ; 44 44 ; 45 45 ; @keyword CB_SUBTITLE 46 ; 46 ; 47 47 ; 48 48 ; @keyword POST 49 ; 49 ; 50 50 ; 51 51 ; @keyword _EXTRA … … 84 84 if keyword_set(divisions) THEN clbdiv = divisions 85 85 nocolorbar = keyword_set(nocolorbar) + keyword_set(nofill) $ 86 + keyword_set(color_c) 86 + keyword_set(color_c) 87 87 ;------------------------------------------------------------ 88 88 def_myuniquetmpdir … … 99 99 ENDELSE 100 100 ;------------------------------------------------------------ 101 if keyword_set(nocolorbar) then return 101 if keyword_set(nocolorbar) then return 102 102 ;------------------------------------------------------------ 103 103 ancienx = !x -
trunk/SRC/ToBeReviewed/PLOTS/DIVERS/determineminmax.pro
r163 r226 7 7 ; Determine the min and the max of a mask array 8 8 ; 9 ; @categories 9 ; @categories 10 10 ; Plotting 11 11 ; … … 14 14 ; 15 15 ; @param MASK {in}{required} 16 ; The mask array 16 ; The mask array 17 17 ; 18 18 ; @keyword MININ {type=scalar} … … 22 22 ; If it is not defined, it takes the value of VRAIMAX 23 23 ; 24 ; @keyword ZEROMIDDLE 24 ; @keyword ZEROMIDDLE 25 25 ; Force the middle of the colorbar to be equal 26 26 ; to 0 (force max=max(abs([min,max])) and min=-max) 27 ; 27 ; 28 28 ; @keyword _EXTRA 29 29 ; used to pass your keywords … … 31 31 ; @keyword USETRI 32 32 ; To force using triangulation. 33 ; 33 ; 34 34 ; @param VRAIMIN {out} 35 35 ; The min of the array … … 64 64 ;----------------------------------------------------------------------------- 65 65 ;----------------------------------------------------------------------------- 66 ; Type o fthe vertical grid:66 ; Type of the vertical grid: 67 67 if vargrid EQ 'W' then nz = nzw ELSE nz = nzt 68 68 ; liste des points mer 69 69 if (size(mask))[0] EQ 3 then mer = mask[*, *, 0] $ 70 70 ELSE mer = mask 71 ; If key_irregular eq 1, we mask also points which are not in the geographic 71 ; If key_irregular eq 1, we mask also points which are not in the geographic 72 72 ; domain defined by lon1,lon2,lat1,lat2 73 73 if keyword_set(key_irregular) AND n_elements(glam) NE 0 AND n_elements(gphi) NE 0 then begin … … 89 89 ; ma and mi : max and min on ocean points 90 90 vraimax = max(tab[mer], min = vraimin, _extra = ex) 91 sameminmax = testvar(var = minin) EQ testvar(var = maxin) 91 sameminmax = testvar(var = minin) EQ testvar(var = maxin) 92 92 if n_elements(maxin) EQ 0 OR sameminmax then maxin = vraimax 93 if n_elements(minin) EQ 0 OR sameminmax then BEGIN 93 if n_elements(minin) EQ 0 OR sameminmax then BEGIN 94 94 if keyword_set(intervalle) then minin = floor(vraimin/intervalle)*intervalle $ 95 95 ELSE minin = vraimin -
trunk/SRC/ToBeReviewed/PLOTS/DIVERS/placedessin.pro
r163 r226 4 4 ;+ 5 5 ; 6 ; @file_comments 6 ; @file_comments 7 7 ; Putting into place of the drawing/ opening of the window or of the PS 8 8 ; 9 ; @categories 9 ; @categories 10 10 ; Utilities 11 11 ; … … 13 13 ; It specify what procedure is called by PLACEDESSIN: 'plt', 'pltz' or 'pltt' 14 14 ; 15 ; @keyword LANDSCAPE 15 ; @keyword LANDSCAPE 16 16 ; Force the page or the window on the screen to be in lengthened position. 17 17 ; 18 18 ; @keyword LCT {type=integer} 19 ; It designate the number of the palette of color we want to use for the plot. 19 ; It designate the number of the palette of color we want to use for the plot. 20 20 ; 21 ; @keyword MAP 21 ; @keyword MAP 22 22 ; We use it when we want to do a projection. 23 23 ; This keyword can be of two types: 24 24 ; MAP=[P0lat,P0lon,Rot]. For the description of these 3 values (see the online help of MAP_SET). 25 ; /MAP: In this case, map is automatically calculated have the value: 25 ; /MAP: In this case, map is automatically calculated have the value: 26 26 ; map = [0, (lon1+lon2)/2., 0] 27 27 ; Comment: A good way to choose the type of the projection we want to do is to have a look at IDL demo: 28 28 ; IDL> demo 29 29 ; Then choose earth sciences and mapping. 30 ; Comment2: By default it is a cylindrical projection which is effectuated (with or without the keyword map). 30 ; Comment2: By default it is a cylindrical projection which is effectuated (with or without the keyword map). 31 31 ; If we want an other projection, MAP must be activated and we have to add the keyword: /nom_projection. 32 32 ; For example, for a polar projection centered on the south pole: … … 34 34 ; IDL> plt, tab, /stereo,map=[-90,0,0] 35 35 ; 36 ; @keyword NOCOLORBAR 36 ; @keyword NOCOLORBAR 37 37 ; We active it if we do not want the colorbar. 38 38 39 ;; @keyword NOFILL 39 ;; @keyword NOFILL 40 40 ; We active it if we only want contours in black and white with a white background. 41 41 ; 42 ; @keyword NOERASE 42 ; @keyword NOERASE 43 43 ; We active it to make a drawing without creating a new frame. 44 44 ; 45 ; @keyword SMALL 46 ; Vector composed of 3 or 4 elements, applied to make a drawing on a 45 ; @keyword SMALL 46 ; Vector composed of 3 or 4 elements, applied to make a drawing on a 47 47 ; small portion of a page or screen. It delimit the zone where the drawing will be done. 48 48 ; If there is 4 elements: 49 ; then is constituted of coordinates (expressed in cm located from the up and 50 ; left corner of the page or the window (in portrait like in landscape)) of the bottom 49 ; then is constituted of coordinates (expressed in cm located from the up and 50 ; left corner of the page or the window (in portrait like in landscape)) of the bottom 51 51 ; and left corner and of the up and right corner of the drawing zone. 52 52 ; If there is 3 elements: 53 ; in this case, we divide the page or the screen in small[0] columns and in small[1] lines 54 ; the drawing made in the box numbered small[2]. The numerotation starting up and left by 53 ; in this case, we divide the page or the screen in small[0] columns and in small[1] lines 54 ; the drawing made in the box numbered small[2]. The numerotation starting up and left by 55 55 ; the number 1 and then, following the writing direction. 56 ; By default, we make the largest drawing we can do, conserving the aspect rapport 56 ; By default, we make the largest drawing we can do, conserving the aspect rapport 57 57 ; (except when REMPLI is activated). 58 ; 59 ; @keyword PORTRAIT 58 ; 59 ; @keyword PORTRAIT 60 60 ; Force the page or the window to be in standing position. 61 61 ; 62 ; @keyword POST 62 ; @keyword POST 63 63 ; Make a postscript. Only works if we made one drawing on the page. 64 64 ; If we make several drawing, use \@ps. 65 65 ; 66 ; @keyword REMPLI 66 ; @keyword REMPLI 67 67 ; Force the drawing to occupy the whole space defined by small. 68 68 ; 69 ; @keyword WINDOW 70 ; Number of the window on which we want to do the graph (Allow to open several windows). 69 ; @keyword WINDOW 70 ; Number of the window on which we want to do the graph (Allow to open several windows). 71 71 ; By default, we open 'IDL0' 72 72 ; 73 ; @keyword CB_TITLE 73 ; @keyword CB_TITLE 74 74 ; The colorbar's title 75 75 ; 76 ; @keyword CONTOUR 77 ; If we want to trace contours of a different field than the one 78 ; whose we have the colored drawing (by example E-P in color and QSR in contours). 76 ; @keyword CONTOUR 77 ; If we want to trace contours of a different field than the one 78 ; whose we have the colored drawing (by example E-P in color and QSR in contours). 79 79 ; It must be a field respecting same characteristics than the argument number one of plt. 80 80 ; 81 ; @keyword ENDPOINTS 82 ; keyword specifying that we want to make a vertical cut in diagonal. Then coordinated of extremities 83 ; of these one are defined by the 4 elements of the vector ENDPOINTS: [x1,y1,x2,y2] which are 84 ; coordinates. 81 ; @keyword ENDPOINTS 82 ; keyword specifying that we want to make a vertical cut in diagonal. Then coordinated of extremities 83 ; of these one are defined by the 4 elements of the vector ENDPOINTS: [x1,y1,x2,y2] which are 84 ; coordinates. 85 85 ; 86 86 ; @keyword VECTEUR {type=vector} … … 94 94 ; @keyword DIREC 95 95 ; 't' 'x' 'y' 'z' 'xys' 'xz' 'yz' 'xyz' 'xt' 'yt' 'zt' 'xyt' 96 ; 'xzt' 'yzt' 'xyzt' Direction on which do averages 96 ; 'xzt' 'yzt' 'xyzt' Direction on which do averages 97 97 ; 98 98 ; @keyword _EXTRA 99 99 ; Used to pass your keywords. 100 100 ; 101 ; @keyword COLOR_C 101 ; @keyword COLOR_C 102 102 ; To draw the contour in color instead of in black 103 ; with filling in color 103 ; with filling in color 104 104 ; 105 105 ; @param POSFENETRE {out}{type=vector} 106 ; It is a vector composed by 4 elements containing the position of the frame 107 ; containing captions and the graph in normalized coordinates. 108 ; Comment: To position the drawing; we have to do !p.position=posfenetre 106 ; It is a vector composed by 4 elements containing the position of the frame 107 ; containing captions and the graph in normalized coordinates. 108 ; Comment: To position the drawing; we have to do !p.position=posfenetre 109 109 ; after the call of the caliber 110 110 ; 111 111 ; @param POSBAR {out}{type=vector} 112 ; Like POSFENETRE but for the color bar. 112 ; Like POSFENETRE but for the color bar. 113 113 ; Same comment to position the color bar, !p.position=posbar 114 114 ; … … 148 148 ; 1) Determination of the size of margins (unity=number of lines or columns) 149 149 ; to the left, to the right, up and down. 150 ; BEWARE in margebar, the last element is the right up corner 150 ; BEWARE in margebar, the last element is the right up corner 151 151 ; instead of the up margin 152 152 ;------------------------------------------------------------- … … 157 157 margebar = 1.*[marge[0]+1, marge[1]+1, marge[2]-8, marge[2]-6] 158 158 if keyword_set(barmarges) then margebar = margebar+barmarges 159 ENDIF ELSE BEGIN 160 nocolorbar = keyword_set(nocolorbar) + keyword_set(nofill) + keyword_set(color_c) 159 ENDIF ELSE BEGIN 160 nocolorbar = keyword_set(nocolorbar) + keyword_set(nofill) + keyword_set(color_c) 161 161 case typedessin of 162 162 'plt':marge = 1.*[6, 2, 4, 3] … … 186 186 ; Portrait or landscape 187 187 ;-------------------------------------------------------------- 188 IF NOT keyword_set(noerase) THEN BEGIN 188 IF NOT keyword_set(noerase) THEN BEGIN 189 189 CASE 1 OF 190 190 n_elements(portrait) NE 0:key_portrait = portrait … … 192 192 ELSE: 193 193 ENDCASE 194 ENDIF 194 ENDIF 195 195 ;-------------------------------------------------------------- 196 196 ; What type of aspect rapport (it will be crushed if YXASPECT exist) … … 218 218 ;------------------------------------------------------------ 219 219 case 1 of 220 ; case of the first drawing on a post cript220 ; case of the first drawing on a postscript 221 221 keyword_set(post) AND !d.name ne 'PS':openps, _extra = ex 222 222 ; case of the first drawing on a screen … … 236 236 windsize = givewindowsize() 237 237 window, window, xsize = windsize[0], ysize = windsize[1], retain = 2, _extra = ex 238 ; When we used colors which are coded on 24bit, we can not stipulate the background color 238 ; When we used colors which are coded on 24bit, we can not stipulate the background color 239 239 ; of a window thanks to !p.background, so we have to to this: 240 240 ; if !d.n_colors gt 256 then begin -
trunk/SRC/ToBeReviewed/PLOTS/DIVERS/restoreatt.pro
r163 r226 5 5 ; 6 6 ; @file_comments 7 ; Allows to reattribu ate global variables associated with a field7 ; Allows to reattribute global variables associated with a field 8 8 ; when we give a structure created by saveatt.pro by example. 9 9 ; 10 ; @categories 10 ; @categories 11 11 ; Utilities 12 12 ; 13 13 ; @param STRUCT {in}{required} 14 ; a structure like the one who read litchamp. 14 ; a structure like the one who read litchamp. 15 15 ; See IDL> xhelp,'litchamp' 16 16 ; … … 19 19 ; 20 20 ; @restrictions 21 ; Change the value if global variables attribute of a field: vargrid, 21 ; Change the value if global variables attribute of a field: vargrid, 22 22 ; varname, varunit, vardate, varexp , valmask and time. 23 23 ; … … 47 47 'e':varexp = struct.(i) 48 48 'm':valmask = struct.(i) 49 'd':BEGIN 50 if size(struct.(i),/type) EQ 7 THEN BEGIN 49 'd':BEGIN 50 if size(struct.(i),/type) EQ 7 THEN BEGIN 51 51 vardate = struct.(i) 52 52 ENDIF ELSE BEGIN … … 55 55 ENDELSE 56 56 end 57 ELSE:BEGIN 57 ELSE:BEGIN 58 58 ras = report('Le nom '+nomelements[i]+' ne correspont a aucun element reconnu de la structure. !C cf. IDL> xhelp, ''litchamp''') 59 59 end -
trunk/SRC/ToBeReviewed/PLOTS/LABEL/label.pro
r163 r226 13 13 ; Number of the type of the label we want to trace 14 14 ; 15 ; @param MIN {in}{required} 15 ; @param MIN {in}{required} 16 16 ; Smallest value for the drawing of the contour. 17 17 ; … … 20 20 ; 21 21 ; @keyword INTERVALLE {default=20} 22 ; Value of an interval between two isolines. By default, it is calculated to 22 ; Value of an interval between two isolines. By default, it is calculated to 23 23 ; draw 20 isolines. In all cases, this keyword must be returned have a nice 24 24 ; caption. If levels do not contain regular intervals, put it at -1. … … 29 29 ; @param NCONTOUR {out} 30 30 ; Number of contour to be drawn. 31 ; 31 ; 32 32 ; @param LEVEL_Z2D {out} 33 33 ; Vector containing values of contours we draw. … … 39 39 ; common.pro 40 40 ; 41 ; @history 41 ; @history 42 42 ; Sebastien Masson (smasson\@lodyc.jussieu.fr) 43 43 ; 7/5/98 44 44 ; 45 ; @version 45 ; @version 46 46 ; $Id$ 47 47 ; … … 86 86 ncontour = fix((max-min)/intervalle) 87 87 ncontour = 1 > ncontour 88 level_z2d = min + intervalle*findgen(Ncontour) 88 level_z2d = min + intervalle*findgen(Ncontour) 89 89 colnumb = ncoul*(findgen(Ncontour))/Ncontour+ncoul/(2*ncontour) 90 90 max=level_z2d[Ncontour-1]+intervalle -
trunk/SRC/ToBeReviewed/PLOTS/VECTEUR/vecteur.pro
r163 r226 1 1 ;+ 2 ; @file_comments 3 ; 4 ; 2 ; @file_comments 3 ; 4 ; 5 5 ; @categories 6 ; 7 ; 8 ; @param ANGLE 9 ; 6 ; 7 ; 8 ; @param ANGLE 10 9 ; 11 10 ; @returns 12 ; 13 ; 11 ; 14 12 ; @restrictions 15 ; 16 ; 13 ; 17 14 ; @examples 18 15 ; 19 ;20 16 ; @history 21 ;22 17 ; 23 18 ; @version … … 29 24 ; by rapport at the x axis and which must do 1 cm on the drawing. 30 25 ; Angle can be an array. 31 ; 26 ; 32 27 ; 33 28 ; … … 53 48 ; 54 49 ;+ 55 ; @file_comments 56 ; 57 ; 50 ; @file_comments 51 ; 52 ; 58 53 ; @categories 59 ; 60 ; 54 ; 55 ; 61 56 ; @param U 62 57 ; … … 64 59 ; @param V 65 60 ; 66 ; 67 ; @param W 68 ; 61 ; @param W 69 62 ; 70 63 ; @restrictions 71 ; 72 ; 64 ; 73 65 ; @examples 74 66 ; 75 ;76 67 ; @history 77 ;78 68 ; 79 69 ; @version … … 87 77 compile_opt idl2, strictarrsubs 88 78 ; 89 IF n_elements(w) NE 0 THEN BEGIN 79 IF n_elements(w) NE 0 THEN BEGIN 90 80 norme = sqrt(u^2.+v^2.+w^2.) 91 81 ind = where(norme NE 0) … … 98 88 u[ind] = u[ind]/norme[ind] 99 89 v[ind] = v[ind]/norme[ind] 100 ENDELSE 90 ENDELSE 101 91 END 102 92 ;------------------------------------------------------------ … … 111 101 ; and is position on the sphere). 112 102 ; 113 ; @categories 103 ; @categories 114 104 ; Graphics 115 ; 105 ; 116 106 ; @param COMPOSANTEU {in}{required} 117 ; It is the u component of the vector to be traced. This 2d array has the 107 ; It is the u component of the vector to be traced. This 2d array has the 118 108 ; same dimension that reduitindice2d (see further) 119 ; 109 ; 120 110 ; @param COMPOSANTEV {in}{required} 121 ; It is the v component of the vector to be traced. This 2d array has the 111 ; It is the v component of the vector to be traced. This 2d array has the 122 112 ; same dimension that reduitindice2d (see further) 123 ; 113 ; 124 114 ; @param NORMEVECTEUR 125 115 ; 126 116 ; 127 117 ; @param INDICE2D {in}{required} 128 ; It in an index allowing to to pass from an jpi or jpj array to the zoom 118 ; It in an index allowing to to pass from an jpi or jpj array to the zoom 129 119 ; on which we do the drawing 130 ; 120 ; 131 121 ; @param REDUITINDICE2D {in}{required} 132 ; It is an index allowing to pass from an array defined by indice2d to the 133 ; array for which we really have vectors to be traced (to be clear, it is 122 ; It is an index allowing to pass from an array defined by indice2d to the 123 ; array for which we really have vectors to be traced (to be clear, it is 134 124 ; for example when we trace only one vector on two). 135 125 ; 136 126 ; @keyword CMREF {default=between .5 and 1.5 cm} 137 ; The length in cm that must measure the arrow normed normeref. By default, 127 ; The length in cm that must measure the arrow normed normeref. By default, 138 128 ; it is adjusted to other drawing and included between .5 and 1.5 cm. 139 129 ; 140 130 ; @keyword MISSING 141 ; The value of a missing value. Do not use this keyword. Fixed at 1e5 by 131 ; The value of a missing value. Do not use this keyword. Fixed at 1e5 by 142 132 ; ajoutvect.pro 143 ; 144 ; @keyword NORMEREF 133 ; 134 ; @keyword NORMEREF 145 135 ; The norme of the reference arrow. 146 136 ; 147 137 ; @keyword VECTCOLOR {default=0} 148 138 ; The color of the arrow. Black by default (color 0) 149 ; 139 ; 150 140 ; @keyword VECTTHICK {default=1} 151 ; The thick of the arrow. 141 ; The thick of the arrow. 152 142 ; 153 143 ; @keyword VECTREFPOS 154 ; Vector composed of 2 elements specifying the position on DATA coordinates 155 ; from the beginning of the reference vector. By default at the right bottom 144 ; Vector composed of 2 elements specifying the position on DATA coordinates 145 ; from the beginning of the reference vector. By default at the right bottom 156 146 ; of the drawing. 157 147 ; … … 161 151 ; @keyword NOVECTREF 162 152 ; To delete the display of the reference vector. 163 ; 153 ; 164 154 ; @keyword _EXTRA 165 ; Used to pass your keywords 166 ; 167 ; @uses 155 ; Used to pass your keywords 156 ; 157 ; @uses 168 158 ; common.pro 169 159 ; … … 179 169 ; 180 170 ; @version 181 ; $Id$ 171 ; $Id$ 182 172 ; 183 173 ;- … … 209 199 msk = replicate(1, nx, ny) 210 200 if keyword_set(missing) then terre = where(abs(zu) GE missing/10) ELSE terre = -1 211 if terre[0] NE -1 then BEGIN 201 if terre[0] NE -1 then BEGIN 212 202 msk[terre] = 0 213 203 zu[terre] = 0 … … 216 206 ENDIF 217 207 ; 218 ; Stage 1: 219 ; 220 ; Given that the directions and the sense that the vector has on the sphere, 221 ; we have to try to determinate this direction and the sense that the vector 208 ; Stage 1: 209 ; 210 ; Given that the directions and the sense that the vector has on the sphere, 211 ; we have to try to determinate this direction and the sense that the vector 222 212 ; will have on the screen once it will have been projected. 223 213 ; 224 ; In theory: on the sphere, a vector in a given point has for direction the 225 ; tangent at the circle passing by the center of the Earth and by the vector. 214 ; In theory: on the sphere, a vector in a given point has for direction the 215 ; tangent at the circle passing by the center of the Earth and by the vector. 226 216 ; So, find the direction once the projection is done, it is find the tangent 227 ; to the curve representing the projection of the circle on the 2d plan at the 228 ; point representing the projection of the starting point of the s here on the217 ; to the curve representing the projection of the circle on the 2d plan at the 218 ; point representing the projection of the starting point of the sphere on the 229 219 ; 2d plan. 230 ; 231 ; In practice we do no know the definition of the curve given by the projection 220 ; 221 ; In practice we do no know the definition of the curve given by the projection 232 222 ; of a circle so find its tangente in a point... 233 223 ; 234 224 ; What we do: 235 225 ; In a 3d cartesian reference, 236 ; a) We find coor inates of the point T (starting of the arrow) situed226 ; a) We find coordinates of the point T (starting of the arrow) situed 237 227 ; on the sphere. 238 228 ; b) To each point T, we determine local directions defined by the grid 239 229 ; on this point and on which coordinates (u,v) of the vector refer to. 240 230 ; These local directions are defined by gradients of glam and gphi. Once 241 ; we have obtain these directions, we consid arethem like orthogonal and231 ; we have obtain these directions, we consider them like orthogonal and 242 232 ; by norming them, we build an orthonormal reference (nu,nv) on which 243 233 ; coordinates (u,v) of the vector refer to. In the starting 3d cartesian … … 254 244 ; e) We pass coordinates of these points in normalized coordinates, then 255 245 ; in polar coordinates in order to find the angle and the direction they 256 ; de rtermine on the drawing.246 ; determine on the drawing. 257 247 ; 258 248 ; … … 280 270 ; points u[i,j] and u[i-1,j] (resp v[i,j] and v[i,j-1]) which define, for each 281 271 ; point on the sphere, local directions associated with u and v. These vectors 282 ; define a local orthonormal reference. 283 ; These vectors are built in a cartesian reference (cv_coord). We have choose a 272 ; define a local orthonormal reference. 273 ; These vectors are built in a cartesian reference (cv_coord). We have choose a 284 274 ; unity radius of the Earth (unit). 285 275 ; … … 294 284 uy = reform(r[1, *], nxgd, nygd) 295 285 uz = reform(r[2, *], nxgd, nygd) 296 ; calculation of nu 286 ; calculation of nu 297 287 nux = ux-shift(ux, 1, 0) 298 288 nuy = uy-shift(uy, 1, 0) … … 311 301 IF finite(glamv[0]*gphiv[0]) NE 0 THEN $ 312 302 coord_sphe = transpose([ [(glamv[indice2d])[*]], [(gphiv[indice2d])[*]], [radius[*]] ]) $ 313 ELSE coord_sphe = transpose([ [(glamt[indice2d])[*]], [(gphif[indice2d])[*]], [radius[*]] ]) 303 ELSE coord_sphe = transpose([ [(glamt[indice2d])[*]], [(gphif[indice2d])[*]], [radius[*]] ]) 314 304 r = cv_coord(from_sphere=coord_sphe,/to_rect,/degrees) 315 305 ; coordinates of points of the grid in cartesian. … … 317 307 vy = reform(r[1, *], nxgd, nygd) 318 308 vz = reform(r[2, *], nxgd, nygd) 319 ; calcul of nv 309 ; calcul of nv 320 310 nvx = vx-shift(vx, 0, 1) 321 311 nvy = vy-shift(vy, 0, 1) … … 383 373 ; Stage 1, e) 384 374 ; 385 r = convert_coord(glam,gphi,/data,/to_normal) 375 r = convert_coord(glam,gphi,/data,/to_normal) 386 376 x0 = r[0, *] ; normal coordinates of the beginning of the array. 387 y0 = r[1, *] ; 388 389 r = convert_coord(glam1,gphi1,/data,/to_normal) 377 y0 = r[1, *] ; 378 379 r = convert_coord(glam1,gphi1,/data,/to_normal) 390 380 x1 = r[0, *] ; normal coordinates of the ending of the array (Before scaling). 391 y1 = r[1, *] ; 381 y1 = r[1, *] ; 392 382 ; 393 383 ; tests to avoid that arrows be drawing out of the domain. … … 397 387 if out[0] NE -1 THEN x0[out] = !values.f_nan 398 388 ; 399 ; Following projections, there may are points at NaN when we pass in normal coordinates. 389 ; Following projections, there may are points at NaN when we pass in normal coordinates. 400 390 ; We delete these points. 401 391 ; … … 422 412 ; Now we take care of the norme... 423 413 ; 424 ; Automatic putting at the scale 425 ; 426 if NOT keyword_set(cmref) then BEGIN 414 ; Automatic putting at the scale 415 ; 416 if NOT keyword_set(cmref) then BEGIN 427 417 mipgsz = min(page_size, max = mapgsz) 428 418 sizexfeuille = mipgsz*key_portrait+mapgsz*(1-key_portrait) … … 438 428 cm = 1.*normeref/cmref 439 429 ; 440 ; We modify the array norme to an element having the value cm be represented 441 ; by a trait of lenght 1 cm on the paper. Norme contain the norme of vectors 430 ; We modify the array norme to an element having the value cm be represented 431 ; by a trait of lenght 1 cm on the paper. Norme contain the norme of vectors 442 432 ; we want to draw. 443 433 ; … … 446 436 ; 447 437 ; Stage 3 448 ; Now that we have the angle and the norme, we recuperate coordinates in 438 ; Now that we have the angle and the norme, we recuperate coordinates in 449 439 ; rectangular and we draw arrows. 450 440 ; … … 467 457 ; 468 458 if NOT keyword_set(novectref) then BEGIN 469 dx = cmref*cv_cm2normal(0) ; Leng htof the vector of reference in normalzed coordinates.459 dx = cmref*cv_cm2normal(0) ; Length of the vector of reference in normalzed coordinates. 470 460 if keyword_set(vectrefformat) then $ 471 461 normelegende = strtrim(string(normeref, format = vectrefformat), 1)+' ' $ … … 490 480 ; 491 481 492 if keyword_set(key_performance) NE 0 THEN print, 'temps vecteur', systime(1)-tempsun 482 if keyword_set(key_performance) NE 0 THEN print, 'temps vecteur', systime(1)-tempsun 493 483 ;------------------------------------------------------------ 494 484 ;------------------------------------------------------------ 495 485 return 496 END 497 498 499 500 486 END 487 488 489 490 -
trunk/SRC/ToBeReviewed/PLOTS/axe.pro
r209 r226 8 8 ; pltz and pltt 9 9 ; 10 ; @categories 10 ; @categories 11 11 ; Graphics 12 12 ; 13 13 ; @param COUPE {type=string} 14 ; It designate the type of cut to which the axes we create 14 ; It designate the type of cut to which the axes we create 15 15 ; must report. For example: 'xy','xt'... 16 16 ; 17 17 ; @param TEMPSMIN {in}{required} 18 ; In the case where we do cut containing the time dimension, we have 18 ; In the case where we do cut containing the time dimension, we have 19 19 ; to specify the beginning of the time's axis in julian days. 20 20 ; 21 21 ; @param TEMPSMAX {in}{required} 22 ; In the case where we do cut containing the time dimension, we have 22 ; In the case where we do cut containing the time dimension, we have 23 23 ; to specify the end of the time's axis in julian days. 24 24 ; 25 ; @keyword SIN 25 ; @keyword SIN 26 26 ; activated when we trace in sinus of the latitude 27 27 ; 28 28 ; @keyword SEPDATE {type=string} 29 ; It separate the different constituents of the date. By default, 30 ; it is a return to the line when we do a 'yt', 'zt' or a 't'. 31 ; In the other cases, it is a blank. 29 ; It separate the different constituents of the date. By default, 30 ; it is a return to the line when we do a 'yt', 'zt' or a 't'. 31 ; In the other cases, it is a blank. 32 32 ; 33 33 ; @keyword DIGITSYEAR … … 36 36 ; information on %Z and %Y. 37 37 ; 38 ; @keyword _EXTRA 38 ; @keyword _EXTRA 39 39 ; used to pass your keywords 40 ; 40 ; 41 41 ; @uses 42 42 ; common.pro … … 65 65 tempsun = systime(1) ; pour key_performance 66 66 ;-------------------------------------------------------------- 67 ; Management of ticks of the time axis in the case of TEMPSMIN 68 ; and TEMPSMAX are defin ied67 ; Management of ticks of the time axis in the case of TEMPSMIN 68 ; and TEMPSMAX are defined 69 69 ;-------------------------------------------------------------- 70 70 divday = 0 … … 94 94 ymax-ymin+1 GT 10: BEGIN & freq = 2. & tminor = 4 & datfmt = '%M'+sep+fmtyr & end 95 95 ELSE: BEGIN & freq = 1. & tminor = 4 & datfmt = '%M'+sep+fmtyr & end 96 ENDCASE 96 ENDCASE 97 97 nticks = ceil((ymax-ymin)/freq) + 2 98 98 yminf = (floor(ymin/freq))*freq … … 174 174 for mn = 0, nticks-1 do ticknom[mn] = julday(mmin, dmin, ymin, hmin, mnminf + freq*mn, 0, _EXTRA = ex) 175 175 ticknom = ticknom[where(ticknom GE tempsmin AND ticknom LE tempsmax, nticks)] 176 datfmt = '%H:%I' 176 datfmt = '%H:%I' 177 177 END 178 178 ; second base … … 201 201 dummy = label_date(0, 0, 0, DATE_FORMAT = datfmt, _EXTRA = ex) 202 202 if chkstru(ex, 'DATE_FORMAT') then ex.DATE_FORMAT = '' 203 ENDIF 203 ENDIF 204 204 ;-------------------------------------------------------------- 205 205 ; Definition of axes parameters case by case 206 206 ;-------------------------------------------------------------- 207 207 case coupe of 208 'pltv':BEGIN 208 'pltv':BEGIN 209 209 dtasize = tempsmin 210 210 !x.range = [-0.5, dtasize[0] - 0.5] 211 !y.range = [-0.5, dtasize[1] - 0.5] 211 !y.range = [-0.5, dtasize[1] - 0.5] 212 212 if keyword_set(reverse_x) then !x.range=reverse(!x.range) 213 213 if keyword_set(reverse_y) then !y.range=reverse(!y.range) … … 215 215 !y.title = 'ny' 216 216 END 217 'xy':BEGIN 217 'xy':BEGIN 218 218 if keyword_set(reverse_x) then !x.range=[lon2,lon1] ELSE !x.range=[lon1,lon2] 219 219 if keyword_set(reverse_y) then !y.range=[lat2,lat1] ELSE !y.range=[lat1,lat2] … … 221 221 IF key_onearth THEN !y.tickformat='lataxe' 222 222 END 223 'yz':BEGIN 223 'yz':BEGIN 224 224 if keyword_set(reverse_x) then !x.range=[lat2,lat1] ELSE !x.range=[lat1,lat2] 225 225 if keyword_set(reverse_y) then !y.range=[0, -1] ELSE !y.range = [-1, 0] … … 227 227 ; number of ticks by default 228 228 plot, [0], [0], /noerase, /nodata, xtick_get = xaxe 229 ; We increase this number to it be around 10 229 ; We increase this number to it be around 10 230 230 ticks = n_elements(xaxe)-1 231 231 ticks = ticks*[1, 2, 4, 8] … … 241 241 endif 242 242 end 243 'xz':BEGIN 243 'xz':BEGIN 244 244 if keyword_set(reverse_x) then !x.range=[lon2,lon1] ELSE !x.range=[lon1,lon2] 245 245 if keyword_set(reverse_y) then !y.range=[0, -1] ELSE !y.range = [-1, 0] … … 252 252 ; result = LABEL_DATE(DATE_FORMAT = '%M'+sep+fmtyr) 253 253 ; !y.tickformat='LABEL_DATE' 254 !y.tickname = LABEL_DATE(1, 0,ticknom,_EXTRA = ex) 254 !y.tickname = LABEL_DATE(1, 0,ticknom,_EXTRA = ex) 255 255 !y.ticklen=1. 256 256 !y.gridstyle=2 … … 266 266 if keyword_set(reverse_y) then !y.range=[lat2, lat1] ELSE !y.range=[lat1,lat2] 267 267 IF key_onearth THEN !y.tickformat='lataxe' 268 !x.tickname = LABEL_DATE(0, 0,ticknom,_EXTRA = ex) 268 !x.tickname = LABEL_DATE(0, 0,ticknom,_EXTRA = ex) 269 269 !x.ticklen=1. 270 270 !x.gridstyle=2 … … 278 278 if keyword_set(reverse_x) then !x.range = [tempsmax,tempsmin]-tempsmin $ 279 279 ELSE !x.range=[tempsmin,tempsmax]-tempsmin 280 if vargrid EQ 'W' then gdep=gdepw[0:nzw-1] ELSE gdep=gdept[0:nzt-1] 281 !x.tickname = LABEL_DATE(0, 0,ticknom,_EXTRA = ex) 280 if vargrid EQ 'W' then gdep=gdepw[0:nzw-1] ELSE gdep=gdept[0:nzt-1] 281 !x.tickname = LABEL_DATE(0, 0,ticknom,_EXTRA = ex) 282 282 !x.ticklen=1. 283 283 !x.gridstyle=2 … … 291 291 if keyword_set(reverse_x) then !x.range = [tempsmax,tempsmin]-tempsmin $ 292 292 ELSE !x.range=[tempsmin,tempsmax]-tempsmin 293 !x.tickname = LABEL_DATE(0, 0,ticknom,_EXTRA = ex) 293 !x.tickname = LABEL_DATE(0, 0,ticknom,_EXTRA = ex) 294 294 !x.ticklen=1. 295 295 !x.gridstyle=2 … … 308 308 ; Number of ticks by default 309 309 plot, [0], [0], /nodata, /noerase, xstyle = 5, ystyle = 5, xtick_get = xaxe 310 ; We increase this number to it be around 10 310 ; We increase this number to it be around 10 311 311 ticks = n_elements(xaxe)-1 312 312 ticks = ticks*[1, 2, 4, 8] … … 324 324 END 325 325 'z' : begin 326 ; if vargrid EQ 'W' then gdep=gdepw[0:nzw-1] ELSE gdep=gdept[0:nzt-1] 326 ; if vargrid EQ 'W' then gdep=gdepw[0:nzw-1] ELSE gdep=gdept[0:nzt-1] 327 327 ; if keyword_set(reverse_y) then !y.range=[gdep[0], gdep[n_elements(gdep)-1]] $ 328 328 ; ELSE !y.range=[gdep[n_elements(gdep)-1], gdep[0]] 329 END 329 END 330 330 endcase 331 if keyword_set(key_performance) THEN print, 'temps axe', systime(1)-tempsun 331 if keyword_set(key_performance) THEN print, 'temps axe', systime(1)-tempsun 332 332 return 333 333 end
Note: See TracChangeset
for help on using the changeset viewer.