[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: indexing over structure tags

Randall Skelton wrote:
> Thanks Tom... I did think of that.  However, in this particular case there
> is some merit in having the name of the structure be a useful and human
> readable tag.  Nobody would be happy trying to remember yet another
> arbitrary numbering scheme for molecules when they'd rather just type the
> name ;)  My suspicion is that there isn't an easy way to do what I want...

Maybe more context is needed to solve your problem .... the user of the code *shouldn't*
have to remember the (not so) arbitrary numbering scheme - the user would type in a
molecule name (or names). How your code deals with searching the human readable tagnames
is a different matter, no?


  ; define the basic structure for each 
  sm_struc = {basic_struct, comment: ' ', values: fltarr(nlev)}
  ; define the large structure
  data = {big_struct, so4: sm_struc, co2: sm_struc, hcl: sm_struc}

  ; get the names of the tags
  names = tag_names(data)

so that names = [so4, co2, hcl].

Say the user requests data for 'so4' and 'hcl' so how about

  user_request = ['so4', 'hcl']
  n_requests = N_ELEMENTS( user_request )

  FOR i = 0, n_requests - 1 DO BEGIN
    tag_number = (WHERE( user_request[i] EQ names ))[0]  ; <-- assume this always succeeds
    data_to_get = data.(tag_number).values
    IF ( i EQ 0 ) THEN $
      data_to_return = data_to_get $
    ELSE $
      data_to_return = [ [ data_to_return ], [ data_to_get ] ]

  RETURN, data_to_return

or something like that? As it is above might not work for plucking out structures, but
that's a detail. So is the concatenation build of the data_to_return. Should be o.k. for
small arrays tho'.


Paul van Delst           A little learning is a dangerous thing;
CIMSS @ NOAA/NCEP        Drink deep, or taste not the Pierian spring;
Ph: (301)763-8000 x7274  There shallow draughts intoxicate the brain,
Fax:(301)763-8545        And drinking largely sobers us again.
paul.vandelst@noaa.gov                   Alexander Pope.