batch_report.ipf en Igor Pro
Cada wave que coincide con un patrón, medida en una sola tabla y una sola figura.
#pragma TextEncoding = "UTF-8"
#pragma rtGlobals = 3
Function BatchReport(String pattern)
String list = WaveList(pattern, ";", "TEXT:0")
Variable n = ItemsInList(list)
if (n == 0)
Printf "nothing matches %s\r", pattern
return -1
endif
NewDataFolder/O root:Report
Make/O/T/N=(n) root:Report:names
Make/O/N=(n)/D root:Report:means, root:Report:sds, root:Report:peaks
WAVE/T names = root:Report:names
WAVE means = root:Report:means
WAVE sds = root:Report:sds
WAVE peaks = root:Report:peaks
Variable i
for (i = 0; i < n; i += 1)
String name = StringFromList(i, list)
WAVE w = $name
WaveStats/Q w
names[i] = name
means[i] = V_avg
sds[i] = V_sdev
peaks[i] = V_max
Printf "%-24s mean %8.4g sd %8.4g\r", name, V_avg, V_sdev
endfor
DoWindow/K ReportTable
Edit/N=ReportTable names, means, sds, peaks
DoWindow/K ReportGraph
Display/N=ReportGraph means vs names
ErrorBars means Y, wave=(sds, sds)
ModifyGraph mode=3, marker=19, rgb=(0, 0, 45000)
Label left, "Mean"
ModifyGraph tkLblRot(bottom)=90, tick(bottom)=3
WaveStats/Q means
TextBox/C/N=overall/A=LT "n = " + num2istr(n)
return 0
End
Cómo funciona
- La lista de waves es una cadena, así que el bucle va sobre
StringFromList. - Los resultados van a waves, porque eso es lo que leen las tablas y gráficos de Igor.
- El resumen se imprime y se dibuja, así sobrevive al salir del experimento.
Palabras clave y builtins usados aquí
EndFunctionStringVariableWAVEendforendifforifreturnwave
El intento, en números
- Líneas
- 48
- Caracteres a escribir
- 1087
- Tokens
- 278
- Ritmo de tres estrellas
- 90 tpm
Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 185 segundos.
Paso 2 de 2 en Bis; paso 16 de 16 en Waves y análisis.