wave_toolkit.ipf en Igor Pro
Las pequeñas funciones utilitarias que todo proyecto de Igor termina escribiendo, en un archivo.
#pragma TextEncoding = "UTF-8"
#pragma rtGlobals = 3
// Utilidades. Nada aquí toca una global ni deja una wave atrás.
Function/WAVE Normalize(WAVE src)
Duplicate/FREE src, out
WaveStats/Q out
if (V_max == V_min)
out = 0
return out
endif
out = (out - V_min) / (V_max - V_min)
return out
End
Function/WAVE RemoveOutliers(WAVE src, Variable sigmas)
Duplicate/FREE src, out
WaveStats/Q out
Variable low = V_avg - sigmas * V_sdev
Variable high = V_avg + sigmas * V_sdev
out = (out < low || out > high) ? NaN : out
return out
End
Function/WAVE MovingAverage(WAVE src, Variable window)
Duplicate/FREE src, out
Smooth/B window, out
return out
End
Function Rms(WAVE src)
Duplicate/FREE src, squared
squared = src[p]^2
return sqrt(sum(squared) / numpnts(squared))
End
Function/S DescribeWave(WAVE w)
WaveStats/Q w
String out
sprintf out, "%s: %d points, %g to %g", NameOfWave(w), V_npnts, V_min, V_max
return out
End
Function TestToolkit()
Make/FREE/N=100/D probe = p
WAVE scaled = Normalize(probe)
WaveStats/Q scaled
if (abs(V_min) > 1e-9 || abs(V_max - 1) > 1e-9)
Print "Normalize is wrong"
return -1
endif
Make/FREE/N=4/D flat = 3
if (abs(Rms(flat) - 3) > 1e-9)
Print "Rms is wrong"
return -1
endif
Print "toolkit ok:", DescribeWave(probe)
return 0
End
Cómo funciona
- Cada una toma una referencia a wave y devuelve algo, así que se componen.
- Las waves libres dejan el trabajo de borrador fuera del experimento.
- El autotest del final es lo que vuelve confiable un toolkit.
Palabras clave y builtins usados aquí
EndFunctionStringVariableWAVEendififreturnwindow
El intento, en números
- Líneas
- 63
- Caracteres a escribir
- 1255
- Tokens
- 276
- Ritmo de tres estrellas
- 85 tpm
Al ritmo de tres estrellas de 85 tokens por minuto, este intento toma unos 195 segundos.
Paso 1 de 1 en Bis; paso 18 de 18 en Fundamentos del lenguaje.