Changeset 7079


Ignore:
Timestamp:
10/15/10 21:15:59 (9 years ago)
Author:
aivar
Message:

Many changes to SLIMProcessor, mostly for automatic plugin.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/slim-plugin/src/main/java/loci/slim/SLIMProcessor.java

    r7059 r7079  
    3535package loci.slim; 
    3636 
    37 //TODO need to add fiji-lib.jar to maven repository: 
    38 //import fiji.util.gui.GenericDialogPlus; 
    39  
    4037import ij.IJ; 
    4138import ij.ImagePlus; 
     
    4946import ij.process.ImageProcessor; 
    5047 
     48import imagej.process.ImageUtils; 
     49 
    5150import imagej.io.ImageOpener; 
    5251 
     
    5857import java.util.ArrayList; 
    5958import java.util.HashMap; 
     59import java.util.HashSet; 
     60import java.util.List; 
    6061import java.util.Map; 
     62import java.util.Set; 
    6163import java.util.prefs.Preferences; 
    6264 
     
    6870import loci.slim.ui.IStartStopListener; 
    6971import loci.slim.ui.IUserInterfacePanel; 
    70 import loci.slim.ui.IUserInterfacePanelListener; 
    7172import loci.slim.ui.UserInterfacePanel; 
    7273import loci.common.DataTools; 
     
    8485import loci.formats.IFormatReader; 
    8586 
    86 import mpicbg.imglib.cursor.Cursor; 
    8787import mpicbg.imglib.cursor.LocalizableByDimCursor; 
    8888import mpicbg.imglib.image.Image; 
    89 //import mpicbg.imglib.Type; 
    9089import mpicbg.imglib.type.numeric.RealType; 
     90 
     91import net.java.sezpoz.Index; 
     92import net.java.sezpoz.IndexItem; 
    9193 
    9294/** 
     
    100102 */ 
    101103public class SLIMProcessor <T extends RealType<T>> implements MouseListener { 
    102 //public class SLIMProcessor <T extends Type> { 
    103104    private static final String X = "X"; 
    104105    private static final String Y = "Y"; 
     
    156157    private int m_minWave, m_waveStep; //, m_maxWave; 
    157158 
    158     // fit parameters 
    159    // private int m_numExp; 
    160    // private int m_binRadius; 
    161    // private int m_cutBins; 
    162    // private int m_maxPeak; 
    163  
    164  
    165159    public enum FitRegion { 
    166160        SUMMED, ROI, POINT, EACH 
     
    194188    private int m_debug = 0; 
    195189 
    196     /** 
    197      * Run thread for the plugin. 
    198      * 
    199      * @param arg 
    200      */ 
    201     public void run(String arg) { 
     190    public SLIMProcessor() { 
    202191        m_fitInProgress = false; 
    203192        m_fitted = false; 
    204  
    205         IUserInterfacePanel uiPanel = new UserInterfacePanel(true); 
    206         JPanel panel = uiPanel.getPanel(); 
    207          
    208         m_channel = 0; //TODO s/b a JSlider that controls current channel 
    209          
     193    } 
     194 
     195    public void processImage(Image<T> image) { 
    210196        boolean success = false; 
    211         if (showFileDialog(getFileFromPreferences())) { 
    212             if (m_fakeData) { 
    213                 fakeData(); 
    214                 success = true; 
    215             } 
    216             else { 
    217                 if (newLoadData(m_file)) { 
    218                     saveFileInPreferences(m_file); 
    219                     success = true; 
    220                 } 
    221             } 
    222         } 
    223          
    224         if (success) { 
     197System.out.println("processImage " + image); 
     198        if (newLoadData(image)) { 
    225199            // create a grayscale image from the data 
    226200            createGlobalGrayScale(); 
     
    237211            } 
    238212        } 
    239  
    240         // ask for which file to load 
    241        /* if (showFileDialog(getFileFromPreferences())) { 
    242             // load the file 
    243             if (loadFile(m_file)) { 
    244                 if (m_fakeData) { 
    245                     fakeData(); 
    246                 } 
    247                 else { 
    248                     saveFileInPreferences(m_file); 
    249                 } 
    250                 // show parameters from file 
    251                 if (showParamsDialog()) { 
    252                     if (!m_fakeData) { 
    253                         loadData(); 
    254                     } 
    255                     // create a grayscale image from the data 
    256                     createGlobalGrayScale(); 
    257                     while (true) { 
    258                         // ask what kind of fit 
    259                         if (!showFitDialog()) { 
    260                             break; 
    261                         } 
    262                         // ask for fit parameters 
    263                         if (!showFitParamsDialog()) { 
    264                             break; 
    265                         } 
    266                         fitData(); 
    267                     } 
    268                 } 
    269             } 
    270             else { 
    271                 //TODO shouldn't UI be separate? 
    272                 IJ.error("File Error", "Unable to load file."); 
    273             } 
    274         }*/ 
    275     } 
    276  
    277     /** 
    278      * Prompts for a .sdt file. 
    279      * 
    280      * @param defaultFile 
    281      * @return 
    282      */ 
    283     private boolean showFileDialog(String defaultFile) { 
    284         //TODO shouldn't UI be in separate class? 
    285         //TODO need to include fiji-lib.jar in repository: 
    286         //GenericDialogPlus dialog = new GenericDialogPlus("Load Data"); 
    287         GenericDialog dialog = new GenericDialog("Load Data"); 
    288         //TODO works with GenericDialogPlus, dialog.addFileField("File:", defaultFile, 24); 
    289         dialog.addStringField("File", defaultFile); 
    290         dialog.addCheckbox("Fake data", m_fakeData); 
    291         dialog.showDialog(); 
    292         if (dialog.wasCanceled()) { 
    293             return false; 
    294         } 
    295  
    296         m_file = dialog.getNextString(); 
    297         m_fakeData = dialog.getNextBoolean(); 
    298  
    299         return true; 
    300     } 
    301  
    302     private boolean newLoadData(String file) { 
    303         ImageOpener imageOpener = new ImageOpener(); 
    304         Image<T> image = null; 
    305         try { 
    306             image = imageOpener.openImage(file); 
    307         } 
    308         catch (Exception e) { 
    309             System.out.println("Error " + e.getMessage()); 
    310         } 
    311  
    312         int[] dimensions = image.getDimensions(); 
    313         Map map = dimensionMap(image.getName()); 
    314         Integer xIndex, yIndex, lifetimeIndex, channelIndex; 
    315         xIndex = (Integer) map.get(X); 
    316         yIndex = (Integer) map.get(Y); 
    317         lifetimeIndex = (Integer) map.get(LIFETIME); 
    318         if (null != xIndex && null != yIndex && null != lifetimeIndex) { 
    319             m_width = dimensions[xIndex]; 
    320             m_height = dimensions[yIndex]; 
    321             m_timeBins = dimensions[lifetimeIndex]; 
    322         } 
    323         else { 
    324             System.out.println("Can't find dimensions of .sdt Image " + image.getName()); 
    325             return false; 
    326         } 
    327         m_channels = 1; 
    328         channelIndex = (Integer) map.get(CHANNELS); 
    329         if (null != channelIndex) { 
    330             m_channels = dimensions[channelIndex]; 
    331         } 
    332  
    333         System.out.println("width " + m_width + " height " + m_height + " timeBins " + m_timeBins + " channels " + m_channels); 
     213        /* 
     214        m_width = ImageUtils.getWidth(image); 
     215        m_height = ImageUtils.getHeight(image); 
     216        m_timeBins = ImageUtils.getDimSize(image, FormatTools.LIFETIME, 0); 
     217         
    334218        m_data = new int[m_channels][m_height][m_width][m_timeBins]; 
    335         final LocalizableByDimCursor<T> cursor = image.createLocalizableByDimCursor(); 
     219        final LocalizableByDimCursor<?> cursor = image.createLocalizableByDimCursor(); 
    336220        int x, y, bin, channel; 
    337221        for (channel = 0; channel < m_channels; ++channel) { 
     
    354238            } 
    355239        } 
     240 
     241        // patch things up 
     242        m_timeRange = 10.0f; 
     243        m_minWave = 400; 
     244        m_waveStep = 10; 
     245        */ 
     246    } 
     247 
     248    /** 
     249     * Run method for the plugin.  Throws up a file dialog. 
     250     * 
     251     * @param arg 
     252     */ 
     253    public void process(String arg) { 
     254        //IUserInterfacePanel uiPanel = new UserInterfacePanel(true); 
     255        //JPanel panel = uiPanel.getPanel(); 
     256         
     257        m_channel = 0; //TODO s/b a JSlider that controls current channel 
     258         
     259        boolean success = false; 
     260        if (showFileDialog(getFileFromPreferences())) { 
     261            if (m_fakeData) { 
     262                fakeData(); 
     263                success = true; 
     264            } 
     265            else { 
     266                if (newLoadData(loadImage(m_file))) { 
     267                    saveFileInPreferences(m_file); 
     268                    success = true; 
     269                } 
     270            } 
     271        } 
     272         
     273        if (success) { 
     274            // create a grayscale image from the data 
     275            createGlobalGrayScale(); 
     276            while (true) { 
     277                // ask what kind fo fit 
     278                if (!showFitDialog()) { 
     279                    break; 
     280                } 
     281                // ask for fit parameters 
     282                if (!showFitParamsDialog()) { 
     283                    break; 
     284                } 
     285                fitData(); 
     286            } 
     287        } 
     288    } 
     289 
     290    /** 
     291     * Prompts for a .sdt file. 
     292     * 
     293     * @param defaultFile 
     294     * @return 
     295     */ 
     296    private boolean showFileDialog(String defaultFile) { 
     297        //TODO shouldn't UI be in separate class? 
     298        //TODO need to include fiji-lib.jar in repository: 
     299        //GenericDialogPlus dialog = new GenericDialogPlus("Load Data"); 
     300        GenericDialog dialog = new GenericDialog("Load Data"); 
     301        //TODO works with GenericDialogPlus, dialog.addFileField("File:", defaultFile, 24); 
     302        dialog.addStringField("File", defaultFile); 
     303        dialog.addCheckbox("Fake data", m_fakeData); 
     304        dialog.showDialog(); 
     305        if (dialog.wasCanceled()) { 
     306            return false; 
     307        } 
     308 
     309        m_file = dialog.getNextString(); 
     310        m_fakeData = dialog.getNextBoolean(); 
     311 
     312        return true; 
     313    } 
     314 
     315    private Image<T> loadImage(String file) { 
     316        ImageOpener imageOpener = new ImageOpener(); 
     317        Image<T> image = null; 
     318        try { 
     319            image = imageOpener.openImage(file); 
     320        } 
     321        catch (Exception e) { 
     322            System.out.println("Error " + e.getMessage()); 
     323        } 
     324        return image; 
     325    } 
     326    
     327    private boolean newLoadData(Image<T> image) { 
     328        int[] dimensions = image.getDimensions(); 
     329        System.out.println("dimensions size is " + dimensions.length); 
     330        /* 
     331        Map map = dimensionMap(image.getName()); 
     332        Integer xIndex, yIndex, lifetimeIndex, channelIndex; 
     333        xIndex = (Integer) map.get(X); 
     334        yIndex = (Integer) map.get(Y); 
     335        lifetimeIndex = (Integer) map.get(LIFETIME); 
     336        if (null != xIndex && null != yIndex && null != lifetimeIndex) { 
     337            m_width = dimensions[xIndex]; 
     338            m_height = dimensions[yIndex]; 
     339            m_timeBins = dimensions[lifetimeIndex]; 
     340        } 
     341        else { 
     342            System.out.println("Can't find dimensions of .sdt Image " + image.getName()); 
     343            return false; 
     344        } 
     345        m_channels = 1; 
     346        channelIndex = (Integer) map.get(CHANNELS); 
     347        if (null != channelIndex) { 
     348            System.out.println("Do have channel dimension"); 
     349            m_channels = dimensions[channelIndex]; 
     350        } 
     351        else System.out.println("Don't have channel dimension"); 
     352        */ 
     353        Integer xIndex, yIndex, lifetimeIndex, channelIndex; 
     354        m_width = ImageUtils.getWidth(image); 
     355        m_height = ImageUtils.getHeight(image); 
     356        m_channels = ImageUtils.getNChannels(image); 
     357        m_timeBins = ImageUtils.getDimSize(image, FormatTools.LIFETIME); 
     358        System.out.println("timeBins is " + m_timeBins); 
     359        int index = 0; 
     360        xIndex = index++; 
     361        yIndex = index++; 
     362        if (m_channels > 1) { 
     363            channelIndex = index++; 
     364        } 
     365        else { 
     366            channelIndex = null; 
     367        } 
     368        lifetimeIndex = index; 
     369 
     370        System.out.println("width " + m_width + " height " + m_height + " timeBins " + m_timeBins + " channels " + m_channels); 
     371        m_data = new int[m_channels][m_height][m_width][m_timeBins]; 
     372        final LocalizableByDimCursor<T> cursor = image.createLocalizableByDimCursor(); 
     373        int x, y, bin, channel; 
     374        for (channel = 0; channel < m_channels; ++channel) { 
     375            if (null != channelIndex) { 
     376                dimensions[channelIndex] = channel; 
     377            } 
     378            for (y = 0; y < m_height; ++y) { 
     379                dimensions[yIndex] = y; 
     380                for (x = 0; x < m_width; ++x) { 
     381                    dimensions[xIndex] = x; 
     382                    for (bin = 0; bin < m_timeBins; ++bin) { 
     383                        dimensions[lifetimeIndex] = bin; 
     384                        cursor.moveTo(dimensions); 
     385                        m_data[channel][y][x][bin] = (int) cursor.getType().getRealFloat(); 
     386                    } 
     387                } 
     388            } 
     389        } 
    356390        cursor.close(); 
    357391        // print out some useful information about the image 
     
    364398        // patch things up 
    365399        m_timeRange = 10.0f; 
     400        m_minWave = 400; 
     401        m_waveStep = 10; 
    366402 
    367403        return true; 
     
    371407     * This method parses a string of the format: 
    372408     * "Name [X Y Timebins]" and builds a map with 
    373      * the dimensions 'X', 'Y', and 'Timebins'. 
     409     * the dimensions 'X', 'Y', and 'Timebins' mapped 
     410     * to the dimension indices. 
    374411     * 
    375412     * Temporary kludge. 
    376413     */ 
    377     private Map dimensionMap(String name) { 
    378         Map map = new HashMap<String, Integer>(); 
     414    private Map<String, Integer> dimensionMap(String name) { 
     415        System.out.println("name is " + name); 
     416        Map<String, Integer> map = new HashMap<String, Integer>(); 
    379417        int startIndex = name.indexOf('[') + 1; 
    380418        int endIndex = name.indexOf(']'); 
Note: See TracChangeset for help on using the changeset viewer.