EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  <19951996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  <19951996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: bug in recCompress.c
From: [email protected] (Marty Kraimer)
Date: Mon, 13 Feb 1995 12:57:04 -0600
> From [email protected] Mon Feb 13 07:38 CST 1995
> Date: Mon, 13 Feb 95 14:39:42 GMT
> From: "F. Gougnaud" <[email protected]>
> To: [email protected]
> Subject: bug in recCompress.c
> Content-Type> : > text> 
> Content-Length: 1100
> 
> 	Hi,
> 
> 	
> 
> 	I have corrected a bug in the recCompress.c file in EPICS release 3.11.
> 
> The AVERAGE algorithm doesn't work when the N field is greater than 1 (!)
> because the routine array_average() doesn't update the INX record's field.
> 
> The routine must be modified like this:
> 
> 	...
> 	/* do we need to calculate the result */
> 	inx++;
> 	if (pcompress->n<=0) pcompress->n=1;
> 	n = pcompress->n;
> 	pcompress->inx = inx;    <---- add this line
> 	if (inx<n) return(1);
> 	if (n>1) {
> 		pcompress->inx = 0;    <---- and this line
> 		psum = (double *)pcompress->sptr;
> 		multiplier = 1.0/((double)n);
> 		for (i = 0; i < nuse; i++, psum++)
> 	    		*psum = *psum * multiplier;
> 	}
> 	put_value(pcompress,pcompress->sptr,nuse);
> 	return(0);
> 
You must have an older version of epics. The current version, which appears
to be equivalent to your suggested changes has the code:


> A static int array_average(pcompress,psource,no_elements)
struct compressRecord	*pcompress;
double			*psource;
long			no_elements;
{
	long	i;
	long	nnow;
	long	nsam=pcompress->nsam;
	double	*psum;
	double	multiplier;
	long	inx=pcompress->inx;
	struct dbAddr *pdbAddr = (struct dbAddr *)(pcompress->inp.value.db_link.pdbAddr);
	long	ninp=pdbAddr->no_elements;
	long	nuse,n;

	nuse = nsam;
	if(nuse>ninp) nuse = ninp;
	nnow=nuse;
	if(nnow>no_elements) nnow=no_elements;
	psum = (double *)pcompress->sptr;

	/* add in the new waveform */
	if (inx == 0){
		for (i = 0; i < nnow; i++)
		    *psum++ = *psource++;
		for(i=nnow; i<nuse; i++) *psum++ = 0;
	}else{
		for (i = 0; i < nnow; i++)
		    *psum++ += *psource++;
	}

	/* do we need to calculate the result */
	inx++;
	if(pcompress->n<=0)pcompress->n=1;
	n = pcompress->n;
	if (inx<n) {
		pcompress->inx = inx;
		return(1);
	}
	if(n>1) {
		psum = (double *)pcompress->sptr;
		multiplier = 1.0/((double)n);
		for (i = 0; i < nuse; i++, psum++)
	    		*psum = *psum * multiplier;
	}
	put_value(pcompress,pcompress->sptr,nuse);
	pcompress->inx = 0;
	return(0);
}
>suggestion for the compress record type:
> 
> in 3.11 it's not possible to modify the N field of a compress record from
> an application. For that, the N field definition in the compressRecord.ascii
> file need to be changed like this:
> 
> (before)    "N to 1 Compression"     N    SPC_NOMOD  DBF_ULONG   ...
> (after)     "N to 1 Compression"     N    SPC_RESET  DBF_ULONG   ...
> 
> 
> 	Yves Lussignol.
> 

Good suggestion. I am making this change to this field and also to ALG.

Marty

Navigate by Date:
Prev: Re: EPICS on the Alpha 415
Next: Re: EPICS on the Alpha watson
Index: 1994  <19951996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: bug in recCompress.c Rozelle Wright
Next: loading ascii database records Alan K Biocca
Index: 1994  <19951996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·