View Javadoc
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   * Plot selected map.
19   * 
20   * @author p.baniukiewicz
21   *
22   */
23  @SuppressWarnings("serial")
24  public class ActionPlotMap extends ProtAnalysisAbstractAction {
25  
26    private String map;
27  
28    /**
29     * Action for plotting maps.
30     * 
31     * <p>Plot new map under new name each time. Read {@link ProtAnalysisOptions#selActiveCellMap}
32     * 
33     * @param name name
34     * @param desc description
35     * @param ui reference to outer class
36     * @param map map code to plot: MOT, CONV, FLU
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     * (non-Javadoc)
45     * 
46     * @see
47     * com.github.celldynamics.quimp.plugin.protanalysis.ProtAnalysisAbstractAction#actionPerformed(
48     * java.awt.event.ActionEvent)
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    * Produce image from map.
111    * 
112    * <p>Map is unscaled in contrary to
113    * {@link STmap#map2ColorImagePlus(String, String, double[][], double, double)}
114    * 
115    * @param mapCell reference to STmap
116    * @param map map to plot
117    * @param uname name
118    * @return ImagePlus with unscaled image
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 }