Example #1
0
 def test_05_07_get_pixel_data_3d(self):
     svc = ij2.get_dataset_service(self.context)
     result = svc.create1(np.array([10, 7, 3]), 
                          "MyDataset", 
                          [ij2.Axes().Y, ij2.Axes().X, ij2.Axes().CHANNEL],
                          16, False, False)
     imgplus = result.getImgPlus()
     
     script = """
     ra = imgplus.randomAccess();
     for (x=0;x<imgplus.dimension(0);x++) {
         ra.setPosition(x, 0);
         for (y=0;y<imgplus.dimension(1);y++) {
             ra.setPosition(y, 1);
             for (c=0;c<imgplus.dimension(2);c++) {
                 ra.setPosition(c, 2);
                 ra.get().set(x + y * 10 + c * 100);
             }
         }
     }
     """
     J.run_script(script, dict(imgplus=imgplus))
     pixel_data = ij2.get_pixel_data(imgplus)
     self.assertSequenceEqual(pixel_data.shape, [10, 7, 3])
     i, j, c = np.mgrid[0:10, 0:7, 0:3]
     np.testing.assert_array_equal(pixel_data, i + j*10 + c*100)
def write_image(pathname, pixels, pixel_type, c=0, z=0, t=0, size_c=1, size_z=1, size_t=1, channel_names=None):
    """Write the image using bioformats
    
        filename - save to this filename
        
        pixels - the image to save
        
        pixel_type - save using this pixel type
        
        c - the image's channel index
        
        z - the image's z index
        
        t - the image's t index
        
        sizeC - # of channels in the stack
        
        sizeZ - # of z stacks
        
        sizeT - # of timepoints in the stack
        
        channel_names - names of the channels (make up names if not present
        """
    omexml = ome.OMEXML()
    omexml.image(0).Name = os.path.split(pathname)[1]
    p = omexml.image(0).Pixels
    assert isinstance(p, ome.OMEXML.Pixels)
    p.SizeX = pixels.shape[1]
    p.SizeY = pixels.shape[0]
    p.SizeC = size_c
    p.SizeT = size_t
    p.SizeZ = size_z
    p.DimensionOrder = ome.DO_XYCZT
    p.PixelType = pixel_type
    index = c + size_c * z + size_c * size_z * t
    if pixels.ndim == 3:
        p.SizeC = pixels.shape[2]
        p.Channel(0).SamplesPerPixel = pixels.shape[2]
        omexml.structured_annotations.add_original_metadata(ome.OM_SAMPLES_PER_PIXEL, str(pixels.shape[2]))
    elif size_c > 1:
        p.channel_count = size_c

    pixel_buffer = convert_pixels_to_buffer(pixels, pixel_type)
    xml = omexml.to_xml()
    script = """
    importClass(Packages.loci.formats.services.OMEXMLService,
                Packages.loci.common.services.ServiceFactory,
                Packages.loci.formats.ImageWriter);
    var service = new ServiceFactory().getInstance(OMEXMLService);
    var metadata = service.createOMEXMLMetadata(xml);
    var writer = new ImageWriter();
    writer.setMetadataRetrieve(metadata);
    writer.setId(path);
    writer.setInterleaved(true);
    writer.saveBytes(index, buffer);
    writer.close();
    """
    jutil.run_script(script, dict(path=pathname, xml=xml, index=index, buffer=pixel_buffer))
Example #3
0
def get_context():
    '''Get the ImageJ context
    
    This is a singleton ImageJ context. We need a singleton for now because
    of http://trac.imagej.net/ticket/1413
    This is an imagej.ImageJ, which at one point was the context.
    Call self.getContext() to get the org.scijava.Context which may be 
    what you want.
    '''
    global the_imagej_context
    if the_imagej_context is None:
        the_imagej_context = create_context(None)
        #
        # We have to turn off the updater and tell ImageJ to never call
        # System.exit. We have to tell ImageJ that we read the readme file.
        #
        # To Do: programatically turn off the updater and take control of
        #        the quitting and exit process.
        #
        max_value = J.run_script(
            "java.lang.Long.toString(java.lang.Long.MAX_VALUE);")
        prefs = [("imagej.updater.core.UpToDate", "latestNag", max_value),
                 ("imagej.core.options.OptionsMisc", "exitWhenQuitting",
                  "false")]
        plugin_service = the_imagej_context.getService(
            "org.scijava.plugin.PluginService")
        ui_interface = J.class_for_name("imagej.ui.UserInterface")
        script = """
        var result = java.lang.System.getProperty('ij.ui');
        if (! result) {
            var infos = pluginService.getPluginsOfType(ui_interface);
            if (infos.size() > 0) {
                result = infos.get(0).getClassName();
            }
        }
        result;"""
        ui_class = J.run_script(
            script,
            dict(pluginService=plugin_service, ui_interface=ui_interface))
        first_run = "firstRun-" + the_imagej_context.getVersion()
        if ui_class:
            prefs.append((ui_class, first_run, "false"))
        for class_name, key, value in prefs:
            c = J.class_for_name(class_name)
            J.static_call(
                "imagej/util/Prefs", "put",
                "(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V", c,
                key, value)
    return the_imagej_context
Example #4
0
def get_context():
    '''Get the ImageJ context
    
    This is a singleton ImageJ context. We need a singleton for now because
    of http://trac.imagej.net/ticket/1413
    This is an imagej.ImageJ, which at one point was the context.
    Call self.getContext() to get the org.scijava.Context which may be 
    what you want.
    '''
    global the_imagej_context
    if the_imagej_context is None:
        the_imagej_context = create_context(None)
        #
        # We have to turn off the updater and tell ImageJ to never call
        # System.exit. We have to tell ImageJ that we read the readme file.
        #
        # To Do: programatically turn off the updater and take control of
        #        the quitting and exit process.
        #
        max_value = J.run_script(
            "java.lang.Long.toString(java.lang.Long.MAX_VALUE);")
        prefs = [
            ("imagej.updater.core.UpToDate", "latestNag", max_value),
            ("imagej.core.options.OptionsMisc", "exitWhenQuitting", "false")]
        plugin_service = the_imagej_context.getService(
            "org.scijava.plugin.PluginService")
        ui_interface = J.class_for_name("imagej.ui.UserInterface")
        script = """
        var result = java.lang.System.getProperty('ij.ui');
        if (! result) {
            var infos = pluginService.getPluginsOfType(ui_interface);
            if (infos.size() > 0) {
                result = infos.get(0).getClassName();
            }
        }
        result;"""
        ui_class = J.run_script(script, dict(pluginService=plugin_service,
                                             ui_interface=ui_interface))
        first_run = "firstRun-"+the_imagej_context.getVersion()
        if ui_class:
            prefs.append((ui_class, first_run, "false"))
        for class_name, key, value in prefs:
            c = J.class_for_name(class_name)
            J.static_call(
                "imagej/util/Prefs", "put",
                "(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V",
                c, key, value)
    return the_imagej_context
Example #5
0
 def test_06_03_future_main(self):
     c = J.run_script("""
     new java.util.concurrent.Callable() {
        call: function() { return 2+2; }};""")
     result = J.execute_future_in_main_thread(
         J.make_future_task(c, fn_post_process=J.unwrap_javascript))
     self.assertEqual(result, 4)
Example #6
0
def get_commands():
    """Return a list of the available command strings"""
    script = """
    new java.util.concurrent.Callable() {
        call: function() {
           importClass(Packages.ij.Menus, Packages.ij.IJ);
           var hashtable=Menus.getCommands();
           if (hashtable==null) {
               IJ.run("pleaseignorethis");
               hashtable = Menus.getCommands();
           }
           return hashtable;
        }
    };
    """
    c = J.run_script(script, class_loader=get_user_loader())
    hashtable = J.execute_callable_in_main_thread(c)
    keys = J.call(hashtable, "keys", "()Ljava/util/Enumeration;")
    keys = J.jenumeration_to_string_list(keys)
    values = J.call(hashtable, "values", "()Ljava/util/Collection;")
    values = [J.to_string(x) for x in J.iterate_java(J.call(values, "iterator", "()Ljava/util/Iterator;"))]

    class CommandList(list):
        def __init__(self):
            super(CommandList, self).__init__(keys)
            self.values = values

    return CommandList()
Example #7
0
def set_omero_credentials(omero_server, omero_port, omero_username, omero_password):
    '''Set the credentials to be used to connect to the Omero server
    
    omero_server - DNS name of the server

    omero_port - use this port to connect to the server

    omero_username - log on as this user

    omero_password - log on using this password
    
    The session ID is valid after this is called. An exception is thrown
    if the login fails. omero_logout() can be called to log out.
    '''
    global __omero_server
    global __omero_username
    global __omero_session_id
    global __omero_port
    __omero_server = omero_server
    __omero_port = omero_port
    __omero_username = omero_username
    script = """
    var client = Packages.omero.client(server, port);
    var serverFactory = client.createSession(user, password);
    client.getSessionId();
    """
    __omero_session_id = jutil.run_script(script, dict(
        server = __omero_server,
        port = __omero_port,
        user = __omero_username,
        password = omero_password))
    return __omero_session_id
Example #8
0
 def test_06_03_future_main(self):
     c = J.run_script("""
     new java.util.concurrent.Callable() {
        call: function() { return 2+2; }};""")
     result = J.execute_future_in_main_thread(
         J.make_future_task(c, fn_post_process=J.unwrap_javascript))
     self.assertEqual(result, 4)
Example #9
0
def set_omero_credentials(omero_server, omero_port, omero_username,
                          omero_password):
    '''Set the credentials to be used to connect to the Omero server
    
    omero_server - DNS name of the server

    omero_port - use this port to connect to the server

    omero_username - log on as this user

    omero_password - log on using this password
    
    The session ID is valid after this is called. An exception is thrown
    if the login fails. omero_logout() can be called to log out.
    '''
    global __omero_server
    global __omero_username
    global __omero_session_id
    global __omero_port
    __omero_server = omero_server
    __omero_port = omero_port
    __omero_username = omero_username
    script = """
    var client = Packages.omero.client(server, port);
    var serverFactory = client.createSession(user, password);
    client.getSessionId();
    """
    __omero_session_id = jutil.run_script(
        script,
        dict(server=__omero_server,
             port=__omero_port,
             user=__omero_username,
             password=omero_password))
    return __omero_session_id
Example #10
0
    def on_show_imagej(self):
        """Show the ImageJ user interface
        
        This method shows the ImageJ user interface when the user presses
        the Show ImageJ button.
        """
        logger.debug("Starting ImageJ UI")
        ui_service = ij2.get_ui_service(get_context())
        if ui_service is not None and not ui_service.isVisible():
            if cpprefs.get_headless():
                # Silence the auto-updater in the headless preferences
                #
                ij2.update_never_remind()

            ui_service.createUI()
        elif ui_service is not None:
            ui = ui_service.getDefaultUI()
            J.execute_runnable_in_main_thread(
                J.run_script(
                    """new java.lang.Runnable() {
                run: function() { 
                    ui.getApplicationFrame().setVisible(true); }}""",
                    dict(ui=ui),
                ),
                True,
            )
Example #11
0
 def test_07_04_make_future_task_from_callable(self):
     call_able = J.run_script("""
     new java.util.concurrent.Callable() { 
         call: function() { return 2+2; }};""")
     future = J.make_future_task(call_able, 
                                 fn_post_process=J.unwrap_javascript)
     future.run()
     self.assertEqual(future.get(), 4)
Example #12
0
def set_current_image(imagej_obj):
    '''Set the currently active window'''
    imagej_obj.show()
    image_window = imagej_obj.getWindow()
    J.execute_runnable_in_main_thread(J.run_script(
        """new java.lang.Runnable() {
        run:function() { Packages.ij.WindowManager.setCurrentWindow(w); }}
        """, dict(w=image_window)), synchronous=True)
Example #13
0
 def test_07_04_make_future_task_from_callable(self):
     call_able = J.run_script("""
     new java.util.concurrent.Callable() { 
         call: function() { return 2+2; }};""")
     future = J.make_future_task(call_able,
                                 fn_post_process=J.unwrap_javascript)
     future.run()
     self.assertEqual(future.get(), 4)
Example #14
0
 def setActiveDisplay(self, display):
     '''Make this the active display'''
     # Note: has to be run in GUI thread on mac
     r = J.run_script(
         """new java.lang.Runnable() {
             run:function() { displayService.setActiveDisplay(display); }
         }
         """, dict(displayService=self.o, display=display.o))
     J.execute_runnable_in_main_thread(r, True)
Example #15
0
 def setActiveDisplay(self, display):
     '''Make this the active display'''
     # Note: has to be run in GUI thread on mac
     r = J.run_script(
         """new java.lang.Runnable() {
             run:function() { displayService.setActiveDisplay(display); }
         }
         """, dict(displayService=self.o, display=display.o))
     J.execute_runnable_in_main_thread(r, True)
Example #16
0
 def createUIS(self, arg):
     '''Create the ImageJ UI with a string argument'''
     r = J.run_script(
         """new java.lang.Runnable() {
             run:function() {
                 uiService.showUI(arg);
             }
         };
         """, dict(uiService=self.o, arg=arg))
     J.execute_runnable_in_main_thread(r, True)
Example #17
0
 def test_07_02_cancel_future(self):
     future = J.run_script("""
     new java.util.concurrent.FutureTask(
         new java.util.concurrent.Callable() {
            call: function() { return 2+2; }});""")
     wfuture = J.get_future_wrapper(future,
                                    fn_post_process=J.unwrap_javascript)
     wfuture.cancel(True)
     self.assertTrue(wfuture.isCancelled())
     self.assertRaises(J.JavaException, wfuture.get)
Example #18
0
 def test_07_02_cancel_future(self):
     future = J.run_script("""
     new java.util.concurrent.FutureTask(
         new java.util.concurrent.Callable() {
            call: function() { return 2+2; }});""")
     wfuture = J.get_future_wrapper(future,
                                    fn_post_process=J.unwrap_javascript)
     wfuture.cancel(True)
     self.assertTrue(wfuture.isCancelled())
     self.assertRaises(J.JavaException, wfuture.get)
Example #19
0
 def createUIS(self, arg):
     '''Create the ImageJ UI with a string argument'''
     r = J.run_script(
         """new java.lang.Runnable() {
             run:function() {
                 uiService.showUI(arg);
             }
         };
         """, dict(uiService=self.o, arg=arg))
     J.execute_runnable_in_main_thread(r, True)
Example #20
0
 def __init__(self, path):
     self.stream = None
     if path.lower().startswith("omero:"):
         self.rdr = get_omero_reader()
         return
     self.rdr = None
     class_list = get_class_list()
     find_rdr_script = """
     var classes = class_list.getClasses();
     var rdr = null;
     var lc_filename = java.lang.String(filename.toLowerCase());
     for (pass=0; pass < 3; pass++) {
         for (class_idx in classes) {
             var maybe_rdr = classes[class_idx].newInstance();
             if (pass == 0) {
                 if (maybe_rdr.isThisType(filename, false)) {
                     rdr = maybe_rdr;
                     break;
                 }
                 continue;
             } else if (pass == 1) {
                 var suffixes = maybe_rdr.getSuffixes();
                 var suffix_found = false;
                 for (suffix_idx in suffixes) {
                     var suffix = java.lang.String(suffixes[suffix_idx]);
                     suffix = suffix.toLowerCase();
                     if (lc_filename.endsWith(suffix)) {
                         suffix_found = true;
                         break;
                     }
                 }
                 if (! suffix_found) continue;
             }
             if (maybe_rdr.isThisType(stream)) {
                 rdr = maybe_rdr;
                 break;
             }
         }
         if (rdr) break;
     }
     rdr;
     """
     self.stream = jutil.make_instance(
         'loci/common/RandomAccessInputStream', '(Ljava/lang/String;)V',
         path)
     filename = os.path.split(path)[1]
     IFormatReader = make_iformat_reader_class()
     jrdr = jutil.run_script(
         find_rdr_script,
         dict(class_list=class_list, filename=filename, stream=self.stream))
     if jrdr is None:
         raise ValueError("Could not find a Bio-Formats reader for %s",
                          path)
     self.rdr = IFormatReader()
     self.rdr.o = jrdr
Example #21
0
def set_temp_current_image(imagej_obj):
    '''Set the temporary current image for the UI thread'''
    script = """
    new java.lang.Runnable() {
        run: function() {
            Packages.ij.WindowManager.setTempCurrentImage(ip);
        }
    };
    """
    J.execute_runnable_in_main_thread(
        J.run_script(script, dict(ip = imagej_obj.o)), True)
Example #22
0
 def close(self):
     '''Close the display
     
     This is run in the UI thread with synchronization.
     '''
     r = J.run_script(
         """new java.lang.Runnable() {
         run: function() { display.close(); }
         };
         """, dict(display=self.o))
     J.execute_runnable_in_main_thread(r, True)
Example #23
0
def execute_macro(macro_text):
    '''Execute a macro in ImageJ
    
    macro_text - the macro program to be run
    '''
    interp = J.make_instance("ij/macro/Interpreter","()V");
    J.execute_runnable_in_main_thread(J.run_script(
        """new java.lang.Runnable() {
        run: function() {
            interp.run(macro_text);
        }}""", dict(interp=interp, macro_text=macro_text)), synchronous=True)
Example #24
0
 def close(self):
     '''Close the display
     
     This is run in the UI thread with synchronization.
     '''
     r = J.run_script(
         """new java.lang.Runnable() {
         run: function() { display.close(); }
         };
         """, dict(display=self.o))
     J.execute_runnable_in_main_thread(r, True)
Example #25
0
 def get_pixel_data(self, axes = None):
     imgplus = self.getImgPlus()
     pixel_data = get_pixel_data(imgplus)
     script = """
     var result = java.util.ArrayList();
     for (i=0;i<imgplus.numDimensions();i++) result.add(imgplus.axis(i));
     result"""
     inv_axes = J.run_script(script, dict(imgplus=imgplus))
     inv_axes = list(J.iterate_collection(inv_axes))
     transpose = calculate_transpose(inv_axes, axes)
     return pixel_data.transpose(transpose)
Example #26
0
 def get_pixel_data(self, axes=None):
     imgplus = self.getImgPlus()
     pixel_data = get_pixel_data(imgplus)
     script = """
     var result = java.util.ArrayList();
     for (i=0;i<imgplus.numDimensions();i++) result.add(imgplus.axis(i));
     result"""
     inv_axes = J.run_script(script, dict(imgplus=imgplus))
     inv_axes = list(J.iterate_collection(inv_axes))
     transpose = calculate_transpose(inv_axes, axes)
     return pixel_data.transpose(transpose)
Example #27
0
def get_temp_current_image():
    '''Get the temporary ImagePlus object for the current thread'''
    script = """
    new java.util.concurrent.Callable() {
        call: function() {
            return Packages.ij.WindowManager.getTempCurrentImage();
        }
    };
    """
    gtci = J.make_future_task(J.run_script(script))
    imageplus_obj = J.execute_future_in_main_thread(gtci)
    return get_imageplus_wrapper(imageplus_obj)
Example #28
0
 def __init__(self, path):
     self.stream = None
     if path.lower().startswith("omero:"):
         self.rdr = get_omero_reader()
         return
     self.rdr = None
     class_list = get_class_list()
     find_rdr_script = """
     var classes = class_list.getClasses();
     var rdr = null;
     var lc_filename = java.lang.String(filename.toLowerCase());
     for (pass=0; pass < 3; pass++) {
         for (class_idx in classes) {
             var maybe_rdr = classes[class_idx].newInstance();
             if (pass == 0) {
                 if (maybe_rdr.isThisType(filename, false)) {
                     rdr = maybe_rdr;
                     break;
                 }
                 continue;
             } else if (pass == 1) {
                 var suffixes = maybe_rdr.getSuffixes();
                 var suffix_found = false;
                 for (suffix_idx in suffixes) {
                     var suffix = java.lang.String(suffixes[suffix_idx]);
                     suffix = suffix.toLowerCase();
                     if (lc_filename.endsWith(suffix)) {
                         suffix_found = true;
                         break;
                     }
                 }
                 if (! suffix_found) continue;
             }
             if (maybe_rdr.isThisType(stream)) {
                 rdr = maybe_rdr;
                 break;
             }
         }
         if (rdr) break;
     }
     rdr;
     """
     self.stream = jutil.make_instance('loci/common/RandomAccessInputStream',
                                       '(Ljava/lang/String;)V', path)
     filename = os.path.split(path)[1]
     IFormatReader = make_iformat_reader_class()
     jrdr = jutil.run_script(find_rdr_script, dict(class_list = class_list,
                                                   filename = filename,
                                                   stream = self.stream))
     if jrdr is None:
         raise ValueError("Could not find a Bio-Formats reader for %s", path)
     self.rdr = IFormatReader()
     self.rdr.o = jrdr
Example #29
0
 def test_07_01_wrap_future(self):
     future = J.run_script("""
     new java.util.concurrent.FutureTask(
         new java.util.concurrent.Callable() {
            call: function() { return 2+2; }});""")
     wfuture = J.get_future_wrapper(future,
                                    fn_post_process=J.unwrap_javascript)
     self.assertFalse(wfuture.isDone())
     self.assertFalse(wfuture.isCancelled())
     wfuture.run()
     self.assertTrue(wfuture.isDone())
     self.assertEqual(wfuture.get(), 4)
Example #30
0
 def test_07_01_wrap_future(self):
     future = J.run_script("""
     new java.util.concurrent.FutureTask(
         new java.util.concurrent.Callable() {
            call: function() { return 2+2; }});""")
     wfuture = J.get_future_wrapper(future,
                                    fn_post_process=J.unwrap_javascript)
     self.assertFalse(wfuture.isDone())
     self.assertFalse(wfuture.isCancelled())
     wfuture.run()
     self.assertTrue(wfuture.isDone())
     self.assertEqual(wfuture.get(), 4)
Example #31
0
 def fn(self, *args):
     script = """
     new java.util.concurrent.Callable() {
         call: function() {
             return o.%s(%s);
         }
     };
     """ % (method, ",".join(["arg%d" % i for i in range(len(args))]))
     d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)])
     d["o"] = self.o
     future = J.make_future_task(J.run_script(script, d))
     J.execute_future_in_main_thread(future)
     return fn_post_process(future.get())
Example #32
0
def show_imagej():
    '''Show the ImageJ user interface'''
    r = J.run_script("""new java.lang.Runnable() {
        run: function() {
            var imageJ = Packages.ij.IJ.getInstance();
            if (imageJ == null) {
                imageJ = Packages.ij.ImageJ();
            }
            imageJ.setVisible(true);
            imageJ.toFront();
        }
    };""", class_loader=get_user_loader())
    J.execute_runnable_in_main_thread(r, True)
Example #33
0
 def fn(self, *args):
     script = """
     new java.util.concurrent.Callable() {
         call: function() {
             return o.%s(%s);
         }
     };
     """ % (method, ",".join(["arg%d" % i for i in range(len(args))]))
     d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)])
     d["o"] = self.o
     future = J.make_future_task(J.run_script(script, d))
     J.execute_future_in_main_thread(future)
     return fn_post_process(future.get())
Example #34
0
 def fn(self, *args):
     script = """
     new java.lang.Runnable() {
         run: function() {
             o.%s(%s);
         }
     };
     """ % (method, ",".join(["arg%d" % i for i in range(len(args))]))
     d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)])
     d["o"] = self.o
     future = J.make_future_task(J.run_script(script, d))
     J.execute_future_in_main_thread(future)
     return future.get()
Example #35
0
 def fn(self, *args):
     script = """
     new java.lang.Runnable() {
         run: function() {
             o.%s(%s);
         }
     };
     """ % (method, ",".join(["arg%d" % i for i in range(len(args))]))
     d = dict([("arg%d" % i, arg) for i, arg in enumerate(args)])
     d["o"] = self.o
     future = J.make_future_task(J.run_script(script, d))
     J.execute_future_in_main_thread(future)
     return future.get()
Example #36
0
        def __init__(self):
            if service_classes is None:
                classes = None
                ctxt_fn = J.run_script("""new java.util.concurrent.Callable() {
                        call: function() {
                            return new Packages.imagej.ImageJ(false);
                        }
                    }""")
            else:
                classes = [
                    J.class_for_name(x)
                    for x in service_classes or REQUIRED_SERVICES
                ]
                classes = J.make_list(classes)
                ctxt_fn = J.run_script(
                    """new java.util.concurrent.Callable() {
                        call: function() {
                            return new Packages.imagej.ImageJ(classes);
                        }
                    }""", dict(classes=classes.o))

            self.o = J.execute_future_in_main_thread(
                J.make_future_task(ctxt_fn))
Example #37
0
 def createUI(self):
     '''Create the ImageJ UI'''
     #
     # This has to be done via a future in order
     # for CP to run the Mac event loop.
     #
     r = J.run_script(
         """new java.lang.Runnable() {
             run:function() {
                 uiService.showUI();
             }
         };
         """, dict(uiService=self.o))
     J.execute_runnable_in_main_thread(r, True)
Example #38
0
 def __init__(self):
     if service_classes is None:
         classes = None
         ctxt_fn = J.run_script(
             """new java.util.concurrent.Callable() {
                 call: function() {
                     return new Packages.imagej.ImageJ(false);
                 }
             }""")
     else:
         classes = [ 
             J.class_for_name(x) 
             for x in service_classes or REQUIRED_SERVICES]
         classes = J.make_list(classes)
         ctxt_fn = J.run_script(
             """new java.util.concurrent.Callable() {
                 call: function() {
                     return new Packages.imagej.ImageJ(classes);
                 }
             }""", dict(classes = classes.o))
     
     self.o = J.execute_future_in_main_thread(
         J.make_future_task(ctxt_fn))
Example #39
0
 def createUI(self):
     '''Create the ImageJ UI'''
     #
     # This has to be done via a future in order
     # for CP to run the Mac event loop.
     #
     r = J.run_script(
         """new java.lang.Runnable() {
             run:function() {
                 uiService.showUI();
             }
         };
         """, dict(uiService=self.o))
     J.execute_runnable_in_main_thread(r, True)
    def run(self, workspace):
        jb.attach()#initialize JVM
        
        input_image_name = self.input_image_name.value
        output_image_name = self.output_image_name.value
        self.gsize = self.input_gaussian_filter.value
        self.rsize = self.input_rolling_ball.value
        self.lowseed = self.input_low_seed.value
        self.highseed = self.input_high_seed.value
        
        image_set = workspace.image_set
        assert isinstance(image_set, cpi.ImageSet)
        
        #prepare input image        
        input_image = image_set.get_image(input_image_name, must_be_grayscale = True)        
        input_pixels = input_image.pixel_data
        ij_processor = ijiproc.make_image_processor((input_pixels*255.0).astype('float32'))
        #JavaScript API
        script = """       
        var img=Packages.ij.ImagePlus(name,ij_processor);
        Packages.ij.IJ.run(img, "8-bit", "");     
	var macro="g_size="+gsize+" r_size="+rsize+" low_edge="+lowseed+" high_edge="+highseed+" noise=-1";
        java.lang.System.out.println(macro);        
        Packages.ij.IJ.run(img, "Hysteresis Segment", macro);
        var output_proc=img.getProcessor();
        """
        #img.show();
        #Packages.ij.WindowManager.setCurrentWindow(img.getWindow());
        #"""
        in_params={
                   "name":output_image_name,
                   "ij_processor": ij_processor,
                   "gsize":self.gsize,
                   "rsize":self.rsize,
                   "lowseed":self.lowseed,
                   "highseed":self.highseed}
        out_params={"output_proc":None}
        r = jb.run_script(script, bindings_in = in_params,bindings_out = out_params)
        
        #prepare output image
        output_pixels = ijiproc.get_image(out_params["output_proc"], False)
        output_image = cpi.Image(output_pixels, parent_image = input_image)
        
        #write output
        image_set.add(output_image_name, output_image)
        
        if workspace.frame is not None:
            workspace.display_data.input_pixels = input_pixels
            workspace.display_data.output_pixels = output_pixels
        jb.detach()#close JVM
Example #41
0
 def inject_image(self, pixels, name=''):
     '''inject an image into ImageJ for processing'''
     ij_processor = ijiproc.make_image_processor(
         (pixels * 255.0).astype('float32'))
     script = """
     new java.lang.Runnable() {
         run: function() {
             var imp = Packages.ij.ImagePlus(name, ij_processor);
             imp.show();
             Packages.ij.WindowManager.setCurrentWindow(imp.getWindow());
         }};"""
     r = J.run_script(script, bindings_in = {
         "name":name,
         "ij_processor": ij_processor})
     J.execute_runnable_in_main_thread(r, True)
Example #42
0
 def test_05_06_create_dataset(self):
     i,j = np.mgrid[:7, :9]
     image = (i+j*10).astype(float)
     ds = ij2.create_dataset(self.context, image, "Foo")
     imgplus = ds.getImgPlus()
     script = """
     var ra=imgplus.randomAccess();
     ra.setPosition(x, 0);
     ra.setPosition(y, 1);
     ra.get().get()"""
     fn = np.frompyfunc(
         lambda x, y: J.run_script(script, 
                                   dict(imgplus=imgplus, x=x, y=y)), 2, 1)
     pixel_data = fn(j, i)
     np.testing.assert_array_equal(image, pixel_data)
Example #43
0
 def createDisplay(self, name, dataset):
     '''Create a display that contains the given dataset'''
     #
     # Must be run on the gui thread
     #
     jcallable = J.run_script(
         """new java.util.concurrent.Callable() {
             call:function() {
                 return displayService.createDisplay(name, dataset);
             }
         };
         """, dict(displayService=self.o, name=name, dataset=dataset.o))
     future = J.make_future_task(jcallable,
                                 fn_post_process=wrap_display)
     return J.execute_future_in_main_thread(future)
Example #44
0
 def createDisplay(self, name, dataset):
     """Create a display that contains the given dataset"""
     #
     # Must be run on the gui thread
     #
     jcallable = J.run_script(
         """new java.util.concurrent.Callable() {
             call:function() {
                 return displayService.createDisplay(name, dataset);
             }
         };
         """,
         dict(displayService=self.o, name=name, dataset=dataset.o),
     )
     future = J.make_future_task(jcallable, fn_post_process=wrap_display)
     return J.execute_future_in_main_thread(future)
Example #45
0
def select_overlay(display, overlay, select=True):
    '''Select or deselect an overlay
    
    display - the overlay's display
    
    overlay - the overlay to select
    '''
    for view in J.get_collection_wrapper(display, fn_wrapper = wrap_data_view):
        if J.call(overlay, "equals", "(Ljava/lang/Object;)Z", view.getData()):
            J.execute_runnable_in_main_thread(J.run_script(
                """new java.lang.Runnable() {
                    run: function() { view.setSelected(select);}
                   }""", dict(view = view.o, select=select)), synchronous=True)
            break
    else:
        logger.info("Failed to select overlay")
def get_measurements_for_good_pipeline(nimages = 1, 
                                       group_numbers = None):
    '''Get an appropriately initialized measurements structure for the good pipeline'''
    path = os.path.join(example_images_directory(), "ExampleSBSImages")
    m = cpmeas.Measurements()
    if group_numbers is None:
        group_numbers = [1] * nimages
    group_indexes = [1]
    last_group_number = group_numbers[0]
    group_index = 1
    for group_number in group_numbers:
        if group_number == last_group_number:
            group_index += 1
        else:
            group_index = 1
        group_indexes.append(group_index)
    for i in range(1, nimages+1):
        filename = ("Channel2-%02d-%s-%02d.tif" % 
                    (i, "ABCDEFGH"[int((i-1) / 12)], ((i-1) % 12) + 1))
        url = pathname2url(os.path.join(path, filename))
        m[cpmeas.IMAGE, cpmeas.C_FILE_NAME + "_DNA", i] = filename
        m[cpmeas.IMAGE, cpmeas.C_PATH_NAME + "_DNA", i] = path
        m[cpmeas.IMAGE, cpmeas.C_URL+"_DNA", i] = url
        m[cpmeas.IMAGE, cpmeas.GROUP_NUMBER, i] = group_numbers[i-1]
        m[cpmeas.IMAGE, cpmeas.GROUP_INDEX, i] = group_indexes[i-1]
        jblob = J.run_script("""
        importPackage(Packages.org.cellprofiler.imageset);
        importPackage(Packages.org.cellprofiler.imageset.filter);
        var imageFile=new ImageFile(new java.net.URI(url));
        var imageFileDetails = new ImageFileDetails(imageFile);
        var imageSeries=new ImageSeries(imageFile, 0);
        var imageSeriesDetails = new ImageSeriesDetails(imageSeries, imageFileDetails);
        var imagePlane=new ImagePlane(imageSeries, 0, ImagePlane.ALWAYS_MONOCHROME);
        var ipd = new ImagePlaneDetails(imagePlane, imageSeriesDetails);
        var stack = ImagePlaneDetailsStack.makeMonochromeStack(ipd);
        var stacks = java.util.Collections.singletonList(stack);
        var keys = java.util.Collections.singletonList(imageNumber);
        var imageSet = new ImageSet(stacks, keys);
        imageSet.compress(java.util.Collections.singletonList("DNA"), null);
        """, dict(url=url, imageNumber = str(i)))
        blob = J.get_env().get_byte_array_elements(jblob)
        m[cpmeas.IMAGE, M_IMAGE_SET, i, blob.dtype] = blob
    pipeline = cpp.Pipeline()
    pipeline.loadtxt(StringIO(GOOD_PIPELINE))
    pipeline.write_pipeline_measurement(m)
    return m
        
Example #47
0
def get_measurements_for_good_pipeline(nimages=1, group_numbers=None):
    '''Get an appropriately initialized measurements structure for the good pipeline'''
    path = os.path.join(example_images_directory(), "ExampleSBSImages")
    m = cpmeas.Measurements()
    if group_numbers is None:
        group_numbers = [1] * nimages
    group_indexes = [1]
    last_group_number = group_numbers[0]
    group_index = 1
    for group_number in group_numbers:
        if group_number == last_group_number:
            group_index += 1
        else:
            group_index = 1
        group_indexes.append(group_index)
    for i in range(1, nimages + 1):
        filename = ("Channel2-%02d-%s-%02d.tif" % (i, "ABCDEFGH"[int(
            (i - 1) / 12)], ((i - 1) % 12) + 1))
        url = pathname2url(os.path.join(path, filename))
        m[cpmeas.IMAGE, cpmeas.C_FILE_NAME + "_DNA", i] = filename
        m[cpmeas.IMAGE, cpmeas.C_PATH_NAME + "_DNA", i] = path
        m[cpmeas.IMAGE, cpmeas.C_URL + "_DNA", i] = url
        m[cpmeas.IMAGE, cpmeas.GROUP_NUMBER, i] = group_numbers[i - 1]
        m[cpmeas.IMAGE, cpmeas.GROUP_INDEX, i] = group_indexes[i - 1]
        jblob = J.run_script(
            """
        importPackage(Packages.org.cellprofiler.imageset);
        importPackage(Packages.org.cellprofiler.imageset.filter);
        var imageFile=new ImageFile(new java.net.URI(url));
        var imageFileDetails = new ImageFileDetails(imageFile);
        var imageSeries=new ImageSeries(imageFile, 0);
        var imageSeriesDetails = new ImageSeriesDetails(imageSeries, imageFileDetails);
        var imagePlane=new ImagePlane(imageSeries, 0, ImagePlane.ALWAYS_MONOCHROME);
        var ipd = new ImagePlaneDetails(imagePlane, imageSeriesDetails);
        var stack = ImagePlaneDetailsStack.makeMonochromeStack(ipd);
        var stacks = java.util.Collections.singletonList(stack);
        var keys = java.util.Collections.singletonList(imageNumber);
        var imageSet = new ImageSet(stacks, keys);
        imageSet.compress(java.util.Collections.singletonList("DNA"), null);
        """, dict(url=url, imageNumber=str(i)))
        blob = J.get_env().get_byte_array_elements(jblob)
        m[cpmeas.IMAGE, M_IMAGE_SET, i, blob.dtype] = blob
    pipeline = cpp.Pipeline()
    pipeline.loadtxt(StringIO(GOOD_PIPELINE))
    pipeline.write_pipeline_measurement(m)
    return m
Example #48
0
def set_current_image(imagej_obj):
    '''Set the currently active window
    
    imagej_obj - an ImagePlus to become the current image
    '''
    J.execute_runnable_in_main_thread(J.run_script(
        """new java.lang.Runnable() {
            run:function() {
                var w = imp.getWindow();
                if (w == null) {
                    imp.show();
                } else {
                    Packages.ij.WindowManager.setCurrentWindow(w);
                }
            }
        }
        """, dict(imp=imagej_obj.o)), synchronous=True)
Example #49
0
def select_overlay(display, overlay, select=True):
    '''Select or deselect an overlay
    
    display - the overlay's display
    
    overlay - the overlay to select
    '''
    for view in J.get_collection_wrapper(display, fn_wrapper=wrap_data_view):
        if J.call(overlay, "equals", "(Ljava/lang/Object;)Z", view.getData()):
            J.execute_runnable_in_main_thread(J.run_script(
                """new java.lang.Runnable() {
                    run: function() { view.setSelected(select);}
                   }""", dict(view=view.o, select=select)),
                                              synchronous=True)
            break
    else:
        logger.info("Failed to select overlay")
Example #50
0
def get_current_image():
    '''Get the WindowManager's current image
    
    returns a wrapped ImagePlus object
    '''
    #
    # Run this on the UI thread so its thread context is the same
    # as the macro invocation
    #
    script = """
    new java.util.concurrent.Callable() {
        call: function() {
            return Packages.ij.WindowManager.getCurrentImage();
        }
    };
    """
    gci = J.make_future_task(J.run_script(script))
    imageplus_obj = J.execute_future_in_main_thread(gci)
    return get_imageplus_wrapper(imageplus_obj)
Example #51
0
def run_batch_macro(macro_text, imp):
    '''Run a macro in batch mode
    
    macro_text - the macro program to be run
    imp - an image plus to become the active image
    
    returns the image plus that was the active image at the end of the run
    '''
    script = """
    new java.util.concurrent.Callable() {
        call: function() {
             return interp.runBatchMacro(macro_text, imp);
        }
    };
    """
    interp = J.make_instance("ij/macro/Interpreter", "()V")
    future = J.make_future_task(
        J.run_script(script, dict(interp=interp,
                                  macro_text=macro_text,
                                  imp=imp)))
    return J.execute_future_in_main_thread(future)
Example #52
0
 def test_06_01_get_mask_data(self):
     # Get the overlay data from a display
     #
     display_svc = ij2.get_display_service(self.context)
     overlay_svc = ij2.get_overlay_service(self.context)
     image = np.zeros((30, 30))
     ds = ij2.create_dataset(self.context, image, "Foo")
     display = display_svc.createDisplay("Foo", ds)
     d2 = display_svc.createDisplay("Bar", ij2.create_dataset(self.context, image, "Bar"))
     overlay = J.run_script(
         """var o = new Packages.imagej.data.overlay.RectangleOverlay(context.getContext());
            o.setOrigin(5, 0);
            o.setOrigin(3, 1);
            o.setExtent(6, 0);
            o.setExtent(7, 1);
            o;""", dict(context=self.context))
     overlay_svc.addOverlays(display, J.make_list([overlay]))
     ij2.select_overlay(display.o, overlay)
     mask = ij2.create_mask(display)
     i, j = np.mgrid[0:mask.shape[0], 0:mask.shape[1]]
     np.testing.assert_equal(mask, (j >= 5) & (j < 11) & (i >= 3) & (i < 10))
Example #53
0
def get_omero_reader():
    '''Return an loci.ome.io.OMEROReader instance, wrapped as a FormatReader'''
    script = """
    var rdr = new Packages.loci.ome.io.OmeroReader();
    rdr.setServer(server);
    rdr.setPort(port);
    rdr.setUsername(username);
    rdr.setSessionID(sessionID);
    rdr;
    """
    if __omero_session_id is None:
        omero_login()

    jrdr = jutil.run_script(
        script,
        dict(server=__omero_server,
             port=__omero_port,
             username=__omero_username,
             sessionID=__omero_session_id))

    rdr = make_iformat_reader_class()()
    rdr.o = jrdr
    return rdr
Example #54
0
    def on_show_imagej(self):
        '''Show the ImageJ user interface
        
        This method shows the ImageJ user interface when the user presses
        the Show ImageJ button.
        '''
        logger.debug("Starting ImageJ UI")
        ui_service = ij2.get_ui_service(get_context())
        if ui_service is not None and not ui_service.isVisible():
            if cpprefs.get_headless():
                # Silence the auto-updater in the headless preferences
                #
                ij2.update_never_remind()

            ui_service.createUI()
        elif ui_service is not None:
            ui = ui_service.getDefaultUI()
            J.execute_runnable_in_main_thread(
                J.run_script(
                    """new java.lang.Runnable() {
                run: function() { 
                    ui.getApplicationFrame().setVisible(true); }}""",
                    dict(ui=ui)), True)