source: trunk/SRC/Matrix/make_selection.pro @ 231

Last change on this file since 231 was 231, checked in by pinsard, 17 years ago

improvements/corrections of some *.pro headers

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.8 KB
Line 
1;+
2;
3; @file_comments
4; Convert an array of selected values to an index
5; array that identifies the selected values in a list or data array.
6;
7; @categories
8; tools
9;
10; @param NAMES {in}{required}
11; A list or array of values to choose from
12;
13; @param SELNAMES {in}{required}
14; A list of selected values
15;
16; @keyword ONLY_VALID
17; Return only indexes of found values. Values not
18; found are skipped. Default is to return 1 index value for
19; each SELNAME, which is -1 if SELNAME is not contained in
20; NAMES. If ONLY_VALID is set, the -1 values will be deleted,
21; and a value of -1 indicates that no SELNAME has been found
22; at all.
23;
24; @keyword REQUIRED
25; Normally, MAKE_SELECTION will return indexes for
26; all values that are found, simply ignoring the selected
27; values that are not in the NAMES array (although an error
28; message is displayed). Set this keyword to return with
29; -1 as soon as a selected value is not found.
30;
31; @keyword QUIET
32; Suppress printing of the error message if a
33; selected value is not found (the error condition will
34; still be set).
35;
36; @returns
37; A (long) array with indexes to reference the selected values
38; in the NAMES array.
39;
40; @restrictions
41; If the NAMES array contains multiple entries of the same value,
42; only the index to the first entry will be returned.
43;
44; A selection can contain multiple instances of the same value.
45; The index array will contain one entry per selected item
46; (See example below)
47;
48; @examples
49;           names = [ 'Alfred','Anton','Peter','John','Mary']
50;           index = MAKE_SELECTION(names,['Peter','Mary'])
51;           print,index
52;           ; prints  2  4
53;
54;           vals = indgen(20)
55;           index = MAKE_SELECTION(vals,[9,-5,8,7,7,8,9])
56;           print,index
57;           ; prints  9  -1  8  7  7  8  9
58;
59;           index = MAKE_SELECTION(vals,[9,-5,8,7,7,8,9],/ONLY_VALID)
60;           print,index
61;           ; prints  9  8  7  7  8  9
62;
63;           index = MAKE_SELECTION(vals,[9,-5,8,7,7,8,9],/REQUIRED)
64;           print,index
65;           ; prints  -1
66;
67; @history
68; mgs, 28 Aug 1998: VERSION 1.00
69; mgs, 29 Aug 1998: - changed behavior and added ONLY_VALID keyword
70; Copyright (C) 1998, Martin Schultz, Harvard University
71; This software is provided as is without any warranty
72; whatsoever. It may be freely used, copied or distributed
73; for non-commercial purposes. This copyright notice must be
74; kept with any copy of this software. If this software shall
75; be used commercially or sold as part of a larger package,
76; please contact the author to arrange payment.
77; Bugs and comments should be directed to mgs@io.harvard.edu
78; with subject "IDL routine make_selection"
79;
80; @version
81; $Id$
82;
83;-
84;
85function make_selection,names,selnames,  $
86            only_valid=only_valid,required=required,  $
87            quiet=quiet
88;
89  compile_opt idl2, strictarrsubs
90;
91    ; return an index array with a number for each element in
92    ; selnames that is found in names.
93    ; Set the REQUIRED keyword to return -1 if one element is
94    ; not found, otherwise -1 will only be returned, if no
95    ; element is found.
96
97    ; reset error state to 0
98    message,/reset
99
100    quiet = keyword_set(quiet)
101    result = -1L
102
103    for i=0,n_elements(selnames)-1 do begin
104       test = where(names eq selnames[i])
105       result = [ result, test[0] ]
106       if (test[0] lt 0) then begin
107           if (keyword_set(ONLY_VALID) OR keyword_set(REQUIRED)) then $
108              message,'Selected name not found in names array ('+ $
109                      strtrim(selnames[i],2)+')!',/CONT,NOPRINT=quiet
110           if (keyword_set(required)) then return,-1L
111       endif
112    endfor
113
114    if (n_elements(result) gt 1) then result = result[1:*]
115
116    if (keyword_set(only_valid)) then begin
117        ind = where(result ge 0)
118        if (ind[0] ge 0) then result = result[ind] $
119        else result = -1L
120    endif
121
122    return,result
123
124end
Note: See TracBrowser for help on using the repository browser.