use of gdsc.smlm.tsf.TaggedSpotFile.Spot.Builder in project GDSC-SMLM by aherbert.
the class TSFPeakResultsWriter method addAll.
public void addAll(Collection<PeakResult> results) {
if (out == null)
return;
Spot[] spots = new Spot[20];
int count = 0;
Spot.Builder builder = Spot.newBuilder();
for (PeakResult result : results) {
final float[] params = result.params;
builder.setMolecule(id.incrementAndGet());
builder.setChannel(1);
builder.setFluorophoreType(1);
builder.setFrame(result.getFrame());
builder.setXPosition(result.origX);
builder.setYPosition(result.origY);
setBackground(builder, params[Gaussian2DFunction.BACKGROUND]);
builder.setIntensity(params[Gaussian2DFunction.SIGNAL]);
builder.setX(params[Gaussian2DFunction.X_POSITION]);
builder.setY(params[Gaussian2DFunction.Y_POSITION]);
setWidth(params, builder);
if (result.hasPrecision()) {
// Use the actual precision
float precision = (float) result.getPrecision();
builder.setXPrecision(precision);
builder.setYPrecision(precision);
} else if (canComputePrecision) {
// Compute precision
double s = (params[Gaussian2DFunction.X_SD] + params[Gaussian2DFunction.Y_SD]) * 0.5 * nmPerPixel;
float precision = (float) PeakResult.getPrecision(nmPerPixel, s, params[Gaussian2DFunction.SIGNAL] / gain, result.noise / gain, isEmCCD);
builder.setXPrecision(precision);
builder.setYPrecision(precision);
}
if (result.hasId())
builder.setCluster(result.getId());
else
builder.clearCluster();
builder.setError(result.error);
builder.setNoise(result.noise);
if (result.hasEndFrame())
builder.setEndFrame(result.getEndFrame());
else
builder.clearEndFrame();
builder.setOriginalValue(result.origValue);
addParamsStdDev(builder, result.paramsStdDev);
spots[count++] = builder.build();
// Flush the output to allow for very large input lists
if (count >= spots.length) {
writeResult(count, spots);
if (!isActive())
return;
count = 0;
}
}
writeResult(count, spots);
}
use of gdsc.smlm.tsf.TaggedSpotFile.Spot.Builder in project GDSC-SMLM by aherbert.
the class TSFPeakResultsWriter method add.
/*
* (non-Javadoc)
*
* @see gdsc.utils.fitting.results.PeakResults#add(int, int, int, float, double, float, float[], float[])
*/
public void add(int peak, int origX, int origY, float origValue, double error, float noise, float[] params, float[] paramsStdDev) {
if (out == null)
return;
Spot.Builder builder = Spot.newBuilder();
builder.setMolecule(id.incrementAndGet());
builder.setChannel(1);
builder.setFluorophoreType(1);
builder.setFrame(peak);
builder.setXPosition(origX);
builder.setYPosition(origY);
setBackground(builder, params[Gaussian2DFunction.BACKGROUND]);
builder.setIntensity(params[Gaussian2DFunction.SIGNAL]);
builder.setX(params[Gaussian2DFunction.X_POSITION]);
builder.setY(params[Gaussian2DFunction.Y_POSITION]);
setWidth(params, builder);
if (canComputePrecision) {
double s = (params[Gaussian2DFunction.X_SD] + params[Gaussian2DFunction.Y_SD]) * 0.5 * nmPerPixel;
float precision = (float) PeakResult.getPrecision(nmPerPixel, s, params[Gaussian2DFunction.SIGNAL] / gain, noise / gain, isEmCCD);
builder.setXPrecision(precision);
builder.setYPrecision(precision);
}
builder.setError(error);
builder.setNoise(noise);
builder.setOriginalValue(origValue);
if (paramsStdDev != null)
addNewParamsStdDev(builder, paramsStdDev);
Spot spot = builder.build();
writeResult(1, spot);
}
use of gdsc.smlm.tsf.TaggedSpotFile.Spot.Builder in project GDSC-SMLM by aherbert.
the class TSFPeakResultsWriter method add.
@Override
public void add(PeakResult result) {
final float[] params = result.params;
Spot.Builder builder = Spot.newBuilder();
builder.setMolecule(id.incrementAndGet());
builder.setChannel(1);
builder.setFluorophoreType(1);
builder.setFrame(result.getFrame());
builder.setXPosition(result.origX);
builder.setYPosition(result.origY);
setBackground(builder, params[Gaussian2DFunction.BACKGROUND]);
builder.setIntensity(params[Gaussian2DFunction.SIGNAL]);
builder.setX(params[Gaussian2DFunction.X_POSITION]);
builder.setY(params[Gaussian2DFunction.Y_POSITION]);
setWidth(params, builder);
if (result.hasPrecision()) {
// Use the actual precision
float precision = (float) result.getPrecision();
builder.setXPrecision(precision);
builder.setYPrecision(precision);
} else if (canComputePrecision) {
// Compute precision
double s = (params[Gaussian2DFunction.X_SD] + params[Gaussian2DFunction.Y_SD]) * 0.5 * nmPerPixel;
float precision = (float) PeakResult.getPrecision(nmPerPixel, s, params[Gaussian2DFunction.SIGNAL] / gain, result.noise / gain, isEmCCD);
builder.setXPrecision(precision);
builder.setYPrecision(precision);
}
if (result.hasId())
builder.setCluster(result.getId());
builder.setError(result.error);
builder.setNoise(result.noise);
if (result.hasEndFrame())
builder.setEndFrame(result.getEndFrame());
builder.setOriginalValue(result.origValue);
if (result.paramsStdDev != null)
addNewParamsStdDev(builder, result.paramsStdDev);
Spot spot = builder.build();
writeResult(1, spot);
}