/*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2016 University of Dundee & Open Microscopy Environment.
* All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package training;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import omero.gateway.Gateway;
import omero.gateway.LoginCredentials;
import omero.gateway.SecurityContext;
import omero.gateway.facility.BrowseFacility;
import omero.log.SimpleLogger;
import omero.model.Length;
import omero.model.enums.UnitsLength;
import omero.gateway.model.DatasetData;
import omero.gateway.model.ExperimenterData;
import omero.gateway.model.ImageData;
import omero.gateway.model.PixelsData;
import omero.gateway.model.PlateData;
import omero.gateway.model.ProjectData;
import omero.gateway.model.ScreenData;
import omero.gateway.model.WellData;
/**
* Sample code showing how to load data from an OMERO server.
*
* @author Jean-Marie Burel <a
* href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @since Beta4.3.2
*/
public class ReadData {
// The value used if the configuration file is not used. To edit*/
/** The server address. */
private static String hostName = "serverName";
/** The username. */
private static String userName = "userName";
/** The password. */
private static String password = "password";
/** The id of a dataset. */
private static long datasetId = 1;
/** The id of an image. */
private static long imageId = 1;
/** The id of a plate. */
private static long plateId = 1;
// end edit
private Gateway gateway;
private ExperimenterData user;
private SecurityContext ctx;
/**
* start-code
*/
// Projects
// ========
/**
* Retrieve the projects owned by the user currently logged in.
* If a project contains datasets, the datasets will automatically be
* loaded.
*/
private void loadProjects() throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
Collection<ProjectData> projects = browse.getProjects(ctx);
Iterator<ProjectData> i = projects.iterator();
ProjectData project;
Set<DatasetData> datasets;
Iterator<DatasetData> j;
DatasetData dataset;
while (i.hasNext()) {
project = i.next();
System.err.println("Project:" + project.getId() + " "
+ project.getName());
datasets = project.getDatasets();
j = datasets.iterator();
while (j.hasNext()) {
dataset = j.next();
System.err.println("dataset:" + dataset.getId() + " "
+ dataset.getName());
// Do something here
// If images loaded.
// dataset.getImages();
}
}
}
// Datasets
// ========
/**
* Retrieve the datasets owned by the user currently logged in.
*/
@SuppressWarnings("unchecked")
private void loadDatasets() throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
Collection<DatasetData> datasets = browse.getDatasets(ctx);
Iterator<DatasetData> i = datasets.iterator();
DatasetData dataset;
Set<ImageData> images;
Iterator<ImageData> j;
ImageData image;
while (i.hasNext()) {
dataset = i.next();
images = dataset.getImages();
j = images.iterator();
while (j.hasNext()) {
image = j.next();
System.err.println("image:" + image.getId() + " "
+ image.getName());
}
}
}
// Images
// ======
/**
* Retrieve the images contained in a dataset.
* In that case, we specify the dataset's id.
* @param datasetId The dataset's id.
*/
@SuppressWarnings("unchecked")
private void loadImagesInDataset(long datasetId) throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
Collection<ImageData> images = browse.getImagesForDatasets(ctx, Arrays.asList(datasetId));
Iterator<ImageData> j = images.iterator();
ImageData image;
while (j.hasNext()) {
image = j.next();
System.err
.println("image:" + image.getId() + " " + image.getName());
}
}
/**
* Retrieve an image if the identifier is known.
* @param imageId The image's id.
*/
private void loadImage(long imageId) throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
ImageData image = browse.getImage(ctx, imageId);
PixelsData pixels = image.getDefaultPixels();
System.err.println(pixels.getSizeZ()); // The number of z-sections.
System.err.println(pixels.getSizeT()); // The number of timepoints.
System.err.println(pixels.getSizeC()); // The number of channels.
System.err.println(pixels.getSizeX()); // The number of pixels along the
// X-axis.
System.err.println(pixels.getSizeY()); // The number of pixels along the
// Y-axis.
// Get Pixel Size for the above Image
Length sizeX = pixels.getPixelSizeX(null);
if (sizeX != null) {
System.err.println("Pixel Size X:" + sizeX.getValue()
+ sizeX.getSymbol());
}
// To get the size the size with different units, E.g. Angstroms
Length sizeXang = pixels.getPixelSizeX(UnitsLength.ANGSTROM);
if (sizeXang != null) {
System.err.println("Pixel Size X:" + sizeXang.getValue()
+ sizeXang.getSymbol());
}
}
// Screens
// =======
/**
* Retrieve Screening data owned by the user currently logged in.
* To learn about the model go to ScreenPlateWell. Note that the wells are
* not loaded.
*/
private void loadScreens() throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
Collection<ScreenData> screens = browse.getScreens(ctx);
Iterator<ScreenData> i = screens.iterator();
ScreenData screen;
Set<PlateData> plates;
Iterator<PlateData> j;
PlateData plate;
while (i.hasNext()) {
screen = i.next();
System.err.println("screen:" + screen.getId() + " "
+ screen.getName());
plates = screen.getPlates();
j = plates.iterator();
while (j.hasNext()) {
plate = j.next();
System.err.println("plate:" + plate.getId() + " "
+ plate.getName());
}
}
}
// Wells
// =====
/**
* Retrieve Screening data owned by the user currently logged in.
* To learn about the model go to ScreenPlateWell.
* @param plateId The plate's id.
*/
private void loadWells(long plateId) throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
Collection<WellData> wells = browse.getWells(ctx, plateId);
Iterator<WellData> i = wells.iterator();
WellData well;
while (i.hasNext()) {
well = i.next();
System.err.println("well:" + well.getId());
}
}
// Plates
// ======
/**
* Retrieve Screening data owned by the user currently logged in.
* To learn about the model go to ScreenPlateWell. Note that the wells are
* not loaded.
*/
private void loadPlate() throws Exception {
BrowseFacility browse = gateway.getFacility(BrowseFacility.class);
Collection<PlateData> plates = browse.getPlates(ctx);
Iterator<PlateData> i = plates.iterator();
PlateData plate;
while (i.hasNext()) {
plate = i.next();
System.err.println("plate:" + plate.getId());
}
}
/**
* end-code
*/
/**
* Connects and invokes the various methods.
* @param args The login credentials.
* @param datasetId The dataset's id.
* @param plateId The plate's id.
* @param imageId The image's id.
*/
ReadData(String[] args, long datasetId, long plateId, long imageId) {
LoginCredentials cred = new LoginCredentials(args);
gateway = new Gateway(new SimpleLogger());
try {
user = gateway.connect(cred);
ctx = new SecurityContext(user.getGroupId());
loadProjects();
loadDatasets();
loadImagesInDataset(datasetId);
loadImage(imageId);
loadScreens();
loadWells(plateId);
loadPlate();
} catch (Exception e) {
e.printStackTrace();
} finally {
gateway.disconnect();
}
}
/**
* Runs the script without configuration options.
*
* @param args The login credentials.
*/
public static void main(String[] args) {
if (args == null || args.length == 0)
args = new String[] { "--omero.host=" + hostName,
"--omero.user=" + userName, "--omero.pass=" + password };
new ReadData(args, datasetId, plateId, imageId);
System.exit(0);
}
}