Releases: sullymike/Fitbauer
Release list
Fitbauer v5.1.0
Fitbauer v5.1.0
Minor release on top of 5.0.0: a more comfortable interface, a fidelity fix when
importing NORMOS jobs, and third-party licensing put in order.
Importing .JOB: area constraints, properly rescaled
NORMOS constrains areas (ARE(2)=f·ARE(1)); Fitbauer's parameter is the
depth (area = depth·(π/2)·ΣΓ). When the two subspectra have different
linewidths, copying the factor verbatim mis-scaled the constrained subspectrum —
in one real job, 14 % off the NORMOS curve. Factor and offset are now rescaled
using the job's own denominators, with a warning that the ratio drifts if the fit
moves the linewidths.
Found in a bulk analysis of 357 real .JOB files. After the fix, Fitbauer
reproduces the NORMOS curve to a median 0.022 % of peak in 336 of the 337
analysable jobs —the remaining one is a fit where NORMOS itself diverged— and its
refit matches or improves NORMOS's χ² in 321 of 336.
A more comfortable interface
- Drag and drop onto the window:
.ws5/.adt/.mosopens the spectrum,
.jsonrestores the session, and.JOBimports the NORMOS job together with
its spectrum. - Autosave and recovery. Every three minutes the work in progress is dumped
torecuperacion.json(atomic write); if Fitbauer was closed without saving,
it offers to recover it at start-up, naming the spectrum and the time. It does
not replace saving the session: it is a safety net for the hours spent on fine
fitting. - Warning when closing with unsaved work (Save / Quit without saving /
Cancel). The window used to close silently and, since autosave arrived, a clean
close also took the recovery point with it. - Shortcuts for the daily workflow: Ctrl+M initialise from minima,
Ctrl+Shift+M autofit, Ctrl+E edit minima, Ctrl+F release all, Ctrl+Shift+F fix
all. The whole cycle can now be driven from the keyboard. - Copy results (File ▸ Copy results, Ctrl+Shift+C): the parameter table
with its errors, χ², AIC and BIC, as tab-separated text that Excel and Origin
paste into columns — active components only. - Tooltips on every parameter —label, spin box and slider—, stating which
controls open a context menu, and "Right-click ▸ More information" takes
each parameter to its chapter of the built-in help. 38 new keys × 8 languages. - The line profile becomes a dropdown, next to the waveform and absorber
ones, with σ right below it. Calibration now hides what does not apply
(−23 % panel height) and the isomer shift heads the component panel again. - The empty state shows how to start: "Drag a spectrum here (.ws5, .adt,
.csv…) or press Ctrl+O".
Your settings, safe
- The test suite no longer overwrites the user's configuration. Building a
window inside a test was enough to clobber~/.config/mossbauer_fe33_gui/; an
autouse fixture now redirects that directory to a temporary one. settings.jsonis written atomically, and if it exists but cannot be read
it is set aside assettings.json.corruptoinstead of being overwritten.
Third-party licences
Fitbauer's code remains Apache 2.0, but distributing executables that bundle
Qt brings the LGPLv3 obligations for that part. All three are now covered:
NOTICEandTHIRD-PARTY-LICENSES.mdat the root, listing every dependency
with its licence, plus the full text of the LGPLv3 and GPLv3 inlicenses/.
All four travel inside the ZIP and inside the PyInstaller build.- The About dialog states that Qt is used through PySide6 under the LGPLv3,
in all 8 languages. - The READMEs explain how to replace the Qt libraries (LGPLv3 §4): the source
distribution does not bundle Qt at all —pipinstalls it— and in the one-dir
build it is enough to replace the.so/.dllfiles under
_internal/PySide6/, with no rebuild.
Full suite: 584 tests passing.
Fitbauer v5.0.0
Fitbauer v5.0.0
Versión mayor. Se ha revisado el código fuente Fortran completo de NORMOS
(SITE + DIST) contra core/, nivel a nivel, y el resultado son tres cosas:
Fitbauer da los mismos números, lee y escribe sus ficheros, y hace bastante
más.
Paridad con NORMOS, verificada con números
La física se ha contrastado en dos bancos independientes.
Banco sintético — NORMOS genera el espectro a partir de parámetros
conocidos, Fitbauer lo ajusta, se compara con la verdad: 411 espectros,
~1.150 ajustes, 6.497 comparaciones.
| Bloque | posición | BHF | anchura |
|---|---|---|---|
| Sexteto/doblete de primer orden | 2·10⁻⁷ mm/s | 4·10⁻⁵ T | 8·10⁻⁷ mm/s |
| Hamiltoniano completo | 6·10⁻⁵ mm/s | 8·10⁻⁴ T | 5·10⁻⁴ mm/s |
| Multisitio y ligaduras (hasta 10 sitios) | 2·10⁻⁴ mm/s | 2·10⁻⁴ T | 2·10⁻⁴ mm/s |
Banco de trabajos reales — 564 ajustes hechos en NORMOS a lo largo de
años, con sus medidas de laboratorio, recargados y reproducidos:
- En 355 de 503 trabajos comparables (71 %) Fitbauer iguala o mejora
el χ² reducido de NORMOS (mediana 2,433 → 2,089). - Acuerdo en los parámetros: δ 0,0011 mm/s · ΔEQ 0,0019 · BHF 0,017 T ·
Γ 0,030 · área 0,0036. - En 22 casos NORMOS había convergido a algo no físico —anchuras por
debajo de la natural, áreas negativas— que Fitbauer no replica porque tiene
cotas físicas.
Interoperabilidad de ficheros .JOB
Archivo ▸ NORMOS (.JOB)
- Importar reconstruye el modelo y carga el espectro, que el
.JOB
nombra en su cabecera. Funcionan los trabajos de NORMOS-SITE (sitios
discretos) y los de NORMOS-DIST (distribuciones), que se detectan solos y
abren el panel P(BHF)/P(ΔEQ). - Exportar escribe el modelo en formato NORMOS. Comprobado que NORMOS
acepta el fichero que produce Fitbauer, reproduciendo la teoría original
con diferencia exactamente cero. - Las conversiones de convenio delicadas se hacen solas, y el importador
avisa de todo lo que no ha podido trasladar.
Capacidades nuevas de esta versión
- Fuente polarizada (
METHOD=4/POLAR), implementada desde primeros
principios y validada contra el binario al 0,4 % del pico. - Polarización de poblaciones en la relajación Blume–Tjon: reproduce la
rutinaISIRLXde NORMOS con rms < 10⁻¹². - Doblado con interpolación cúbica (B-spline): el sesgo de anchura baja del
+9,5 % al +2,8 %. Detección de canales de borde muertos —en el banco
real, 42 ajustes mejoraron hasta ×65— y diagnóstico del efecto geométrico. - Convenio de posiciones del sexteto seleccionable (α-Fe o NORMOS), para
reproducir un BHF suyo exactamente. - Asimetría de línea (AKS), integral de transmisión con kernel de fuente
integrado por canal, barras de error absolutas y propagación correcta en
parámetros ligados.
Interfaz
- Modo compacto de parámetros (Vista ▸ Parámetros compactos): cada
parámetro pasa de dos filas a una. Junto con ocultar los no ajustables, tres
sextetes apilados caen de 1191 a 531 píxeles, así que vuelven a caber varios
componentes a la vez. No esconde ningún parámetro. - Distintivo de versión en la cabecera y portada renovada.
- Ayuda integrada con capítulo nuevo de NORMOS en los 8 idiomas; manuales
ES y EN al día (83 y 84 páginas).
Lo que todavía no hace
Con la misma franqueza: solo ⁵⁷Fe (NORMOS admite además ¹¹⁹Sn, ¹⁹⁷Au, ¹⁵¹Eu y
¹²¹Sb), distribuciones de Czjzek/Le Caër analíticas, campo externo en la
relajación de Ising, espectros de emisión, dos bloques de distribución
solapados, octete como componente propia y preprocesado (agrupar canales, sumar
espectros). Al importar un .JOB de distribución, el suavizado LAMDA no se
traslada: hay que fijarlo con la L-curve.
El inventario completo está en validacion/informe/COBERTURA_NORMOS.md y lo
pendiente en PENDIENTE_NORMOS.md.
Suite completa: 546 tests en verde.
Fitbauer v4.19.0 — cristal único, kernel Hamiltoniano y fondo v³/v⁴ (incluye v4.18.1)
Esta release agrupa todo lo publicado en main desde v4.18.0 (dos versiones: v4.18.1, que no tuvo release propia, y v4.19.0).
v4.19.0 — tres capacidades de paridad con NORMOS
Cierra tres de las cuatro capacidades que el veredicto del banco de validación (validacion/informe/VEREDICTO.md) señalaba como "lo que le falta a Fitbauer para llegar a NORMOS" (queda solo la fuente polarizada, bajo demanda):
- Cristal único / muestra orientada (
quad_treatment="hamiltonian_sc"): el haz γ deja de promediarse isótropo y toma dirección fija (parámetros por componentebex/gax, polar/azimutal en el marco del EFG) con suma coherente entre canales de radiación (matriz de Wigner d¹). En el límite axial reproduce los patrones clásicos 3:0:1 (haz ∥ B) y 3:4:1 (haz ⊥ B) y su promedio isótropo recupera el polvo a 1e-15. Equivale al IFSC/BEX/GAX de SITE; re-ajuste del banco K3: χ²red 3.5–20 → 2.3–3.4 con intensidades fijas (el residuo restante es la aproximación de SITE-1994). Convención descubierta: el GAX del demo está desplazado 90° del azimut geométrico. - Kernel Hamiltoniano en distribuciones (
kernel_treatment="hamiltonian"en el panel de distribución y--kernel-treatment hamiltonianoen el CLI): cada columna del kernel P(BHF) es el promedio de polvo del Hamiltoniano completo (EFG aleatorio, control η); ΔEQ pasa a ser el módulo del EFG — análogo exacto (no perturbativo) del EXACT/QUP de NORMOS-DIST. La textura del kernel va ligada a B (marco del campo, nuevafull_hamiltonian_lines_field). Banco L4: σ a QUP=1 pasa de +2.4 T (1er orden) a +1.0 T. - Fondo cúbico/cuártico (
curv3/curv4, panel de calibración): paridad con BKG(4)/BKG(5) de NORMOS; el fondo cúbico pasa de χ²red 2.5 a exacto y el cuártico se recupera a 3 cifras.
Todo expuesto en la GUI Qt con sesiones, i18n en 8 idiomas y manuales ES/EN recompilados. Tests nuevos: tests/test_mejoras_v4_19.py (11); suite completa 349 en verde.
Corrección: si el layout guardado en los ajustes referenciaba un preset o layout personalizado que ya no existe tras actualizar, la ventana arrancaba en blanco (todos los paneles ocultos). Ahora un nombre huérfano cae automáticamente al preset por defecto (con test de regresión).
v4.18.1 — 2ª ampliación del banco NORMOS (series K/L) y tres ajustes de paridad (sin release previa)
Con el manual de NORMOS (Brand 1990) se amplió el banco de validación con pruebas de extremos y centro de cada capacidad de SITE/DIST que faltaba (octetes NLINE=8, fondos BKG(k), cristal único IFSC, ligaduras nativas NDEX, binomial CONC, Czjzek, PNEG, EXACT, textura D23; informe §16). Tres huecos de paridad corregidos:
wide_deltaamplía también ΔEQ a ±2·(v_max+2) (SITE admite ΔEQ=5; χ²red 82 → 1e-7).- Cota de
slope±0.005 → ±0.02 (los fondos lineales BKG(2) alcanzan 7.5e-3 mm/s⁻¹; χ²red 61 → 3e-7). --d13/--d23enfit_bhf_distribution_cli.py: textura del kernel de distribución (el 3:2:1 fijo sesgaba σ hasta +134 %).
Además (commits de esta release, ya en main): 3ª tanda del banco con extremos sobre las series originales A–J, informe-veredicto completo (VEREDICTO.md) y validación de las capacidades v4.19 (valida_v4_19.py, fig_v419_mejoras).
Commits incluidos (desde v4.18.0)
- d494546 feat(validacion,core): 2ª ampliación del banco NORMOS (series K/L) y ajustes de paridad (v4.18.1)
- aea01db feat(core,gui,i18n,docs): cristal único, kernel Hamiltoniano en distribuciones y fondo v³/v⁴ (v4.19.0)
- 1c6ec01 fix(gui): la ventana arrancaba en blanco si el layout guardado era huérfano
- 2905d4a feat(validacion): 3ª tanda de extremos, veredicto final y validación v4.19
Fitbauer v4.18.0
v4.18.0 — cuatro extensiones de modelo derivadas del banco de validación NORMOS
Un banco round-trip contra NORMOS-SITE/DIST (327 espectros sintéticos, ~850
ajustes; validacion/informe/INFORME.md) localizó los sesgos de modelo de
Fitbauer. Esta versión los elimina con cuatro extensiones opt-in (el
comportamiento por defecto no cambia; los 310 tests previos pasan intactos):
- Hamiltoniano estático completo (
quad_treatment="hamiltonian"):
diagonalización general con EFG no axial (nuevos parámetros por componente
eta,phi) e intensidades de transición calculadas desde los
autovectores (Clebsch-Gordan, promedio isótropo del haz, 8 líneas con las
ΔmI=±2 incluidas; regla de suma conservada). Sesgo mediano del banco:
|ΔBhf| ×23 menor en A4 (axial) y ×33 en A5 (η≠0). Nota: a mezcla fuerte la
implementación es MÁS exacta que NORMOS-SITE 1994, que omite los términos
de interferencia del estado fundamental y viola la invariancia rotacional
(demostrado en el informe §13). - Integral de transmisión (
absorber_model="transmission"): T = base −
L_fuente ⊗ (1 − exp(−τ)) con kernel de fuente integrado por canal
(src_fwhm, fijo por defecto en 0.097 mm/s) ydepthcomo profundidad
óptica (límite del ajuste relajado a 5 en este modo). Γ recuperada a
≤0.02 mm/s hasta t_a=30 (antes: +0.09 a t_a=10 con modelo fino). - Curvatura de base (global
curv, fijo a 0 por defecto): absorbe el
efecto geométrico parabólico residual tras el doblado (sesgo de Γ 0.034 →
8·10⁻⁵ con parábola del 1.5 %). - Integración del modelo sobre el canal (
channel_sub, por defecto 1):
cuadratura Gauss-Legendre sobre la anchura del canal; con canal ≈ 1.3Γ el
sesgo de Γ pasa de +0.091 a <0.002.
core/session.py expone todo en la capa headless (channel_sub, curv,
src_fwhm en plantillas/sesión); tests nuevos en
tests/test_mejoras_normos.py (límites exactos: θ=0 ≡ 1er orden, regla de
suma, invariancia rotacional, límite fino, identidades por defecto).
GUI, ayudas y robustez (3ª fase):
- Todo lo anterior queda expuesto en la GUI Qt: tratamiento «Hamiltoniano
completo» en el menú contextual de ΔEQ (con controles η y φ del componente),
«Integral de transmisión» en el selector de absorbente (+ control «Γ fuente»),
«Curvatura base» en calibración, e «Integración por canal», «Líneas sueltas»
y «Escalado global automático» en Opciones avanzadas. Persistencia en
settings y sesiones; los ajustes devuelven curv/src_fwhm al panel. - Robustez del motor (banco §6.10): (1) el corte por estancamiento del
multistart ya no abandona mientras el mejor χ²red siga alto; (2) escalado
automático a evolución diferencial + refinado local cuando el multistart
acaba con χ²red>10 (auto_global, activo por defecto en sesión/GUI).
Re-medido el experimento de 20 semillas de dos sextetos solapados con
arranques ±15 %: de 8/20 fallos a 0/20. - Manuales de usuario ES/EN actualizados (capítulo Simular y ajustar:
absorbente, cuadrupolo, opciones) y recompilados; cadenas i18n y capítulos
de ayuda en los 8 idiomas.
Con el manual de NORMOS (R.A. Brand, 1990; validacion/sitedistmanual.odt)
se cerró además el resto de la lista de capacidades:
wide_delta(ModelState, opt-in): límites de δ ampliados a ±(vmax+2)
para usar singletes como líneas Lorentzianas libres en cualquier posición
(caso C3 fuera de rango: χ²red 1702 → 0.0002).- GUI hasta 10 componentes:
MAX_COMPONENTS= 10 como fuente única en
core/params.py, importado por los módulos Qt (antes 6 duplicado en tres
ficheros); el banco había demostrado que el motor ajusta 10 sitios. - El manual confirmó que la convención θ/φ y el promedio de polvo del nuevo
Hamiltoniano coinciden con los de SITE, que las ligaduras de SITE
(NDEX/FACTOR/CONST) son formalmente idénticas a las de Fitbauer, y
permitió validar el kernel P(ΔEQ) contra la distribución continua real de
DIST (METHOD=6). La relajación Ising del demo resultó no monotónica en
OME y no permite verificar el mapeo cuantitativo OME(MHz)↔ν.
Fitbauer v4.17.3
Fitbauer v4.17.3
Nuevo idioma: portugués 🇵🇹
Traducción completa al portugués (europeo, Acordo Ortográfico 1990) desde el
español:
- Interfaz —
locales/pt/strings.json, las 803 claves de menús, paneles,
diálogos y mensajes. - Ayuda integrada —
locales/pt/help.json, los 30 capítulos completos
(espectroscopía, modos de ajuste, distribuciones, CLI…). - Terminología revisada con glosario consistente (Ficheiro, Dobragem, Desvio
isomérico, Definições…) y registro formal unificado. - Los placeholders de formato y los grupos temáticos de la ayuda se
verificaron idénticos aes; el test de paridad de locales cubre ahora
8 idiomas (es, en, fr, de, pt, ru, ja, zh).
El idioma aparece automáticamente en Vista → Idioma y se incluye en los
ejecutables.
Suite completa: 310 tests en verde.
Fitbauer v4.17.2
Fitbauer v4.17.2
Caza de bugs multi-agente II — 21 correcciones
Segunda auditoría con cuatro revisores independientes sobre E/S de datos y
folding, distribución, sesiones/estado y CLIs+i18n. Cada hallazgo se reprodujo
con un script antes de corregirlo y se verificó después del arreglo.
E/S y folding
- La búsqueda del centro de doblado usaba una ventana fija 250.5–262.5 (válida
solo para 512 canales) en la GUI y en los CLIs de distribución: con 256 o
1024 canales el centro era absurdo. Ahora deriva de N (N/2 ± 20). - El χ² de simetría del detector de centro usa la misma interpolación subcanal
que el folding, normaliza por pares realmente evaluados y excluye los
canales de borde: el modo seno con absorción ≤1 % ya no se desvía hasta 50
canales y un canal 1 muerto (habitual en ADT reales) ya no sesga el centro. .PLTde NORMOS con títulos con dígitos (Fe3O4,T=300K) ya no envenenan
vmax; los CSV con decimales de coma (locale es_ES) cargan correctamente; un
WS5 truncado ya no traga números de la cabecera XML; los CLIs de
distribución aplican el mismo recorte de bordes que la GUI.
Distribución
- Los componentes nítidos Relajación/Blume-Tjon/Néel se ajustaban con un
patrón de líneas erróneo ([3, 4, 1] en vez de [3, 2, 1]); el subespectro
dibujado coincide ahora exactamente con el ajustado. - Gaussiana/VBF/Binomial/Fija respetan baseline/slope fijados (GUI y
--no-fit-baseline/--no-fit-slopedel CLI, que se ignoraban en silencio). - Binomial y Fija ya no heredan el perfil de línea de un ajuste discreto
anterior; la L-curve en modo P(IS) escanea la variable correcta.
Sesiones
- Las sesiones antiguas (incluidas las 4 de ejemplo del repo) vuelven a
cargar; los ajustes del panel de distribución guardados en formato legacy se
restauran; una sesión de espectro CSV se restaura por el lector correcto;
multistart = 0 sobrevive al reinicio.
CLIs e i18n
--outya no puede sobrescribir la plantilla o el espectro de entrada;
--scan-alphacon formas paramétricas falla antes de ajustar; 10 claves de
traducción que faltaban en todos los idiomas están ahora en los 7 locales
(con test de paridad de claves).
Suite completa: 310 tests en verde (21 de regresión nuevos).
Detalle completo por bug en CHANGELOG.md.
Fitbauer v4.17.1
Fitbauer v4.17.1
Γ inicial físico en «Inicializar desde mínimos»
- El estimador de anchura CWT proponía Γ ~3× demasiado grande: para una
Lorentziana de FWHM Γ, la escala Ricker de máxima respuesta cumple
2·a·dv ≈ 2.85·Γ (ratio empírico estable 2.6–3.0 en Γ = 0.2–1.0 mm/s), pero la
conversión escala→anchura no aplicaba ese factor. α-Fe arrancaba con
Γ = 0.75 mm/s (real ≈ 0.28), hematita con 0.94 y magnetita saturaba el tope
de 2.0 — el autoajuste partía de líneas absurdamente anchas, y la rama CWT era
además inconsistente con la rama directa a media altura (que sí mide FWHM). - Con la calibración (
_CWT_LORENTZ_WIDTH_RATIO = 2.85): α-Fe → 0.26,
hematita → 0.33, magnetita → 0.46/0.73.
Verificación E2E por modalidad
Arnés ejecutado sobre las 10 variantes de ajuste del programa — discreto (con
«Ajustar centro»), P(BHF) Histograma/VBF/maxent, P(BHF)+componente nítida,
P(ΔEQ), P(IS) y las tres distribuciones 2D — con valores iniciales desplazados
a propósito: en todas, cada parámetro libre varía en el ajuste y se recupera
tras guardar/cargar la sesión. El caso representativo (P(BHF) con κδ libre +
roundtrip de sesión) queda incorporado a la suite.
Suite completa: 289 tests en verde.
Fitbauer v4.17.0
Fitbauer v4.17.0
Caza de bugs en profundidad con cuatro auditorías independientes (motor de
ajuste, GUI, sesiones/estado, CLI+i18n), verificación manual de cada hallazgo y
21 correcciones. i18n resultó estar limpio (793 claves y placeholders
idénticos en los 7 idiomas).
Motor de ajuste
- Vmax negativo + «Ajustar velocidad» invertía el eje: el eje quedaba
des-invertido en todas las iteraciones (δ espejado) y el signo se perdía al
terminar. Ahora la convención de eje se conserva (triangular y seno). fit_centerroto fuera de 512 canales: los límites del centro estaban
codificados para 512 (250–263); ahora derivan del nº de canales (N/2 ± 7).- σ Poisson en modo seno: se aplicaba el ÷2 del promedio de dos canales del
doblado también en seno (sin doblar) → χ² inflado ×2; ídem en las réplicas
bootstrap. Corregido. - Perfil de verosimilitud con
fit_center: comparaba χ² de datasets
doblados en centros distintos (offset constante en Δχ², intervalosnull
silenciosos en el CLI). Ahora se condiciona al dataset del centro ajustado. - Errores de vmax/centro/σ ajustados: se calculaban en la covarianza y se
descartaban. Ahora se informan en GUI, informes y CLI. - Réplicas bootstrap/perfil: usan la σ-Voigt ajustada y heredan la forma de
onda;HeadlessSessionre-dobla trasfit_center(en seno actualiza la
fase) y el CLI muestra los globales ajustados. - «Propagar incertidumbre de calibración» era un no-op:
sigma_vmaxno se
cableaba nunca; ahora se toma de la calibración asociada.
GUI
- El menú Modelo de absorbente ahora sincroniza el panel (era un no-op para
el ajuste: seguía usando el modelo antiguo ysat_scalequedaba agrisado). - Batch: warm-start completo (vmax/σ/sat_scale) y refresh del plot/panel al
cerrar el diálogo. - Bootstrap sin ajuste previo vuelca el ajuste base a los widgets y al plot.
- La sincronización de restricciones ya no desbloquea señales a mitad de una
carga de sesión (podía pisar el centro guardado). - Menores: etiqueta del fichero tras «Buscar centro»; comprobación de tamaños
al exportar un ajuste de distribución.
Sesiones (guardar/cargar, historial, deshacer)
- El tipo y los modos de cada componente se restauran antes que los valores
(un tipo distinto machacaba int1/int2 recién restaurados) y con re-layout. - El modo se restaura antes que las casillas «activo» y los valores de la
malla (se pisaba el patrón de componentes y se recortaban valores con los
rangos de la variable anterior). - Menores: limpieza de resultados runtime/mapa 2D con cuentas embebidas; la
calibración y la ruta de P fija ya no se heredan de la GUI anterior;
multistart_n: nullde sesiones antiguas ya no aborta la carga.
CLI de distribución
- Default de Γ unificado (0.36 mm/s, fuente única en
core.params): el
pipeline web usaba 0.18 sin sidecar mientras GUI y CLI usaban 0.36 — el mismo
espectro daba P(BHF) distintas según el punto de entrada. Para reproducir el
comportamiento antiguo del pipeline:--gamma 0.18.
Verificación
7 tests de regresión nuevos (todos fallan sin los fixes). Suite completa:
287 tests en verde, golden headless incluido.
Fitbauer v4.16.3
Fitbauer v4.16.3
Auditoría de la persistencia: cada ajuste de la GUI debe guardarse en la sesión y
restaurarse al cargarla. Afecta a guardar/cargar sesión, al historial de
ajustes y a Deshacer ajuste (los tres comparten el mismo mecanismo).
Corregido
- La malla 2D no se persistía: los controles del eje Y de la distribución 2D
(qmin/qmax/qbins/log α_q) no formaban parte del estado de sesión — al
recargar volvían a sus valores por defecto. Ahora se guardan y restauran. - Las casillas «Fijo» de calibración no se restauraban:
baseline,slopey
sat_scaleguardaban su estado fijo/libre en la sesión pero al cargarla solo se
restauraban las de los componentes (y σ vía «Ajustar σ»). Ahora también las tres
de calibración.
Blindaje
Test nuevo de ida y vuelta completa: guardar → cargar → guardar debe
reproducir el model_state exactamente, con lo que cualquier deriva futura entre
guardado y restauración hará fallar la suite. Suite completa: 280 tests en verde.
Documentación
- Manuales ES y EN: documentadas la casilla «Ajustar folding point dentro del
ajuste» (§ El folding y el centro) y el diálogo «Historial de ajustes»
(§ Herramientas de ayuda al ajuste); PDFs recompilados. - Verificado que la ayuda in-app cubre en los 7 idiomas el folding point
ajustable, sesiones, historial, absorbente grueso/saturación, L-curve,
bootstrap, verosimilitud perfilada, CLI, mínimos y batch.
Fitbauer v4.16.2
Fitbauer v4.16.2
Auditoría sistemática de todo lo ajustable: se comprobó el camino completo
widget → estado → motor → resultado → widget para cada parámetro (calibración,
componentes, distribución y sesiones). Dos huecos encontrados y corregidos, del
mismo patrón que el del folding point en v4.16.1.
Corregido
sat_scaleno se volcaba tras el ajuste: con modelo de absorbente grueso y
la casilla «Fijo» desmarcada, el motor ajustaba la escala de saturación pero la
GUI no escribía el valor ajustado en el widget de calibración. Ahora sí.- Cargar sesión / deshacer ajuste no re-doblaba con el centro guardado: la
restauración doblaba los datos con el centro auto-detectado y ponía el centro de
la sesión solo en el widget — datos y widget quedaban incoherentes (relevante
tras guardar una sesión con centro ajustado). Ahora, si el centro de la sesión
difiere del auto-detectado, los datos se re-doblan con él.
Verificado sin cambios
- Modo discreto:
baseline,slope,vmax(«Ajustar velocidad», con recálculo
del eje), σ-Voigt («Ajustar σ»), todos los parámetros de componentes y los
targets de restricciones lineales se vuelcan correctamente a la GUI. - Modo distribución: δ/ΔEQ/Γ globales, pendientes de correlación δ(H)/ΔEQ(H),
parámetros de componentes nítidos y sus pesos, respetando las casillas «Fijo».
Tests de regresión nuevos en tests/test_qt_app.py; suite completa: 279 en verde.