示例#1
0
文件: mutatrix.cpp 项目: ekg/mutatrix
// generates a random allele frequency in 1/i scaled by alpha
// bounded by the number of copies at the locus
int random_allele_frequency(int copies, double alpha) {
    return min((int) floor(1 / genrand_real1() * alpha), copies);
}
void parameter_generation(double parameter[], double ref_parameter[])
{
  double unit_r, exponent;
  int i;

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[0] = 1.0e-6*pow(10.0, exponent);

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[1] = 1.0e-6*pow(10.0, exponent);

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[2] = 1.0e-6*pow(10.0, exponent);

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[3] = 1.0e-6*pow(10.0, exponent);


  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[12] = 1.0e-6*pow(10.0, exponent);

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[13] = 1.0e-6*pow(10.0, exponent);

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[14] = 1.0e-6*pow(10.0, exponent);

  /* [0,1] 単位乱数を用意する */
  unit_r = genrand_real1();
  /* [0,10] の乱数に変換 */
  exponent = 10.0*unit_r;
  /* ランダムな値をログスケールで発生させる */
  parameter[15] = 1.0e-6*pow(10.0, exponent);
}
示例#3
0
文件: mutatrix.cpp 项目: ekg/mutatrix
int expovariate(double lambda) {
    return -log(genrand_real1()) / lambda;
}
示例#4
0
文件: Mnoise.c 项目: 1014511134/src
int main (int argc, char* argv[])
{
    float mean, var, range, a, b, *dat;
    size_t nbuf, nsiz;
    int seed;
    size_t i;
    bool normal, rep;
    sf_file in, out;

    sf_init (argc,argv);
    in = sf_input ("in");
    out = sf_output("out");

    if (SF_FLOAT != sf_gettype(in)) sf_error("Need float input");

    if (!sf_getint("seed",&seed)) seed = time(NULL);
    /* random seed */
    init_genrand((unsigned long) seed);

    if (!sf_getbool("type",&normal)) normal=true;
    /* noise distribution, y: normal, n: uniform */
    if (!sf_getfloat("var",&var)) {
	/* noise variance */
	if (!sf_getfloat("range",&range)) {
	    /* noise range (default=1) */
	    a = 1.;
	} else {
	    a = normal? 2.*range/9. : 2.*range;
	}
    } else {
	a = normal? sqrtf(var): sqrtf(12*var);
    }

    if (!sf_getfloat("mean",&mean)) mean=0;
    /* noise mean */
    b = normal? mean: mean - 0.5*a;

    if (!sf_getbool("rep",&rep)) rep=false;
    /* if y, replace data with noise */

    nbuf = BUFSIZ/sizeof(float);
    dat = sf_floatalloc (nbuf);

    for (nsiz = sf_filesize(in); nsiz > 0; nsiz -= nbuf) {
	if (nbuf > nsiz) nbuf = nsiz;

	if (rep) {
	    if (normal) {
		for (i=0; i < nbuf; i++) {
		    dat[i] = a*sf_randn_one_bm() + b;
		}
	    } else {
		for (i=0; i < nbuf; i++) {
		    dat[i] = a*genrand_real1() + b;
		}
	    }
	} else {
	    sf_floatread(dat,nbuf,in);
	    
	    if (normal) {
		for (i=0; i < nbuf; i++) {
		    dat[i] += a*sf_randn_one_bm() + b;
		}
	    } else {
		for (i=0; i < nbuf; i++) {
		    dat[i] += a*genrand_real1() + b;
		}
	    }
	}

	sf_floatwrite(dat,nbuf,out);  
    }


    exit(0);
}