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

Last change on this file since 153 was 153, checked in by smasson, 18 years ago

doc update

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