;$Author: nikos $ ;$Date: 2014-09-03 15:05:59 -0700 (Wed, 03 Sep 2014) $ ;$Header: /home/cdaweb/dev/control/RCS/create_plain_vis.pro,v 1.16 2012/05/04 21:31:57 johnson Exp johnson $ ;$Locker: johnson $ ;$Revision: 15739 $ ;Function: create_plain_vis ;Purpose: to compute a plain image for the Polar VIS ;images in Kilorayleighs. ;Author: Tami Kovalick, Raytheon STX, July 15, 1998 ;Modification: ; ; ;Copyright 1996-2013 United States Government as represented by the ;Administrator of the National Aeronautics and Space Administration. ;All Rights Reserved. ; ;------------------------------------------------------------------ ; function create_plain_vis, astruct, orig_names ;this code assumes that an image variable is declared as virtual. ;And that the "components" of the image virtual variable are ;the "parent" variable "Image_Counts" and the additional variable ;"Intens_Table". ;First thing, get the virtual image variable metatdata and data. atags = tag_names(astruct) ;get the variable names vv_tagnames=strarr(1) vv_tagindx = vv_names(astruct,names=vv_tagnames) ;find the virtual vars if (vv_tagindx[0] lt 0) then return, -1 ;Get the real image data print, 'In Create_plain_vis.pro' ireturn=1 ;print, vv_tagnames ;print, orig_names im_val_arr=intarr(n_elements(vv_tagindx)) for ig=0, n_elements(vv_tagindx)-1 do begin ; RTB added 9/98 vtags=tag_names(astruct.(vv_tagindx[ig])) ;TJK 3/14/01 added check for function name, so we're not waisting time looking at ;virtual variables that aren't suppose to be processed by this function. ;11/5/04 - TJK - had to change FUNCTION to FUNCT for IDL6.* compatibility ; findex = tagindex('FUNCTION', vtags) ; find the FUNCTION index number findex = tagindex('FUNCT', vtags) ; find the FUNCTION index number if (findex[0] ne -1) then $ func_name=strlowcase(astruct.(vv_tagindx[ig]).(findex[0])) if(func_name eq 'create_plain_vis') then begin v = tagindex('DAT',vtags) if (v[0] ne -1) then begin im_val = astruct.(vv_tagindx[ig]).dat endif else begin im_val = astruct.(vv_tagindx[ig]).handle if (im_val eq 0) then ireturn=0 endelse im_val_arr[ig]=im_val im_size = size(im_val) im_val=0 ;print, vv_tagindx[ig], im_val_arr[ig] if (im_val[0] ne 0 or im_size[0] eq 3) then begin im_val = 0B ;free up space ireturn=0 endif endif else im_val_arr[ig] = -1 ;function isn't create_plain_vis, don't need to look at it endfor if(ireturn) then return, astruct ; Return only if all orig_names are already ; populated. RTB 9/98 ; Determine 1st vv which has not yet been populated. If there are other ; vv's (after this current vv) which have not been set, they will be ; populated below if approriate or in another vv function called be ; read_myCDF. RTB 11/20/98 ; im_v=where(im_val_arr eq 0,im_vn) if (im_vn le 0) then return, astruct ;TJK added 3/14/01 c_0 = astruct.(vv_tagindx[im_v[0]]).COMPONENT_0 ;1st component var (real image var) c_1 = astruct.(vv_tagindx[im_v[0]]).COMPONENT_1 ;2nd component var (intensity var) if (c_0 ne '') then begin ;this should be the real image data - get the image data real_image = tagindex(c_0, atags) itags = tag_names(astruct.(real_image)) ;tags for the real Image data. d = tagindex('DAT',itags) if (d[0] ne -1) then AllImage = astruct.(real_image).DAT $ else begin d = tagindex('HANDLE',itags) handle_value, astruct.(real_image).HANDLE, AllImage endelse endif else print, 'No image variable found' im_size = size(AllImage) if (im_size[0] eq 3 or (im_size[0] eq 2 and im_size[1] eq 256)) then begin ;Second thing, need to get the image support variable data ;out of astruct. if (c_1 ne '') then begin ;this should be the real intensity data intensity = tagindex(c_1, atags) itags = tag_names(astruct.(intensity)) ;tags for the real Image data. d = tagindex('DAT',itags) if (d[0] ne -1) then Intens = astruct.(intensity).DAT $ else begin d = tagindex('HANDLE',itags) handle_value, astruct.(intensity).HANDLE, Intens endelse endif else print, 'No intensity variable found' if (im_size[0] eq 3) then num_recs = im_size[3] else num_recs = 1 print, 'Number of images = ',num_recs ;Set up the arrays that all of the new data will be put in prior ;to final storage in their respective structure handles. new_image = fltarr(im_size[1], im_size[2], im_size[3],/nozero) for k = 0, num_recs-1 do begin Image = AllImage[*,*,k] ;just load in one image ;don't do yet...TJK 7/22/98 new_image[*,*,k] = transpose(Image) new_image[*,*,k] = Image new_image[*,*,k] = Intens(new_image[*,*,k]+1) immin = min(new_image,max=immax) print, 'Min and max values for this image, ',immin,' ',immax Image = 1B endfor; for each image ;TJK a bunch of varification information which can be taken out ;once we're confident things are working correctly... wcnt = 0 im_temp = handle_create(value=new_image) ; Line below replaced w/ for loop RTB ;astruct.(vv_tagindx[0]).HANDLE = im_temp ; ; Loop through all vv's and assign image handle to all w/ 0 handles RTB 11/98 ; Check if handle = 0 and if function = 'create_plain_vis' ;print, n_elements(vv_tagindx) ;print, vv_tagnames ;if(n_elements(vv_tagindx) gt 1) then begin for ll=0, n_elements(vv_tagindx)-1 do begin ;print, ll ;print, vv_tagindx[ll] vartags = tag_names(astruct.(vv_tagindx[ll])) ;11/5/04 - TJK - had to change FUNCTION to FUNCT for IDL6.* compatibility ; findex = tagindex('FUNCTION', vartags) ; find the FUNCTION index number findex = tagindex('FUNCT', vartags) ; find the FUNCT index number if (findex[0] ne -1) then $ func_name=strlowcase(astruct.(vv_tagindx[ll]).(findex[0])) if(func_name eq 'create_plain_vis') then begin ; print, vv_tagnames(vv_tagindx[ll]), im_temp if(astruct.(vv_tagindx[ll]).HANDLE eq 0) then begin astruct.(vv_tagindx[ll]).HANDLE = im_temp endif endif endfor ;endif else begin ;free up space new_image = 1B ; Check astruct and reset variables not in orignal variable list to metadata, ; so that variables that weren't requested won't be plotted/listed. status = check_myvartype(astruct, orig_names) return, astruct endif else return, -1 ;if there's no image data return -1 end