Download - IDL Programming (Book)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 1/238
Forschungszentrum Jülich GmbHInstitut für Chemie und Dynamik der Geosphäre (ICG-I)Zentralinstitut für Angewandte Mathematik (ZAM)Zentrallabor für Elektronik (ZEL)
Prax i sbezogene I DL Prog r am m ierun g
Marlene Busch, Reimar Bauer, Heinz Heer, Michael Wagener
Schriften des Forschungszentrums JülichReihe Informationstechnik / Information Technology Band 2
ISSN 1433-5514 ISBN 3-89336-308-4
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 2/238
Herausgeber und Forschungszentrum Jülich GmbHVertrieb: Zentralbibliothek, Verlag
D-52425 Jülich
Telefon (02461) 615368 - Telefax (02461) 61-6103e-mail: [email protected]: http://www.fz-juelich.de/zb/verlag/
Copyright: Forschungszentrum Jülich 2008
Schriften des Forschungszentrums JülichReihe Informationstechnik / Information Technology, Band / Volume 2
ISSN 1433-5514ISBN 3-89336-308-4
Vollständig veröffentlicht im InternetPersistent Identifier: urn:nbn:de:0001-00430Resolving URL: http://nbn-resolving.de/urn/resolver.pl?urn=urn:nbn:de:0001-00430
Alle Rechte vorbehalten. Kein Teil des Werks darf in irgendeiner Form ohne schriftlicheGenehmigung des Verlags reproduziert oder unter Verwendung elektronischer Systemeverarbeitet, vervielfältigt oder verbreitet werden.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 3/238
Abstract
This book contains an introduction to the programming language IDL, version 5.5. The IDL
scripting language itself, working within the IDL development environment, and important
visualisation routines are introduced. The book addresses novices to programming as wellas experienced IDL programmers.
The focus of this book is on nuts and bolts problems arising in the natural sciences, and
their solutions. The special characteristics and possibilities of array-oriented programming
are pointed out. Important language elements and hints are highlighted.
More than a hundred complete programming examples, of which several are described in
the book, are accessible at the URL
http://www.fz-juelich.de/vislab/idl-beispiele .
These examples encourage use as a playground for autodidactical IDL studies.
A clear organisation and the use of up-to-date, structured language elements render this
book suitable as a course companion as well as a reference in everyday work with IDL.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 4/238
2
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 5/238
i
Vorwort
Im Jahre 1994 wurde seitens einiger Institute des Forschungszentrums Julich, darunter
ZEL, IME, ICG, IPP, der Wunsch geaußert, die Software IDL zentral bereitzustellen.
Das ZAM (Zentralinstitut fur Angewandte Mathematik) fuhrte dann die Verhandlungen
mit der Firma CREASO, dem Verteiber der Software in Deutschland. Ende 1994 konn-
ten dann einige Floating-Lizenzen installiert werden. Die Software-Pflege wurde uber
einen Wartungsvertrag mit der Firma CREASO gesichert. Die Betreuung der Software
einschließlich Installation wurde von Frau Busch im ZAM ubernommen.
Auf Initiative von Heinz Heer und Michael Wagener aus dem ZEL wurde der erste IDL
Kurs geplant. Frau Busch verfaßte ein Kurs-Script. Im Mai 1995 wurde der erste 3-tagige
IDL Kurs von Frau Marlene Busch, Herrn Heinz Heer und Herrn Michael Wagenergehalten. Die Herren Heer und Wagener aus dem ZEL waren bei uns die Pioniere der
IDL Programmierung und konnten ihre praktische Erfahrung in der Programmierung mit
IDL nutzen, um diese als Referenten an interessierte Mitarbeiter des Forschungszentrums
weiterzugeben. Wegen der starken Nachfrage fanden 1995 zwei IDL Kurse statt. Ab 1996
wurde dieser Kurs jahrlich gehalten. Das Kurs-Script wurde von Frau Busch gepflegt
und im Laufe der Jahre der sich entwickelnden IDL-Sprache angepaßt. Die vorliegende
Dokumentation basiert auf IDL 5.5. In der Dokumentation werden IDL spezifische
Befehle und Keywords in Großbuchstaben geschrieben, um diese hervorzuheben.
Herr Bauer aus dem ICG I ist seit dem Jahr 2000 an der Weiterentwicklung des Kurs-
Scripts beteiligt und seit 2001 als Referent beim IDL Kurs des Forschungszentrums tatig.Durch die bisher abgehaltenen Kurse haben etwa 120 Mitarbeiter diese plattformun-
abhangige interaktive Programmiersprache kennen und schatzen gelernt.
Ein Dank von uns gebuhrt der Firma CREASO, die uns Testlizenzen fur den Kurs
bereitstellen. Damit ist gewahrleistet, das wahrend der Kurszeit keine IDL-Lizenzen fur
den laufenden Betrieb verloren gehen.
Das Kursmaterial hat nun einen Umfang erreicht, den wir in dieser Form einem großeren
Kreis als Nachschlagewerk zur Verfugung stellen wollen. Daher wurde es von Frau
Marlene Busch und Herrn Reimar Bauer uberarbeitet, damit es als Buch erscheinen
konnte.
Die erarbeiteten Beispiele, die Sie unter der URL
http://www.fz-juelich.de/vislab/idl-beispiele
finden, stammen aus verschiedenen Kursen des Forschungszentrums (ICG, ZAM, ZEL)
und der Firma CREASO.
Marlene Busch (ZAM)
Reimar Bauer (ICG I)
Heinz Heer, Michael Wagener (ZEL)
Juni 2002
Version 1
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 6/238
ii
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 7/238
Inhaltsverzeichnis
1 Einleitung 1
2 Konfiguration 3
2.1 Start-Up Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Beispiel: Start-Up Datei . . . . . . . . . . . . . . . . . . . . . . 42.1.2 Automatisches Starten eines Programms . . . . . . . . . . . . . . 5
3 Beschreibung der Applikationen 7
3.1 idlde (Unix, Windows) . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.1 Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.2 Editieren, Kompilieren und Fehlersuche in Programmen . . . . . 10
3.2 IDL (Unix) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.1 Ausfuhrbare Kommandos, Kompilieren und Fehlersuche . . . . . 13
3.3 Runtime (Unix, Windows) . . . . . . . . . . . . . . . . . . . . . . 143.4 IDLHELP (Unix, Windows) . . . . . . . . . . . . . . . . . . . . . 15
3.4.1 Arbeiten mit der IDL Online Hilfe . . . . . . . . . . . . . . . . . 15
4 Grundlagen 17
4.1 Auffinden von Programmen . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Syntax der Aufrufe von IDL Programmen . . . . . . . . . . . . . . 18
4.2.1 Positionale Parameter . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.2 Keyword Parameter . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3 Zeichen mit spezieller Bedeutung . . . . . . . . . . . . . . . . . . . 204.4 System-Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4.1 Ubersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.4.2 Informationen uber Systemvariablen . . . . . . . . . . . . . . . . 21
5 Datenstrukturen 23
5.1 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.1 Konversionsroutinen . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2 Skalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.2.1 Information uber Skalare mit SIZE . . . . . . . . . . . . . . . . . 255.3 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
iii
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 8/238
iv INHALTSVERZEICHNIS
5.3.1 Anlegen von Vektoren und Arrays . . . . . . . . . . . . . . . . . 26
5.3.2 Information uber Felder mit SIZE . . . . . . . . . . . . . . . . . 28
5.3.3 Generierung von Arrays mit REPLICATE . . . . . . . . . . . . . 28
5.3.4 Arrayindizierung mit [ ] . . . . . . . . . . . . . . . . . . . . . . 28
5.3.5 Arbeiten mit Feldern - REFORM Befehl . . . . . . . . . . . . . . 295.3.6 Arbeiten mit Feldern - TRANSPOSE Befehl . . . . . . . . . . . 29
5.3.7 Verknupfung von Feldern . . . . . . . . . . . . . . . . . . . . . 29
5.3.8 Beispiele zum Arbeiten mit Feldern . . . . . . . . . . . . . . . . 30
5.4 Zeichenketten (Strings) . . . . . . . . . . . . . . . . . . . . . . . . 31
5.4.1 Operationen auf Zeichenketten . . . . . . . . . . . . . . . . . . . 31
5.4.2 Konversion von Strings in Zahlen . . . . . . . . . . . . . . . . . 32
5.4.3 Zeichenkette mit Leerzeichen anlegen . . . . . . . . . . . . . . . 32
5.5 Strukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.5.1 Definition einer unbenannten (anonymen) Struktur . . . . . . . . 34
5.5.2 Definition einer benannten Struktur . . . . . . . . . . . . . . . . 36
5.5.3 REPLICATE bei Strukturen . . . . . . . . . . . . . . . . . . . . 37
5.5.4 Informationen zum Strukturaufbau . . . . . . . . . . . . . . . . . 37
5.6 Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.6.1 Anwendungen von Pointern . . . . . . . . . . . . . . . . . . . . 38
5.6.2 Funktionen zur Bearbeitung von Pointern . . . . . . . . . . . . . 39
5.6.3 Beispiele mit Pointern . . . . . . . . . . . . . . . . . . . . . . . 40
5.6.4 Empty Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . 405.6.5 Gultige Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.6.6 Datenbereich mit Pointer belegen . . . . . . . . . . . . . . . . . 41
5.6.7 Pointer auf eine Struktur . . . . . . . . . . . . . . . . . . . . . . 42
5.6.8 Pointer in einer Struktur . . . . . . . . . . . . . . . . . . . . . . 42
5.6.9 Pointer auf eine Struktur und Pointer in der Struktur . . . . . . . 43
5.6.10 Pointer freigeben . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.6.11 HEAP GC Heap garbage collection . . . . . . . . . . . . . . . . 44
5.6.12 Beispiel mit Pointern . . . . . . . . . . . . . . . . . . . . . . . . 45
5.6.13 Ubungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6 Arbeiten mit Datenstrukturen 49
6.1 IDL Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.2 Wertzuweisung bei Variablen . . . . . . . . . . . . . . . . . . . . . 50
6.2.1 Wertzuweisung bei mehrdimensionalen Feldern . . . . . . . . . . 50
6.3 Warnung vor Integer-Overflow . . . . . . . . . . . . . . . . . . . . 51
6.4 Speicherplatzverwaltung . . . . . . . . . . . . . . . . . . . . . . . 51
6.5 Loschen von Variablen . . . . . . . . . . . . . . . . . . . . . . . . 52
6.6 Effizientes Arbeiten mit Feldern . . . . . . . . . . . . . . . . . . . 536.6.1 Vorteil von Feld-Operationen . . . . . . . . . . . . . . . . . . . . 53
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 9/238
INHALTSVERZEICHNIS v
6.6.2 Geschickte Klammerung . . . . . . . . . . . . . . . . . . . . . . 54
6.7 Einstellung von Compiler Optionen . . . . . . . . . . . . . . . . . 54
6.8 Filtern von Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.8.1 WHERE-Funktion . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.8.2 Verwendung der Funktionen MIN, MAX, SORT und UNIQ . . . 556.8.2.1 SORT . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.8.2.2 MIN und MAX . . . . . . . . . . . . . . . . . . . . . 56
6.8.2.3 UNIQ . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.9 Ubungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7 Einbettung ins Betriebssytem 59
7.1 Umgebungs-Variablen . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.1.1 Umgebungs-Variablen des Betriebssystems . . . . . . . . . . . . 59
7.2 Wechsel zum Betriebssystem (Unix, Windows) . . . . . . . . . . . 60
8 Hilfe, Sicherung 61
8.1 Die Hilfe-Routine von IDL . . . . . . . . . . . . . . . . . . . . . . 61
8.2 Save und Restore einer IDL-Sitzung, IDL- Binary . . . . . . . . . . 62
9 Definitionen zur Datenausgabe 65
9.1 Koordinatensysteme . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.2 Zeichensatze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.2.1 Auswahl eines Fonts . . . . . . . . . . . . . . . . . . . . . . . . 679.3 Farbtabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.3.1 Laden von Farbtabellen . . . . . . . . . . . . . . . . . . . . . . . 68
9.3.2 Arbeiten mit Farben . . . . . . . . . . . . . . . . . . . . . . . . 69
9.4 Steuerung der Ausgabe und Ausgabegerate . . . . . . . . . . . . . . 70
9.4.1 Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.4.2 Ausgabe mehrerer Bilder . . . . . . . . . . . . . . . . . . . . . . 71
9.4.3 Positionieren von Bildern . . . . . . . . . . . . . . . . . . . . . 71
9.4.3.1 Aufteilung der Zeichenflache in gleich große Teile . . . 72
9.4.3.2 Keyword POSITION und System-Variable !P.POSITION 739.4.4 Bildschirm Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . 74
9.4.5 Benutzung des Z-Buffers . . . . . . . . . . . . . . . . . . . . . . 75
9.4.6 Beispiel: Z-Buffer, SURFACE und CONTOUR . . . . . . . . . . 76
9.4.7 PostScript Ausgabe - Drucken . . . . . . . . . . . . . . . . . . . 77
9.4.8 Ubungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10 Programme zur Anwendungs-Darstellung 81
10.1 Uberblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
10.1.1 Achsen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8210.1.2 Steuerungen zur Zeichenflache . . . . . . . . . . . . . . . . . . . 83
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 10/238
vi INHALTSVERZEICHNIS
10.1.3 Routinen zum Beschriften oder Markieren . . . . . . . . . . . . . 83
10.2 XY-Darstellungen mit PLOT . . . . . . . . . . . . . . . . . . . . . 84
10.2.1 Ausgabe von Daten als Linien-Plots . . . . . . . . . . . . . . . . 84
10.2.2 Plot bei einem Argument . . . . . . . . . . . . . . . . . . . . . . 84
10.2.3 Plot mit zweitem Argument (dependent data) . . . . . . . . . . . 84
10.2.4 Plot von Datenreihen . . . . . . . . . . . . . . . . . . . . . . . . 85
10.2.5 Beispiele mit PLOT . . . . . . . . . . . . . . . . . . . . . . . . 86
10.2.6 Plot mit logarithmischer Achseneinteilung . . . . . . . . . . . . . 90
10.2.7 Balkendiagramme . . . . . . . . . . . . . . . . . . . . . . . . . 90
10.2.8 Fehlerbalken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.2.9 Polarplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.2.10 Scatter-Plot mit Zufallszahlen . . . . . . . . . . . . . . . . . . . 92
10.2.11 Plot mit Text in unterschiedlichen Farben . . . . . . . . . . . . . 9310.3 Flachen- und Hohenlinien- Darstellungen . . . . . . . . . . . . . . 94
10.3.1 Netzlinien mit SURFACE . . . . . . . . . . . . . . . . . . . . . 94
10.3.2 Hohenlinien mit CONTOUR . . . . . . . . . . . . . . . . . . . . 97
10.3.3 Schattierte Oberflachendarstellung . . . . . . . . . . . . . . . . . 98
10.3.4 Oberflache mit beliebigem Datensatz uberlagern . . . . . . . . . 99
10.3.5 Hohenlinien-Plot im 3D-Raum . . . . . . . . . . . . . . . . . . . 100
10.4 3D Transformationen . . . . . . . . . . . . . . . . . . . . . . . . . 101
10.4.1 3D Transformationsmatrix mit SURFACE . . . . . . . . . . . . . 101
10.4.2 3D Transformationsmatrix mit SURFR . . . . . . . . . . . . . . 102
10.4.3 3D Transformationsmatrix mit SCALE3 und T3D . . . . . . . . . 103
10.5 Karten-Projektionen . . . . . . . . . . . . . . . . . . . . . . . . . . 104
10.5.1 MAP SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
10.5.2 Kombination von Karte mit Bilddatei . . . . . . . . . . . . . . . 105
10.5.3 Kombination von Karte und Hohenlinienplot . . . . . . . . . . . 106
10.5.4 Beschriftung der Karte mit Text und Symbolen . . . . . . . . . . 106
10.6 Glatten von zufalligen oder irregularen Daten . . . . . . . . . . . . 107
10.7 ISO Oberflachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
10.7.1 Das SLICER3 Tool . . . . . . . . . . . . . . . . . . . . . . . . . 109
10.8 Animation von Daten . . . . . . . . . . . . . . . . . . . . . . . . . 111
10.9 Arbeiten mit dem Cursor . . . . . . . . . . . . . . . . . . . . . . . 112
10.10 Zusammenfassung der Darstellungs-Routinen . . . . . . . . . . . . 113
10.10.1 allgemeine Routinen . . . . . . . . . . . . . . . . . . . . . . . . 113
10.10.2 eindimensionale Plotroutinen . . . . . . . . . . . . . . . . . . . 113
10.10.3 mehrdimensionale Plotroutinen . . . . . . . . . . . . . . . . . . 113
10.11 IDL-Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . 11410.11.1 Ubungen: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 11/238
INHALTSVERZEICHNIS vii
11 Bildverarbeitung 117
11.1 Lesen eines Bildes . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
11.2 Kontrastverscharfung . . . . . . . . . . . . . . . . . . . . . . . . . 118
11.3 Verandern der Bildgroße . . . . . . . . . . . . . . . . . . . . . . . 118
11.4 Darstellung eines Bildes . . . . . . . . . . . . . . . . . . . . . . . 11911.5 Positionieren des Bildes . . . . . . . . . . . . . . . . . . . . . . . . 120
11.6 Bildanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.6.1 Arbeiten mit Basisfiltern . . . . . . . . . . . . . . . . . . . . . . 121
11.6.2 Auswahlen und Verarbeiten einer Region . . . . . . . . . . . . . 123
12 Lesen und Schreiben von Daten 127
12.1 Offnen von Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . 127
12.2 Beispiele fur das Offnen und Schließen von Dateien . . . . . . . . . 128
12.3 Lesen und Schreiben von Daten . . . . . . . . . . . . . . . . . . . 129
12.3.1 Formale Vorschriften beim Lesen . . . . . . . . . . . . . . . . . 130
12.3.2 Lesen (explizit) formatierter Daten . . . . . . . . . . . . . . . . . 131
12.3.3 Lesen und Schreiben unformatierter Daten . . . . . . . . . . . . 132
12.3.4 Lesen von unformatierten Daten mit assozierten Variablen . . . . 132
12.4 Arbeiten mit Dateien . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.5 Operationen auf Dateien/Verzeichnissen ohne Wechsel zum Betriebs-
sytem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
12.6 Automatisierte Eingabe eines ASCII-Datensatzes . . . . . . . . . . 135
12.6.1 Zusammenfassung gebrauchlicher Lese- uns Schreibroutinen . . . 136
12.7 Beispiel: Lesen und Schreiben . . . . . . . . . . . . . . . . . . . . 137
13 Programmierung und Kompilation 139
13.1 Batchverarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
13.2 Formales zu IDL-Programmen . . . . . . . . . . . . . . . . . . . . 140
13.3 Definition einer Prozedur oder Funktion . . . . . . . . . . . . . . . 140
13.4 Aufruf einer Prozedur oder Funktion . . . . . . . . . . . . . . . . . 141
13.5 Regeln fur die Namensgebung von IDL Programmen . . . . . . . . 141
13.6 Kompilieren/Ausfuhren einer Prozedur/Funktion . . . . . . . . . . 142
13.7 Beispiele fur IDL Programme . . . . . . . . . . . . . . . . . . . . . 143
13.8 Speicherverwaltung von Daten . . . . . . . . . . . . . . . . . . . . 144
13.8.1 Ubergabe von Parametern an Prozeduren und Funktionen . . . . . 144
13.8.2 Lokale Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
13.8.3 Regeln fur Parameter . . . . . . . . . . . . . . . . . . . . . . . . 145
13.9 Beispiele: Aufruf von Funktionen und Prozeduren . . . . . . . . . . 146
13.10 FORWARD FUNCTION Funktion . . . . . . . . . . . . . . . . . . 147
13.11 Kontroll-Statements . . . . . . . . . . . . . . . . . . . . . . . . . . 14913.12 Uberprufung der Argumente und Keywords . . . . . . . . . . . . . 152
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 12/238
viii INHALTSVERZEICHNIS
13.13 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
13.14 Durchschleusen zusatzlicher Argumente . . . . . . . . . . . . . . . 154
13.15 COMMON Blocke . . . . . . . . . . . . . . . . . . . . . . . . . . 155
13.16 Dynamische Erweiterung von Programmen . . . . . . . . . . . . . 156
13.17 Ubungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
14 Fehlersuche 161
15 Programmanalyse 163
16 Error Handling 165
16.1 Abfrage des Fehlerzustandes . . . . . . . . . . . . . . . . . . . . . 166
16.2 Umleiten von Fehlern . . . . . . . . . . . . . . . . . . . . . . . . . 167
16.3 Beispiel zu CATCH . . . . . . . . . . . . . . . . . . . . . . . . . . 168
16.4 Ausgabe von Fehlernachrichten . . . . . . . . . . . . . . . . . . . . 169
17 Widgets 171
17.1 GUI Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
17.2 Typen von Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . 172
17.3 Erstellung von Menu Widgets . . . . . . . . . . . . . . . . . . . . . 172
17.4 Gestaltung des Layouts eines Widgets . . . . . . . . . . . . . . . . 173
17.5 Wie funktioniert eine Oberflache? . . . . . . . . . . . . . . . . . . 175
17.6 Kontrolle uber die Widgets . . . . . . . . . . . . . . . . . . . . . . 175
17.7 Registrierung der Widgets mit dem XMANAGER . . . . . . . . . . 176
17.8 Schreiben eines kleinen Widget Programms . . . . . . . . . . . . . 177
17.8.1 Initialisierung der Event-Loop . . . . . . . . . . . . . . . . . . . 177
17.8.2 Ubergabe der Event Struktur an den Event-Handler . . . . . . . . 178
17.8.3 Aufbau der Event Struktur fur WIDGET BUTTON . . . . . . . . 179
17.9 Ubergabe von Informationen zwischen Widgets . . . . . . . . . . . 179
17.10 Widgetprogrammierung im Wandel von IDL . . . . . . . . . . . . . 180
17.10.1 Beispiel: Widget 1 . . . . . . . . . . . . . . . . . . . . . . . . . 181
17.10.2 Beispiel: Widget 2 . . . . . . . . . . . . . . . . . . . . . . . . . 18217.10.3 Beispiel: Widget 3 . . . . . . . . . . . . . . . . . . . . . . . . . 183
17.10.4 Beispiel: Widget 4 . . . . . . . . . . . . . . . . . . . . . . . . . 184
17.10.5 Beispiel: Widget 5 . . . . . . . . . . . . . . . . . . . . . . . . . 185
17.11 Widget Programme fur Runtime-Laufe . . . . . . . . . . . . . . . . 186
17.12 Compound Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . 187
18 Verknupfung mit anderer Software 191
18.1 SPAWN Kommando . . . . . . . . . . . . . . . . . . . . . . . . . 191
18.2 SPAWN Kommando bei einem C Programm . . . . . . . . . . . . . 19218.3 Aufruf von Fortran aus IDL: CALL EXTERNAL . . . . . . . . . . 193
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 13/238
INHALTSVERZEICHNIS ix
A Informationen 195
A.1 Informationen zu IDL . . . . . . . . . . . . . . . . . . . . . . . . . 195
A.2 Publikationen und Aktivitaten zu IDL im FZJ . . . . . . . . . . . . 197
A.3 Wichtige URL’s zu IDL . . . . . . . . . . . . . . . . . . . . . . . . 198
A.4 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
B L osungen 201
B.1 Losungen zu Kapitel: Datenstrukturen . . . . . . . . . . . . . . . . 201
B.2 Losungen zu Kapitel: Arbeiten mit Datenstrukturen . . . . . . . . . 203
B.3 Losungen zu Kapitel: Definitionen zur Datenausgabe . . . . . . . . 205
B.4 Losungen zu Kapitel: Programme zur Anwendungs-Darstellung . . 206
B.5 Losungen zu Kapitel: Programmierung und Kompi-
lation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 14/238
x INHALTSVERZEICHNIS
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 15/238
Verzeichnis der Abbildungen
3.1 idlde: Aufbau der Oberflache . . . . . . . . . . . . . . . . . . . . . 8
3.2 IDL Programm: Einfacher XY-Plot . . . . . . . . . . . . . . . . . . 11
3.3 IDL Programm: einfacher XY-Plot mit Text . . . . . . . . . . . . . 12
9.1 Definitionen zur Darstellung: Beispiel mit TEK COLOR . . . . . . 68
9.2 Definitionen zur Datenausgabe: !P.MULTI . . . . . . . . . . . . . . 729.3 Definitionen zur Datenanalyse: Keyword POSITION . . . . . . . . 73
9.4 Definitionen zur Datenausgabe: Z-Buffer . . . . . . . . . . . . . . . 76
9.5 Definitionen zur Datenausgabe: Beispiel mit Legende . . . . . . . . 79
10.1 Programme zur Darstellung: XY Plot . . . . . . . . . . . . . . . . . 86
10.2 Programme zur Darstellung: mehrere Y-Achsen . . . . . . . . . . . 87
10.3 Programme zur Darstellung: PLOT und zusatzlicher Text . . . . . . 89
10.4 Programme zur Darstellung: Beschriftung in der Mitte des Bildes . . 89
10.5 Programme zur Darstellung: Logarithmischer PLOT . . . . . . . . . 90
10.6 Programme zur Darstellung: Fehlerbalken . . . . . . . . . . . . . . 91
10.7 Programme zur Darstellung: Polarplot . . . . . . . . . . . . . . . . 91
10.8 Programme zur Darstellung: Scatter-Plot mit Zufallszahlen . . . . . 92
10.9 Programme zur Darstellung: XYOUTS in unterschiedlichen Farben 93
10.10 Programme zur Darstellung: SURFACE . . . . . . . . . . . . . . . 94
10.11 Programme zur Darstellung: Behandlung von missing value . . . . 96
10.12 Programme zur Darstellung: CONTOUR . . . . . . . . . . . . . . . 97
10.13 Programme zur Darstellung: C Keywords bei CONTOUR . . . . . 98
10.14 Programme zur Darstellung: SHADE SURF . . . . . . . . . . . . . 99
10.15 Programme zur Darstellung: CONTOUR im 3D Raum . . . . . . . 100
10.16 Programme zur Darstellung: Probleme ohne Z-Buffer . . . . . . . . 100
10.17 Programme zur Darstellung: SURFACE 3D Transformationen . . . 101
10.18 Programme zur darstellung: SURFR 3D Transformationen . . . . . 102
10.19 Programme zur Darstellung: SCALE3 3D Transformationen . . . . 103
10.20 Programme zur Darstellung: MAP SET . . . . . . . . . . . . . . . 105
10.21 Programme zur Darstellung: CONTOUR und MAP SET . . . . . . 106
10.22 Programme zur Darstellung: TRIGRID . . . . . . . . . . . . . . . . 10710.23 Programme zur Darstellung: ISO Oberflachen . . . . . . . . . . . . 108
xi
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 16/238
xii VERZEICHNIS DER ABBILDUNGEN
10.24 Programme zur Darstellung: SLICER3-Tool im SLICE-Modus . . . 109
10.25 Programme zur Darstellung: SLICER3-Tool im Surface-Modus . . . 110
10.26 Programme zur Darstellung: SHOW3 . . . . . . . . . . . . . . . . 114
11.1 Bildverarbeitung: TVSCL . . . . . . . . . . . . . . . . . . . . . . . 119
11.2 Bildverarbeitung: TV . . . . . . . . . . . . . . . . . . . . . . . . . 120
11.3 Bildverarbeitung: Basisfilter . . . . . . . . . . . . . . . . . . . . . 122
11.4 Bildanalyse: Auswahlen einer Region . . . . . . . . . . . . . . . . 123
11.5 Bildanalyse: Auswahlen einer Region . . . . . . . . . . . . . . . . 125
16.1 Error Handling: CATCH . . . . . . . . . . . . . . . . . . . . . . . 168
17.1 Widgets: Compound Widgets, cw switch . . . . . . . . . . . . . . . 187
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 17/238
Verzeichnis der Tabellen
4.1 Zeichen mit spezieller Bedeutung . . . . . . . . . . . . . . . . . . . . . 20
5.1 Datenstrukturen: Datentypen . . . . . . . . . . . . . . . . . . . . . . . . 24
5.2 Datenstrukturen: Operationen auf Zeichenketten . . . . . . . . . . . . . . 31
9.1 Definitionen zur Datenausgabe: Auswahl eines Fonts . . . . . . . . . . . 66
9.2 Definitionen zur Datenausgabe: Positionieren von Zeichen . . . . . . . . 66
10.1 Programme zur Darstellung: Keywords zur Achsneanpaßung . . . . . . . 82
10.2 Programme zur Darstellung: Steuerungen zur Zeichenflache . . . . . . . 83
10.3 Programme zur Darstellung: Routinen zum Beschriften oder Markieren . 83
10.4 Programme zur Darstellung: Zusammenfassung allgemeiner Routinen . . 113
10.5 Programme zur Darstellung: Zusammenfassung mehrdimensionaler Plot-
routinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
12.1 Lesen und Schreiben von Daten: Offnen . . . . . . . . . . . . . . . . . . 12712.2 Lesen und Schreiben von Daten: Lesen und Schreiben von Daten . . . . . 129
12.3 Lesen und Schreiben von Daten: Zusammenfassung von Lese- und Schrei-
broutinen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
xiii
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 18/238
xiv VERZEICHNIS DER TABELLEN
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 19/238
Verzeichnis der Beispiele
2.1 Konfiguration: Start-Up Datei . . . . . . . . . . . . . . . . . . . . . . . 4
3.1 Beschreibung der Applikationen: Runtime . . . . . . . . . . . . . . . . . 14
6.1 Datenstrukturen: Vorteil von Feld-Operationen . . . . . . . . . . . . . . 53
9.1 Definitionen zur Datenausgabe: Z-Buffer . . . . . . . . . . . . . . . . . . 76
9.2 Definitionen zur Datenausgabe: PostScript-Ausgabe . . . . . . . . . . . . 77
9.3 Definitionen zur Darstellung: optionale Postscriptdatei . . . . . . . . . . 78
10.1 Programme zur Darstellung: Plot von Datenreihen . . . . . . . . . . . . . 85
10.2 Programme zur Darstellung: XYOUTS in unterschiedlichen Farben . . . 93
11.1 Bildanalyse: Verarbeiten einer Region . . . . . . . . . . . . . . . . . . . 124
12.1 Arbeiten mit Dateien: READ ASCII Template . . . . . . . . . . . . . . . 136
12.2 Lesen und Schreiben: Programm zum Lesen und Schreiben . . . . . . . . 137
13.1 Programmierung und Kompilation: ohne FORWARD FUNCTION . . . . 147
13.2 Programmierung und Kompilation: mit FORWARD FUNCTION . . . . . 147
13.3 Programmierung und Kompilation:¨
Uberprufung der Parameter . . . . . . 15313.4 Programmierung und Kompilation: COMMON-Blocke . . . . . . . . . . 155
16.1 Error Handling: CATCH . . . . . . . . . . . . . . . . . . . . . . . . . . 168
17.1 Widgets: Layout eines Widgets . . . . . . . . . . . . . . . . . . . . . . . 174
17.2 widgets: kleines widget Programm . . . . . . . . . . . . . . . . . . . . . 177
17.3 widgets: Event Handler . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
17.4 Widgets: Dieses Widget wird in Beispiel 1 bis 5 bearbeitet . . . . . . . . 180
17.5 Widgets: wid1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
17.6 Widgets: wid2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
17.7 Widgets: wid3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18317.8 Widgets: wid4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
17.9 Widgets: wid5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
17.10Widgets: Compound Widgets, test cw . . . . . . . . . . . . . . . . . . . 187
17.11Widgets: Compound Widgets, cw switch . . . . . . . . . . . . . . . . . . 188
xv
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 20/238
xvi VERZEICHNIS DER BEISPIELE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 21/238
Kapitel 1
Einleitung
IDL (Interactive Data Language) ist ein Lizenzprogramm der Firma RSI, Research
Systems Inc., Boulder, Colorado.
In den folgenden Kapiteln werden wichtige Merkmale der Datenverarbeitungs-Sprache
IDL aufgezeigt.
Strukturierte Sprache
Interaktives, interpretatives Arbeiten
Applikationen: Programme mit Funktionen, Prozeduren
Plattformunabhangig
IDL ist portabel: UNIX, VMS, Windows, LINUX, Macintosh
Arrayorientierte Sprache Pointer
Flexible Input/Output Moglichkeiten
XY Plotting, 2D Plotting, mehrdimensionales Plotting, Volumen Visualisierung,
Bildverarbeitung und Bildanalyse, Animation
IDL Widgets, Erstellung von Benutzeroberflachen
Dynamisches Linken von FORTRAN mit CALL EXTERNAL.
Nachfolgende Themen werden in diesem Buch nicht behandelt. SQL Datenbankanbindung Wavelets Numerical Recipes Objekte und Objekt-orientierte Graphik Dynamische Link-Module mit FORTRAN oder C.
1
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 22/238
2 KAPITEL 1. EINLEITUNG
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 23/238
Kapitel 2
Konfiguration
Die Einstellungen zur IDL Arbeitsumgebung konnen konfiguriert werden. Gemeint sind
Definitionen, die beim Starten von IDL durchgefuhrt werden.
Einige Beispiele sind: (Fettgedrucktes sehr wichtig!): Der Suchpfad (!PATH), ein Beispiel zur Definition von !PATH folgt auf Seite 4. Backingstore von IDL behandeln (DEVICE,RETAIN=2) True Color in Direct Color (256 Farben) (DEVICE,DECOMPOSED=0) IDL-Systemvariablen oder eigene Systemvariablen Windowgroße
Diese Definitionen sind uber eine Start-Up Datei moglich. IDL sieht zwei Moglichkeiten
vor, eine Start-Up Datei zu definieren.
Man kann zum einen in der Entwicklungsumgebung idlde in dem dafur vorgesehenen
Menu Preferences Einstellungen vornehmen. Zum anderen werden Einstellungen automa-tisiert durchgefuhrt, wenn eine Start-Up Datei mittels einer Environment-Variablen ange-
boten wird. Diese Technik wird im nachfolgenden beschrieben. Ein Vorteil einer Start-Up
Datei ist, daß man diese auch zentral fur eine Arbeitsgruppe definieren kann.
2.1 Start-Up Datei
Die Datei, die als Start-Up Datei genommen werden soll, wird uber die Environment-
Variable IDL STARTUP definiert. Dabei ist eine volle Pfad-Angabe mit Angabe des
File-Namens der Start-Up Datei notwendig.
Korn Shell:
export IDL_STARTUP=$HOME/idldir/setup_file
Windows:
set IDL_STARTUP=C:\idldir\setup_file
Fur das Arbeiten unter einem Unix-Betriebssystem gilt folgendes.
Wenn man mit dem Command Line Interface arbeitet, setzt man die Environment-Variable
IDL STARTUP im .profile.
Wenn man mit idlde arbeitet, setzt man den Bezug zu der Startup-Datei uber
den Menupunkt Preferences oder uber die Environment Variable IDL STARTUP im.profile.
3
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 24/238
4 KAPITEL 2. KONFIGURATION
Unter einem Windows-System setzt man Environment-Variablen z.B. in der Datei
autoexec.bat oder uber das Menu Systemeigenschaften.
2.1.1 Beispiel: Start-Up Datei
Das Beispiel gibt einen Uberblick uber mogliche Definitionen in einer Start-Up Datei.
Unterschiedliche Plattformen konnen dabei berucksichtigt werden. Die Pfadsetzung erfolgt
in Unix mit dem Separator ’:’ und unter Windows mit dem Separator ’;’. Das Zeichen ;
bedeutet in IDL, daß nachfolgende Zeichen als Kommentar behandelt werden.
; eigener Prompt
!PROMPT = ’myIDL>’
DEVICE,PSEUDO_COLOR=8 ; bits per pixel
DEVICE,DECOMPOSED=0
; Backingstore von IDL behandeln lassen
DEVICE, RETAIN=2;
; Hintergrund weiss, Vordergrund schwarz
!P.BACKGROUND=!D.TABLE_SIZE-1
!P.COLOR=0
IF !VERSION.OS_FAMILY EQ ’unix’ THEN sep=’:’ ELSE sep=’;’
; Pfad erweitern, damit Routinen von Ray Sterner verfuegbar
!PATH=’/usr/local/idl/JHUapl/idlusr’+sep + !PATH
!PATH=’/usr/local/idl/JHUapl/idlusr2’+sep + !PATH
!PATH=’/usr/local/idl/JHUapl/idldoc’+sep + !PATH
; Pfad fuer eigene Library erweitern
!PATH=’/home/zam/zdvnnn/ownlib’+sep + !PATH
; Systemvariablen fuer Umlaute (readonly)
; klein !ae,!oe,!ue
; gross (upper) !up_ae,!up_oe,!up_ue
DEFSYSV,’!ae’,STRING(228b),1
DEFSYSV,’!oe’,STRING(246b),1
DEFSYSV,’!ue’,STRING(252b),1
DEFSYSV,’!up_ae’,STRING(196b),1
DEFSYSV,’!up_oe’,STRING(214b),1
DEFSYSV,’!up_ue’,STRING(220b),1
; Voraussetung Umlaute: DEVICE,/ISOLATIN1 & xyouts,xp,yp,!ae
DELVAR,sep
Beispiel 2.1: Konfiguration: Start-Up Datei
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 25/238
2.1. START-UP DATEI 5
2.1.2 Automatisches Starten eines Programms
Je nach Bedarf kann es erforderlich sein, ein vorkompiliertes Programm beim Starten von
IDL direkt auszufuhren. Die Vorgehensweise wird im folgenden erklart.
Das fertige Programm sollte in einer gerade neu gestarteten IDL-Sitzung komplett durch-laufen, so daß alle Module kompiliert sind. Dann sichert man dieses Programm mit SAVE.
Das kompilierte IDL-Programm hat z.B. den Datei-Namen my application.sav.
SAVE,/ROUTINES,FILENAME=’my_application.sav’
Die nachfolgenden Zeilen fugt man in die Start-Up Datei ein.
CD, ’directory_name’
RESTORE, FILENAME=’my_application.sav’
my_plot ; Hauptprogramm der Applikation starten
Mit dem Starten von IDL wird durch die Initialisierung uber die Start-Up Datei das Pro-
gramm my plot ausgefuhrt. Weitere Informationen zur Ausfuhrung kompilierter Pro-gramme als Runtime Version, siehe Seite 14.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 26/238
6 KAPITEL 2. KONFIGURATION
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 27/238
Kapitel 3
Beschreibung der Applikationen
3.1 idlde (Unix, Windows)
idlde startet das IDL Developement Environment, das Graphische Benutzerinterface
von IDL. In einem Unix-System muß man diese Umgebung explizit mit idlde aufrufen,
in einem Windows-System wird diese graphische Benutzeroberflache automatisch gestar-
tet.
idlde ist eine Programmierumgebung zum Erstellen und Debuggen von IDL Program-
men, siehe Seite 161. In dieser Umgebung braucht man keinen weiteren Editor. Im
Document-Panel kann ein IDL Programm geladen und editiert werden. Das kann entwe-
der ein Hauptprogramm, eine Subroutine oder eine Funktion sein. Naheres zur Program-
mierung folgt ab Seite 139. Wichtig ist, daß mit idlde der IDL Prompt zu jeder Zeitvorhanden ist. Damit hat man die Moglichkeit, IDL Befehle zu testen.
7
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 28/238
8 KAPITEL 3. BESCHREIBUNG DER APPLIKATIONEN
Menu Bar
Tool Bars
Control Panel Buttons
Project Window
Multiple DocumentWindow
Output Log
Variable Watch
Window
Command InputLine
Status Bar
Abbildung 3.1: idlde: Aufbau der Oberflache
Auflisten der letzten Befehle Mit der Richtungstaste
-Taste kann man die Befehle zuruckholen. Die letzten 20 Befehle kann man mit folgenden Kommando listen.
HELP,/RECALL COMMANDS.
Es gibt einen Unterschied zwischen der Unix und Windows Version:
Unter Windows werden Syntax-Elemente in IDL-Programmen farbig hervorgehoben. Un-
ter Unix erfolgt keine farbliche Hervorhebung. Daher empfiehlt es sich, unter Unix den
emacs als Editor mit der Erweiterung IDL-Mode zu benutzen. Dieser Modus unterstutzt
eine farbige Hervorhebung der IDL Programme.
Dazu muß ein emacs.template fur IDL als .emacs unter $HOME abgelegt werden.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 29/238
3.1. IDLDE (UNIX, WINDOWS) 9
3.1.1 Preferences
Zur Grundeinstellung von IDL sollten folgende Anderungen vorgenommen werden.
Menu: File
Preferences
GeneralMenupunkt: change directory on open
(Interessant fur Windows Benutzer)
Wenn eine IDL-Bibliotheksroutine in den Editor geladen wird, zeigt der aktuelle
Pfad auf den Pfad dieser Routine. Wird die IDL-Routine mean.pro geladen, ver-
zweigt IDL automatisch in den Pfad /usr/local/idl/idl/lib
Der Unix Benutzer wird vor Aufruf von IDL generell in das Verzeichnis verzweigen,
in dem seine IDL Routinen liegen. Layout
z.B. kann man das Projekt Window ausblenden, damit mehr Platz im Document Win-
dow ist. Edit
Compiling:
Menupunkt: automatically save changes before compiling Startup
Unter dem Menu kann der Name der Start-Up Datei angegeben werden.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 30/238
10 KAPITEL 3. BESCHREIBUNG DER APPLIKATIONEN
3.1.2 Editieren, Kompilieren und Fehlersuche in Programmen
File Menu, Search Menu und Edit Menu sind selbsterklarend.
– Im File Menu ist unter Preferences eine Voreinstellung moglich (Startup File,
Path,...).
– Uber das Search Menu hat man Editiermoglichkeiten (Find, Replace), aber
auch eine Debughilfe (Go To Line). Run Menu
Die Befehle des Run Menus, die im folgenden erklart werden, sind auch uber ein
Icon der Oberflache idlde ansprechbar.
– Compile kompiliert das Programm, das unter dem Namen gespeichert ist.
– Compile from Memory kompiliert immer das, was im Fenster steht, also
auch nicht abgespeicherte Anderungen.
– Run ausfuhren
– Resolve Dependenciesalle Abhangigkeiten werden aufgelost, wichtig fur .sav Files bei Runtime.
– Debugging:
Set Breakpoint
Man muß zuvor den Cursor an die Stelle positionieren, wo der Breakpoint sein
soll. Mit Set Breakpoint wird der Breakpoint gesetzt. Das Programm halt
bei Ausfuhrung an dieser Stelle an!
Edit Breakpoints
Editieren der Breakpoints
Disable Breakpoint
Deaktivieren des Breakpoints. Dieser Breakpoint kann wieder aktiviert werden.Step Over
fuhrt eine Zeile aus. Falls diese einen Programmaufruf enthalt, wird dieser ohne
Interaktion ausgefuhrt.
Step Out
Das Programm wird bis Ende ausgefuhrt.
Run to Cursor
Das Programm lauft bis zu der Stelle, wo der Cursor steht.
Run to Return
Das aktuelle Programm wird bis zum Ende durchlaufen.
Resetmacht Verschiedenes: RETALL Befehl, alle Dateien schliessen, Loschen von
Breakpoints, Variablen, Pointer...
Hinweis:
Vor dem Setzen von Breakpoints muß kompiliert werden!
Macro Menu
– Eine Variable, die mit dem Cursor markiert ist, wird mit Print Var gedruckt.
– Die Help-Funktion wird mit Help on Var aufgerufen, wenn die Variable
mit dem Cursor markiert ist.
.edit idl programm von der Kommandozeile ladt diese Routine in das Docu-
ment Panel, falls diese noch nicht geladen ist.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 31/238
3.2. IDL (UNIX) 11
3.2 IDL (Unix)
Mit dem Befehl idl wird das traditionelle Command Line Interface gestartet.
Die Command Line Umgebung wird mit exit beendet.
Direkte Ausfuhrung interaktiver Kommandos! Vektor als Beispieldatensatz
x=INDGEN(200,/FLOAT) Deklaration
HELP,x Information uber Variable x
PRINT,x Inhalt von Variable x drucken
PLOT,x Vektor x wird als Ordinate gezeichnet
y=SIN(x/20)ˆ2 Beim Rechnen mit Vektoren und Feldern sollen kei-
ne Schleifen programmiert werden!
PLOT,x,y Befehl (plot), Argumente (x,y)
Abbildung 3.2: IDL Programm: Einfacher XY-Plot
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 32/238
12 KAPITEL 3. BESCHREIBUNG DER APPLIKATIONEN
Beispiel:
Das Beispiel zeigt die interaktive interpretative Ausfuhrung von einem Befehl. XYOUTS
gibt einen Textstring an die Koordinaten x,y aus. x und y sind Vektoren.
x=INDGEN(200,/FLOAT)
y=SIN(x/20)ˆ2
PLOT,x,y
XYOUTS,x,y,’sin(x)’,CHARS=0.5
Abbildung 3.3: IDL Programm: einfacher XY-Plot mit Text
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 33/238
3.2. IDL (UNIX) 13
3.2.1 Ausfuhrbare Kommandos, Kompilieren und Fehlersuche
Ausfuhrbare Kommandos konnen nur interaktiv als Kommando verwendet werden und
nicht in Programmen. Diese Befehle beginnen alle mit einem Punkt (.) und sind abkurzbar.
Anweisungen:.COMPILE kompilieren
.CONTINUE setzt Programm fort
.GO fuhrt zuvor ubersetztes Hauptprogramm aus
.RNEW Loschen von Hauptprogramm Variablen außer Common Block und .RUN
.RUN kompilieren
.SKIP n Kommandos uberpringen
.STEP n Kommandos schrittweise
.TRACE wie .CONT, zeigt aber jede Zeile vor Ausfuhrung an
Setzen von Breakpoints: Breakpoints werden fur die Suche nach Fehlern verwen-
det, siehe Seite 161.
BREAKPOINT,’file.pro’, 23,/SET
Breakpoint bei Zeile 23 im Programm file.pro
Informationen mit
HELP,/BREAKPOINT
Hinweis:
Die Fehlersuche ist uber das Command Line Interface zu IDL moglich, aber mit idlde
wesentlich einfacher.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 34/238
14 KAPITEL 3. BESCHREIBUNG DER APPLIKATIONEN
3.3 Runtime (Unix, Windows)
Eine fertige Applikation kann als Runtime Version ablaufen. Bei einer Runtime Version
sind alle Programme komplett kompiliert und liegen als Binary vor. Dieses vorkompilierte
Programm kann ohne IDL-Entwicklungsumgebung ablaufen. Man benotigt lediglich eineRuntime-Lizenz. Ein Vorteil einer Runtime Version ist der schnelle Zugriff auf die bereits
in binarer Form vorliegenden Programme. Ein weiterer Vorteil ist, daß ein Endanwender,
ohne selbst IDL-Kenntnisse zu haben, mit einer Runtime Applikation arbeiten kann. Der
Nachteil einer Runtime Version ist die Abhangigkeit von einer IDL-Version. Das Binary
kann nur unter der IDL-Version ablaufen, mit der es erstellt wurde.
Der Quelltext des nachfolgenden Programms liegt als runtime.pro vor. Das WAIT-
Kommando hat den Zweck, die Ausfuhrung des Programms um 3 Sekunden zu verzogern.
Diese kleine Anwendung wurde sonst so schell ablaufen, daß man das dargestellte Bild
nicht wahrnimmt, siehe Seite 139.
;Polar Plots
PRO runtime
r=FINDGEN(100)
theta=r/5.
PLOT, r, theta, SUBTITLE=’Polar Plot’, $
XSTYLE=4, YSTYLE=4, /POLAR
AXIS, XAX=0,0,0
AXIS, YAX=0,0,0
WAIT,3
END
Beispiel 3.1: Beschreibung der Applikationen: Runtime
Vorgehen: Erstellung einer Runtime Version
Alle Programme, die verwendet werden, mussen kompiliert werden. Das RESOLVE ALL
dient dazu, alle offenen Referenzen aufzulosen. Mit dem SAVE-Befehl speichert man die
Applikation als Binary ab.
IDL starten
.COMPILE runtime
RESOLVE_ALL
SAVE,/ROUTINES,FILENAME=’runtime.sav’
IDL verlassen
Aufruf der Runtime Lizenz unter Unix idl -rt=’./runtime.sav’
In dem Beispiel liegt die Datei ’runtime.sav’ im aktuellen Verzeichnis. Ansonsten
muß statt des Punktes die volle Pfadangabe stehen.
Aufruf der Runtime Lizenz unter Windows erfolgt mittels eines Doppelklicks auf die kompilierte Datei.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 35/238
3.4. IDLHELP (UNIX, WINDOWS) 15
Hinweis: Es kann nichts nachkompiliert werden. Die IDL Start-Up Datei wird nicht durchlau-
fen. .sav-Files sind unabhangig von der Plattform. Egal wo erstellt, sind diese uberall
nutzbar (siehe Demo). Die !PATH Variable gibt es in der Runtime Umgebung nicht. .sav-Files sind abh angig von der IDL-Version und laufen jeweils nur unter der
IDL-Version, mit der sie erstellt wurden. Das hat zur Folge, das bei einem Versions-
Upgrade, Runtime Programme neu ubersetzt werden mussen.
3.4 IDLHELP (Unix, Windows)
Zu IDL gehort eine sehr gut organisierte Hypertext basierte Online Hilfe. Die gesamte
IDL-Literatur steht online zur Verfugung.Diese wird unter UNIX mit ? und unter Windows mit
F1¡
aufgerufen. Unter einem
Unix-Betriebsystem konnen einzelne Befehle auch direkt hinter dem ? angegeben werden,
wie im nachfolgenden Beispiel aufgezeigt wird. Unter Windows kann man entsprechend
den Befehl mit dem Cursor markieren und dann die Taste
F1¡
drucken.
IDL ¡ ?
bzw.
IDL ¡ ? plot
Im idlde gibt es ein Menu Help und ein Icon in der Tool Area.
Ein kapitelweises Ausdrucken ist uber die Online Hilfe moglich. IDL-Anwender,die lieber mit einem Handbuch arbeiten, sollten mit dem IDL Dokumentationssatz
arbeiten. Die gesamte Literatur befindet sich als PDF-Datei im docs-Verzeichnis von IDL
und kann gedruckt werden.
3.4.1 Arbeiten mit der IDL Online Hilfe
Die Online Hilfe ist ein Hypertext Dokument mit den ublichen Abfragen und Steue-
rungsmoglichkeiten.
Mit dem Aufruf der Online Hilfe ist folgendes direkt verfugbar: Alle Befehle alphabetisch geordnet. Einen Uberblick uber die neuen Funktionen der aktuellen Version. Eine funktionale Liste aller Funktionen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 36/238
16 KAPITEL 3. BESCHREIBUNG DER APPLIKATIONEN
Uber folgende Menu-Knopfe erhalt man weitere Informationen. File Menu
Ein kapitelweises Ausdrucken ist moglich. Bei Printer Setup Auswahl von
Generic (File Only). Mit Print wird die Erstellung eines PostScript Files
veranlaßt. Edit Menu
Mit Copy selektierten Text aufs Clipboard (Ablage) legen. Diese kann dann mit
Paste in idlde bzw. emacs kopiert werden. Sinnvoll fur Online dokumentierte
Beispiele. Bookmark Menu
Mit Define Definition von Bookmarks zum schnelleren Auffinden bestimmter To-
pics.
Mit dem Online Help Button Index werden folgende Help Topics gelistet.
Contents MenuIDL Bucher, What’s new in IDL 5.x, Release Notes,...
Index Menu
Suche nach Keywords. Nur die ersten Buchstaben des gesuchten Begriffs sind not-
wendig. Find Menu
Suche nach beliebigem Text. ’Full text search’, daher beim ersten Aufruf langsam.
Wie bei Index nur die ersten Buchstaben des gesuchten Begriffs tippen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 37/238
Kapitel 4
Grundlagen
Mit der Distribution zu IDL stehen die Routinen der Sprache in zwei verschiedenen Ar-
ten zur Verfugung. Viele Programme liegen in Binarcode, z.B. PLOT, oder in der Script-
Sprache (Quelltext) z.B. MEAN vor.
4.1 Auffinden von Programmen
Programme werden zuerst in dem aktuellen Arbeitsverzeichnis gesucht und dann ent-
lang des Suchpfades, der in der Environment Variablen IDL DIR bzw. der IDL-
Systemvariablen !PATH definiert ist.
Fur das praktische Arbeiten ist es sinnvoll, von dem Verzeichnis die IDL Arbeitsumgebung
aufzurufen, in dem die Programme liegen. Nach dem Verlassen von IDL ist man in dem
Verzeichnis, von dem man IDL gestartet hat.
Hinweis: Man halt moglichst alle Programme in einem Verzeichnis, um ein schnelles Auffin-
den der IDL-Routinen zu erreichen.
Unix: Liegen Programme in anderen Verzeichnissen, kann man Links anlegen.
Windows: Bei einer Verknupfung wird der Name der Datei umbenannt und ist damit
nicht auffindbar. In Dateinamen fur IDL-Programme sollten nur Kleinbuchstaben verwendet werden.
Unter dem Betriebssytem Unix werden keine Programme identifiziert, die im Da-
teinamen Großbuchstaben enthalten.Wechseln des Arbeitsverzeichnisses
IDL Befehl: CD
CD,’/home/idldir’,CURRENT=olddir
CD, CURRENT=olddir
Wechsel zu$HOME/idldirund optionales Sichern des aktuellen Verzeichnisses mit dem
Keyword CURRENT.
Unter einem Unix-Betriebssystem kann man mit CD,’’ in das Heimatverzeichnis ver-
zweigen. Dieser Befehl bewirkt unter Windows keine Anderung des Pfades.
17
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 38/238
18 KAPITEL 4. GRUNDLAGEN
4.2 Syntax der Aufrufe von IDL Programmen
Am Beispiel einer Prozedur werden die verschiedenen Moglichkeiten der Parameteruber-
gabe aufgezeigt.
IDLprogramm, [positionale Parameter], Keyword=value,...
Beispiel: siehe Online Help zu PLOT
PLOT, [X,] Y [, MAX_VALUE=value] $
[, MIN_VALUE=value] [,NSUM=value] [, /POLAR] $
[, THICK=value] [, /XLOG] [, /YLOG] $
[, /YNOZERO]
Die Parameter, die in [ ] (eckige Klammern) gesetzt sind, sind nicht erforderlich.
Positionale Parameter sind X und Y.
Positionale Parameter sind nicht alle erforderlich. Deren Reihenfolge ist
wichtig!
Keyword Parameter sind die benannten Parameter z.B. MAX VALUE= bzw. /XLOG
Diese Keyword-Parameter sind nicht erforderlich.
Das Komma ist das Trennzeichen zwischen den Parametern.
Hinweis:
Groß- /Kleinschreibung fur Variablen bzw. Befehle irrelevant
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 39/238
4.2. SYNTAX DER AUFRUFE VON IDL PROGRAMMEN 19
4.2.1 Positionale Parameter
Dabei handelt es sich um Parameter, die in einer vorgegebenen Reihenfolge definiert und
verwendet werden. Bezugnehmend auf das Beispiel Seite 18 sind die Variablen X und Y
positionale Parameter.
4.2.2 Keyword Parameter
Keyword Parameter werden auch als benannte Parameter bezeichnet. Die Reihenfolge ist
beliebig und ein Ausschreiben dieser Parameter ist oft nicht notig.
Es sind nicht immer alle Parameter erforderlich. Bezugnehmend auf das Beispiel Seite
18, sind z.B. die Variablen MAX VALUE=value und MIN VALUE=value Keyword
Parameter.
Schreibweisen mit gleicher Bedeutung fur das Keyword COLOR:
COLOR=1
/COLOR
/COL
COL=1
oder falls man dem Keyword einen bestimmten Wert zuweisen will:
COLOR=5
COL=5
Keywords beeinflussen den Ablauf eines IDL-Programms. Fur einen definierten Ablauf
gibt es ein bestimmtes Keyword. Fur die Anderung einer Farbe gibt es das COLOR Key-
word. Dieses Keyword COLOR wird in den Programmen PLOT, XYOUTS, POLYFILL
usw. verwendet.
IDL-Routinen haben gemeinsame Keywords.
Hinweis:
Informationen und Erklarungen zu den Routinen und deren Keywords findet man in der
Online Hilfe bzw. im Reference Guide.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 40/238
20 KAPITEL 4. GRUNDLAGEN
4.3 Zeichen mit spezieller Bedeutung
Einige Zeichen sind reserviert.
[] Array
() Funktionen, Strukturtags ¡
Strukturen
! System- Variable
; Kommentar folgt
$ Fortsetzung des Kommandos in nachster Zeile
oder
Betriebssystemkommando, Beispiel: $ ls
. Start Ausfuhrungskommando
.run kompiliert eine Funktion
& mehrere Befehle in einer Zeile werden durch & getrennt
A=1 & B=10* Subscript bei Arrays oder Dereferenzierung
@ Ausfuhrung eines IDL Batch- Files, mit Namen datei enthalt
eine Folge von IDL Befehlen.
Beispiel: Journal Datei @datei
? online help
oder als Operator
c = ( a EQ b ) ? a : 0.0
Wenn die Bedingung (a EQ b) erfullt ist, gilt c=a, wenn nicht
gilt c=0.0
: definiert Label oder Subscript bei Array-BereichTabelle 4.1: Zeichen mit spezieller Bedeutung
4.4 System-Variablen
System-Variablen dienen dem Zweck, Statusinformationen aufzuzeichnen oder bestimmte
Prozesse zu steuern. Zur Steuerung von Prozessen gibt es z.B. !QUIET=1 (Unterdrucken
der MESSAGE,/INFO).
Alle System-Variablen beginnen mit !.
Hinweis:
Systemvariablen konnen sich von Version zu Version andern. Das bedeutet, daß sich der
Informationsgehalt andern kann.
Vorsicht ist daher bei Systemvariablen geboten, die geschrieben werden!
IDL Systemvariable sind als globale Variablen in allen Programmeinheiten bekannt!
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 41/238
4.4. SYSTEM-VARIABLEN 21
4.4.1 Ubersicht
Haufig benutzte Konstanten, Einstellungen fur die Grafik, das Environment und Error-
Handling konnen uber Systemvariablen gesetzt werden.
Konstante !DPI, !PI, !RADEG, !DTOR, !VALUES
Graphik !D current device
!ORDER
!ORDER=0 (Image bottom-up), !ORDER=1 (Image top-down)
!X, !Y, !Z Achsenstruktur
!P Plot- Prozedur
Environment !DIR, !PATH, !VERSION
PRINT, !DIR
Hauptdirectory von IDL
PRINT, !PATHSuchpfad fur Routinen
Pfaderweiterung unter Unix
!PATH=’/home/privat/’ + ’:’ + !PATH
Pfaderweiterung unter Windows
!PATH=’c:\home\privat\’ + ’;’ + !PATH
Bei der Pfadsetzung verwendet man unter Unix den Doppelpunkt
und unter Windows das Semikolon
PRINT, !VERSION
Architektur, Betriebssystem und Versionsnummer von IDL
Plattformabhangiges Programmieren!
PRINT, !VERSION.OS liefert z.B. AIX
PRINT, !VERSION.OS FAMILY liefert z.B. unix
Error Handling Die Beschreibung von !ERR STATE folgt auf Seite 166 .
4.4.2 Informationen uber Systemvariablen
Welche Systemvariable gibt es?
HELP,/SYSTEM_VARIABLES
liefert u.a. folgende Ausgabe:
!DPI = 3.1415927
HELP,!D
<Expression> STRUCT = -> !DEVICE Array[1]
!DPI ist die Konstante PI mit dem Typ DOUBLE.
Die Information der HELP-Funktion gibt Auskunft daruber, daß !D eine Struktur ist,
d.h. !D ist eine Systemvariable mit verschiedenen Informationen. Info uber die Struktur der Systemvariablen !D (Device)
HELP,/STRUCTURES,!D
liefert u.a. folgende Ausgabe (Unix):
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 42/238
22 KAPITEL 4. GRUNDLAGEN
NAME STRING ’X’
X_SIZE LONG 640
Y_SIZE LONG 512
Nur Ausdruck der Werte!
PRINT,!D
PRINT,!P.T
!P.T ist eine 4x4 Transformationsmatrix.
Einige Systemvariablen sind readonly:
Konstanten, !D.TABLE SIZE,...
Definition eigener Systemvariablen. Enthalt die DEFSYSV-Anweisung als dritten
Parameter die Option 1 ist die Systemvariable nur Readonly.
DEFSYSV,’!OWN’,4711DEFSYSV,’!OWN’,123,1
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 43/238
Kapitel 5
Datenstrukturen
Eine Variable im IDL-Sinn hat einen Typ (Byte, Integer, Float,...) und besitzt eine Spe-
zifikation. In IDL stehen, wie auch in anderen Programmiersprachen, Skalare (einzelner
Wert), Felder (1 bis 8 Dimensionen) und Strukturen (Zusammenfassung von beliebigenVariablen, Felder und/oder Strukturen) zur Verfugung.
Fur die Namenskonvention der Variablen gilt: Lange max. 255 Zeichen 1. Zeichen muß Buchstabe sein
(Ausnahme: Systemvariable fangt mit ! an) erlaubt sind Buchstaben, Ziffern, $ und Underscore ’ ’ Nicht erlaubt sind reservierte Worter
z.B. AND, DO, FOR, FUNCTION, PRO, COMMON,...
Hinweis: IDL unterscheidet bei Variablen keine Groß-/Kleinschreibung!
Beispiele:
A, A6, My variable, INIT STATE, ABC$def (=abc$def) Der Variablen-Typ wird durch die Initialisierung festgelegt! Es gibt keine Typendeklaration, wie z.B in FORTRAN mit INTEGER, REAL,. . .
23
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 44/238
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 45/238
5.2. SKALAR 25
5.1.1 Konversionsroutinen
Es gibt Funktionen zur Konversion des Typs z.B.: BYTE, DOUBLE, FLOAT, LONG,
STRING, siehe auch Tabelle auf Seite 24.
Beispiel:a=’15.3’
b=FLOAT(a)
c=FIX(b)
d=STRING(c)
HELP,a,b,c,d
A STRING = ’15.3’
B FLOAT = 15.3000
C INT = 15
D STRING = ’ 15’
Hinweis:
Zu jeder Zeit kann man den Typ andern, was in Sprachen wie C nicht so einfach ist.
Das vorherige Beispiel zeigt, wie einfach eine Konversion moglich ist.
5.2 Skalar
Ein Skalar ist ein einzelner Wert ohne Dimension.
Beispiele zur Initialisierung von Skalaren
Die HELP Anweisung zeigt die Definition der Variablen auf. Das Zeichen & trennt
die Befehle, die in einer Zeile stehen.
byte_var=64b & HELP,byte_var
long_int_var=5L & HELP,long_int_var
float_var=50.5E10 & HELP,float_var
dfloat_var=50.5D200 & HELP,dfloat_var
str=’Dies ist ein String’ & HELP,str
5.2.1 Information uber Skalare mit SIZE
Mit SIZE kann man uberprufen, ob ein Wert ein Skalar ist.
skalar=1
INFO=SIZE(skalar,/DIMENSION)
PRINT,INFO
Der SIZE-Befehl mit Definition des Keywords DIMENSION ermittelt die Dimension
eines Wertes. INFO hat den Wert 0, wenn ein Skalar mit dem Keyword DIMENSION
getestet wird. Ein Skalar hat keine Dimension.
Auf diese Weise sind Vektoren mit einem Element von Skalaren zu unterscheiden.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 46/238
26 KAPITEL 5. DATENSTRUKTUREN
5.3 Array
Ein Array hat ein bis acht Dimensionen. Die Feldindizierung wird ab Index 0 gezahlt.
Da IDL eine lebendige Sprache ist, finden laufend Erganzungen statt. In alteren
IDL Versionen hat es weniger Datentypen gegeben als heute. Aus heutiger Sicht gibt es inalteren Versionen Programme, die mit den heute zur Verfugung stehenden IDL-Routinen
redundant sind. Als Beispiel sei hier das Programm zur Generierung von Speicherplatz
genannt. In alten Versionen mußte man jeweils den Typ fest verdrahtet im Aufruf
angeben (INTARR, FLTARR,.. usw.). Mit der Routine MAKE ARRAY hat man ein IDL
Programm, das man generell bei der Generierung von Speicherplatz aufrufen kann. Die
Typ-Spezifikation wird jeweils mit einem Keyword gesteuert.
5.3.1 Anlegen von Vektoren und Arrays
In diesem Abschnitt werden die alte und die aktuelle Methode zum Anlegen von Fel-dern beschrieben. Die alte Methode wird beschrieben, weil bereits existierende IDL
Programme diese Notation verwenden. Diese Methode ist recht unkomfortabel, da fur
jeden Datentyp eine eigene Funktion aufgerufen werden muß. Die aktuelle Methode
ist einfacher und flexibler aufzurufen und sollte moglichst in neuen IDL-Entwicklungen
verwendet werden.
Vorgehen nach der alten Methode:
Es gibt zwei Methoden, Felder anzulegen, zum einen werden die Werte zu Null gesetzt
und zum anderen erhalten sie den Wert des Indices des Feldes.
Die folgenden Befehle legen jeweils einen Bereich an und fuhren eine Zu Null Setzungaller Elemente durch. Die Befehle enden alle mit ARR und man muß im Aufruf explizit
den Typ (BYTARR, INTARR, LONARR,.....) nennen. Generierung eines Short Integer Vektors mit Nullsetzung:
a=INTARR(10) Generierung eines Long Integer Vektors mit Nullsetzung:
b=LONGARR(10)
Die folgenden Befehle dienen dem Anlegen von Feldern nach der alten Methode und
fuhren eine Indexgenerierung durch:
Jedes Element bekommt den Wert seines Indices, beginnend mit 0. Die Befehle enden allemit INDGEN und hier ist ebenso wie bei oben erklarten Befehlen im Aufruf explizit der
Typ (INDGEN, BINDGEN, L64INDGEN, LINDGEN,...) erforderlich. Diese Befehle legen
jeweils einen Bereich an und fuhren eine Indexgenerierung durch.
Beispiel: Generierung von Variablen mit Indexgenerierung. Generierung eines Vektors vom Typ FLOAT mit Indexgenerierung
a=FINDGEN(10) Generierung eines Vektors vom Typ LONG mit Indexgenerierung
b=LINDGEN(10)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 47/238
5.3. ARRAY 27
Vorgehen nach der aktuellen Methode:
Die aktuelle Methode sollte moglichst in neuen IDL-Entwicklungen verwendet
werden. Mit der aktuellen Methode kann die Generierung von Feldern mit dem Befehl
MAKE ARRAY bzw. INDGEN vereinheitlicht werden. Mit MAKE ARRAY kann man
sowohl alle Werte eines Feldes mit 0 besetzen als auch mit einem beliebigen Wertinitialisieren. Die zusatzliche Typangabe ist mit einem Keyword z.B. L64, UL64,
LONG, FLOAT, . . . moglich. Fur die Indexgenierung wurde der bisherige Befehl der alten
Methode zur Indexgenerierung von Integer Feldern INDGEN erweitert. Diese Funktion
kann durch Verwendung von Keywords zur Typangabe zum Anlegen von Feldern mit
Indexgenerierung aller beliebigen Datentypen verwendet werden. Die Indexgenerierung
ist auch mit MAKE ARRAY mit dem Keyword INDEX moglich.
Beispiel: Generierung von Feldern vom Typ FLOAT
Generierung eines Feldes mit Wert- und Typangabe:
a=MAKE ARRAY(10, /FLOAT,VALUE=5.) Generierung eines Feldes mit Indexgenerierung und Typangabe
(aquivalente Schreibweisen):
a=INDGEN(10, /FLOAT)
a=MAKE ARRAY(10, /FLOAT,/INDEX)
Folgende Schreibweisen sind aquivalent zum Anlegen eines Bereiches mit einem Typ und
einem Wert. FLTARR ist eine Funktion der alten Methode und sollte durch die aquivalente
Schreibweise mit MAKE ARRAY ersetzt werden.a=FLTARR(10,10) & a=MAKE_ARRAY(10,10,/FLOAT)
Der Vorteil von MAKE ARRAY liegt in der flexiblen Typ- und Wertangabe.
array=MAKE_ARRAY(3,4,/INT,VALUE=5)
Folgende Schreibweisen sind aquivalent zum Anlegen eines indizierten Feldes. FINDGEN
und SINDGEN sind Funktionen der alten Methode und sollten durch die aquivalente
Schreibweise mit INDGEN ersetzt werden.
a=FINDGEN(40) & a=INDGEN(40,/FLOAT)
str=SINDGEN(10) & str=INDGEN(10,/STRING)
Hinweis:
Die Funktionen MAKE ARRAY bzw. INDGEN sind flexibler als FLTARR, FINDGEN, ... Bei MAKE ARRAY bzw. INDGENmuß man nur die Keywords fur den Datentyp ken-
nen, wahrend bei den Funktionen, die auf . . . ARR und .. . INDGEN enden, entspre-
chend des Datentyps je eine andere Funktion gewahlt werden muß. Bei MAKE ARRAY gibt es eine flexible Indizierung (Wert, Typ und Indexgenerie-
rung,...).
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 48/238
28 KAPITEL 5. DATENSTRUKTUREN
5.3.2 Information uber Felder mit SIZE
Mit SIZE kann man uberprufen, ob eine Variable ein Array ist.
ARR=MAKE_ARRAY(50,60,/FLOAT)
INFO=SIZE(ARR)
PRINT,INFO
2 50 60 4 3000
Anzahl Dimensionen (2), deklarierte Langen (50, 60), 4 ist der Typ (siehe Refe-
rence Guide), 3000 (50*60) ist die Gesamtzahl der Feldelemente.
5.3.3 Generierung von Arrays mit REPLICATE
Im folgenden Beispiel wird die Zahl 5.0 mit der Funktion REPLICATE in einem Array
der Große [10,10] angeordnet. Jedes Element des Arrays hat den Wert 5.0.
a=5.0
array=REPLICATE(a,10,10)
Aquivalent dazu ist der folgende Befehl.
a=5.0
array=MAKE_ARRAY(10,10,/FLOAT,VALUE=a)
REPLICATE wird auch fur die Erzeugung von Arrays von Strukturen verwendet, siehe
Seite 37 .
5.3.4 Arrayindizierung mit [ ]
Seit der Version IDL 5.0 gibt es eine Syntaxanderung bei der Arrayindizierung. Arrays
sollten mit eckigen Klammern indiziert werden. In alten IDL Versionen wurden Arrays
mit runden Klammern indiziert.
Die alte Schreibweise mit runden Klammern ist weiterhin erlaubt, sollte aber in neuen
Programmen durch eckige Klammern ersetzt werden.
Bei der Zuweisung wert=array[5] ist klar, daß es sich um das sechste Feldelement
handelt, wahrend wert=array(5) auch ein Funktionsaufruf sein konnte.
Mit dem Zeichen * werden alle Elemente der angegebenen Dimension angesprochen. Das
Zeichen : wird verwendet, um Teilbereiche einer Dimension anzusprechen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 49/238
5.3. ARRAY 29
5.3.5 Arbeiten mit Feldern - REFORM Befehl
REFORM andert nur die Dimensionierung, alle Dimensionen der Lange 1 werden entfernt.
a=INDGEN(10,10,10,/LONG)
b=a[5,*,*]
HELP,b,REFORM(b)
B LONG = Array[1, 10, 10]
<Expression> LONG = Array[10, 10]
REFORM behalt die Reihenfolge der Indizierung bei.
5.3.6 Arbeiten mit Feldern - TRANSPOSE Befehl
Der Befehl TRANSPOSE bildet die Transponierte einer Matrix. Im Gegensatz zu dem
REFORM-Befehl werden die Werte der Matrix neu angeordnet.
5.3.7 Verknupfung von Feldern
Felder konnen erweitert werden, wenn deren Dimension ubereinstimmt.
Ein Array mit zehn Elementen wird um ein Element erweitert und hat dann elf Elemente.
A=FINDGEN(10)
A=[A,5]
Vektoren verknupfen
v1=[2,3,1]
v2=[2,1,4]
v3=[v1,v2]
PRINT,v3
ergibt: 2 3 1 2 1 4
Im Gegensatz dazu ist v4 = [ [v1],[v2 ]] ein zweidimensionales Feld
PRINT,v4
2 3 1
2 1 4
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 50/238
30 KAPITEL 5. DATENSTRUKTUREN
5.3.8 Beispiele zum Arbeiten mit Feldern
arr=[2,4,6,8] arr[0]=2, Vektor mit 4 Elementen
arr=INDGEN(256,500,/FLOAT) 256*500 Floating Elemente, durchnummeriert
mit 0.,1.,2.,..
PRINT,arr[24,2] das 537. Element (2*256+25=537).
PRINT,arr[536] 1. Index schneller,eindimensionaler Index
moglich
PRINT,arr[2,*] 3. Spalte, 500 Elemente
HELP,arr[2,*] arr[2,*] hat die Dimension (1,500)
temp=arr[0:9,*] die ersten 10 Spalten uber alle Zeilen
HELP,temp zeigt Definition des Feldes
arr[80:220,200:300]=0.0 Subarray mit Doppelpunkt setzen, nie eine
Schleife programmieren!
A=[1,2,1]
ARRAY=[[A],[2*A],[3*A]]
¡
¡
¡
¢
£ ¤ £
¤ ¥ ¤
¦ § ¦
©
©
©
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 51/238
5.4. ZEICHENKETTEN (STRINGS) 31
5.4 Zeichenketten (Strings)
Eine Zeichenkette besteht aus ein oder mehreren ASCII-Zeichen, die in Hochkommata
eingeschlossen sind. Man nimmt dazu die einfachen Hochkommata. Die Lange einer
Zeichenkette kann maximal 2 GByte betragen.
Wenn innerhalb einer Zeichenkette ein Hochkomma dargestellt werden soll, muß manzwei Hochkommata kodieren.
PRINT, ’ABC’’DEF’
ABC’DEF
PRINT, "ABC’DEF"
ABC’DEF
Bei Zeichenketten kann auch das doppelte Hochkomma verwendet werden. Bei Zahlen
werden durch Voranstellen des doppelten Hochkommas oktale Zahlen definiert.
PRINT, "10
8
5.4.1 Operationen auf Zeichenketten
Die Zeichenkettenvariablen werden haufig verwendet. Fur ihre Bearbeitung gibt es eine
Anzahl wichtiger Befehle.
+ Operator zum Verknupfen von Strings
STRLEN Ermittelt die Lange eines Strings
STRCOMPRESS,STRTRIM Entfernen von Leerzeichen und TabulatorenSTRPOS
STRJOIN
STRPUT
STRMID
Lokalisieren, Einfugen und Extrahieren von
Teilstrings
STRSPLIT Teilt einen String in einzelne Strings auf
STRLOWCASE
STRUPCASE
Konvertieren von Strings in Klein- bzw.
Großbuchstaben
STRING Konvertiert numerische Daten zum Typ String
READS Liest Werte aus einem String in eine IDL-Variable
Tabelle 5.2: Datenstrukturen: Operationen auf Zeichenketten
Beispiele:
str=’IDL is fun’
PRINT,STRMID(str,7,3)
fun
str = ’Wort1,Wort2,Wort3’
teilstring = STRSPLIT(str,’,’,/EXTRACT)
HELP, teilstring
TEILSTRING STRING = Array[3]
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 52/238
32 KAPITEL 5. DATENSTRUKTUREN
PRINT, teilstring[1]
Wort2
5.4.2 Konversion von Strings in Zahlen
Von einem String konnen Zahlen gelesen werden, z.B. in ein FLOAT-Array, wie das fol-
gende Beispiel zeigt.
str=’1 2 3’
val=FLTARR(3)
READS,str,val
PRINT,val
1.00000 2.00000 3.00000
5.4.3 Zeichenkette mit Leerzeichen anlegen
Fur die formatierte Ausgabe kann es erforderlich sein, Daten mit einer definierten
Anzahl von Leerzeichen voneinander zu trennen. Eine einfache Moglichkeit bildet das
nachfolgende Beispiel mit REPLICATE oder MAKE ARRRAY.
my_string=’ ’
bzw.
my_string1=STRING(REPLICATE(32b,11))
my_string2=STRING(MAKE_ARRAY(11,VALUE=32b))
Leerzeichen werden als Byte (ASCII Nummer 32) generiert.
REPLICATE vervielfacht den BYTE-Wert 32b elf mal. Das Ergebnis ist ein Vektor
der Lange elf und dem Typ BYTE. Mit MAKE ARRAY wird ein Vektor der Lange elf
und dem Initialisierungswert 32b angelegt. Mit der Funktion STRING wird jeweils eine
Konvertierung in einen String durchgefuhrt.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 53/238
5.5. STRUKTUREN 33
5.5 Strukturen
Eine Struktur ist eine Zusammenfassung verschiedener Daten unterschiedlicher Definitio-
nen (Skalare oder Arrays von allen IDL Datentypen). Strukturen sind nutzlich, um Daten
zu einer anderen Programmeinheit zu transferieren.
Die Daten innerhalb der Struktur werden uber Tags definiert. Die Tags entsprechen
den Variablen Namen, daher gelten fur sie auch die gleichen Regeln zur Definition.
Das Zeichen . dient dazu, eine einzelne Variable der Struktur anzusprechen.
Man unterscheidet zwei Typen von Strukturen: Named
Wird uber einen Namen definiert. Bei der ersten Referenz liegt die Struktur bezuglich
Typ und Dimension fest und kann nicht geandert werden. Die benannte Struktur kann
benannte Strukturen enthalten. Anonymous
Es gibt keinen Namen und es wird keine permanente Definition innerhalb IDL ge-speichert. Die anonyme Struktur kann andere benannte und anonyme Strukturen ent-
halten.
Hinweis:
Grundsatzlicher Unterschied der beiden Strukturtypen:
Bei einer anonymen Struktur ist der Typ und die Dimensionierung der Struktur-Elemente
geschutzt. Die Anzahl der Struktur-Elemente kann erweitert werden. Die Reihenfolge
der Elemente ist nicht festgelegt. Dagegen ist bei einer benannten Struktur der Typ, die
Dimensionierung und die Reihenfolge festgelegt. Die Anzahl der Struktur-Elemente kann
nicht erweitert werden. Damit ist der Strukturaufbau duplizierbar.
Information uber Struktur Variable mit dem Keyword STRUCTURE.
HELP,!D,/STRUCTURE
HELP,!D.NAME
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 54/238
34 KAPITEL 5. DATENSTRUKTUREN
5.5.1 Definition einer unbenannten (anonymen) Struktur
Die Definition ist entweder mit geschweiften Klammern ¡
oder mit CREATE STRUCT
moglich.
var={Tag1:Value1,Tag2:Value2,...,Tagn:Valuen}
var=CREATE_STRUCT(Tag1,Value1,Tag2,Value2,...,Tagn,Valuen)
Beispiel: Definition einer anonymen Struktur
V = [’Vname’, ’Name’, ’Alter’]
person=CREATE_STRUCT(V[0],’Emil’,V[1],’Graf’,V[2],20)
HELP,person
PERSON STRUCT = -> <Anonymous> Array[1]
HELP,person,/STRUCT** Structure <3007e210>, 3 tags, length=20, refs=1:
VNAME STRING ’Emil’
NAME STRING ’Graf’
ALTER INT 20
Erweiterung der anonymen Struktur um einen Tag
person=CREATE_STRUCT(person,’Gehalt’, 3100.50)
HELP,person
PERSON STRUCT = -> <Anonymous> Array[1]
HELP,person,/STRUCT
** Structure <3007ef90>, 4 tags, length=24, refs=1:
VNAME STRING ’Emil’
NAME STRING ’Graf’
ALTER INT 20
GEHALT FLOAT 3100.50
Zusammenfassung anonymer Strukturen zu einer neuen anonymen Struktur
neu=CREATE_STRUCT(’p1’,person,’p2’,person)
HELP,neu,/STR
P1 STRUCT -> <Anonymous> Array[1]
P2 STRUCT -> <Anonymous> Array[1]
HELP,neu.p1,/STR
** Structure <3007ef90>, 4 tags, length=24, refs=5:
VNAME STRING ’Emil’
NAME STRING ’Graf’
ALTER INT 20
GEHALT FLOAT 3100.50
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 55/238
5.5. STRUKTUREN 35
Auf die Tags der Struktur zugreifen
neu.p2.vname=’Hugo’
HELP,neu.p2.vname,/STR
<Expression> STRING = ’Hugo’
Hinweis:
Datentyp und Dimension der Tags nicht mehr anderbar!
Die Tags kann man auch uber deren Index ansprechen
HELP,neu.(0),/STR
** Structure <3007f020>, 4 tags, length=24, refs=4:
VNAME STRING ’Emil’NAME STRING ’Graf’
ALTER INT 20
GEHALT FLOAT 3100.50
HELP,neu.(1),/STR
** Structure <304839e0>, 4 tags, length=24, refs=4:
VNAME STRING ’Hugo’
NAME STRING ’Graf’
ALTER INT 20
GEHALT FLOAT 3100.50
HELP,neu.(0)
Dabei ist (0) die Tag Position, und zwar von 0 gerechnet die 1. Position
HELP,neu.(1)
(1) ist die 2.Tag Position
Beispiel fur die Tag-Angabe bei tiefer geschachtelten Strukturen:
HELP,neu.(1).(0)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 56/238
36 KAPITEL 5. DATENSTRUKTUREN
5.5.2 Definition einer benannten Struktur
Die Definition ist entweder mit geschweiften Klammern ¡
oder mit CREATE STRUCT
moglich und enthalt die Angabe eines Namens.
var={struc_name,Tag1:Value1,Tag2:Value2,...,Tagn:Valuen}
var=CREATE_STRUCT(NAME=struc_name,Tag1,Value1,...,Tagn,Valuen)
Beispiel: Definition einer benannten Struktur
var1={data,date:’’,para1:0.0,pic:BYTARR(10,10)}
HELP,var1
VAR1 STRUCT = -> DATA Array[1]
HELP,var1,/STR
** Structure DATA, 3 tags, length=112:DATE STRING ’’
PARA1 FLOAT 0.00000
PIC BYTE Array[10, 10]
Der Strukturname ist data.
Achtung: Die Initialisierung bei date sind zwei einzelne Hochkommata.
Zugriff auf Tags
var1.date=’29.05.95’var1.para1=5.0
Andere Schreibweise der Definition
var3=CREATE_STRUCT( $
name=’neu’,’date’,’’, ’para’,0.0,’pic’,BYTARR(10,10))
Erweiterung einer zuvor benannten Struktur ’neu’ ergibt einen Fehlervar4=CREATE_STRUCT(name=’neu’, $
’date’,’’, ’para’,0.0,’pic’,BYTARR(10,10),’a’,0.)
% Wrong number of tags defined for structure: NEU.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 57/238
5.5. STRUKTUREN 37
5.5.3 REPLICATE bei Strukturen
Mit REPLICATE konnen auch Strukturen als Array generiert werden. var1 ist eine be-
nannte Struktur, die mit REPLICATE vervielfacht wird.
var1={data,date:’’,para1:0.0,pic:BYTARR(10,10)}
var1=REPLICATE(var1,5)
HELP,var1
VAR1 STRUCT = -> DATA Array[5]
HELP,var1[0].date
<Expression> STRING = ’29.05.95’
Duplizieren des Strukturaufbaus
var2={data}
Verknupfen von Strukturen analog zu Feldern mit []
var2=[var2, {data}]
Statt einer IDL Variablen, kann bei REPLICATE ein Strukturname stehen.
var2=REPLICATE( {data} , 3)
5.5.4 Informationen zum StrukturaufbauEs gibt Routinen, um den Aufbau einer Struktur auszugeben.
n=N TAGS(var1) Anzahl Tag-Namen
(nur von der obersten Ebene)
PRINT,n 3
tags=TAG NAMES(var1) Tag-Namen
Ruckgabe der Tag-Namen erfolgt in Groß-
buchstaben
PRINT,tags DATE PARA1 PIC
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 58/238
38 KAPITEL 5. DATENSTRUKTUREN
5.6 Pointer
Pointer in IDL und Sprachen wie C/C++ sind nicht dasselbe. Ein Pointer in C zeigt auf
einen bestimmten Bereich im Speicher. Ein Pointer in IDL zeigt dagegen auf eine spezielle
IDL Heap Variable. IDL stellt den Bereich fur die Pointer Daten bereit.
Der IDL Programmierer braucht sich keine Gedanken uber Speichermanagement zu ma-chen. Man verwaltet selbst keine absoluten Speicheradressen. Der Heap-Speicher wird von
IDL verwaltet. Es ist daher unmoglich, Speicherbereich im Heap zu uberschreiben. Man
kann lediglich die Referenz auf diese Variable verlieren.
Pointer werden in dem Heap-Speicher angelegt. Damit sind die Datenbereiche, die uber
Pointer angesprochen werden, global und damit in jeder Programmeinheit verfugbar.
Es gibt Funktionen zum Anlegen von Pointern, (PTR NEW und PTRARR), eine Funktion
zur Pointer-Freigabe (PTR FREE) und eine Funktion zur Gultigkeitsabfrage des Pointers
(PTR VALID). Diese Funktionen werden auf Seite 39 naher beschrieben. Die Funktionen
SAVE und RESTOREwerden bei Pointern voll unterstutzt. Wenn man die Referenz sichert,
sichert man damit auch den Zugriff auf den Heap-Bereich.Ein Pointer selbst ist eine einfache IDL Variable. Pointer sind uber den Dereferenzierungs-
operator ’*’ ansprechbar. Ein Beispiel steht auf Seite 39.
5.6.1 Anwendungen von Pointern
Der Datentyp Pointer kann in statischen Datenelementen, wie Strukturen, als ein
Platzhalter fur einen dynamisch angelegten Speicherbereich verwendet werden.
Der Datentyp Pointer ist fur die objektorientierte Programmierung, die Widget
Programmierung und die Programmierung mit Strukturen wichtig.
Große Datenmengen konnen uber Pointer-Variablen definiert werden. Da Pointer
global bekannt sind, kann man uber Pointer-Variablen definierte Datenbereiche
ansprechen.
Ein Beispiel dazu steht auf Seite 109, wo nur die Pointer-Variable an das SLICER3-
Tool ubergeben wird.
Verkettete Listen (Trees)
Hinweis:
In der Widget Programmierung, siehe Seite 171, ist WIDGET CONTROL mit
SET UVAULE mit großen Datenmengen sehr langsam. Definiert man den Datenbereich
uber eine Pointer-Variable, lauft die Anwendung viel schneller.
Nullpointer:
Der Nullpointer hat keinen bestimmten bekannten Wert und zeigt auf keine Heap Variable.
Der Nullpointer hat eine Bedeutung als Abschluß bei Datenstrukturen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 59/238
5.6. POINTER 39
5.6.2 Funktionen zur Bearbeitung von Pointern
Die Befehle zum Arbeiten mit Pointern beginnen alle mit PTR. Die wichtigsten Befehle
zum Arbeiten mit Pointern werden beschrieben. Pointer anlegen
pVar=PTR NEW([InitExpr])
– legt einen neuen IDL Pointer an
ohne Argument: Nullpointer ( p=PTR NEW() )
– InitExpr wird benutzt, um Heap Variable zu initialisieren
– Keyword: ALLOCATE HEAP
undefinierte Heap Variable, aber kein Nullpointer.
( p=PTR NEW(/ALLOC) ) Pointer Array mit Nullpointern (nur Dimensionierung!) anlegen
pArr=PTRARR(D1,...,Dn)
– Di sind die Dimensionen des Ergebnisses und konnen skalare Ausdrucke sein.Es sind bis zu 8 Dimensionen moglich.
– Keyword: ALLOCATE HEAP
undefinierte Heap Variable, aber kein Nullpointer. Pointer freigeben
PTR FREE,P1,...,Pn
– PTR FREE zerstort die Heap Variablen, auf die die Pointer Argumente zeigen.
Wenn der Pointer zerstort ist, dann ist die Pointer Variable eine ’dangling refe-
rence’.
a=PTR NEW(23)PRINT,a,*a
<PtrHeapVar1> 23
PTR_FREE,a
PRINT,a,*a
Invalid pointer: A
Gultigkeit von Pointer Argumenten
– Result=PTR VALID(Arg)
Falls True, dann gultig. Dereferenzierungsoperator *
– Anzeigen des Inhalts einer Heap Variablen, die von einer Pointer Variablen
referenziert wird
– Der *Operator muß der Variablen, die dereferenziert werden soll, vorangestellt
werden. Erlaubte Operationen:
– Zuweisung, Dereferenzierung, Vergleich mit EQ oder NE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 60/238
40 KAPITEL 5. DATENSTRUKTUREN
5.6.3 Beispiele mit Pointern
Pointer auf Wert
pvar1=PTR_NEW(5)
HELP,pvar1
PVAR1 POINTER = <PtrHeapVar1>PRINT,*pvar1
5
Nullpointer - es wird keine Heap-Variable angelegt, kann nicht dereferenziert werden.
nptr=PTR_NEW()
HELP,nptr
NPTR POINTER = <NullPointer>
Pointer auf Arrays
vec=FINDGEN(10)
pa=PTR_NEW(vec) ; erstelle eine Pointer-Array
PRINT,*pa ; Ausgabe des Feldes
0 1 2 3 4 5 6 7 8 9
PRINT,TOTAL(*pa),(*pa)[3]
45.0000 3.0000
pb=pa
HELP,pa,pb
PA POINTER = <PtrHeapVar6>
PB POINTER = <PtrHeapVar6>
5.6.4 Empty Pointer
Empty Pointer sind keine Nullpointer. Man kann ein Pointer-Array bzw. eine Pointer-
Variable im Heap anlegen, ohne daß diese einen Wert hat. Die Zuweisung von Werten
kann spater erfolgen.
pa=PTR_NEW(/ALLOCATE_HEAP)
pc=PTRARR(3,/ALLOCATE_HEAP)
Hier erfolgt die Zuweisung von Werten.
*pa=’TEST’FOR i=0,N_ELEMENTS(pc)-1 DO *pc[i]=i
FOR i=0,N_ELEMENTS(pc)-1 DO PRINT,*pc[i]
Hinweis:
Mit ALLOCATE HEAP besteht die Moglichkeit, die entstehenden Pointer mit Werten zu
versehen.
Ohne die Angabe ALLOCATE HEAP entstehen Nullpointer.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 61/238
5.6. POINTER 41
5.6.5 Gultige Pointer
Falls der Pointer existiert, gibt die Funktion PTR VALID den Wert 1 zuruck, sonst 0 (Null-
pointer).
a=PTR_NEW(5)
b=PTR_NEW()c=PTR_NEW(/ALLOCATE_HEAP)
PRINT,PTR_VALID(a)
1
PRINT,PTR_VALID(b)
0
PRINT,PTR_VALID(c)
1
5.6.6 Datenbereich mit Pointer belegen
In dem Beispiel wird ein Bereich von 32 MB angelegt.
bigarray=MAKE_ARRAY(2000,2000,/DOUBLE)
Jeder definierten Variablen kann man einem Pointer zuweisen.
ptrval=PTR_NEW(bigarray)
Bei der Zuweisung wird eine Kopie des Bereiches angelegt und damit doppelt belegt, die
Variable bigarray und die Heap Variable, auf die der Pointer zeigt.
Das Keyword NO COPY verhindert das. Nach dem Anlegen des Pointers ist die Variable
bigarray undefiniert, so daß man den Speicherbereich nur einmal belegt hat.ptrval=PTR_NEW(bigarray,/NO_COPY)
HELP,bigarray
BIGARRAY UNDEFINED = <Undefined>
HELP,ptrval
PTRVAL POINTER = <PtrHeapVar1>
Mehrfache Pointer Referenz
Eine weitere Variable zeigt auf das Array.
ptrval2=ptrval
HELP,ptrval2
PTRVAL2 POINTER = <PtrHeapVar1>HELP,/MEMORY
Mit dem Befehl HELP,/MEMORY kann man uberprufen, wieviel Speicherplatz belegt ist.
Es sind nur 32 MB belegt. Zum Test kann kann man zuvor ein .RESET oder Reset uber
Menu ausfuhren.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 62/238
42 KAPITEL 5. DATENSTRUKTUREN
5.6.7 Pointer auf eine Struktur
Wird ein Pointer auf eine Struktur gelegt, muß man bei der Dereferenzierung darauf achten,
das man nur die Struktur-Variable dereferenziert, wenn man den Wert eines Tags benutzen
mochte.
s={name:’Joe’,age:40,height:177}sptr=PTR_NEW(s)
PRINT,(*sptr).age
40
5.6.8 Pointer in einer Struktur
Wenn man in einer benannten oder anonymen Struktur dynamisch Speicherplatz anlegen
will, muß man statt der Werte Pointer definieren.
Das Beispiel zeigt diese Moglichkeit mit einer benannten Struktur.
ud=’UNDEFINED’
data=CREATE_STRUCT(NAME=’S’, $
’p1’,PTR_NEW(ud),’p2’,PTR_NEW(ud),’p3’,PTR_NEW(ud))
HELP,data,/STR
** Structure S, 3 tags, length=12:
P1 POINTER <PtrHeapVar26>
P2 POINTER <PtrHeapVar27>
P3 POINTER <PtrHeapVar28>
Die Strukturvariable data enthalt drei Tags, deren Werte als Pointer definiert sind. Bei der
Dereferenzierung der Pointer-Variablen eines Tags, steht das Dereferenzierungs-Zeichen
vor dem Variablen Namen der Struktur.
*data.p1=MAKE_ARRAY(100,100,/FLOAT)
HELP,*data.p1
<PtrHeapVar26> FLOAT = Array[100, 100]
*data.p1=INDGEN(100,/FLOAT)
HELP,*data.p1
<PtrHeapVar26> FLOAT = Array[100]
Solange ein Tag nicht mit einem anderem Wert belegt ist, enthalt der Pointer den String
’UNDEFINED’. So kann man leicht herausfinden, ob ein Pointer mit einem anderem Wert
belegt ist oder nicht.
Hinweis:
Der Pointer in der Struktur ist ein Platzhalter, um dynamisch Speicherbereiche anzulegen!
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 63/238
5.6. POINTER 43
5.6.9 Pointer auf eine Struktur und Pointer in der Struktur
Eine Struktur kann Pointer enthalten und die Struktur selbst kann auch ein Pointer sein.
ud=’UNDEFINED’
data=PTR_NEW(CREATE_STRUCT(NAME=’S’, $
’p1’,PTR_NEW(ud),’p2’,PTR_NEW(ud),’p3’,PTR_NEW(ud)))
HELP, data
DATA POINTER = <PtrHeapVar8>
HELP, *data
PtrHeapVar4> STRUCT = -> S Array[1]
HELP, *data, /STR
** Structure S, 3 tags, length=12, data length=12:
P1 POINTER <PtrHeapVar1>
P2 POINTER <PtrHeapVar2>
P3 POINTER <PtrHeapVar3>
Mit der Dereferenzierung der Variablen data sieht man, daß diese Variable eine Struktur
enthalt. Mit der zusatzlichen Angabe des Keywords /STR werden die Tags der Struktur
gelistet. Die Werte der Tags liegen als Pointer vor.
HELP,*(*data).p1
<PtrHeapVar1> STRING = ’UNDEFINED’
HELP,(*(*data).p2)
<PtrHeapVar2> STRING = ’UNDEFINED’
Die Dereferenzierung auf der Tag-Ebene muß durch zweifache Anwendung des
Dereferenzierungs-Operators geschehen. Eine Unterscheidung auf die verschiedenen Poin-
ter erreicht man durch die Klammerung der verschiedenen Variablen. Die beiden oben ste-
henden Schreibweisen sind aquivalent. Die zweite Schreibweise ist eine deutlichere Ver-
anschaulichung dieser Abhangigkeiten.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 64/238
44 KAPITEL 5. DATENSTRUKTUREN
5.6.10 Pointer freigeben
Pointer freigeben und Heap Bereich loschen
a=PTR_NEW(5)
PTR_FREE,a
HELP,aA POINTER = <PtrHeapVar7>
PRINT,PTR_VALID(a)
0
Der Heap-Bereich wird geloscht. Um das zu prufen, benutzt man die Funktion
PTR VALID. Der freigegebene Pointer wird zum Nullpointer.
Hinweis:
PTR VALID() listet alle Pointer
Ein PTR FREE, PTR VALID() loscht dann alle Pointer in einem Befehl.
5.6.11 HEAP GC Heap garbage collection
Der Zugriff auf einen Pointer kann schnell verloren sein. Wenn z.B. ein Pointer in einem
Unterprogramm angelegt, aber nicht an das aufrufende Programm weitergegeben wird oder
wenn eine Pointer-Variable auf einen anderen Wert gesetzt wird. Eine Variable konnte mit
DELVAR bzw. TEMPORARY geloscht werden.
a=PTR_NEW(5) & a=0
Der Zugriff auf den Heap-Bereich ist dann nur noch durch garbage collection oder durch
Verlassen von IDL moglich.
HEAP GC ist der Befehl fur Heap garbage collection.
Freigeben von Heap Memory, der nicht mehr ansprechbar ist.
HEAP GC durchsucht alle IDL Variablen nach Pointer und Objekt Referenzen und
zerstort die Heap Variablen, die nicht mehr ansprechbar sind. Die Pointer Heap
Variable (bzw. Objekt Heap Variable) wird zerstort und der Speicherplatz, den sie
belegt, wird freigegeben.
Hinweis:
Man sollte Anwendungen so schreiben, daß man zuvor uberpruft, ob man einen gultigenPointer bearbeitet (PTR VALID). Am Ende der Anwendungen sollte der Speicher mit den
normalen Speicherfreigabe Routinen (PTR FREE) aufgeraumt werden.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 65/238
5.6. POINTER 45
5.6.12 Beispiel mit Pointern
Vorgegeben sind einige Datasets in Form von Strukturen
Diese und einige Datasets, die dynamisch zur Laufzeit erstellt werden, sollen zu-
sammengefugt werden in ein Pointer Array eine verkettete Pointer Liste (indem man einen Pointer Tag auf den nachsten Daten-
satz in der Struktur zufugt)
dataset1 =
time : INDGEN(150,/FLOAT), $
data : COS(INDGEN(150,/FLOAT)/10.0) , $
attr : ’cosinus’¡
dataset2 =
time : INDGEN(100,/FLOAT), $
data : SIN(INDGEN(100,/FLOAT)/20.0) , $
attr : 1000L¡
dataset3 =
time : INDGEN(100,/FLOAT), $
data : TAN(INDGEN(100,/FLOAT)/20.0) , $
attr : ’tangens’¡
dataset4 = dataset3
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 66/238
46 KAPITEL 5. DATENSTRUKTUREN
Es gibt zwei L osungen Die Losungen werden exemplarisch skizziert. Pointer Array
Pointer auf Strukturen zuweisen
IDL nahe L osung siehe ptrvec.pro
arr_ptr= PTRARR(3, /ALLOCATE_HEAP)*arr_ptr[0] = dataset1
*arr_ptr[1] = dataset2
*arr_ptr[2] = dataset3
data_ptr = PTR_NEW(dataset4)
arr_ptr = [arr_ptr, data_ptr] ; Verketten
; Pointer Array erweitern
Link List
Verknupfen, indem man einen Pointer in die Struktur schreibt. Dieser zeigt auf den
nachsten usw.Man braucht sich nur den ersten Pointer zu merken.
C nahe Losung siehe ptrlink.pro
dataset1 =
time : INDGEN(150,/FLOAT), $
data : COS(INDGEN(150,/FLOAT)/10), $
attr : ’cosinus’, $
data_ptr: PTR_NEW()¡
ptr1 = PTR_NEW(dataset1)
dataset2 = ...
ptr2 = PTR_NEW(dataset2) ; Defreferenzieren bei
(*ptr1).data_ptr=ptr2 ; Strukturen mit *....
actualptr = ptr1
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 67/238
5.6. POINTER 47
5.6.13 Ubungen
Die Losungen zu den Ubungen findet man im Anhang auf Seite 201.
1. Erstelle eine Struktur mit einer Farbzuordnung der ersten 9 Farben von TEK COLOR,
siehe Online Hilfe. Diese Struktur soll mit der Start-Up-Datei initialisiert werden.
Optional soll sie auf der System Variablen F definiert werden.
2. Vorgegeben sind:
data=[[’0.000000’,’0.841471’,’0.909297’,’0.141120’,$
’-0.756802’,’-0.958924’,’-0.279415’,’0.656987’,$
’0.989358’,’0.412118’],$
[’0.000000’,’1.00000’,’2.00000’,’3.00000’,$
’4.00000’,’6.00000’,’5.00000’,’7.00000’,$
’8.00000’,’9.00000’]]
Aus dem String-Array sollen zwei Vektoren gebildet werden. Die erste Datenzeile
soll als Float, die zweite Datenzeile soll als Integer wiedergegeben werden.
3. Zwei Datenfelder sollen verknupft werden
a=MAKE_ARRAY(10,/INDEX,/FLOAT)
b=MAKE_ARRAY(2,value=-40.0)
Verknupfung in der Reihenfolge a,b Nach dem funften Element von a soll der Vektor b eingefugt werden.
4. Bilde einen Vektor von Jahreszahlen von 1990 bis 2010, ohne arithmetische Ope-
rationen zu verwenden.
5. Speichere mindestens 3 Systemvariablen in einer Struktur.
6. Erstelle ein Pointer-Array mit den Variablen:a=’Dies ist ein Beispiel’
b=SYSTIME(1)
c={Farbe:’rot’}
7. Gegeben sind:
a=MAKE_ARRAY(20,2)
b=MAKE_ARRAY(/INDEX,20,2)
Verknupfe a und b, so daß ein Feld der Große [40,2] entsteht. Verknupfe a und b, so daß ein Feld der Große [20,4] entsteht.
8. Bilde die nachfolgenden Felder 1-dimensional ab.a=MAKE_ARRAY(10,10,3)
b=MAKE_ARRAY(1,10)
9. Bei dem vorgegebenen Feld sollen die Daten transponiert werden (Spiegelung ent-
lang der Diagonalen).
a=MAKE_ARRAY(/INDEX,10,2)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 68/238
48 KAPITEL 5. DATENSTRUKTUREN
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 69/238
Kapitel 6
Arbeiten mit Datenstrukturen
6.1 IDL Operatoren
Daten werden durch Operatoren verknupft.
Klammern (): bei Funktionsargumentlisten, Spezifizierung der Ordnung bei
Ausfuhrung Alle IDL Operatoren konnen auf mehrdimensionale Felder angewendet werden:
arr=arr-100
arr=arr+(2*!PI) Boolsche Ausdrucke
AND, OR, NOT, XOR Vergleichsoperatoren
EQ, NE, LE, LT, GE, GT
Beispiel:
A=7
PRINT, A GT 3, A EQ 7
1 1 Mathematische Operatoren
=, +, - , *, /, ˆ(caret, Exponentiation), MOD (Divisionsrest) Matrixmultiplikation
# (Spalte der ersten Matrix mit Zeile der zweiten Matrix)
## (echte Matrixmultiplikation! Zeilen der ersten Matrix mit Spalten der zweitenMatrix)
Minimum ’
’ und Maximum ’¡
’ Operator:
Verwendung bei Bildern, Kontrast!
Beispiel:
x=[5,10,20] > [6,9,30] &
PRINT,x
ergibt: 6 10 30
49
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 70/238
50 KAPITEL 6. ARBEITEN MIT DATENSTRUKTUREN
6.2 Wertzuweisung bei Variablen
Wertzuweisungen werden mit dem mathematischen Operator = vorgenommen.
value=16/5 Integer-Division, value=3
value=16/5. 3.2vektor=[1,3,5] Vektor mit drei Elementen
array=INTARR(100,100) Integer-Feld mit 100*100 Werten mit dem Wert 0.
array=array+1 Jedes Element wird um 1 erhoht.
array=1. Achtung: Integer Feld der vorigen Anweisung bzgl.
Typ und Bedeutung dynamisch verandert! array ist
ein Skalar mit dem Typ FLOAT.
6.2.1 Wertzuweisung bei mehrdimensionalen Feldern
Bei der Zuweisung mehrdimensionaler Felder wird die letzte Dimension entfernt, wenndiese 1 ist.
Beispiel:
a=INDGEN(10,10,10,/LONG)
b=a[*,*,5]
HELP,b
B LONG = Array[10, 10]
c=REFORM(b,10,10,1)HELP,c
C LONG = Array[10, 10, 1]
d=c
HELP,d
D LONG = Array[10, 10]
Hinweis:
Mit REFORM kann man die letzte Dimension mit 1 erzwingen. Jedoch wird diese bei
einer weiteren Wertzuweisung geloscht.
a=INDGEN(10,10,10,/LONG)
b=REFORM(a,1000)
HELP,b
B LONG = Array[1000]
Hinweis:
Mit REFORM kann man mehrdimensionalen Arrays in einen Vektor andern.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 71/238
6.3. WARNUNG VOR INTEGER-OVERFLOW 51
6.3 Warnung vor Integer-Overflow
Beim Arbeiten mit Variablen muß man den Wertebereich der Zahlen berucksichtigen. Ein
Problem wird im nachfolgendem Beispiel beschrieben.
b=5000
PRINT,10*b
Das Ergebnis ist eine negative Zahl!
b=5000L
PRINT, 10*b
Wenn b als Long Integer definiert wird, ist das Ergebnis richtig.
Hinweis:
Prozessor fangt Integer-Overflow nicht ab (liegt nicht an IDL!)
6.4 Speicherplatzverwaltung
Bei der Arbeit mit großen Datenmengen, die gerade noch in das RAM des Rechners passen,
werden in IDL die Operationen langsam. Bezuglich des Speicherplatzes ist folgendes zu
beachten:
A=A+1 Speicherplatz doppelt notwendig, weil ein neues Feld fur
das Ergebnis der Addition angelegt wird.
A=TEMPORARY(A)+1 Wenn man statt A=A+1 im obigen Beispiel die
TEMPORARY-Funktion verwendet, erfordert dies kei-nen zusatzlichen Speicherplatz. Man arbeitet mit einer
temporaren Kopie, wahrend die Variable selbst”
undefined“
gesetzt wird.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 72/238
52 KAPITEL 6. ARBEITEN MIT DATENSTRUKTUREN
6.5 L oschen von Variablen
Eine Variable bleibt solange gultig, bis sie neu definiert oder mit DELVAR oder
TEMPORARY geloscht wird.
Hinweis:
Einschr ankung: DELVAR funktioniert nur im MAIN! Die Erklarung zu MAIN-
Programmen folgt auf Seite 139.
Eine allgemeine Losung laßt sich mit der TEMPORARY-Funktion oder einer Wertzuwei-
sung realisieren.
Beispiel:
a=MAKE_ARRAY(2000,/LONG)
dummy=TEMPORARY(a)
dummy=0
HELP,dummy
DUMMY INT = 0
HELP,a
A UNDEFINED = <Undefined>
a ist undefined und dummy enthalt alle Werte von a. Wenn dummy dann auf den Wert 0
gesetzt wird, hat dummy nur noch diesen einen Wert.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 73/238
6.6. EFFIZIENTES ARBEITEN MIT FELDERN 53
6.6 Effizientes Arbeiten mit Feldern
6.6.1 Vorteil von Feld-Operationen
IDL ist eine Array-orientierte Sprache. Operationen auf Felder sind erheblich schneller als
Index-orientiertes Arbeiten. Daher sollte man die Programmierung von Schleifen vermei-den.
FOR j=0,n-1 DO $
IF b[j] GT 0 THEN a[j]=a[j] + b[j]
schneller: a = a + ( b GT 0 ) *b negative Werte maskieren!
noch schneller: a = a + ( b¡
0)”
GT“ Operator, weniger Feld-Operationen
Zum Vergleich der Laufzeiten wurden die oben stehenden Beispiele in IDL-Code umge-
setzt. Mit der IDL-Routine SYSTIME wird die Laufzeit gemessen.
PRO feld_op
n = 100000L
a = FLTARR(n)
b = FLTARR(n) - n/2.0
t1 = SYSTIME(1)
FOR j=0L, n-1 DO $IF b[j] GT 0 THEN a[j] = a[j] + b[j]
t1 = SYSTIME(1)-t1
PRINT, ’for=’, t1, FORMAT=’(a,f10.8)’ ; 0.325 sec
t2 = SYSTIME(1)
a = a + ( b GT 0 ) * b
t2 = SYSTIME(1)-t2
PRINT, ’gt =’, t2, FORMAT=’(a,f10.8)’ ; 0.045 sec
t1 = SYSTIME(1)a = a + ( b > 0 )
t1 = SYSTIME(1)-t1
PRINT, ’ > =’, t1, FORMAT=’(a,f10.8)’ ; 0.023 sec
END
Beispiel 6.1: Datenstrukturen: Vorteil von Feld-Operationen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 74/238
54 KAPITEL 6. ARBEITEN MIT DATENSTRUKTUREN
6.6.2 Geschickte Klammerung
data=MAKE_ARRAY(50,20,/FLOAT)
data ist ein Array
new = data * SIN(1.12) / COS(3.0)
Schlecht, da fur jedes Element von data der Quotient gebildet werden muß.
new = data * (SIN(1.12) / COS(3.0))
Gut, da nur einmal der Quotient gebildet werden muß. Der Quotient wird mit jedem Ele-
ment von data multipliziert.
6.7 Einstellung von Compiler Optionen
Durch Compiler Optionen werden Voreinstellungen fur den Compiler getroffen.
COMPILE_OPT STRICTARR, DEFINT32
STRICTARR erlaubt nur eckige Klammern bei Arrays.
DEFINT32 nimmt Integer Konstanten defaultmaßig als 32 Bit statt als 16 Bit. IDL
hat als Default 16 Bit.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 75/238
6.8. FILTERN VON DATEN 55
6.8 Filtern von Daten
Zum Filtern von Daten gibt es eine Vielzahl von Funktionen. Alle diese Funktionen geben
ein Feld mit Indices zuruck.
6.8.1 WHERE-Funktion
Mit WHERE werden Daten in Abhangigkeit einer Bedingung gefiltert. Als Ergebnis erhalt
man die Indices der Daten, die die Bedingung erfullen.
arr=INDGEN(15,/BYTE)
ind = WHERE( arr LE 10b AND arr GE 5b )
arr[ind] =255b
PRINT,arr
0 1 2 3 4 255 255 255 255 255 255 11 12 13 14
oder kurzer!
arr[WHERE( arr LE 10b AND arr GE 5b)] = 255b
PRINT,arr
0 1 2 3 4 255 255 255 255 255 255 11 12 13 14
Hinweis:
WHERE ist eine sehr machtige Funktion, die auch bei der Bildverarbeitung wichtig ist!
Wichtig ist das Argument COUNT, womit man prufen kann, ob Indices gefunden wurden,
siehe Beispiel bei Bildverarbeitung, Seite 118.
6.8.2 Verwendung der Funktionen MIN, MAX, SORT und UNIQ
Die Funktionen MIN, MAX, SORT und UNIQ sind weitere Funktionen, um Daten zu filtern.
6.8.2.1 SORT
Die SORT-Funktion gibt einen Vektor mit Indices zuruck. Diesen Vektor kann man dazuverwenden, um ein Feld in aufsteigender Reihenfolge zu sortieren.
vec=[9,7,1,10,0]
idx=SORT(vec)
PRINT,idx
4 2 1 0 3
PRINT,vec[idx]
0 1 7 9 10
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 76/238
56 KAPITEL 6. ARBEITEN MIT DATENSTRUKTUREN
Jeder Typ von Daten kann sortiert werden, z.B auch Strings.
vec=[’b’,’ab’,’abc’,’ba’,’aaa’]
idx=SORT(vec)
PRINT,vec[idx]
aaa ab abc b ba
6.8.2.2 MIN und MAX
Die MIN-Funktion ermittelt den kleinsten Wert eines Feldes. Entsprechend ermittelt die
MAX Funktion den großten Wert.
Mittels der benannten Variablen der MIN- und MAX-Funktion MIN SUBSCRIPT und
MAX SUBSCRIPT kann man die Indices des Minimums oder Maximums eines Feldesbestimmen.
vec=[9,7,1,10,0]
mi=MIN(vec,MIN_SUBSCRIPT)
PRINT, mi
0
PRINT,MIN_SUBSCRIPT
4
Das Minimum hat den Wert 0 und den Index 4.
vec=[9,7,1,10,0]
ma=MAX(vec,MAX_SUBSCRIPT)
PRINT, ma
10
PRINT,MAX_SUBSCRIPT
3
Das Maximum hat den Wert 10 und den Index 3.
6.8.2.3 UNIQ
Die UNIQ-Funktion ermittelt die Indices von Werten eines Feldes. Mehrfach vorkommen-
de Werte werden nur einmal berucksichtigt. Dies kann an einem Beispiel einfach erklart
werden.
vec=[’Jan’,’Feb’,’Feb’,’Mar’]
idx=UNIQ(vec)
PRINT,idx
0 2 3
PRINT,vec[idx]Jan Feb Mar
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 77/238
6.9. UBUNGEN 57
6.9 Ubungen
Die Losungen zu den Ubungen findet man im Anhang auf Seite 203.
1. Erstelle einen Vektor mit Integer-Zahlen von 2000 bis 2010
2. Feld als Index fur andere Feldera = [ 7 , 8 , 1 , 2 , 5 , 5 ]
b = [ 0 , 5 , 3 , 4 ]
was ergibt: PRINT, a[b]
3. Addiere folgende Strings zu einem neuen String str
str1=’Idl ist’
str2=’ eine starke Sprache’
4. Bilde alle alphabetischen Zeichen in einem STRING-Vektor ab. Das Ergebnis soll
ein String-Vektor der Lange 26 mit der Anordnung: Aa Bb bis Zz sein.
5. Gegeben sind zwei Vektoren.a=[-1,-1,-1,-999,-999,-1,-1,-999,-1]
b=[-999,-999,-999,-999,-1]
Bestimme die Indices der Werte -999 bei den beiden Vektoren und ersetze diese
durch den Wert +999.
6. Nachfolgendes Feld soll sortiert werden. Danach sollen alle doppelt vorkommenden
Werte durch einen Wert ersetzt werden.
a=[1,1,1,2,1,2]
7. Ein Array der Dimension [10,2] soll in ein Struktur-Array gespeichert werden.
Die Struktur hat 2 Tags: x und y mit dem Typ FLOAT. Das Struktur-Array hat die
Dimension 10.
x soll den ersten Vektor enthalten und y den zweiten Vektor. Danach sollen alle Werte
bei y kleiner 5 in eine andere Struktur umgespeichert werden.
data=[[’0.000000’,’0.841471’,’0.909297’,’0.141120’,$
’-0.756802’,’-0.958924’,’-0.279415’,’0.656987’,$
’0.989358’,’0.412118’],$
[’0.000000’,’1.00000’,’2.00000’,’3.00000’,$
’4.00000’,’6.00000’,’5.00000’,’7.00000’,$
’8.00000’,’9.00000’]]
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 78/238
58 KAPITEL 6. ARBEITEN MIT DATENSTRUKTUREN
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 79/238
Kapitel 7
Einbettung ins Betriebssytem
7.1 Umgebungs-Variablen
Um beim Start von IDL bestimmte Einstellungen zu definieren, verwendet man die vom
Betriebssytem zur Verfugung gestellten Umgebungs-Variablen. Mit GETENV liest man
Umgebungs-Variablen und mit SETENV schreibt man in Umgebungs-Variablen.
7.1.1 Umgebungs-Variablen des Betriebssystems
IDL PATH aquivalent zu !PATH (IDL Libraries)
IDL DIR aquivalent zu !DIR (IDL Directory)
LM LICENSE FILE Pfad fur Lizenzfile
IDL STARTUP Startup File = Batch-Datei,
wird beim Aufruf von IDL durchlaufen
USER Username unter Unix
USERNAME Username unter Windows
Hinweis:
Die Abfrage des Usernamens kann dazu verwendet werden, um Daten in Benutzer spezi-fische Verzeichnisse zu speichern.
59
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 80/238
60 KAPITEL 7. EINBETTUNG INS BETRIEBSSYTEM
7.2 Wechsel zum Betriebssystem (Unix, Windows)
Mit den im folgenden beschriebenen Befehlen kann man von IDL aus zum Betriebssystem
wechseln oder Informationen abfragen.
Mit vorangestelltem $ kann man ein Unix Kommando von der IDL-Command-Line
ausfuhren.
$ ls
oder
$ pwd
Im Command-Line Interface zu IDL kann man den SPAWN Befehl verwenden, um
in das Betriebssystem zu wechseln. Eine Shell wird als child process gestartet. Es konnen
dann Befehle abgesetzt werden. Mit dem Befehl EXIT gelangt man zuruck zu IDL.
Der SPAWN Befehl kann auch in einem IDL Programm aufgerufen werden. Bei dieser Artder Anwendung gibt man das auszufuhrende Kommando und eine Variable als Argument
an die SPAWN Funktion weiter. Das Ergebnis wird in dieser Variable zuruckgegeben.
Beispiel:
SPAWN ,command[,result]
SPAWN,’ls’,result
PRINT,result
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 81/238
Kapitel 8
Hilfe, Sicherung
8.1 Die Hilfe-Routine von IDL
Um Variablen oder Eigenschaften der IDL Sitzung abfragen zu konnen, verwendet man
das HELP Kommando.
HELP Info uber Variablen und kompilierte Funktionen
HELP, data Info uber Variable mit Namen data
HELP, NAMES=’A*’ Info uber Variablen, die mit A anfangen
HELP, /ROUTINES Liste der kompilierten Funktionen
HELP, /FILES Info uber Dateien
HELP, /DEVICE Info uber das aktuelle graphische Device
HELP, /RECALL COMMANDS letzte 20 Kommandos
(oder
Taste)
HELP, /SYSTEM VARIABLES Info uber Systemvariable
HELP, OUTPUT=result liefert String-Array result , mit allen bis zu dem
Zeitpunkt gesetzten Variablen. Information kann
weiter verarbeitet werden!
HELP, /MEMORY genutzter Hauptspeicher
HELP, /SOURCE bereits kompilierte Routinen werden gelistet
61
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 82/238
62 KAPITEL 8. HILFE, SICHERUNG
8.2 Save und Restore einer IDL-Sitzung, IDL- Binary
Mit SAVE kann man Daten in IDL Sitzungen sichern. Das Datenformat ist unabhangig von
Plattform und Version.
SAVE [,var1,var2,...varn] ;Variablen sind optionalKeywords:
FILENAME=’savename.dat’
Speichern oder Lesen unter dem angegebenem Namen ALL
alle lokalen Variablen, System-Variablen, Common Blocke
Achtung: Versions Probleme System-Variable andern sich schon mal von Version
zu Version. VARIABLES
Sinnvoller als das Keyword ALL ist es, alle Variablen zu sichern. ROUTINES
alle ubersetzten Programme der aktuellen IDL-Sitzung in Binarform. Die
Ausfuhrung binarer Programme ist schneller! Die Nutzung von Runtime Lizenzen
ist auf Seite 14 beschrieben. SYSTEM VARIABLES
Vorsicht: Bei Versions-Wechsel kann sich Struktur andern XDR (entspricht Standard: Unix + Windows)
wichtig fur plattformunabhangiges Programmieren COMPRESS
ZLIB KompressionHinweis:
Gibt man keinen File-Namen an, lautet der Default Save- bzw. Restore-Name: idlsave.dat.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 83/238
8.2. SAVE UND RESTORE EINER IDL-SITZUNG, IDL- BINARY 63
Beispiel: Alle Variablen sichern
SAVE,/VARIABLES,FILENAME=’daten.dat’
; reset IDL
.RESET_SESSION
; Restore der gesicherten Daten
RESTORE, FILENAME=’daten.dat’
Beispiel: zwei Variablen sichern
a=1
b=10.0
SAVE,a,b,FILENAME=’daten.dat’
.RESET_SESSION
; Restore der gesicherten Sitzung
RESTORE, FILENAME=’daten.dat’
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 84/238
64 KAPITEL 8. HILFE, SICHERUNG
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 85/238
Kapitel 9
Definitionen zur Datenausgabe
9.1 Koordinatensysteme
Es gibt drei definierte Koordinatensysteme (Normal-, Daten- und Device-Koordinaten).
Diese sind mit den Keywords: /NORMAL, /DATA und /DEVICE, zuordbar.
DATA Die Datenkoordinaten sind die Default-Koordinaten. Die Benutzerdaten
werden als Datenwerte interpretiert.
NORMAL Im normalisierten Koordinatensystem konnen Werte zwischen (0,0)
und (1,1) angegeben werden.
Die Verwendung von normalisierten Koordinaten wird fur die relative
Positionierung benotigt.
DEVICE Beim DEVICE-Koordinatensystem handelt es sich um die physikalische
Koordinaten des graphischen Gerates. Diese werden graphisch orientiert
in Pixeln angegeben. Das Minimum ist (0,0) und das Maximum ist
begrenzt durch die maximale Anzahl Pixel des graphischen Ausgabe-
gerates. Die System-Variablen: !D.X SIZE, !D.Y SIZE enthalten die
jeweils maximale Anzahl Pixel.
Abhangigkeit: Bildschirm bzw. Drucker
Hinweis:
Alle Koordinatensysteme sind gleichzeitig vorhanden.
65
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 86/238
66 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
9.2 Zeichens atze
Fur die Ausgabe von Zeichenketten gibt es Steuerzeichen, mit denen die Darstellung
z.B. mathematischer Zeichen erfolgt. Ein anderer Typ von Steuerzeichen gestattet die
Positionierung nachfolgender Zeichen (Subscripts, Superscripts).
Die Steuerzeichen werden in den Text eingefugt und beginnen mit ’!’. Zur Darstellung des! als Textzeichen wird ’!!’ im Text eingefugt.
Auswahl eines Fonts
Weitere Informationen hierzu im User’s Guide: Tabellen aller Fonts
Steuerzeichen Bechreibung
!3 Simplex Roman (Default)
!4 Griechisch
!12 Simplex Script
!9 oder !M Mathematisch
!X Kehre zum ursprunglichen Font zuruck
Tabelle 9.1: Definitionen zur Datenausgabe: Auswahl eines Fonts
Positionieren von Zeichen
Steuerzeichen Beschreibung
!C Fugt einen Zeilenumbruch ein.
!E Die folgenden Zeichen werden auf Exponentenhohe geschrieben undum den Faktor 0.44 verkleinert.
!I Die folgenden Zeichen werden auf Indexhohe geschrieben und um
den Faktor 0.44 verkleinert.
!N Auf Normalhohe und ursprungliche Zeichengroße zuruckstellen.
!D Die folgenden Zeichen werden tiefgestellt und um den Faktor 0.62
verkleinert.
!U Die folgenden Zeichen werden hochgestellt und um den Faktor 0.62
verkleinert
!! Darstellen des Symbols !
!A Die folgenden Zeichen werden oberhalb des Bruchstrichs plaziert
!B Die folgenden Zeichen werden unterhalb des Bruchstrichs plaziert
Tabelle 9.2: Definitionen zur Datenausgabe: Positionieren von Zeichen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 87/238
9.2. ZEICHENSATZE 67
9.2.1 Auswahl eines Fonts
IDL kennt drei Typen von Fonts: Vektor-, Truetype- und Hardware-Fonts. Vektor-Fonts (Hershey)
XYOUTS,400,300,’!12Simplex !4 Greek!X’,/DEVICE
Mit”
!Fontindex“ bekommt man die Hershey-Fonts. Mit einem erneuten”
!Fontin-dex“ mit einer anderen Fontnummer bewirkt man einen Fontwechsel. !X nimmt
den Font zuruck. Einige Formatierungsangaben wie Indices oder Subscripts sind
moglich, siehe vorstehende Tabelle. Hardware Fonts
– Keyword Font=0 oder System-Variable!P.Font=0
– Auswahl auch uber Keywords bei DEVICE moglich
z.B. DEVICE,/TIMES result=XFONT()
Oberflache, mit der man interaktiv alle X-Fonts ansehen und ausprobieren kann.
PS SHOW FONTS
Eine PostScript Datei idl.ps wird erstellt. Dabei wird jeder Font auf einer Seite ge-
listet. Zusatzlich werden die Namen aller PostScript-Fonts, die IDL kennt, gelistet.
Beispiele:
str1=’Zeile1!CZeile2’
XYOUTS, 0.1, 0.2,str1, /NORMAL, CHARSIZE=2.5
Resultat:
str2=’A!EB !N* C!ID’
XYOUTS, 0.1, 0.4, str2, /NORMAL, CHARSIZE=2.5
Resultat:
str3=’!4abcde !9abcde !Xabcde’
XYOUTS, 0.1, 0.2, str3, /NORMAL, CHARSIZE=2.5
Resultat:
Griechische, mathematische und normale Schrift
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 88/238
68 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
9.3 Farbtabellen
Zur Ausgabe farbiger Bilder werden Farbtabellen benotigt. Es gibt eine Reihe vordefinier-
ter Farbtabellen, die auf dem RGB-Modell basieren. Die Generierung eigener Farbtabellen
ist moglich.
9.3.1 Laden von Farbtabellen
DEVICE,DECOMPOSED=0 Um True Color Darstellungen in Direct Color umzudefi-
nieren
LOADCT,5 Laden einer vordefinierten Farbtabelle mit Index 5 (STD
GAMMA II)
XLOADCT Widget, das alle vordefinierten Farbtabellen anzeigt
XPALETTE Widget, das die Farb-Palette darstellt. Die Farb-Palette ist
modifizierbar.
TEK COLOR Die ersten 32 Farben der angezeigten Farbpalette sind in jedem Falle fur das Auge unterschiedlich und damit als
Index fur unterschiedliche Farben fur verschiedene Plot-
kurven zu gebrauchen.
TVLCT,r,g,b,/GET Lesen einer Farbtabelle.
liefert die Vektoren r,g,b der Lange 256 (bei 8 Bit Far-
ben und DEVICE, DECOMPOSED=0)
mit den aktuellen Werten der geladenden Farbtabelle.
TVLCT,r,g,b Schreiben einer Farbtabelle
Die Vektoren r,g,b, die je 256 Byte-Werte enthalten, re-
prasentieren die neue FarbtabelleMODIFYCT Speichern der Farbtabelle colors.tbl($HOME)
Die Standardtabelle liegt unter:
/usr/local/idl/idl/resources/colors
Beispiel mit TEK COLOR
TEK_COLOR
c = INDGEN(256,/BYTE)
d = BYTARR(20)+1b
TV, c#d
Abbildung 9.1: Definitionen zur Darstellung: Beispiel mit TEK COLOR
Die Verknupfung c#d generiert ein Array der Große [256, 20], welches in der er-
sten Spalte die Zahl 0, in der zweiten Spalte 1 usw. bis 255 enthalt. Da die Funktion
TEK COLOR aufgerufen wurde, sind die ersten 32 Farben in jedem Falle unterschiedlich.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 89/238
9.3. FARBTABELLEN 69
9.3.2 Arbeiten mit Farben
Folgende Hinweise sind zum Arbeiten mit Farben wichtig.
RGB bezeichnet die Rot-Grun-Blau Farbtabelle. Jeder Anteil einer Farbe liegt
zwischen 0 und 255.
z.B. Farbe Rot = 255, 0, 0
True Color Display
DEVICE,DECOMPOSED=0
Begrenzung der Anzahl von Farben
– PRINT, !D.TABLE SIZE
– HELP, /DEVICE
– funktioniert nur in Start-Up Datei
WINDOW, COLORS = 128WINDOW, COLORS = -8
nutze alle Farben - davon 8 fur Shared Color Map
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 90/238
70 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
9.4 Steuerung der Ausgabe und Ausgabeger ate
Es werden verschiedene Ausgabegerate zum Darstellen von Bildern unterstutzt. Die
Bildschirmausgabe erfolgt unter einem Unix-System im X-Device, unter Windows im
WIN-Device. Eine vollstandige Liste aller Devices findet man in der Online-Hilfe unter
dem Stichwort Supported Devices.
Eine druckbare Ausgabe kann als PostScript-Datei angelegt werden. Zu dem Zweck wahlt
man das Device PostScript.
Alle genannten Devices (X, WIN, PS) werden mit dem Befehl SET PLOT angesteuert.
Normalerweise wird ein Bild pro Seite dargestellt und zwar unabhangig von der Art
des gewahlten Devices. Zur Darstellung mehrerer Bilder auf einer Seite gibt es mehrere
Moglichkeiten, die im folgenden Kapitel, siehe Seite 71, beschrieben werden.
9.4.1 Ausgabe SET PLOT, Optionen:
Mit SET PLOT wird das Ausgabegerat festgelegt.
CGM Computer Graphic Metafile
HP HP- GL
LJ IDL unter VMS LJ250, LJ252 DEC Drucker
PCL HP-PCL
PS Postscript
Sun Sun Console
Tek Tektronix Terminal
X X Window System
Win PC
Mac Mac DEVICE, Optionen:
Nach der Auswahl des Ausgabegerates mit dem SET PLOT kann man mit dem
DEVICE-Befehl weitere Einstellungen vornehmen.
– FILENAME
– LANDSCAPE oder PORTRAIT
– XOFFSET, YOFFSET, XSIZE, YSIZE
– FONTS
– COLOR
– ENCAPSULATED
Die Option sollte verwendet werden, wenn die PostScript-Datei in ein Doku-
ment eingebunden werden soll.
– CLOSE
Die Ausgabe auf das Ausgabegerat wird beendet. Bei Ausgabe in eine
PostScript-Datei wird diese abgespeichert.
Information uber die Eigenschaften des Devices
– HELP, /DEVICE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 91/238
9.4. STEUERUNG DER AUSGABE UND AUSGABEGER ATE 71
9.4.2 Ausgabe mehrerer Bilder
Bei Bildschirmausgabe (X, WIN) wird mit dem ERASE-Befehl die Ausgabe des aktuellen
Fensters geloscht. Bei Postscript (PS) bedeutet der ERASE-Befehl einen Seiten Vorschub
(einfugen eines showage).
Die Bildschirmausgabe kann in mehreren Fenstern erfolgen, siehe Seite 74.
9.4.3 Positionieren von Bildern
Fur die Positionierung von Bildern gibt es mehrere Moglichkeiten: Die Zeichenflache wird in gleichgroße Teile aufgeteilt (!P.MULTI) Eine Positionsangabe
– selektiv beim jeweiligen Ausgabebefehl
(PLOT, CONTOUR, SURFACE,...).
Die Positionsangabe gilt dann nur fur diesen einen Befehl.
– global durch eine Systemvariable !P.POSITION
Die Positionsangabe gilt dann fur jede Ausgabe. Images werden mit dem TV-Befehl dargestellt, siehe Seite 119. Beim TV-Befehl gibt
es einen Index, der fortlaufend von 0,1,2.. hochgezahlt wird. Die Bilder werden
dann von links nach rechts und von oben nach unten in den definierten Ausgabebe-
reich geschrieben.
Zusatzlich gibt es eine Positionsangabe mit zwei Parametern, die die Position fur
den Startpunkt des Bildes angeben. Die Positionierung von Bildern ist auf Seite 120
beschrieben.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 92/238
72 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
9.4.3.1 Aufteilung der Zeichenfl ache in gleich große Teile
Durch Definition der Systemvariablen !P.MULTI ist es moglich, eine Bildflache in gleich
große Abschnitte aufzuteilen.
!P.MULTI[0]
0=nachster Plot beginnt auf neuer Seite
!P.MULTI[1]
Anzahl Plots nebeneinander (Spalten)
!P.MULTI[2]
Anzahl Plots untereinander (Zeilen)
!P.MULTI=[0,2,2]
Vier Plots auf einer Seite.
Reset auf Default: !P.MULTI=0
Abbildung 9.2: Definitionen zur Datenausgabe: !P.MULTI
Hinweis:
bei PLOT, CONTOUR, SURFACE,....
Jeder dieser Befehle loscht die Zeichenflache vor der Ausgabe und geht damit automatisch
in das nachste
”
Plotfeld“.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 93/238
9.4. STEUERUNG DER AUSGABE UND AUSGABEGER ATE 73
9.4.3.2 Keyword POSITION und System-Variable !P.POSITION
Eine beliebige Aufteilung der Zeichenflache definiert man entweder mit der Systemvaria-
blen !P.POSITION oder uber das POSITION Keyword.
Ein Setzen der System-Variablen !P.POSITION bleibt bis zu einer erneuten Definition
bzw. Reset gultig!!P.POSITION=[0.1,0.1,0.5,0.5]
; normalisierte Koordinaten
; Bereich im linken unteren Viertel
PLOT,x,y
!P.POSITION=0 ; reset
PLOT,x,y,POSITION=[0.1,0.1,0.5,0.5]
Hinweis:POSITION als Keyword-Variable gilt nur fur den Befehl!
Abbildung 9.3: Definitionen zur Datenanalyse: Keyword POSITION
Hinweis:
Mehrere Bilder pro Seite (PLOT, CONTOUR, SURFACE) durch Ausschalten des Loschens
der Zeichenflache mit dem Keyword /NOERASE.
Weitere Informationen zum Positionieren von Bildern siehe Seite 120
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 94/238
74 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
9.4.4 Bildschirm Ausgabe
Die Bildschirm Ausgabe erfolgt in Fenstern. Die Große eines Fensters (window) und die
Position wird in DEVICE Koordinaten angegeben.
Hinweis:
Bei einer Bildschirmauflosung von 1280x1024 Punkten ist (0,0) links unten und
(1279,1023) rechts oben.
Ein Ausgabe-Fenster wird mit der WINDOW-Routine erstellt. Die Standardgroße eines
Ausgabe-Fensters betragt 640x512 Pixel.
WINDOW, 3
Ein Window bekommt die Nummer 3; maximal 128 graphische Windows mit den
Nummern (0 .. 127) sind moglich. Die Nummern 0-31 sind anwahlbar. Die Num-
mern ab 32 sind fur WIDGET DRAW reserviert. Window mit der nachsten freien Nummer
WINDOW, /FREE
Mit Keyword FREE bekommt man die nachste unbenutzte Windownummer ab 32. Große und Position des Windows
WINDOW, 0, XSIZE= 300, YSIZE = 400
WINDOW, 0, XPOS = 200, YPOS = 300
Spezifizieren einer Uberschrift fur das Fenster
WINDOW, 0, TITLE = ’Surface’
Erstellen eines Windows im Speicher (nicht sichtbar)
WINDOW, 0, /PIXMAP, XSIZE = 500, YSIZE = 500
Das Window wird wie jedes andere Window behandelt. PIXMAP bezeichnet einenZwischenspeicher, der vom Display Manager verwaltet wird.
Reparieren von Window-Uberlagerungen
Der Backing store kann im Startup-File gesetzt werden, siehe Seite 14
DEVICE, RETAIN = 2 Verwaltung von Windows
– Setzen des aktuellen graphischen Windows
WSET, 4
Window mit der Nummer 4 aktivieren. Es kann jeweils nur ein Window
aktiv sein.
IF !D.WINDOW NE 4 THEN WSET, 4
!D.WINDOW: Index des aktuellen Windows
– Window mit der Nummer 5 in den Vordergrund bzw. in den Hintergrund stellen
WSHOW, 5 ; Vordergrund
WSHOW, 5, 0 ; Hintergrund
WSHOW, 5, /ICONIC ; iconify
– Loschen des Windows mit der Nummer 5.
WDELETE, 5
– Loschen aller Windows
WHILE (!D.WINDOW GE 0) WDELETE,!D.WINDOW
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 95/238
9.4. STEUERUNG DER AUSGABE UND AUSGABEGER ATE 75
9.4.5 Benutzung des Z-Buffers
Durch Verwendung des Z-Buffers konnen komplexe 3D Darstellungen definiert werden.
Verdeckte Linien und Flachen werden nicht angezeigt. Der Z-Buffer ist in IDL als Graphi-
sches Device implementiert.
Man benutzt den SET PLOT Befehl, um das graphische Device auf den Z-Buffer zu wech-seln.
SET_PLOT,’z’
SET_PLOT,’x’
Mit SET PLOT,’z’ wird der Z-Buffer eingeschaltet, mit SET PLOT,’x’ schaltet man
auf die Bildschirm-Darstellung um (Unix: X-Display, Windows: ’win’, Mac: ’mac’)
Die Eigenschaften des Z-Buffers werden mit dem DEVICE-Befehl gesteuert.
Setzen der Auflosung mit SET RESOLUTION
DEVICE, SET_RESOLUTION=[500,300] Setzen der Farbe mit SET COLORS
col = !D.TABLE_SIZE
SET_PLOT,’z’
DEVICE, SET_COLORS=col Schließen des Devices mit CLOSE
DEVICE, /CLOSE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 96/238
76 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
9.4.6 Beispiel: Z-Buffer, SURFACE und CONTOUR
Mit der Routine SHADE SURF wird ein 2D Datensatz (peak) als schattierte Oberflache
dargestellt. Das Keyword /SAVE stellt sicher, daß die 3D Transformationsmatrix gespei-
chert wird. Die Oberflache kann dann mit CONTOUR unter Verwendung der 3D Transfor-
mationsmatrix (/T3D) gezeichnet werden. Mit dem TVRD()-Kommando wird das Bildaus dem Z-Buffer in die Variable new kopiert. Nachdem das Ausgabegerat mit SET PLOT
auf den Bildschirm gewechselt wurde, kann das kopierte Bild mit dem TV Kommando
dargestellt werden.
PRO z buf
peak = EXP(-(SHIFT(DIST(40), 25, 15)/15)ˆ2)
olddev=!D.NAME
SET_PLOT, ’z’
DEVICE, SET_RESOLUTION=[400,400],SET_COLORS=!D.TABLE_SIZE
!P.BACKGROUND=255B
!P.COLOR=0BSHADE_SURF, peak, /SAVE
CONTOUR, peak, /T3D, ZVALUE=0.66, NLEVELS=10, /NOERASE
new = TVRD()
SET_PLOT,olddev
WINDOW, XSIZE=400, YSIZE=400, /FREE
TV, new
END
Beispiel 9.1: Definitionen zur Datenausgabe: Z-Buffer
Abbildung 9.4: Definitionen zur Datenausgabe: Z-Buffer
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 97/238
9.4. STEUERUNG DER AUSGABE UND AUSGABEGER ATE 77
9.4.7 PostScript Ausgabe - Drucken
IDL Kommandos werden fur das jeweilige mit SET PLOT aktivierte Ausgabegerat abge-
arbeitet. Standardmaßig ist dies die Ausgabe im Fenster.
Ist das Ausgabegerat auf PS gesetzt, werden alle IDL Kommandos fur dieses Ausgabegerat
abgearbeitet. In dem Beispiel wird eine PostScript-Datei erstellt.
old_device = !D.NAME
SET_PLOT,’ps’ ; Hardcopy auf PS setzen
DEVICE, FILENAME=’new_plot.ps’
; Optionen als Kommentarzeilen
; XOFFSET=2,
; YOFFSET=1.5,
; XSIZE=18,
; YSIZE=29,
; /COLORDEVICE,/ISOLATIN1 ; Umlaute
my_data = SIN(MAKE_ARRAY(10,/INDEX))
plot, my_data, TITLE=’Test-Ausgabe’
XYOUTS,0.1,0.1,’Umlaute: ae,oe,ue ’+ $
STRING(228b)+STRING(246b)+STRING(252b),/DEVICE
DEVICE, /CLOSE ; close PostScript-Ausgabe
SET_PLOT, old_device ; Ausgabe wird auf old_device gesetzt
Beispiel 9.2: Definitionen zur Datenausgabe: PostScript-Ausgabe
Die PostScript-Datei kann auf einem PostScript-Drucker gedruckt werden, z.B. mit
lpr
lpr -Ptia00c4 new plot.ps
Hinweis:
Wird im DEVICE kein FILENAME angegeben, lautet der Ausgabe Dateinameidl.ps.
Man kann Programme so schreiben, daß mittels eines Keywords gesteuert wird, ob die
Ausgabe auf dem Bildschirm oder in eine Datei geschrieben werden soll. Im nachfolgen-
den Beispiel wird dies durch das Keyword /PSFLAG erreicht. Die PostScript-Datei wird
mit dem Keyword ENCAPSULATED=1 erstellt und ist eine EPS-Datei mit Bounding Box.
Diese ist in ein Dokument einbettbar (ohne showpage).
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 98/238
78 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
Beispiel: testct2.pro (verwendet legendfr.pro,ct fr.pro)
PRO testct2,psflag=psflag
;psflag=0 : Bildschirmausgabe
;psflag=1 : Ausgabe auf PostScript-File idl.eps
olddevice=!D.NAME
;**************************************************************
!P.FONT=-1 & !P.CHARSIZE=1
IF KEYWORD_SET(psflag) THEN BEGIN
SET_PLOT, ’ps’ & !P.FONT=0 & !P.CHARSIZE=2
psfile=’idl.eps’
DEVICE,FILENAME=psfile,ENCAPSULATED=1, PREVIEW=0,$
/COLOR, YOFFSET=27, YSIZE=16,XOFFSET=2,XSIZE=25,$
/LANDSCAPE
ENDIF
;*****************Setzen der Farbpalette************************
ct_fr & !P.BACKGROUND=0 & !P.COLOR=!D.TABLE_SIZE-1
;*****************Erzeugung eines Datenfeldes*******************
n=100.
f=DOUBLE(100./(n-1.)*100./(n-1.))
x=FLTARR(n,n)
FOR i=0,n-1 DO FOR j=0,n-1 DO x[i,j]=DOUBLE(i)*DOUBLE(j)*f
;*********************************Konturplot durchfuehren*******
lev=[0,10,50,100,500,1000,2000,5000]
colors =INDGEN(/FLOAT,N_ELEMENTS(lev))/ $
FIX(N_ELEMENTS(lev)-1)*(!D.TABLE_SIZE-2)
CONTOUR,x,LEVEL=lev,C_COLORS=colors,$
POSITION=[0.15,0.2,0.8,0.9],/FILL
legendfr,lev,/fill,colors=colors
;**************************************************************
IF KEYWORD_SET(psflag) THEN BEGIN
whoami,dir,filename
XYOUTS,0.9, 0.00,SYSTIME(0),CHARSIZE=0.5,/NORMAL
XYOUTS,0.9,-0.02,filename,CHARSIZE=0.5,/NORMAL
XYOUTS,0.9,-0.04,psfile,CHARSIZE=0.5,/NORMAL
DEVICE,/CLOSE
ENDIF
SET_PLOT,olddevice
!P.FONT=-1 & !P.CHARSIZE=1
!P.BACKGROUND=!D.TABLE_SIZE & !P.COLOR=0
IF KEYWORD_SET(psflag) THEN PRINT,$
’Ende - PostScript idl.eps erstellt’
END
Beispiel 9.3: Definitionen zur Darstellung: optionale Postscriptdatei
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 99/238
9.4. STEUERUNG DER AUSGABE UND AUSGABEGER ATE 79
Aufruf: testct2,[/psflag] (optional PostScript)
0 20 40 60 80 100
0
20
40
60
80
1000
1050100500100020005000
Thu Sep 4 16:30:27 1997
testct2.pro
idl.eps
Abbildung 9.5: Definitionen zur Datenausgabe: Beispiel mit Legende
Das Beispiel enthalt folgendes: Eigene Farbtabelle (mit TVLCT) Bild auf weißem Hintergrund Legende mit Namen des Programms, des PostScript Files und Datum wird erstellt
9.4.8 Ubungen
Die Losungen zu den Ubungen findet man im Anhang auf Seite 205.
1. Schreibe die Definition einer Farbtabelle als RGB Werte. Weise diese Farbtabelle
dem Grafikdevice zu. Es sollen die Farben Rot, Grun und Blau angelegt werden.
Uberprufe die Farbdefinition mit einem Farbbalken. Ein einzelner Farbton soll 15
Pixel breit sein.
2. IDL hat vordefinierte Farbtabellen. Wahle die Farbtabelle 6 aus. An deren Ende (256.
Farbe) soll definitiv die Farbe Weiß sein. Andere die Farbdefinition nach dem Laden
so ab, daß der letzte Wert Weiß ist. Uberpufe das Ergebnis mit einem Farbbalken.
3. Gib den Satz:
Heute lernen wir IDL!
auf dem Drucker aus!
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 100/238
80 KAPITEL 9. DEFINITIONEN ZUR DATENAUSGABE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 101/238
Kapitel 10
Programme zur
Anwendungs-Darstellung
10.1 Uberblick
In den folgenden Kapiteln werden die Routinen zu unterschiedlichen Darstellungsarten
beschrieben. Es gibt Routinen zur Darstellung von XY Plots, Oberflachen, Hohenlinien,
Bildverarbeitung, Kartenprojektion usw.
Keyword-Parameter und System-Variablen ermoglichen dem Benutzer, durch bestimmte
Spezifikationen das Aussehen der Graphik zu kontrollieren, wie z.B. Skalierung, Farbe,
Beschriftung, Achseneinteilung und vieles mehr. Falls keine Angaben erfolgen, verwendet
IDL eine Standardeinstellung. Die optionalen Keyword-Parameter, siehe Seite 82, werden
von allen Darstellungs-Routinen benutzt. Beispielsweise wird mit dem XRANGE-Keyword
der Wertebereich fur die X-Achse festgelegt, z.B. XRANGE=[5,101].
Im nachfolgenden Abschnitt wird eine Auswahl dieser Parameter vorgestellt. In den
Aufzahlungen wird auf eine Verwendung in den nachfolgenden Beispielen hingewiesen.
Dort findet man weitere Hinweise.
81
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 102/238
82 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.1.1 Achsen
Das Layout von Achsen laßt sich mit nachfolgenden Keyword-Parametern steuern. Die
Spezifikationen konnen fur jede Achse gewahlt werden. Die Notation [XYZ]RANGE be-
deutet, daß die Option RANGE fur die X-, Y- und Z-Achse verfugbar ist und mit den
jeweiligen Keywords XRANGE, YRANGE und ZRANGE angesprochen wird.
Anzahl Major-Tick-Intervalle [XYZ]TICKS Beispiel auf Seite 95
Anzahl Minor Tick Intervalle [XYZ]MINOR
Ticklange [XYZ]TICKLEN
Label eines Ticks [XYZ]TICKNAME
Format der Beschriftung [XYZ]TICKFORMAT
Werte fur Ticks [XYZ]TICKV
Bereich der Werte [XYZ]RANGE Beispiel auf Seite 85
Aussehen Achsen [XYZ]STYLE Beispiel auf Seite 87Titel der Achsen [XYZ]TITLE Beispiel auf Seite 92
Schriftgroße der Beschriftung [XYZ]CHARSIZE
Logarithmische Achsen [XYZ]LOG Beispiel auf Seite 90
Definition von Achsen [XYZ]AXIS Beispiel auf Seite 87
beliebige neue Achse mit Beschrif-
tung und Skalierung
AXIS Beispiel auf Seite 87
Tabelle 10.1: Programme zur Darstellung: Keywords zur Achsneanpaßung
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 103/238
10.1. UBERBLICK 83
10.1.2 Steuerungen zur Zeichenfl ache
Generell muß man wissen, daß bei Aufruf bestimmter Routinen, wie PLOT, CONTOUR
oder SURFACE, das Bild im Fenster geloscht wird und ein neues Bild gezeichnet wird.
Will man aber in das gleiche Bild noch etwas zeichnen, muß man das bei dem nachfolgen-
dem Kommando, siehe Tabelle, berucksichtigen.Bei den Bild-Darstellungs-Routinen TV und TVSCL wird das Bild vor dem Zeichnen nicht
geloscht. Um die Zeichenflache zu loschen, wendet man vor dem TV bzw. TVSCL das
ERASE Kommando an.
NODATA Keine Daten zeichnen.
Das Koordinatensystem wird angelegt
und die Achsen werden gezeichnet.
Beispiel auf Seite 85, 88, 101
NOERASE Das vorherige Bild wird nicht geloscht. Beispiel auf Seite 100, 105,
106, 101, 103
OVERPLOT Uberzeichnen
Bewirkt, ahnlich wie NOERASE, daß das
vorherige Bild nicht geloscht wird.
Beispiel auf Seite 100, 106
Tabelle 10.2: Programme zur Darstellung: Steuerungen zur Zeichenflache
Mit dem Keyword TITLE erhalt man eine Beschriftung des Gesamtbildes, siehe Seite 95.
10.1.3 Routinen zum Beschriften oder Markieren
Haufig verwendet man noch eine Beschriftung im Bild oder farbige Linien oder Flachen,
um auf besonders wichtige Details hinzuweisen. Dafur stehen die Befehle XYOUTS,
PLOTS und POLYFILL zur Verfugung. Diese Befehle sind in allen Darstellungs-Routinen
verwendbar.
XYOUTS stellt Text an eine Position Beispiel auf Seite 89,89,95
PLOTS zum Zeichnen einer Linie Beispiel auf Seite 88, 107
POLYFILL zum Zeichnen einer gefullten Flache Beispiel auf Seite 88
Tabelle 10.3: Programme zur Darstellung: Routinen zum Beschriften oder Markieren
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 104/238
84 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.2 XY-Darstellungen mit PLOT
10.2.1 Ausgabe von Daten als Linien-Plots
Erst durch die Ausgabe werden Daten lesbar. Die Darstellung mittels Linien-Plot ist die
gebrauchlichste fur Vektoren.
10.2.2 Plot bei einem Argument
x=FINDGEN(37)*10 0 bis 360 in 10er Schritten
y=SIN(x*!DTOR) Systemvariable !DTOR=Konversionsfaktor (Grad- in Bo-
genmaß)
PLOT,y
Die X-Achse erhalt die Werte 0 bis 360. Als Ordinatenwerte wird Y aufgetragen.
10.2.3 Plot mit zweitem Argument (dependent data)
PLOT,x,y X-Achse jetzt 0 bis 360.
IDL legt die X-Achse von 0 bis 400 an. Eine exakte Begrenzung ist moglich, siehe Seite
87 .
Hinweis:PLOT loscht Zeichenflache vor der Ausgabe!
Das heißt, daß jeder PLOT-Befehl in ein neues Fenster zeichnet. Verwendet man das
Keyword/NOERASE in Verbindung mit PLOT (auch AXIS, CONTOUR, SURFACE) wird
das Bild bei Ausfuhrung des PLOT nicht geloscht.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 105/238
10.2. XY-DARSTELLUNGEN MIT PLOT 85
10.2.4 Plot von Datenreihen
In dem Beispiel sollen die Achsen des Plots in der Farbe Schwarz und die Daten in anderen
Farben und Linientypen dargestellt werden. Das Vorgehen ist dann wie folgt. Verwendet
man PLOT mit dem Keyword /NODATA werden keine Daten geplottet, es wird lediglich
das Koordinatensystem des Plotfensters mit Beschriftung angelegt.Mit OPLOT konnen dann alle Kurven in das definierte Fenster gezeichnet werden.
Variation der Linienart, Linienfarbe etc., ohne die Farbe der Achsen zu andern.
TEK_COLOR
kurve1 = FINDGEN(10)
kurve2 = FINDGEN(10)+5
kurve3 = kurve1 * 3
kurve4 = kurve2 * 3
allpts = [[kurve1],[kurve2],[kurve3],[kurve4]]N = SIZE(allpts,/DIM) ; Dimesnionierung der Elemente
x=INDGEN(10,/FLOAT)
PLOT,allpts,YRANGE=[MIN(allpts),MAX(allpts)], $
XRANGE=[MIN(x),MAX(x)],/NODATA
OPLOT,x,kurve1,LINE=0,COLOR=0
OPLOT,x,kurve2,LINE=1,COLOR=4
OPLOT,x,kurve3,LINE=2,COLOR=2
OPLOT,x,kurve4,LINE=3,COLOR=3
Beispiel 10.1: Programme zur Darstellung: Plot von Datenreihen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 106/238
86 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.2.5 Beispiele mit PLOT
PLOT hat uber 50 Keywordparameter, einige sind im nachfolgendem mit Beispielen auf-
gefuhrt. Viele der Keywords gelten auch fur alle anderen Darstellungs-Routinen.
LOADCT,5
Mit LOADCT kann eine vordefinierten Farbtabelle geladen werden.Stattdessen kann auch TEK COLOR aufgerufen werden, siehe Seite 68.
Linienarten und Symbole mit PSYM
PLOT,x,y,LINESTYLE=3,PSYM=-1
1,...7 nur Symbole
0 nur Linie, Default!
-1,-2,... Symbole mit Linien
8 Benutzer- definierte Symbole moglich mit USERSYM
-8 Benutzer- definierte Symbole mit Linie10 Histogramm Modus
Abbildung 10.1: Programme zur Darstellung: XY Plot
Farbe mit COLOR
PLOT,x,y,COLOR=45,BACKGROUND=100 Weitere Kurven in einem Bild mit OPLOT
y1=y/EXP(x/60.)
OPLOT,x,y1,THICK=2
Kurvendicke mit dem Keyword THICK (zweifacher Default-Wert)
Layout:[XYZ]TICKS: (Anzahl Major- Tick- Intervalle)
[XYZ]MINOR: (Anzahl Minor- Tick- Intervalle)
[XYZ]TICKLEN (Gitter!)
Die Notation [XYZ]TICKS bedeutet, daß die Keywords XTICKS, YTICKS,
ZTICKS verwendet werden konnen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 107/238
10.2. XY-DARSTELLUNGEN MIT PLOT 87
Arbeiten mit Achsen
Die Notation [XYZ]STYLE bedeutet, daß die Keywords XSTYLE, YSTYLE und
ZSTYLE verwendet werden konnen.
Die STYLE-Option ist bitweise kodiert
PLOT,x,y,XSTYLE=(1+8)
Exakte Begrenzung (=1) und keine X-Box Achsen (=8)PLOT,X,Y,YSTYLE=8
rechts keine Y-Box Achse Mehrfache Achsen
AXIS,/YAXIS,YRANGE=[0,5],/SAVE,COLOR=180
– Y-Achse rechts bzw. links
/YAXIS aquivalent zu YAXIS=1 (rechts), YAXIS=0 (links)
– Y-Achse mit neuem Koordinatensystem mit YRANGE
– Neue Definition eines Koordinatensystems, d.h. Anderung des mitPLOT auf-
gestellten Koordinatensystems /SAVE Achse an eine beliebige Position
– Die Y- Achse kann an beliebige Position geschrieben werden
Folgende Schreibweisen sind aquivalent:
AXIS,100,0,/YAXIS
oder
AXIS,100,0,YAXIS=1
– OPLOT im neuen Koordinatensystem
OPLOT,x,8*y1,LINESTYLE=2,COLOR=160
Beispiel: mehrfache Achsen
Abbildung 10.2: Programme zur Darstellung: mehrere Y-Achsen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 108/238
88 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
Linien oder Punkte mit PLOTS
PLOT,INDGEN(200,/FLOAT),YRANGE=[0.,1.],/NODATA
xvec=[60,140,140,60,60]
yvec=[0.35,0.35,0.5,0.5,0.35]
PLOTS,xvec,yvec,COLOR=100
PLOTS zeichnet eine Box
Fullen mit Farbe
POLYFILL,xvec,yvec,COLOR=100
Keywords zur Beschriftung
TITLE, [XYZ]TITLE, CHARSIZE, [XYZ]CHARSIZE
Beschriftung des Plots bzw. der verschiedenen Achsen und entsprechender Font-
große
Explizite Labels fur Tickmarks
[XYZ]TICKNAME Feld mit Zeichen
[XYZ]TICKFORMATFormat der Beschriftung der Ticks
Keywords fur logarithmische Achsen
[XYZ]LOG
Keyword: CLIPPING
CLIP =[X0,Y0,X1,Y1]Das Keyword CLIPPING bewirkt ein Abschneiden an den Werten mit Minmum
(x0,y0) und dem Maximum (x1,y1).
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 109/238
10.2. XY-DARSTELLUNGEN MIT PLOT 89
Zus atzlichen Text an XY Plot mit XYOUTS
XYOUTS,150.,0.7,’Text’,CHARS=3
Abbildung 10.3: Programme zur Darstellung: PLOT und zusatzlicher Text
Default: als Datenkoordinaten
PLOT,x,y
XYOUTS mit normalisierten Koordinaten [0,1]
XYOUTS,0.5,0.5,’Mitte des Bildes’,/NORM,ALIGN=0.5 Das Standard X-Window ist 640x512 Pixel groß. Die Ausgabe erfolgt in Device-
Koordinaten.
XYOUTS,10,10,’links unten’,/DEVICE
Abbildung 10.4: Programme zur Darstellung: Beschriftung in der Mitte des Bildes
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 110/238
90 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.2.6 Plot mit logarithmischer Achseneinteilung
Eine logarithmische Einteilung der Achsen bei der PLOT-Funktion erhalt man mit dem
Keyword XLOG fur die X-Achse und mit dem Keyword YLOG fur die Y-Achse. Das Bei-
spiel zeigt linear-logarithmische Achsen.
x=INDGEN(200,/FLOAT)y=SIN(x/20)ˆ2
PLOT,x,x/5,YRANGE=[0.01,200],/YLOG
Abbildung 10.5: Programme zur Darstellung: Logarithmischer PLOT
10.2.7 BalkendiagrammeDas BAR PLOT-Programm zeichnet einfache Balken in den angegebenen Hohen.
BAR PLOT, [ 2, 5, 1, 3, 6, 4 ]
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 111/238
10.2. XY-DARSTELLUNGEN MIT PLOT 91
10.2.8 Fehlerbalken
Fur das Beispiel werden 10 Zufallszahlen generiert.
data=RANDOMU(SEED,10)
x=INDGEN(10,/FLOAT)+0.5
PLOTERR,x,data,data-0.2
Die Daten werden mit Fehlerbalken dargestellt. Die Fehlerbalken zeigen einen symmetri-
schen Fehler.
Abbildung 10.6: Programme zur Darstellung: Fehlerbalken
10.2.9 Polarplotr=INDGEN(100,/FLOAT)
theta=r/5.
PLOT, r, theta, SUBTITLE=’Polar Plot’, $
XSTYLE=4, YSTYLE=4, /POLAR
AXIS, XAX=0,0
AXIS, YAX=0,0
Abbildung 10.7: Programme zur Darstellung: Polarplot
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 112/238
92 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.2.10 Scatter-Plot mit Zufallszahlen
Die Daten fur die PLOT-Funktion mussen nicht streng aufsteigend sortiert sein, sie konnen
auch willkurlich verteilt vorliegen. Als weiteres Beispiele wird ein Scatter-Plot vorgestellt.
Damit man sieht, daß die Punkte willkurlich verteilt vorliegen, wurden die Symbole mit
Zahlen markiert.
x=RANDOMU(SEED,10)
y=RANDOMU(SEED,10)
yrange=[MIN(y,MAX=mx),mx+0.1]
xrange=[MIN(x,MAX=mx)-0.1,mx+0.1]
PLOT,x,y,PSYM=2,YRANGE=yrange,XRANGE=xrange,$
XTITLE=’random x’,YTITLE=’random y’,TITLE=’Scattered Data’
XYOUTS,x,y+0.03,STRTRIM(INDGEN(10),2),ALIGN=0.5
Abbildung 10.8: Programme zur Darstellung: Scatter-Plot mit Zufallszahlen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 113/238
10.2. XY-DARSTELLUNGEN MIT PLOT 93
10.2.11 Plot mit Text in unterschiedlichen Farben
Das Programm zeichnet einen Text, der aus vier Worten besteht, in jeweils unterschiedli-
chen Farben. Der Text wird auf dem Vektor text abgelegt. Damit die Worte des Textes bei
dem XYOUTS-Kommandos nicht alle ab der Startpostion ubereinander gezeichnet werden,
muß man ab dem zweiten Wort fur alle Worte des Textes soviele Leerzeichen erzeugen,wie der bereits vorstehende Text lang ist. Die Leerzeichen werden mit MAKE ARRAY an-
gelegt. Das Beispiel setzt voraus, daß ein monospaced -Font verwendet wird.
Wenn man beim Aufruf des Programms das Keyword PS angibt, wird eine PostScript-
Datei erstellt.
TEK COLOR ladt eine Farbtabelle, siehe Beispiel auf Seite 68.
PRO colored_text,ps=ps
!P.COLOR=0
!P.BACKGROUND=!D.TABLE_SIZE-1
IF KEYWORD_SET(ps) THEN BEGIN
old_name=!D.NAMESET_PLOT,’PS’
DEVICE,FILE=’colored_text.ps’, /COLOR, BITS=8, /ISOLATIN1
!P.FONT=-1
ENDIF
TEK_COLOR
text=[’Dies’,’ist’,’ein’,’Test’]
length=STRLEN(text)
FOR i=1,3 DO BEGINblanks=STRING(MAKE_ARRAY(TOTAL(length[0:(i-1)])+1, $
VALUE=32b))
text[i]=blanks+text[i]
ENDFOR
ERASE
XYOUTS,0.5,0.5,text,COLOR=[0,5,2,3,4],CHARSIZE=3, $
/NORM,ALIGN=0.,CHARTHICK=10
IF KEYWORD_SET(PS) THEN BEGIN
DEVICE,/CLOSE
SET_PLOT,old_nameENDIF
END
Beispiel 10.2: Programme zur Darstellung: XYOUTS in unterschiedlichen Farben
Abbildung 10.9: Programme zur Darstellung: XYOUTS in unterschiedlichen Farben
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 114/238
94 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.3 Fl achen- und H ohenlinien- Darstellungen
Mehrdimensionale Datensatze enthalten mehr Informationen als Vektoren. Die Daten
liegen auf einem regularen oder irregularen Gitter vor. Zu jedem Punkt ist dann noch
eine dritte Information, die Hohe bekannt, die auf der Z-Achse dargestellt werden kann.
Daten, konnen z.B. als Netzlinien mit SURFACE oder als Hohenlinienplot mit CONTOURdargestellt werden, wenn sie auf einem regularen Gitter vorliegen.
Wenn die Daten auf einem irregularen Gitter vorliegen, konnen sie auf ein regulares Gitter
umgerechnet werden. Dazu findet man im Kapitel Gl¨ atten von zuf alligen oder irregul¨ aren
Daten auf Seite 107 ein Beispiel.
Eine vierte Dimension, eine weitere Information zu den vorliegenden Daten, kann z.B. bei
Netzlinien als Farbe dargestellt werden.
10.3.1 Netzlinien mit SURFACESURFACE hat uber 70 Keywordparameter unter anderem: UPPER ONLY,
LOWER ONLY, BOTTOM (Farbe Unterseite), COLOR (Farbe Oberseite), BACKGROUND,
SKIRT, ZAXIS.
Hinweis:
Keywords oft analog zu PLOT
Beispieldatensatz: a=f(x,y):
Abbildung 10.10: Programme zur Darstellung: SURFACE
a=DIST(20)
2D-Float-Feld mit 20x20 Werten dient als Testdatensatz.
SURFACE,a
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 115/238
10.3. FL ACHEN- UND HOHENLINIEN- DARSTELLUNGEN 95
Werte von a als Gitter
SURFACE,a,/HORIZONTAL
Mit dem Keyword /HORIZONTAL nur horizontale Gitterlinien
xgrid=INDGEN(20,/FLOAT)/10
ygrid=INDGEN(20,/FLOAT)+20
SURFACE,a,xgrid,ygrid
X-Gitter von 0 bis 1.9, Y-Gitter von 20 bis 39 durch die Angabe der Parameter
xgrid und ygrid.
SURFACE,a,AZ=10,AX=60,$
ZTICKS=2,TITLE=’Titel liegt in X-Z Ebene’
AX und AY sind Drehwinkel, (Default 30
)
Zusatzliche Ausgabe von Text mit XYOUTS.
XYOUTS,0.3,0.9, $
’Parallel zu Schirm’,/NORM,CHARS=2.
SURFACE,a,/LEGO3D- Balkengramm, Balken als Quader mit dem Keyword /LEGO.
SURFACE,a,SHADES=BYTSCL(a)
Farben: mit COLOR=... bzw. BOTTOM=... erhalt man jeweils ein einfarbiges
Bild.
Mit dem SHADES=Farbraster wird ein selbst definiertes Farbraster als vierte
Dimension auf die Netzlinien gelegt. BYTSCL transformiert Felder beliebigen Typs
auf den Typ BYTE mit einem Wertebereich 0B bis 255B.
PRINT, BYTSCL(a)
BYTSCL: Streckung auf Wertebereich 0B bis 255B
Besser: BYTSCL(a,TOP=!D.TABLE SIZE-1) skaliert bis zur max. Anzahlverfugbarer Farben.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 116/238
96 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
Behandlung von “missing values” mit IDL
Zur Veranschaulichung der Behandlung von “missing values” wird ein Beispieldatensatz
konstruiert. Die Ausreißerwerte -999 und 500 werden kunstlich erzeugt.
a=DIST(40) Definition
a[8:15,3:5]=-999 Ausreißerwerte erzeugen! Mit ’:’ auf Teilbereich zugreifen.
Feldbereich auf -999 setzen
a[4:6,8:10]=500 Ausreißerwerte erzeugen! Feldbereich auf 500 setzen
SURFACE,a sinnvolle Werte sind durch”
missing values“ nicht unter-
scheidbar.
SURFACE,a,MAX VALUE=100,MIN VALUE=-100
Mit der Angabe von MAX VALUE und MIN VALUE sind die “missing values” verschwun-
den.
Abbildung 10.11: Programme zur Darstellung: Behandlung von missing value
Hinweis:
Keywords MAX VALUE und MIN VALUE sind erlaubt bei: PLOT, CONTOUR,
SHADE SURF, SURFACE
Gleicher Effekt mit !VALUES.F NANLinie wird unterbrochen
y = FINDGEN(100)
idx = [ 10,11,12,13 ]
y[idx] = !VALUES.F_NAN
PLOT,y,PSYM=0
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 117/238
10.3. FL ACHEN- UND HOHENLINIEN- DARSTELLUNGEN 97
10.3.2 H ohenlinien mit CONTOUR
Haufig wird diese Darstellungsform bei Landkarten, Wetterkarten usw. verwendet.
a = DIST(40)
CONTOUR,a
CONTOUR,a,NLEVELS=10,/FOLLOW,C CHARSIZE=2,/DOWNHILL
Man beachte den Unterschied zu CHARSIZE=2.
Abbildung 10.12: Programme zur Darstellung: CONTOUR
Spezifische Keywords fur CONTOUR
FOLLOW=1 Hohenlinien-Verfahren mit Beschriftung
NLEVELS Anzahl Hohenlinien
LEVELS=[c1,c2,...] Hohenlinien bei c1,c2,... (NLEVELS=0)
/DOWNHILL Richtung durch Ticks ausgeben
/OVERPLOT Hohenlinien ohne neuen Rahmen
/FILL gefullte Flache, nicht bei Karten
/CELL FILL Bei den Anwendungen missing data oder bei Kartenpro-
jektionen ist dieses Keyword oft besser.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 118/238
98 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
C Keywords fur CONTOUR sind oft Vektoren.
Die Vektoren werden zyklisch wiederholt, wenn die Anzahl der Hohenlinien großer sind
als die Anzahl der Vektorelemente.
C LINESTYLE=INDGEN(4,/BYTE)
Vier verschiedene Linientypen
C THICK=[1,3]
Zwei verschiedene Liniendicken
C ANNOTATION=[’low’,’medium’,’high’],NLEVEL=3
Beschriftung der Label mit Text
C COLOR=INDGEN(4,/BYTE)*50
Vier verschiedene Farben
Abbildung 10.13: Programme zur Darstellung: C Keywords bei CONTOUR
10.3.3 Schattierte Oberfl achendarstellung
a=DIST(40)
SHADE_SURF,a
SHADE SURF,a,SHADES=BYTSCL(a)
Statt einer Lichtquelle wird Feld ’BYTSCL(a)’ als Farbraster auf die Oberflache
gelegt.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 119/238
10.3. FL ACHEN- UND HOHENLINIEN- DARSTELLUNGEN 99
10.3.4 Oberfl ache mit beliebigem Datensatz uberlagern
Abbildung 10.14: Programme zur Darstellung: SHADE SURF
a=DIST(40)
b=RANDOMU (SEED , 40, 40)
Fur das Beispiel wird ein Testdatensatz konstruiert. RANDOMU generiert Zufallszah-
len zwischen 0 und 1.
SHADE_SURF,a,SHADES=BYTSCL(b,TOP=!D.TABLE_SIZE-1)
Die Zufallszahlen werden als Farbmuster mit dem Keyword SHADES auf die Ober-
flache gelegt. Dabei bedeutet BYTSCL, daß die Zufallszahlen auf den Bereich desZahlentyps BYTE, also 0B bis 255B bzw. bis zur maximal darstellbaren Zahl ver-
teilt werden. Die Darstellung bis zur maximal darstellbaren Zahl erfolgt dann, wenn
wie im Beispiel das Keyword TOP mit der maximal darstellbaren Zahl verwendet
wird.
Hinweis:
SURFACE und SHADE SURF sind Routinen zur automatischen Generierung einer 3D
Transformationsmatrix.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 120/238
100 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.3.5 H ohenlinien-Plot im 3D-Raum
a=DIST(40)
SHADE SURF,a,/SAVE
/SAVE speichert die 3D Transformationsmatrix
CONTOUR, a, NLEVELS=10, /T3D, ZVALUE=1.0, /NOERASE
Das Keyword /T3D bedeutet, daß die gespeicherte Transformationsmatrix fur pla-
naren CONTOUR-Plot bei ZVALUE=1.0 benutzt wird.
Abbildung 10.15: Programme zur Darstellung: CONTOUR im 3D Raum
oder
SHADE SURF,a,/SAVE
Das Ergebnis ist nicht zufriedenstellend! Man sollte besser mit dem Z-Buffer, sieheSeite 75, arbeiten.
CONTOUR,a,NLEVELS=10,THICK=2,/T3D,/OVERPLOT
Abbildung 10.16: Programme zur Darstellung: Probleme ohne Z-Buffer
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 121/238
10.4. 3D TRANSFORMATIONEN 101
10.4 3D Transformationen
Es gibt mehrere IDL Funktionen, die lediglich eine Transformationsmatrix aufbauen, ohne
etwas zu zeichnen. Dazu gehoren: SURFACE, SURFR, SCALE3, T3D, SCALE3D, jeweils
mit dem Keyword /NODATA. Mit Hilfe der Transformationsmatrix kann man alle IDL
Darstellungs-Funktionen im Raum benutzen.
10.4.1 3D Transformationsmatrix mit SURFACE
Mit Hilfe des SURFACE Kommandos wird eine 3D Transformationsmatrix erstellt. Diese
wird verwendet, um einen zwei dimensionalen XY Plot in einem 3D Koordinatensystem
zu plazieren.
X=INDGEN(200,/FLOAT)
Y=SIN(x/20)ˆ2
SURFACE,DIST(40),/NODATA,/SAVESURFACE erstellt automatisch eine Transformationsmatrix, die durch /SAVE ab-
gespeichert wird, siehe System-Variable !P. Mit HELP,!P,/STR bekommt man
Informationen zur System-Variablen !P, die den Plot beschreibt. !P.T ist ein 4x4
Array, welches die Transformationsmatrix enthalt.
/NODATA zeichnet keine Daten
PLOT,x,y,/T3D,ZVALUE=1.0,/NOERASE
/T3D Anwendung der Transformationsmatrix !P.T
planarer Plot bei Z=1.0 in normalisierten Koordinaten
Abbildung 10.17: Programme zur Darstellung: SURFACE 3D Transformationen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 122/238
102 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.4.2 3D Transformationsmatrix mit SURFR
Mit Hilfe des SURFR Kommandos wird eine 3D Transformationsmatrix erstellt. Diese
wird verwendet, um einen zwei dimensionalen XY Plot in einem 3D Koordinatensystem
zu plazieren.
X=INDGEN(200,/FLOAT)Y=SIN(x/20)ˆ2
SURFR,AX=45
PLOT,x,y,/T3D,CHARSIZE=1.0
Der Befehl SURFR erstellt eine 3D Transformationsmatrix und speichert diese in
!P.T. Die Ausgabe bei ZVALUE=0.0 ist der Default.
Abbildung 10.18: Programme zur darstellung: SURFR 3D Transformationen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 123/238
10.4. 3D TRANSFORMATIONEN 103
10.4.3 3D Transformationsmatrix mit SCALE3 und T3D
Mit Hilfe des SCALE3 Kommandos wird eine 3D Transformationsmatrix erstellt. Diese
Matrix wird verwendet, um einen zwei dimensionalen XY Plot in einem 3D Koordinaten-
system zu plazieren.
X=INDGEN(200,/FLOAT)Y=SIN(x/20)ˆ2
Y1=y/EXP(x/60.)
SCALE3,XRANGE=[0,200],ZRANGE=[0,1],YRANGE=[0,1]
Das SCALE3 arbeitet ahnlich SURFR, außer daß eine Achsenbegrenzung festgelegt
werden muß. Die Transformationsmatrix !P.T wird gesetzt. Eine Skalierung des
Bildes wird durch Drehungen nicht verandert. Das kann man sich bei einer Serie von
Bildern (Film) zunutze machen. Es entsteht kein Ruckeln.
PLOT,x,y,/T3D
Das 3D- Koordinatensystem kann auch mit der Routine T3D geandert werden.
Mit Hilfe des T3D Kommandos wird eine 3D Transformationsmatrix erstellt. Diese 3D
Matrix wird verwendet, um einen zwei dimensionalen XY Plot in einem 3D Koordinaten-
system zu plazieren.
T3D, /YZEXCH ; -> !P.T
Vertauschen der Y- und Z- Achse
PLOT,x,y1,/T3D,/NOERASE,ZVALUE=1
(Keywords: /XYEXCH, /XZEXCH)
Abbildung 10.19: Programme zur Darstellung: SCALE3 3D Transformationen
Hinweis:
POLYFILL und PLOTS kann auch im 3D verwendet werden, jeweils mit dem Keyword
/T3D.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 124/238
104 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.5 Karten-Projektionen
Sowohl niedrig als auch hoch aufgeloste Karten-Projektionen sind moglich. Die hoch auf-
gelosten Karten stammen aus dem CIA-World-Datensatz. Man kann die Karten sowohl
alleine darstellen als auch mit anderen Darstellungen (z.B. Text zur Beschriftung von
Stadten, CONTOUR fur Wetterkarte, Bevolkerungsdichte usw.) kombinieren. Hierbei wirddie Transformationsmatrix der entsprechenden Karten-Projektion verwendet.
10.5.1 MAP SET
Mehr als 10 verschiedene Karten-Projektionen sind mit MAP SET verfugbar, darunter
folgende:
zylindrische, Mercator, Molweide, Lambert, stereographische, Satelliten Projektionen
MAP_SET,/MERCATOR ; erstelle Mercator ProjektionMAP_GRID ; Gitter dazu
MAP_CONTINENTS ; Kontinente dazu Eine kurzere Schreibweise ist moglich:
MAP SET,/ORTHOGRAPHIC,/GRID,/LABEL,/CONT Das Zentrum ist bei 50
Breite und 10
Lange darstellbar.
MAP_SET,50,10,/ORTHO,/GRID,/LABEL,/CONT Ausschnitt bei [min[lat]],min[long],max[..],max[..]]
MAP_SET,50,10,LIMIT=[30,-20,70,40],$
/ORTHO,/GRID,/LABEL,/CONT
High Resolution Continent Outlines mit Keyword /HIRES CIA World Map Database
MAP SET, /CONT, /HIRES
MAP CONTINENTS, /HIRES
Folgende Keywords sind moglich:
/COASTS /COUNTRIES /FILL CONTINENTS /RIVERS
Hinweis:
IDL Demo: Mapping Demo
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 125/238
10.5. KARTEN-PROJEKTIONEN 105
10.5.2 Kombination von Karte mit Bilddatei
Das Beispiel zeigt eine Uberlagerung einer Karte mit einer Bilddatei.
Einlesen der Daten: worldelv.dat
OPENR,lun,FILEPATH(’examples/data/worldelv.dat’),$
/GET_LUN
im=BYTARR(360,360)
READU,lun,im
FREE_LUN,lun Wichtig:
Mitte der Daten muß auf Mitte der dargestellten Karte liegen
TV,im
im=SHIFT(im,180) ; SHIFT notwendig
TV,im ¨
Uberlagern des Bildes auf die Karte mit MAP IMAGEMAP_SET,/ORTHO,/GRID,/LABEL,/CONT
im=MAP_IMAGE(im,px,py,/BILIN,COMPRESS=1)
Man trifft die Annahme, daß Anfang des Bildes (Spalte 0) auf 180
zeigt.
px, py sind Ausgabewerte und dienen zur Positionierung von im in der Karte.
Eine bilineare Interpolation wird durchgefuhrt, um Kanten zu glatten.
Das COMPRESS-Flag dient zur Kontrolle der Genauigkeit.
TV,im,px,py
MAP_SET,/ORTHO,/GRID,/LABEL,/CONT,/NOERASE
XLOADCT
Das Bild wird mit einem erneutem MAP SET uberlagert (/NOERASE), damit die
Kontourlinien sichtbar werden.
Abbildung 10.20: Programme zur Darstellung: MAP SET
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 126/238
106 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.5.3 Kombination von Karte und H ohenlinienplot
Das Beispiel zeigt, wie man einen Hohenlinienplot auf eine Karte projiziert.
Definition von Vektoren fur Langen- und Breitengraden
lons=(FINDGEN(180)*2) - 180.0
lats=FINDGEN(180) -90.0
im1=REBIN(im,180,180) ; verkleinern
MAP_SET,50,10,/ORTHO,/CONT,/GRID
CONTOUR,im1,lons,lats,NLEVELS=16,$
C_COLOR=BINDGEN(16)*15,/OVERPLOT
MAP_SET,50,10,/ORTHO,/CONT,/GRID,/NOERASE
Abbildung 10.21: Programme zur Darstellung: CONTOUR und MAP SET
10.5.4 Beschriftung der Karte mit Text und Symbolen Symbol mit PLOTS fur Breiten- und Langengrade und Text mit XYOUTS
Damit kann man eine Stadt oder ein Land markieren. Interaktives Lesen von Breiten- und Langengraden
CURSOR,x,y
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 127/238
10.6. GL ATTEN VON ZUFALLIGEN ODER IRREGUL AREN DATEN 107
10.6 Gl atten von zuf alligen oder irregul aren Daten
Irregulare Daten sind darstellbar, aber diese Darstellung sagt nichts aus. Daher verwendet
man eine Triangulation, um irregulare Daten auf ein regulares Gitter abzubilden.
Ein Testdatensatz mit 200 Zufallszahlen in der XY-Ebene wird erstellt.X=RANDOMU(SEED,200)
Y=RANDOMU(SEED,200)
z=EXP(-3*((x-0.5)ˆ2+(y-0.5)ˆ2))
Zeichnen der Punkte in der XY-Ebene (ungeordnet)
PLOT,x,y,PSYM=1,SYMSIZE=2.0 Triangulation (Delauny)
TRIANGULATE,x,y,tr
HELP,tr
Irregulare Daten werden trianguliert. Es werden Dreiecke berechnet, die fur eineInterpolation gunstig sind, (moglichst klein, nicht uberlappend). Siehe Online Help
zu Triangulate. Dreiecke mit PLOTS (in der X-Y Ebene) darstellen.
PLOT,X,Y,PSYM=1,SYMSIZE=2
FOR i=0,381 DO BEGIN
index=[tr[*,i],tr[0,i]]
PLOTS,x[index],y[index]
ENDFOR
Erstellung des regularen Gitters (Interpolation) mit Glattung(interpolierte Z-Werte)
grid=TRIGRID(x,y,z,tr,/QUINTIC)
HELP,grid
Standardmaßig werden 51 Intervalle generiert.
SURFACE,grid
Abbildung 10.22: Programme zur Darstellung: TRIGRID
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 128/238
108 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
Regulares Gitter mit feinerem Intervall
(optionales Argument zu TRIGRID)
spacing=[0.01,0.01]
grid=TRIGRID(x,y,z,tr,spacing)
SHADE_SURF,grid
10.7 ISO Oberfl achen
Es wird eine Flache gezeichnet, in der alle Punkte den gleichen Wert haben.
Einfaches Beispiel generieren:
vol_data=MAKE_ARRAY(50,50,50,VALUE=0B,/BYTE)
vol_data[10:30,5:25,10:30]=100
vol_data[15:45,30:45,25:40]=200
3D Oberflache fur einen bestimmten Wert, hier 80Das Programm sucht Ubergange von 0 auf 100 und von 0 auf 200.
/LOW ist die untere Seite der Hohenlinien.
SHADE VOLUME,vol data,80,v,p,/LOW Koordinatensystem aufspannen mit vom Benutzer definierten Daten (Dimension des
Volumens),
3D Transformation wird erstellt
SCALE3,XRANGE=[0,50],YRANGE=[0,50],ZRANGE=[0,50] Schattierte Darstellung der Oberflache
WINDOW
TV,POLYSHADE(v,p,/T3D)
Render und Display der Polygone
Abbildung 10.23: Programme zur Darstellung: ISO Oberflachen
Hinweis:
IDL Tool SLICER3 fur ISO-Oberflachen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 129/238
10.7. ISO OBERFL ACHEN 109
10.7.1 Das SLICER3 Tool
Das SLICER3 Tool ist ein Werkzeug zum graphischen Bearbeiten eines Volumen
Datensatzes.
Beispiel: siehe ’Getting started with IDL’ aus der Online Help.
CD,’/usr/local/idl/idl/examples/data’,CURRENT=olddir
bindata=READ_BINARY(’head.dat’,data_dims=[80,100,57])
data=PTR_NEW(bindata,/NO_COPY)
SLICER3,data
PTR_FREE,data
CD,olddir
Der gelesene 3D-Datensatz besteht aus 57 Schnitten (Scans) der Große 80x100 Pixel.
Hinweis:
Daten werden mit Pointer-Argument bekannt gemacht!
Mit dem SLICER3-Tool kann man u.a. Schnitte durch die Oberflache legen, wie das erste
Beispiel zeigt.
Abbildung 10.24: Programme zur Darstellung: SLICER3-Tool im SLICE-Modus
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 130/238
110 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
Ein zweites Beispiel zeigt die gerenderte Oberflache. Zu dieser Darstellung wurde ein
Threshold-Value eingegeben und die Oberflache gerendert.
Abbildung 10.25: Programme zur Darstellung: SLICER3-Tool im Surface-Modus
Hinweis:
Das SLICER3-Programm kann auch in eigene Programme eingebaut werden.
Informationen zur Benutzung des SLICER3-Programms erhalt man mit dem About-
Icon im SLICER3-Menu.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 131/238
10.8. ANIMATION VON DATEN 111
10.8 Animation von Daten
Anderungen an Daten konnen mit einer Animation wie ein ablaufender Film dargestellt
werden. Animation durch erneutes Zeichnen
– zu jeder Zeit wird die Information nachgezeichnet
IDL> demo
unter:
Visualization - Surface Objects - Style (Wire) - View (Animate)
– Benutzung der TV Prozedur
– Benutzung einer Pixmap IDL> demo
unter:Medical - Beating Heart or Image Animation
Earth Science - Flythroug
Animation unter Benuztung eines Tools
Das Programm XINTERANIMATE erlaubt die Darstellung von Bildern als Animation
durch die Verwendung des Compound Widgets CW ANIMATE. Damit ist es moglich, die
Funktion von XINTERANIMATE in eigenen Programmen zu verwenden.
XINTERANIMATE
– Aufruf von XINTERANIMATE mit unterschiedlichen Parametern zur Initiali-
sierung, Laden und Ausfuhrung.
XINTERANIMATE, SET=[ sizex, sizey, nframes ]
XINTERANIMATE, FRAME=i, IMAGE=data
XINTERANIMATE, 5
CW ANIMATE
– Aufruf von unterschiedlichen Routinen zur Initialisierung, Laden und
Ausfuhrung
cwbase = CW_ANIMATE( parent, sizex, sizey, nframe )
CW_ANIMATE_LOD, cwbase, FRAM=i, IMAGE=data
CW_ANIMATE_RUN, cwbase, 5
Weitere Informationen zu Compound Widgets, siehe Seite 187 .
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 132/238
112 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.9 Arbeiten mit dem Cursor
Datenwerte konnen mit dem Cursor aus einer Darstellung ausgelesen werden.
Nachfolgende Befehle sollten nur mit Fenstern (WINDOW) benutzt werden. Im Zusamm-
hang mit Widgets sollte das nachfolgende nicht benutzt werden!
Einschalten des Crosshair Cursor
– TVCRS, 1
– TVCRS, 0
Mit TVCRS,1 bekommt man einen Crosshair-Cursor, mit TVCRS,0 bekommt man
einen Arrow-Cursor. Positionieren des Cursors
– TVCRS, 0.8, 0.5, /NORMAL Verstecken des Cursors
– TVCRS, /HIDE CURSOR Position des Cursors lesen
– CURSOR, x, y, /NORMAL
– PRINT, x, y
Das Keyword /NORMAL bewirkt, daß die Koordinaten im normalisierten Koordia-
tensystem zuruckgegeben werden.
Button Events abwarten
– CURSOR, x, y, /DEVICE, /DOWN
/CHANGE
/DOWN /UP/WAIT /NOWAIT
Hinweis:
Nicht in Zusammenhang mit dem XMANAGER benutzen.
Besser ist es, das Keyword BUTTON EVENTS bei der WIDGET DRAW() Funkti-
on und in einer Event-Handler Routine zu benutzen.
Feststellen, welcher Knopf gedruckt wurde
– CURSOR, x, y, /NORMAL, /DOWN System-Variable !ERR
!ERR = 0 kein Button!ERR = 1 linker Button
!ERR = 2 mittlerer Button
!ERR = 4 rechter Button System-Variable !MOUSE
HELP,!MOUSE,/STR
** Structure !MOUSE, 4 tags, length=16:
X LONG 0
Y LONG 0
BUTTON LONG 0
TIME LONG 0
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 133/238
10.10. ZUSAMMENFASSUNG DER DARSTELLUNGS-ROUTINEN 113
10.10 Zusammenfassung der Darstellungs-Routinen
10.10.1 allgemeine Routinen
ERASE Loschen der Bildflache
PLOTS Zeichnen von Linien und Punkten
POLYFILL Fullen beliebiger 2D bzw. 3D Polygone (Farbe, Muster)
USERSYM Definition eines Symbols
XYOUTS Text an bestimmte Stelle
AXIS beliebige neue Achse mit Beschriftung und Skalierung
Tabelle 10.4: Programme zur Darstellung: Zusammenfassung allgemeiner Routinen
10.10.2 eindimensionale Plotroutinen
Plot Routine Beschreibung
PLOT Neues Bild
Plot mit neuer Achse
Setzen der Skalierung (linear, logarithmisch)
Mit den Keywords /XLOG und /YLOG
sind lin./log. bzw. log./log. Achsen moglich
OPLOT XY Plot, ohne Vorschub ohne Achse
benutzt Skalierung von PLOT oder AXIS
10.10.3 mehrdimensionale Plotroutinen
CONTOUR Hohenlinen (2D)
SHADE SURF Schattierter Surface Plot (3D und 4D)
SURFACE Gitterlinien Oberflache (3D und 4D)
Tabelle 10.5: Programme zur Darstellung: Zusammenfassung mehrdimensionaler Plotroutinen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 134/238
114 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
10.11 IDL-Anwendungen
Im folgenden werden IDL Anwendungen vorgestellt.
Diese IDL-Programme konnen fur eigene Applikationen benutzt und verandert wer-
den.
SHOW3,DIST(40) SHOW3 macht eine kombinierte Darstellung
2D Array wird als Kombination von Image-, Surface- und
Contour-Bild dargestellt
Abbildung 10.26: Programme zur Darstellung: SHOW3
XLOADCT Widget zum Laden einer vordefinierten Farbtabelle
XPALETTE Widget zum Laden, Andern und Erstellen einer Farbtabelle
DEMO IDL Demo
XFONT Funktionen zum Auswahlen eines Fonts, z.B. mit tmp=
XFONT()
ANNOTATE Beschriftung eines Bildes
XSURFACE Widget fur SURFACE
IMAGE CONT Uberlagerung eines Image-Bildes mit einem Contour-Bild
ZOOM Vergroßern und Verkleinern
SLICER3 Widget zur Darstellung eines 3D-Datensatzes (Schnitte, Iso
Oberflachen). Das SLICER3-Tool wird auf Seite 109 vorgestellt.
DECIMATE Windows: Polygonales Mesh Clipping
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 135/238
10.11. IDL-ANWENDUNGEN 115
XVOLUME Anzeige und intervakive Manipulation von 3D-Datensatzen und
ISO-Surfaces.
XVAREDIT XVAREDIT startet ein Widget zur Anzeige einer Variablen. Diese
Variable kann z.B. ein Vektor, ein Array oder eine Struktur sein.
Die Werte der Variablen konnen in dem Widget editiert werden.
10.11.1 Ubungen:
Die Losungen zu den Ubungen findet man im Anhang auf Seite 206 .
1. Die Daten x,y sollen geplottet werden.
ang = 2*!PI*INDGEN(360,/FLOAT)/359.
x = COS(ang)
y = SIN(ang)
(a) ohne Achsen
(b) Achsen in Schwarz, Daten in Blau mit dem Kreuz als Symbol.
(c) Nur die positiven Y-Daten in Rot und die negativen in Blau zeichnen.
(d) Der Achsenursprung soll bei (0,0) liegen.
(e) Der Kreis soll als Kreis dargestellt werden. Der Durchmesser soll z.B. 10 cm
betragen.
2. (a) Zeichne gefullte Hohenlinien! Wie heißt das Keyword?
(b) Zeichne auf gefullte Flachen Hohenlinien.
(c) Zeichne Hohenlinien fur die Werte 6,12.5, 18.7,24 mit jeweils einer ande-
reren Farbe.
3. Die Daten x,y und ang sollen dargestellt werden.
(a) Werte sichtar.
(b) mit CONTOUR
(c) mit CONTOUR aber nur 10 Level gefullt.
(d) die Randlinie soll in verschiedenen Farben fur 10 gleichmaßig verteilte Level
gezeichnet werden.
ang = 2*!PI*INDGEN(360,/FLOAT)/359.
x = COS(ang)
y = SIN(ang)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 136/238
116 KAPITEL 10. PROGRAMME ZUR ANWENDUNGS-DARSTELLUNG
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 137/238
Kapitel 11
Bildverarbeitung
Bilddaten konnen mit IDL gelesen, analysiert und weiterverarbeitet werden.
11.1 Lesen eines Bildes
Ein Bild wird in einer Matrix, einem 2D Feld, mit Datentyp BYTE abgespeichert, d.h jeder
Pixelwert liegt zwischen 0 und 255.
Lesen der Datei galaxy.dat
OPENR,lun,FILEPATH(’examples/data/galaxy.dat’),/GET_LUN
im=MAKE_ARRAY(256,256,/BYTE)
READU,lun,im
FREE_LUN,lun
Das Kapitel ’Lesen und Schreiben von Dateien’ folgt auf Seite 127 .
117
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 138/238
118 KAPITEL 11. BILDVERARBEITUNG
11.2 Kontrastversch arfung
Die Operatoren
und¡
und die WHERE Funktion sind Hilfsmittel zur Kontrast-
verscharfung.
und¡
Operator zur Kontrastverst arkung
ERASE
TV,im > 40B ; 40B ist das neue Minimum
TVSCL,im > 40B ; TVSCL benutzt gesamten Farbbereich
TVSCL,im > 40B < 200B ; Bereich von Werten Anwendung der WHERE Funktion
a=[2B,4B,6B]
tmp=a < 0B
idx=WHERE (a < 0B, COUNT)
PRINT, idx
Der Vektor tmp hat nach der Zuweisung tmp=a<0B die Wertetmp=[0B,0B,0B]. Wenn das Keyword COUNT den Wert 0 hat, wurden
keine Elemente gefunden, die der Bedingung entsprechen. Wenn dies der Fall
ist, hat idx den Wert -1. Daher sollte man den Wert COUNT prufen, wie im
nachfolgenden Beispiel gezeigt wird, ehe man den Vektor idx als Index fur ein
Feld verwendet.
idx=WHERE ( (im GE 200B) OR (im LE 100B),COUNT)
IF COUNT GT 0 THEN im[idx]=0B
TVSCL,im
idx ist ein Vektor. Falls COUNT GT 0 kann man den Vektor idx als Index fur einFeld nutzen.
11.3 Ver andern der Bildgr oße
Zur Skalierung von Bildern stehen die Funktionen CONGRID und REBIN mit zwei unter-
schiedlichen Algorithmen zur Verfugung. Das Beispiel im ist ein Bild der Große 256x256
new=REBIN(im,128,512) & TV,new
Halbieren in Breite und Verdoppeln in Hohe. Die Bildgroße kann nur mit ganzahli-
gen Faktoren verandert werden. Diese Funktion ist schneller als CONGRID.
new=CONGRID(im,640,421,/INTER) & TV,new
Mit CONGRID ist eine beliebige Vergroßerung oder Verkleinerung moglich.
Die Default-Einstellung fur die Interpolation ist die nearest-neighbor Methode. Eine
bilineare Interpolation kann man mit dem Keyword INTER erreichen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 139/238
11.4. DARSTELLUNG EINES BILDES 119
11.4 Darstellung eines Bildes
Bilder werden mit dem Befehl TV oder TVSCL dargestellt.
TV,im
Das Bild wird mit TV angezeigt.Die Defaultposition ist die linke untere Ecke des graphischen Ausgabegerates,
das Bild wird von unten nach oben dargestellt.
TV,im,/ORDER
Verandern der Zeilenordnung, Bild von oben nach unten
/ORDER uberschreibt den Defaultwert temporar.
ERASE
loscht die Zeichenflache
TVSCL,im
TV zeigt die Farbwerte, die in der Bilddatei stehen, direkt an. Der TVSCL-Befehl
skaliert die vorhandenen Farbwerte auf den Bereich 0B bis 255B, d.h. es erfolgteine Streckung der Farben auf die gesamte Farbpalette.
besser
TVSCL,BYTSCL(im,TOP=!D.TABLE SIZE-1)
Streckung auf verfugbare Farben,
effektiv mit zusatzlichen Keywords: MIN, MAX
Abbildung 11.1: Bildverarbeitung: TVSCL
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 140/238
120 KAPITEL 11. BILDVERARBEITUNG
11.5 Positionieren des Bildes
Es gibt zwei Moglichkeiten, Bilder zu positionieren. Zum einen, uber einen Index und zum
anderen mit einem Bildoffset in Pixeln.
Mit TV,im,0wird die erste Position oben links des Ausgabegerates verwendet. Bei meh-
reren Positionsangaben laufen die Bild-Positionen von links oben nach rechts unten,sieheauch Seite 121.
Der Befehl TV,im,300,200mit zwei Parametern 300,200 beinhaltet eine Positions-
angabe. Das Bild im wird ab der Device-Koordinaten-Position X=300 und Y=200 von
unten nach oben gezeichnet. Mit der Systemvariablen !ORDER=1 bzw. dem Keyword
ORDER kann man steuern, daß ein Bild von oben nach unten gezeichnet wird.
Beispiel:
Anzeige eines Farbbalkens links und ein Bild rechts daneben
bar=BYTARR(20,256)
FOR i=0,19 DO bar[i,*]=BINDGEN(256)
ERASE
TV,bar
TV,im,20,0
Abbildung 11.2: Bildverarbeitung: TV
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 141/238
11.6. BILDANALYSE 121
11.6 Bildanalyse
IDL bietet verschiedene Filter. Einige dieser Filter werden auf dieser Seite beispielhaft
dargestellt. Durch die kombinierte Anwendung von Filter- und WHERE-Funktion ist IDL
ein machtiges Werkzeug zur Bildanalyse. Das Satelliten-Daten Auswerte-ProgrammENVI
ist in IDL geschrieben.
11.6.1 Arbeiten mit Basisfiltern
In diesem Beispiel werden die Basisfilter SMOOTH, MEDIAN, SOBEL und die Filterung
im Frequenzraum mit eingebautem FFT vorgestellt. Außerdem wird in diesem Beispiel
die Positionierung eines Bildes uber einen Index vorgestellt. Damit ist die Darstellung
mehrerer Bilder in einem Fenster moglich. Die Bilder werden in die Ausgabe geschrieben,
wie in der unten stehenden Graphik skizziert ist, und zwar von links nach rechts und von
oben nach unten.
Eventuell: LOADCT,5 zum Laden einer anderen Farbtabelle oder XLOADCT Großes Window, damit mehrere Bilder reinpassen
WINDOW,XSIZE=800,YSIZE=600
TV,im,0
Position 0, links oben
Ein Parameter = Position im Bild!
Schematische Anordnung der Bilder im Window
0 1 2
3 4 5
TV,SMOOTH(im,3),1Mittelwertfilter uber 3 Nachbarn, Position 1
TVSCL,MEDIAN(im,3),2
Median- Filter, Unterdruckung einzelner Spitzen,
geringe Kantenverschmierung, Position 2
TVSCL,SOBEL(im),3
Differentielle Kantenverstarkung, Position 3 Filterung im Frequenzraum mit eingebautem FFT
imf=FFT(im,-1); Daten im Frequ.Raum
filter=DIST(256) LT 50 ;ideales Tiefpassfilter
imf=filter*imf ; Filterung
TVSCL,FFT(imf,1),4 ; Ruecktranf., Darstellung
Mit dem TVRD()-Kommando kann man das Bild vom Bildschirm lesen. Die Zuweisung
new=TVRD()kopiert das Bild in die Variable. new enthalt ein Array vom Typ: BYTE und
kann als PostScript-Datei abgespeichert werden. Information zur Ausgabe, siehe Seite 77 .
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 142/238
122 KAPITEL 11. BILDVERARBEITUNG
Abbildung 11.3: Bildverarbeitung: Basisfilter
Hinweis:
Zur weiteren Verarbeitung gibt es die Routinen: WRITE BMP,
WRITE JPEG, WRITE PNG, WRITE TIFF, (WRITE GIF)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 143/238
11.6. BILDANALYSE 123
11.6.2 Ausw ahlen und Verarbeiten einer Region
Haufig ist es wichtig, zusammenhangende Regionen eines Bildes z.B. gleicher Farbe zu
identifizieren. Dazu dient das Programm REGION GROW. Es filtert Daten, die einer be-
stimmten Bedingung entsprechen. Diese Bedingung kann als ein Bereich von einem mini-
malen und maximalen Wert vorliegen. Alle Indices, deren Werte in diesen Schwellenbe-reich fallen, werden zuruckgegeben. Damit kann man z.B. die Flache einer Region bestim-
men.
Das nachfolgende Beispiel zeigt eine Anwendung dieser Routine, um bestimmte Regionen
in einem Bild zu identifizieren. In unserem Beispiel ist dies ein Salatblatt.
Abbildung 11.4: Bildanalyse: Auswahlen einer Region
Das Beispiel verwendet eine BOX CURSOR Routine, damit man einen Bereich
auswahlen kann. Sobald der Bereich ausgewahlt wird, werden die Daten aus dem
Bild img dazu verwendet, einen Grenzbereich zu bestimmen. Durch diese SchwelleTHRESHOLD=[min,max] verhindert man, daß Ausreißer die Auswertung bestimmen.
Die Routine REGION GROW gibt ein Index-Feld zuruck. Die dazugehorigen Daten werden
in der Farbe Rot eingefarbt.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 144/238
124 KAPITEL 11. BILDVERARBEITUNG
PRO bild_analyse
DEVICE,DECOMPOSED=0
!P.color=255
!P.background=0
!ORDER=0area=20.98*29.72
img=TRANSPOSE(READ_PNG(’salat.png’))
test=QUERY_IMAGE(’salat.png’,info)
WINDOW,0,XSIZE=info.dimensions[1],YSIZE=info.dimensions[0]
LOADCT,0
TVLCT,r,g,b,/GET & r[5]=255b & g[5]=0b & b[5]=0b
TVLCT,r,g,b
TV,imgWHILE N_ELEMENTS(RESULT) EQ 0 DO BEGIN
XYOUTS,0.02,0.97,/NORM,COLOR=0,CHARSIZE=2,$
’Select region with cursor’
XYOUTS,0.1,0.1,/NORM,COLOR=0,CHARSIZE=2, $
’Drag Left button to move box!C’+ $
’Drag Middle button near a corner to resize box.!C’+$
’Right button when done.’
X0=100 & Y0=info.dimensions[0]-0.1*info.dimensions[0]
N0=10 & N1=10
BOX_CURSOR,x0,y0,N0,N1,/INIT
image_part=img[x0:x0+N0,y0:y0+N1]
threshold=[MIN(image_part,MAX=MAX),max]
x=INDGEN(N0)+X0
y=INDGEN(N1)+Y0
data=x#y
region = REGION_GROW(img, data,THRESHOLD=threshold)
IF region[0] NE -1 THEN BEGIN
img[region]=5b
TV,img
all_pixels= info.dimensions[0]*info.dimensions[1]
result=FLOAT(N_ELEMENTS(region))/FLOAT(all_pixels)*area
XYOUTS,0.02,0.97,/NORM,CHARSIZE=2.0 , COLOR=0, $
’Selected Area is ’+STRING(result,format=’(F6.2)’)+$
’cm!E2!B’
ENDIF
ENDWHILE
END
Beispiel 11.1: Bildanalyse: Verarbeiten einer Region
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 145/238
11.6. BILDANALYSE 125
Falls das Beispiel beim ersten Mausklick kein Ergebnis liefert, erfolgt eine neue Cursor-
Abfrage. Ein mogliches Ergebnis zeigt das nachfolgende Bild.
Abbildung 11.5: Bildanalyse: Auswahlen einer Region
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 146/238
126 KAPITEL 11. BILDVERARBEITUNG
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 147/238
Kapitel 12
Lesen und Schreiben von Daten
IDL arbeitet in Anlehnung an FORTRAN so, daß man eine Datei zum Lesen und/oder
Schreiben zuerst offnen muß. Nachdem man die Datei gelesen und/oder geschrieben hat,
muß man diese schließen.
12.1 Offnen von Dateien
OPENR Offnen einer bereits existierenden Datei nur fur Eingabe
OPENW Offnen einer neuen Datei nur fur Ausgabe. Falls diese bereits existiert,
wird der bisherige Inhalt geloscht.
OPENU Offnen einer bereits existierenden Datei fur Ein- und Ausgabe
Tabelle 12.1: Lesen und Schreiben von Daten: Offnen
Syntax: OPENR,unit,’filename’
Zuordnung einer Unitnummer zu der angegebenen Datei.
Wird fur Ein- und Ausgaberoutinen benotigt.
Als unit sind die Unitnummern 1- 99 direkt wahlbar.
Keywords:
GET LUN
Es wird automatisch eine freie Unitnummer ermittelt (100- 128)
APPEND
Mit der Option APPEND ist es moglich, eine Datei zu erweitern. Die Daten werden
an das Ende der bestehenden Datei angefugt.
F77 UNFORMATTED Fur unformatierte Fortran-Dateien
127
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 148/238
128 KAPITEL 12. LESEN UND SCHREIBEN VON DATEN
12.2 Beispiele fur das Offnen und Schließen von Dateien
Logische Unit Nummern (direkt)
OPENR,5,’maroo bells.dat’
CLOSE,5
Ermittlung einer Unitnummer mit GET LUN
OPENR,unit,’maroo bells.dat’,/GET LUN
FREE LUN,unit
Alle Dateien schliessen
CLOSE,/ALL
Auch mit GET LUN geoffnete Dateien werden geschlossen
Hinweis:
Bei mit GET LUN geoffneten Dateien wird die Datei mit CLOSE zwar geschlossen, aber
der Counter bleibt auf der letzten geoffneten Unitnummer stehen. Daher sollte man besser
FREE LUN zum Schließen von Dateien verwenden, die mit GET LUN geoffnet sind. Die
Datei wird geschlossen und die logische Unit Number (lun) wieder freigegeben.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 149/238
12.3. LESEN UND SCHREIBEN VON DATEN 129
12.3 Lesen und Schreiben von Daten
Die Programme fur formatierte bzw. unformatierte Eingabe und Ausgabe von Daten sind
in nachfolgender Tabelle gelistet.
READF Formatierte Eingabe von einer DateiPRINTF Formatierte Ausgabe auf eine Datei
READU Unformatierte Eingabe von einer Datei
WRITEU Unformatierte Ausgabe auf eine Datei
Tabelle 12.2: Lesen und Schreiben von Daten: Lesen und Schreiben von Daten
Syntax: READF,unit,var1,var2,...varn
(Fur die anderen Routinen entsprechend.)
Beispiel:
Freies Format (nicht formatiert!)
array=intarr(5)
READ,array ; liest vom Keyboard
var1=FLTARR(3,8)
var2=INTAR(10)
var3=’’
OPENR,lun,’datafile.dat’,/GET_LUN
READF,lun,var1,var2,var3
...
FREE_LUN,lun
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 150/238
130 KAPITEL 12. LESEN UND SCHREIBEN VON DATEN
12.3.1 Formale Vorschriften beim Lesen
Beim Einlesen ohne Formatangabe werden standardmaßig Werte vom Typ FLOAT
erwartet.
Variablen vom Typ INT bzw. LONG mussen entweder vor dem Lesen initialisiert werden
oder nach dem Einlesen in den entsprechenden Typ umgewandelt werden.
Hinweis:
Einlesen in indizierte Variablen ist nicht moglich!
Grund: READF ist ein IDL Programm. Ruft man dieses mit einem indizierten Feld
auf, so ist dies eine Ubergabe call by value. Das IDL Programm READF kann keinen Wert
zuruckgeben.
Nur eine Ubergabe call by reference kann einen Wert zuruckgeben, siehe auch Seite 144.
var1=FLTARR(10) & var2=var1 & var3=var1
temp1=0.0 & temp2=temp1 & temp3=temp1
OPENR,lun,’datafile.dat’,/GET_LUN
FOR j=0,9 BEGIN
READF,lun,temp1,temp2,temp3
var1[j]=temp1 & var2[j]=temp2 & var3[j]=temp3
ENDFOR
FREE_LUN,lun
Vorbesetzung mit FLOAT Werten, wenn man beim Lesen keinen Typ angibt!
Weitere Regeln:
Eingabe durch Komma, Leerzeichen oder Tabulatoren trennen
Jeder READ-Befehl greift auf eine neue Eingabezeile zu
Wird auf eine Variable vom Typ STRING eingelesen, werden alle weiteren Zeichen
der Zeile auf diese Variable eingelesen
Hinweis:
ASCII Daten lassen sich nur dann schnell einlesen, wenn sie wie Arrays behandelt wer-
den.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 151/238
12.3. LESEN UND SCHREIBEN VON DATEN 131
12.3.2 Lesen (explizit) formatierter Daten
Das Lesen und Schreiben expliziter Format Daten funktioniert mit einer Formatangabe wie
in der Programmiersprache Fortran!
READF,lun,var,FORMAT=
FORMAT=’(I3)’
FORMAT=’(6I2,4(I5,X))’
FORMAT=’(F10.2)’
FORMAT=’(6F5,4(I4,F10.3))’
D double precision
I Integer
E scientific notation
n X skip n character
A character data
F Float
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 152/238
132 KAPITEL 12. LESEN UND SCHREIBEN VON DATEN
12.3.3 Lesen und Schreiben unformatierter Daten
Daten vom Typ BYTARR (images) werden gewohnlich unformatiert gelesen und geschrie-
ben.
Die Große der Felder muß bekannt sein.
Lesen
var1=FLTARR(30,200)
var2=INTARR(30)
OPENR,lun,’datafile.dat’,/GET_LUN
READU,lun,var1,var2
FREE_LUN,lun
Schreiben
OPENW,lun,’datafile.dat’,/GET_LUNWRITEU,lun,var1,var2
FREE_LUN,lun
12.3.4 Lesen von unformatierten Daten mit assozierten Variablen
Mit dem Befehl ASSOC kann man mehrere gleichgroße Bilder in einer schnellen und kom-
fortablen Art und Weise verarbeiten. Die Bilder mussen hintereinander abgespeichert vor-liegen. Mit den OPENR-Befehl offnet man die Datei und ordnet dann mit dem ASSOC
Befehl die logische Unitnummer und die Bildgroße einer Variablen zu. Uber einen Index
greift man auf die einzelnen Bilder zu. Der Mechanismus funktioniert solange, wie die
Datei offen ist.
OPENR, lun, ’datafile.dat’,/GET_LUN
image = ASSOC ( lun, BYTARR(256,256) )
TVSCL, image[3]
; Verarbeitung von image[3]
FREE_LUN, lun
Hinweis: Es wird immer nur ein Bild im Speicher gehalten. Nach dem CLOSE bzw. FREE LUN kein Zugriff mehr auf die Variable image.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 153/238
12.4. ARBEITEN MIT DATEIEN 133
12.4 Arbeiten mit Dateien
In diesem Abschnitt werden einige Befehle beschrieben, die fur das Arbeiten mit Dateien
sehr hilfreich sind.
Testen der End-Of-File Bedingung
WHILE NOT EOF(lun) DO BEGIN ...
Hilfe und Informationen uber Dateien
HELP, /files
info = FSTAT(lun)
PRINT, info.size
PRINT, info.cur_ptr
HELP, info, /STRUCTURE
Posititionieren des File Pointer
POINT LUN, lun, 0
Suchen nach Dateien
files = FILE SEARCH(’$DATADIR/*.dat’, COUNT=c )
Selektieren von Dateien
pick=DIALOG PICKFILE(path=’˜/idlkurs’,filter=’*.pro’)IF STRLEN(pick) EQ 0 THEN RETURN
OPENR, lun, pick, /GET LUN
Oberflache zur Selektion eines Files wird geoffnet
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 154/238
134 KAPITEL 12. LESEN UND SCHREIBEN VON DATEN
12.5 Operationen auf Dateien/Verzeichnissen ohne Wech-
sel zum Betriebssytem
Eigenschaften von Dateien oder Verzeichnissen kann man mit IDL Routinen abfragen. Es
ist kein Wechsel zum Betriebssytem notwendig.
FILE CHMOD Zugriffsrechte andern
FILE DELETE loscht ein oder mehrere leere Directories oder einen File
bzw. mehrere Files
FILE EXPAND PATH gibt zu einem File den voll qualizifierten Pfad mit Namen an
FILE MKDIR legt ein neues Directory oder mehrere Directories an (mit
Default-Zugriffsrechten)
FILE SEARCH sucht nach Dateien.
FILE TEST Uberprufen ob File existiert, ohne daß man diesen offnen
muß
FILE WHICH durchsucht einen angegebenen Pfad nach einem File, sonst
wird der IDL Pfad !PATH durchsucht
FSTAT z.B. Filegroße in Bytes und Modifikationsdatum
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 155/238
12.6. AUTOMATISIERTE EINGABE EINES ASCII-DATENSATZES 135
12.6 Automatisierte Eingabe eines ASCII-Datensatzes
READ ASCII ist ein Programm zur automatisierten Eingabe von ASCII-Datensatzen, die
spaltenweise abgespeichert sind.
READ ASCII erkennt ob Strings, Integerdaten oder Floatdaten eingelesen werden. Es konnen wahlweise Zeilen zu Beginn uberlesen werden bzw. getrennt von den
Datenzeilen eingelesen werden. Die Daten werden in einer Struktur gespeichert. Das Programm ist bei großen Datenmengen recht langsam!
Mit idlde steht dieses Programm zur interaktiven Anwendung uber das Menu in der
Tool Area bereit.
Das Datenfile wird analysiert und gelesen. Dazu wird ein Widget gestartet, in dem der
Benutzer die Analyse der Daten beeinflußen kann.
Aufruf vom IDL-Programm
Das Programm READ ASCII benotigt ein Template, welches man interaktiv erstellen
kann. Dieses Template kann man sichern und in einer neuen IDL-Sitzung mit RESTORE
laden. Eine andere Moglichkeit ist, die mit ASCII TEMPLATE erstellte Struktur im Pro-
gramm zu deklarieren, siehe Beispiel lese ascii.pro. Das Programm und auch das
skizzierte Beispiel arbeitet mit der Datei ascii input.dat
filename=’ascii_input.dat’ ; sonst Widget zur Auswahl
template=ASCII_TEMPLATE(filename)
SAVE, template, FILE=’save.dat’
Hinweis:
READ ASCII lauft nicht in Run-Time (execute).
Das Einlesen großer Dateien mit READ ASCII ist sehr langsam, da mit Formatangabe
zeilenorientiert gelesen wird. Eine Array-orientierte Eingabe dagegen ist schneller.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 156/238
136 KAPITEL 12. LESEN UND SCHREIBEN VON DATEN
READ ASCII Template und Anwendung
RESTORE,’save.dat’
filename=’ascii_input.dat’ ;sonst Widget zur Eingabe
data = READ_ASCII( filename,
TEMPLATE=template, HEADER=header, DATA_START=17)
help,template,/str
** Structure <300be730>, 10 tags, length=176, refs=1:
VERSION FLOAT 1.00000
DATASTART LONG 16
DELIMITER BYTE 32
MISSINGVALUE FLOAT NaN
COMMENTSYMBOL STRING ’’
FIELDCOUNT LONG 9
FIELDTYPES INT Array[9]
FIELDNAMES STRING Array[9]
FIELDLOCATIONS LONG Array[9]
FIELDGROUPS INT Array[9]
help,data,/str
** Structure <3046a500>, 9 tags, length=7160, refs=1:
FIELD1 LONG Array[179]
FIELD2 STRING Array[179]
FIELD3 LONG Array[179]
FIELD4 FLOAT Array[179]
FIELD5 FLOAT Array[179]
FIELD6 FLOAT Array[179]
FIELD7 FLOAT Array[179]
FIELD8 FLOAT Array[179]
FIELD9 FLOAT Array[179]
Beispiel 12.1: Arbeiten mit Dateien: READ ASCII Template
data.field1 enthalt die Daten der 1. Spalte,
data.field2 enthalt die Daten der 2. Spalte, usw.
Kopfzeilen der Datei kann man fur die Dateneingabe mit dem Keyword DATA START
ignorieren. Mit der Option HEADER kann man den uberlesenen Text in einer ASCII-Datei
abspeichern. Die Option HEADER funktioniert nur in Verbindung mit dem KeywordDATA START.
12.6.1 Zusammenfassung gebr auchlicher Lese- uns Schreibroutinen
READ ASCII Lesen von ASCII Daten
READ BINARY Lesen von binarer Daten
READ IMAGE Lesen von Image Daten
Tabelle 12.3: Lesen und Schreiben von Daten: Zusammenfassung von Lese- und Schreibroutinen
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 157/238
12.7. BEISPIEL: LESEN UND SCHREIBEN 137
12.7 Beispiel: Lesen und Schreiben
PRO datei_op
;--------------------------------------------
; Oeffnen der Ein- und Ausgabedateien
;--------------------------------------------
OPENR, unit_in, ’datei_op.in’, /GET_LUN
OPENW, unit_out, ’datei_op.out’, /GET_LUN
;--------------------------------------------
; Einlesen
;--------------------------------------------
zeile = ’ ’
READF, unit_in, zeile
zeile = STRCOMPRESS(zeile)
params = STRSPLIT(zeile,’ ’,/EXTRACT)
maxwerte = 1000
nparams = N_ELEMENTS(params)
werte = FLTARR(nparams,maxwerte)
wertezeile = FLTARR(nparams)
nwerte = 0
WHILE NOT EOF(unit_in) DO BEGIN
READF, unit_in, wertezeile
werte[*,nwerte] = wertezeile
nwerte = nwerte + 1
ENDWHILE
werte = werte[*,0:nwerte-1]
;--------------------------------------------
; Verarbeitung der Werte
;--------------------------------------------
werte = werte * 10.
;--------------------------------------------
; Ausgabe der Ergebnisse
;--------------------------------------------
PRINTF, unit_out, params, FORMAT=’(’+STRING(nparams)+’A10)’
PRINTF, unit_out, werte, FORMAT=’(’+STRING(nparams)+’F10.2)’
;--------------------------------------------
; Schliessen der Ein- und Ausgabedateien
;--------------------------------------------
FREE_LUN, unit_in
FREE_LUN, unit_out
END
Beispiel 12.2: Lesen und Schreiben: Programm zum Lesen und Schreiben
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 158/238
138 KAPITEL 12. LESEN UND SCHREIBEN VON DATEN
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 159/238
Kapitel 13
Programmierung und Kompilation
Main Programm Folge von Statements, die mit END beendet wird. Ein Main
Programm hat keine Argumente und ist nur explizit und nicht
von anderen Programmen aufrufbar.
Prozedur IDL-Programm ohne expliziten Ruckgabewert. Kommunikati-
on mit anderen Routinen uber Argumente.
Funktion Wie Prozedur, jedoch mit explizitem Ruckgabewert.
Eine Funktion kann in einem Ausdruck verwendet werden.
Textuelles Einfugen von IDL Statements ist moglich, siehe Batchverarbeitung auf Seite
140.
Hinweis:
Die Erstellung der Programme ist mit einem beliebigem Texteditor moglich.
139
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 160/238
140 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.1 Batchverarbeitung
Eine Batch Datei (JOURNAL) enthalt ein oder mehrere IDL Befehle oder Statements. Bei
der Ausfuhrung einer Batch Datei wird diese zeilenweise gelesen und direkt interpretiert.
Beispiel: Protokoll einer interaktiven Sitzung
JOURNAL, ’Datei’ Start eines Protokolls
JOURNAL beenden
Die Textdatei mit Namen ’Datei’ enthalt alle eingegebenen Befehle.
Ein spateres Editieren dieser Datei ist moglich.
Mit dem Befehl @name kann man die Datei name interaktiv von der Kommandozeile als
Batchdatei ablaufen lassen.
Eine andere Moglichkeit ist, @name in einem IDL-Programm einzufugen.
13.2 Formales zu IDL-Programmen IDL Programme ...
– 1. Statement beginnt mit ...
PRO Prozedur
FUNCTION Funktion
Main: beginnt mit beliebigem IDL Statement
– Routine endet auf ...
Main, Prozedur und Funktion enden mit END
Bei der Funktion wird zusatzlich der Ruckgabewert angegeben.
RETURN,wert– Namensgebung:
Main, Prozedur und Funktion haben die Extension .pro
13.3 Definition einer Prozedur oder Funktion
PRO pro name,p1,p2,...KEYWORD1=pk1,KEYWORD2=pk2 .....
FUNCTION func name,p1,p2,...KEYWORD=pk1,KEYWORD2=pk2....p1,p2,... Positionale Parameter, optional
pk1,pk2... Optionale Keywordvariable
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 161/238
13.4. AUFRUF EINER PROZEDUR ODER FUNKTION 141
13.4 Aufruf einer Prozedur oder Funktion
(IDL Bibliotheksprogramm oder vom Benutzer geschriebenes Programm)
Prozedur-Name,p1,p2,... KEYWORD1=pk1,KEYWORD2=pk2 .....
result=Funktions-Name(p1,p2,... KEYWORD1=pk1,KEYWORD2=pk2 .....)
p1,p2,... Positionale Parameter
Reihenfolge muß eingehalten werden
pk1,pk2,... Keywordvariable
beliebige Reihenfolge!
Abkurzung moglich
KEYWORD1,KEYWORD2 ist die Bezeichnung selbst,
pk1, pk2 ist der Parameter
Beide Parametertypen konnen optional sein, siehe Online Help: mit [ ] gekennzeichnet
sind die optionalen Parameter.
13.5 Regeln fur die Namensgebung von IDL Programmen
Der Name einer Funktion oder Prozedur ist durch die Bezeichnung gegeben, die auf PRO
oder FUNCTION folgt. Daher Funktion/Prozedur mit diesem Namen und der Extension
.pro benennen. Dadurch werden die Routinen als IDL Programme erkannt.
In IDL kann man jede Prozedur oder Funktion als .pro abspeichern.
Eine Datei kann aber auch aus mehreren Programmeinheiten bestehen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 162/238
142 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.6 Kompilieren/Ausfuhren einer Prozedur/Funktion
Ein IDL Programm muß vor dem Aufruf kompiliert werden. Dieses kann explizit mit einem
Befehl geschehen aber auch implizit durch einen Aufruf einer Routine.
Hinweis:Das IDL-Programm wird nur gefunden, wenn es im aktuellen Verzeichnis oder im IDL-
Suchpfad liegt.
Wenn die Datei mehrere Programmeinheiten enthalt, muß der Name der Datei gleich dem
Namen der letzten Prozedur/Funktion in dieser Datei gewahlt werden.
Grund:
IDL ubersetzt beim ersten Aufruf das Programm und zwar sequentiell bis zu der Routine,
die physikalisch als Filenamen vergeben wurde. Eventuell nachfolgende Routinen werden
ignoriert.
Beispiel: c.proPRO a
...
END
PRO b
...
END
PRO c
...
END
Hinweis:
Existiert eine weitere Routine b.pro (im aktuellen Suchpfad) zusatzlich zu oben auf-
gefuhrten Beispiel c.pro, so wird das Programm b.pro nicht neu ubersetzt, da dieses
Programm bereits bekannt ist.
Bei jedem weiteren Aufruf wird die Prozedur oder Funktion nur ausgefuhrt und nicht wie-
der kompiliert. Nach einer Anderung ist eine explizite Kompilation mit dem .COMPILE
Befehl erforderlich.
Meist wird man jedoch mit der idlde-Oberflache arbeiten und die Kompilation im RUN-
Menu mit dem COMPILE-Befehl erledigen. Dieser COMPILE-Befehl arbeitet wie der.COMPILE-Befehl, den man von der Command-Line absetzen kann und ubersetzt alle
Programme, die in der angegebenen Datei vorliegen. Die Ausfuhrung erfolgt mit demRUN-
Befehl des RUN-Menus.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 163/238
13.7. BEISPIELE F UR IDL PROGRAMME 143
13.7 Beispiele fur IDL Programme
Hauptprogramm
Der Name kann willkurlich gewahlt werden.
Beispiel: sample_hauptprogramm.pro
a=1 & b=FINDGEN(100) & HELP,a,b
END
Aufruf: .run sample_hauptprogramm
Prozedur
Den Namen so wahlen wie die Bezeichnung, die auf .pro endet
Beispiel: sample prozedur.pro
PRO sample prozedur,title=titlePLOT,FINDGEN(100),TITLE=title
END
Aufruf: sample prozedur,title=’test’
Funktion
Den Namen so wahlen wie die Bezeichnung, die auf .pro endet
Beispiel: sample function.pro
FUNCTION sample function,faktor
a=RANDOMU(SEED,10) ; 10 ZufallszahlenRETURN,a*faktor
END
Aufruf: ergebnis=sample function(5.)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 164/238
144 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.8 Speicherverwaltung von Daten
13.8.1 Ubergabe von Parametern an Prozeduren und Funktionen
Bei der Ubergabe von Parametern an Prozeduren und Funktionen unterscheidet man zwi-
schen call by value und call by reference. Ausdrucke, Konstanten, Systemvariablen und indizierte Variablen werden by value
ubergeben.
by value bedeutet: Diese Werte sind Eingabewerte. Uber diese Werte konnen keine
Ruckgaben erfolgen
ergebnis=sample func(5.)
ergebnis=sample func(a[6])
Variablen werden by reference ubergeben.
by reference bedeutet: Diese Variablen sind Eingabewerte. Uber diese Werte konnen
Ruckgaben erfolgen. Wenn diese Variablen im Unterprogramm verandert werden,
muß man beachten, daß die veranderten Werte zuruckgegeben werden. Um das zu
verhindern, muß im Unterprogramm mit einer Kopie der Variablen gearbeitet wer-
den.
value=5.
ergebnis=sample func(value)
arr=MAKE ARRAY(5,5,/INT,VALUE=5)
ergebnis=sample func(arr)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 165/238
13.8. SPEICHERVERWALTUNG VON DATEN 145
13.8.2 Lokale Variable
Dynamische Verwaltung lokaler Daten in IDL
Nach dem Abarbeiten einer Prozedur/Funktion werden alle lokalen Variablen geloscht
und sind bei einem zweiten Aufruf derselben Routine unbekannt. Es gibt kein Gedachtnis!
Wird dies benotigt, mussen die Daten uber Parameterliste, Systemvariablen, COMMONoder Pointer ubergeben werden.
Hinweis:
Speicherplatz von lokalen Variablen nur innerhalb der Prozedur/Funktion belegt!
13.8.3 Regeln fur Parameter
Nur die Parameter, passed by reference, werden an das aufrufende Programm zuruckgege-
ben. Parameter, passed by value, sind im aufrufenden Programm unverandert.
Ausnahmen:
Nach Abarbeitung eines Main Programms bleiben die Variablen erhalten.
MAIN Programme sind daher ideal zum Testen kleiner Programmsequenzen!
Beispiel: Main Programm als mainpro.pro
a=1 & b=1 ; .run mainpro
PRINT,a,b ; dannach bekannt: Variablen a,b
END
IDL Systemvariablen !P, !PI, !D,... sind in jeder Programmeinheit bekannt. Common Block Pointer
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 166/238
146 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.9 Beispiele: Aufruf von Funktionen und Prozeduren
1. FUNCTION multi,value,times
RETURN,value*times
END
PRINT, multi(6,2)
2. FUNCTION quad,x
RETURN,xˆ2+x+4
END
PRINT,quad(4)& PRINT,NR QROMB(’quad’,0.0,6.0)
Die Funktion NR QROMB (Numerical Recipes) liefert ein Integral uber ge-
schlossenes Intervalle. ’quad’ ist der Name der Funktion, die integriert werden
soll, 0.0 und 6.0 definieren die Intervallgrenzen
3. PRO ADD,a,b
a=a+b
END
a=5 & ADD,a,4 ; OK,Uebergabe von A by reference
ADD,4,a ; falsch,4 ist Konstante,Uebergabe by value
; Keine Fehlermeldung
arr=FINDGEN(10)ADD,arr[5],4 ; falsch, indizierte Variable
; Uebergabe by value
Hinweis:
Das Ergebnis einer Funktion kann ohne Zwischenspeichern auf eine neue Variable mit
dem PRINT-Befehl ausgegeben werden, siehe oben. Bei Prozeduren werden Ruckgabe-
werte nur uber Parameter ausgetauscht.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 167/238
13.10. FORWARD FUNCTION FUNKTION 147
13.10 FORWARD FUNCTION Funktion
Ein Problem tritt auf, sobald Argumente in der Deklaration einer Routine gleich lauten
wie Funktionsaufrufe. Ein Beispiel fur den Problemfall folgt im unteren Beispiel durch
die Deklaration des IDL-Programms MEAN.
Der Name der IDL-Routine MEANwird als Argument beim Aufruf der Funktion problembenutzt. Wenn man eine Variable mean als Argument benutzt, geht IDL davon aus, das
auch der zweite Aufruf eine Variable sein soll und uberpruft nicht mehr auf eine zu
ladende Funktion.
Dies kommt daher, weil bis IDL5.0 Array-Indizierung mit runden Klammern ublich
war. Daher wird x=MEAN(mean) in diesem Fall als Indizizierung von MEAN mit mean
verstanden.
;Problem Argumentname gleich lautend wie Funktionsname
;
;FUNCTION problem,mean
x=MEAN(mean)
RETURN,x
END
Beispiel 13.1: Programmierung und Kompilation: ohne FORWARD FUNCTION
Aufruf:
x=problem(INDGEN(10))
PRINT, x
0 1 2 3 4 5 6 7 8 9
Mit der Routine FORWARD FUNCTION hat man die Moglichkeit, diesen Konflikt zu
beheben. Dadurch wird in der Routine definiert, daß das Argument mit dem gleichlauten-
den Namen in einem Funktions-ahnlichem Aufruf auf jedem Fall als Funktion von IDL
interpretiert wird.
Syntax:
FORWARD FUNCTION Name1,Name2,....
; Anwendung von FORWARD_FUNCTION um den Konflikt; Argumentname gleich Funktionsaufruf zu beheben.
;
FUNCTION no_problem,mean
FORWARD_FUNCTION MEAN
x=MEAN(mean)
RETURN,x
END
Beispiel 13.2: Programmierung und Kompilation: mit FORWARD FUNCTION
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 168/238
148 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
Aufruf:
x=no problem(INDGEN(10))
PRINT, x
4.50000
Hinweis:Man sollte darauf achten, Argumente niemals so zu nennen wie Funktions-Aufrufe in der
selben Routine.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 169/238
13.11. KONTROLL-STATEMENTS 149
13.11 Kontroll-Statements
Wie in jeder Script-Sprache gibt es auch in IDL Definitionen, die eine strukturierte Pro-
grammierung erlauben. Das Format solcher Anweisungen unterscheidet sich zwischen
Script-Sprachen.
IDL spezifisch ist, daß Blocke mit BEGIN, IF, CASE, FOR usw. beginnen. Die jewei-
ligen Endstatements spezifizieren den Typ des zu schliessenden Blocks (END, ENDIF,
ENDCASE, ENDFOR usw.).
Der BEGIN-Block ist eine Zusammenfassung von Statements, die dann wie ein Statement
behandelt werden.
BEGIN
statement_1
......
statement_n
END
Mit IF wird eine Bedingung auf true/false gepruft. Falls die Bedingung erfullt ist, wird der
BEGIN-Block ausgefuhrt. Wahlweise kann ein Block fur die Behandlung erfolgen, sobald
die Bedingung nicht erfullt ist.
IF (true) THEN BEGIN
......
ENDIF [ ELSE BEGIN
......
ENDELSE]
Falls nur ein Statement ausgefuhrt wird, kann man den IF-Fall auch in eine Zeile schrei-
ben.
IF A THEN B=1 ELSE BEGIN
C=2 & D=4
ENDELSE
IF A NE 2 THEN PRINT,’A is not 2’
Aquivalente Schreibweisen:
IF ( a EQ b ) THEN c=a ELSE c=0.0
c = ( a EQ b ) ? a : 0.0
In beiden Fallen wird gepruft, ob der Ausduck (a EQ b) Gultigkeit hat. Bei Gleichheit
wird c=a gesetzt, sonst c=0.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 170/238
150 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
Die Variable test wird getestet. Im Beispiel werden die Falle test=0, test=1,
test=2 behandelt. Fur test=0 wird ein PRINT ausgefuhrt und fur test=1 wird der
BEGIN-Block ausgefuhrt. Fur test=2werden andere beliebige Anweisungen ausgefuhrt.
Falls test keinen der Werte 0, 1 oder 2 hat, gilt das was bei der ELSE-Anweisung pro-
grammiert ist.
test=0
CASE test OF
0: PRINT,’OK’
1: BEGIN
.... ; mehrere Statements als BEGIN Block
END
2: ....
ELSE: ; Crash ohne ELSE bei nicht abgeprueftem Wert
ENDCASE
SWITCH arbeitet anders als CASE. Wenn x den Wert 1 hat, wird ab der Stelle 1: abgear-
beitet bis zum ENDSWITCH
Wenn x=2 ist, wird ab der Stelle 2: abgearbeitet bis zum ENDSWITCH
x=2
SWITCH x OF
1: PRINT,’one’
2: PRINT,’two’
3: PRINT,’three’
4: PRINT,’four’
ENDSWITCH
Ausgabe:
two
three
four
Die FOR-Schleife wird fur die Werte I=1,... bis N durchlaufen.
FOR I=1,N DO BEGIN
......ENDFOR
Die FOR-Schleife wird fur die Werte I=N,... bis -5 mit dem Inkrement -1 durchlaufen
FOR I=N,-5,-1 DO BEGIN
......
ENDFOR
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 171/238
13.11. KONTROLL-STATEMENTS 151
Wenn man FOR X=0,1.,0.1 kodiert, hat man eine Endlos-Schleife, da x=0 vom Typ
INT ist und eine Addition einer FLOAT Zahl 0.1 den Wert X nicht erhoht.
FOR X=0.,1.,0.1 DO BEGIN
; Inkrement 0.1 ; ...
ENDFOR
Diese Schleife lauft ab 0. mit dem Inkrement 0.1, also fur die Werte
0.,0.1,0.2,...,1.0
Die WHILE-Schleife wird ausgefuhrt, solange die Bedingung (A LT B) erfullt ist. Die
Bedingung wird am Schleifenanfang getestet.
A=1
B=10
WHILE ( A LT B ) DO A=A*2 ; Ergebnis: A=16
Diese WHILE-Schleife wird ausgefuhrt, solange die Bedingung (NOT EOF(1)) erfullt
ist. Beendet wird die Schleife, wenn das Dateiende gefunden wird.
WHILE ( NOT EOF(1) ) DO BEGIN
readf,1,a
i=i+1
...
ENDWHILE
Die REPEAT-Schleife wird solange ausgefuhrt, bis die Bedingung (A GT B) erfullt ist.
Die Bedingung wird am Schleifenende getestet.
A=1
B=10
REPEAT A=A*2 UNTIL ( A GT B) ; Ergebnis: A=16
GOTO ist eine Verzweigung zu einer Stelle, die im Programm mit einem Label ’ende:’
markiert ist.
GOTO, ende
....
ende:
STOP
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 172/238
152 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.12 Uberprufung der Argumente und Keywords
Der Aufruf einer Prozedur/Funktion kann mit weniger oder ohne Parameter/Keywords er-
folgen, als durch die jeweilige Definition festgelegt ist.
Anzahl der positionalen ParameterKeywordparameter nicht berucksichtigt
number=N_PARAMS()
Ist ein Keywordparameter gesetzt?
defined=KEYWORD_SET(variable)
defined=1 (true) bzw. defined=0 (false)
Die Anzahl der Werte selbst ist nur mit N ELEMENTS zu ermitteln.
Anzahl der Elemente
n=N_ELEMENTS(variable)
– Ein Skalar hat nur ein Element A=1
Im Gegensatz dazu ist A=[1] ein Vektor mit einem Element
(siehe SIZE-Funktion auf Seite 25).
– Bei Array: Produkt der Dimensionen
– falls undefiniert: 0
Wie wurde das Argument ubergeben?
defined=ARG_PRESENT(variable)
defined=1 Ubergabe: by reference
defined=0 Ubergabe: by value
Hinweis:
KEYWORD SET, N ELEMENTS und ARG PRESENT
gelten fur Positional- und Keywordparameter
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 173/238
13.13. BEISPIEL 153
13.13 Beispiel
Das Programm zeigt die Uberprufung der aktuellen Aufrufparameter einer Funktion. Mit
N PARAMS ermittelt man die Anzahl der positionalen Parameter. N ELEMENTS hat den
Wert 0, wenn kein Wert vorliegt. Mit KEYWORD SET uberpruft man, ob eine Keyword-
Variable TRUE oder FALSE definiert wurde.
PRO PLOT_IT,P1,P2,COLOR=color,SYMBOL=yes
ON_ERROR,1
CASE N_PARAMS() OF
0: Message,’Must Call Plot_it With One Parameter’
1: BEGIN
dep=P1
indep=INDGEN(N_ELEMENTS(P1),/FLOAT)
END
2: BEGIN
dep=P2indep=P1
END
ELSE: BEGIN
MESSAGE,’Must call Plot_it With one Parameter’,$
/INFO,/CONTINUE
RETURN
END
ENDCASE
IF (N_ELEMENTS(color) EQ 0) THEN color=0
IF KEYWORD_SET(yes) THEN psym=4 else psym=0
LOADCT,5PLOT,indep,dep,/Nodata
OPLOT,indep,dep,COLOR=color,PSYM=psym
END
Beispiel 13.3: Programmierung und Kompilation: Uberprufung der Parameter
M ogliche Aufrufe:
a=INDGEN(100,/FLOAT) & curve=SIN(a/5)/EXP(a/50)
time=INDGEN(100,/FLOAT)*6./99
PLOT_IT,curvePLOT_IT,time,curve
PLOT_IT,curve,COLOR=150
PLOT_IT,curve,/SYMBOL
PLOT_IT,time,curve,COLOR=100,SYMBOL=1
P1 und P2 sind positionale Parameter. SYMBOL ist die Bezeichnung der Keyword-
Variablen, wahrend yes der Wert der Keyword-Variablen ist.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 174/238
154 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.14 Durchschleusen zus atzlicher Argumente
Das EXTRA Keyword hat folgende Bedeutung:
IDL erlaubt die Vererbung von Keyword Parametern. Dadurch ist es moglich, Keywords,
die nicht in einer Prozedur oder Funktion deklariert sind, an darunter liegende Routinen
zu ubergeben. Damit hat man die Moglichkeit, sehr leicht sogenannte Wrapper-Routinenzu schreiben, da man nicht alle Keywords neu deklarieren muß.
PRO uebung,TITLE=title,_EXTRA=extra
HELP,extra,/STR
a=DIST(20)
SURFACE,a,_EXTRA=extra
HELP,extra,/STR ; Information! was steht in extra?
IF (N_ELEMENTS(TITLE) eq 1) then $
XYOUTS,0.5,0.5,/NORM,TITLE
END
Folgende Aufrufe sind moglich:
uebung
uebung,/LEGO,TITLE=’Surface Programm’
uebung,BACKGROUND=100,/SKIRT
Die Keywords LEGO, BACKGROUND und SKIRTwerden an die Routine SURFACEweiter
gereicht.
Hinweis:EXTRA ist eine Strukturvariable! Es konnen alle m oglichen Ubergaben auf diese Art
gemacht werden, auch Tippfehler!
Ein nicht gultiger Parameter/Keyword wird von der jeweiligen Funktion ignoriert.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 175/238
13.15. COMMON BLOCKE 155
13.15 COMMON Bl ocke
COMMON Blocke dienen dazu, Daten in verschiedenden Programmeinheiten bekannt zu
machen. Diese Art der Datenubergabe ist wohl die alteste. Man macht eine Initialisierung
der Daten im Programm und ist damit nicht sehr flexibel. Vorsicht ist auch geboten, wenn
sich die Lange des COMMON-Blocks andert.
Hinweis:
Es gibt eine andere Moglichkeit der Datenubergabe:
Daten in Strukturen, Pointer auf Strukturen
Einige IDL Routinen arbeiten mit COMMON Blocken.
Syntax:
COMMON commonblock_name,var1,var2,...varn
IDL belegt die Common-Block Variablen mit Werten (Gegensatz dazu: FORTRAN ein
Speicherbereich)
Beispiel:
PRO A
COMMON SHARE,E,F,G ; Deklaration
E=1 & F=2 & G=3 ; a muss einmal aufgerufen werden
END ; E, F, G dann ueberall bekannt
PRO B
COMMON SHARE ; beliebig referierbar
A=E*F ; Variablen E,F,G bekanntEND
PRO C
COMMON SHARE
PRINT,E,F,G
END
Beispiel 13.4: Programmierung und Kompilation: COMMON-Blocke
Hinweis:
Nur im ersten Programm PRO A einen Commonblock definieren, in allen weiteren Pro-
zeduren diesen Commonblock, wie unter PRO B referieren. Bei einer Anderung des
Commonblocks ist dieser nur an einer Stelle zu andern.
Bei einer Anderung des Commonblocks
IDL neu starten oder Command Line Interface:
.reset session oder .full reset session Umgebung idlde Menu Run Reset
(ohne idlde-Umgebung zu verlassen)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 176/238
156 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
13.16 Dynamische Erweiterung von Programmen
Das Kompilieren und die Ausfuhrung von Programmen wahrend der Programmausfuhrung
ist wichtig, wenn sich der Programmcode wahrend einer IDL-Sitzung andert! Mit RESOLVE ROUTINE kann man wie mit .COMPILE kompilieren, jedoch ist die-
ser Aufruf auch innnerhalb einer Prozedur oder Funktion moglich. Dieser Befehl
erzwingt also eine Neu-Kompilation.
Anschließend muß die Prozedur oder Funktion aufgerufen werden.
PRO check
...
RESOLVE_ROUTINE,’test’
...
END
test.pro wird wahrend der Programmausfuhrung kompiliert.
Mit EXECUTE(string ) kann man wahrend der Programmausfuhrung IDL-
Statements kompilieren und ausfuhren. Man kann z.B. wahrend der Laufzeit neue
Variablen generieren.
r=EXECUTE(’PLOT,[0,1]’)
r=EXECUTE(’vec=FINDGEN(100)’)
Der Return-Value r hat den Wert 1 falls der String z.B. ’PLOT,[0,1]’ richtig
kompiliert wurde.
Hinweis:
EXECUTE und RESOLVE ROUTINE sind bei RUNTIME nicht erlaubt!
Mit CALL PROCEDURE bzw. CALL FUNCTION konnen Parameter an kompilierte
Routinen ubergeben werden.
result=CALL_PROCEDURE(’PLOT’,para1, para2,...)
Schneller als EXECUTE!
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 177/238
13.17. UBUNGEN 157
13.17 Ubungen
Die Losungen zu den Ubungen findet man im Anhang auf Seite 208.
1. Ubung mit KEYWORD SET, ARG PRESENT und N ELEMENTS
Ubung mit KEYWORDS
Die unten stehende Tabelle kann als Ubung ausgefullt werden!
FUNCTION test1,minimum=min_val
IF KEYWORD_SET(min_val) THEN RETURN,1 ELSE RETURN,0
END
FUNCTION test2,minimum=min_valIF ARG_PRESENT(min_val) THEN RETURN,1 ELSE RETURN,0
END
FUNCTION test3,minimum=min_val
IF N_ELEMENTS(min_val) GT 0 THEN RETURN,1 $
ELSE RETURN,0
END
CALL |test1 |test2 |test3
_______________________________________________________
PRINT, testX( ) | | |
_______________________________________________________
PRINT, testX(minimum=0) | | |
_______________________________________________________
PRINT, testX(minimum=10) | | |
_______________________________________________________
PRINT, testX(minimum=-10) | | |
_______________________________________________________
mv=0 & PRINT, testX(minimum=mv) | | | _______________________________________________________
mv=10 & PRINT, testX(minimum=mv)| | |
_______________________________________________________
PRINT, testX(minimum=mv2) | | |
_______________________________________________________
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 178/238
158 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
Ubung mit positionalen Parametern
Die unten stehende Tabelle kann als Ubung ausgefullt werden!
FUNCTION test1,min_val
IF KEYWORD_SET(min_val) THEN RETURN,1 ELSE RETURN,0
END
FUNCTION test2,min_val
IF ARG_PRESENT(min_val) THEN RETURN,1 ELSE RETURN,0
END
FUNCTION test3,min_val
IF N_ELEMENTS(min_val) GT 0 THEN RETURN,1 $
ELSE RETURN,0
END
CALL | test1 | test2 |test3
___________________________________________________
PRINT, testX( ) | | |
____________________________________________________
PRINT, testX(0) | | |
____________________________________________________PRINT, testX(10) | | |
____________________________________________________
PRINT, testX(-10) | | |
____________________________________________________
mv=0 & PRINT, testX(mv) | | |
____________________________________________________
mv=10 & PRINT, testX(mv) | | |
____________________________________________________
PRINT, testX(mv2) | | |
____________________________________________________
2. Schreibe eine IDL-Prozedur, die eine schattierte Oberflache (SHADE SURF) zeich-
net und mit einer Gitterlinie (SURFACE) ubermalt (/ OVER).
Zeichne einen Hohenlinienplot ganz oben ins Bild (Z=1) und wahle einen Farbindex
fur die Gitterlinie und den Hohenlinienplot.
Folgende Definition der Prozedur mysurface soll gelten:
PRO mysurface,data,xgrid,ygrid,CONT=cont,COLOR=col
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 179/238
13.17. UBUNGEN 159
3. Schreibe eine Funktion mit zwei Input Variablen. Der Typ der ersten Input Variablen
soll auf die zweite Variable ubertragen werden. Die zweite Variable soll im geander-
tem Typ zuruckgegeben werden.
result=my_type(var1,var2)
4. Schreibe eine Funktion, die ein Zeichen in einem Text ersetzen kann, z.B. das Zei-
chen E.
txt=’DiEs ist ein Test!’
5. Simulation einer SMS-Eingabe:
Schreibe eine Routine die z.B. den Satz ’DIES IST EIN TEST’ in den SMS Zahlen-
code ubersetzt. Ein Wort pro Zeile z.B.: DIES : 31 43 32 74.Das Ergebnis soll in einer Datei gesichert werden, z.B. sms.txt
Verwende hierzu lediglich die Tasten 2 bis 9. Diese entsprechen den Zeichen: A bis
Z. Achte beim Eingeben darauf, keine Worte mit anderen Zeichen zu verwenden.
Diese Eintragungen sollen sortiert und Dupletten entfernt werden.
Sobald ein Wortschatz von ca. 70 Worten besteht, entwickle eine Routine sms t9
die die t9-Logik verwendet. Nach Tastendruck von zwei Ziffern soll ein Wort aus
der vorher gespeicherten Datei das mit A, B usw. beginnt, vorgeschlagen werden.
Durch weitere Tastendrucke soll der Vorschlag verbessert werden. Mit der Taste 0
wird zwischen moglichen Worten ausgewahlt. Mit der Taste # wird der Vorschlag
akzeptiert.
Beispiel: Nach Eingabe von 2
ENTER¡ 6
ENTER¡
wird AM vorgeschlagen
Mit 0 ENTER ¡ wird in den Auswahl Modus geschaltet Weitere 0 ENTER ¡
Eingaben werden solange betatigt, bis AN vorgeschlagen wird Die Eingabe wird mit
# beendet.
Kann kein passendes Wort vorgeschlagen werden, soll in den Eingabemodus des
ersten Programms gewechselt werden, um den Wortschatz zu vergroßern.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 180/238
160 KAPITEL 13. PROGRAMMIERUNG UND KOMPILATION
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 181/238
Kapitel 14
Fehlersuche
Selten ist die Arbeit an einem Programm mit dessen Kompilation abgeschlossen. Meistens
beginnt mit dem Austesten auch die Fehlersuche. Hilfreich dazu ist ein Debugger. Dieser
erlaubt die schrittweise Ausfuhrung von Programmen. Wahrend der Laufzeit kann manden Programmablauf kontrollieren und Anderungen von Variablen anzeigen.
Die Ausfuhrung der Debug-Befehle sind im Kapitel Beschreibung der Applikationen
siehe Seite 10 beschrieben.
Vorgehen bei der Fehlersuche
In der Regel geht man bei der Fehlersuche in der Entwicklungsoberflache idldewie folgt
vor. In der Kommando-Umgebung zu IDL ist das Vorgehen ahnlich.
1. An eine geeignete Stelle, die vor einem moglichen Fehler liegen sollte, setzt man
einen Breakpoint. Ein Breakpoint wird durch Auswahlen einer Zeile mit dem Befehl
Set Breakpoint aus dem Menu RUN gesetzt.
2. Das Programm wird gestartet. Es halt am Breakpoint an. Alle in diesem Script defi-
nierten Variablen vor dem Breakpoint sind jetzt bekannt und werden im Variablen-
Watch-Window angezeigt.
3. Die Variablen werden auf ihre Richtigkeit uberpruft. Evtl. sieht man daran schon,
was falsch ist.
4. Mit dem Kommando Step aus dem RUN Menu ist eine schrittweise Ausfuhrung
weiterer Befehlszeilen moglich. Man sieht an Hand der Variablen, was das Pro-gramm macht. Durch das standige Uberprufen der Variablen und das Wiederholen
dieses Schrittes findet man schließlich den Fehler.
5. Die Anweisungen werden verbessert bzw. erganzt und der Fehlertest wird noch mal
wiederholt.
161
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 182/238
162 KAPITEL 14. FEHLERSUCHE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 183/238
Kapitel 15
Programmanalyse
Wenn die Ausfuhrungszeit eines Programmes langsamer ist als man erwartet, kann man
dies mit dem Profiler analysieren. Er erlaubt eine Analyse eines Programmes und aller
aufgerufenen Unterprogramme.
PROFILER
Dieses Programm ermoglicht eine Performance-Analyse der Anwendung mittels Monito-
ring. Die Aufruf-Frequenz eigener und System-Programme kann gelistet werden.
; einschliesslich IDL System Prozeduren
PROFILER, /SYSTEM
; Bibliotheksfunktion DIST.; DIST wird direkt kompiliert
A= DIST(500)
TV, A
; Ergebnisse mit PROFILER, /REPORT
PROFILER, /REPORT
IDL listet:
Module Type Count Only(s) Avg.(s) Time(s)
FINDGEN (S) 1 0.000239 0.000239 0.000239
FLTARR (S) 1 0.010171 0.010171 0.010171
N_ELEMENTS (S) 1 0.000104 0.000104 0.000104
ON_ERROR (S) 1 0.000178 0.000178 0.000178
SQRT (S) 251 0.099001 0.000394 0.099001
TV (S) 1 2.030000 2.030000 2.030000
163
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 184/238
164 KAPITEL 15. PROGRAMMANALYSE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 185/238
Kapitel 16
Error Handling
Um zu vermeiden, daß IDL bei unerwarteten Fehlern abbricht, hat man die Moglichkeit,
das Verhalten beim Auftreten von Fehlern zu steuern.
IDL bricht die Ausfuhrung standardmaßig in der Routine ab, die den Fehler erzeugt.
Innerhalb dieser Routine hat man Zugriff auf die lokal bekannten Variablen und keinen
Zugriff auf die Variablen der aufrufenden Routine.
Bei einem Fehler im Unterprogramm bleibt das Programm stehen und kehrt nicht
in das aufrufende Programm zuruck. Damit ist der Zugriff auf die Variablen des
Unterprogramms beschrankt.
Der Befehl RETALL bewirkt, daß zur Aufruf-Ebene zuruck verzweigt wird (oberste
Ebene).
Der Befehl RETURN [, wert] bewirkt daß IDL einen Wert an das anrufendeProgramm zuruckgibt (eine Ebene).
Reset bei idlde: STOP im Run-Menu
Als Befehl: .RESET SESSION, bzw. .FULL RESET SESSION
Bei unerklarlichen Fehlern:
IDL mit exit verlassen und neu starten
In der System-Variablen !ERROR STATE sind Informationen zum Fehler gespeichert.
165
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 186/238
166 KAPITEL 16. ERROR HANDLING
16.1 Abfrage des Fehlerzustandes
Wenn ein Fehler auftritt kann man uber die Systemvariable !ERROR STATE Informatio-
nen zu dem Fehler erhalten.
HELP,!ERROR_STATE
<Expression> STRUCT = -> !ERROR_STATE Array[1]
Struktur,Systemvariable mit
verschiedenen Informationen
HELP,!ERROR_STATE,/STRUCT
** Structure !ERROR_STATE, 7 tags, length=52:
NAME STRING ’IDL_M_SUCCESS’
BLOCK STRING ’IDL_MBLK_CORE’
CODE LONG 0SYS_CODE LONG Array[2]
MSG STRING ’’
SYS_MSG STRING ’’
MSG_PREFIX STRING ’% ’
Die System-Variablen !ERR, !ERROR, !ERR STRING sollten durch die neuen System-
Variablen !ERROR STATE.CODE, !ERROR STATE.NAME, !ERROR STATE.MSG
ersetzt werden. Der Informationsgehalt dieser Variablen ist großer.
Genaue Information siehe Reference Guide
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 187/238
16.2. UMLEITEN VON FEHLERN 167
16.2 Umleiten von Fehlern
Man kann verhindern, daß ein Fehler zum Abbruch des Programms fuhrt. Dies erreicht
man mit den Routinen ON ERROR, ON IOERROR oder CATCH
ON IOERROR,label
Mit ON IOERROR kann ein IO-Error abgefangen werden. Das Prgramm verzweigt
zu dem angegebenen label. Dieser Befehl hat eine hohere Prioritat als CATCH.
ON ERROR,1
bei Fehler Rucksprung zum IDL-Main-Level (veraltet, besser CATCH)
CATCH,error status
– genereller Mechanismus zur Fehlerbehandlung
– Keine Behandlung mathematischer Fehler!
– CATCH Prozedur als Batch File einfugen (kein end!)
– Der Error-Status wird mit 0 initialisiert
– wenn ein Fehler auftritt, wird im Calling-Stack nach CATCH gesucht. Ist
CATCH vorhanden ist, wird das auf CATCH folgende Statement ausgefuhrt.
Falls kein CATCH vorhanden wird nach ON ERROR gesucht.
– mit CATCH,/CANCELwird der aktuelle CATCH-Mechanismus aufgehoben.
Damit ist es moglich, weitere Fehler mit diesem CATCH-Mechanismus zu be-
arbeiten.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 188/238
168 KAPITEL 16. ERROR HANDLING
16.3 Beispiel zu CATCH
PRO err_test
err_test1
err_test2
END
PRO err_test1
@catch_proc
PRINT,var1
END
PRO err_test2
@catch_proc
PRINT,var2
END
Listing von catch procerrornum = 0
CATCH, errornum
IF errornum NE 0 THEN BEGIN
CATCH,/CANCEL
HELP,/LAST_MESSAGE,OUTPUT=traceback
errarray = [’Error caught: ’, traceback]
a = DIALOG_MESSAGE(errarray,/ERROR)
RETURN
ENDIF
Beispiel 16.1: Error Handling: CATCH
Die Prozedur err test wird aufgerufen. Diese ruft err test1. In err test1 wird
catch proc als Folge von IDL-Statements eingezogen. In err test1 wird eine
unbekannte Variable gedruckt. Dieser Fehler wird mit CATCH,erronum abgefragt.
Wenn diese Error-Number ungleich Null ist, wird der Fehler in dem Widget, daß mit
DIALOG MESSAGE erstellt wurde, mit Traceback dokumentiert. Das Programm wartet,
bis der OK-Knopf in dem Widget quittiert wird. Voraussetzung dafur, daß ein weiterer
Fehler in der gleichen Art und Weise behandelt werden kann, ist das der CATCH-
Mechanismus mit dem Befehl CATCH,/CANCEL zuruckgesetzt wird. In err test2
passiert ein weiterer Fehler. Das Programm fangt diesen Fehler auch ab.
Abbildung 16.1: Error Handling: CATCH
Beispiel: err test.pro, err test1.pro, err test2.pro, catch proc
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 189/238
16.4. AUSGABE VON FEHLERNACHRICHTEN 169
16.4 Ausgabe von Fehlernachrichten
Mit MESSAGE wird eine Meldung ausgegeben, z.B. MESSAGE,’error occured’.
Es gibt die Optionen /CONTINUE oder /INFORMATIONAL.
Mit CONTINUE wird der Fehler kommentiert und das Programm lauft weiter.
INFORMATIONAL ist mit !QUIET=1 abschaltbar (man sieht dann die Message nicht).
Ohne eines der beiden Keywords halt die Routine an dieser Stelle.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 190/238
170 KAPITEL 16. ERROR HANDLING
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 191/238
Kapitel 17
Widgets
Ein Widget stellt eine graphische Bedienoberflache dar. Es dient damit der Kommunikation
zwischen einem Benutzer und einem Programm. Durch verschiedene Komponenten, wie
Schalter und Anzeigen kann der Benutzer mit dem darunter liegenden Programm kommu-nizieren und den Ablauf beeinflussen.
Im folgenden wird die Erstellung einer graphischen Bedienoberflache beschrieben.
17.1 GUI Builder
In der Windows Version von IDL gibt es seit Version 5.2 einen Widget Editor. Mit diesem
Widget Editor lassen sich sehr einfach positional angeordnete Widgets erstellen. Diese
formal erstellte Bedienoberflache kann, ohne daß man diese andern muß, auf andere
Plattformen portiert werden.
Der Widget Editor ist nur in der Microsoft Windows Version verfugbar und wird in diesem
Dokument nicht behandelt.
171
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 192/238
172 KAPITEL 17. WIDGETS
17.2 Typen von Widgets
Eine Oberflache wird durch Aufrufe einzelner Widget Funktionen gestaltet. Eine Ubersicht
uber die verfugbaren Widget Funktionen gibt folgende Aufstellung.
WIDGET BASE Ein Widget, welches in hierarchischer Anordnung andere
Widgets enthalt
Zuordnungsbasis mit positionalen Eigenschaften
WIDGET BUTTON definiert Knopfe, Gruppen von Knopfen
WIDGET TEXT definiert editierbaren Text
WIDGET DRAW definiert Graphikfenster ahnlich Window
WIDGET TABLE definiert eine Tabelle
WIDGET SLIDER definiert einen Schieberegler
WIDGET LABEL definiert ein Beschriftung, kann nicht editiert werden
WIDGET LIST definiert eine Liste von Textzeilen, z.B. Menu
WIDGET DROPLIST definiert einen Knopf, der eine herunter-klappbare Liste von
Optionen enthalt.
17.3 Erstellung von Menu Widgets
Die Widgets werden in einer zentralen Einheit, der Main-Base, angeordnet. In dem Beispiel
wird ein Menubar erstellt, der mit dem Text Menu beschriftet ist. Wenn man auf diesen
Bar klickt, werden die Buttons mit den Beschriftungen ONE, TWO, THREE sichtbar.
base = WIDGET_BASE(MBAR=bar)
menu = WIDGET_BUTTON(bar, VALUE=’MENU’,$
/MENU)
button1 = WIDGET_BUTTON(menu, VALUE=’ONE’)button2 = WIDGET_BUTTON(menu, VALUE=’TWO’)
button3 = WIDGET_BUTTON(menu, VALUE=’THREE’)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 193/238
17.4. GESTALTUNG DES LAYOUTS EINES WIDGETS 173
17.4 Gestaltung des Layouts eines Widgets
Ein Widget kann positional oder durch Angabe einer zeilen- bzw. spaltenweisen Anord-
nung definiert werden.
Im folgenden Beispiel werden die Buttons in einfacher Art und Weise spaltenweiseangeordnet.
base = WIDGET_BASE(COLUMN=1)
but1 = WIDGET_BUTTON(base, VALUE=’Button 1’)
but2 = WIDGET_BUTTON(base, VALUE=’Button 2’)
Im folgenden Beispiel hat die Main-Base eine Zeile. In der Zeile wird eine neue Basecol1
mit einer Spalte und eine zweite Base col2 mit zwei Spalten angelegt.
base = WIDGET_BASE(ROW=1 )
col1 = WIDGET_BASE(base, COLUMN=1)
col2 = WIDGET_BASE(base, COLUMN=2)
Die Main-Base wird haufig auch als Top-Level-Base (TLB) bezeichnet.
Ein komplexeres Beispiel folgt. Es zeigt die hierarchische Anordnung von Zeilen und
Spalten.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 194/238
174 KAPITEL 17. WIDGETS
PRO buttons
base = WIDGET_BASE(ROW = 2)
baseo = WIDGET_BASE(base, ROW = 1, FRAME=6)
baseu = WIDGET_BASE(base, COLUMN = 1, FRAME=6)
base1 = WIDGET_BASE(baseo, COLUMN = 1, FRAME=1)
base2 = WIDGET_BASE(baseo, ROW = 1, FRAME=1)
base3 = WIDGET_BASE(baseu, ROW = 2, FRAME=1)
base4 = WIDGET_BASE(baseu, ROW = 4, FRAME=1)
but1 = WIDGET_BUTTON(base1, VALUE = ’B1 1’, UNAME=’B1 1’)
but2 = WIDGET_BUTTON(base1, VALUE = ’B1 2’, UNAME=’B1 2’)
but3 = WIDGET_BUTTON(base1, VALUE = ’B1 3’, UNAME=’B1 3’)
but4 = WIDGET_BUTTON(base1, VALUE = ’B1 4’, UNAME=’B1 4’)
but1 = WIDGET_BUTTON(base2, VALUE = ’B2 1’, UNAME=’B2 1’)
but2 = WIDGET_BUTTON(base2, VALUE = ’B2 2’, UNAME=’B2 2’)
but3 = WIDGET_BUTTON(base2, VALUE = ’B2 3’, UNAME=’B2 3’)
but4 = WIDGET_BUTTON(base2, VALUE = ’B2 4’, UNAME=’B2 4’)
but1 = WIDGET_BUTTON(base3, VALUE = ’B3 1’, UNAME=’B3 1’)
but2 = WIDGET_BUTTON(base3, VALUE = ’B3 2’, UNAME=’B3 2’)
but3 = WIDGET_BUTTON(base3, VALUE = ’B3 3’, UNAME=’B3 3’)
but4 = WIDGET_BUTTON(base3, VALUE = ’B3 4’, UNAME=’B3 4’)
but5 = WIDGET_BUTTON(base3, VALUE = ’B3 5’, UNAME=’B3 5’)
but6 = WIDGET_BUTTON(base3, VALUE = ’B3 6’, UNAME=’B3 6’)
but1 = WIDGET_BUTTON(base4, VALUE = ’B4 1’, UNAME=’B4 1’)
but2 = WIDGET_BUTTON(base4, VALUE = ’B4 2’, UNAME=’B4 2’)
but3 = WIDGET_BUTTON(base4, VALUE = ’B4 3’, UNAME=’B4 3’)
but4 = WIDGET_BUTTON(base4, VALUE = ’B4 4’, UNAME=’B4 4’)
WIDGET_CONTROL, base, /REALIZE
END
Beispiel 17.1: Widgets: Layout eines Widgets
Mit but1 = WIDGET BUTTON(base1, VALUE = ’B1 1’, UNAME=’B1 1’)
wird ein Button mit der Beschriftung B1 1 erstellt. Der UNAME beinhaltet einen Wert zur
eindeutigen Identifikation des Buttons.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 195/238
17.5. WIE FUNKTIONIERT EINE OBERFL ACHE? 175
17.5 Wie funktioniert eine Oberfl ache?
Der XMANAGER ist ein IDL-Programm, das standig abfragt, welche Knopfe auf der Ober-
flache gedruckt werden. Diese Information wird an den Event-Handler weitergegeben.
Der Event-Handler sorgt fur den Kommunikationsaustausch zwischen Oberflache und
XMANAGER. Der Event-Handler weiß genau, welche Knopfe oder Slider auf der Ober-flache bedient worden sind. Die Ereignisse, die eintreten konnen, mussen in der sogenann-
ten Event-Handler Routine programmiert werden. Eine wichtige Funktion hat dabei die im
nachsten Kapitel beschriebene WIDGET CONTROL und WIDGET INFO Funktion.
17.6 Kontrolle uber die Widgets
Es gibt Funktionen, die der Abfrage der Events dienen oder fur die Steuerung notig sind.
Abfrage von Events
x=WIDGET_INFO( w_id, /UNAME)
gibt den UNAME zuruck.
x=WIDGET_INFO( w_id, FIND_BY_UNAME=’TEST’)
findet die ID, wenn das Widget mit UNAME=’TEST’ definiert wurde.
Abfrage von Werten
WIDGET_CONTROL, w_id, GET_UVALUE=test
Mit GET UVALUE holt man den User Value
WIDGET_CONTROL, w_id, SET_UVALUE=’DONE’
Mit SET UVALUE setzt man den User Value
WIDGET_CONTROL, w_id, GET_VALUE=test
Mit GET VALUE holt man den Wert
WIDGET_CONTROL, w_id, SET_VALUE=50
Mit SET VALUE setzt man einen Wert
Steuerung der Widgets
WIDGET_CONTROL, w_id, /REALIZE
Mit dem Keyword /REALIZE wird das Widget als Oberflache gestartet
WIDGET_CONTROL, w_id, /DESTROY
Mit dem Keyword /DESTROY zerstort man das Widget-Element und alle abhangigen Ele-mente
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 196/238
176 KAPITEL 17. WIDGETS
17.7 Registrierung der Widgets mit dem XMANAGER
Der XMANAGER ist ein komplexes Programm, das in der Regel ausreicht, um mittels
einer EVENT-Handler Routine mit der Oberflache zu kommunizieren. Die Funktion
XREGISTERED ermittelt, ob ein Widget Programm durch den XMANAGER verwaltet wird.
XMANAGER, ’Program Name’, base id
IF XREGISTERED(’Program Name’) THEN RETURN
Man benutzt die zweite Form IF XREGISTERED ..., wenn mehr als eine Kopie des
Programms zur gleichen Zeit lauft.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 197/238
17.8. SCHREIBEN EINES KLEINEN WIDGET PROGRAMMS 177
17.8 Schreiben eines kleinen Widget Programms
Zur Erklarung des Event Handlers wird nachfolgend ein kleines Beispiel definiert.
firstwid.pro
PRO firstwid
base = WIDGET_BASE( COLUMN=1 )
but1 = WIDGET_BUTTON( base, VALUE=’HELLO’, $
UNAME=’HELLO’)
but2 = WIDGET_BUTTON( base, VALUE=’GOODBY’, $
UNAME=’GOODBY’)
WIDGET_CONTROL, base, /REALIZE
XMANAGER, ’firstwid’, baseEND
Beispiel 17.2: widgets: kleines widget Programm
In dem Beispiel wird eine Main-Base eingerichtet. Die Widgets, die angelegt werden, sind
Knopfe mit den Beschriftungen HELLO und GOODBY. Die Ausrichtung der Knopfe
ist spaltenweise. Wie in den obigen Beispielen, wird keine Großenangabe gemacht. Man
uberlaßt es IDL, die Buttons anzulegen.
Diese definierte Anordnung der Widgets wird durch den WIDGET CONTROL Befehl
mit dem Keyword /REALIZE realisiert.
17.8.1 Initialisierung der Event-Loop
Das Beispiel zeigt die Definition der Event-Routine.
PRO firstwid
...
XMANAGER, ’firstwid’, base
END
Der XMANAGER-Befehl wird vor dem END eingefugt und startet die Event-Routine
zu dem angegebenen Programm ’firstwid’. Die Event-Routine heißt daher
firstwid event.
Wenn der XMANAGER gestartet ist, wartet er darauf, daß einer der beiden Knopfe ge-
druckt wird. Diese Aktionen werden in der sogenannten Event-Struktur abgespeichert.
Diese Event-Struktur kann in der Event-Handler Routine kontrolliert abgearbeitet werden.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 198/238
178 KAPITEL 17. WIDGETS
17.8.2 Ubergabe der Event Struktur an den Event-Handler
Das Beispiel zeigt, wie der Event-Handler auf einzelne Aktionen reagiert.
PRO firstwid_event, event
cmd=WIDGET_INFO(event.id,/UNAME)
CASE cmd OF
’HELLO’: PRINT, ’Hi, hello there !’
’GOODBY’: BEGIN
PRINT, ’See you later !’
WIDGET_CONTROL,event.top,/DESTROY
END
ELSE:
ENDCASE
END
PRO firstwid...
END
Beispiel 17.3: widgets: Event Handler
Fur die Event-Handler Routine gelten ein paar formale Regeln, die im folgenden beschrie-
ben werden.
Der Name der Prozedur, in der der XMANAGER aufgerufen wird (firstwid), bestimmt
den Namen der Event-Handler Prozedur (firstwid event).
Die Event-Struktur (in dem Beispiel event) hat Informationen, die fur die Abarbeitung
des Events erforderlich sind. Diese Struktur wird an die Event-Handler Routine ubergeben.
Wie eine solche Struktur aufgebaut ist, ist auf Seite 179 beschrieben.In dem Beispiel werden dann mit der Widget Kontrollfunktion WIDGET INFO die
Ereignisse abgefragt und verarbeitet. WIDGET INFO liefert den UNAME des gedruckten
Knopfes. Dadurch ist die eindeutige Identifikation gegeben. Dieser Name steht dann bei
der CASE-Anweisung vor dem Doppelpunkt und kann entsprechend verarbeitet werden.
Wird der Knopf mit der Beschriftung ’HELLO’ gedruckt, wird der String ’Hi, hello there
!’ ausgegeben. Wird dagegen der Knopf mit der Beschriftung ’GOODBY’ gedruckt, wird
der String ’See you later !’ ausgegeben und das Widget wird beendet.
Hinweis:
Der Befehl WIDGET CONTROL,event.top,/DESTROYzeigt, wie man in der Event-
Routine das Programm sauber verlasssen kann, indem man die ID des Top-Level Widgets
und das Keyword DESTROY angibt.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 199/238
17.9. UBERGABE VON INFORMATIONEN ZWISCHEN WIDGETS 179
17.8.3 Aufbau der Event Struktur fur WIDGET BUTTON
Der Aufbau der Event Struktur wird gelistet. Die Event Struktur steht zur Auswertung der
Event Handler Routine zur Verfugung.
HELP,event,/str
** Structure WIDGET_BUTTON, 4 tags, length=16:ID LONG 2
TOP LONG 1
HANDLER LONG 1
SELECT LONG 1
event.top Nummer des Top-Level-Widgets
event.id Nummer des Widgets, das den Event ausgel ost hat
event.handler Nummer des Widgets, das den Event-Handler aufgerufen hat
ID, TOP und HANDLER sind in allen Events enthalten. Die einzelnen Wigetfunktionen
geben zusatzliche Informationen zuruck, s.o Beispiel WIDGET BUTTON gibt SELECTzuruck.
17.9 Ubergabe von Informationen zwischen Widgets
Bei der Event-Handler Routine kann man keine Parameter-Ubergabe benutzen.
Zum Datenaustausch stehen folgende Moglichkeiten zur Verfugung:
1. Common Blocke:
COMMON ids, w1, w2, w3
COMMON ids (by reference)
2. Ubergabe von Daten (Strukturen) in dem User Value der Main-Base oder auch
Top-Level-Base (TLB).
3. Man kann IDL Pointer nutzen, um komplexe Datenstrukturen in die TLB als User
Value bekannt zu machen.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 200/238
180 KAPITEL 17. WIDGETS
17.10 Widgetprogrammierung im Wandel von IDL
Die Moglichkeit, Widgets zu schreiben, gibt es in IDL schon lange. Die Art, wie diese
Widgets geschrieben werden, hat sich mit der Entwicklung von IDL gewandelt. Anhand
der nachfolgenden kleinen Beispiele wird diese Entwicklung aufgezeigt.
Beispiel 17.4: Widgets: Dieses Widget wird in Beispiel 1 bis 5 bearbeitet
Der Datenaustausch im Widget Programm, d.h. was der Event-Handler braucht, kann in
folgender Weise geschehen (historisch geordnet)
1. Datenaustausch mit Event-Handler uber COMMON Block
Selektion uber UVALUE, siehe wid1.pro
2. Datenaustausch mit Event-Handler uber UVALUE
Selektion uber UVALUE, siehe wid2.pro
3. Datenaustausch mit Event-Handler uber die Funktion
WIDGET INFO, damit Zugriff auf die Top-Level-Event-Handler Struktur
Selektion uber UNAME,siehe wid3.pro
4. wie 3, aber Information wird zuvor in Beispiel wid4 in eine Struktur geschrieben,
die mit SET UVALUE in der Main-Base an den Event-Handler ubergeben wird
Die Selektion erfolgt uber UNAME,
siehe wid4.pro
5. wie 4, aber die Struktur wird als Pointer auf die Main-Base ubergeben.
Die Selektion erfolgt uber UNAME,
siehe wid5.pro
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 201/238
17.10. WIDGETPROGRAMMIERUNG IM WANDEL VON IDL 181
17.10.1 Beispiel: Widget 1
Dieses Beispiel verwendet einen COMMON Block, in dem die WIDGET ID des Text
Widgets gespeichert wird. In der Definition der Widget Funktionen wurde ein UVALUE
(User Value) verwendet und zwar mit einem Namen. Da im EVENT-Handler immer die
EVENT.ID des Widgets bekannt ist, das den EVENT ausgelost hat, kann man UVALUEmit GET UVALUE auslesen. Darauf aufbauend kann man in einer CASE Abfrage die ein-
zelnen Namen unterscheiden.
Sobald der Schalter ’PRINT’ gedruckt wird, wird die COMMONBlock Variable id text
verwendet, um den Text ’DONE’ in das Text Widget zu schreiben. Mit ’QUIT’ wird das
Widget beendet.
; Merkmale:
; Alles was im Event Handler benoetigt wird,
; wird im COMMON deklariert.
; Selektion ueber "uvalue"
PRO wid1_event,event
COMMON wid_co,id_text
WIDGET_CONTROL,EVENT.ID,GET_UVALUE=uv
CASE uv OF
’PRINT’:WIDGET_CONTROL,id_text, SET_VALUE=’DONE’
’QUIT’:WIDGET_CONTROL,event.top,/DESTROY
ELSE:
ENDCASE
END
PRO wid1
COMMON wid_co,id_text
id_base=WIDGET_BASE(row=3)
id_PRINT=WIDGET_BUTTON(id_base,VALUE=’PRINT’,UVALUE=’PRINT’)
id_quit=WIDGET_BUTTON(id_base,VALUE=’QUIT’, UVALUE=’QUIT’)
id_text=WIDGET_TEXT(id_base,VALUE=’’)
WIDGET_CONTROL,id_base,/REALIZE
XMANAGER,’wid1’,id_base
END
Beispiel 17.5: Widgets: wid1
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 202/238
182 KAPITEL 17. WIDGETS
17.10.2 Beispiel: Widget 2
In diesem Beispiel wird die Variable id text mit SET UVALUE auf die Main-Base
geschrieben. Die Main-Base ist im EVENT HANDLER immer EVENT.TOP zugeordnet.
Daher kann man diesen Wert mit GET UVALUE dort auslesen und auf einer Variablen
id text speichern. Die Abfrage der betatigten Schalter ist gleich dem vorherigenBeispiel wid1.pro. Wenn nun der Schalter ’PRINT’ gedruckt wird, wird die Variable
id text verwendet, um den Text ’DONE’ in das Text Widget zu schreiben. Mit ’QUIT’
wird das Widget beendet.
; Merkmale:
; Alles was im event handler benoetigt wird
; ueber uvalue der Main-Base deklariert.
; Selektion ueber "uvalue"
PRO wid2_event,event
WIDGET_CONTROL,event.top,GET_UVALUE=id_text
WIDGET_CONTROL,event.id,GET_UVALUE=uv
CASE uv OF
’PRINT’:WIDGET_CONTROL,id_text,SET_VALUE=’DONE’
’QUIT’:WIDGET_CONTROL,event.top,/DESTROY
ELSE:
ENDCASE
END
PRO wid2id_base=WIDGET_BASE(row=3)
id_PRINT=WIDGET_BUTTON(id_base,VALUE=’PRINT’,UVALUE=’PRINT’)
id_quit=WIDGET_BUTTON(id_base,VALUE=’QUIT’,UVALUE=’QUIT’)
id_text=WIDGET_TEXT(id_base,VALUE=’’)
WIDGET_CONTROL,id_base,/REALIZE,SET_UVALUE=id_text
XMANAGER,’wid2’,id_base
END
Beispiel 17.6: Widgets: wid2
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 203/238
17.10. WIDGETPROGRAMMIERUNG IM WANDEL VON IDL 183
17.10.3 Beispiel: Widget 3
Dieses Beispiel zeigt einige der Moglichkeiten durch die Verwendung von UNAME. Ein
Name, der mittels UNAME anstelle von UVALUE in der Definition der Widget Funktionen
verwendet wird, ist entlang der Widget ID Hierarchie zuordbar. Zunachst wird der
den EVENT auslosende Name durch WIDGET INFO erfragt. Dieser kann in der CASEAnweisung verglichen werden. Sobald der Schalter PRINT betatigt wurde, kann die
ID des WIDGET TEXT ausgelesen werden. Der große Unterschied zu den vorherigen
Beispielen ist, daß keine Information redundant zwischengespeichert werden muß.
; Merkmale:
; Selektion findet ueber ’uname’ statt. Alle von
; Main-Base abhaengigen widgets und deren uname ist
; mit WIDGET_INFO zu erreichen, daher kann man alle
; ids ermitteln, weitere Daten werden nicht benoetigt
PRO wid3_event,event
cmd=WIDGET_INFO(event.id,/UNAME)
CASE cmd OF
’QUIT’ : WIDGET_CONTROL,event.top,/DESTROY
’PRINT’: BEGIN
id=WIDGET_INFO(event.top,FIND_BY_UNAME=’TEXT’)
WIDGET_CONTROL,id,SET_VALUE=’DONE’
END
ELSE:
ENDCASEEND
PRO wid3
id_base=WIDGET_base(ROW=3)
id_PRINT=WIDGET_BUTTON(id_base,VALUE=’PRINT’,UNAME=’PRINT’)
id_quit=WIDGET_BUTTON(id_base,VALUE=’QUIT’, UNAME=’QUIT’)
id_text=WIDGET_text(id_base,VALUE=’’,UNAME=’TEXT’)
WIDGET_control,id_base,/REALIZE
XMANAGER,’wid3’,id_baseEND
Beispiel 17.7: Widgets: wid3
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 204/238
184 KAPITEL 17. WIDGETS
17.10.4 Beispiel: Widget 4
In diesem Beispiel wird neben der Verwendung von UNAME gezeigt, wie man Daten
z.B. eine Struktur x, von der Definitions Prozedur in den Widget Handler bekommt
und dort bearbeiten kann. Damit man an die Variable im Event Handler kommt, wird
sie als UVALUE auf die Main-Base geschrieben. Daher kann sie im Event Handler mitGET UVALUE von EVENT.TOP gelesen werden. Sobald der Schalter betatigt wird, wird
zunachst der alte Text ’Hallo Du’ ausgegeben und dann der Text ’neuer Text’
der Struktur Variablen zugewiesen. Ausgegeben wird er erst nach dem nachsten Betatigen
des Schalters. Damit der Event Handler dann die Anderung noch kennt, muß die Struktur
wieder als UVALUE auf EVENT.TOP gespeichert werden.
; Merkmale:
; Selektion findet ueber ’uname’ statt. Alle von
; Main-Base abhaengigen widgets und deren uname ist mit
; WIDGET_INFO zu erreichen, daher kann man alle ids; ermitteln. Daten die schon waehrend des Ablaufs von
; wid4 vorliegen sollen in den Event-Handler uebergeben
; werden. Dies geschieht mit einer Struktur die auf die
; Main-Base mit uvalue gesetzt wird und dann mit
; WIDGET_CONTROL ausgelesen werden kann. Bei einem
; neu setzen der Werte muss die Struktur aber wieder
; auf event.top geschrieben werden.
PRO wid4_event,event
WIDGET_CONTROL,event.top,GET_UVALUE=x
cmd=WIDGET_INFO(event.id,/UNAME)CASE cmd OF
’QUIT’ : WIDGET_CONTROL,event.top,/DESTROY
’PRINT’: BEGIN
id=WIDGET_INFO(event.top,FIND_BY_UNAME=’TEXT’)
WIDGET_CONTROL,id,set_VALUE=x.value
x.value=’neuer Text’
WIDGET_CONTROL,event.top,SET_UVALUE=x
END
ELSE:
ENDCASE
END
PRO wid4
x={value:’Hallo Du’}
id_base=WIDGET_base(row=3)
id_PRINT=WIDGET_BUTTON(id_base,VALUE=’PRINT’,UNAME=’PRINT’)
id_quit=WIDGET_BUTTON(id_base,VALUE=’QUIT’,UNAME=’QUIT’)
id_text=WIDGET_TEXT(id_base,VALUE=’’,UNAME=’TEXT’)
WIDGET_CONTROL,id_base,/REALIZE,SET_UVALUE=x
XMANAGER,’wid4’,id_base
END
Beispiel 17.8: Widgets: wid4
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 205/238
17.10. WIDGETPROGRAMMIERUNG IM WANDEL VON IDL 185
17.10.5 Beispiel: Widget 5
Dieses Beispiel ist identisch zu dem vorherigen mit dem Unterschied, daß das UVALUE,
welches auf die Main-Base geschrieben wird, zuvor in einen POINTER konvertiert wurde.
Dadurch muß man nicht nach Anderung des Wertes die Struktur wiederum als UVALUE
sichern.
; Merkmale:
; Selektion findet ueber ’uname’ statt. Alle von
; Main-Base abhaengigen Widgets und deren uname ist
; mit WIDGET_INFO zu erreichen, daher kann man alle
; ids ermitteln. Daten die schon waehrend des Ablaufs
; von wid5 vorliegen sollen in den Event-Handler
; uebergeben werden. Dies geschieht mit einer
; Struktur die als Pointer auf die Main-Base in uvalue
; gesetzt wird und dann mit WIDGET_CONTROL ausgelesen
; werden kann. Der Wert kann einfach geaendert werden.
PRO wid5_event,event
WIDGET_CONTROL,event.top,GET_UVALUE=x
cmd=WIDGET_INFO(event.id,/UNAME)
CASE cmd OF
’QUIT’ : WIDGET_CONTROL,event.top,/DESTROY
’PRINT’: BEGIN
id=WIDGET_INFO(event.top,FIND_BY_UNAME=’TEXT’)
WIDGET_CONTROL,id,set_VALUE=(*x).value
(*x).value=’neuer Text’
END
ELSE:
ENDCASE
END
PRO wid5
x={value:’Hallo Du’}
x=PTR_NEW(x,/NO_COPY)
id_base=WIDGET_base(ROW=3)
id_PRINT=WIDGET_BUTTON(id_base,VALUE=’PRINT’,UNAME=’PRINT’)
id_quit=WIDGET_BUTTON(id_base,VALUE=’QUIT’,UNAME=’QUIT’)
id_text=WIDGET_TEXT(id_base,VALUE=’’,UNAME=’TEXT’)
WIDGET_CONTROL,id_base,/realize,SET_UVALUE=x
XMANAGER,’wid5’,id_base
PTR_FREE,x
END
Beispiel 17.9: Widgets: wid5
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 206/238
186 KAPITEL 17. WIDGETS
17.11 Widget Programme fur Runtime-L aufe
start IDL
.COMPILE runtime
RESOLVE_ALL,’runtime’
SAVE,/ROUTINES,FILENME=’runtime.sav’
Der XMANAGERmuß vor dem SAVE einmal aufgerufen worden sein.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 207/238
17.12. COMPOUND WIDGETS 187
17.12 Compound Widgets
Compound Widgets sind Kombinationen von Basis-Widget-Funktionen.
Der Name eines Compound Widgets beginnt mit CW .
An dem nachfolgendem Widget wird die Funktionsweise erklart.
Abbildung 17.1: Widgets: Compound Widgets, cw switch
Das Compound Widget ist in diesem Beispiel eine Kombination von WIDGET BUTTON,
WIDGET LABEL und WIDGET DRAW. Es stellt einen neuen Schalter-Typ mit einer An-
zeige des Schaltzustandes dar. Der Aufruf des Compound Widgets cw switch.pro ist
Anhand dem nachfolgendem Beispiel test cw zu sehen.
PRO test_cw_event,ev
cmd=WIDGET_INFO(ev.id,/UNAME)
CASE cmd OF
’DONE’: WIDGET_CONTROL,ev.top,/dest
’TEST_CW_EX’: BEGIN
WIDGET_CONTROL,ev.id,GET_UVALUE=v
CASE v.label[v.label_index] OF
’AN’: PRINT,’Schalter an’
’AUS’: PRINT,’Schalter aus’
ELSE:
ENDCASE
END
ELSE:
ENDCASE
END
PRO test_cw
base_0=WIDGET_BASE(row=2,TITLE=’TEST_CW_SWITCH’,XSIZE=250)
VALUE={button:’Schalter’,label:[’AN’,’AUS’],label_index:1,$
image:[’green.png’,’red.png’]}
id_ex=cw_switch(base_0,VALUE=VALUE,UNAME=’TEST_CW_EX’,$
COLUMN=2,FRAME=1)
id_button=WIDGET_BUTTON(base_0,VALUE=’done’,UNAME=’DONE’)
WIDGET_CONTROL,/realize,base_0
WIDGET_CONTROL,id_ex,set_VALUE=VALUE
XMANAGER,’test_cw’,base_0
END
Beispiel 17.10: Widgets: Compound Widgets, test cwDas nachfolgende Beispiel zeigt die Definition des Compound Widgets.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 208/238
188 KAPITEL 17. WIDGETS
FUNCTION cw_switch_event,ev
child=ev.handler
id_base_0 = WIDGET_INFO(child, /CHILD)
WIDGET_CONTROL, id_base_0, GET_UVALUE=VALUE
IF ev.id EQ $
WIDGET_INFO(ev.top,FIND_BY=’BUTTON’) THEN BEGINvalue.label_index=value.label_index+2
IF value.label_index/2.0 EQ value.label_index/2 THEN $
value.label_index=1 ELSE value.label_index=0
WIDGET_CONTROL,WIDGET_INFO(ev.top, FIND_BY=’LABEL’), $
SET_VALUE=value.label[value.label_index]
WIDGET_CONTROL,WIDGET_INFO(id_base_0, FIND_BY=’DRAW’),$
GET_VALUE=win
x=READ_PNG(value.image[value.label_index],r,g,b)
WSET,win & TVLCT,r,g,b & TV,x
WIDGET_CONTROL, id_base_0, SET_UVALUE=value
ENDIFRETURN, { ID:id_base_0, TOP:ev.top, HANDLER:0L}
END
FUNCTION cw_switch_get_value, id
id_base_0 = WIDGET_INFO(id, /CHILD)
WIDGET_CONTROL, id_base_0, GET_UVALUE=value
RETURN,value
END
PRO cw_switch_set_value, id,value
id_base_0 = WIDGET_INFO(id, /CHILD)
WIDGET_CONTROL,WIDGET_INFO(id_base_0,FIND_BY=’LABEL’),$
SET_VALUE=value.label[value.label_index]WIDGET_CONTROL,WIDGET_INFO(id_base_0,FIND_BY=’BUTTON’),$
SET_VALUE=value.button
WIDGET_CONTROL,WIDGET_INFO(id_base_0,FIND_BY=’DRAW’),$
GET_VALUE=win
x=READ_PNG(value.image[value.label_index],r,g,b)
WSET,win & TVLCT,r,g,b & TV,x
WIDGET_CONTROL, id_base_0, SET_UVALUE=value
END
FUNCTION cw_switch,parent_base,value=value,uvalue=uvalue,$
_extra=extra
child_base=WIDGET_BASE(parent_base,group_leader=parent_base,$EVENT_FUNC = ’cw_switch_event’,$
FUNC_GET_VALUE = ’cw_switch_get_value’,$
PRO_SET_VALUE = ’cw_switch_set_value’ )
id_base_0=WIDGET_BASE(child_base,_EXTRA=extra)
id_button=WIDGET_BUTTON(id_base_0,$
VALUE=value.button,/NO_RELEASE,UNAME=’BUTTON’)
id_label=WIDGET_LABEL(id_base_0,$
VALUE=value.label[value.label_index],/ALIGN_CENTER,$
/DYNAMIC_RESIZE,UNAME=’LABEL’)
id_draw=WIDGET_DRAW(id_base_0,XSIZE=22,YSIZE=22,UNAME=’DRAW’)
WIDGET_CONTROL,id_base_0,SET_UVALUE=valueRETURN,child_base
END
Beispiel 17.11: Widgets: Compound Widgets, cw switch
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 209/238
17.12. COMPOUND WIDGETS 189
Ein Compound Widget benotigt im Gegensatz zu einem normalen Widget drei Mechanis-
men
1. einen Event Handler fur sich selbst
2. eine Funktion zum Auslesen des Values innerhalb des Compound Widget
3. eine Prozedur zum Setzen des Values innerhalb des Compound WidgetDamit das Compound Widget auch selber Kenntnis von diesen zusatzlichen Routinen hat,
muß es dem Compound Widget in der Definition bekannt gegeben werden. Dies erfolgt in
der Definition der Compound Widget Base (child base).
child_base=WIDGET_BASE(parent_base,$
GROUP_LEADER=parent_base, $
EVENT_FUNC = ’cw_switch_event’, $
FUNC_GET_VALUE = ’cw_switch_get_value’, $
PRO_SET_VALUE = ’cw_switch_set_value’ )
Durch die Verwendung der Keywords: EVENT FUNC, FUNC GET VALUE undPRO SET VALUE werden Zugriffe auf die Widget Elemente des Compound Widget in
bestimmte Funktionen umgeleitet.
Der Event Handler ’cw switch event’ wird fur die Abarbeitung der events
die innerhalb des compound Widget entstehen verwendet. Wenn das VALUE auf
das compound Widget mit SET VALUE gesetzt wird, erfolgt dies mit der Routine
’cw switch set value’ die durch PRO SET VALUE definiert ist. Sobald man
das VALUE von dem Widget liest (GET VALUE) wird ’cw switch get value’
verwendet, das durch FUNC GET VALUE definiert ist.
Hinweis:
In der IDL-Bibliothek gibt es eine Vorlage (cw tmpl.pro), die zur Erstellung von Com-
pound Widgets verwendet werden kann.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 210/238
190 KAPITEL 17. WIDGETS
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 211/238
Kapitel 18
Verknupfung mit anderer Software
Im Kapitel Einbettung ins Betriebssystem auf Seite 60 wurde bereits auf den Aufruf von
externen Programmen hingewiesen. Der nachfolgende Abschnitt behandelt noch weitere
Moglichkeiten.
18.1 SPAWN Kommando
Erzeugung eines Child Processes
– SPAWN, ’ls’, result (Blocking)
PRINT, result
– SPAWN, ’c_program’, unit=lun ; (nicht bei der PC Version)
WRITEU, lun, var1, var2
READU, lun, var3, var4
– Das Programm kann auf einem anderen Host laufen:
SPAWN, ’ssh benutzer@machine ls’, result
CALL EXTERNAL()
siehe Advanced Development Guide
Link Image
– siehe Advanced Development Guide– Literaturhinweis, siehe 199.
191
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 212/238
192 KAPITEL 18. VERKN UPFUNG MIT ANDERER SOFTWARE
18.2 SPAWN Kommando bei einem C Programm
Das C Programm muß fur die Kommunikation mit dem SPAWN Kommando
vorbereitet werden
– #include <stdio.h>
#include <stdio.h>
setbuf( stdout, NULL );
fread( &value1, sizeof(short), 1, stdin );
fread( feld, sizeof(float), len, stdin );
fwrite( result, sizeof(float), len, stdout );
Bitte Vorsicht :
– unter Alpha und anderen Workstations mit demselben Programm benutze nur SHORT INTEGER
– unter Sun und DEC Workstations konvertiere Floatingpoint Zahlen mit dem BYTEORDERKommando
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 213/238
18.3. AUFRUF VON FORTRAN AUS IDL: CALL EXTERNAL 193
18.3 Aufruf von Fortran aus IDL: CALL EXTERNAL
abhangig vom Betriebssytem Laden und Aufruf von Routinen in shared libraries
schneller als SPAWN (overhead weil neue Shell) Sharable library wird nur bei der ersten Referenzierung geladen
Nur Ubergabe der Adresse, kein Bewegen von Daten!
Syntax:
result=CALL_EXTERNAL(’./image’,’entry’,p1,...)
result long integer (default) oder andere Typen
image Name der ’shared object library’,
volle Pfadangabe notwendig!entry entry point zu image (Name des Programms)
plattformspezifisch: fuhrende, abschließende Underscores
p1 1. Parameter
Default: passed by reference
Prototyp der mit CALL EXTERNAL aufgerufenen Routine
SUBROUTINE ENTRY(argc,argv) ! C artgiger Aufruf
INTEGER argc,argv(*)
j=LOC(argc) ! number of arguments, Annahme j=3! Adresse der Argumente aus argv
CALL ENTRY1(%VAL(argv(1)),%VAL(argv(2)),%VAL(argv(3)))
...
! konvertiere IDL Parameter to standard Fortran
! by reference
! ENTRY1 hat keinen IDL spezifischen Code
SUBROUTINE ENTRY1(array,n,sum) ! ....
Eine Anwendung ware, daß das IDL Programm simultan die Ergebnisse eines Fortran Pro-
gramms zeigt, z.B. mit Zufallszahlen erzeugte Punkte.
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 214/238
194 KAPITEL 18. VERKN UPFUNG MIT ANDERER SOFTWARE
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 215/238
Anhang A
Informationen
A.1 Informationen zu IDL
Der Dokumentationssatz zu IDL umfaßt folgende Bucher:
’Getting started with IDL’
Ubersicht uber alle Anwendungsbereiche
fruher: ’IDL Basics:’ kurzes Tutorial
’Using IDL’
einschließlich Mathematics
’Building IDL Applications’IDL Sprache, Pointer, Widgets, GUI Builder
’IDL Reference Guide’ (3 Volumes)
IDL Reference Guide A-M
IDL Reference Guide N-Z
IDL Reference Guide (Objects & Appendices)
’IDL HandiGuide:’
Alphabetische Auflistung aller IDL-Funktionen
IDL External Development Guide
callable IDL, Linkimage, Call External
What’s new in IDL 5.1 ( 5.2 / 5.3 / 5.4 / 5.5)
195
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 216/238
196 ANHANG A. INFORMATIONEN
Demoprogramm Ohne Lizenz lauffahig ist das Script idldemo.
Falls das Kommando-Interface zu IDL bzw. die Oberflache idlde gestartet ist,
Aufruf mit demo
IDL Library Im Verzeichnis /usr/local/idl/idl/lib
Beispiele /usr/local/idl/idl/examples
Verzeichnis doc (Demo!)
Verzeichnis demo/demosrc und misc
idlhelp Unix-Script ohne IDL zu starten
Newsgruppe comp.lang.idl-pvwave
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 217/238
A.2. PUBLIKATIONEN UND AKTIVIT ATEN ZU IDL IM FZJ 197
A.2 Publikationen und Aktivit aten zu IDL im FZJ
TKI 341 IDL: Informationen, Lizenzen und Installation
Interner Bericht FZJ-ZEL-IB-500300
Gormet
Goniometer Measurement for Rutherford Backscattering
Spectronomy and ion Channeling Experiments on Wafers up to
150 mm Durchmesser
Autoren:
H. Heer, M. Wagener (ZEL)
Dr. B. Hollander (ISI/IT)
Jul-Bericht Beschreibung der IDL-Software zur Datenverarbeitung im ICG
Autor: Reimar Bauer, ICG I
Jul 3786
ISSN: 0944-2952
ICG Library http://www.fz-juelich.de/icg/icg-i/idl icglib/idl lib intro.html
Im ICG entwickelte Routinen
FZJ Infos Beispiele zu den IDL-Kursen unter /usr/local/idl/FZJ
IDL Newsgruppe FZJ interne Newsgruppe: kfa.forum.idl
WWW- Server ZAM-Graphics-Home Pagehttp://www.fz-juelich.de/vislab/software
Auf dieser Page liegen Informationen zu IDL, un-
ter anderem eine Beispielsammlung zu IDL. Die
Beispielsammlung findet man auch unter der URL
http://www.fz-juelich.de/vislab/idl-beispiele
zamsoft Software-Distributions-Server des ZAM :
Binaries fur AIX, IRIX, Solaris,
OSF4, HPUX, Linux
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 218/238
198 ANHANG A. INFORMATIONEN
A.3 Wichtige URL’s zu IDL
Wichtige Informationenen zu IDL findet man unter folgenden URL’s.
http://www.rsinc.com
http://www.creaso.com
http://www.dfanning.com
http://www.fz-juelich.de/vislab/software
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 219/238
A.4. LITERATUR 199
A.4 Literatur
IDL Programming Techniques, 2nd Ed.
Author: David W. Fanning, Ph.D.
Summary: Wisecracking author with misinformed notion of Native Ame-
rican religious iconography provides eclectic view of the es-
sentials of IDL. Strong on the use of color in plots.
ISBN/ISSN: 096623832X
Practical IDL Programming
Author: Liam E. Gumley
Summary: (From the amazon.com book description) In Practical IDL Pro-
gramming, Liam E. Gumley provides a solid foundation in the
fundamentals of procedural programming in IDL. He presents
concise information on how to develop IDL programmers that
are well structured, reliable, and efficient. The example pro-grams in the book demonstrate key concepts and provide func-
tionality that can be applied immediately. In addition, the book
offers readers practical tips and advice on IDL programming,
which they would otherwise discover only after years of expe-
rience.
ISBN/ISSN: 1558607005
Application Development with IDL
Author: Ronn L. Kling
Summary: (From the amazon.com book description) This book is writtenfor scientists, engineers and programmers who want to com-
bine their analytical techniques with widget interfaces. In the
past we were restricted to writing procedural programs that
read namelists, files, or had data entered in from a prompt. This
book shows how to integrate widget interfaces with analysis
code resulting in an application that will increase your produc-
tivity and quality of your results. By using a widget interface,
input values can be changed and results displayed in real time
without having to endlessly execute the same procedures over
and over again.ISBN/ISSN: 0967127009
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 220/238
200 ANHANG A. INFORMATIONEN
Calling C from IDL - Using DLM’s to extend your IDL code
Author: Ronn Kling
Summary: (from www.kilvarock.com)
This 74 page book is written for anyone that wants to be able to
call C programs from IDL. Using very simple examples written
in C the reader will be able to create and pass scalars, arrays,
strings and structures back and forth from IDL to C. The code
is written for IDL version 5.3 and later but can be made to
run on earlier versions with only minor modifications. Nearly
1000 lines of source code are provided on the accompanying
disk with a makefile for all UNIX platforms, com file for VMS,
Visual C++ 6.0 project for windows, and a Code Warrior 5
project for the Macintosh. This code can either be received on
a 3-1/2 inch floppy or CD
ISBN: 0967127025
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 221/238
Anhang B
L osungen
B.1 L osungen zu Kapitel: Datenstrukturen
Die zugehorigen Ubungen findet man auf Seite 47.
1. f=CREATE_STRUCT(’black’ ,0, $
’white’ ,1, $
’red’ ,2, $
’green’ ,3, $
’blue’ ,4, $
’cyan’ ,5, $
’magenta’ ,6, $
’yellow’ ,7, $
’orange’ ,8)
DEFSYSV,’!F’,F
2. vector1=MAKE_ARRAY(/FLOAT,10)
READS,data[0:9],vector1
vector2=MAKE_ARRAY(/INT,10)
READS,data[10:19],vector2
vector1=FLOAT(data[0:9])vector2=FIX(data[10:*])
3. x=[a,b]
PRINT,x
x=[a[0:4],b,a[5:*]]
PRINT,x
4. x=MAKE_ARRAY(2011,/INDEX,/INT)
x=x[1990:2010]
201
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 222/238
202 ANHANG B. LOSUNGEN
5. x=CREATE_STRUCT(’D’,!D,’P’,!P,’X’,!X,’Y’,!Y)
6. v=PTRARR(3,/ALLOC)
*v[0]=a
*v[1]=b
*v[2]=c
7. a=MAKE_ARRAY(20,2)
b=MAKE_ARRAY(/INDEX,20,2)
HELP,[a,b]
HELP,[[a],[b]]
8. a=MAKE_ARRAY(10,10,3)
HELP,REFORM(a,300)
b=MAKE_ARRAY(1,10)
HELP,REFORM(b)
9. a=MAKE_ARRAY(/INDEX,10,2)HELP,TRANSPOSE(a)
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 223/238
B.2. LOSUNGEN ZU KAPITEL: ARBEITEN MIT DATENSTRUKTUREN 203
B.2 L osungen zu Kapitel: Arbeiten mit Datenstrukturen
Die zugehorigen Ubungen findet man auf Seite 57.
1. vek = INDGEN(11) + 2000
2. a = [ 7 , 8 , 1 , 2 , 5 , 5 ]
b = [ 0 , 5 , 3 , 4 ]
PRINT, a[b]
7 5 2 5
3. str1=’Idl ist’;
str2=’ eine starke Sprache’str = str1 + str2
print,str
Idl ist eine starke Sprache
4. upper=INDGEN(1,26,/BYTE)+65b
lower=upper+32b
result=STRING([upper,lower])
HELP,result
PRINT,result
upper=[’A’,’B’,’C’]
lower=[’a’,’b’,’c’]
result=upper+lower
HELP,result
PRINT,result
5. a=[-1,-1,-1,-999,-999,-1,-1,-999,-1]
idx=WHERE(a EQ -999)
a[idx]=999
b=[-999,-999,-999,-999,-1]
idx=WHERE(b EQ -999)
b[idx]=999
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 224/238
204 ANHANG B. LOSUNGEN
6. a=[1,1,1,2,1,2]
idx=SORT(a)
PRINT,idx
PRINT,a[idx]
PRINT,a[UNIQ(a,SORT(a))]
7. s=REPLICATE(CREATE_STRUCT(NAME=’my_s’,’x’,0.0,$
’y’,0.0),10)
READS,TRANSPOSE(data),s
idx=WHERE(s.y LT 5)
result=s[idx]
PRINT,result.x,result.y
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 225/238
B.3. LOSUNGEN ZU KAPITEL: DEFINITIONEN ZUR DATENAUSGABE 205
B.3 L osungen zu Kapitel: Definitionen zur Datenausgabe
Die zugehorigen Ubungen findet man auf Seite 79.
1. red= [255B, 0B, 0B]
green=[ 0B, 255B, 0B]
blue= [ 0B, 0B, 255B]
TVLCT,red,green,blue
a=MAKE_ARRAY(1,3,/INDEX,/BYTE) ; ????
a=REFORM([a,a,a,a,a],15)
b=MAKE_ARRAY(80,VALUE=1,/BYTE)
TV,a#b
2. LOADCT,6
ERASE
TVLCT,red,green,blue, /GET
HELP,red
red[!D.TABLE_SIZE-1]=255
green[!D.TABLE_SIZE-1]=255
blue[!D.TABLE_SIZE-1]=255
TVLCT,red,green,blue
a=MAKE_ARRAY(!D.TABLE_SIZE,/INDEX,/BYTE)
b=MAKE_ARRAY(80,VALUE=1,/BYTE)
TV,a#b
3. old_dev=!D.NAMESET_PLOT,’PS’
DEVICE,/ISOLATIN1,FILE=’my_plot.ps’
XYOUTS,0.2,0.5,’Heute lernen wir IDL!!’,CHARSIZE=2
DEVICE,/CLOSE
SET_PLOT,old_dev
; UNIX
SPAWN,’lpr -Pdrucker my_plot.ps’
; MICROSOFT
SPAWN,’lpr -Pdrucker -Sserver my_plot.ps’
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 226/238
206 ANHANG B. LOSUNGEN
B.4 L osungen zu Kapitel: Programme zur Anwendungs-
Darstellung
Die zugehorigen Ubungen findet man auf Seite 115.
1. ang = 2*!PI*INDGEN(360,/FLOAT)/359.x = COS(ang)
y = SIN(ang)
(a) ohne Achsen
PLOT,x,y,xstyle=4,ystyle=4
(b) Achsen in Schwarz, Daten in Blau
TEK_COLOR
PLOT,x,y,/nodata
OPLOT,x,y,color=4,psym=1
(c) nur die positiven Y-daten in Rot und die negativen in BlauTEK_COLOR
PLOT,x,y,/nodata
OPLOT,x,y,color=2,min_value=0
OPLOT,x,y,color=4,max_value=0
(d) Die Achsen sollen zentrisch angeordnet werden
LOADCT,0
ERASE
TEK_COLOR
AXIS,0,/SAVEAXIS,0,/yaxis,/SAVE
OPLOT,x,y,color=2
(e) Der Kreis soll als Kreis dargestellt werden. 1. Losung
position=[0.1,0.1, 0.5,0.5]
WINDOW,xsize=480,ysize=480
PLOT,x,y,position=position 2.Losung, Papier ist nicht quadratisch.
WINDOW,xsize=500,ysize=710
paper_width =30.
paper_height =21.
plot_width =10.
plot_height =10.
xs=plot_height/paper_height
ys=plot_width/paper_width
position=[0.2,0.2,0.2+xs,0.2+ys]
PLOT,x,y,position=position
WSHOW,0
END
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 227/238
B.4. LOSUNGEN ZU KAPITEL: PROGRAMME ZUR
ANWENDUNGS-DARSTELLUNG 207
2. CONTOUR, a, NLEVLES=15,/FILL}
CONTOUR, a, NLEVLES=15,/FOLLOW,/OVER}
VALUES=[6,12.5,18.7,24]
CONTOUR,a,LEVELS=values,/FOLLOW,C_Color=BINDGEN(4)*50+50}
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 228/238
208 ANHANG B. LOSUNGEN
B.5 L osungen zu Kapitel: Programmierung und Kompi-
lation
Die zugehorigen Ubungen findet man ab Seite 157 .
1. CALL |test1 |test2 |test3 _______________________________________________________
PRINT, testX( ) | 0 | 0 | 0
_______________________________________________________
PRINT, testX(minimum=0) | 0 | 0 | 1
_______________________________________________________
PRINT, testX(minimum=10) | 1 | 0 | 1
_______________________________________________________
PRINT, testX(minimum=-10) | 1 | 0 | 1
_______________________________________________________
mv=0 & PRINT, testX(minimum=mv) | 0 | 1 | 0 _______________________________________________________
mv=10 & PRINT, testX(minimum=mv)| 1 | 1 | 1
_______________________________________________________
PRINT, testX(minimum=mv2) | 0 | 1 | 0
_______________________________________________________
Ubung mit positionalen Parametern
CALL | test1 | test2 |test3
___________________________________________________
PRINT, testX( ) | 0 | 0 | 0
____________________________________________________
PRINT, testX(0) | 0 | 0 | 1
____________________________________________________
PRINT, testX(10) | 1 | 0 | 1
____________________________________________________
PRINT, testX(-10) | 1 | 0 | 1
____________________________________________________mv=0 & PRINT, testX(mv) | 0 | 1 | 0
____________________________________________________
mv=10 & PRINT, testX(mv) | 1 | 1 | 1
____________________________________________________
PRINT, testX(mv2) | 0 | 1 | 0
____________________________________________________
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 229/238
B.5. LOSUNGEN ZU KAPITEL: PROGRAMMIERUNG UND KOMPI-
LATION 209
2. PRO mysurface,data,xgrid,ygrid,CONT=contour,COLOR=col
ON_ERROR,1
;return to main level and stop when error detected
!P.CHARSIZE=1.5
IF (N_ELEMENTS(col) EQ 0) THEN col=!D.TABLE_SIZE-1
CASE N_PARAMS() OF
0: MESSAGE,$
’mysurface must be called with one or three parameters’
1: BEGIN
SHADE_SURF,data,/SAVE
SURFACE,data,/NOERASE,COLOR=col
IF KEYWORD_SET(contour) THEN $
CONTOUR,data,/T3D,ZVALUE=1,NLEVELS=10,/NOERA
END
3: BEGINSHADE_SURF,data,xgrid,ygrid,/SAVE
SURFACE,data,xgrid,ygrid,/NOERASE,COLOR=col
IF KEYWORD_SET(contour) THEN $
CONTOUR,data,xgrid,ygrid,/T3D,ZVALUE=1,/NOERA
END
ELSE: PRINT,’wrong number of arguments’
ENDCASE
END
3. FUNCTION my_type,var1,var2
result=MAKE_ARRAY(TYPE=SIZE(var1,/TYPE),N_ELEMENTS(var2))
; Anzahl Elemente und Typ festgelegt
result[*]=var2
IF (SIZE(var2,/DIM))[0] EQ 0 THEN RETURN,result[0] $
ELSE RETURN,result
END
4. FUNCTION repstr,txt,char,new_char
b=BYTE(txt)
ix=WHERE(b EQ (BYTE(char))[0],count)
IF count EQ 1 THEN BEGIN
b[ix]=BYTE(new_char)
ENDIF
RETURN,STRING(b)
END
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 230/238
210 ANHANG B. LOSUNGEN
5. PRO sms_t9
file=’sms.txt’
OPENR,lun,file,/GET_LUN
sz=(FSTAT(lun)).SIZE
data=MAKE_ARRAY(/BYTE,sz)
READU,lun,dataFREE_LUN,lun
IF !version.os_family EQ ’Windows’ THEN $
data=STRSPLIT(STRING(data),STRING(10b)+ $
STRING(13b),/EXTRACT) $
ELSE $
data=STRSPLIT(STRING(data),STRING(10b),/EXTRACT)
n=N_ELEMENTS(data)
FOR i=0,n-1 DO BEGIN
x=STRCOMPRESS(STRSPLIT(data[i],’:’,/EXTRACT),/REMOVE_ALL)IF N_ELEMENTS(worte) EQ 0 THEN worte=x[0] $
ELSE worte=[worte,x[0]]
IF N_ELEMENTS(code) EQ 0 THEN code=x[1] $
ELSE code=[code,x[1]]
ENDFOR
small=BYTE(code)
ix=INDGEN(13)*2
small=STRING(small[ix,*])
ix =SORT(LONG(small))
worte=worte[ix]
code=code[ix]small=small[ix]
key=’’
count_ix=0
z=1
PRINT,’Nur immer ein Zeichen 2 bis 9 eingeben.’
PRINT,’Mit 0 zwischen Worten whlen. # beendet die Eingabe’
WHILE key NE ’#’ DO BEGIN
IF key EQ ’0’ THEN key = ’SEARCH’
WHILE key EQ ’SEARCH’ DO BEGIN
PRINT,’Auswahl:’PRINT,result
IF key NE ’0’ THEN READ,key
IF key EQ ’0’ AND z LT count_ix THEN BEGIN
result=worte[ind[ix[z]]]
z=z+1
PRINT,result
IF key EQ ’0’ THEN key = ’SEARCH’
ENDIF
IF z GE count_ix THEN z=0
ENDWHILE
IF key NE ’#’ THEN BEGINREAD,key
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 231/238
B.5. LOSUNGEN ZU KAPITEL: PROGRAMMIERUNG UND KOMPI-
LATION 211
IF key NE ’0’ THEN BEGIN
IF key NE ’#’ THEN $
IF N_ELEMENTS(test) EQ 0 THEN test=key $
ELSE test=test+key
IF STRLEN(test) GT 1 THEN BEGIN
ind=WHERE(STRLEN(STRMID(small,0, $STRLEN(test))) EQ STRLEN(test),count_ind)
ix=WHERE(STRPOS(small[ind],test) EQ 0 ,count_ix)
IF count_ix EQ 0 THEN BEGIN
key=’#’
PRINT,’Wort nicht bekannt’
PRINT,’Eingabe Modus:’
PRINT,’Bitte Wort mit den Zeichen A bis Z’+ $
’ in Datei speichern’
wort=’’
READ,wort
sms,wortRETURN
ENDIF ELSE BEGIN
IF count_ix NE 0 THEN result=worte[ind[ix[0]]]
ENDELSE
ENDIF
IF N_ELEMENTS(result) EQ 1 THEN PRINT, result
ENDIF
ENDIF
ENDWHILE
PRINT,’’
PRINT,’Ergebnis: ’,resultEND
PRO sms,input
IF N_ELEMENTS(input) EQ 1 THEN $
phrase = STRTRIM(STRUPCASE(input),2) $
ELSE $
phrase=’DIES IST EIN TEST’
arr=STRSPLIT(phrase,’ ’,/EXTRACT)
nn=N_ELEMENTS(arr)
FOR ii=0,nn-1 DO BEGINtext=arr[ii]
d={a0:’ ’,$
a1:’.’,$
a2:[’A’,’B’,’C’],$
a3:[’D’,’E’,’F’],$
a4:[’G’,’H’,’I’],$
a5:[’J’,’K’,’L’],$
a6:[’M’,’N’,’O’],$
a7:[’P’,’Q’,’R’,’S’],$
a8:[’T’,’U’,’V’],$a9:[’W’,’X’,’Y’,’Z’]}
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 232/238
212 ANHANG B. LOSUNGEN
data=BYTE(text)
n=N_ELEMENTS(data)
FOR i=0,n-1 DO BEGIN
x=0count=0
WHILE count EQ 0 AND x LT 10 DO BEGIN
pos=WHERE(d.(x) EQ STRING(data[i]),count)
x=x+1
ENDWHILE
IF N_ELEMENTS(result) EQ 0 THEN $
result=STRTRIM(STRING(x-1),2)+$
STRTRIM(STRING(pos+1),2)+’ ’ $
ELSE $
result=result+STRTRIM(STRING(x-1),2)+ $STRTRIM(STRING(pos+1),2)+’ ’
ENDFOR
IF N_ELEMENTS(sms) EQ 0 THEN sms=text+’ : ’+ $
TEMPORARY(result) $
ELSE $
sms=[sms,text+’ : ’+TEMPORARY(result)]
ENDFOR
file=’sms.txt’
IF FILE_TEST(file) EQ 1 THEN append=1
OPENW,lun,file,/GET_LUN,APPEND=appendPRINTF,lun,TRANSPOSE(sms)
FREE_LUN,lun
OPENR,lun,file,/GET_LUN
sz=(FSTAT(lun)).SIZE
data=MAKE_ARRAY(/BYTE,sz)
READU,lun,data
FREE_LUN,lun
IF !version.os_family EQ ’Windows’ THEN $
data=STRSPLIT(STRING(data),STRING(10b)+ $STRING(13b),/EXTRACT) ELSE $
data=STRSPLIT(STRING(data),STRING(10b),/EXTRACT)
data=data[UNIQ(data,SORT(data))]
OPENW,lun,file,/GET_LUN
PRINTF,lun,TRANSPOSE(data)
FREE_LUN,lun
PRINT,TRANSPOSE(data)
END
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 233/238
Index
EXTRA, 154
3D Transformationen, 101
64-bit Long, 24
64-bit unsigned Long, 24
ALLOCATE HEAP, 40
ANNOTATE, 114
APPEND, 127
ARG PRESENT, 152Array, 26
Arrayindizierung, 28
ASSOC, 132
Ausfuhrbare Kommandos
.COMPILE, 13, 186
.CONTINUE, 13
.EDIT, 13
.FULL RESET SESSION, 165
.GO, 13
.RESET SESSION, 165.RNEW, 13
.RUN, 13
.SKIP, 13
.STEP, 13
.TRACE, 13
Auswahl eines Fonts, 66
AXIS, 83, 87, 113
BAR PLOT, 90
Batch Verarbeitung, 140
BEGIN, 149BOX CURSOR, 123
BREAKPOINT, 13
by reference, 144
by value, 144
Byte, 24
BYTSCL, 119
CALL EXTERNAL, 191
CASE, 150
CATCH, 167, 168
CD, 17CLOSE, 128
Command Line Interface, 11
COMMON, 155, 179
COMPILE OPT, 54
compiling, 9
Complex, 24
CONGRID, 118
CONTOUR, 76, 94, 97, 98, 100, 113
CREATE STRUCT, 33
CURSOR, 106, 112CW Base, 189
CW ANIMATE, 111
cw tmpl, 189
DATA, 65
debug, 161
DECIMATE, 114
DEFINT32, 54
DEFSYSV, 22
DELVAR, 52DEMO, 114
DEVICE, 65, 69, 74, 77
DIALOG MESSAGE, 168
DIALOG PICKFILE, 133
Double Complex, 24
Doubleprecision, 24
Drucken, 77
Einstellungen, 3
ELSE, 149
emacs, 8EOF, 133
ERASE, 83, 113, 120
EVENT FUNC, 189
EXECUTE, 156
exit, 11
F77 UNFORMATTED, 127
Fehlerbalken, 91
Fehlersuche, 161
FFT, 121
FILE CHMOD, 134FILE DELETE, 134
213
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 234/238
214 INDEX
FILE EXPAND PATH, 134
FILE MKDIR, 134
FILE SEARCH, 133, 134
FILE TEST, 134
FILE WHICH, 134
Floatingpoint, 24FLTARR, 26
FOR, 150
FORMAT, 131
FORWARD FUNCTION, 147
FREE LUN, 128, 132
FSTAT, 133, 134
FUNC GET VALUE, 189
FUNCTION, 146
Funktion, 143
GET LUN, 127, 128
GOTO, 151
Hardware Fonts, 67
Hauptprogramm, 143
HEAP GC, 44
HELP, 25, 33, 41, 61, 166
Hershey Fonts, 67
Hilfe zu IDL, 15
idl, 11idl -rt, 14
IDL STARTUP, 3
idlde, 7
idlhelp
F1¡
, 15
?, 15
IF, 149
IMAGE CONT, 114
INDGEN, 27, 50
Indizierung von Variablen, 24
INTARR, 26
Integer, 24
JOURNAL, 140
KEYWORD SET, 152
Konversionsroutinen, 25
FIX, 25
FLOAT, 25
STRING, 25
Link Image, 191LOADCT, 68
Long, 24
MAKE ARRAY, 26, 27, 41
MAKE ARRRAY, 32
MAP CONTINENTS, 104
MAP GRID, 104MAP IMAGE, 105
MAP SET, 104–106
MAX, 55
MEDIAN, 121
MESSAGE, 169
MIN, 55
missing values, 96
MODIFYCT, 68
N ELEMENTS, 152N PARAMS, 152
N TAGS, 37
Namenskonvention fur Variablen, 23
NODATA, 83
NOERASE, 83, 85
NORMAL, 65
Nullpointer, 38
ON ERROR, 167
ON IOERROR, 167Online Hilfe, 15
OPENR, 127, 128
OPENU, 127
OPENW, 127
Operatoren
, 118
, 49
¡
, 118
¡
, 49
# , 49
## , 49
AND, 49
EQ, 49
GE, 49
GT, 49
LE, 49
LT, 49
NE, 49
NOT, 49
OR, 49
XOR, 49OPLOT, 85, 86, 113
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 235/238
INDEX 215
Optimierung der Laufzeit eines IDL-
Programmes, 53, 54
OVERPLLOT, 83
Parameter
Keyword, 19Positional, 19
PLOT, 18, 84–86, 113
PLOTS, 83, 88, 106, 113
POINT LUN, 133
Pointer, 38
Array, 45
verkettete Pointer Liste, 45
Polarplot, 91
POLYFILL, 83, 88, 113
POLYSHADE, 108
POSITION, 73
Positionieren von Zeichen, 66
PostScript, 70
Preferences, 9
PRO, 146
PRO SET VALUE, 189
PROFILER, 163
Prozedur, 143
PS SHOW FONTS, 67
PTR FREE, 39, 44
PTR NEW, 39, 40PTR VALID, 39, 41, 44
PTRARR, 39
RANDOMU, 99
READ ASCII, 135, 136
READ BINARY, 136
READ IMAGE, 136
READF, 129–131
READS, 31, 32
READU, 129, 132REBIN, 118
REFORM, 29, 50
REGION GROW, 123
REPEAT, 151
REPLICATE, 28, 32, 37
reservierte Worte, 23
RESOLVE ALL, 14, 186
RESOLVE ROUTINE, 156
RESTORE, 38, 62, 135
RETAIN, 74
RETALL, 165RGB, 69
Runtime, 14
SAVE, 14, 38, 62, 135, 186
SAVE,/ROUTINES, 14
SCALE3, 103, 108
Scatter-Plot mit Zufallszahlen, 92Set Breakpoint, 161
SET PLOT, 70, 77
SHADE SURF, 99, 100, 113
SHADE VOLUME, 108
SHOW3, 114
SIZE, 25, 28
Skalar, 25
SLICER3, 109, 114
SMOOTH, 121
SOBEL, 121SORT, 55
SPAWN, 60, 191, 192
Spezifikation, 23
SQL, 1
Start-Up, 3
Step, 161
STRCOMPRESS, 31
STRICTARR, 54
STRING, 31
String, 24Strings, 31
STRJOIN, 31
STRLEN, 31
STRLOWCASE, 31
STRMID, 31
STRPOS, 31
STRPUT, 31
STRSPLIT, 31
STRTRIM, 31
STRUPCASE, 31
Suchpfad, 17
Suchreihenfolge von IDL Programmen,
17
SURFACE, 76, 94, 101, 113
SURFR, 102
SWITCH, 150
System-Variablen
!DIR, 21
!DPI, 21
!DTOR, 21
!P.MULTI, 71, 72!P.POSITION, 71, 73
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 236/238
216 INDEX
!PATH, 17, 21
!PI, 21
!QUIET, 20
!RADEG, 21
!VERSION, 21
T3D Keyword, 100–102
T3D Prozedur, 103
TAG NAMES, 37
TEK COLOR, 68, 69
TEMPORARY, 51, 52
TRANSPOSE, 29
TRIANGULATE, 107
TRIGRID, 107
TV, 105, 108, 119–121
TVCRS, 112TVLCT, 68
TVRD, 121
TVSCL, 118, 119, 121
Typ, 23
UNIQ, 56
Unsigned Integer, 24
Unsigned Long, 24
USERSYM, 113
Waveletts, 1WDELETE, 74
WHERE, 55, 118
WHILE, 151
WIDGET BASE, 172, 173
WIDGET BUTTON, 172, 173, 179
WIDGET CONTROL, 175, 178
WIDGET DRAW, 172
WIDGET DROPLIST, 172
WIDGET INFO, 175, 178, 180
WIDGET LABEL, 172WIDGET LIST, 172
WIDGET SLIDER, 172
WIDGET TABLE, 172
WIDGET TEXT, 172
WINDOW, 74, 121
WRITEF, 129
WRITEU, 129, 132
WSET, 74
WSHOW, 74
XFONT, 67, 114XINTERANIMATE, 111
XLOADCT, 68, 114
XMANAGER, 175, 176, 186
XPALETTE, 68, 114
XREGISTERED, 176
XSURFACE, 114
XVAREDIT, 114XVOLUME, 114
XYOUTS, 83, 89, 113
Z-Buffer, 75, 76
Zeichen
!, 20
( ), 20
*, 20, 38, 39
+, 31
., 20:, 20
;, 20
?, 20
[ ], 20, 28, 29
$, 20, 60
&, 20
@, 20 ¡
, 20, 33
Zeichenkettenvariablen, 31
ZOOM, 114
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 237/238
Katalog der Benutzerhandbucher des ZAM (Stand: 08.08.2002)
Eine aktuelle und nach Sachgebieten eingeteilte Liste der Benutzerhandbucher und Tech-
nischen Kurzinformationen des ZAM erhalten Sie in der Technischen Kurzinformation
TKI-0000 und auf dem WWW-Server des Forschungszentrums unter der
URL: <http://www.fz-juelich.de/zam/docs/topic/topic d.html>.
BHB-0034 MTA-Kurs: PL/I Vorlesungsschrift
BHB-0063 MTA-Kurs: Einfuhrung in Datenverarbeitung - Materialien zum Kurs
BHB-0092 Quantum Chemistry Program Exchange
BHB-0095 Einfuhrung in die Programmiersprache C
BHB-0096 GR - Software
BHB-0097 GKS und CGM Anwendungen inklusive GR-Software auf den zentralen
Rechnern
BHB-0101 Einfuhrung in die Benutzung des zentralen AIX
BHB-0102 REDUCE User’s Manual
BHB-0105 Kurze Einfuhrung in die formale Logik BHB-0109 User’s Manual for MOLPRO
BHB-0110 XL-Fortran unter AIX auf einer RISC/6000 - Einfuhrung, Hilfsmittel, Erfah-
rungen
BHB-0111 Statistische Datenanalyse mit SAS und BMDP
BHB-0112 TEX im Forschungszentrum Julich
BHB-0114 GNUPLOT - An Interactive Plotting Program
BHB-0115 GNU Emacs Manual
BHB-0117 XV - Interactive Image Display for the X Window System
BHB-0118 ImageMagick - User’s Guide
BHB-0119 Das Grafiksystem XGraf BHB-0120 GLI - Graphics Language Interpreter - Reference Manual
BHB-0121 Free recode, version 3.5d - The character set converter, Edition 3.5d
BHB-0122 Tcl and the Tk Toolkit, Part 1 + 2
BHB-0123 Tcl and the Tk Toolkit, Part 3 + 4
BHB-0124 Programmieren in Fortran 90/95 - Vorlesungsskript
BHB-0125 Xhibition - Ein Werkzeug zur Erstellung eines Menu-Systems auf der Basis
von X-Window
BHB-0129 xmgr (ACE/gr) Users Manual
BHB-0130 Installationshinweise zur Datensicherung und Archivierung mit TSM/ADSM
fur Workstations und PCs im JuNetBHB-0133 Programmieren in Fortran 90/95 - Ubungsaufgaben
BHB-0134 LaTeX - eine Einfuhrung und ein bißchen mehr
BHB-0135 LaTeX - Fortgeschrittene Anwendungen oder: Neues von den Hobbits
BHB-0136 Forms Library - Toolkit zur Erstellung graphischer Benutzeroberflachen
BHB-0138 The Cray Systems at Research Centre Julich - Volume 1 - Handling of Jobs
and Data
BHB-0139 The Cray Systems at Research Centre Julich - Volume 2 - Programming En-
vironment and Application Software
BHB-0140 Programmierung in C - Vorlesungsskript
BHB-0141 Pretty Good Privacy (pgp) Bedienungsanleitung
BHB-0142 BALSAC - User’s Guide and ManualBHB-0144 Gsharp - Tutorial, User’s Guide, and Applications
7/11/2019 IDL Programming (Book)
http://slidepdf.com/reader/full/idl-programming-book 238/238
BHB-0145 Gsharp - Reference Guide, Part 1
BHB-0146 Gsharp - Reference Guide, Part 2
BHB-0147 GIMP - Das offizielle Benutzerhandbuch, Teil 1
BHB-0148 GIMP - Das offizielle Benutzerhandbuch, Teil 2
BHB-0149 GIMP - Das offizielle Benutzerhandbuch, Teil 3
BHB-0150 Windows NT V4.0 Workstation - ein InstallationsprotokollBHB-0152 Introduction To Scilab - User’s Guide
BHB-0153 Vampir 2.0 - User’s Manual
BHB-0154 Programming in C++ - Part I
BHB-0155 Programming in C++ - Part II
BHB 0156 NWCh U D t ti