Makro¶
Die meisten Operationen in PDIndexer lassen sich mit der Makro-Funktion automatisieren. Makros sind Python-Skripte, die in IronPython (einer Python-Implementierung, die auf .NET läuft) geschrieben und in einem eigenen Makro-Editor-Fenster bearbeitet und ausgeführt werden. Verwenden Sie sie, um wiederkehrende Aufgaben zu automatisieren, mehrere Dateien stapelweise zu verarbeiten und Ergebnisse in großen Mengen als CSV- oder Bilddateien zu exportieren.
Grundkenntnisse in Python
Makros akzeptieren die Standard-Python-Syntax (for-Schleifen, if/else, Listen, Funktionen usw.) direkt. Diese Seite erklärt die Sprache Python selbst nicht. Die PDIndexer-spezifische Funktionalität wird über das unten beschriebene PDI-Objekt aufgerufen.
Den Makro-Editor öffnen¶
Wählen Sie in der Menüleiste des Hauptfensters Makro → Editor, um das Makro-Editor-Fenster (mit dem Titel Macro) zu öffnen.
Im Editor erstellte und gespeicherte Makros werden außerdem mit ihrem Namen im Menü Makro aufgelistet, sodass Sie sie direkt aus dem Menü ausführen können. Die Makroliste wird beim Beenden von PDIndexer automatisch gespeichert und beim nächsten Start wiederhergestellt.
Aufbau des Editor-Fensters¶
Das Editor-Fenster besteht aus den folgenden Bereichen.
| Bereich | Beschreibung |
|---|---|
| Makroliste (links) | Eine Liste der gespeicherten Makronamen. Klicken Sie auf einen Eintrag, um dieses Makro in den Editor rechts zu laden. |
| Code-Editor (Mitte) | Der Bereich, in dem Sie das Python-Skript eingeben. Er unterstützt eine Zeilennummern-Leiste, automatisches Einrücken, Eingabevervollständigung (Autovervollständigung) und Funktions-Tooltips. |
| Funktionsreferenztabelle | Eine Tabelle aller unter PDI verfügbaren Funktionen. Doppelklicken Sie auf eine Zelle, um diesen Funktionsnamen an der Cursorposition in den Code einzufügen. |
| Debug-Panel (rechts) | Zeigt die Variablennamen und -werte am aktuellen Punkt während der Schrittausführung an. |
| Statusleiste | Zeigt die aktuelle Cursorposition (Line / Col) an. |
Schaltflächen zur Listenbearbeitung¶
Verwenden Sie die folgenden Schaltflächen, um die Makroliste zu bearbeiten.
| Schaltfläche | Aktion |
|---|---|
Add |
Fügt den aktuellen Code unter dem im Namensfeld eingegebenen Namen zur Liste hinzu (fordert zum Überschreiben auf, falls der Name bereits existiert). |
Replace |
Ersetzt das in der Liste ausgewählte Makro durch den aktuellen Code. |
Delete |
Entfernt das ausgewählte Makro aus der Liste. |
↑ / ↓ |
Verschiebt das ausgewählte Makro innerhalb der Liste nach oben oder unten. |
Show samples |
Schaltet die Anzeige der integrierten Beispielmakros um (siehe unten). |
Speichern und Laden
Makros können in einzelnen .mcr-Dateien gespeichert und daraus geladen werden. Ziehen Sie eine .mcr-Datei per Drag-and-drop auf das Editor-Fenster, um ihren Inhalt zu laden. Das Drücken von Ctrl+S nach dem Bearbeiten überschreibt das aktuell ausgewählte Makro.
Ein Makro ausführen¶
Führen Sie das Makro über die Schaltflächen am unteren Rand des Code-Editors aus.
| Schaltfläche | Aktion |
|---|---|
Run macro |
Führt das Makro normal vollständig durch. |
Step by step |
Führt das Makro Zeile für Zeile aus. Es hält vor jeder Zeile an und zeigt die aktuellen Variablenwerte im Debug-Panel rechts an. |
Next step (F10) |
Geht während der Schrittausführung zur nächsten Zeile weiter (die Taste F10 funktioniert ebenfalls). |
Stop |
Bricht die Ausführung ab. Der Abbruch ist nur während der Ausführung im Modus Step by step wirksam. |
print() ist nicht verfügbar
Der Makro-Editor besitzt keine Standardausgabe-Konsole, daher wird die Ausgabe von print() nicht angezeigt. Um Variablenwerte zu überprüfen, führen Sie das Makro im Modus Step by step aus und beobachten Sie die Wertänderungen im Debug-Panel.
Beispielmakros¶
Wenn Sie die Schaltfläche Show samples aktivieren, werden die integrierten Beispielmakros in der Liste angezeigt (schreibgeschützt). Die Beispiele werden in der aktuellen UI-Sprache (Englisch/Japanisch) angezeigt. Verwenden Sie sie als Referenz, wenn Sie eigene Makros schreiben. Die integrierten Beispiele sind:
| Name | Inhalt |
|---|---|
| 01. Basic loop and if | Grundlagen von for-Schleifen und if/else |
| 02. Math functions | Verwendung des Moduls math (pi, sin, sqrt, exp, log usw.) |
| 03. Drawing view setup | Festlegen des Anzeigebereichs mit PDI.Drawing.SetBounds |
| 04. Load profiles and crystals | PDI.File.ReadProfiles / ReadCrystals |
| 05. Inspect crystal cell constants | Auslesen von Gitterkonstanten, Volumen und Druck über PDI.Crystal |
| 06. Scan crystal list | Schleife über alle Einträge von PDI.CrystalList |
| 07. Average multiple profiles | PDI.ProfileOperator.Average |
| 08. Fitting workflow | Eine vollständige PDI.Fitting-Sequenz |
| 09. Sequential analysis and export | Ausführen von PDI.Sequential und Exportieren als CSV |
| 10. Save metafile series per profile | Stapelweises Speichern je einer EMF pro Profil |
Das Modul math ist vorab importiert
import math wird beim Start des Editors automatisch ausgeführt, sodass Sie das Modul math direkt verwenden können, z. B. math.sqrt(2), ohne eine explizite import-Anweisung.
Funktionsreferenz¶
Die gesamte PDIndexer-spezifische Funktionalität wird über die Klassen unterhalb des Wurzelobjekts PDI aufgerufen. PDI ist im Makro-Gültigkeitsbereich bereits verfügbar, sodass kein import erforderlich ist.
Jede der folgenden Tabellen ist aus den [Help]-Attributen im Quellcode übernommen. Dieselbe Liste erscheint in der Funktionsreferenztabelle innerhalb des Editor-Fensters sowie in Abschnitt 6 des Web-Handbuchs.
Notation
In der Signaturspalte bezeichnet (get/set) eine les- und schreibbare Eigenschaft und (get) eine schreibgeschützte Eigenschaft. Ein Argument mit = value ist ein Standardargument und kann weggelassen werden.
PDI (Wurzel)¶
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Sleep |
Sleep(int millisec) |
Pausiert die Makroausführung für die angegebene Anzahl von Millisekunden. |
Obj |
Obj (get/set) |
Ruft Objekte ab bzw. setzt sie, die von einem anderen Programm übergeben wurden (prozessübergreifende Argumente). |
PDI.File — Datei-Ein-/Ausgabe¶
| Mitglied | Signatur | Beschreibung |
|---|---|---|
GetDirectoryPath |
GetDirectoryPath(string filename = "") |
Ruft einen Verzeichnispfad ab (mit abschließendem Backslash). Wird filename weggelassen, öffnet sich ein Ordnerauswahldialog. Andernfalls wird der Verzeichnisanteil von filename zurückgegeben. |
GetFileName |
GetFileName() |
Öffnet einen Dateiauswahldialog und gibt den vollständigen Pfad der gewählten Datei zurück. Gibt eine leere Zeichenkette zurück, wenn der Benutzer abbricht. |
GetFileNames |
GetFileNames() |
Öffnet einen Dateidialog mit Mehrfachauswahl und gibt die vollständigen Pfade der gewählten Dateien zurück. Gibt ein leeres Array zurück, wenn der Benutzer abbricht. |
ReadProfiles |
ReadProfiles(string filename) |
Liest Profildaten aus der angegebenen Datei. Wird filename weggelassen (oder existiert nicht), öffnet sich ein Dateiauswahldialog. |
SaveProfiles |
SaveProfiles(string filename) |
Speichert Profildaten in die angegebene Datei. Wird filename weggelassen, öffnet sich ein Speicherdialog. |
ReadCrystals |
ReadCrystals(string filename) |
Liest Kristalldaten aus der angegebenen Datei. Wird filename weggelassen (oder existiert nicht), öffnet sich ein Dateiauswahldialog. |
SaveCrystals |
SaveCrystals(string filename) |
Speichert Kristalldaten in die angegebene Datei. Wird filename weggelassen, öffnet sich ein Speicherdialog. |
SaveMetafile |
SaveMetafile(string filename) |
Speichert das aktuelle Muster als Windows-Metafile (.emf). Wird filename weggelassen, öffnet sich ein Speicherdialog. |
SaveText |
SaveText(string text, string filename) |
Speichert den angegebenen Textinhalt in eine .txt-Datei. Wird filename weggelassen, öffnet sich ein Speicherdialog. |
PDI.Drawing — Zeichenansicht¶
| Mitglied | Signatur | Beschreibung |
|---|---|---|
MaxX |
MaxX (get/set) |
Ruft die Obergrenze der X-Achse ab bzw. setzt sie (der größte Wert, den die Achse annehmen kann, nicht die aktuelle Ansicht). |
MinX |
MinX (get/set) |
Ruft die Untergrenze der X-Achse ab bzw. setzt sie (der kleinste Wert, den die Achse annehmen kann, nicht die aktuelle Ansicht). |
MaxY |
MaxY (get/set) |
Ruft die Obergrenze der Y-Achse ab bzw. setzt sie (der größte Wert, den die Achse annehmen kann, nicht die aktuelle Ansicht). |
MinY |
MinY (get/set) |
Ruft die Untergrenze der Y-Achse ab bzw. setzt sie (der kleinste Wert, den die Achse annehmen kann, nicht die aktuelle Ansicht). |
EndX |
EndX (get/set) |
Ruft den rechten Rand (das Ende) der X-Achse in der aktuellen Zeichenansicht ab bzw. setzt ihn. |
StartX |
StartX (get/set) |
Ruft den linken Rand (den Anfang) der X-Achse in der aktuellen Zeichenansicht ab bzw. setzt ihn. |
EndY |
EndY (get/set) |
Ruft den oberen Rand (das Ende) der Y-Achse in der aktuellen Zeichenansicht ab bzw. setzt ihn. |
StartY |
StartY (get/set) |
Ruft den unteren Rand (den Anfang) der Y-Achse in der aktuellen Zeichenansicht ab bzw. setzt ihn. |
SetBounds |
SetBounds(double startX, double endX, double startY, double endY) |
Legt die Zeichenansicht durch Angabe der vier Ränder (StartX, EndX, StartY, EndY) fest. |
PDI.Crystal — Ausgewählter Kristall¶
Die Gitterkonstanten CellA–CellC sind in \( \mathrm{\AA} \) angegeben, und CellAlpha–CellGamma in Grad (deg).
| Mitglied | Signatur | Beschreibung |
|---|---|---|
CellVolume |
CellVolume (get) |
Ruft das Zellvolumen (\( \mathrm{\AA}^3 \)) des ausgewählten Kristalls ab. Gibt 0 zurück, wenn kein Kristall ausgewählt ist. |
Pressure |
Pressure(double volume = 0) |
Ruft den aus der EOS berechneten Druck (GPa) des ausgewählten Kristalls ab. Ist volume gleich 0 (Standard), wird das aktuelle Zellvolumen verwendet. |
Name |
Name (get/set) |
Ruft den Namen des ausgewählten Kristalls ab bzw. setzt ihn. |
CellA |
CellA (get/set) |
Ruft die Gitterkonstante a (\( \mathrm{\AA} \)) des ausgewählten Kristalls ab bzw. setzt sie. |
CellB |
CellB (get/set) |
Ruft die Gitterkonstante b (\( \mathrm{\AA} \)) des ausgewählten Kristalls ab bzw. setzt sie. |
CellC |
CellC (get/set) |
Ruft die Gitterkonstante c (\( \mathrm{\AA} \)) des ausgewählten Kristalls ab bzw. setzt sie. |
CellAlpha |
CellAlpha (get/set) |
Ruft die Gitterkonstante alpha (deg) des ausgewählten Kristalls ab bzw. setzt sie. |
CellBeta |
CellBeta (get/set) |
Ruft die Gitterkonstante beta (deg) des ausgewählten Kristalls ab bzw. setzt sie. |
CellGamma |
CellGamma (get/set) |
Ruft die Gitterkonstante gamma (deg) des ausgewählten Kristalls ab bzw. setzt sie. |
PDI.CrystalList — Kristallliste¶
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Open |
Open() |
Öffnet das Fenster „Crystal List“. |
Close |
Close() |
Schließt das Fenster „Crystal List“. |
Count |
Count (get) |
Ruft die Gesamtzahl der Kristalle in der Liste ab. |
SelectedName |
SelectedName (get) |
Ruft den Namen des aktuell ausgewählten Kristalls ab. Gibt eine leere Zeichenkette zurück, wenn kein Kristall ausgewählt ist. |
SelectedIndex |
SelectedIndex (get/set) |
Ruft den Index des aktuell ausgewählten Kristalls ab bzw. setzt ihn. |
Select |
Select(int index) |
Wählt den Kristall am angegebenen Index aus. |
Check |
Check(int index = -1, bool state = true) |
Aktiviert oder deaktiviert das Häkchen des Kristalls am angegebenen Index. Ist index gleich -1, wird der aktuell ausgewählte Kristall verwendet. |
Uncheck |
Uncheck(int index = -1) |
Deaktiviert das Häkchen des Kristalls am angegebenen Index. Ist index gleich -1, wird das Häkchen des aktuell ausgewählten Kristalls deaktiviert. |
GetCellVolume |
GetCellVolume (get) |
Ruft das Zellvolumen (\( \mathrm{\AA}^3 \)) des ausgewählten Kristalls ab. Identisch mit PDI.Crystal.CellVolume; aus Gründen der Abwärtskompatibilität beibehalten. |
PDI.Profile — Ausgewähltes Profil¶
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Comment |
Comment (get/set) |
Ruft den Kommentartext des aktuell ausgewählten Profils ab bzw. setzt ihn. |
Name |
Name (get/set) |
Ruft den Anzeigenamen des aktuell ausgewählten Profils ab bzw. setzt ihn. |
PDI.ProfileOperator — Profilarithmetik¶
Jedes Profil wird über seinen Index in der Liste angegeben. output ist der Name, der dem resultierenden Profil gegeben wird.
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Average |
Average(int[] indices, string output) |
Berechnet den Mittelwert der Profile, deren Indizes in indices aufgeführt sind (z. B. [1,3,5,9]). output ist der Name, der dem resultierenden Profil gegeben wird. |
AddTwoProfiles |
AddTwoProfiles(int index1, int index2, string output) |
Berechnet profile1 + profile2. Jedes Profil wird über seinen Index angegeben. output ist der Name, der dem resultierenden Profil gegeben wird. |
SubtractTwoProfiles |
SubtractTwoProfiles(int index1, int index2, string output) |
Berechnet profile1 − profile2. Jedes Profil wird über seinen Index angegeben. output ist der Name, der dem resultierenden Profil gegeben wird. |
MultiplyTwoProfiles |
MultiplyTwoProfiles(int index1, int index2, string output) |
Berechnet profile1 × profile2. Jedes Profil wird über seinen Index angegeben. output ist der Name, der dem resultierenden Profil gegeben wird. |
DivideTwoProfiles |
DivideTwoProfiles(int index1, int index2, string output) |
Berechnet profile1 ÷ profile2. Jedes Profil wird über seinen Index angegeben. output ist der Name, der dem resultierenden Profil gegeben wird. |
PDI.ProfileList — Profilliste¶
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Open |
Open() |
Öffnet das Fenster „Profile List“. |
Close |
Close() |
Schließt das Fenster „Profile List“. |
DeleteAll |
DeleteAll() |
Löscht alle Profile aus der Liste (ohne Bestätigungsdialog). |
Delete |
Delete(int index) |
Löscht das Profil am angegebenen Index. |
Count |
Count (get) |
Ruft die Gesamtzahl der Profile in der Liste ab. |
SelectedName |
SelectedName (get) |
Ruft den Namen des aktuell ausgewählten Profils ab. Gibt eine leere Zeichenkette zurück, wenn kein Profil ausgewählt ist. |
SelectedIndex |
SelectedIndex (get/set) |
Ruft den Index des aktuell ausgewählten Profils ab bzw. setzt ihn. |
Select |
Select(int index) |
Wählt das Profil am angegebenen Index aus. |
Check |
Check(int index = -1, bool state = true) |
Aktiviert oder deaktiviert das Häkchen des Profils am angegebenen Index. Ist index gleich -1, wird das aktuell ausgewählte Profil verwendet. |
Uncheck |
Uncheck(int index = -1) |
Deaktiviert das Häkchen des Profils am angegebenen Index. Ist index gleich -1, wird das Häkchen des aktuell ausgewählten Profils deaktiviert. |
CheckAll |
CheckAll() |
Aktiviert das Häkchen jedes Profils in der Liste. |
UncheckAll |
UncheckAll() |
Deaktiviert das Häkchen jedes Profils in der Liste. |
PDI.Fitting — Peak-Anpassung¶
Bedient das Fenster Beugungspeak-Anpassung.
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Open |
Open() |
Öffnet das Fenster „Fitting peaks“. |
Close |
Close() |
Schließt das Fenster „Fitting peaks“. |
Apply |
Apply() |
Wendet die optimierten Gitterkonstanten auf den ausgewählten Kristall an (entspricht dem Klicken auf die Schaltfläche Confirm im Anpassungsfenster). |
Check |
Check(int index = -1, bool state = true) |
Aktiviert oder deaktiviert das Häkchen der Gitterebene am angegebenen Index. Ist index gleich -1, wird die aktuell ausgewählte Ebene verwendet. |
Uncheck |
Uncheck(int index = -1) |
Deaktiviert das Häkchen der Gitterebene am angegebenen Index. Ist index gleich -1, wird das Häkchen der aktuell ausgewählten Ebene deaktiviert. |
Select |
Select(int index) |
Wählt die Gitterebene am angegebenen Index aus. |
SelectedIndex |
SelectedIndex (get/set) |
Ruft den Index der aktuell ausgewählten Gitterebene ab bzw. setzt ihn. |
Range |
Range(double range) |
Legt den Peak-Suchbereich für die aktuell ausgewählte Gitterebene fest (in derselben Einheit wie die X-Achse). |
PDI.Sequential — Sequentielle Analyse¶
Bedient das Fenster Sequentielle Analyse. Die CSV-Getter geben die Ergebnisse der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette zurück.
| Mitglied | Signatur | Beschreibung |
|---|---|---|
Directory |
Directory (get/set) |
Ruft den vollständigen Verzeichnispfad ab bzw. setzt ihn, in dem die Ergebnisse der sequentiellen Analyse gespeichert werden. |
Open |
Open() |
Öffnet das Fenster „Sequential Analysis“. |
Close |
Close() |
Schließt das Fenster „Sequential Analysis“. |
Execute |
Execute() |
Führt die sequentielle Analyse für alle markierten Profile aus. |
GetCSV_2theta |
GetCSV_2theta() |
Ruft die 2-theta-Ergebnisse der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
GetCSV_D |
GetCSV_D() |
Ruft die Netzebenenabstand-Ergebnisse (d-Wert) der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
GetCSV_FWHM |
GetCSV_FWHM() |
Ruft die FWHM-Ergebnisse der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
GetCSV_Intensity |
GetCSV_Intensity() |
Ruft die Peak-Intensitäts-Ergebnisse der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
GetCSV_CellConstants |
GetCSV_CellConstants() |
Ruft die Gitterkonstanten-Ergebnisse der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
GetCSV_Pressure |
GetCSV_Pressure() |
Ruft die Druck-Ergebnisse der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
GetCSV_Singh |
GetCSV_Singh() |
Ruft die Ergebnisse der Singh-Gleichung der zuletzt durchgeführten sequentiellen Analyse als CSV-Zeichenkette ab. |
AutoSave2theta |
AutoSave2theta (get/set) |
Ruft ab bzw. setzt, ob die 2-theta-Ergebnisse nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
AutoSaveDspacing |
AutoSaveDspacing (get/set) |
Ruft ab bzw. setzt, ob die Netzebenenabstand-Ergebnisse (d-Wert) nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
AutoSaveFWHM |
AutoSaveFWHM (get/set) |
Ruft ab bzw. setzt, ob die FWHM-Ergebnisse nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
AutoSaveIntensity |
AutoSaveIntensity (get/set) |
Ruft ab bzw. setzt, ob die Peak-Intensitäts-Ergebnisse nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
AutoSaveCellConstants |
AutoSaveCellConstants (get/set) |
Ruft ab bzw. setzt, ob die Gitterkonstanten-Ergebnisse nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
AutoSavePressure |
AutoSavePressure (get/set) |
Ruft ab bzw. setzt, ob die Druck-Ergebnisse nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
AutoSaveSingh |
AutoSaveSingh (get/set) |
Ruft ab bzw. setzt, ob die Ergebnisse der Singh-Gleichung nach jedem Lauf der sequentiellen Analyse automatisch gespeichert werden. |
Makro-Beispiel¶
Als eines der integrierten Beispiele folgt hier ein Makro, das die sequentielle Analyse ausführt und die Ergebnisse als CSV speichert.
# Check all profiles, run sequential analysis, then obtain 2-theta / d-spacing /
# cell-constant / pressure results as CSV strings and save each to a file.
PDI.ProfileList.CheckAll()
PDI.Sequential.Open()
PDI.Sequential.Execute()
dir_path = PDI.File.GetDirectoryPath()
PDI.File.SaveText(PDI.Sequential.GetCSV_2theta(), dir_path + "seq_2theta.csv")
PDI.File.SaveText(PDI.Sequential.GetCSV_D(), dir_path + "seq_d.csv")
PDI.File.SaveText(PDI.Sequential.GetCSV_CellConstants(), dir_path + "seq_cell.csv")
PDI.File.SaveText(PDI.Sequential.GetCSV_Pressure(), dir_path + "seq_pressure.csv")
Die übrigen Beispiele können Sie über die Schaltfläche Show samples im Editor durchsehen.
