Foreword |
|
v | |
|
|
|
|
Acknowledgments |
|
ix | |
|
|
1 | (14) |
|
|
2 | (3) |
|
Who Should Read This Book? |
|
|
2 | (1) |
|
|
3 | (1) |
|
|
3 | (1) |
|
|
4 | (1) |
|
|
4 | (1) |
|
|
5 | (1) |
|
|
5 | (2) |
|
|
6 | (1) |
|
|
7 | (1) |
|
|
7 | (1) |
|
|
7 | (2) |
|
|
9 | (2) |
|
|
11 | (4) |
|
Fundamentals of IDL Syntax |
|
|
15 | (74) |
|
Interactive and Compiled Modes |
|
|
15 | (2) |
|
|
16 | (1) |
|
|
16 | (1) |
|
|
17 | (7) |
|
|
18 | (1) |
|
Keeping Track of Variable Types |
|
|
19 | (1) |
|
|
19 | (2) |
|
Converting Floats to Integers |
|
|
21 | (1) |
|
Converting Between String and Numeric Types |
|
|
22 | (1) |
|
|
22 | (2) |
|
|
24 | (5) |
|
|
25 | (1) |
|
|
26 | (1) |
|
Functions for Creating Arrays |
|
|
26 | (2) |
|
Floating-Point Grid Arrays |
|
|
28 | (1) |
|
|
29 | (5) |
|
|
30 | (1) |
|
Multidimensional Array Indexing Examples |
|
|
31 | (1) |
|
|
32 | (1) |
|
|
32 | (1) |
|
Multidimensional Index Sampling |
|
|
33 | (1) |
|
Expressions and Arithmetic Operators |
|
|
34 | (10) |
|
Type Conversion in Expressions |
|
|
35 | (1) |
|
Guarding against Division by an Integer |
|
|
36 | (1) |
|
|
36 | (1) |
|
|
37 | (1) |
|
Arithmetic Operations on Arrays |
|
|
38 | (2) |
|
Operator Precedence and Efficiency of Array Operations |
|
|
40 | (1) |
|
Minimum, Maximum, and Modulo Operators |
|
|
41 | (1) |
|
Array and Matrix Multiplication Operators |
|
|
42 | (2) |
|
Relational and Boolean Operators |
|
|
44 | (8) |
|
|
44 | (2) |
|
|
46 | (1) |
|
|
47 | (1) |
|
|
48 | (1) |
|
|
48 | (1) |
|
|
49 | (1) |
|
Combining Relational and Boolean Operators |
|
|
49 | (1) |
|
|
50 | (1) |
|
|
51 | (1) |
|
|
52 | (6) |
|
|
53 | (2) |
|
|
55 | (1) |
|
|
56 | (1) |
|
|
57 | (1) |
|
|
58 | (9) |
|
|
59 | (1) |
|
|
60 | (2) |
|
|
62 | (1) |
|
Checking Pointer Validity |
|
|
62 | (1) |
|
|
63 | (2) |
|
Avoiding Pointer Problems |
|
|
65 | (2) |
|
|
67 | (5) |
|
|
68 | (1) |
|
|
68 | (2) |
|
Minimum and Maximum Values |
|
|
70 | (1) |
|
Mean, Variance, and Standard Deviation |
|
|
71 | (1) |
|
|
71 | (1) |
|
Locating Values within an Array |
|
|
72 | (3) |
|
Finding Values That Meet Selection Criteria |
|
|
72 | (2) |
|
Working with One-Dimensional Indices from where |
|
|
74 | (1) |
|
Finding Values That Don't Meet Selection Criteria |
|
|
74 | (1) |
|
|
75 | (6) |
|
Changing Array Dimensions |
|
|
75 | (2) |
|
|
77 | (1) |
|
|
77 | (1) |
|
|
78 | (1) |
|
|
79 | (1) |
|
|
80 | (1) |
|
Finding Unique Array Values |
|
|
80 | (1) |
|
|
81 | (8) |
|
Resizing by an Integer Factor |
|
|
81 | (3) |
|
Resizing to Arbitrary Size |
|
|
84 | (2) |
|
Resizing to Arbitrary Size with Customized Interpolation |
|
|
86 | (1) |
|
|
87 | (2) |
|
|
89 | (50) |
|
Defining and Compiling Programs |
|
|
89 | (8) |
|
|
90 | (1) |
|
|
91 | (1) |
|
Naming and Editing Source Files |
|
|
91 | (1) |
|
|
92 | (1) |
|
|
93 | (2) |
|
Returning to the Main Level after an Error |
|
|
95 | (2) |
|
|
97 | (13) |
|
|
97 | (2) |
|
|
99 | (2) |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
103 | (1) |
|
|
104 | (2) |
|
|
106 | (1) |
|
|
106 | (2) |
|
|
108 | (1) |
|
|
109 | (1) |
|
|
110 | (8) |
|
|
110 | (1) |
|
|
111 | (1) |
|
Using Parameters and Keywords |
|
|
111 | (2) |
|
Argument-Passing Mechanism |
|
|
113 | (2) |
|
|
115 | (1) |
|
|
116 | (1) |
|
Extra Keyword Passing Mechanism |
|
|
117 | (1) |
|
Checking Parameters and Keywords |
|
|
118 | (4) |
|
Checking Input Parameters and Keywords |
|
|
118 | (2) |
|
Don't Modify Input Parameters |
|
|
120 | (1) |
|
Checking Boolean Keywords |
|
|
121 | (1) |
|
Checking Output Parameters and Keywords |
|
|
122 | (1) |
|
Scripts, Include Files, and Journaling |
|
|
122 | (3) |
|
|
122 | (1) |
|
|
123 | (1) |
|
|
124 | (1) |
|
|
125 | (5) |
|
Read-Only System Variables |
|
|
125 | (1) |
|
Writable System Variables |
|
|
125 | (2) |
|
User-Defined System Variables |
|
|
127 | (2) |
|
|
129 | (1) |
|
|
130 | (5) |
|
|
131 | (2) |
|
|
133 | (1) |
|
|
134 | (1) |
|
|
135 | (4) |
|
|
135 | (2) |
|
|
137 | (2) |
|
|
139 | (54) |
|
Standard Input and Output |
|
|
140 | (7) |
|
Writing to Standard Output |
|
|
140 | (3) |
|
Reading from Standard Input |
|
|
143 | (1) |
|
|
144 | (1) |
|
|
145 | (1) |
|
|
145 | (1) |
|
Legal and Illegal read Arguments |
|
|
146 | (1) |
|
|
147 | (4) |
|
|
148 | (1) |
|
|
149 | (1) |
|
Obtaining Information about Files |
|
|
150 | (1) |
|
|
151 | (1) |
|
Reading and Writing Formatted (ASCII) Files |
|
|
151 | (6) |
|
|
152 | (3) |
|
|
155 | (2) |
|
Reading and Writing Unformatted (Binary) Files |
|
|
157 | (14) |
|
Reading an Unformatted File (Single Data Type) |
|
|
157 | (2) |
|
Reading an Unformatted File (Mixed Data Types) |
|
|
159 | (1) |
|
Reading a Fortran-77 Unformatted File |
|
|
160 | (1) |
|
Repositioning the File Pointer |
|
|
161 | (1) |
|
Byte Swapping (or Big-Endian versus Little-Endian) |
|
|
162 | (3) |
|
Writing Binary Data to an Unformatted File |
|
|
165 | (1) |
|
Programs to Write and Read Portable Binary Data |
|
|
166 | (3) |
|
Reading Binary Data via an Associated Variable |
|
|
169 | (1) |
|
Saving and Restoring IDL Variables |
|
|
170 | (1) |
|
Scientific and Specialized Data Formats |
|
|
171 | (1) |
|
Reading and Writing netCDF Files |
|
|
172 | (10) |
|
Reading a Variable from a netCDF file |
|
|
174 | (2) |
|
Reading an Attribute from a netCDF file |
|
|
176 | (1) |
|
Discovering the Contents of a netCDF file |
|
|
177 | (3) |
|
|
180 | (1) |
|
|
181 | (1) |
|
|
182 | (1) |
|
Reading and Writing HDF Files |
|
|
182 | (11) |
|
Reading a Variable from a HDF file |
|
|
183 | (2) |
|
Using a Wrapper Procedure to Read a Variable |
|
|
185 | (1) |
|
Reading an Attribute from a HDF file |
|
|
186 | (1) |
|
Discovering the Contents of a HDF file |
|
|
187 | (3) |
|
|
190 | (2) |
|
|
192 | (1) |
|
|
193 | (32) |
|
|
193 | (4) |
|
Selecting a Graphics Device |
|
|
195 | (1) |
|
Configuring the Graphics Device |
|
|
195 | (2) |
|
|
197 | (8) |
|
|
197 | (1) |
|
|
197 | (1) |
|
|
198 | (1) |
|
Obtaining Display Mode Information |
|
|
199 | (1) |
|
Selecting a Display Mode: Windows and MasOS Platforms |
|
|
200 | (1) |
|
Selecting a Display Mode: UNIX Platforms |
|
|
201 | (3) |
|
Selecting a Display Mode via a Startup File |
|
|
204 | (1) |
|
|
205 | (5) |
|
|
205 | (1) |
|
Working with Existing Windows |
|
|
206 | (1) |
|
Invisible Graphics Windows (Pixmaps) and Animation |
|
|
207 | (3) |
|
Scrolling Graphics Windows |
|
|
210 | (1) |
|
|
210 | (8) |
|
|
211 | (1) |
|
|
211 | (2) |
|
Working with the Color Table |
|
|
213 | (2) |
|
Color Table Updates in 24-Bit mode |
|
|
215 | (1) |
|
|
216 | (2) |
|
Display Mode Troubleshooting |
|
|
218 | (7) |
|
|
225 | (76) |
|
|
226 | (9) |
|
|
226 | (2) |
|
|
228 | (1) |
|
|
228 | (2) |
|
|
230 | (1) |
|
|
231 | (1) |
|
|
232 | (1) |
|
Plotting in Normal and Device Coordinates |
|
|
233 | (1) |
|
|
234 | (1) |
|
|
235 | (6) |
|
Specifying a Plot Position |
|
|
235 | (2) |
|
Computing a Plot Position |
|
|
237 | (2) |
|
Positioning Multiple Plots |
|
|
239 | (2) |
|
|
241 | (7) |
|
|
241 | (1) |
|
|
242 | (1) |
|
Configuring Axis Range and Style |
|
|
243 | (1) |
|
|
244 | (2) |
|
|
246 | (1) |
|
|
247 | (1) |
|
|
248 | (4) |
|
|
249 | (1) |
|
|
250 | (2) |
|
Titles, Labels, and Symbols |
|
|
252 | (5) |
|
|
252 | (2) |
|
|
254 | (1) |
|
|
255 | (2) |
|
Error Bar, Histogram, and Bar Plots |
|
|
257 | (6) |
|
|
257 | (3) |
|
|
260 | (12) |
|
|
272 | |
|
|
263 | (7) |
|
Contour Plotting Overview |
|
|
264 | (3) |
|
Contouring Irregularly Spaced Data |
|
|
267 | (2) |
|
|
269 | (1) |
|
Mesh and Shaded Surface Plots |
|
|
270 | (11) |
|
|
271 | (3) |
|
|
274 | (2) |
|
|
276 | (4) |
|
Combined Mesh and Shaded Surface Plots |
|
|
280 | (1) |
|
|
281 | (20) |
|
Creating a Map Projection |
|
|
281 | (3) |
|
Configuring a Map Projection |
|
|
284 | (4) |
|
|
288 | (2) |
|
|
290 | (2) |
|
|
292 | (2) |
|
Contour Plots on Map Projections |
|
|
294 | (3) |
|
Displaying Regularly Gridded Images on Map Projections |
|
|
297 | (4) |
|
|
301 | (40) |
|
|
302 | (2) |
|
|
302 | (1) |
|
|
303 | (1) |
|
|
304 | (4) |
|
Displaying Unscaled Images: tv |
|
|
304 | (1) |
|
Displaying Scaled Images: tvscl |
|
|
305 | (2) |
|
Bottom-up versus Top-down display |
|
|
307 | (1) |
|
Keywords for tv and tvscl |
|
|
307 | (1) |
|
Customizing Image Scaling |
|
|
308 | (10) |
|
|
308 | (3) |
|
|
311 | (1) |
|
Displaying Multiple Images with Separate Color Tables |
|
|
312 | (2) |
|
|
314 | (3) |
|
|
317 | (1) |
|
Sizing the Image to Fit the Display |
|
|
318 | (5) |
|
Computing Image Size and Offset Automatically |
|
|
320 | (3) |
|
Displaying TrueColor Images |
|
|
323 | (3) |
|
Displaying TrueColor Images in 24-Bit Display Mode |
|
|
323 | (1) |
|
Displaying TrueColor Images in 8-Bit Display Mode |
|
|
323 | (3) |
|
Displaying Images on the PostScript and Printer Devices |
|
|
326 | (6) |
|
Displaying PseudoColor Images on the PostScript Device |
|
|
326 | (3) |
|
Displaying PseudoColor Images on the Printer Device |
|
|
329 | (1) |
|
Displaying TrueColor Images on the PostScript Device |
|
|
330 | (1) |
|
Displaying TrueColor Images on the Printer Device |
|
|
331 | (1) |
|
An Image Display Procedure |
|
|
332 | (9) |
|
Creating Graphical Output |
|
|
341 | (50) |
|
Bitmap and Vector Output Files |
|
|
341 | (2) |
|
Creating Bitmap Output Files |
|
|
343 | (12) |
|
Reading from the Display: tvrd |
|
|
343 | (1) |
|
Reading from an 8-Bit Display |
|
|
344 | (2) |
|
Reading from a 24-Bit Display |
|
|
346 | (1) |
|
A Wrapper Function for tvrd |
|
|
347 | (2) |
|
Selecting a Bitmap Output Format |
|
|
349 | (1) |
|
Saving an 8-Bit Image to a Bitmap Output File |
|
|
350 | (1) |
|
Saving a 24-Bit Image to a Bitmap Output File |
|
|
351 | (1) |
|
A Program for Saving the Screen to a Bitmap Output File |
|
|
352 | (3) |
|
Creating PostScript Output |
|
|
355 | (23) |
|
Introduction to the PostScript Device |
|
|
356 | (1) |
|
Configuring the PostScript Device |
|
|
357 | (3) |
|
Setting Size and Offset Manually |
|
|
360 | (2) |
|
Setting Size and Offset Automatically |
|
|
362 | (6) |
|
|
368 | (1) |
|
Using the Color Table in PostScript Mode |
|
|
369 | (1) |
|
Reversed Background and Drawing Colors |
|
|
370 | (1) |
|
|
371 | (1) |
|
|
372 | (1) |
|
|
373 | (1) |
|
Positioning Graphics in the Drawable Area |
|
|
374 | (1) |
|
|
375 | (3) |
|
|
378 | (13) |
|
|
379 | (1) |
|
Configuring the Printer Device |
|
|
380 | (1) |
|
Setting Size and Offset Manually |
|
|
381 | (3) |
|
Setting Size and Offset Automatically |
|
|
384 | (5) |
|
|
389 | (1) |
|
|
390 | (1) |
|
Graphical User Interfaces |
|
|
391 | (70) |
|
Introduction to GUI Programming |
|
|
391 | (7) |
|
|
393 | (1) |
|
GUI Programming versus Procedural Programming |
|
|
394 | (1) |
|
|
395 | (3) |
|
|
398 | (27) |
|
|
401 | (1) |
|
|
402 | (1) |
|
|
402 | (4) |
|
|
406 | (2) |
|
|
408 | (1) |
|
|
409 | (2) |
|
|
411 | (1) |
|
|
412 | (2) |
|
|
414 | (2) |
|
|
416 | (1) |
|
|
417 | (5) |
|
|
422 | (2) |
|
|
424 | (1) |
|
Working with Existing Widgets |
|
|
425 | (1) |
|
Setting Widget Properties: widget_control |
|
|
425 | (1) |
|
Getting Widget Information: widget_info |
|
|
426 | (1) |
|
Events and Event Handling |
|
|
426 | (14) |
|
|
427 | (3) |
|
|
430 | (1) |
|
Event Handlers and Application State Information |
|
|
431 | (4) |
|
Multiple Instances of an Application |
|
|
435 | (5) |
|
|
440 | (21) |
|
|
441 | (1) |
|
|
442 | (5) |
|
|
447 | (8) |
|
|
455 | (3) |
|
Compiling and Running imgui |
|
|
458 | (3) |
Appendix A IDL on the Internet |
|
461 | (4) |
|
A.1 Resources by the Author |
|
|
461 | (1) |
|
|
461 | (1) |
|
|
462 | (1) |
|
|
462 | (1) |
|
A.5 Searchable Library Database |
|
|
462 | (1) |
|
|
463 | (1) |
|
|
463 | (1) |
|
|
463 | (2) |
Appendix B Mathematical Routines |
|
465 | (10) |
Appendix C Widget Event Structures |
|
475 | (8) |
Appendix D Widget Properties |
|
483 | (4) |
Appendix E Graphics Device Properties |
|
487 | (2) |
Index |
|
489 | |