public class MCMC extends java.lang.Object implements TimeDelayLocaliserModel
This is an advanaced and highly computationally intensive localisation algorithm based on MCMC methods. For a good description see; The Transit Light Curve (TLC) Project.I. Four Consecutive Transits of the Exoplanet XO-1b Matthew J. Holman1
Input variables are an ArrayList
Each row in the time delay ArrayList contains a group time delays calculated from N synchrnoised hydrophones in the corresponding ArrayList
Multiple MCMC chains can and should be run. These are executed on different threads to take advantage of multi core processing as much as possible. Even so a large number of chains or large number of observed delays can result in significant processing times.
Results are analysed for convergence and final locations packed into an MCMCTDResults class.
Input
Time Delays
Time Delay Errors
Hydrophone Array
SampaleRate
Constructor and Description |
---|
MCMC(java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> hydrophoneArray,
java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelays,
java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelayErrors,
MCMCParams settings,
float sampleRate,
double speedOfSound) |
MCMC(MCMCParams settings) |
Modifier and Type | Method and Description |
---|---|
static java.util.ArrayList<java.util.ArrayList<java.lang.Double>> |
addCrossCorError(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> tdErrors,
double timeError,
float sampleRate)
Adds the cross correlation error to the time delay errors array.
|
MCMCTDResults |
AnalyseMCMCResults(java.util.ArrayList<javax.vecmath.Point3f> chainJumps,
java.util.ArrayList<java.lang.Double> Chi2,
int analysisType)
Take an ArrayList of the Markov chain jumps and chi-squared values of each jump and calculate source position.
|
MCMCTDResults |
averageChains(java.util.ArrayList<MCMCTDResults> data) |
java.lang.Boolean |
changeSettings()
Change any settings in the algorithm.
|
static double |
chiSquared(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> observedTimeDelays,
java.util.ArrayList<java.util.ArrayList<java.lang.Double>> chainPosTimeDelays,
java.util.ArrayList<java.util.ArrayList<java.lang.Double>> errors)
Calculates the chi^2 value between observed data and theoretical delays calculated for a certain point in three dimensional space.
|
void |
clearResults()
Clear the results from memory.
|
java.util.ArrayList<MCMCTDResults> |
clusterAnalaysis(java.util.ArrayList<MCMCTDResults> meanArray)
Perform a cluster analysis of results.
|
static java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> |
compressMCMCResults(java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> jumps,
int compressSize)
Reduces the number of MCMC jumps in order to reduce memory usage when displaying probability distributions in Java3D or other visualise components.
|
java.util.ArrayList<java.util.ArrayList<java.lang.Double>> |
getChiJumps() |
java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> |
getHydrophonePos() |
java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> |
getJumps() |
javax.vecmath.Point3f |
getNewJumpPoint(javax.vecmath.Point3f ChainPos)
Calculates a random new Co-Ordinate, 3D Cartesian or Cylindrical space;
|
java.util.ArrayList<MCMCTDResults> |
getResults() |
java.util.ArrayList<MCMCTDResults> |
getResultsAllChains() |
MCMCParams |
getSettings() |
static java.util.ArrayList<java.util.ArrayList<java.lang.Double>> |
getTimeDelays(javax.vecmath.Point3f chainPos,
java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> hydrophonePos,
double speedOfSound)
Calculate the theoretical time delays if a source was located at point3d ChainPos.
|
java.util.ArrayList<javax.vecmath.Point3d> |
kMeansAnalysis(java.util.ArrayList<MCMCTDResults> meanArray)
Sometimes multiple chains will converge to different final distributions.
|
java.lang.Object[] |
mCMC(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> observedTimeDelays)
Simple Markov Chain Monte Carlo simulation.
|
double |
randomNGenerator() |
void |
runAlgorithm()
Runs the localisation algorithm an creates a results.
|
void |
setHydrophonePos(java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> hydrophonePos) |
void |
setSampleRate(float sampleRate) |
void |
setSoundSpeed(double speedOfSound) |
void |
setTimeDelays(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelays) |
void |
setTimeDelaysErrors(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelayErrors)
Note the sample rate must be set before this function.
|
void |
stop()
Stop the localiser.
|
public MCMC(java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> hydrophoneArray, java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelays, java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelayErrors, MCMCParams settings, float sampleRate, double speedOfSound)
public MCMC(MCMCParams settings)
public javax.vecmath.Point3f getNewJumpPoint(javax.vecmath.Point3f ChainPos)
ChainPos
- public double randomNGenerator()
public static double chiSquared(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> observedTimeDelays, java.util.ArrayList<java.util.ArrayList<java.lang.Double>> chainPosTimeDelays, java.util.ArrayList<java.util.ArrayList<java.lang.Double>> errors)
observedTimeDelays-
- the observed time delays.chainPosTimeDelays-
- the set of time delays to compare to the observed time delayserrors-
- the measurement errors in the observed time delays.public static java.util.ArrayList<java.util.ArrayList<java.lang.Double>> getTimeDelays(javax.vecmath.Point3f chainPos, java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> hydrophonePos, double speedOfSound)
ChainPos-
- theoretical position of the source.hydrophonePos-
- the positions of all the hydrophones within the array in Cartesian coOrdinates.speedOfSound-
- the speed of sound;public MCMCTDResults AnalyseMCMCResults(java.util.ArrayList<javax.vecmath.Point3f> chainJumps, java.util.ArrayList<java.lang.Double> Chi2, int analysisType)
chainJumps
- Chi2
- PercentagetoIgnore
- public java.lang.Object[] mCMC(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> observedTimeDelays)
observedTimeDelays
- public void runAlgorithm()
TimeDelayLocaliserModel
runAlgorithm
in interface TimeDelayLocaliserModel
public java.util.ArrayList<MCMCTDResults> clusterAnalaysis(java.util.ArrayList<MCMCTDResults> meanArray)
public java.util.ArrayList<javax.vecmath.Point3d> kMeansAnalysis(java.util.ArrayList<MCMCTDResults> meanArray)
meanArray-
- the mean values of all chains;public MCMCTDResults averageChains(java.util.ArrayList<MCMCTDResults> data)
public static java.util.ArrayList<java.util.ArrayList<java.lang.Double>> addCrossCorError(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> tdErrors, double timeError, float sampleRate)
tdErrors
- timeError
- sampleRate
- public void setTimeDelays(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelays)
public void setTimeDelaysErrors(java.util.ArrayList<java.util.ArrayList<java.lang.Double>> timeDelayErrors)
timeDelayErrors
- java.lang.Exception
public void setHydrophonePos(java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> hydrophonePos)
public java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> getHydrophonePos()
public java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> getJumps()
public java.util.ArrayList<java.util.ArrayList<java.lang.Double>> getChiJumps()
public java.util.ArrayList<MCMCTDResults> getResultsAllChains()
public java.util.ArrayList<MCMCTDResults> getResults()
public java.lang.Boolean changeSettings()
TimeDelayLocaliserModel
changeSettings
in interface TimeDelayLocaliserModel
public MCMCParams getSettings()
public void setSampleRate(float sampleRate)
public void setSoundSpeed(double speedOfSound)
public static java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> compressMCMCResults(java.util.ArrayList<java.util.ArrayList<javax.vecmath.Point3f>> jumps, int compressSize)
jumps
- ArrayList of chain jumps to compresscompressSize-
- the ideal number of points in the new array. Note: unless compressSize exactly divides the jump size then final arrays will be slightly larger than compressSizepublic void stop()
TimeDelayLocaliserModel
stop
in interface TimeDelayLocaliserModel
public void clearResults()