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
- Cada etapa es su propia función, así que cualquiera puede correrse sola.
- El pipeline guarda su trabajo en una carpeta de datos y restaura la del llamador.
- Cada wave que crea lleva el nombre de la etapa que la creó.
Palabras clave y builtins usados aquí
DFREFEndFunctionVariableWAVEendififreturn
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.
Paso 1 de 2 en Bis; paso 15 de 16 en Waves y análisis.