wrsamp incorrectly saves samps_per_frame when expanded=False
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Jupyter Notebook
- Estrellas
- 853
- Forks
- 322
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
When writing a record (header + signal file) using Record.wrsamp, the signal data may either be single-frequency (d_signal) or multi-frequency (e_d_signal).
If expanded=True, then wrsamp takes the data from e_d_signal (ignoring d_signal) and writes one or more multi-frequency signal files. In this case the record must also have a samps_per_frame attribute, and this attribute is written to the header file.
If expanded=False (default), then wrsamp takes the data from d_signal (ignoring e_d_signal) and writes one or more single-frequency signal files. In this case the samps_per_frame attribute is still written to the header file, which is completely incorrect.
Why would you have a Record that is single-frequency yet has samps_per_frame not equal to 1? Because that's what rdrecord does by default when you read a multi-frequency record.
So:
>>> import wfdb
>>> r = wfdb.rdrecord('43700001', pn_dir='mimicdb/437', sampto=10, physical=0)
>>> r.wrsamp()
>>> wfdb.rdrecord('43700001')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/benjamin/wfdb-python/wfdb/io/record.py", line 3542, in rdrecord
return_res=return_res)
File "/home/benjamin/wfdb-python/wfdb/io/_signal.py", line 1010, in _rd_segment
sampfrom, sampto, smooth_frames)[:, r_w_channel[fn]]
File "/home/benjamin/wfdb-python/wfdb/io/_signal.py", line 1151, in _rd_dat_signals
sig_data = _blocks_to_samples(sig_data, total_process_samples, fmt)
File "/home/benjamin/wfdb-python/wfdb/io/_signal.py", line 1460, in _blocks_to_samples
sig[0::2] = sig_data[0::3] + 256 * np.bitwise_and(sig_data[1::3], 0x0f)
ValueError: could not broadcast input array from shape (30) into shape (75)
(Arguably it's wrong for rdrecord to set samps_per_frame when smooth_frames=True, but changing that behavior would be hard to reconcile with rdheader, and would prevent implementing automatic frame-smoothing as I suggested in https://github.com/MIT-LCP/wfdb-python/pull/313#issuecomment-952033980)
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con Record.wrsamp y compara cómo las rutas expanded=True y expanded=False manejan samps_per_frame. Reproduce el problema usando rdrecord con el registro MIMIC mostrado y, después, inspecciona la ruta de lectura en wfdb/io/_signal.py. Se considera terminado cuando un registro de frecuencia única escrito con expanded=False puede volver a leerse sin la configuración de frame incorrecta, mientras el comportamiento de expanded=True sigue siendo válido.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- data
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100