source: trunk/SRC/Documentation/idldoc_html_output/Matrix/cmset_op.html @ 163

Last change on this file since 163 was 163, checked in by navarro, 18 years ago

header improvements : type of parameters and keywords, default values, spell checking + idldoc assistant (IDL online_help)

File size: 22.7 KB
Line 
1
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5<!-- Generated by IDLdoc 2.0 -->
6
7<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
8  <head>
9    <title>cmset_op.pro (SAXO Documentation)</title>
10
11   
12    <style type="text/css" media="all">
13     
14/* CSS for all files which appear in the "main" viewing area: overview,
15   directory overviews, warnings, index, search, pro files, source
16   code, help, and etc files. */
17
18/* Link styles --------------------------------------------------------------- */
19
20a { text-decoration: none; }
21
22a:link, a:visited { 
23  color: #660000; 
24  border-bottom: 1px dotted #C0C0F0;   
25}
26
27a:hover, a:focus { 
28  color: #993333; 
29  background: #FFFFCC; 
30  border-bottom: 1px dotted #303099; 
31}
32
33
34/* Main styles --------------------------------------------------------------- */
35p.preformat {
36  font-family: Courier;
37}
38
39body {
40  margin: 0;
41  padding: 0;
42  font-size: 10pt;
43  font-family: Verdana, Helvetica, Arial, sans-serif;
44  background-color: #FFFFFF;
45}
46
47p {
48  margin-top: 0.5em;
49  margin-bottom: 0;
50}
51
52#container { margin: 1em; }
53
54code.section { white-space: pre; }
55
56pre.snippet {
57  margin-left: 5%;
58  background: #F0F0F0;
59  border: 1px dashed #999999;
60  width: 43em;
61  padding: 0.5em 0.5em 0.5em 0.5em;
62  white-space: pre;
63}
64
65/* Navbar styles ------------------------------------------------------------- */
66
67#navbar_title {
68  color: #000033;
69  background-color: #F0F0FF;
70  font-family: Arial, Helvetica, sans-serif;
71  padding: 20px 30px;
72  border-bottom: 1px solid #000033;
73}
74
75#navbar_title * {
76  margin: 0;
77  padding: 0;
78}
79
80#navbar_title h1 {
81  letter-spacing: 0.1em;
82  font-variant: small-caps;
83  font-size: 250%;
84  text-indent: -1em;
85  padding-left: 1em; 
86}
87
88#navbar_title h2 {
89  font-size: 110%;
90  font-weight: normal;
91  color: #333399;
92}
93
94#main_navbar table {
95  width: 100%;
96  border-bottom: 1px solid #666699;
97}
98
99#main_navbar td {
100  background: #CCCCFF;
101  font-size: 80%;
102  font-weight: bold;
103  font-family: Arial, Helvetica, sans-serif;
104  border-top: 3px solid #CCCCFF;
105  border-bottom: 3px solid #CCCCFF;
106  padding-left: 6px;
107  padding-right: 6px;
108  margin: 0;
109}
110
111#main_navbar td#selected {
112  background: #CCCCFF;
113  font-size: 80%;
114  font-weight: bold;
115  font-family: Arial, Helvetica, sans-serif;
116  border-top: 3px solid #333399;
117  border-bottom: 3px solid #CCCCFF;
118  padding-left: 6px;
119  padding-right: 6px;
120  margin: 0;
121}
122
123#main_navbar td#flexible {
124  width: 100%;
125  text-align: right;
126  padding-right: 1em;
127  background: #CCCCFF;
128  font-size: 70%;
129  font-weight: normal;
130  font-family: Arial, Helvetica, sans-serif;
131  text-transform: uppercase;
132  border-top: 3px solid #CCCCFF;
133  border-bottom: 3px solid #CCCCFF;
134}
135
136#main_navbar a:link, #main_navbar a:visited { color: #660000; border: 0; }
137
138#main_navbar a:hover, #main_navbar a:focus {
139  color: #FFFF66;
140  background: #CCCCFF;
141  border-bottom: 1px none #606099; 
142  border: 0;
143}
144
145#secondary_navbar {
146  font-size: 80%;
147  font-weight: normal;
148  font-family: Arial, Helvetica, sans-serif;
149  margin-top: 4px;
150  margin-left: 20px;
151  white-space: nowrap;
152}
153
154
155/* Tagline and footer styles ------------------------------------------------- */
156
157div#tagline {
158  margin-top: 6px;
159  border-top: 1px dotted lightsteelblue;
160  padding-top: 6px;
161  font-size: 66%;
162  font-style: italic;
163}
164
165div#footer {
166  margin-top: 6px;
167  border-top: 1px dotted lightsteelblue;
168  padding-top: 6px;
169  font-size: 66%;
170  font-style: italic;
171}
172
173/* Basic data presenation styles -------------------------------------------- */
174
175.index_letter { 
176  font-size: 300%;
177  font-weight: bold;
178  color: #000066; 
179  margin: 0.5em 0 0 -0.1em;
180}
181
182h1, h2, h3, h4 {
183  font-weight: normal;
184  color: #3333CC;
185}
186
187h1 {
188  padding-top: 0.75em;
189  font-size: 160%;
190}
191
192h2 {
193  padding-top: 1em;
194  font-size: 120%;
195  }
196
197h3 {
198  padding-top: 0.75em;
199  margin-bottom: 0.25em;
200  font-size: 100%;
201}
202
203h4 {
204  padding: 0;
205  margin: 0.5em 0 0 0;
206  font-size: 80%;
207}
208
209table.basic {
210  empty-cells: show;
211  margin: 1.5em 1em 0 1em;
212  border: 1px dotted #CFCFFF;
213  font-size: 80%;
214}
215
216table.basic th {
217  background-color: #F0F0FF;
218  font-weight: bold;
219  text-align: left;
220  padding: 4px 1em 4px 4px;
221  border-bottom: 1px dotted #666699;
222}
223
224table.basic td {
225  vertical-align: top;
226  padding: 4px 1em 4px 4px;
227}
228
229dd {
230  margin-bottom: 0.25em;
231  font-size: 80%;
232}
233
234
235/* Warnings styles ----------------------------------------------------------- */
236
237
238#todo dl, #bugs dl { 
239  margin: 0 0 0 1.5em;
240  font-size: 80%;
241}
242
243#todo dd, #bugs dd { 
244  margin-left: 3em; 
245  font-size: 100%;
246}
247
248#undoc table, #obsolete table, #statistics table {
249  width: 80%;
250  margin-left: 2em;
251}
252
253#undoc td, #obsolete td, #statistics td { 
254  padding: 0 0 0 0;
255  font-size: 80%;
256  white-space: nowrap;
257}
258
259#undoc td.docroutine, #obsolete td.obsroutine, #statistics td.statroutine { width: 50%; }
260
261#undoc td.docstat, #statistics td.stat { 
262  width: 50%;
263  text-align: right;
264}
265
266#undoc td.partialdoc, #statistics td.caution { color: #CC6600; }
267
268#undoc td.notdoc, #statistics td.warning { color: #993333; }
269
270/* File + routine styles ----------------------------------------------------- */
271
272h1.directory { 
273  padding: 1em 0 0 0;
274  margin: 0;
275  font-size: 66%;
276}
277
278h1.directory a { border-bottom: 0; }
279
280h2.pro_file { 
281  padding: 0;
282  margin: 0;
283  font-size: 140%;
284}
285
286div#file_attr {
287  padding: 0 1em 0 1em;
288  margin: 1em;
289  background: #F6F6F6;
290  border: 1px dotted #999999;
291}
292
293div#file_attr dt {
294  font-size: 80%;
295  font-weight: bold;
296}
297
298div#file_attr dd {
299  font-size: 80%;
300}
301
302div#class_diagram { 
303  padding: 1em 0 1em 0; 
304  white-space: pre;
305  font-family: 'Courier New';
306}
307
308table#sav_attr { 
309  font-size: 90%; 
310  margin: 1em; 
311  padding: 1em 1em 1em 1em;
312  background: #F6F6F6;
313  border: 1px dotted #999999;
314}
315
316table#sav_attr th { text-align: left; }
317
318table#sav_attr td { vertical-align: top; padding-right: 2em; }
319
320table#sav_attr td.value { width: 20em; padding-right: 0em; font-style: italic; }
321
322p.sav_warning { margin-left: 4em; font-family: 80%; }
323
324table.variables { 
325  font-family: 'Courier New', monospace; 
326  font-size: 80%; 
327  text-indent: -2em; 
328  padding-left: 2em; 
329}
330
331table.variables td.image { width: 64px; }
332
333div#file_comments { white-space: pre; 
334  margin: 2em;
335  font-size: 80%;
336}
337
338
339div.field_summary {
340  padding: 0 1em 0 1em;
341  margin: 1em;
342  background: #FFFFF0;
343  border: 1px dotted #C0C000;
344}
345
346div#routine_summary { 
347  padding: 0 1em 0 1em;
348  margin: 1em;
349  background: #F0F0FF;
350  border: 1px dotted #9999FF;
351}
352
353div.field_summary h2, div#routine_summary h2 { 
354  padding: 0.5em 0 0 0;
355  margin: 0;
356}
357
358div.field_summary table, div.field_summary p { 
359  margin: 1em 1em;
360}
361
362div.field_summary td.name { 
363  vertical-align: top;
364  padding-bottom: 0.25em;
365  color: #3333CC;
366}
367
368div.field_summary span.field_type { 
369  font-weight: normal;
370  font-size: 80%;
371  color: black;
372}
373
374div.field_summary td.comments { 
375  vertical-align: top;
376  padding-left: 2em;
377  font-size: 80%;
378}
379
380p.commaList { 
381  margin: 1em 1em 1em 1em;
382}
383
384span.warning { 
385  color: #CC6633;
386  font-weight: bold;
387  font-size: 66%;
388  text-transform: uppercase;
389}
390
391span.categories { 
392  color: #006633;
393  font-weight: bold;
394  font-size: 66%;
395  text-transform: uppercase;
396}
397
398span.undoc { 
399  color: #FF6633;
400  font-weight: bold;
401  font-size: 80%;
402  text-transform: uppercase;
403}
404
405span.attr { 
406  color: #006633;
407  font-weight: bold;
408  font-size: 80%;
409  text-transform: uppercase;
410}
411
412span.value { 
413  color: #006633;
414  font-weight: normal;
415  text-transform: none;
416}
417
418a.top { 
419  font-weight: bold;
420  font-size: 66%;
421  text-transform: uppercase;
422  float: right;
423}
424
425span.result { 
426  font-family: Verdana, Arial, Helvetica, sans-serif;
427  font-style: italic;
428  font-size: 80%;
429}
430
431div#routine_summary p, div.routine_details p.header { 
432  padding-top: 0.5em;
433  margin-left: 1.5em;
434  text-indent: -1.5em;
435  font-family: 'Courier New', monospace;
436}
437
438div.routine_details { 
439  padding: 0.5em 1em 0.5em 1em;
440  margin: 1em;
441  border: 1px dotted #CCCCCC;
442}
443
444div.routine_details h2 { 
445  padding-top: 0;
446  margin-top: 0;
447}
448
449div.routine_details div.value { 
450  margin: 0 1em 0 1em;
451  font-size: 80%;
452}
453
454div.routine_details div.comments { 
455  font-size: 80%;
456  margin: 0.75em 1em 1em 1em;
457}
458
459div.routine_details div.preformat { 
460  white-space: pre;
461}
462
463table.statistics { 
464  font-size: 80%;
465  margin-left: 1em;
466}
467
468table.statistics td { 
469  padding: 0 2em 0 0;
470}
471
472/* Overview styles ----------------------------------------------------------- */
473
474div.overview { 
475  width: 100%;
476  margin-top: 1em;
477  clear: both;
478}
479
480div.overview table {
481  empty-cells: show;
482  font-size: 90%;
483  margin: 1em 1em 1em 1em;
484  padding: 1em 0.5em 1em 0.5em;
485  background: #F6F6F6;
486  border: 1px dotted #999999;
487}
488
489div.overview td {
490  padding: 3px 1em 3px 1em;
491}
492
493div.overview td.dir {
494  width: 1%;
495  vertical-align: top;
496  text-align: right;
497  padding-right: 1em;
498}
499
500
501/* Navigation list styles for tree structures -------------------------------- */
502
503#tree {
504  text-align: left;
505  font-size: 90%;
506  margin: 0.75em 0 0.75em 0;
507  padding: 0;
508}
509
510#tree ul {
511  text-align: left;
512  margin: 0;
513  padding: 0;
514}
515
516#tree li {
517  margin: 0 0 0 15px;
518  padding: 0;
519  list-style-type: none;
520}
521
522#tree .symbols {
523  float: left;
524  width: 12px;
525  height: 1em;
526  padding-left: 4px;
527  background-position: 0 100%;
528  background-repeat: no-repeat;
529}
530
531/* Search styles ------------------------------------------------------------- */
532
533input.writein { 
534  padding-left: 0.5em;
535  border: 1px solid #CCCCCC;
536  font-family: 'Courier New';
537  background: #FFFFF3;
538}
539
540#search form { 
541  margin-left: 2em;
542}
543
544#search table { 
545  margin: 1em 1em 0 2em;
546  padding: 1em 2em 1em 2em;
547  background: #F6F6F6;
548  border: 1px dotted #999999;
549}
550
551#search tr { 
552  text-align: center;
553}
554
555#search td { 
556  font-size: 80%; 
557  text-align: left;
558}
559
560#search td * { 
561  vertical-align: middle;
562}
563
564#search p { 
565  font-size: 66%;
566  margin: 0 3em 2em 3em;
567}
568
569/* Help styles --------------------------------------------------------------- */
570
571div.toc { 
572  padding: 0 1em 0 1em;
573  margin: 1em;
574  background: #F0F0FF;
575  border: 1px dotted #9999FF; 
576  width: 19em;
577}
578
579div.right { 
580  float: right;
581  width: 22em;
582}
583
584ol.toc { 
585  list-style-type: upper-roman;
586}
587
588ol.toc ol { 
589  padding-left: 3em;
590  margin-left: 0;
591  list-style-type: lower-alpha;
592}
593
594dl.variables dt { font-size: 80%; }
595dl.variables dd { margin-bottom: 0.5em; }
596
597    </style>
598    <style type="text/css" media="print">
599      #navbar_title { 
600  background-color: #FFFFFF; 
601}
602
603#main_navbar td {
604  background: #FFFFFF;
605  border-top: 0.25em solid #FFFFFF;
606  border-bottom: 0.25em solid #FFFFFF;
607}
608
609#main_navbar td#selected {
610  background: #FFFFFF;
611  border-top: 0.25em solid #333399;
612  border-bottom: 0.25em solid #FFFFFF;
613}
614
615#main_navbar td#flexible {
616  background: #FFFFFF;
617  border-top: 0.25em solid #FFFFFF;
618  border-bottom: 0.25em solid #FFFFFF;
619}
620
621#secondary_navbar {
622  display: none;
623}
624
625    </style>
626   
627
628    <script type="text/javascript">
629      function setTitle() {
630        parent.document.title="cmset_op.pro (SAXO Documentation)";
631      }
632    </script>
633  </head>
634
635  <body onload="setTitle();">
636
637    <div id="navbar_title">
638  <h1>SAXO Documentation</h1>
639</div>
640
641
642<div id="main_navbar">
643
644  <table cellspacing="0">
645    <tr>
646     
647      <td><a href="./../overview.html?format=raw" title="Overview of library">Overview</a></td>
648     
649
650     
651      <td >Directory</td>
652     
653
654     
655      <td><a href="./../idldoc-categories.html?format=raw" title="Browse library by category">Categories</a></td>
656     
657
658     
659      <td><a href="./../idldoc-index.html?format=raw" title="Index of files, routines, and parameters">Index</a></td>
660     
661
662     
663      <td><a href="./../search-page.html?format=raw" title="Search library">Search</a></td>
664     
665
666      <td id="selected">File</td>
667
668     
669      <td >Source</td>
670     
671
672     
673      <td><a href="./../idldoc-help.html?format=raw" title="Help on IDLdoc">Help</a></td>
674     
675
676      <td >Etc</td>
677
678      <td id="flexible">Developer&nbsp;documentation</td>
679    </tr>
680  </table>
681
682</div>
683
684<div id="secondary_navbar">
685
686<a href="cmapply.html?format=raw">&lt;&lt;prev file</a> | <a href="different.html?format=raw">next file &gt;&gt;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="cmset_op.html?format=raw" target="_TOP">view single page</a> | <a href="./../index.html?format=raw" target="_TOP">view frames</a>&nbsp;&nbsp;&nbsp;&nbsp;summary: fields | routine&nbsp;&nbsp;&nbsp;&nbsp;details: <a href="#routine_details">routine</a>
687
688</div>
689
690
691    <div id="container">
692
693      <h1 class="directory"><a href="directory-overview.html?format=raw">Matrix/</a></h1>
694      <h2 class="pro_file">cmset_op.pro</h2>
695
696      <div id="file_attr">
697        <dl>
698        </dl>
699      </div>
700
701      <div id="file_comments">
702 Simplified version of CMSET_OP_UNIQ which sorts, and takes the
703 "first" value, whatever that may mean.
704
705
706 Performs an AND, OR, or XOR operation between two sets
707
708 Description: SET_OP performs three common operations between two sets. The
709 three supported functions of OP are:
710
711        OP          Meaning
712      'AND' - to find the intersection of A and B;
713      'OR'  - to find the union of A and B;
714      'XOR' - to find the those elements who are members of A or B
715              but not both;
716
717   Sets as defined here are one dimensional arrays composed of
718   numeric or string types. Comparisons of equality between elements
719   are done using the IDL EQ operator.
720
721   The complements of either set can be taken as well, by using the
722   NOT1 and NOT2 keywords. For example, it may be desirable to find
723   the elements in A but not B, or B but not A (they are different!).
724   The following IDL expressions achieve each of those effects:
725
726      SET = CMSET_OP(A, 'AND', /NOT2, B)   ; A but not B
727      SET = CMSET_OP(/NOT1, A, 'AND', B)   ; B but not A
728
729   Note the distinction between NOT1 and NOT2.  NOT1 refers to the
730   first set (A) and NOT2 refers to the second (B).  Their ordered
731   placement in the calling sequence is entirely optional, but the
732   above ordering makes the logical meaning explicit.
733
734   NOT1 and NOT2 can only be set for the 'AND' operator, and never
735   simultaneously. This is because the results of an operation with
736   'OR' or 'XOR' and any combination of NOTs -- or with 'AND' and
737   both NOTs -- formally cannot produce a defined result.
738
739   The implementation depends on the type of operands. For integer
740   types, a fast technique using HISTOGRAM is used. However, this
741   algorithm becomes inefficient when the dynamic range in the data
742   is large. For those cases, and for other data types, a technique
743   based on SORT() is used. Thus the compute time should scale
744   roughly as (A+B)*ALOG(A+B) or better, rather than (A*B) for the
745   brute force approach. For large arrays this is a significant
746   benefit.
747</div>
748
749     
750
751     
752
753     
754
755     
756
757      <div id="routine_details">
758       
759
760        <div class="routine_details" id="_cmset_op">
761
762          <h2><a class="top" href="#container">top</a>cmset_op <span class="categories"> 
763 Array
764</span></h2>
765       
766          <p class="header">
767            <span class="result">result = </span>cmset_op(<span class="result"><a href="#_cmset_op_param_a">a</a>, <a href="#_cmset_op_param_op0">op0</a>, <a href="#_cmset_op_param_b">b</a></span>, <a href="#_cmset_op_keyword_not1">not1</a>=<span class="result">not1</span>, <a href="#_cmset_op_keyword_not2">not2</a>=<span class="result">not2</span>, <a href="#_cmset_op_keyword_count">count</a>=<span class="result">count</span>, <a href="#_cmset_op_keyword_empty1">empty1</a>=<span class="result">empty1</span>, <a href="#_cmset_op_keyword_empty2">empty2</a>=<span class="result">empty2</span>, <a href="#_cmset_op_keyword_maxarray">maxarray</a>=<span class="result">maxarray</span>, <a href="#_cmset_op_keyword_index">index</a>=<span class="result">index</span>)</p>
768       
769          <div class="comments">
770</div>
771
772          <h3>Return value</h3><div class="preformat">
773 The resulting set as a one-dimensional array. The set may be
774 represented by either an array of data values (default), or an
775 array of indexes (if INDEX is set). Duplicate elements, if any,
776 are removed, and element order may not be preserved.
777
778 The empty set is represented as a return value of -1L, and COUNT
779 is set to zero. Note that the only way to recognize the empty set
780 is to examine COUNT.
781
782 SEE ALSO:
783
784  SET_UTILS.PRO by RSI
785</div>
786
787         
788            <h3>Parameters</h3>
789       
790           
791            <h4 id="_cmset_op_param_a">a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
792              <span class="attr">in</span>
793             
794             
795              <span class="attr">required</span>
796             
797             
798             
799             
800            </h4>
801       
802          <div class="comments">
803 The two sets to be operated on. A one dimensional array of
804 either numeric or string type. A and B must be of the same
805 type. Empty sets are permitted, and are either represented
806 as an undefined variable, or by setting EMPTY1 or EMPTY2.
807</div>
808           
809            <h4 id="_cmset_op_param_op0">op0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
810              <span class="attr">in</span>
811             
812             
813              <span class="attr">required</span>
814             
815              <span class="attr">type:</span> <span class="value">string</span>
816             
817             
818            </h4>
819       
820          <div class="comments">
821 a string, the operation to be performed. Must be one of
822 'AND', 'OR' or 'XOR' (lower or mixed case is permitted).
823 Other operations will cause an error message to be produced.
824</div>
825           
826            <h4 id="_cmset_op_param_b">b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
827              <span class="attr">in</span>
828             
829             
830              <span class="attr">required</span>
831             
832             
833             
834             
835            </h4>
836       
837          <div class="comments">
838 See A
839</div>
840           
841
842         
843
844         
845
846            <h3>Keywords</h3>
847           
848            <h4 id="_cmset_op_keyword_not1">not1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
849             
850             
851             
852             
853             
854             
855             
856             
857            </h4>
858       
859            <div class="comments">
860 If set and OP is 'AND', then the complement of A (for
861 NOT1) or B (for NOT2) will be used in the operation.
862 NOT1 and NOT2 cannot be set simultaneously.
863</div>
864           
865            <h4 id="_cmset_op_keyword_not2">not2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
866             
867             
868             
869             
870             
871             
872             
873             
874            </h4>
875       
876            <div class="comments">
877 See NOT1
878</div>
879           
880            <h4 id="_cmset_op_keyword_count">count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
881             
882             
883             
884             
885             
886             
887             
888             
889            </h4>
890       
891            <div class="comments">
892 upon return, the number of elements in the result set.
893 This is only important when the result set is the empty
894 set, in which case COUNT is set to zero.
895</div>
896           
897            <h4 id="_cmset_op_keyword_empty1">empty1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
898             
899             
900             
901             
902             
903             
904             
905             
906            </h4>
907       
908            <div class="comments">
909 If set, then A (for EMPTY1) or B (for EMPTY2) are
910 assumed to be the empty set. The actual values
911 passed as A or B are then ignored.
912</div>
913           
914            <h4 id="_cmset_op_keyword_empty2">empty2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
915             
916             
917             
918             
919             
920             
921             
922             
923            </h4>
924       
925            <div class="comments">
926 See EMPTY1
927</div>
928           
929            <h4 id="_cmset_op_keyword_maxarray">maxarray&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
930             
931             
932             
933             
934             
935             
936             
937             
938            </h4>
939       
940            <div class="comments"></div>
941           
942            <h4 id="_cmset_op_keyword_index">index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
943             
944             
945             
946             
947             
948             
949             
950             
951            </h4>
952       
953            <div class="comments">
954 if set, then return a list of indexes instead of the array
955 values themselves. The "slower" set operations are always
956 performed in this case.
957
958 The indexes refer to the *combined* array [A,B]. To
959 clarify, in the following call: I = CMSET_OP(..., /INDEX);
960 returned values from 0 to NA-1 refer to A[I], and values
961 from NA to NA+NB-1 refer to B[I-NA].
962</div>
963           
964         
965
966          <h3>Examples</h3><div class="preformat">
967 Utility function, similar to UNIQ, but allowing choice of taking
968 first or last unique element, or non-unique elements.
969 Unfortunately this doesn't work because of implementation dependent
970 versions of the SORT() function.
971
972 function cmset_op_uniq, a, first=first, non=non, count=ct, sort=sortit
973   if n_elements(a) LE 1 then return, 0L
974   sh = (2L*keyword_set(first)-1L)*(-2L*keyword_set(non)+1)
975
976   if keyword_set(sortit) then begin
977       ;; Sort it manually
978       ii = sort(a) & b = a[ii]
979       if keyword_set(non) then wh = where(b EQ shift(b, sh), ct) $
980       else                     wh = where(b NE shift(b, sh), ct)
981       if ct GT 0 then return, ii[wh]
982   endif else begin
983       ;; Use the user's values directly
984       if keyword_set(non) then wh = where(a EQ shift(a, sh), ct) $
985       else                     wh = where(a NE shift(a, sh), ct)
986       if ct GT 0 then return, wh
987   endelse
988
989   if keyword_set(first) then return, 0L else return, n_elements(a)-1
990 end
991
992 Simplified version of CMSET_OP_UNIQ which sorts, and takes the
993 "first" value, whatever that may mean.
994</div>
995          <h3>Version history</h3>
996         
997          <h4>Version</h4><div class="preformat"> $Id: cmset_op.pro 157 2006-08-21 09:01:50Z navarro $
998</div>
999          <h4>History</h4><div class="preformat"> Written, CM, 23 Feb 2000
1000   Added empty set capability, CM, 25 Feb 2000
1001   Documentation clarification, CM 02 Mar 2000
1002   Incompatible but more consistent reworking of EMPTY keywords, CM,
1003     04 Mar 2000
1004   Minor documentation clarifications, CM, 26 Mar 2000
1005   Corrected bug in empty_arg special case, CM 06 Apr 2000
1006   Add INDEX keyword, CM 31 Jul 2000
1007   Clarify INDEX keyword documentation, CM 06 Sep 2000
1008   Made INDEX keyword always force SLOW_SET_OP, CM 06 Sep 2000
1009   Added CMSET_OP_UNIQ, and ability to select FIRST_UNIQUE or
1010     LAST_UNIQUE values, CM, 18 Sep 2000
1011   Removed FIRST_UNIQUE and LAST_UNIQUE, and streamlined
1012     CMSET_OP_UNIQ until problems with SORT can be understood, CM, 20
1013     Sep 2000 (thanks to Ben Tupper)
1014   Still trying to get documentation of INDEX and NOT right, CM, 28
1015     Sep 2000 (no code changes)
1016   Correct bug for AND case, when input sets A and B each only have
1017     one unique value, and the values are equal.  CM, 04 Mar 2004
1018     (thanks to James B. jbattat at cfa dot harvard dot edu)
1019   Add support for the cases where the input data types are mixed,
1020      but still compatible; also, attempt to return the same data
1021      type that was passed in; CM, 05 Feb 2005
1022   Fix bug in type checking (thanks to "marit"), CM, 10 Dec 2005
1023   Work around a stupidity in the built-in IDL HISTOGRAM routine,
1024      which tries to "help" you by restricting the MIN/MAX to the
1025      range of the input variable (thanks to Will Maddox), CM, 16 Jan 2006
1026
1027   Author: Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770
1028   craigm@lheamail.gsfc.nasa.gov
1029</div>
1030         
1031         
1032         
1033         
1034         
1035         
1036         
1037       
1038         
1039         
1040         
1041         
1042         
1043         
1044         
1045       
1046          <h3>Statistics</h3>
1047          <table class="statistics">
1048            <tr><td>McCabe cyclic</td><td>          62</td></tr>
1049            <tr><td>McCabe essential</td><td>          12</td></tr>
1050            <tr><td>McCabe modular design</td><td>           1</td></tr>
1051          </table>
1052         
1053       
1054        </div>
1055       
1056      </div>
1057
1058     
1059
1060      <div id="tagline">Produced by IDLdoc 2.0.</div>
1061
1062    </div>
1063
1064  </body>
1065</html>
Note: See TracBrowser for help on using the repository browser.