Changeset 772 for misc

Show
Ignore:
Timestamp:
07/12/07 17:45:00 (14 months ago)
Author:
mankoff
Message:

Bytscaled and recorded minmax. Also deleted a bunch of unused code (vectors, streamlines, etc.)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • misc/clouds/d_vectrack.pro

    r764 r772  
    4545;- 
    4646;---------------------------------------------------------------------------- 
    47  
    48  
    49 ;---------------------------------------------------------------------------- 
    50  
    51 PRO d_vectrackMkVectors, u, v, w, fVerts, iConn, X=x, Y=y, Z=z, SCALE=scale,$ 
    52                RANDOM=random, NVECTORS=nvectors, STEPSIZE=stepsize,$ 
    53                bMAG=bMag, VC=vc 
    54  
    55     ; Ensure volumes match in number of elements. 
    56     nSamples = N_ELEMENTS(u) 
    57     IF (nSamples NE N_ELEMENTS(v) OR nSamples NE N_ELEMENTS(w)) THEN BEGIN 
    58         MESSAGE,'Number of elements in u, v, and w must match.' 
    59         RETURN 
    60     ENDIF 
    61     sz = SIZE(u) 
    62  
    63     ; Handle keywords, set defaults. 
    64     IF (N_ELEMENTS(scale) EQ 0) THEN scale = 1.0 
    65     IF (N_ELEMENTS(random) EQ 0) THEN random=0 
    66     IF (N_ELEMENTS(nvectors) EQ 0) THEN nvectors = 100 
    67     IF (N_ELEMENTS(stepsize) eq 0) then stepsize = 1 
    68     IF (N_ELEMENTS(bMag) EQ 0) THEN bMag = BYTSCL(SQRT(u^2+v^2+w^2)) 
    69  
    70     ; Get plane information. 
    71     doPlane = 0 
    72     IF (N_ELEMENTS(x) GT 0) THEN BEGIN 
    73         IF (random EQ 0) THEN BEGIN 
    74             nRow = sz[2] / stepsize 
    75             nCol = sz[3] / stepsize 
    76         ENDIF 
    77         doPlane = 1 
    78     ENDIF 
    79     IF (N_ELEMENTS(y) GT 0) THEN BEGIN 
    80         IF (doPlane) THEN MESSAGE,'X, Y, and Z keywords are mutually exclusive' 
    81         IF (random EQ 0) THEN BEGIN 
    82             nRow = sz[3] / stepsize 
    83             nCol = sz[1] / stepsize 
    84         ENDIF 
    85         doPlane = 2 
    86     ENDIF 
    87     IF (N_ELEMENTS(z) GT 0) THEN BEGIN 
    88         IF (doPlane) THEN MESSAGE,'X, Y, and Z keywords are mutually exclusive' 
    89         IF (random EQ 0) THEN BEGIN 
    90             nRow = sz[2] / stepsize 
    91             nCol = sz[1] / stepsize 
    92         ENDIF 
    93         doPlane = 3 
    94     ENDIF 
    95     IF (doPlane EQ 0) THEN MESSAGE, 'Must specify a plane.' 
    96  
    97     ; Grab max, min values in vector volumes. 
    98     maxU = MAX(u, MIN=minU) 
    99     maxV = MAX(v, MIN=minV) 
    100     maxW = MAX(w, MIN=minW) 
    101  
    102     ; Compute the magnitude. 
    103     mag = SQRT((maxU-minU)^2 + (maxV-minV)^2 + (maxW-minW)^2) 
    104     fNorm = scale / mag 
    105  
    106     ; Compute radomly spaced vectors. 
    107     IF (random) THEN BEGIN 
    108         fVerts = FLTARR(3, 2*nvectors) 
    109         iConn = LONARR(3*nvectors) 
    110         vc = BYTARR(2*nvectors) 
    111  
    112         CASE doPlane OF 
    113             1: BEGIN   ; X=x 
    114                 randomX = REPLICATE(x, nvectors) 
    115                 seed = x 
    116                 randomY = RANDOMU(seed, nvectors) * (sz[2]-1) 
    117                 randomZ = RANDOMU(seed, nvectors) * (sz[3]-1) 
    118                END 
    119             2: BEGIN   ; Y=y 
    120                 seed = y 
    121                 randomX = RANDOMU(seed, nvectors) * (sz[1]-1) 
    122                 randomY = REPLICATE(y, nvectors) 
    123                 randomZ = RANDOMU(seed, nvectors) * (sz[3]-1) 
    124                END 
    125             3: BEGIN   ; Z=z 
    126                 seed = z 
    127                 randomX = RANDOMU(seed, nvectors) * (sz[1]-1) 
    128                 randomY = RANDOMU(seed, nvectors) * (sz[2]-1) 
    129                 randomZ = REPLICATE(z, nvectors) 
    130                END 
    131         ENDCASE 
    132  
    133         inds = LINDGEN(nvectors) 
    134         x0 = randomx[inds] 
    135         y0 = randomy[inds] 
    136         z0 = randomz[inds] 
    137  
    138         v0 = transpose([[x0],[y0],[z0]]) 
    139         v1 = transpose([[x0+u[x0,y0,z0]*fNorm],$ 
    140                 [y0+v[x0,y0,z0]*fNorm],$ 
    141                 [z0+w[x0,y0,z0]*fNorm]]) 
    142         fVerts[*,inds*2] = v0[*,inds] 
    143         fVerts[*,inds*2+1] = v1[*,inds] 
    144         iConn[inds*3] = 2 
    145         iConn[inds*3+1] = inds*2 
    146         iConn[inds*3+2] = inds*2+1 
    147  
    148         vc[inds*2] = bMag[x0,y0,z0] 
    149         vc[inds*2+1] = bMag[x0,y0,z0] 
    150  
    151     ; Compute evenly sampled vectors. 
    152     ENDIF ELSE BEGIN 
    153         nV = nRow*nCol 
    154  
    155         fVerts = FLTARR(3, 2*nV) 
    156         iConn = LONARR(3*nV) 
    157         vc = BYTARR(2*nV) 
    158  
    159         CASE doPlane OF 
    160             1: BEGIN   ; X=x 
    161                 x0 = REPLICATE(x,nV) 
    162                 y0 = REFORM((REPLICATE(1,nCol) # (LINDGEN(nRow)*stepsize)),nV) 
    163                 z0 = REFORM(((LINDGEN(nCol)*stepsize) # REPLICATE(1,nRow)),nV) 
    164                END 
    165             2: BEGIN   ; Y=y 
    166                 y0 = REPLICATE(y,nRow*nCol) 
    167                 z0 = REFORM((REPLICATE(1,nCol) # (LINDGEN(nRow)*stepsize)),nV) 
    168                 x0 = REFORM(((LINDGEN(nCol)*stepsize) # REPLICATE(1,nRow)),nV) 
    169                END 
    170             3: BEGIN   ; Z=z 
    171                 z0 = REPLICATE(z,nRow*nCol) 
    172                 y0 = REFORM((REPLICATE(1,nCol) # (LINDGEN(nRow)*stepsize)),nV) 
    173                 x0 = REFORM(((LINDGEN(nCol)*stepsize) # REPLICATE(1,nRow)),nV) 
    174                END 
    175         ENDCASE 
    176  
    177         inds = LINDGEN(nV) 
    178         v0 = transpose([[x0],[y0],[z0]]) 
    179         v1 = transpose([[x0+u[x0,y0,z0]*fNorm],$ 
    180                 [y0+v[x0,y0,z0]*fNorm],$ 
    181                 [z0+w[x0,y0,z0]*fNorm]]) 
    182         fVerts[*,inds*2] = v0[*,inds] 
    183         fVerts[*,inds*2+1] = v1[*,inds] 
    184         iConn[inds*3] = 2 
    185         iConn[inds*3+1] = inds*2 
    186         iConn[inds*3+2] = inds*2+1 
    187  
    188         vc[inds*2] = bMag[x0,y0,z0] 
    189         vc[inds*2+1] = bMag[x0,y0,z0] 
    190     ENDELSE 
    191  
    192 END 
    193  
    194 ;---------------------------------------------------------------------------- 
    195 ; Integrate V to get S 
    196 ; Stream Ribbons 
    197 ; PRO d_vectrackRibbonTrace,vdata,start,auxdata,STEPS=steps,FRAC=frac, $ 
    198 ;                           WIDTH=width, UP=up,COLOR=color,  $ 
    199 ;                           OUTVERTS = outverts, OUTCONN = outconn,  $ 
    200 ;                           VERT_COLORS = vertcolors 
    201  
    202 ;     if (N_ELEMENTS(steps) eq 0) then steps = 100 
    203 ;     if (N_ELEMENTS(frac) eq 0) then frac = 1.0 
    204 ;     if (N_ELEMENTS(up) eq 0) then up = [0.0,0.0,1.0] 
    205 ;     if (N_ELEMENTS(width) eq 0) then width = .5 
    206  
    207 ;     PARTICLE_TRACE,vdata,start,overts,oconn,onormals, $ 
    208 ;         MAX_ITERATIONS=steps, MAX_STEPSIZE=frac,INTEGRATION=0 $ 
    209 ;         ,ANISOTROPY=[1,1,1], SEED_NORMALS=up 
    210  
    211 ;     if((N_ELEMENTS(oconn) gt 0) and (SIZE(overts, /N_DIMENSIONS) eq 2))  $ 
    212 ;         then begin 
    213 ;         STREAMLINE,overts,oconn,onormals*width,outverts,outconn 
    214 ;         cdata = INTERPOLATE(auxdata,outverts[0,*],outverts[1,*],outverts[2,*]) 
    215 ;         cdata = REFORM(cdata,N_ELEMENTS(outverts)/3) 
    216 ;         vertcolors = BYTSCL(cdata) 
    217 ;     end 
    218 ; END 
    219  
    220  
    221 ;---------------------------------------------------------------------------- 
    222 ; Integrate V to get S 
    223 ; Streamlines 
    224 ; PRO d_vectrackStreamlineTrace,vdata,start,auxdata,STEPS=steps,FRAC=frac, $ 
    225 ;                               OUTVERTS = outverts, OUTCONN = outconn,  $ 
    226 ;                               VERT_COLORS = vertcolors 
    227  
    228 ;     if (N_ELEMENTS(steps) eq 0) then steps = 100 
    229 ;     if (N_ELEMENTS(frac) eq 0) then frac = 1.0 
    230  
    231 ;     PARTICLE_TRACE,vdata,start,outverts,outconn, $ 
    232 ;         MAX_ITERATIONS=steps, MAX_STEPSIZE=frac,INTEGRATION=0 $ 
    233 ;         ,ANISOTROPY=[1,1,1] 
    234  
    235 ;     if((N_ELEMENTS(outconn) gt 0) and (SIZE(outverts, /N_DIMENSIONS) eq 2)) $ 
    236 ;         then begin 
    237 ;         cdata = INTERPOLATE(auxdata,outverts[0,*],outverts[1,*],outverts[2,*]) 
    238 ;         cdata = REFORM(cdata,N_ELEMENTS(outverts)/3) 
    239 ;         vertcolors = BYTSCL(cdata) 
    240 ;     end 
    241 ; END 
    242  
    243  
    24447 
    24548;---------------------------------------------------------------------------- 
     
    394197 
    395198;---------------------------------------------------------------------------- 
    396 ; Routine to generate a movie 
    397  
    398 PRO d_vectrackRenderMovie,sState 
    399  
    400     filename = DIALOG_PICKFILE(/READ, FILTER = '*.scr', /MUST_EXIST) 
    401     IF (filename EQ '') THEN RETURN 
    402  
    403     OPENR, lun, filename, ERROR = err, /GET_LUN 
    404     IF (err NE 0) THEN BEGIN 
    405         MESSAGE,"Unable to open input file:"+filename,/CONTINUE 
    406         RETURN 
    407     ENDIF 
    408  
    409 ; Read the file 
    410     ON_IOERROR, end_of_file 
    411  
    412     sState.oGroup->GetProperty, TRANSFORM=intrans 
    413     vol_rend = 0 
    414     file_num = 0 
    415     tstr = '' 
    416     base_name = 'image_' 
    417     farg = fltarr(4) 
    418     iarg = intarr(4) 
    419     WHILE (1) DO BEGIN 
    420     READF,lun,tstr 
    421     PRINT,'>',tstr 
    422     str = STRTOK(tstr, ',', /EXTRACT) 
    423     CASE STRUPCASE(str[0]) OF 
    424         'BASENAME': BEGIN      ;[name] - set the filename base 
    425                 IF (N_ELEMENTS(str) EQ 2) THEN BEGIN 
    426                     base_name = str[1] 
    427                 END 
    428              END 
    429         'ROTATE': BEGIN      ;[dx,dy,dz,ang] - rotate the scene 
    430                 IF (N_ELEMENTS(str) EQ 5) THEN BEGIN 
    431                     farg[0] = str[1] 
    432                     farg[1] = str[2] 
    433                     farg[2] = str[3] 
    434                     farg[3] = str[4] 
    435                         sState.oGroup->Rotate,farg[0:2],farg[3] 
    436                 END 
    437             END 
    438         'SAVE': BEGIN        ; render and save an image 
    439             sState.oVols[sState.iVrendVol]->SetProperty, $ 
    440                 HIDE=1-vol_rend 
    441             demo_draw, sState.oWindow, sState.oView, debug=sState.debug 
    442             sState.oVols[sState.iVrendVol]->SetProperty,HIDE=1 
    443             oImage = sState.oWindow->Read() 
    444             oImage->GetProperty,DATA=data 
    445             OBJ_DESTROY,oImage 
    446             file_num = file_num + 1 
    447             outname=base_name+STRING(file_num,FORMAT='(I4.4)') 
    448             OPENW, outlun, outname, /GET_LUN 
    449             WRITEU, outlun, data 
    450                 CLOSE, outlun 
    451             FREE_LUN, outlun 
    452             sz = SIZE(data) 
    453             PRINT,"Saved:",outname,sz[1],sz[2],sz[3] 
    454             END 
    455         'TIMESTEP': BEGIN    ;[num]  select time step 
    456                 IF (N_ELEMENTS(str) EQ 2) THEN BEGIN 
    457                    iarg[0] = str[1] 
    458                    status=d_vectrackChangeData(sState,iarg[0]) 
    459                 END 
    460             END 
    461         'VOLUME': BEGIN      ;[0/1]  off/on 
    462                 IF (N_ELEMENTS(str) EQ 2) THEN BEGIN 
    463                     iarg[0] = str[1] 
    464                     IF (iarg[0] NE 0) THEN BEGIN 
    465                         vol_rend = 1 
    466                     END ELSE BEGIN 
    467                         vol_rend = 0 
    468                     END 
    469                 END 
    470             END 
    471 ;       'SLICEPOS': BEGIN    ;[axis,pos]  axis-1,2,3,pos 
    472 ;               IF (N_ELEMENTS(str) EQ 3) THEN BEGIN 
    473 ;                   iarg[0] = str[1] 
    474 ;                   iarg[1] = str[2] 
    475 ;               END 
    476 ;           END 
    477     ELSE:   BEGIN 
    478             PRINT,'Unknown command:',tstr 
    479         END 
    480     END 
    481     END 
    482  
    483 end_of_file: ON_IOERROR, NULL 
    484  
    485     CLOSE, lun 
    486     FREE_LUN, lun 
    487  
    488     sState.oGroup->SetProperty, TRANSFORM=intrans 
    489  
    490 END 
    491  
    492 ;---------------------------------------------------------------------------- 
    493199; Routine to update the colorbar display to match the current vrend selection 
    494200 
     
    615321END 
    616322 
    617 ;---------------------------------------------------------------------------- 
    618 ; Convert a mouse point into a streamline... 
    619  
    620 ; FUNCTION d_vectrackDoStream,sEvent,sState,new_flag 
    621 ;     pick = sState.oWindow->PickData(sState.oView,$ 
    622 ;                                         sState.oVols[0], $ 
    623 ;                                         [sEvent.x,sEvent.y],dataxyz) 
    624 ;     IF (pick NE 1) THEN RETURN,0 
    625  
    626 ;     sState.oVols[2]->GetProperty,xcoord_conv=xc,ycoord_conv=yc,$ 
    627 ;         zcoord_conv=zc 
    628  
    629 ;     IF (new_flag) THEN BEGIN 
    630 ;         WIDGET_CONTROL, sState.wRibbons, GET_VALUE = bRibbons 
    631 ;         IF (bRibbons) THEN BEGIN 
    632 ;                     sState.oStreamline = OBJ_NEW('IDLgrPolygon', $ 
    633 ;                 SHADING=1,STYLE=2,UVALUE=dataxyz,$ 
    634 ;                 xcoord_conv=xc,ycoord_conv=yc,zcoord_conv=zc) 
    635 ;         END ELSE BEGIN 
    636 ;             sState.oStreamline = OBJ_NEW('IDLgrPolyline', $ 
    637 ;                 UVALUE=dataxyz,$ 
    638 ;                 xcoord_conv=xc,ycoord_conv=yc,zcoord_conv=zc) 
    639 ;         END 
    640 ;         sState.oStreamModel->Add,sState.oStreamline 
    641 ;     END 
    642  
    643 ;     d_vectrackBuildRibbon,sState,sState.oStreamline,dataxyz 
    644  
    645 ;     RETURN,1 
    646 ; END 
    647  
    648 ;-------------------------------------------------------------------------- 
    649 ; Compute a single Ribbon/Streamline 
    650  
    651 ; PRO d_vectrackBuildRibbon,sState,oObj,dataxyz 
    652  
    653 ;     sState.oVols[sState.iVrendVol]->GetProperty,DATA0=auxdata, $ 
    654 ;         RGB_TABLE0=auxpal, /NO_COPY 
    655 ;     auxpal = TRANSPOSE(auxpal) 
    656 ;     grAuxpal = OBJ_NEW('IDLgrPalette',  $ 
    657 ;                        auxpal[0, *], auxpal[1, *], auxpal[2, *]) 
    658 ;     iStep = 100 
    659 ;     ;fFrac = 1.0/88.0  ; 1.0/max velocity 
    660 ;     fFrac = .5 ;step size 
    661  
    662 ;     WIDGET_CONTROL, sState.wRibbons, GET_VALUE = bRibbons 
    663 ;     IF (bRibbons) THEN BEGIN 
    664 ;         d_vectrackRibbonTrace, sState.vdata, dataxyz, auxdata,FRAC=fFrac, $ 
    665 ;             STEP=iStep,VERT_COLORS=vertcolors, WIDTH = sState.fWidth, $ 
    666 ;             OUTVERTS = outverts, OUTCONN = outconn 
    667 ;     END ELSE BEGIN 
    668 ;         d_vectrackStreamlineTrace, sState.vdata, dataxyz, auxdata,FRAC=fFrac, $ 
    669 ;             STEP=iStep,VERT_COLORS=vertcolors, $ 
    670 ;             OUTVERTS = outverts, OUTCONN = outconn 
    671 ;     END 
    672  
    673 ;     IF ((N_ELEMENTS(outconn) GT 1) AND (SIZE(outverts, /N_DIMENSIONS) EQ 2)) $ 
    674 ;         THEN BEGIN 
    675 ;         WIDGET_CONTROL, sState.wRibbons, GET_VALUE = bRibbons 
    676 ;         IF (bRibbons) and OBJ_VALID(oObj) THEN BEGIN  
    677 ;             ss = N_ELEMENTS(color)*0.5 
    678 ;             oObj->SetProperty, REJECT=0, STYLE=2,SHADING=1,PALETTE=grAuxpal, $ 
    679 ;                 DATA = outverts, POLYGONS = outconn, VERT_COLORS = vertcolors 
    680 ;         END ELSE BEGIN 
    681 ;             oObj->SetProperty,HIDE=0,DATA=outverts,POLYLINES = outconn, $ 
    682 ;                 VERT_COLORS=vertcolors, PALETTE = grAuxpal 
    683 ;         END 
    684 ;     END ELSE BEGIN 
    685 ;         oObj->SetProperty,HIDE=1 
    686 ;     END 
    687  
    688 ;     sState.oVols[sState.iVrendVol]->SetProperty,DATA0=auxdata,/NO_COPY 
    689  
    690 ; END 
     323 
    691324 
    692325;----------------------------------------------------------------- 
     
    1124757        vname = 'd'+STRTRIM(i,2) 
    1125758        r = execute( vname + '=data.('+STRTRIM(i,2)+')' ) 
    1126 ;        r = execute( vname+'b = BYTSCL( '+vname+' )' ) 
    1127759    endfor 
    1128760    ; we now have d0, d1, ..., dn for each array in the data struct. 
     
    15021134    oGroup->Add, oStreamModel 
    15031135 
     1136minmax = fltarr( 2, n_elements(dnames) ) 
    15041137for i=0, n_tags(*pdata)-1 do begin 
    15051138    n =STRTRIM(i,2) 
    1506     r = execute( 'dtmp = d'+n+'[*,*,*,0]' ) 
    1507     vol = OBJ_NEW('IDLgrVolume', DATA0 = dtmp, $ 
     1139    r = execute( 'dtmp = d'+n ) 
     1140    minmax[*,i] = minmax( dtmp ) 
     1141    dtmpB = BYTSCL( dtmp ) 
     1142    vol = OBJ_NEW('IDLgrVolume', DATA0 = dtmpB[*,*,*,0], $ 
    15081143                  /ZERO_OPACITY_SKIP, /ZBUFFER, HIDE=1, $ 
    15091144                  XCOORD_CONV=xs, YCOORD_CONV=ys, ZCOORD_CONV=zs ) 
     
    15861221    endif else if svd eq 4 then begin 
    15871222        ; dnames ge 1 => more than 1 array passed in 
    1588         vdata = transpose(vdata, [3,0,1,2] ) ; multiple 3D arrays (t=0) 
     1223        vdata = transpose(temporary(vdata), [3,0,1,2] ) ; multiple 3D arrays (t=0) 
    15891224    endif else if svd eq 5 then begin 
    1590         vdata = transpose(vdata, [4,0,1,2,3] ) ; multiple 4D (time) arrays 
     1225        vdata = transpose(temporary(vdata), [4,0,1,2,3] ) ; multiple 4D (time) arrays 
    15911226    endif 
    15921227;    vdata = FLTARR(3, vdims[0], vdims[1], vdims[2]) 
     
    16411276        fWidth: fWidth, $ 
    16421277        bIsoShow: 0,           $ 
    1643         fScales:[[128.0/7.0,127.0],[128.0/22.0,127.0],[255.0/88.0,0.0],$ 
    1644             [128.0/0.006,128.0],[255.0/0.0067,0.0],[255.0/0.0162,0.0]], $ 
     1278;        fScales:[[128.0/7.0,127.0],[128.0/22.0,127.0],[255.0/88.0,0.0],$ 
     1279;            [128.0/0.006,128.0],[255.0/0.0067,0.0],[255.0/0.0162,0.0]], $ 
     1280              fScales: indgen(2,6)+1, $ 
    16451281        oXPolyline: oXPolyline,$ 
    16461282        oYPolyline: oYPolyline,$