Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 212 additions & 0 deletions STORMVis/src/main/java/batchProcessing/startBatchProcessing.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
package batchProcessing;

import gui.DataTypeDetector;
import gui.ParserWrapper;
import gui.DataTypeDetector.DataType;
import inout.FileManager;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

import javax.swing.JProgressBar;

import calc.Calc;
import calc.STORMCalculator;
import model.DataSet;
import model.LineDataSet;
import model.TriangleDataSet;

public class startBatchProcessing {
static List<DataSet> allDataSets = new ArrayList<DataSet>();
private static Random random;
private static String EXTENSIONIMAGEOUTPUT = ".tif";

public static void main(String[] args) {
File file = new File("C:\\Users\\herrmannsdoerfer\\Desktop\\OLD\\Models\\Microtubule-CrossingSiterescaled.wimp");
proceedFileImport(file);
SimulationParameter params = new SimulationParameter();
params.backgroundPerMicroMeterCubed = 50;
params.coupleSigmaIntensity = true;
params.detectionEfficiency = 100;
params.epitopeDensity = (float) 1.625;
params.fluorophoresPerLabel = 1;
params.kOff = 2000;
params.kOn = 1;
params.labelEpitopeDistance = 16;
params.labelingEfficiency = 10;
params.makeItReproducible = true;
params.MeanPhotonNumber = 3000;
params.radiusOfFilament = 10;
params.recordedFrames = 10000;
params.sigmaXY = 4;
params.sigmaZ = 8;
params.viewStatus = 1;
ArrayList<Float> sigmas = new ArrayList(Arrays.asList(1.f,4.f,8.f,12.f));
ArrayList<Float> le = new ArrayList(Arrays.asList(1.f,5.f,10.f,50.f));
int counter = 0;
for (int i =0; i<sigmas.size(); i++){
for (int j = 0;j< le.size(); j++){
counter += 1;
params.labelingEfficiency = le.get(j);
params.sigmaXY = sigmas.get(i);
params.sigmaZ = 2*sigmas.get(i);
calculate(params);
params.borders = getBorders();
exportData("c:\\testoutput\\",counter+"", params);
}
}



}

private static String getFilename(SimulationParameter params){
String filename;
filename = "sigXY"+(params.sigmaXY)+"sigZ"+params.sigmaZ+"frames"+params.recordedFrames+"radOfFil"+params.radiusOfFilament+
"meanPhotons"+params.MeanPhotonNumber+"reproducible"+params.makeItReproducible+"labEff"+params.labelingEfficiency+"labEpiDist"+params.labelEpitopeDistance+
"kon"+params.kOn+"koff"+params.kOff+"fluorPerLabel"+params.fluorophoresPerLabel+"epiDens"+params.epitopeDensity+
"detEff"+params.detectionEfficiency+"coupleSigmaInt"+params.coupleSigmaIntensity+"bgpermm3"+params.backgroundPerMicroMeterCubed;

return filename;
}

private static ArrayList<Float> getBorders(){
DataSet thisDataSet = allDataSets.get(0);
ArrayList<Float> retList = new ArrayList<Float>();
retList.add(Calc.min(thisDataSet.stormData,0));
retList.add(Calc.max(thisDataSet.stormData,0));
retList.add(Calc.min(thisDataSet.stormData,1));
retList.add(Calc.max(thisDataSet.stormData,1));
retList.add(Calc.min(thisDataSet.stormData,2));
retList.add(Calc.max(thisDataSet.stormData,2));

return retList;

}

private static void furtherProceedFileImport(DataSet data, DataType type){
if(data.dataType.equals(DataType.TRIANGLES)) {
System.out.println("Triangles parsed correctly.");
}
else if(type.equals(DataType.LINES)) {
System.out.println("Lines parsed correctly.");
}
else if(type.equals(DataType.PLY)){
System.out.println("PLY file parsed.");
}

allDataSets.add(data);

LineDataSet lines = (LineDataSet) allDataSets.get(allDataSets.size()-1);



}
private static void calculate(SimulationParameter params) {
setUpRandomNumberGenerator(params.makeItReproducible) ;
int currentRow= 0;
allDataSets.get(currentRow).getParameterSet().setPabs((float) (params.labelingEfficiency/100.));//Labeling efficiency
allDataSets.get(currentRow).getParameterSet().setAoa((float) ((90)/180*Math.PI));
allDataSets.get(currentRow).getParameterSet().setDeff((float) (params.detectionEfficiency/100)); //detection efficiency
allDataSets.get(currentRow).getParameterSet().setIlpmm3(params.backgroundPerMicroMeterCubed); //background per cubic micro meter
allDataSets.get(currentRow).getParameterSet().setLoa(params.labelEpitopeDistance); //label epitope distance
allDataSets.get(currentRow).getParameterSet().setFpab(params.fluorophoresPerLabel);//fluorophores per label
allDataSets.get(currentRow).getParameterSet().setKOn(params.kOn);
allDataSets.get(currentRow).getParameterSet().setKOff(params.kOff);
allDataSets.get(currentRow).getParameterSet().setBleachConst((float) 0);
allDataSets.get(currentRow).getParameterSet().setFrames(params.recordedFrames); // recorded frames
allDataSets.get(currentRow).getParameterSet().setSxy(params.sigmaXY);
allDataSets.get(currentRow).getParameterSet().setSz(params.sigmaZ);
allDataSets.get(currentRow).getParameterSet().setPsfwidth((float) 380);
allDataSets.get(currentRow).getParameterSet().setMeanPhotonNumber(params.MeanPhotonNumber);
if(allDataSets.get(currentRow).dataType == DataType.LINES) {
allDataSets.get(currentRow).getParameterSet().setBspnm(params.epitopeDensity);
allDataSets.get(currentRow).getParameterSet().setRof(params.radiusOfFilament);
}
else {
allDataSets.get(currentRow).getParameterSet().setBspsnm(params.epitopeDensity);
}
allDataSets.get(currentRow).getParameterSet().setMergedPSF(false);
allDataSets.get(currentRow).getParameterSet().setApplyBleaching(false);
allDataSets.get(currentRow).getParameterSet().setCoupleSigmaIntensity(params.coupleSigmaIntensity);
STORMCalculator calc = new STORMCalculator(allDataSets.get(currentRow), random);
calc = new STORMCalculator(allDataSets.get(currentRow),random);
//calc = new STORMCalculator(allDataSets.get(currentRow));
calc.execute();
while(!calc.isDone()){
try {
Thread.sleep(100);
//System.out.println(calc.isCancelled()+" "+calc.isDone());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// When calc has finished, grab the new dataset
//allDataSets.set(currentRow, calc.getCurrentDataSet());
//visualizeAllSelectedData();
}
private static void proceedFileImport(File file) {
System.out.println("Path: " + file.getAbsolutePath());
DataType type = DataType.UNKNOWN;
try {
type = DataTypeDetector.getDataType(file.getAbsolutePath());
System.out.println(type.toString());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
DataSet data = ParserWrapper.parseFileOfType(file.getAbsolutePath(), type);
data.setName(file.getName());
data.setProgressBar(new JProgressBar());
furtherProceedFileImport(data,type);
}

private static void setUpRandomNumberGenerator(boolean makeItReproducible) {
if (makeItReproducible){
random = new Random(2);
} else {
random = new Random(System.currentTimeMillis());
}
}

private static void exportData(String path, String name, SimulationParameter params){
if (!path.endsWith(EXTENSIONIMAGEOUTPUT)) {
path += EXTENSIONIMAGEOUTPUT;
}
if(name.endsWith(EXTENSIONIMAGEOUTPUT)){
name = name.substring(0, name.length()-4);
}
System.out.println("Path to write project: " + path);
System.out.println("project name: " + name);
FileManager.ExportToFile(allDataSets.get(0), path, params.viewStatus,params.borders);
}
}


class SimulationParameter{
float labelingEfficiency;
float detectionEfficiency;
float backgroundPerMicroMeterCubed;
float labelEpitopeDistance;
float fluorophoresPerLabel;
int recordedFrames;
float kOn;
float kOff;
float sigmaXY;
float sigmaZ;
int MeanPhotonNumber;
float radiusOfFilament;
float epitopeDensity;
boolean coupleSigmaIntensity;
boolean makeItReproducible;
ArrayList<Float> borders;
int viewStatus = 0;
SimulationParameter(){

}
}
19 changes: 11 additions & 8 deletions STORMVis/src/main/java/calc/Calc.java
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,8 @@ public static ArrayList<float[][]> addFilteredPoints3D(ArrayList<float[][]> colo
float yMax = dims.get(3);
float zMin = dims.get(4);
float zMax = dims.get(5);

zMax = borders.get(5) ;
zMin = borders.get(4) ;
zMax = zMax - zMin;

System.out.println("zMax: "+zMax+" zMin: "+zMin);
Expand All @@ -657,8 +658,8 @@ public static ArrayList<float[][]> addFilteredPoints3D(ArrayList<float[][]> colo
double posZ = 0;
switch (mode){
case 1:
posX = (sl[0]-xMin)/pixelsize; //position of current localization
posY = (sl[1]-yMin)/pixelsize;
posX = (sl[0]+5000)/pixelsize; //position of current localization
posY = (sl[1]+5000)/pixelsize;
posZ = (sl[2])-zMin;
break;
case 2:
Expand All @@ -683,7 +684,9 @@ public static ArrayList<float[][]> addFilteredPoints3D(ArrayList<float[][]> colo
try{

float weight = (float) (factor*intensity* Math.exp(factor2*(Math.pow((k-posX),2)+Math.pow((l-posY),2))));
redChannel[k][l] = redChannel[k][l] + getColor(posZ,zMax,0) * weight;
float tmp = getColor(posZ,zMax,0) * weight;
//System.out.println(tmp);
redChannel[k][l] = redChannel[k][l] + tmp;
greenChannel[k][l] = greenChannel[k][l] +getColor(posZ,zMax,1) * weight;
blueChannel[k][l] = blueChannel[k][l] +getColor(posZ,zMax,2) * weight;

Expand Down Expand Up @@ -722,13 +725,13 @@ public static ArrayList<float[][]> addFilteredPoints3D(ArrayList<float[][]> colo

private static float getColor(double posZ, float zMax, int color) {

if (posZ < 0.25* zMax){
if (posZ < 0.25* zMax&& posZ>0){
//blue rises from 0 to 1
if (color == 2){
return (float) (4*posZ / zMax);
}
}
else if (posZ < 0.5* zMax){
else if (posZ < 0.5* zMax&& posZ>0){
//green rises from 0 to 1 blue stays one
if (color == 1){
return (float)(4*posZ/zMax - 1);
Expand All @@ -737,7 +740,7 @@ else if (posZ < 0.5* zMax){
return (float) 1;//(2 - 4*posZ/zMax) ;
}
}
else if (posZ < 0.75* zMax){
else if (posZ < 0.75* zMax&& posZ>0){
//green stays one, blue goes to zero again
if (color == 1){
return (float) 1;//(4*posZ/zMax - 2);
Expand All @@ -746,7 +749,7 @@ else if (posZ < 0.75* zMax){
return (float) (3 - 4*posZ/zMax);
}
}
else {
else if (posZ<zMax&&posZ>0) {
//green goes to zero red rises
if (color == 0){
return (float) (4*posZ/zMax - 3);
Expand Down
24 changes: 12 additions & 12 deletions STORMVis/src/main/java/calc/StormPointFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,14 +115,14 @@ private static float[][] createStormPoints(float[][] listEndPoints, ParameterSet
frame[k1] = (int) (calc.random.nextDouble()*frames);
idxList.add(k1);
if (ps.getCoupleSigmaIntensity()){
x[k1] = (float) (listEndPointsTranspose[0][idxArray.get(k1).intValue()] + calc.random.nextFloat()*(sxy/Math.sqrt(intensity[k1]/meanPhotonNumber)));
y[k1] = (float) (listEndPointsTranspose[1][idxArray.get(k1).intValue()] + calc.random.nextFloat()*(sxy/Math.sqrt(intensity[k1]/meanPhotonNumber)));
z[k1] = (float) (listEndPointsTranspose[2][idxArray.get(k1).intValue()] + calc.random.nextFloat()*(sz/Math.sqrt(intensity[k1]/meanPhotonNumber)));
x[k1] = (float) (listEndPointsTranspose[0][idxArray.get(k1).intValue()] + calc.random.nextGaussian()*(sxy/Math.sqrt(intensity[k1]/meanPhotonNumber)));
y[k1] = (float) (listEndPointsTranspose[1][idxArray.get(k1).intValue()] + calc.random.nextGaussian()*(sxy/Math.sqrt(intensity[k1]/meanPhotonNumber)));
z[k1] = (float) (listEndPointsTranspose[2][idxArray.get(k1).intValue()] + calc.random.nextGaussian()*(sz/Math.sqrt(intensity[k1]/meanPhotonNumber)));
}
else {
x[k1] = (listEndPointsTranspose[0][idxArray.get(k1).intValue()] + calc.random.nextFloat()*(sxy));
y[k1] = (listEndPointsTranspose[1][idxArray.get(k1).intValue()] + calc.random.nextFloat()*(sxy));
z[k1] = (listEndPointsTranspose[2][idxArray.get(k1).intValue()] + calc.random.nextFloat()*(sz));
x[k1] = (float) (listEndPointsTranspose[0][idxArray.get(k1).intValue()] + calc.random.nextGaussian()*(sxy));
y[k1] = (float) (listEndPointsTranspose[1][idxArray.get(k1).intValue()] + calc.random.nextGaussian()*(sxy));
z[k1] = (float) (listEndPointsTranspose[2][idxArray.get(k1).intValue()] + calc.random.nextGaussian()*(sz));
}

}
Expand Down Expand Up @@ -193,14 +193,14 @@ private static float[][] createStormPointsRealisticBleaching(float[][] listEndPo
if (blinkingTest <= (kOn/kOff)){
float intensity = intensities.get((int) (calc.random.nextDouble()*intensities.size()-1));
if (ps.getCoupleSigmaIntensity()){
x = (float) (listEndPoints[i][0] + calc.random.nextFloat()*(sxy/Math.sqrt(intensity/meanPhotonNumber)));
y = (float) (listEndPoints[i][1] + calc.random.nextFloat()*(sxy/Math.sqrt(intensity/meanPhotonNumber)));
z = (float) (listEndPoints[i][2] + calc.random.nextFloat()*(sz/Math.sqrt(intensity/meanPhotonNumber)));
x = (float) (listEndPoints[i][0] + calc.random.nextGaussian()*(sxy/Math.sqrt(intensity/meanPhotonNumber)));
y = (float) (listEndPoints[i][1] + calc.random.nextGaussian()*(sxy/Math.sqrt(intensity/meanPhotonNumber)));
z = (float) (listEndPoints[i][2] + calc.random.nextGaussian()*(sz/Math.sqrt(intensity/meanPhotonNumber)));
}
else {
x = (float) (listEndPoints[i][0] + calc.random.nextFloat()*(sxy));
y = (float) (listEndPoints[i][1] + calc.random.nextFloat()*(sxy));
z = (float) (listEndPoints[i][2] + calc.random.nextFloat()*(sz));
x = (float) (listEndPoints[i][0] + calc.random.nextGaussian()*(sxy));
y = (float) (listEndPoints[i][1] + calc.random.nextGaussian()*(sxy));
z = (float) (listEndPoints[i][2] + calc.random.nextGaussian()*(sz));
}
float tmpLoc[] = {x,y,z,frame,intensity};
allStormPoints.add(tmpLoc);
Expand Down
17 changes: 16 additions & 1 deletion STORMVis/src/main/java/inout/FileManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,8 @@ private static void writeLogFile(DataSet dataset, String basename,ArrayList<Floa
writer.close();
} catch (IOException e) {e.printStackTrace();}
}



private static void writeLocalizationsToFile(float[][] stormData, String basename) {
try{
Expand All @@ -287,4 +289,17 @@ private static void writeLocalizationsToFile(float[][] stormData, String basenam
writer.close();
} catch (IOException e) {e.printStackTrace();}
}
}
private static void writeLocalizationsToFileForFRC(float[][] stormData, String basename) {
try{
double minx = Calc.min(stormData, 0);
double miny = Calc.min(stormData, 1);
FileWriter writer = new FileWriter(basename+"LocalizationsForFRCAnalysis.txt");
for (int i = 0; i<stormData.length; i++){
float[] tmp = stormData[i];
writer.append((tmp[0]-minx)/106.6666+" "+(tmp[1]-miny)/106.6666+" "+tmp[3]+"\n");
}
writer.flush();
writer.close();
} catch (IOException e) {e.printStackTrace();}
}
}
6 changes: 3 additions & 3 deletions STORMVis/src/main/java/parsing/TriangleObjectParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,9 @@ private void importPly() throws IOException {
words.add(line.substring(pos,line.length()));
}
Float[] vertex = new Float[3];
vertex[0] = Float.valueOf(words.get(0));
vertex[1] = Float.valueOf(words.get(1));
vertex[2] = Float.valueOf(words.get(2));
vertex[0] = (float) (Float.valueOf(words.get(0))*1.62);
vertex[1] = (float) (Float.valueOf(words.get(1))*1.62);
vertex[2] = (float) (Float.valueOf(words.get(2))*1.62);
listVertices.add(vertex);
}
else{//create triangles
Expand Down