[Debian-med-packaging] Bug#1010001: libbiosig3: incorrect sample rate when reading IBW files

Andreas Tille andreas at an3as.eu
Mon Apr 25 13:44:11 BST 2022


Hi Alois,

thank you for your bug report with patch.  Unfortunately we can only
fix RC bugs in Debian stable.  I wonder whether you would consider it
a sensible solution to backport biosig 2.3.3 to debian-backports?

Kind regards

     Andreas.

Am Fri, Apr 22, 2022 at 08:44:08AM +0200 schrieb Alois Schlögl:
> Package: libbiosig3
> Version: 2.1.2-4
> Severity: normal
> Tags: patch
> X-Debbugs-Cc: alois.schloegl at gmail.com
> 
> Dear Maintainer,
> 
>    libbiosig supports reading many different data formats, including the IgorBinaryWaveform (IBW) format. 
>    When reading this data, an incorrect sampling rate (e.g. 25 Hz instead of 25 kHz)  
>    is returned, because the scaling of the scaling of physical units for the sampling interval 
>    milli-seconds is not correctly considered. This affacts all tools using libbiosig,
>    including biosig-tools, mexSLOAD and mexSOPEN in octave-biosig, sigviewer, stimfit,
>    and all other language bindings. 
> 
>    The attached patch fixes this bug, and fixes als uninitialized data in the event table. 
>    I suggest to backport this to the current stable release.  
> 
> 
> -- System Information:
> Debian Release: 11.3
>   APT prefers stable-security
>   APT policy: (500, 'stable-security'), (500, 'stable')
> Architecture: amd64 (x86_64)
> Foreign Architectures: i386
> 
> Kernel: Linux 5.10.0-13-amd64 (SMP w/8 CPU threads)
> Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US:en
> Shell: /bin/sh linked to /bin/dash
> Init: systemd (via /run/systemd/system)
> LSM: AppArmor: enabled
> 
> Versions of packages libbiosig3 depends on:
> ii  libc6              2.31-13+deb11u3
> ii  libdcmtk15         3.6.5-1
> ii  libgcc-s1          10.2.1-6
> ii  libstdc++6         10.2.1-6
> ii  libtinyxml2.6.2v5  2.6.2-4
> 
> libbiosig3 recommends no packages.
> 
> libbiosig3 suggests no packages.
> 
> -- no debconf information

> diff --git a/biosig4c++/t210/sopen_igor.c b/biosig4c++/t210/sopen_igor.c
> index deb82631..c4d1ced6 100644
> --- a/biosig4c++/t210/sopen_igor.c
> +++ b/biosig4c++/t210/sopen_igor.c
> @@ -383,7 +383,7 @@ void sopen_ibw_read (HDRTYPE* hdr) {
>  	int16_t type = 0;			// See types (e.g. NT_FP64) above. Zero for text waves.
>  
>  	hdr->NS = 1;
> -	hdr->SampleRate = 1;
> +	hdr->SampleRate = 1.0;
>  	hdr->CHANNEL = (CHANNEL_TYPE*) realloc(hdr->CHANNEL, hdr->NS * sizeof(CHANNEL_TYPE));
>  
>  	// Read some of the WaveHeader fields.
> @@ -407,7 +407,7 @@ void sopen_ibw_read (HDRTYPE* hdr) {
>  				hdr->CHANNEL[0].DigMin = (w2->botFullScale-w2->hsB) / w2->hsA;
>  */
>  #else
> -				hdr->SampleRate = 1.0 / w2->hsA;
> +				hdr->SampleRate /= w2->hsA * PhysDimScale(PhysDimCode(w2->xUnits));
>  				hdr->CHANNEL[0].PhysMax = w2->topFullScale;
>  				hdr->CHANNEL[0].PhysMin = w2->botFullScale;
>  #endif
> @@ -446,6 +446,8 @@ void sopen_ibw_read (HDRTYPE* hdr) {
>  					for (n = 0; n < hdr->EVENT.N; n++) {
>  						hdr->EVENT.TYP[n] = 0x7ffe;
>  						hdr->EVENT.POS[n] = (n+1)*w5->nDim[0];
> +						hdr->EVENT.DUR[n] = 0;
> +						hdr->EVENT.CHN[n] = 0;
>  					}
>  				}
>  
> @@ -458,7 +460,10 @@ void sopen_ibw_read (HDRTYPE* hdr) {
>  				hdr->CHANNEL[0].PhysDimCode = PhysDimCode(w5->dataUnits);
>  				hdr->CHANNEL[0].SPR = hdr->SPR = 1;
>  				hdr->NRec        = w5->npnts;
> -				hdr->SampleRate /= w5->sfA[0];
> +				hdr->SampleRate /= w5->sfA[0] * PhysDimScale(PhysDimCode(w5->dimUnits[0]));
> +
> +				if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i): %g.x+%g \n",__FILE__,__LINE__,w5->sfA[0],w5->sfB[0]);
> +				if (VERBOSE_LEVEL>7) fprintf(stdout,"%s (line %i): |%s|%s|%s|%s|\n",__FILE__,__LINE__,w5->dimUnits[0],w5->dimUnits[1],w5->dimUnits[2],w5->dimUnits[3]);
>  
>  #ifdef IGOROLD
>  				hdr->CHANNEL[0].Cal = 1.0;
> @@ -916,6 +921,8 @@ void sopen_itx_read (HDRTYPE* hdr) {
>  		hdr->EVENT.SampleRate = hdr->SampleRate;
>  		hdr->EVENT.POS = (uint32_t*) realloc(hdr->EVENT.POS, hdr->EVENT.N * sizeof(*hdr->EVENT.POS));
>  		hdr->EVENT.TYP = (uint16_t*) realloc(hdr->EVENT.TYP, hdr->EVENT.N * sizeof(*hdr->EVENT.TYP));
> +		hdr->EVENT.CHN = (uint16_t*) realloc(hdr->EVENT.TYP, hdr->EVENT.N * sizeof(*hdr->EVENT.TYP));
> +		hdr->EVENT.DUR = (uint32_t*) realloc(hdr->EVENT.POS, hdr->EVENT.N * sizeof(*hdr->EVENT.POS));
>  #if (BIOSIG_VERSION >= 10500)
>  		hdr->EVENT.TimeStamp = (gdf_time*)realloc(hdr->EVENT.TimeStamp, hdr->EVENT.N*sizeof(gdf_time));
>  #endif
> @@ -979,6 +986,8 @@ void sopen_itx_read (HDRTYPE* hdr) {
>  				if (sweepNo > 0 && chanNo==0) {
>  					hdr->EVENT.POS[sweepNo-1] = SPR;
>  					hdr->EVENT.TYP[sweepNo-1] = 0x7ffe;
> +					hdr->EVENT.DUR[sweepNo-1] = 0;
> +					hdr->EVENT.CHN[sweepNo-1] = 0;
>  #if (BIOSIG_VERSION >= 10500)
>  					hdr->EVENT.TimeStamp[sweepNo-1] = 0;
>  #endif

> _______________________________________________
> Debian-med-packaging mailing list
> Debian-med-packaging at alioth-lists.debian.net
> https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-med-packaging


-- 
http://fam-tille.de



More information about the Debian-med-packaging mailing list