[no commit message]
This commit is contained in:
commit
c57cbc39c4
5
.hgignore
Normal file
5
.hgignore
Normal file
@ -0,0 +1,5 @@
|
||||
\.orig$
|
||||
\.orig\..*$
|
||||
\.chg\..*$
|
||||
\.rej$
|
||||
\.conflict\~$
|
37
nbactions.xml
Normal file
37
nbactions.xml
Normal file
@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<actions>
|
||||
<action>
|
||||
<actionName>run</actionName>
|
||||
<goals>
|
||||
<goal>process-classes</goal>
|
||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||
</goals>
|
||||
<properties>
|
||||
<exec.args>-ea -classpath %classpath hep.dataforge.trapping.Trapping D:\\PlayGround\\Trapping.res</exec.args>
|
||||
<exec.executable>java</exec.executable>
|
||||
</properties>
|
||||
</action>
|
||||
<action>
|
||||
<actionName>debug</actionName>
|
||||
<goals>
|
||||
<goal>process-classes</goal>
|
||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||
</goals>
|
||||
<properties>
|
||||
<exec.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -ea -classpath %classpath ${packageClassName} D:\\PlayGround\\Trapping.res</exec.args>
|
||||
<exec.executable>java</exec.executable>
|
||||
<jpda.listen>true</jpda.listen>
|
||||
</properties>
|
||||
</action>
|
||||
<action>
|
||||
<actionName>profile</actionName>
|
||||
<goals>
|
||||
<goal>process-classes</goal>
|
||||
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:exec</goal>
|
||||
</goals>
|
||||
<properties>
|
||||
<exec.args>${profiler.args} -ea -classpath %classpath ${packageClassName} D:\\PlayGround\\Trapping.res</exec.args>
|
||||
<exec.executable>${profiler.java}</exec.executable>
|
||||
</properties>
|
||||
</action>
|
||||
</actions>
|
57
pom.xml
Normal file
57
pom.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>hep.DataForge</groupId>
|
||||
<artifactId>Trapping</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Trapping</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<configuration>
|
||||
<source>1.7</source>
|
||||
<target>1.7</target>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-math3</artifactId>
|
||||
<version>3.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.java.dev.jna</groupId>
|
||||
<artifactId>jna</artifactId>
|
||||
<version>3.5.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
33
src/main/java/hep/dataforge/trapping/DoubleValue.java
Normal file
33
src/main/java/hep/dataforge/trapping/DoubleValue.java
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package hep.dataforge.trapping;
|
||||
|
||||
/**
|
||||
* Класс нужен исключительно чтобы сделать простой доступ к Сишным экспортам
|
||||
* @author Darksnake
|
||||
*/
|
||||
public class DoubleValue {
|
||||
private double value;
|
||||
|
||||
public DoubleValue(double value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @return the value
|
||||
*/
|
||||
public double getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param value the value to set
|
||||
*/
|
||||
public void setValue(double value) {
|
||||
this.value = value;
|
||||
}
|
||||
}
|
@ -0,0 +1,244 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package hep.dataforge.trapping;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
|
||||
import org.apache.commons.math3.geometry.euclidean.threed.SphericalCoordinates;
|
||||
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
|
||||
import org.apache.commons.math3.util.Precision;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Darksnake
|
||||
*/
|
||||
public class ElectronTrappingSimulator {
|
||||
|
||||
private TrappingRandomGenerator generator = new TrappingRandomGenerator();
|
||||
double Elow = 14000d;
|
||||
double thetaTransport = 24.107064 / 180 * Math.PI;
|
||||
double thetaPinch = 19.481097 / 180 * Math.PI;
|
||||
|
||||
public ElectronTrappingSimulator() {
|
||||
}
|
||||
|
||||
public static enum EndState {
|
||||
|
||||
ACCEPTED,//трэппинговый электрон попал в аксептанс
|
||||
REJECTED,//трэппинговый электрон вылетел через заднюю пробку
|
||||
LOWENERGY,//потерял слишком много энергии
|
||||
PASS,//электрон никогда не запирался и прошел напрямую, нужно для нормировки
|
||||
NONE
|
||||
}
|
||||
|
||||
public void setFields(double Bsource, double Btransport, double Bpinch) {
|
||||
this.thetaTransport = Math.asin(Math.sqrt(Bsource / Btransport));
|
||||
this.thetaPinch = Math.asin(Math.sqrt(Bsource / Bpinch));
|
||||
}
|
||||
|
||||
/**
|
||||
* Симулируем один пробег электрона от начального значения и до вылетания из
|
||||
* иточника или до того момента, как энергия становится меньше Elow.
|
||||
* Считаем, что за один проход источника происходит в среднем существенно
|
||||
* меньше одного столкновения, поэтому выход вперед или назад совершенно
|
||||
* симментричны.
|
||||
*
|
||||
*/
|
||||
public SimulaionResult simulateOne(double initEnergy, double initTheta) {
|
||||
assert initEnergy > 0;
|
||||
assert initTheta > 0 && initTheta < Math.PI / 2;
|
||||
|
||||
if (initTheta < this.thetaPinch) {
|
||||
if (generator.heads()) {
|
||||
return new SimulaionResult(EndState.PASS, initEnergy, initTheta, 0);
|
||||
} else {
|
||||
return new SimulaionResult(EndState.REJECTED, initEnergy, initTheta, 0);
|
||||
}
|
||||
} else if(initTheta<this.thetaTransport){
|
||||
return new SimulaionResult(EndState.REJECTED, initEnergy, initTheta, 0);
|
||||
}
|
||||
|
||||
|
||||
double E = initEnergy;
|
||||
double theta = initTheta;
|
||||
int colNum = 0;
|
||||
EndState state = EndState.NONE;
|
||||
|
||||
boolean stopflag = false;
|
||||
|
||||
while (!stopflag) {
|
||||
colNum++;
|
||||
DoubleValue dE = new DoubleValue(0);
|
||||
DoubleValue dTheta = new DoubleValue(0);
|
||||
|
||||
|
||||
//Вычисляем сечения и нормируем их на полное сечение
|
||||
// double sigmaTotal = Scatter.sigmaTotal(E);
|
||||
// double sigmaIon = Scatter.sigmaion(E) / sigmaTotal;
|
||||
// double sigmaEl = Scatter.sigmael(E) / sigmaTotal;
|
||||
// double sigmaexc = Scatter.sigmaexc(E) / sigmaTotal;
|
||||
double sigmaIon = Scatter.sigmaion(E);
|
||||
double sigmaEl = Scatter.sigmael(E);
|
||||
double sigmaexc = Scatter.sigmaexc(E);
|
||||
double sigmaTotal = sigmaEl + sigmaIon + sigmaexc;
|
||||
sigmaIon /= sigmaTotal;
|
||||
sigmaEl /= sigmaTotal;
|
||||
sigmaexc /= sigmaTotal;
|
||||
//проверяем нормировку
|
||||
assert Precision.equals(sigmaEl + sigmaexc + sigmaIon, 1, 1e-2);
|
||||
|
||||
double alpha = generator.next();
|
||||
|
||||
if (alpha > sigmaEl) {
|
||||
if (alpha > sigmaEl + sigmaexc) {
|
||||
//ionization case
|
||||
Scatter.randomion(E, dE, dTheta);
|
||||
} else {
|
||||
//excitation case
|
||||
Scatter.randomexc(E, dE, dTheta);
|
||||
}
|
||||
} else {
|
||||
// elastic
|
||||
Scatter.randomel(E, dE, dTheta);
|
||||
}
|
||||
|
||||
// if (alpha < sigmaEl) {
|
||||
// Scatter.randomel(E, dE, dTheta);
|
||||
// } else if (alpha < sigmaexc) {
|
||||
// Scatter.randomexc(E, dE, dTheta);
|
||||
// } else {
|
||||
// Scatter.randomion(E, dE, dTheta);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
//Обновляем значени угла и энергии независимо ни от чего
|
||||
E -= dE.getValue();
|
||||
//Изменение угла
|
||||
theta = addTheta(theta, dTheta.getValue() / 180 * Math.PI);
|
||||
//следим чтобы угол был от 0 до 90, если он перекинется через границу, считаем что электрон остается в потоке
|
||||
theta = normalizeTheta(theta);
|
||||
|
||||
if (theta < thetaPinch) {
|
||||
stopflag = true;
|
||||
if (generator.heads()) {
|
||||
//Учитываем тот факт, что электрон мог вылететь в правильный угол, но назад
|
||||
state = EndState.ACCEPTED;
|
||||
} else {
|
||||
state = EndState.REJECTED;
|
||||
}
|
||||
}
|
||||
|
||||
if (theta >= thetaPinch && theta <= thetaTransport) {
|
||||
//Вылет через заднюю пробку эквивалентен отражению от передней.
|
||||
//это верно при низких концентрациях
|
||||
stopflag = true;
|
||||
state = EndState.REJECTED;
|
||||
}
|
||||
|
||||
if (E < Elow) {
|
||||
//Если энергия стала слишком маленькой
|
||||
stopflag = true;
|
||||
state = EndState.LOWENERGY;
|
||||
}
|
||||
}
|
||||
return new SimulaionResult(state, E, theta, colNum);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Сложение вектора с учетом случайно распределения по фи
|
||||
*
|
||||
* @param theta
|
||||
* @param dTheta
|
||||
* @return
|
||||
*/
|
||||
double addTheta(double theta, double dTheta) {
|
||||
//Генерируем случайный фи
|
||||
double phi = generator.next() * 2 * Math.PI;
|
||||
//Создаем начальный вектор в сферических координатах
|
||||
SphericalCoordinates init = new SphericalCoordinates(1, 0, theta+dTheta);
|
||||
// Задаем вращение относительно оси, перпендикулярной исходному вектору
|
||||
SphericalCoordinates rotate = new SphericalCoordinates(1, 0, theta);
|
||||
// поворачиваем исходный вектора на dTheta
|
||||
Rotation rot = new Rotation(rotate.getCartesian(), phi);
|
||||
|
||||
Vector3D result = rot.applyTo(init.getCartesian());
|
||||
|
||||
// assert Vector3D.angle(result, rotate.getCartesian()) == dTheta;
|
||||
return Math.acos(result.getZ());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Симулируем пролет num электронов.
|
||||
*
|
||||
* @param E
|
||||
* @param num
|
||||
* @return
|
||||
*/
|
||||
public ArrayList<SimulaionResult> simulateAll(double E, int num) {
|
||||
ArrayList<SimulaionResult> res = new ArrayList();
|
||||
double theta;
|
||||
|
||||
System.out.printf("%nStarting sumulation with initial energy %g and %d electrons.%n%n", E, num);
|
||||
for (int i = 0; i < num; i++) {
|
||||
// System.out.printf("Running electron number %d", i);
|
||||
theta = this.getRandomTheta();
|
||||
res.add(this.simulateOne(E, theta));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private double normalizeTheta(double theta) {
|
||||
double res = theta;
|
||||
if (theta < 0) {
|
||||
res = -theta;
|
||||
}
|
||||
if (res >= 0 && res <= Math.PI / 2) {
|
||||
return res;
|
||||
} else if (res > Math.PI / 2 && res <= Math.PI) {
|
||||
return Math.PI - res;
|
||||
} else if (res > Math.PI && res <= Math.PI * 3 / 2) {
|
||||
return res - Math.PI;
|
||||
} else {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
||||
public double getRandomTheta() {
|
||||
double x = generator.next();
|
||||
return Math.acos(x);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Генерируем случайный угол таким образом, чтобы электрон заведомо был
|
||||
// * траппинговый
|
||||
// *
|
||||
// * @return
|
||||
// */
|
||||
// public double getRandomTrappedTheta() {
|
||||
// double res = 0;
|
||||
// while (res < this.thetaTransport) {
|
||||
// res = this.getRandomTheta();
|
||||
//
|
||||
// }
|
||||
// return res;
|
||||
// }
|
||||
public class SimulaionResult {
|
||||
|
||||
public SimulaionResult(EndState state, double E, double theta, int collisionNumber) {
|
||||
this.state = state;
|
||||
this.E = E;
|
||||
this.theta = theta;
|
||||
this.collisionNumber = collisionNumber;
|
||||
}
|
||||
public EndState state;
|
||||
public double E;
|
||||
public double theta;
|
||||
public int collisionNumber;
|
||||
}
|
||||
}
|
100
src/main/java/hep/dataforge/trapping/Scatter.java
Normal file
100
src/main/java/hep/dataforge/trapping/Scatter.java
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package hep.dataforge.trapping;
|
||||
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.ptr.DoubleByReference;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Darksnake
|
||||
*/
|
||||
public class Scatter {
|
||||
|
||||
public interface LibScatter extends Library {
|
||||
|
||||
public void randomel(double E, DoubleByReference Eloss, DoubleByReference theta);
|
||||
|
||||
public void randomexc(double E, DoubleByReference Eloss, DoubleByReference theta);
|
||||
|
||||
public void randomion(double E, DoubleByReference Eloss, DoubleByReference theta);
|
||||
|
||||
public double sigmael(double E);
|
||||
|
||||
public double sigmaexc(double E);
|
||||
|
||||
public double sigmaion(double E);
|
||||
}
|
||||
|
||||
/**
|
||||
* PENDING переделать, чтобы возвращались нормальные значения
|
||||
* @param E
|
||||
* @param Eloss
|
||||
* @param theta
|
||||
*/
|
||||
static void randomel(double E, DoubleValue Eloss, DoubleValue theta) {
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
|
||||
DoubleByReference ElossPointer = new DoubleByReference(Eloss.getValue());
|
||||
DoubleByReference thetaPointer = new DoubleByReference(theta.getValue());
|
||||
lib.randomel(E, ElossPointer, thetaPointer);
|
||||
Eloss.setValue(ElossPointer.getValue());
|
||||
theta.setValue(thetaPointer.getValue());
|
||||
|
||||
}
|
||||
|
||||
static void randomexc(double E, DoubleValue Eloss, DoubleValue theta) {
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
|
||||
DoubleByReference ElossPointer = new DoubleByReference(Eloss.getValue());
|
||||
DoubleByReference thetaPointer = new DoubleByReference(theta.getValue());
|
||||
lib.randomexc(E, ElossPointer, thetaPointer);
|
||||
Eloss.setValue(ElossPointer.getValue());
|
||||
theta.setValue(thetaPointer.getValue());
|
||||
|
||||
}
|
||||
|
||||
static void randomion(double E, DoubleValue Eloss, DoubleValue theta) {
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
|
||||
DoubleByReference ElossPointer = new DoubleByReference(Eloss.getValue());
|
||||
DoubleByReference thetaPointer = new DoubleByReference(theta.getValue());
|
||||
lib.randomion(E, ElossPointer, thetaPointer);
|
||||
Eloss.setValue(ElossPointer.getValue());
|
||||
theta.setValue(thetaPointer.getValue());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Все сечения в м^2
|
||||
* @param E
|
||||
* @return
|
||||
*/
|
||||
public static double sigmael(double E) {
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
return lib.sigmael(E);
|
||||
}
|
||||
|
||||
public static double sigmaexc(double E) {
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
return lib.sigmaexc(E);
|
||||
}
|
||||
|
||||
public static double sigmaion(double E) {
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
return lib.sigmaion(E);
|
||||
}
|
||||
|
||||
/**
|
||||
* Полное сечение с учетом квазиупругих столкновений
|
||||
* @param E
|
||||
* @return
|
||||
*/
|
||||
public static double sigmaTotal(double E){
|
||||
LibScatter lib = (LibScatter) Native.loadLibrary("libScatter", LibScatter.class);
|
||||
return lib.sigmael(E)+lib.sigmaexc(E)+lib.sigmaion(E);
|
||||
}
|
||||
}
|
93
src/main/java/hep/dataforge/trapping/Trapping.java
Normal file
93
src/main/java/hep/dataforge/trapping/Trapping.java
Normal file
@ -0,0 +1,93 @@
|
||||
package hep.dataforge.trapping;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Hello world!
|
||||
*
|
||||
*/
|
||||
public class Trapping {
|
||||
|
||||
public static void main(String[] args) throws FileNotFoundException {
|
||||
PrintWriter out = null;
|
||||
if ((args != null) && (args[0] != null)) {
|
||||
File file = new File(args[0]);
|
||||
out = new PrintWriter(file);
|
||||
}
|
||||
|
||||
double E = 18000d;
|
||||
System.out.println();
|
||||
// System.setProperty("jna.library.path", "d:\\projects\\Trapping\\target\\classes\\win32-amd64\\libScatter.dll");
|
||||
ElectronTrappingSimulator simulator = new ElectronTrappingSimulator();
|
||||
simulator.setFields(0.6, 3.6, 7.2);
|
||||
// ElectronTrappingSimulator.SimulaionResult result;
|
||||
|
||||
int accepted = 0;
|
||||
int pass = 0;
|
||||
int rejected = 0;
|
||||
int lowE = 0;
|
||||
|
||||
ArrayList<ElectronTrappingSimulator.SimulaionResult> results = simulator.simulateAll(E, 100000);
|
||||
|
||||
for (Iterator<ElectronTrappingSimulator.SimulaionResult> it = results.iterator(); it.hasNext();) {
|
||||
ElectronTrappingSimulator.SimulaionResult res = it.next();
|
||||
|
||||
if (out != null) {
|
||||
out.printf("%g\t%g\t%d\t%s%n", res.E, res.theta * 180 / Math.PI, res.collisionNumber, res.state.toString());
|
||||
}
|
||||
switch (res.state) {
|
||||
|
||||
case ACCEPTED:
|
||||
System.out.printf("%g\t%g\t%d\t%s%n", res.E, res.theta * 180 / Math.PI, res.collisionNumber, res.state.toString());
|
||||
accepted++;
|
||||
break;
|
||||
case LOWENERGY:
|
||||
lowE++;
|
||||
break;
|
||||
case PASS:
|
||||
pass++;
|
||||
break;
|
||||
case REJECTED:
|
||||
rejected++;
|
||||
break;
|
||||
case NONE:
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
||||
System.out.printf("%nThe total number of events is %d.%n%n", results.size());
|
||||
|
||||
System.out.printf("The spectrometer acceptance angle is %g.%n", simulator.thetaPinch * 180 / Math.PI);
|
||||
System.out.printf("The transport mirroring angle is %g.%n", simulator.thetaTransport * 180 / Math.PI);
|
||||
System.out.printf("The spectrometer acceptance angle is %g.%n", simulator.thetaPinch * 180 / Math.PI);
|
||||
System.out.printf("The starting energy is %g.%n", E);
|
||||
System.out.printf("The lower energy boundary is %g.%n%n", simulator.Elow);
|
||||
|
||||
System.out.printf("The total number of ACCEPTED events is %d.%n", accepted);
|
||||
System.out.printf("The total number of PASS events is %d.%n", pass);
|
||||
System.out.printf("The total number of REJECTED events is %d.%n", rejected);
|
||||
System.out.printf("The total number of LOWENERGY events is %d.%n%n", lowE);
|
||||
|
||||
if (out != null) {
|
||||
out.printf("The total number of events is %d.%n%n", results.size());
|
||||
|
||||
out.printf("The spectrometer acceptance angle is %g.%n", simulator.thetaPinch * 180 / Math.PI);
|
||||
out.printf("The transport mirroring angle is %g.%n", simulator.thetaTransport * 180 / Math.PI);
|
||||
out.printf("The spectrometer acceptance angle is %g.%n", simulator.thetaPinch * 180 / Math.PI);
|
||||
out.printf("The starting energy is %g.%n", E);
|
||||
out.printf("The lower energy boundary is %g.%n%n", simulator.Elow);
|
||||
|
||||
out.printf("The total number of ACCEPTED events is %d.%n", accepted);
|
||||
out.printf("The total number of PASS events is %d.%n", pass);
|
||||
out.printf("The total number of REJECTED events is %d.%n", rejected);
|
||||
out.printf("The total number of LOWENERGY events is %d.%n%n", lowE);
|
||||
out.close();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package hep.dataforge.trapping;
|
||||
|
||||
import org.apache.commons.math3.random.JDKRandomGenerator;
|
||||
import org.apache.commons.math3.random.RandomGenerator;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Darksnake
|
||||
*/
|
||||
public class TrappingRandomGenerator {
|
||||
RandomGenerator generator;
|
||||
|
||||
public TrappingRandomGenerator() {
|
||||
this.generator = new JDKRandomGenerator();
|
||||
}
|
||||
|
||||
public TrappingRandomGenerator(RandomGenerator generator) {
|
||||
this.generator = generator;
|
||||
}
|
||||
|
||||
/**
|
||||
* heads-tails random.
|
||||
* @return
|
||||
*/
|
||||
public boolean heads(){
|
||||
return generator.nextBoolean();
|
||||
}
|
||||
|
||||
/**
|
||||
* next uniform in [0;1]
|
||||
* @return
|
||||
*/
|
||||
public double next(){
|
||||
return generator.nextDouble();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
BIN
src/main/resources/win32-amd64/libScatter.dll
Normal file
BIN
src/main/resources/win32-amd64/libScatter.dll
Normal file
Binary file not shown.
BIN
src/main/resources/win32-x86/libScatter.dll
Normal file
BIN
src/main/resources/win32-x86/libScatter.dll
Normal file
Binary file not shown.
38
src/test/java/hep/dataforge/trapping/AppTest.java
Normal file
38
src/test/java/hep/dataforge/trapping/AppTest.java
Normal file
@ -0,0 +1,38 @@
|
||||
package hep.dataforge.trapping;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user