/*
* Copyright (c) 2005–2012 Goethe Center for Scientific Computing - Simulation and Modelling (G-CSC Frankfurt)
* Copyright (c) 2012-2015 Goethe Center for Scientific Computing - Computational Neuroscience (G-CSC Frankfurt)
*
* This file is part of NeuGen.
*
* NeuGen is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* as published by the Free Software Foundation.
*
* see: http://opensource.org/licenses/LGPL-3.0
* file://path/to/NeuGen/LICENSE
*
* NeuGen is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* This version of NeuGen includes copyright notice and attribution requirements.
* According to the LGPL this information must be displayed even if you modify
* the source code of NeuGen. The copyright statement/attribution may not be removed.
*
* Attribution Requirements:
*
* If you create derived work you must do the following regarding copyright
* notice and author attribution.
*
* Add an additional notice, stating that you modified NeuGen. In addition
* you must cite the publications listed below. A suitable notice might read
* "NeuGen source code modified by YourName 2012".
*
* Note, that these requirements are in full accordance with the LGPL v3
* (see 7. Additional Terms, b).
*
* Publications:
*
* S. Wolf, S. Grein, G. Queisser. NeuGen 2.0 -
* Employing NeuGen 2.0 to automatically generate realistic
* morphologies of hippocapal neurons and neural networks in 3D.
* Neuroinformatics, 2013, 11(2), pp. 137-148, doi: 10.1007/s12021-012-9170-1
*
*
* J. P. Eberhard, A. Wanner, G. Wittum. NeuGen -
* A tool for the generation of realistic morphology
* of cortical neurons and neural networks in 3D.
* Neurocomputing, 70(1-3), pp. 327-343, doi: 10.1016/j.neucom.2006.01.028
*
*/
/*
* It contains several classes for random number generators
* and random vector generators on the unit sphere.
*
* @date 06.05.2004
*
*
* File: Randint.java
* Created on 05.10.2009, 15:05:27
*/
package org.neugen.utils;
import java.util.Random;
import org.apache.log4j.Logger;
/**
* Class for random numbers. The integer numbers are first equally distributed in the interval [0,max].
* There are also integer numbers which are equally distributed to -1 or 1.
*
* @author Jens Eberhard
*/
public class Randint {
//static final long serialVersionUID = -8689337816398534143L;
/** use to log messages */
protected final static Logger logger = Logger.getLogger(Randint.class.getName());
public long randx;
private Random rand = new Random();
/**
* Constructor. Initialize with a seed.
* @param s the seed.
*/
public Randint(long s) {
randx = s;
}
/**
* Re-initialize the seed.
* @param s the seed.
*/
public void seed(long s) {
randx = s;
}
public long abs(long x) {
return x & 0x7fffffff;
}
public static float max() {
return 2147483648.0f;
}
public long draw() {
//return rand.nextLong();
//return randx = randx * 1103515245 + 12345;
//System.out.println("randx: " + randx);
long tmp = (1103515245 * randx + 12345);
long m = (long) Math.pow(2, 31);
randx = (tmp % m);
//System.out.println("size of randomList: " + randomList.size());
//System.out.println("randx: " + randx);
return randx;
}
///< equally -1 or +1
public int pm_onedraw() {
return (abs(draw()) < max() / 2) ? -1 : 1;
}
}
/**
* Class for random numbers.
* The integer numbers are equally distributed in the interval [0,n].
*/
class Urand extends Frand {
private static final long serialVersionUID = -1180930069184524614L;
public long n;
/**
* Constructor. Initialize with a seed.
* @param s the seed.
* @param nn is n.
*/
public Urand(long nn, long s) {
super(s);
n = nn;
}
}
/**
* Class for random numbers. The integer numbers are exponentially distributed random numbers.
* There are also floating point numbers @see Erandfloat.
*/
class Erand extends Randint {
//static final long serialVersionUID = -1290820069184524614L;
public long mean;
/**
* Constructor. Initialize with a seed.
* @param s the seed.
* @param m the mean.
*/
public Erand(long m, long s) {
super(s);
mean = m;
}
}
/**
* Class for random numbers. The floating point numbers are exponentially distributed random numbers.
* There are also integer numbers @see Erand.
*/
class Erandfloat extends Randint {
public float mean;
/**
* Constructor. Initialize with a seed.
* @param s the seed.
* @param m the mean.
*/
public Erandfloat(float m, long s) {
super(s);
mean = m;
}
}