1 package com.github.celldynamics.quimp;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.IOException;
6
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
9
10 import com.github.celldynamics.quimp.BOAState.BOAp;
11 import com.github.celldynamics.quimp.filesystem.DataContainer;
12 import com.github.celldynamics.quimp.filesystem.FileExtensions;
13 import com.github.celldynamics.quimp.filesystem.versions.Converter170202;
14 import com.github.celldynamics.quimp.utils.QuimpToolsCollection;
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 public class QParamsQconf extends QParams {
41
42
43
44
45 static final Logger LOGGER = LoggerFactory.getLogger(QParamsQconf.class.getName());
46 private Serializer<DataContainer> loaded;
47 private File newParamFile;
48
49
50
51
52
53
54
55
56
57 private int currentHandler;
58
59
60
61
62 public QParamsQconf() {
63
64 }
65
66
67
68
69
70
71 public QParamsQconf(File p) {
72 super(p);
73 currentHandler = 0;
74 newParamFile = p;
75
76 super.setParamFile(new File(QuimpToolsCollection
77 .removeExtension(newParamFile.getParent() + File.separator + newParamFile.getName())
78 + "_" + currentHandler + FileExtensions.configFileExt));
79 paramFormat = QParams.NEW_QUIMP;
80 }
81
82
83
84
85
86
87 @Override
88 public File getParamFile() {
89 return newParamFile;
90 }
91
92
93
94
95
96
97
98 @Override
99 public String getFileName() {
100 return QuimpToolsCollection.removeExtension(newParamFile.getName());
101 }
102
103
104
105
106
107
108 public DataContainer getLoadedDataContainer() {
109 return loaded.obj;
110 }
111
112
113
114
115
116
117 public QuimpVersion getFileVersion() {
118 return loaded.timeStamp;
119 }
120
121
122
123
124
125
126
127
128 @Override
129 public void readParams() throws QuimpException {
130 Serializer<DataContainer> s = new Serializer<>(DataContainer.class, QuimP.TOOL_VERSION);
131 s.registerConverter(new Converter170202<>(QuimP.TOOL_VERSION));
132 try {
133
134 loaded = s.load(getParamFile());
135
136 BOA_.qState = getLoadedDataContainer().getBOAState();
137
138 if (getLoadedDataContainer().getBOAState() != null) {
139 getLoadedDataContainer().getBOAState().boap
140 .setOutputFileCore(newParamFile.getAbsolutePath());
141 }
142 } catch (Exception e) {
143 LOGGER.debug(e.getMessage(), e);
144 throw new QuimpException(
145 "Loading or processing of " + getParamFile().getAbsolutePath() + " failed", e);
146 }
147
148
149 if (!loaded.className.equals("DataContainer") || !loaded.timeStamp.getName().equals("QuimP")
150 && !loaded.timeStamp.getName().equals(QuimpToolsCollection.defNote)) {
151 LOGGER.debug("Not QuimP file?");
152 throw new QuimpException(
153 "Loaded file " + getParamFile().getAbsolutePath() + " is not QuimP file");
154 }
155 compatibilityLayer();
156 }
157
158
159
160
161
162
163 public void setActiveHandler(int num) {
164 currentHandler = num;
165 compatibilityLayer();
166 }
167
168
169
170
171
172
173 public int getActiveHandler() {
174 return currentHandler;
175 }
176
177
178
179
180
181
182
183
184
185
186 @Override
187 public void writeParams() throws IOException {
188 LOGGER.debug("New file format: Updating data " + getParamFile());
189 try {
190
191
192
193
194
195
196 Serializer<DataContainer> n;
197 n = new Serializer<>(getLoadedDataContainer(), QuimP.TOOL_VERSION);
198 if (getLoadedDataContainer().BOAState.boap.savePretty) {
199
200 n.setPretty();
201 }
202 n.save(getParamFile().getAbsolutePath());
203 n = null;
204 } catch (FileNotFoundException e) {
205 LOGGER.error("File " + getParamFile() + " could not be saved. " + e.getMessage());
206 LOGGER.debug(e.getMessage(), e);
207 throw new IOException("File " + getParamFile() + " could not be saved. ", e);
208 }
209 }
210
211
212
213
214
215
216
217
218
219
220
221 private void compatibilityLayer() {
222
223 super.setParamFile(new File(QuimpToolsCollection.removeExtension(newParamFile.getAbsolutePath())
224 + "_" + currentHandler + FileExtensions.configFileExt));
225 super.guessOtherFileNames();
226 super.setSnakeQP(getSnakeQP());
227 super.setStatsQP(getStatsQP());
228 if (getLoadedDataContainer().getBOAState() != null) {
229 super.setSegImageFile(getLoadedDataContainer().getBOAState().boap.getOrgFile());
230 super.setImageScale(getLoadedDataContainer().getBOAState().boap.getImageScale());
231 super.setFrameInterval(getLoadedDataContainer().getBOAState().boap.getImageFrameInterval());
232 super.nmax = getLoadedDataContainer().getBOAState().boap.NMAX;
233 super.deltaT = getLoadedDataContainer().getBOAState().boap.delta_t;
234 super.maxIterations = getLoadedDataContainer().getBOAState().segParam.max_iterations;
235 super.setNodeRes(getLoadedDataContainer().getBOAState().segParam.getNodeRes());
236 super.setBlowup(getLoadedDataContainer().getBOAState().segParam.blowup);
237 super.sampleTan = getLoadedDataContainer().getBOAState().segParam.sample_tan;
238 super.sampleNorm = getLoadedDataContainer().getBOAState().segParam.sample_norm;
239 super.velCrit = getLoadedDataContainer().getBOAState().segParam.vel_crit;
240 super.centralForce = getLoadedDataContainer().getBOAState().segParam.f_central;
241 super.contractForce = getLoadedDataContainer().getBOAState().segParam.f_contract;
242 super.frictionForce = getLoadedDataContainer().getBOAState().boap.f_friction;
243 super.imageForce = getLoadedDataContainer().getBOAState().segParam.f_image;
244 super.sensitivity = getLoadedDataContainer().getBOAState().boap.sensitivity;
245 super.finalShrink = getLoadedDataContainer().getBOAState().segParam.finalShrink;
246
247 super.setStartFrame(getLoadedDataContainer().getBOAState().nest.getHandler(currentHandler)
248 .getStartFrame());
249 super.setEndFrame(
250 getLoadedDataContainer().getBOAState().nest.getHandler(currentHandler).getEndFrame());
251 if (getLoadedDataContainer().getEcmmState() != null) {
252 super.setStartFrame(
253 getLoadedDataContainer().getEcmmState().oHs.get(currentHandler).getStartFrame());
254 super.setEndFrame(
255 getLoadedDataContainer().getEcmmState().oHs.get(currentHandler).getEndFrame());
256 }
257
258 if (getLoadedDataContainer().getANAState() != null) {
259 super.cortexWidth =
260 getLoadedDataContainer().getANAState().aS.get(currentHandler).getCortexWidthScale();
261
262
263
264 File[] lf = getLoadedDataContainer().getANAState().aS.get(currentHandler).fluTiffs;
265 this.fluTiffs = new File[lf.length];
266 fluTiffs[0] = new File(lf[0].getPath());
267 fluTiffs[1] = new File(lf[1].getPath());
268 fluTiffs[2] = new File(lf[2].getPath());
269 }
270
271 }
272 }
273
274
275
276
277
278
279
280 public void writeOldParams() throws IOException {
281 super.writeParams();
282 }
283
284
285
286
287
288
289
290
291
292
293 @Override
294 public int getStartFrame() {
295 return super.getStartFrame();
296 }
297
298
299
300
301
302
303
304
305
306
307 @Override
308 public void setStartFrame(int startFrame) {
309 super.setStartFrame(startFrame);
310 getLoadedDataContainer().getBOAState().nest.getHandler(currentHandler).startFrame = startFrame;
311 }
312
313
314
315
316
317
318
319
320
321 @Override
322 public int getEndFrame() {
323 return super.getEndFrame();
324 }
325
326
327
328
329
330
331
332
333
334 @Override
335 public void setEndFrame(int endFrame) {
336 super.setEndFrame(endFrame);
337 getLoadedDataContainer().getBOAState().nest.getHandler(currentHandler).endFrame = endFrame;
338 }
339
340
341
342
343
344
345 @Override
346 public double getImageScale() {
347 return super.getImageScale();
348 }
349
350
351
352
353
354
355 @Override
356 public void setImageScale(double imageScale) {
357 getLoadedDataContainer().getBOAState().boap.setImageScale(imageScale);
358 super.setImageScale(imageScale);
359 }
360
361
362
363
364
365
366 @Override
367 public double getFrameInterval() {
368 return super.getFrameInterval();
369 }
370
371
372
373
374
375
376 @Override
377 public void setFrameInterval(double frameInterval) {
378 getLoadedDataContainer().getBOAState().boap.setImageFrameInterval(frameInterval);
379 super.setFrameInterval(frameInterval);
380 }
381
382
383
384
385
386
387 public Nest getNest() {
388 if (getLoadedDataContainer() != null) {
389 return getLoadedDataContainer().getBOAState().nest;
390 } else {
391 return null;
392 }
393 }
394
395
396
397
398
399
400 @Override
401 public int getBlowup() {
402 return super.getBlowup();
403 }
404
405
406
407
408
409
410 @Override
411 public void setBlowup(int blowup) {
412 getLoadedDataContainer().getBOAState().segParam.blowup = blowup;
413 super.setBlowup(blowup);
414 }
415
416
417
418
419
420
421 @Override
422 public double getNodeRes() {
423 return super.getNodeRes();
424 }
425
426
427
428
429
430
431 @Override
432 public void setNodeRes(double nodeRes) {
433 getLoadedDataContainer().getBOAState().segParam.setNodeRes(nodeRes);
434 super.setNodeRes(nodeRes);
435 }
436
437
438
439
440
441
442
443
444
445 @Override
446 public File[] findParamFiles() {
447 return super.findParamFiles();
448 }
449
450
451
452
453
454
455
456
457 @Override
458 public File getSnakeQP() {
459 String path = getParamFile().getParent();
460 String file = QuimpToolsCollection.removeExtension(getParamFile().getName());
461 return new File(
462 path + File.separator + file + "_" + currentHandler + FileExtensions.snakeFileExt);
463 }
464
465
466
467
468
469
470
471
472 @Override
473 public File getStatsQP() {
474 String path = getParamFile().getParent();
475 String file = QuimpToolsCollection.removeExtension(getParamFile().getName());
476 return new File(
477 path + File.separator + file + "_" + currentHandler + FileExtensions.statsFileExt);
478 }
479
480 }