1 package com.github.celldynamics.quimp.plugin.protanalysis;
2
3 import java.awt.event.ActionEvent;
4
5 import com.github.celldynamics.quimp.QParamsQconf;
6 import com.github.celldynamics.quimp.filesystem.OutlinesCollection;
7 import com.github.celldynamics.quimp.plugin.qanalysis.STmap;
8 import com.github.celldynamics.quimp.utils.QuimPArrayUtils;
9
10 import ij.IJ;
11 import ij.ImagePlus;
12 import ij.WindowManager;
13 import ij.process.ByteProcessor;
14 import ij.process.FloatProcessor;
15 import ij.process.ImageProcessor;
16
17
18
19
20
21
22
23 @SuppressWarnings("serial")
24 public class ActionPlotMap extends ProtAnalysisAbstractAction {
25
26 private String map;
27
28
29
30
31
32
33
34
35
36
37
38 public ActionPlotMap(String name, String desc, ProtAnalysisUi ui, String map) {
39 super(name, desc, ui);
40 this.map = map;
41 }
42
43
44
45
46
47
48
49
50 @Override
51 public void actionPerformed(ActionEvent e) {
52 int modifiers = e.getModifiers();
53 int h = options.selActiveCellMap.getValue();
54 STmap[] stMap =
55 ((QParamsQconf) model.getQconfLoader().getQp()).getLoadedDataContainer().getQState();
56 STmap mapCell = stMap[h];
57 OutlinesCollection ohs =
58 ((QParamsQconf) model.getQconfLoader().getQp()).getLoadedDataContainer().getEcmmState();
59 ImagePlus mm;
60 switch (map) {
61 case "MOT": {
62 String uname = WindowManager.makeUniqueName("motility_map");
63 if ((modifiers & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK) {
64 mm = getUnscaledMap(mapCell, mapCell.getMotMap(), uname);
65 } else {
66 mm = mapCell.map2ColorImagePlus(uname, "rwb", mapCell.getMotMap(),
67 ohs.oHs.get(h).migLimits[0], ohs.oHs.get(h).migLimits[1]);
68 }
69 mm.setTitle(WindowManager.makeUniqueName("MotilityMap_cell_" + h));
70 mm.show();
71 break;
72 }
73 case "CONV": {
74 String uname = WindowManager.makeUniqueName("convexity_map");
75 if ((modifiers & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK) {
76 mm = getUnscaledMap(mapCell, mapCell.getConvMap(), uname);
77 } else {
78 mm = mapCell.map2ColorImagePlus(uname, "rbb", mapCell.getConvMap(),
79 ohs.oHs.get(h).curvLimits[0], ohs.oHs.get(h).curvLimits[1]);
80 }
81 mm.setTitle(WindowManager.makeUniqueName("ConvexityMap_cell_" + h));
82 mm.show();
83 break;
84 }
85 case "FLU":
86 for (int i = 0; i < 3; i++) {
87 if (!mapCell.getFluMaps()[i].isEnabled()) {
88 continue;
89 }
90 String uname = WindowManager.makeUniqueName(
91 "fluo_map_cell_" + h + "_fluoCH" + mapCell.getFluMaps()[i].getChannel());
92 if ((modifiers & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK) {
93 mm = getUnscaledMap(mapCell, mapCell.getFluMaps()[i].getMap(), uname);
94 mm.show();
95 } else {
96 mm = mapCell.map2ImagePlus(uname, new ByteProcessor(mapCell.getRes(), mapCell.getT(),
97 mapCell.getFluMaps()[i].getColours()));
98 mm.show();
99 IJ.doCommand("Red");
100 }
101 }
102 break;
103 default:
104 throw new RuntimeException("Wrong map code!");
105 }
106
107 }
108
109
110
111
112
113
114
115
116
117
118
119
120 static ImagePlus getUnscaledMap(STmap mapCell, double[][] map, String uname) {
121 ImageProcessor imp =
122 new FloatProcessor(QuimPArrayUtils.double2dfloat(mapCell.getMotMap())).rotateRight();
123 imp.flipHorizontal();
124 ImagePlus mm = mapCell.map2ImagePlus(uname, imp);
125 return mm;
126 }
127 }