section of routines in cubeview.i

functions in cubeview.i -

 
 
 
cubeview


             cubeview,data  
 
   Cubeview is an  almost graphical package base on the  Tiny Widget Set (TWS),  
   intended to allow easy access to spectroimaging data, or any 3D data.  
   The only mandatory  argument, DATA, is either  a 3D array, or the  name of a  
   FITS  file  containing such  a  cube. The  spectral  dimension  must be  the  
   third. Actually if  you don't specify DATA, the program will  let you try to  
   select a file, which is really fine only under ytk, in which case the tcl/tk  
   file selection box is used. I don't find the text-only file selection helper  
   really useable.  
     
   Cubeview uses three windows, selectable through optional keywords:  
     slice_wid=(0)   : the slice window  
     spectrum_wid=(1): the spectrum window  
     cmd_wid=(2)     : the command window, or tool bar.  
   So Cubeview displays a  slice of the cube, which is really  an image made as  
   the sum of  a few planes of the cube  and a spectrum, which is  the sum of a  
   few individual spectra. The  slice can also be an RGB image  if you click on  
   "3 color  slice". The  third window is  used to  display a few  buttons. The  
   labels should be self-explanatory, but you can get help by right clicking on  
   one of the buttons.  
   Some buttons, like  the ones that let you select the  spectrum or the slice,  
   remain active  (the text of the button  is then blue) untill  you finish the  
   action  by either  right-clicking in  the relevant  window, or  clicking any  
   button  in any  non-relevant  window.  The  "Slice  properties" and  "Spect.  
   properties" buttons are a little special: when they are clicked, the command  
   window is replaced  by a dialog box  in which you can choose  some eye candy  
   properties  for  the slice  display,  and the  axis  type  for the  spectra.  
   There's  no context  help available  in  these window,  right clicking  them  
   reverts to the normal command box.  
   Using the graphical frontend  to cubeview disables Yorick's standard zooming  
   abilities. You can suspend Cubeview  by clicking on the appropiate button to  
   re-enable them, or to perform any task on yorick's command line (like make a  
   hardcopy  of the  windows...). You  then go  back to  your  running Cubeview  
   session by typing  "cv_resume", or "cv" which is an  alias to cv_resume. The  
   "limits" set this  this way are kept whil running cubeview,  that may not be  
   what you want. You  can free the limits again, or only  the Y axis limits of  
   the spectra, by clicking the appropriate buttons.  
   Cubeview now  supports hooking  user function to  its drawing  routines. See  
   source of cv_*_hook for sample usage.  
     
   See CV_LIBRARY  for documentation about  the internals. All defaults  can be  
   set through  cv_defaults, and overriden passing keywords  to cubeview. These  
   keywords are the member names of the struture type CV_Interns.  
   KEYWORDS: see CV_Interns, see postinit in cv_init.  
          
SEE ALSO:,   cv_library,,   cv_init,,   cv_defaults,,  
CV_Defaults,,   cv_interns,  
 
 
 
cv_3colslice


             cv_3colslice & Cubeview's "3 color slice" radio button  
 
     If you click on this button or  call this routine, all slices from then on  
     will be of type "3 color".  
     See cv_normalslice & Cubeview's "Normal slice" radio button.  
 
 
 
cv_blank


             cv_blank  
 
  Puts zeros in the currently selected 3D box. Useful for cleaning.  
 
 
 
cv_circmas


             cv_circmas(sx,sy,x0,y0,r,inv=)  
 
    returns a circular mask,  i.e. a 2D array MASK of size  SXxSY, of type int,  
    such that for any (x,y),  
      - if    INV    is    not    set    (or    null):    (MASK(x,y)==1)    <=>  
        sqrt((x-x0)^2+(y-y0)^2)<=r.  
      - if INV is set, (MASK(x,y)==1) <=> sqrt((x-x0)^2+(y-y0)^2)>r;  
 
 
 
cv_cmd_win_init


             cv_cmd_win_init  
 
     Initializes  Cubeview's  almost  graphical  user  interface.  Not  a  user  
     function: is intended to be called by CUBEVIEW.  
 
 
 
cv_current_zaxis


             cv_current_zaxis()  
 
     Returns  as  a vector  the  spectral  axis  currently used  by  Cubeview,  
     considering the current state of cv_interns.zaxistype.  
 
 
 
cv_cutreg


             cv_cutreg  
 
     On Cubeview's  slice window (CV_INTERNS.SLICE_WID),  select with mouse rectangular area  
     which contrast is to be maximized.  
SEE ALSO: cv_cutsel,   cv_cutregonce,   cv_library  
 
 
 
cv_cutregonce


             cv_cutregonce  
          or cv_cutregonce,x0,y0,x1,y1  
 
    Adjust  contrast on  the  output image  by  setting its  min/max value  to  
    min/max  of  selected square  region,  specified  by  corners (x0,y0)  and  
    (x1,y1).  If not specified,  the entire  image is  used. Then  redraws the  
    slice.  
SEE ALSO: cv_cutreg,   cv_library  
 
 
 
cv_cutsel


             cv_cutsel  
 
     On  Cubeview's  slice window  (CV_INTERNS.SLICE_WID),  click from  minimum  
     pixel to maximum pixel to draw.  
SEE ALSO: cv_cutreg,   cv_library  
 
 
 
cv_defaults


             cv_defaults  
 
     Instance of CV_Defaults defining defaults for Cubeview.  
     cv_defaults=CV_Defaults(slice_wid=0,  
                             sp_wid=1,  
                             cmd_wid=2,  
                             depth=24,  
                             origin=[1,1,1],  
                             scale=[1,1,1],  
                             overs=1,  
                             slboxcol=248,  
                             zwlwise=0,  
                             sltype="Normal",  
                             slpalette="stern.gp",  
                             slinterp="spline",  
                             zaxistype="PIX",  
                             refwl=2.166120,  
                             pixel=1);  
SEE ALSO: CV_Defaults,   cubeview,   cv_library  
 
 
 
CV_Defaults


 CV_Defaults  
 
struct CV_Defaults  
/* DOCUMENT CV_Defaults  
   Structure  to handle  defaults for  cubeview. The  members are  the  ones of  
   CV_Interns for  which setting a  default makes sense. The  external variable  
   cv_defaults is normally  the only variable of type  CV_Defaults. You may set  
   defaults  by accessing  this  variable,  that is  erased  when you  #include  
   cubeview.  
   {  
     long slice_wid,sp_wid,cmd_wid,depth;  
     double origin(3),scale(3),overs,vlsr,spsmooth,slsmooth,blank,xyaspect;  
     char slboxcol,zwlwise,pixel;  
     string sltype,slpalette,slinterp,hook,aperture_type;  
     GraphK spkeywords;  
   }  
 
 
 
cv_freeylimits


             cv_freeylimits  
 
     
    Frees  Y limits,  hence the  name...  Indeed,  calls LIMITS  to  uset every  
    limits, then sets back X limits. Very useful if you've set limits using the  
    mouse and want to explore data only within the selected range.  
    Normally called through cubeview's "Spectrum Y limits" button.  
 
 
 
cv_gauss_smooth


             sm=cv_gauss_smooth(sp,fwhm)  
 
    Gaussian smoothing of a spectrum or image.  
SEE ALSO: box_smooth  
 
 
 
cv_graphicwindows


             cv_graphicwindows : redraw  
 
   Keywords:   NOKILL:   if   set,   the   windows  are   not   killed   and  
   re-initialized. EXTRACT: re-extract spectrum and slice.  
 
 
 
cv_handler


             cv_handler(uname,button)  
 
     Cubeview  event handler.  Not a  user  function, normally  called only  by  
     TWS_HANDLER.     
 
 
 
cv_help


             cv_help =help,cubeview  
 
 
 
 
cv_init


              cv_init,"file.fits"  or  cv_init,3D_array  
 
     It's  probably better  not to  call directly  CV_INIT and  let  the almost  
     graphical tool CUBEVIEW do it.  Initiates Cubeview.  If called with a fits  
     file name, includes  "fits.i" and reads the file.  Feeds  all items of the  
     external  variable CV_INTERNS,  and displays  a  first slice  and a  first  
     spectrum.  After, you could use cv_spsel and cv_slsel.  
     Cubeview has a kind of graphical  user interface that can be launched with  
     "cubeview,data", or "cv_resume" once CV_INIT has been called.  
     cv_init takes as keyword any member of CV_Defaults, override the defaults.  
     In  addition to this,  cv_init will  include any  .i file  specified as  
     POSTINIT keyword.  
SEE ALSO: cubeview,   cv_library,   cv_defaults  
 
 
 
cv_interns


             extern cv_cube, cv_interns  
 
   cv_cube is an external variable holding the data cube being viewed  
   in Cubeview.  
     
   cv_interns is a structure of type CV_Interns, containing all other  
   variables shared by Cubeview routines.  
   cv_valids is a mask indicating which cells in cv_cube are valid  
   data. It is used to speed up various treatments, unless the cube  
   "isbig".  
     
   The most usefull items for the user are .slice and .spectrum,  
   pointers to eponym arrays.  .spbox is a 4 elements array containing  
   the coordinates of the corners of the region defining the spectrum  
   aperture, and likewise .sllims contains the limits of the spectral  
   region defining the slice.  .slice is either a NxM indexed color  
   array, or a 3xNxM RGB array.  
SEE ALSO: CV_Interns,   cubeview,   cv_library  
 
 
 
CV_Interns


 CV_Interns  
 
struct CV_Interns {  
/* DOCUMENT CV_Interns: structure type use internally by cubeview.  
 {  
 pointer slice; //  pointer to the current slice, either  indexed color or RGB,  
                // so either NxM or 3xNxM.  
 pointer spectrum; // pointer to the current spectrum, of size P.  
 pointer zaxis;    // spectral axis, in pixels  
 pointer waxis;    // wavelength spectral axis, in microns  
 pointer faxis;    // frequency spectral axis, in cm-1  
 pointer vaxis;    // velocity spectral axis, in km/s  
 pointer  root;  //  pointer  to  cubeview's TWS_Root  widget.  See  tws.i  and  
                 //  tws_root.i  
 long slice_wid,sp_wid,cmd_wid; // Cubeview windows identifiers  
 long sllims(2); // indices of the first and last z-planes of the current slice  
 long depth; // depth of the slice image in 3 color mode: 8 or 24  
 long big_size; // if cubes has more voxels than that, sopme treatements will  
                // be memory-optimized.  
 double spbox(4); // integer pixel coordinates of the spectrum aperture if rectangular  
                   or square, center x, center y, radius and nothing if circular  
 double cmin,cmax; // lower and upper cut for displaying the slice  
 double origin(3);  // 3D  position of  the data cell  (1,1,1) in  you prefered  
                    //  coordinate system  
 double  scale(3);  //  scales  of  the data  in  the  three  
                    //  dimensions  
 double slpos(4); // "real world" coordinates of the 4 corners of the field  
 double overs; // oversampling factor to display the slice  
 double refwl; // reference wavelength in microns for conversion into velocity  
 double vlsr; // true "systemic" velocity in the local standard of rest if its observed velocity is 0.  
 double spsmooth ; // smoothing box for the displayed spectrum  
 double slsmooth ; // smoothing box for the displayed slice  
 char slboxcol;  // color index  to draw the  box inicating the  slice bandpass  
                 //  when in normal mode  
 char zwlwise; // 0 zaxis is frequency-wise, 1 if it is wavelength-wise  
 string sltype; //  String containing the type of slice,  either "Normal" or "3  
                //  color". Used by most cv_ routines that access the slice.  
 string slpalette; // palette to use for the slice when in normal mode  
 string zaxistype; // type of Z-axis to use: "PIX", "WAVE", "FREQ" or "VELOCITY"  
 string slinterp; // use interp or spline to interpolate? spline is much better  
                  // and...  slower.  Should not be a problem,  except  if  you  
                  // work  on really big data.  
 string aperture_type; // rectangular, square, circular  
 string hook; // name of a function  to call from time to times (basically each  
              // time a window  is updated). Format not well defined  yet. One  
              // (or several?) general interest hook is provided. See cv_*_hook.  
 GraphK spkeywords; // graphic keywords to plot the spectra. See graphk.i.  
 double xyaspect; // aspect ratio X/Y of the viewport in the slice window.  
                  // by default, depends on the dimensions of the data.  
                  // Set to 0 for this behavior, or to a scalar.  
 }  
 
 
 
cv_library


             cubeview, cv_init, cv_spsel,  cv_slsel, cv_cutsel and cv_cutreg are  
 
   the main user level routines.  
   Cubeview  is   a  set  of   routines  intended  to  ease   visualization  of  
   spectroimaging  data. It  is consistant  in its  goals with  the  eponym IDL  
   package from the BEAR project.  
      cubeview,data starts an almost graphical user interface. If you just want  
                    to  look at  3D data,  just  kick it  off, and  right-click  
                    buttons to get context help. Left click them to use them.  
     
   Data are  shared between routines through an  external variable, cv_interns,  
   of type CV_Interns. Function names begin with "cv_". Defaults are defined in  
   an external variable, cv_defaults, of type CV_Defaults.  
   The main goal is to display both a slice and a spectrum in two windows.  
   It is possible  to hook a user  routine to some events. To  do this, just  
   set cv_interns.hook to  a string containing the name  of the user routine  
   (say,  "MyHook"). This  can  be done  by  means of  the  HOOK keyword  to  
   cubeview and cv_init.  Each time  a cv_ function that supports hooking is  
   called, the  user function with  get called with  the name of  the caller  
   routine as  a single argument: for  instance MyHook("cv_spdraw") whenever  
   the  spectrum  gets  redrawn.   The  user function  should  make  use  of  
   cv_interns to get any data it  needs.  Grep the source for cv_callhook to  
   find out which routines support hooking.  
     
   Main routines:  
     cv_init,data: initiates  external variables and windows. Data  
                   should be either a FITS file name or a 3D data cube.  
     cv_spsel:     select spectrum in a rectangular area with mouse.  
     cv_slsel:     select slice on the spectrum with mouse.  
     cv_cutsel:    select minimum and maximum value to show (see CMIN and CMAX  
                   in bytscl).  
     cv_cutreg:    enclose a rectangular area with mouse, CMIN and CMAX will  
                   be min and max in this area.  
     cv_cutregonce: same as cv_cutreg, but just once and not interactively.  
   Intermediate level routines:  
     cv_slextract,begin,end:  explicitely extract a slice from plane BEGIN to plane END  
     cv_spextract,corners:    explicitely extract a spectrum from a given rectangular aperture  
     cv_sldraw and cv_spdraw: explicitely redraw slice or spectrum. Can extract as well.  
     cv_slwin and cv_spwin:   explicitely select slice or spectrum window.  
     cv_cutregonce:           same as cv_cutreg, but just once and not interactively.  
   Helper routines:  
     cv_slpnm,filename: write the current slice to a PNM file.  
     cv_blank: "blank" selected volume (setting it to the value specified by  
               the BLANK card of the fits file).  
       
   For the low level routines, use the source.  
       
   Cubeview GUI is based on the Tiny Widget Set (TWS).  
       
   Note: cv_library itself  is a function that does  nothing more than showing  
   its own DOCUMENT comment.  
SEE ALSO: cubeview,   cv_interns,   cv_defaults,  
CV_Interns,   CV_Defaults,   cv_library  
 
 
 
cv_newrefwl


             cv_newrefwl,refwl  
 
     Change   Cubeview's  reference   wavelength:  set   cv_interns.refwl  and  
     *cv_interns.vaxis.  
 
 
 
cv_normalslice


             cv_normal slice & Cubeview's "Normal slice" radio button  
 
     If you click on this button or  call this routine, all slices from then on  
     will be of type "Normal", that is standard Yorick indexed color image.  
     See cv_3colslice & Cubeview's "3 color slice" radio button.  
 
 
 
cv_plfi


             cv_plfi,im  
             cv_plfi,im,x1,y1  
             cv_plfi,im,x0,y0,x1,y1  
 
      Draws an RGB image using plf. Syntax  similar to PLI, except im has to be  
      3xNxM of thype char (an RGB image).  
      This is to work around a bug that prevents RGB images from being properly  
      output to eps (or ps or epsi...) when using pli.  
SEE ALSO: plf,   pli  
 
 
 
cv_pnm


             cv_pnm,"filename"  
 
     Writes current slice to pnm file.  
 
 
 
cv_popup2_init


             cv_cmd_win_init  
 
     Initializes  Cubeview's  almost  graphical  user  interface.  Not  a  user  
     function: is intended to be called by CUBEVIEW.  
 
 
 
cv_popup2_init


               cv_popup_init,cv_popuphandler & Cubeview's "Spect. properties" button  
 
     Clicking on the button in  Cubeview's command window makes this window be  
     replaced by  a dialog box allowing  to set a few  parameters for spectrum  
     display: type of Z axis, reference wavelength.  
     You  get out  of this  dialog box  by right  clicking in  it (there  is no  
     context help there).  
       
SEE ALSO: cubeview,   cv_interns,   cv_defaults,  
cv_library  
 
 
 
cv_popup2handler


             cv_popuphandler(uname,button)  
 
     Cubeview event handler for a  popup.  Not a user function, normally called  
     only by TWS_HANDLER.  
 
 
 
cv_popup_init


               cv_popup_init,cv_popuphandler & Cubeview's "Slice properties" button  
 
     Clicking on the  button in Cubeview's command window  makes this window be  
     replaced  by a  dialog box  allowing  to set  a few  parameters for  slice  
     display:  oversampling factor, depth  of "3  color" slice  (8 or  24), and  
     palette for "normal" slice.  
     You  get out  of this  dialog box  by right  clicking in  it (there  is no  
     context help there).  
       
SEE ALSO: cubeview,   cv_interns,   cv_defaults,  
cv_library  
 
 
 
cv_popup_init


             cv_cmd_win_init  
 
     Initializes  Cubeview's  almost  graphical  user  interface.  Not  a  user  
     function: is intended to be called by CUBEVIEW.  
 
 
 
cv_popuphandler


             cv_popuphandler(uname,button)  
 
     Cubeview event handler for a  popup.  Not a user function, normally called  
     only by TWS_HANDLER.  
 
 
 
cv_putslbox


             cv_putslbox  
 
   Displays a colored box representing the spectral region corresponding to the  
   slice in Cubeview's spectral window.  
 
 
 
cv_putspbox


             cv_putspbox  
 
     Puts a box arround the  region defining the current spectrum in cubeview's  
     slice window.  
 
 
 
cv_readbb


             box=cv_readbb(filename)  
 
returns bounding box of an eps file.  
 
 
 
cv_rgb2indexed


             cv_rgb2indexed, image, red, green, blue  
 
     Converts RGB image  to indexed color image. This  function is identical to  
     pnm_display in pnm.i,  except it does not plot, but  returns the image and  
     palette  components. This  routines intends  not to  touch the  display in  
     anyway (for instance it does not set the palette.)  
     RED, GREEN and BLUE are returned  arrays to feed PALETTE with.  (Unlike in  
     PNM_DISPLAY, they are not returned in an external variable.)  
SEE ALSO: pnm_display,   cv_library  
 
 
 
cv_rgbeps


             cv_rgbeps & Cubeview "Slice -> epsi" button.  
             cv_rgbeps,prefix  
 
     In  the second  form, outputs  Cubeview's current  slice to  an  epsi file  
     PREFIX.epsi (.epsi is appended to  PREFIX). In the first form, prompts for  
     PREFIX  and performs.   When  prompted,  action is  canceled  if you  type  
     "cancel" as a prefix.  
     cv_rgbeps uses  a number of external  programs, so works only  on UNIX, if  
     the programs  are installed:  convert (from ImageMagick),  jpeg2ps, latex,  
     dvips  and ps2epsi.   A number  of temporary  files are  written,  but not  
     deleted: (in the following, ~ means PREFIX) ~_axes.ps, ~_im.pnm, ~_im.jpg,  
     ~_im.eps, ~.tex, ~.aux, ~.dvi, ~.ps  and ~.epsi. The file your looking for  
     is PREFIX.epsi. Afterwards, you can  modify PREFIX_im.eps and run latex on  
     PREFIX.tex again... So the intermediate files  can come in handy. And as a  
     side effect, you  also get pnm, jpg and eps versions  of the image without  
     the axes...  
     The point  of all this is  that, at least  on my machine, Yorick  does not  
     produce good  RGB eps files, or  I don't know how  to do it. So  I cheat a  
     little bit.   By the way,  this is mostly  usefull for 3 color  slices. It  
     works on normal  slices, producing RGB eps (using  pnm_colorize), that may  
     or may  not be  what you  want.  For normal  slices, I  suggest suspending  
     Cubeview,  switching to  the slice  window  with CV_SLWIN,  and using  the  
     standard EPS function.  
     Note that you  can also tell Cubeview  to display 3 color images  at 8 bit  
     depth  (by setting cv_interns.depth  to 8  instead of  24). In  that case,  
     running EPS  manually as  mentioned above works  great. The colors  may be  
     less impressive when a large dynamic  is needed, but this way you can also  
     get the spectrum window with its nice rainbow slice box...  
     So in a word, this is here  to take care of the most complicated case, but  
     there are other  simpler means to get the picture,  that may be preferable  
     in most cases.  
     Here is a cookbook to get things at 8bit depth:  
     1) get your picture interactively at 24bit depths, including the cuts.  
     2) suspend Cubeview.  
     3) switch to 8bit depth: cv_interns.depth=8  
     (3bis: at this point, you may notice  that the cut aren't to great, you can  
      resume Cubeview(cv) to fix them, and suspend again. Screen update does not  
      work to great at 8bit though)  
     4) redraw both windows: cv_graphicwindows  
     5) zoom in with the mouse if you whish...  
     6) switch to slice window: cv_slwin  
     7) dump it to eps file: eps,"filename_slice"  
     8) switch to spectrum window: cv_spwin  
     9) dump it to eps file: eps,"filename_spectrum"  
     10) get back to 24bit display: cv_interns.depth=24 ; cv_graphicwindows;  
     11) resume Cubeview: cv  
 
 
 
cv_save_sel


            NT cv_save_sel, filename  
 
      Save the subecube currecntly selected in cubeview (both spectral  
      and spatial dimension) to file FILENAME, updating the FITS  
      header if possible.  
    
 
 
 
cv_sldraw


             cv_sldraw  
 
     Displays current Cubeview slice (CV_SLICE) in the right window (pointed at  
     by CV_SLICE_WID).  Displays a box around the spectrum region.  
 
 
 
cv_slextract


             cv_slextract,begin,end  
 
     
     Extracts   new   Cubview   slice   (*CV_INTERNS.SLICE)   by   summing   up  
     CV_CUBE planes from range BEGIN to range END. Updates a few items  
     in CV_INTERNS, and can also return the slice.  
     If cv_interns.sltype=="3 color", the slice  is a 3xNxM array, all 3 planes  
     being sums  of CV_CUBE  planes from BEGIN  to END  with different  
     ponderations.   This   keeps  some  velocity  information   in  the  image  
     displayed... (blueshifted regions can appear in blue and so...)  
 
 
 
cv_sllims


             cv_sllims & Cubeview's "Slice limits" button  
 
     Sets  the limits  of Cubeview's  slice window  so that  the full  field is  
     viewed, with squared pixels, and east on the left.  
 
 
 
cv_slpnm


             cv_slpnm  
 
     Write current slice,  affected by current cuts and  palette (for a "Normal  
     slice"), to  an RGB PNM file (PPM),  using PNM_WRITE. The box  is saved in  
     "axes_"+filename+".epsi", so that you can get the original image with axes  
     using  xfig   for  instance,  so  LaTeX  programming   would  probably  be  
     better. For  this kind of purpose,  I recommend using any  tool to convert  
     the slice to JPEG, then jpeg2ps.  That allows to keep JPEG compression for  
     the bitmap part.  
 
 
 
cv_slsel


              cv_slsel, Cubeview's "Select slice" button  
 
   Choose rectangle on Window 0  with left mouse button, extracts corresponding  
   splice   CV_INTERNS.SLICE   from  CV_INTERNS.DATA,   draws   it  to   window  
   CV_INTERNS.SLICE_WID.  
   CV_SLSEL loops  until you hit  any other button  than the left in  the slice  
   window, or any button in any other window.  
 
 
 
cv_slwin


             cv_slwin  
 
   Switches to windows CV_INTERNS.SLICE_WID  
 
 
 
cv_spdraw


             cv_spdraw  
 
     Displays  current Cubeview  spectrum (*CV_INTERNS.SPECTRUM)  in  the right  
     window (pointed  at by  CV_INTERNS.SP_WID).  Displays the  spectral region  
     defining the slice on a colored background.  
 
 
 
cv_spextract


             cv_spextract,corners  
 
     Extracts  new  Cubeview  spectrum  (*CV_INTERNS.SPECTRUM)  by  summing  up  
     *CV_INTERNS.DATA   spectra  included  in   rectangular  area   difined  by  
     CORNERS=[X0,Y0,X1,Y1]. Updates CV_INTERNS accordingly.  
 
 
 
cv_spsel


              cv_spsel, Cubeview's "Select spectrum button".  
 
   Choose rectangle on Window 0  with left mouse button, extracts corresponding  
   spectrum  *CV_INTERNS.SPECTRUM  from CV_CUBE,  draws  it to  window  
   CV_INTERNS.SP_WID.  
   CV_SPSEL loops  until you hit any other window.  
 
 
 
cv_spwin


             cv_slwin Switches to windows CV_INTERNS.SP_WID  
 
 
 
 
cv_suspend


             Cubeview SUSPEND button.  
 
  Click button to suspend Cubeview. You can resume afeterwards using CV_RESUME.  
 
 
 
cv_tws


             cv_tws or cv  
 
     Resume a Cubeview almost graphical user interface session.  
     While the event handler is runing, you don't have access to the command  
     line to do anything not implemented in the GUI.  
     Cubeview  allows you  to suspend  a session  by right  clicking  in its  
     toolbar, and resume  whenever you want by calling  this simple routine.  
     It may not  work if you do  weird things such as trying  to run another  
     session  of Cubeview  or  any other  TWS  base software  (that is  only  
     Cubeview for now...)  
     If the  keyword GRAPHIC_WINDOWS is  set to a  non zero value,  then the  
     slice  and spectrum  windows are  reset, which  is not  a good  idea if  
     you've just spent half an hour trying to get the best zoom.  
     cv is an alias to cv_resume  
 
 
 
cv_ui


             cv_ui = "gtk"  
          or cv_ui = "tws"  
          or cv_ui = "text"  
 
   Which ui should cubeview use? This is the initial default, the last  
   one used is remembered for the duration of the session.  
 
 
 
cv_vpaspect


             cv_vpaspect,x,y  
          or cv_vpaspect,x/y  
          or cv_vpaspect,data  
 
    Set  the  viewport  of  current  graphic  window  so  that  it  has  the  
    appropriate aspect  ratio to display an  XxY image.  In  the third form,  
    data  may be  a 2-or-more  dimensional array,  and it  is  equivalent to  
    cv_vpaspect,dimsof(data(2)),dimsof(data(3)).  
    Note  that the new  viewport always  fits in  the old  one, so  that the  
    viewport gets  smaller and smaller  as you set  it again and  again with  
    cv_vpaspect. Use vpset to change the size of the viewport.  
SEE ALSO: vpset,   coords,   i,   style,   i,   get_style,  
set_style  
 
 
 
cv_zoom


             cv_zoom  
 
   A zoom  similar to  that provided directly  by yorick.  left,  middle and  
   left click zoom-in, pan and  soom-out respectively; when control is hold,  
   button  1 zooms on  drawn rectangle,  buttons 2  and 3  zoom out  so that  
   viewport is  downscaled to drawn rectangle (unlike  default zoomer). When  
   control is hold, normal zoom  is perform dragging low-left to high-right:  
   other combination  cause one or both  of the axes to  be inverted (unlike  
   default zoomer).  
   Click in another window to stop.  
   See also: limits  
 
 
 
round


             long=round(float)  
 
  // from mathbast.i  
  Acts as expected : return long(x+0.5*((x>0)*2-1));