-
Notifications
You must be signed in to change notification settings - Fork 0
/
MyIO.java
155 lines (146 loc) · 6.11 KB
/
MyIO.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package QuickPALM;
import ij.*;
import ij.measure.*;
import ij.plugin.*;
import ij.plugin.filter.*;
import ij.plugin.frame.*;
import ij.process.*;
import ij.gui.*;
import ij.measure.CurveFitter.*;
import java.awt.*;
import ij.io.*;
import java.lang.*;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
class MyIO
{
void loadTransformation(String filename, ResultsTable res)
{
try {
String line;
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
if (!br.readLine().equals(" Z-Step Raw Width minus Heigh Calibration Width minus Height"))
{
IJ.error("File does not seam to be an Astigmatism calibration file");
return;
}
//java.lang.String [] elements = new java.lang.String [3];
java.lang.String [] elements;
int counter = 1;
res.reset();
while ((line = br.readLine()) != null)
{
IJ.showStatus("Loading element "+counter+"... sit back and relax.");
counter++;
line.trim();
elements = line.split("\t");
res.incrementCounter();
res.addValue("Z-Step", Double.parseDouble(elements[1]));
res.addValue("Raw Width minus Heigh", Double.parseDouble(elements[2]));
res.addValue("Calibration Width minus Height", Double.parseDouble(elements[3]));
}
fr.close();
}
catch (FileNotFoundException e) {
IJ.error("File not found exception" + e);
return;
} catch (IOException e) {
IJ.error("IOException exception" + e);
return;
} catch (NumberFormatException e) {
IJ.error("Number format exception" + e);
return;
}
}
void loadParticleResults(String filename, ResultsTable res)
{
try {
String line;
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
java.lang.String header = " Intensity X (px) Y (px) X (nm) Y (nm) Z (nm) Left-Width(px) Right-Width (px) Up-Height (px) Down-Height (px) X Symmetry (%) Y Symmetry (%) Width minus Height (px) Frame Number";
java.lang.String firstline = br.readLine();
if (!firstline.contains("X (px) Y (px) X (nm) Y (nm) Z (nm)"))
{
IJ.error("File does not seam to be a Particles Table file");
IJ.log("Found header: "+firstline);
IJ.log("Expecting: "+header);
return;
}
res.reset();
int counter = 1;
java.util.concurrent.locks.Lock lock = new java.util.concurrent.locks.ReentrantLock();
ThreadedLoader tloader = new ThreadedLoader();
//java.lang.String txt = fr.read();
while ((line = br.readLine()) != null)
{
tloader = new ThreadedLoader();
tloader.mysetup(res, lock, line);
tloader.start();
IJ.showStatus("Loading particle "+counter+"... sit back and relax.");
counter++;
}
try {tloader.join();}
catch (Exception e) {IJ.error(""+e);}
if (res.getCounter()<5000000)
{
IJ.showStatus("Creating particle table, this should take a few seconds...");
res.show("Results");
}
else
IJ.showMessage("Warning", "Results table has too many particles, they will not be shown but the data still exists within it\nyou can still use all the plugin functionality or save table changes though the 'Save Particle Table' command.");
fr.close();
IJ.showStatus("Done loading table...");
}
catch (FileNotFoundException e) {
IJ.error("File not found exception" + e);
return;
} catch (IOException e) {
IJ.error("IOException exception" + e);
return;
} catch (NumberFormatException e) {
IJ.error("Number format exception" + e);
return;
}
}
}
class ThreadedLoader extends Thread
{
java.util.concurrent.locks.Lock lock;
ResultsTable res;
java.lang.String line;
java.lang.String [] elements;
public void mysetup(ResultsTable res_, java.util.concurrent.locks.Lock lock_, java.lang.String line_)
{
res=res_;
lock=lock_;
line=line_;
}
public void run()
{
line.trim();
elements = line.split("\t");
if (elements.length<14) return;
lock.lock();
res.incrementCounter();
res.addValue("Intensity", Double.parseDouble(elements[1]));
res.addValue("X (px)", Double.parseDouble(elements[2]));
res.addValue("Y (px)", Double.parseDouble(elements[3]));
res.addValue("X (nm)", Double.parseDouble(elements[4]));
res.addValue("Y (nm)", Double.parseDouble(elements[5]));
res.addValue("Z (nm)", Double.parseDouble(elements[6]));
res.addValue("Left-StdDev (px)", Double.parseDouble(elements[7]));
res.addValue("Right-StdDev (px)", Double.parseDouble(elements[8]));
res.addValue("Up-StdDev (px)", Double.parseDouble(elements[9]));
res.addValue("Down-StdDev (px)", Double.parseDouble(elements[10]));
res.addValue("X Symmetry (%)", Double.parseDouble(elements[11]));
res.addValue("Y Symmetry (%)", Double.parseDouble(elements[12]));
res.addValue("Width minus Height (px)", Double.parseDouble(elements[13]));
res.addValue("Frame Number", Double.parseDouble(elements[14]));
lock.unlock();
}
}