Saltar a contenido

Macro

La mayoría de las operaciones de PDIndexer se pueden automatizar con la función Macro. Las macros son scripts de Python escritos en IronPython (una implementación de Python que se ejecuta sobre .NET), que se editan y ejecutan en una ventana de editor de macros dedicada. Úselas para automatizar tareas repetitivas, procesar varios archivos por lotes y exportar resultados a archivos CSV o de imagen de forma masiva.

Ventana del editor de macros

Conocimientos básicos de Python

Las macros aceptan directamente la sintaxis estándar de Python (bucles for, if/else, listas, funciones, etc.). Esta página no explica el lenguaje Python en sí. La funcionalidad específica de PDIndexer se invoca a través del objeto PDI que se describe más abajo.

Abrir el editor de macros

En la barra de menú de la ventana principal, elija Macro → Editor para abrir la ventana del editor de macros (con el título Macro).

Las macros creadas y guardadas en el editor también aparecen por nombre en el menú Macro, de modo que puede ejecutarlas directamente desde el menú. La lista de macros se guarda automáticamente al cerrar PDIndexer y se restaura en el siguiente inicio.

Disposición de la ventana del editor

La ventana del editor consta de las siguientes partes.

Parte Descripción
Lista de macros (izquierda) Una lista con los nombres de las macros guardadas. Haga clic en una entrada para cargar esa macro en el editor de la derecha.
Editor de código (centro) El área donde se escribe el script de Python. Admite un margen con números de línea, sangría automática, autocompletado de entrada (auto-complete) y descripciones emergentes de funciones.
Tabla de referencia de funciones Una tabla con todas las funciones disponibles bajo PDI. Haga doble clic en una celda para insertar el nombre de esa función en el código en la posición del cursor.
Panel de depuración (derecha) Muestra los nombres y valores de las variables en el punto actual durante la ejecución paso a paso.
Barra de estado Muestra la posición actual del cursor (Line / Col).

Botones de operación de la lista

Use los siguientes botones para editar la lista de macros.

Botón Acción
Add Añade el código actual a la lista con el nombre escrito en el cuadro de nombre (pide confirmación de sobrescritura si el nombre ya existe).
Replace Reemplaza la macro seleccionada en la lista por el código actual.
Delete Elimina la macro seleccionada de la lista.
/ Mueve la macro seleccionada hacia arriba o hacia abajo dentro de la lista.
Show samples Alterna la visualización de las macros de ejemplo integradas (véase más abajo).

Guardar y cargar

Las macros se pueden guardar y cargar como archivos .mcr individuales. Arrastre y suelte un archivo .mcr sobre la ventana del editor para cargar su contenido. Al pulsar Ctrl+S después de editar se sobrescribe la macro seleccionada actualmente.

Ejecutar una macro

Ejecute la macro con los botones situados en la parte inferior del editor de código.

Botón Acción
Run macro Ejecuta la macro de forma normal, hasta el final.
Step by step Ejecuta la macro línea por línea. Se detiene antes de cada línea y muestra los valores actuales de las variables en el panel de depuración de la derecha.
Next step (F10) Avanza a la siguiente línea durante la ejecución paso a paso (la tecla F10 también funciona).
Stop Aborta la ejecución. El aborto solo surte efecto durante la ejecución en modo Step by step.

print() no está disponible

El editor de macros no tiene una consola de salida estándar, por lo que la salida de print() no se muestra. Para inspeccionar los valores de las variables, ejecute la macro en modo Step by step y observe cómo cambian los valores en el panel de depuración.

Macros de ejemplo

Al marcar el botón Show samples se muestran en la lista las macros de ejemplo integradas (de solo lectura). Los ejemplos se muestran en el idioma actual de la interfaz (inglés/japonés). Úselos como referencia al escribir sus propias macros. Los ejemplos integrados son:

Nombre Contenido
01. Basic loop and if Conceptos básicos de los bucles for y if/else
02. Math functions Uso del módulo math (pi, sin, sqrt, exp, log, etc.)
03. Drawing view setup Definir el rango de vista con PDI.Drawing.SetBounds
04. Load profiles and crystals PDI.File.ReadProfiles / ReadCrystals
05. Inspect crystal cell constants Lectura de los parámetros de red, el volumen y la presión mediante PDI.Crystal
06. Scan crystal list Recorrer todo PDI.CrystalList
07. Average multiple profiles PDI.ProfileOperator.Average
08. Fitting workflow Una secuencia completa de PDI.Fitting
09. Sequential analysis and export Ejecutar PDI.Sequential y exportar CSV
10. Save metafile series per profile Guardar un EMF por perfil de forma masiva

El módulo math ya está importado

import math se ejecuta automáticamente al iniciar el editor, por lo que puede usar el módulo math directamente, p. ej. math.sqrt(2), sin una sentencia import explícita.


Referencia de funciones

Toda la funcionalidad específica de PDIndexer se invoca a través de las clases bajo el objeto raíz PDI. PDI ya está disponible en el ámbito de la macro, por lo que no se necesita ningún import.

Cada una de las tablas siguientes se transcribe de los atributos [Help] del código fuente. La misma lista aparece en la tabla de referencia de funciones dentro de la ventana del editor y en la sección 6 del manual web.

Notación

En la columna de la firma, (get/set) indica una propiedad de lectura/escritura y (get) una propiedad de solo lectura. Un argumento con = value es un argumento por defecto y puede omitirse.

PDI (raíz)

Miembro Firma Descripción
Sleep Sleep(int millisec) Pausa la ejecución de la macro durante los milisegundos indicados.
Obj Obj (get/set) Obtiene/Establece objetos pasados desde otro programa (argumentos entre procesos).

PDI.File — Entrada/salida de archivos

Miembro Firma Descripción
GetDirectoryPath GetDirectoryPath(string filename = "") Obtiene una ruta de directorio (con barra invertida final). Si se omite filename, se abre un cuadro de diálogo de selección de carpeta. De lo contrario, se devuelve la parte del directorio de filename.
GetFileName GetFileName() Abre un cuadro de diálogo de selección de archivo y devuelve la ruta completa del archivo elegido. Devuelve una cadena vacía si el usuario cancela.
GetFileNames GetFileNames() Abre un cuadro de diálogo de archivos de selección múltiple y devuelve las rutas completas de los archivos elegidos. Devuelve un array vacío si el usuario cancela.
ReadProfiles ReadProfiles(string filename) Lee los datos de perfil del archivo indicado. Si se omite filename (o no existe), se abre un cuadro de diálogo de selección de archivo.
SaveProfiles SaveProfiles(string filename) Guarda los datos de perfil en el archivo indicado. Si se omite filename, se abre un cuadro de diálogo de guardado.
ReadCrystals ReadCrystals(string filename) Lee los datos de cristal del archivo indicado. Si se omite filename (o no existe), se abre un cuadro de diálogo de selección de archivo.
SaveCrystals SaveCrystals(string filename) Guarda los datos de cristal en el archivo indicado. Si se omite filename, se abre un cuadro de diálogo de guardado.
SaveMetafile SaveMetafile(string filename) Guarda el patrón actual como un metarchivo de Windows (.emf). Si se omite filename, se abre un cuadro de diálogo de guardado.
SaveText SaveText(string text, string filename) Guarda el contenido de texto indicado en un archivo .txt. Si se omite filename, se abre un cuadro de diálogo de guardado.

PDI.Drawing — Vista de dibujo

Miembro Firma Descripción
MaxX MaxX (get/set) Obtiene/Establece el límite superior del eje X (el valor máximo que puede tomar el eje, no la vista actual).
MinX MinX (get/set) Obtiene/Establece el límite inferior del eje X (el valor mínimo que puede tomar el eje, no la vista actual).
MaxY MaxY (get/set) Obtiene/Establece el límite superior del eje Y (el valor máximo que puede tomar el eje, no la vista actual).
MinY MinY (get/set) Obtiene/Establece el límite inferior del eje Y (el valor mínimo que puede tomar el eje, no la vista actual).
EndX EndX (get/set) Obtiene/Establece el borde derecho (final) del eje X en la vista de dibujo actual.
StartX StartX (get/set) Obtiene/Establece el borde izquierdo (inicio) del eje X en la vista de dibujo actual.
EndY EndY (get/set) Obtiene/Establece el borde superior (final) del eje Y en la vista de dibujo actual.
StartY StartY (get/set) Obtiene/Establece el borde inferior (inicio) del eje Y en la vista de dibujo actual.
SetBounds SetBounds(double startX, double endX, double startY, double endY) Define la vista de dibujo indicando los cuatro bordes (StartX, EndX, StartY, EndY).

PDI.Crystal — Cristal seleccionado

Los parámetros de red CellACellC se expresan en \( \mathrm{\AA} \), y CellAlphaCellGamma en grados (deg).

Miembro Firma Descripción
CellVolume CellVolume (get) Obtiene el volumen de la celda (\( \mathrm{\AA}^3 \)) del cristal seleccionado. Devuelve 0 si no hay ningún cristal seleccionado.
Pressure Pressure(double volume = 0) Obtiene la presión (GPa) del cristal seleccionado calculada a partir de su EOS. Si volume es 0 (por defecto), se usa el volumen de celda actual.
Name Name (get/set) Obtiene/Establece el nombre del cristal seleccionado.
CellA CellA (get/set) Obtiene/Establece el parámetro de red a (\( \mathrm{\AA} \)) del cristal seleccionado.
CellB CellB (get/set) Obtiene/Establece el parámetro de red b (\( \mathrm{\AA} \)) del cristal seleccionado.
CellC CellC (get/set) Obtiene/Establece el parámetro de red c (\( \mathrm{\AA} \)) del cristal seleccionado.
CellAlpha CellAlpha (get/set) Obtiene/Establece el parámetro de red alfa (deg) del cristal seleccionado.
CellBeta CellBeta (get/set) Obtiene/Establece el parámetro de red beta (deg) del cristal seleccionado.
CellGamma CellGamma (get/set) Obtiene/Establece el parámetro de red gamma (deg) del cristal seleccionado.

PDI.CrystalList — Lista de cristales

Miembro Firma Descripción
Open Open() Abre la ventana 'Lista de cristales'.
Close Close() Cierra la ventana 'Lista de cristales'.
Count Count (get) Obtiene el número total de cristales de la lista.
SelectedName SelectedName (get) Obtiene el nombre del cristal seleccionado actualmente. Devuelve una cadena vacía si no hay ningún cristal seleccionado.
SelectedIndex SelectedIndex (get/set) Obtiene/Establece el índice del cristal seleccionado actualmente.
Select Select(int index) Selecciona el cristal en el índice indicado.
Check Check(int index = -1, bool state = true) Marca o desmarca el cristal en el índice indicado. Si index es -1, se aplica al cristal seleccionado actualmente.
Uncheck Uncheck(int index = -1) Desmarca el cristal en el índice indicado. Si index es -1, se desmarca el cristal seleccionado actualmente.
GetCellVolume GetCellVolume (get) Obtiene el volumen de la celda (\( \mathrm{\AA}^3 \)) del cristal seleccionado. Igual que PDI.Crystal.CellVolume; se conserva por compatibilidad con versiones anteriores.

PDI.Profile — Perfil seleccionado

Miembro Firma Descripción
Comment Comment (get/set) Obtiene/Establece el texto del comentario del perfil seleccionado actualmente.
Name Name (get/set) Obtiene/Establece el nombre visible del perfil seleccionado actualmente.

PDI.ProfileOperator — Aritmética de perfiles

Cada perfil se especifica por su índice en la lista. output es el nombre que se da al perfil resultante.

Miembro Firma Descripción
Average Average(int[] indices, string output) Calcula el promedio de los perfiles cuyos índices se enumeran en indices (p. ej. [1,3,5,9]). output es el nombre que se da al perfil resultante.
AddTwoProfiles AddTwoProfiles(int index1, int index2, string output) Calcula profile1 + profile2. Cada perfil se especifica por su índice. output es el nombre que se da al perfil resultante.
SubtractTwoProfiles SubtractTwoProfiles(int index1, int index2, string output) Calcula profile1 − profile2. Cada perfil se especifica por su índice. output es el nombre que se da al perfil resultante.
MultiplyTwoProfiles MultiplyTwoProfiles(int index1, int index2, string output) Calcula profile1 × profile2. Cada perfil se especifica por su índice. output es el nombre que se da al perfil resultante.
DivideTwoProfiles DivideTwoProfiles(int index1, int index2, string output) Calcula profile1 ÷ profile2. Cada perfil se especifica por su índice. output es el nombre que se da al perfil resultante.

PDI.ProfileList — Lista de perfiles

Miembro Firma Descripción
Open Open() Abre la ventana 'Lista de perfiles'.
Close Close() Cierra la ventana 'Lista de perfiles'.
DeleteAll DeleteAll() Elimina todos los perfiles de la lista (sin cuadro de diálogo de confirmación).
Delete Delete(int index) Elimina el perfil en el índice indicado.
Count Count (get) Obtiene el número total de perfiles de la lista.
SelectedName SelectedName (get) Obtiene el nombre del perfil seleccionado actualmente. Devuelve una cadena vacía si no hay ningún perfil seleccionado.
SelectedIndex SelectedIndex (get/set) Obtiene/Establece el índice del perfil seleccionado actualmente.
Select Select(int index) Selecciona el perfil en el índice indicado.
Check Check(int index = -1, bool state = true) Marca o desmarca el perfil en el índice indicado. Si index es -1, se aplica al perfil seleccionado actualmente.
Uncheck Uncheck(int index = -1) Desmarca el perfil en el índice indicado. Si index es -1, se desmarca el perfil seleccionado actualmente.
CheckAll CheckAll() Marca todos los perfiles de la lista.
UncheckAll UncheckAll() Desmarca todos los perfiles de la lista.

PDI.Fitting — Ajuste de picos

Opera la ventana de Ajuste de picos.

Miembro Firma Descripción
Open Open() Abre la ventana 'Ajuste de picos'.
Close Close() Cierra la ventana 'Ajuste de picos'.
Apply Apply() Aplica los parámetros de red optimizados al cristal seleccionado (equivale a hacer clic en el botón Confirm de la ventana de ajuste).
Check Check(int index = -1, bool state = true) Marca o desmarca el plano reticular en el índice indicado. Si index es -1, se aplica al plano seleccionado actualmente.
Uncheck Uncheck(int index = -1) Desmarca el plano reticular en el índice indicado. Si index es -1, se desmarca el plano seleccionado actualmente.
Select Select(int index) Selecciona el plano reticular en el índice indicado.
SelectedIndex SelectedIndex (get/set) Obtiene/Establece el índice del plano reticular seleccionado actualmente.
Range Range(double range) Define el rango de búsqueda de picos para el plano reticular seleccionado actualmente (en la misma unidad que el eje X).

PDI.Sequential — Análisis secuencial

Opera la ventana de Análisis secuencial. Los métodos de obtención de CSV devuelven los resultados del último análisis secuencial como una cadena CSV.

Miembro Firma Descripción
Directory Directory (get/set) Obtiene/Establece la ruta completa del directorio donde se guardan los resultados del análisis secuencial.
Open Open() Abre la ventana 'Análisis secuencial'.
Close Close() Cierra la ventana 'Análisis secuencial'.
Execute Execute() Ejecuta el análisis secuencial sobre todos los perfiles marcados.
GetCSV_2theta GetCSV_2theta() Obtiene los resultados de 2-theta del último análisis secuencial como una cadena CSV.
GetCSV_D GetCSV_D() Obtiene los resultados de espaciado d del último análisis secuencial como una cadena CSV.
GetCSV_FWHM GetCSV_FWHM() Obtiene los resultados de FWHM del último análisis secuencial como una cadena CSV.
GetCSV_Intensity GetCSV_Intensity() Obtiene los resultados de intensidad de pico del último análisis secuencial como una cadena CSV.
GetCSV_CellConstants GetCSV_CellConstants() Obtiene los resultados de parámetros de red del último análisis secuencial como una cadena CSV.
GetCSV_Pressure GetCSV_Pressure() Obtiene los resultados de presión del último análisis secuencial como una cadena CSV.
GetCSV_Singh GetCSV_Singh() Obtiene los resultados de la ecuación de Singh del último análisis secuencial como una cadena CSV.
AutoSave2theta AutoSave2theta (get/set) Obtiene/Establece si los resultados de 2-theta se guardan automáticamente tras cada ejecución del análisis secuencial.
AutoSaveDspacing AutoSaveDspacing (get/set) Obtiene/Establece si los resultados de espaciado d se guardan automáticamente tras cada ejecución del análisis secuencial.
AutoSaveFWHM AutoSaveFWHM (get/set) Obtiene/Establece si los resultados de FWHM se guardan automáticamente tras cada ejecución del análisis secuencial.
AutoSaveIntensity AutoSaveIntensity (get/set) Obtiene/Establece si los resultados de intensidad de pico se guardan automáticamente tras cada ejecución del análisis secuencial.
AutoSaveCellConstants AutoSaveCellConstants (get/set) Obtiene/Establece si los resultados de parámetros de red se guardan automáticamente tras cada ejecución del análisis secuencial.
AutoSavePressure AutoSavePressure (get/set) Obtiene/Establece si los resultados de presión se guardan automáticamente tras cada ejecución del análisis secuencial.
AutoSaveSingh AutoSaveSingh (get/set) Obtiene/Establece si los resultados de la ecuación de Singh se guardan automáticamente tras cada ejecución del análisis secuencial.

Ejemplo de macro

Como uno de los ejemplos integrados, a continuación se muestra una macro que ejecuta el análisis secuencial y guarda los resultados en CSV.

# 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")

Puede consultar los demás ejemplos desde el botón Show samples del editor.