typestar

analysis_pipeline.ipf en Igor Pro

Un análisis pequeño y completo: cargar, limpiar, ajustar y reportar, en el orden real de ejecución.

#pragma TextEncoding = "UTF-8"
#pragma rtGlobals = 3

// Un experimento de decaimiento, de principio a fin.

Function/WAVE MakeTestData(Variable n)
    Make/O/N=(n)/D root:raw
    WAVE raw = root:raw
    SetScale/P x, 0, 0.001, "s", raw
    raw = 0.2 + 1.5 * exp(-x / 0.05) + gnoise(0.03)
    return raw
End

Function/WAVE Clean(WAVE src)
    Duplicate/O src, $(NameOfWave(src) + "_clean")
    WAVE cleaned = $(NameOfWave(src) + "_clean")

    WaveStats/Q cleaned
    Variable cut = V_avg + 4 * V_sdev
    cleaned = cleaned > cut ? NaN : cleaned

    Smooth/B 5, cleaned
    return cleaned
End

Function FitDecay(WAVE y, Variable &tau, Variable &error)
    Make/O/D/N=3 coefs = {0.2, 1.5, 0.05}
    FuncFit/Q SingleExp, coefs, y /D

    WAVE W_sigma
    tau = coefs[2]
    error = W_sigma[2]
    return V_chisq
End

Function SingleExp(WAVE w, Variable t) : FitFunc
    return w[0] + w[1] * exp(-t / w[2])
End

Function RunPipeline()
    DFREF saved = GetDataFolderDFR()
    SetDataFolder root:

    WAVE raw = MakeTestData(2000)
    WAVE cleaned = Clean(raw)

    Variable tau, error
    Variable chisq = FitDecay(cleaned, tau, error)

    DoWindow/K DecayGraph
    Display/N=DecayGraph cleaned
    WAVE/Z fit_raw_clean
    if (WaveExists(fit_raw_clean))
        AppendToGraph fit_raw_clean
        ModifyGraph rgb(fit_raw_clean)=(65535, 16000, 16000), lsize=1.5
    endif
    Label left, "Signal (V)"
    Label bottom, "Time (s)"
    TextBox/C/N=fitInfo/A=RT "tau = " + num2str(tau) + " s"

    Printf "tau %.4g +/- %.4g s, chi squared %g\r", tau, error, chisq
    SetDataFolder saved
End

Cómo funciona

  1. Cada etapa es su propia función, así que cualquiera puede correrse sola.
  2. El pipeline guarda su trabajo en una carpeta de datos y restaura la del llamador.
  3. Cada wave que crea lleva el nombre de la etapa que la creó.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
63
Caracteres a escribir
1433
Tokens
327
Ritmo de tres estrellas
90 tpm

Al ritmo de tres estrellas de 90 tokens por minuto, este intento toma unos 218 segundos.

Escribe este fragmento

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

← Anterior Siguiente →