wrsamp incorrectly saves samps_per_frame when expanded=False
Personne n'a encore pris cette issue.
- Langage dominant
- Jupyter Notebook
- Étoiles
- 853
- Forks
- 322
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
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)
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par Record.wrsamp et comparez la manière dont les chemins expanded=True et expanded=False gèrent samps_per_frame. Reproduisez le problème avec rdrecord sur l’enregistrement MIMIC indiqué, puis examinez le chemin de lecture dans wfdb/io/_signal.py. Le travail est considéré comme terminé lorsqu’un enregistrement à fréquence unique écrit avec expanded=False peut être relu sans le paramètre de frame incorrect, tandis que le comportement de expanded=True reste valide.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- data
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100