typestar

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

  1. La lista de waves es una cadena, así que el bucle va sobre StringFromList.
  2. Los resultados van a waves, porque eso es lo que leen las tablas y gráficos de Igor.
  3. El resumen se imprime y se dibuja, así sobrevive al salir del experimento.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 2 en Bis; paso 16 de 16 en Waves y análisis.

← Anterior