diff --git a/STORMVis/src/main/java/batchProcessing/startBatchProcessing.java b/STORMVis/src/main/java/batchProcessing/startBatchProcessing.java new file mode 100644 index 0000000..7a377c7 --- /dev/null +++ b/STORMVis/src/main/java/batchProcessing/startBatchProcessing.java @@ -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 allDataSets = new ArrayList(); + 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 sigmas = new ArrayList(Arrays.asList(1.f,4.f,8.f,12.f)); + ArrayList le = new ArrayList(Arrays.asList(1.f,5.f,10.f,50.f)); + int counter = 0; + for (int i =0; i getBorders(){ + DataSet thisDataSet = allDataSets.get(0); + ArrayList retList = new ArrayList(); + 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 borders; + int viewStatus = 0; + SimulationParameter(){ + + } +} \ No newline at end of file diff --git a/STORMVis/src/main/java/calc/Calc.java b/STORMVis/src/main/java/calc/Calc.java index d946468..7c3bdf5 100644 --- a/STORMVis/src/main/java/calc/Calc.java +++ b/STORMVis/src/main/java/calc/Calc.java @@ -642,7 +642,8 @@ public static ArrayList addFilteredPoints3D(ArrayList 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); @@ -657,8 +658,8 @@ public static ArrayList addFilteredPoints3D(ArrayList 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: @@ -683,7 +684,9 @@ public static ArrayList addFilteredPoints3D(ArrayList 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; @@ -722,13 +725,13 @@ public static ArrayList addFilteredPoints3D(ArrayList 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); @@ -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); @@ -746,7 +749,7 @@ else if (posZ < 0.75* zMax){ return (float) (3 - 4*posZ/zMax); } } - else { + else if (posZ0) { //green goes to zero red rises if (color == 0){ return (float) (4*posZ/zMax - 3); diff --git a/STORMVis/src/main/java/calc/StormPointFinder.java b/STORMVis/src/main/java/calc/StormPointFinder.java index 0b540c6..e1a5fcd 100644 --- a/STORMVis/src/main/java/calc/StormPointFinder.java +++ b/STORMVis/src/main/java/calc/StormPointFinder.java @@ -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)); } } @@ -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); diff --git a/STORMVis/src/main/java/inout/FileManager.java b/STORMVis/src/main/java/inout/FileManager.java index f1cd813..59df9cc 100644 --- a/STORMVis/src/main/java/inout/FileManager.java +++ b/STORMVis/src/main/java/inout/FileManager.java @@ -274,6 +274,8 @@ private static void writeLogFile(DataSet dataset, String basename,ArrayList