Mercurial > repos > lldelisle > omero_get_full_images
view omero_get_full_images.groovy @ 0:d041125db523 draft default tip
planemo upload for repository https://github.com/lldelisle/tools-lldelisle/tree/master/tools/omero_get_full_images commit b97db80733147cc920de70c59e1d283ef11fa879
author | lldelisle |
---|---|
date | Tue, 21 May 2024 13:50:08 +0000 |
parents | |
children |
line wrap: on
line source
// This macro was written by // Lucille Delisle using templates available at // https://github.com/BIOP/OMERO-scripts/tree/025047955b5c1265e1a93b259c1de4600d00f107/Fiji // Last modification: 2024-05-21 // The input image(s) may have multiple time stacks // and multiple channels // This macro works both in headless // or GUI // In both modes, // Images of all omero object are written to the output directory import fr.igred.omero.Client import fr.igred.omero.repository.DatasetWrapper import fr.igred.omero.repository.GenericRepositoryObjectWrapper import fr.igred.omero.repository.ImageWrapper import fr.igred.omero.repository.PlateWrapper import fr.igred.omero.repository.WellWrapper import ij.ImagePlus import ij.IJ import ij.io.FileSaver import java.awt.GraphicsEnvironment import java.io.File import java.util.concurrent.TimeUnit import org.apache.commons.io.FileUtils // Global variable with times in minutes to wait: waiting_times = [0, 10, 60, 360, 600] def robustlyGetAll(GenericRepositoryObjectWrapper obj_wrp, String object_type, Client user_client) { for (waiting_time in waiting_times) { try { wrappers = null switch (object_type) { case "image": wrappers = obj_wrp.getImages(user_client) break case "dataset": wrappers = obj_wrp.getDatasets(user_client) break case "well": wrappers = obj_wrp.getWells(user_client) break case "project": wrappers = obj_wrp.getProjects(user_client) break case "plate": wrappers = obj_wrp.getPlates(user_client) break case "screen": wrappers = obj_wrp.getScreens(user_client) break } return wrappers } catch(Exception e) { println("Could not get " + object_type + " for " + obj_wrp + " waiting " + waiting_time + " minutes and trying again.") println e TimeUnit.MINUTES.sleep(waiting_time) last_exception = e if (!user_client.isConnected()) { println("Has been deconnected. Will reconnect.") user_client.connect(host, port, USERNAME, PASSWORD.toCharArray()) } } } throw last_exception } def robustlyGetOne(Long id, String object_type, Client user_client) { for (waiting_time in waiting_times) { try { wrapper = null switch (object_type) { case "image": warpper = user_client.getImage(id) break case "dataset": warpper = user_client.getDataset(id) break case "well": warpper = user_client.getWell(id) break case "project": warpper = user_client.getProject(id) break case "plate": warpper = user_client.getPlate(id) break case "screen": warpper = user_client.getScreen(id) break } return warpper } catch(Exception e) { println("Could not get " + object_type + " id " + id + " waiting " + waiting_time + " minutes and trying again.") println e TimeUnit.MINUTES.sleep(waiting_time) last_exception = e if (!user_client.isConnected()) { println("Has been deconnected. Will reconnect.") user_client.connect(host, port, USERNAME, PASSWORD.toCharArray()) } } } throw last_exception } def robustlytoImagePlus(ImageWrapper image_wrp, Client user_client) { for (waiting_time in waiting_times) { try { return image_wrp.toImagePlus(user_client) } catch(Exception e) { println("Could not convert to image plus " + image_wrp + " waiting " + waiting_time + " minutes and trying again.") println e TimeUnit.MINUTES.sleep(waiting_time) last_exception = e if (!user_client.isConnected()) { println("Has been deconnected. Will reconnect.") user_client.connect(host, port, USERNAME, PASSWORD.toCharArray()) } } } throw last_exception } def processDataset(Client user_client, DatasetWrapper dataset_wrp, File output_directory, Boolean headless_mode) { robustlyGetAll(dataset_wrp, "image", user_client).each{ ImageWrapper img_wrp -> processImage(user_client, img_wrp, output_directory, headless_mode) } } def processSinglePlate(Client user_client, PlateWrapper plate_wrp, File output_directory, Boolean headless_mode) { robustlyGetAll(plate_wrp, "well", user_client).each{ well_wrp -> processSingleWell(user_client, well_wrp, output_directory, headless_mode) } } def processSingleWell(Client user_client, WellWrapper well_wrp, File output_directory, Boolean headless_mode) { well_wrp.getWellSamples().each{ ImageWrapper img_wrp = it.getImage() processImage(user_client, img_wrp, output_directory, headless_mode) } } def processImage(Client user_client, ImageWrapper image_wrp, File output_directory, Boolean headless_mode) { IJ.run("Close All", "") // Print image information println "\n Image infos" String image_basename = image_wrp.getName() println ("Image_name : " + image_basename + " / id : " + image_wrp.getId()) println "Getting image from OMERO" ImagePlus imp = robustlytoImagePlus(image_wrp, user_client) // ImagePlus imp = IJ.openImage("/home/ldelisle/Desktop/EXP095_LE_PEG_CTGF_PLATE_120h.companion.ome [C2_1_merge].tif") if (!headless_mode) { imp.show() } // Write to file File output_path = new File (output_directory, image_basename + ".tiff" ) // save file FileSaver fs = new FileSaver(imp) fs.saveAsTiff(output_path.toString()) return } // User set variables #@ String(visibility=MESSAGE, value="Inputs", required=false) msg #@ String(label="User name") USERNAME #@ String(label="PASSWORD", style='PASSWORD', value="", persist=false) PASSWORD #@ String(label="File path with omero credentials") credentials #@ String(label="omero host server") host #@ Integer(label="omero host server port", value=4064) port #@ String(label="Object", choices={"image","dataset","well","plate"}) object_type #@ Long(label="ID", value=119273) id #@ String(visibility=MESSAGE, value="Parameters for output", required=false) msg5 #@ File(style = "directory", label="Directory where measures are put") output_directory // Detect if is headless // java.awt.GraphicsEnvironment.checkheadless_mode(GraphicsEnvironment.java:204) Boolean headless_mode = GraphicsEnvironment.isHeadless() if (headless_mode) { println "Running in headless mode" } if (PASSWORD == "") { File cred_file = new File(credentials) if (!cred_file.exists()) { throw new Exception("Password or credential file need to be set.") } String creds = FileUtils.readFileToString(cred_file, "UTF-8") if (creds.split("\n").size() < 2) { throw new Exception("Credential file requires 2 lines") } USERNAME = creds.split("\n")[0] PASSWORD = creds.split("\n")[1] } // Connection to server Client user_client = new Client() user_client.connect(host, port, USERNAME, PASSWORD.toCharArray()) if (user_client.isConnected()) { println "\nConnected to "+host println "Images will be in " + output_directory.toString() try { switch (object_type) { case "image": ImageWrapper image_wrp = robustlyGetOne(id, "image", user_client) processImage(user_client, image_wrp, output_directory, headless_mode) break case "dataset": DatasetWrapper dataset_wrp = robustlyGetOne(id, "dataset", user_client) processDataset(user_client, dataset_wrp, output_directory, headless_mode) break case "well": WellWrapper well_wrp = robustlyGetOne(id, "well", user_client) processSingleWell(user_client, well_wrp, output_directory, headless_mode) break case "plate": PlateWrapper plate_wrp = robustlyGetOne(id, "plate", user_client) processSinglePlate(user_client, plate_wrp, output_directory, headless_mode) break } } catch(Exception e) { println("Something went wrong: " + e) e.printStackTrace() if (headless_mode){ // This is due to Rank Filter + GaussianBlur System.exit(1) } } finally { user_client.disconnect() println "Disonnected " + host } if (headless_mode) { // This is due to Rank Filter + GaussianBlur System.exit(0) } } else { throw new Exception("Not able to connect to " + host) } return