AFVP - A Realistic Ventricular Rhythm Model During AF 1.0.0

File: <base>/afvp/utils1.c (2,279 bytes)

#ifndef _UTILS1_H_
#define _UTILS1_H_

#define PI (2.0*asin(1.0))
#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
#define MIN(a,b) (a < b ? a : b)
#define MAX(a,b) (a > b ? a : b)
#define NR_END 1
#define FREE_ARG char*

#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)

/*--------------------------------------------------------------------------*/
/*    UNIFORM DEVIATES                                                      */
/*--------------------------------------------------------------------------*/

double ran2(long *idum)
{
	int j;
	long k;
	static long iy=0;
	static long iv[NTAB];
	double temp;

	if (*idum <= 0 || !iy) {
		if (-(*idum) < 1) *idum=1;
		else *idum = -(*idum);
		for (j=NTAB+7;j>=0;j--) {
			k=(*idum)/IQ;
			*idum=IA*(*idum-k*IQ)-IR*k;
			if (*idum < 0) *idum += IM;
			if (j < NTAB) iv[j] = *idum;
		}
		iy=iv[0];
	}
	k=(*idum)/IQ;
	*idum=IA*(*idum-k*IQ)-IR*k;
	if (*idum < 0) *idum += IM;
	j=iy/NDIV;
	iy=iv[j];
	iv[j] = *idum;
	if ((temp=AM*iy) > RNMX) return RNMX;
	else return temp;
}


#define M1 	259200L
#define IA1 	7141L
#define IC1 	54773L
#define RM1	(1.0/M1)
#define M2	134456L
#define IA2	8121L
#define IC2	28411L
#define RM2 	(1.0/M2)
#define M3	243000L
#define IA3	4561L
#define IC3	51349L

double ran3(int *idum)
{
 static long ix1, ix2, ix3;
 static double r[98];
 double temp;
 static int iff=0;
 int j;

 if(*idum < 0 || iff == 0)
 {
  iff = 1;
  ix1 = (IC1 - (*idum)) % M1;
  ix1 = (IA1 * ix1 + IC1) % M1;
  ix2 = ix1 % M2;
  ix1 = (IA1 * ix1 + IC1) % M1;
  ix3 = ix1 % M3;
  for (j=1; j<=97; j++)
  {
   ix1 = (IA1 * ix1 + IC1) % M1;
   ix2 = (IA2 * ix2 + IC2) % M2;
   r[j] = (ix1 + ix2 * RM2) * RM1;
  }
  *idum = 1;
 }

 ix1 = (IA1 * ix1 + IC1) % M1;
 ix2 = (IA2 * ix2 + IC2) % M2;
 ix3 = (IA3 * ix3 + IC3) % M3;

 j = (int)(1 + ((97 * ix3)/M3));
 if (j > 97 || j < 1)
 {
  printf("ERROR: This cannot happen in ran3()\n"); exit(0);
 }

 temp = r[j];
 r[j] = (ix1 + ix2 * RM2) * RM1;

 return temp;

}



double gaussian(double mean,double sd,double r1,double r2)
{
 double next_int;

 next_int = mean + (sd * cos(2.0*PI*r1) * sqrt(-2*log(r2)));
 return next_int;
}

#endif // #ifndef _UTILS1_H_