Skip to content
Snippets Groups Projects
Commit fb398da3 authored by tpylak's avatar tpylak
Browse files

SE-328 jython dropbox handler (example)

SVN: 19476
parent 4510b740
No related branches found
No related tags found
No related merge requests found
#! /usr/bin/env python
# This is an example Jython dropbox for importing HCS image datasets
import os
import ch.systemsx.cisd.openbis.generic.shared.dto.identifier as identifier
import ch.systemsx.cisd.openbis.generic.shared.basic.dto as dto
from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import ImageFileInfo, ImageDataSetInformation, Channel
# ------------
# You may want to modify this part.
# ------------
# type of the new dataset
DATASET_TYPE = "HCS_IMAGE"
# file format of files in a new dataset
FILE_FORMAT = "TIFF"
# space where the plate for which the dataset has been acquired exist
SAMPLE_SPACE = "DEMO"
# number of rile rows and columns on a well
TILE_ROWS_NUMBER = 2
TILE_COLUMNS_NUMBER = 2
# available channels, for each channel code and label have to be specified
CHANNELS = [ Channel("DAPI", "DAPI"), Channel("FITC", "FITC"), Channel("CY5", "Cy5") ]
# extracts code of the sample from the directory name
def extract_sample_code(file_basename):
return file_basename.split(".")[0]
# Creates ImageFileInfo for a given path to an image
# Example file name: A - 1(fld 1 wv Cy5 - Cy5).tif
def create_image_info(path):
basename = os.path.splitext(path)[0]
wellText = basename[0:find(basename, "(")] # A - 1
well = wellText.replace(" - ", "")
fieldText = basename[find(basename, "fld ")+4 : find(basename, " wv")]
try:
fieldNum = int(fieldText) - 1
except ValueError:
raise Exception("Cannot parse field number from '"+fieldText+"' in '"+basename+"' file name.")
channel = basename[rfind(basename, " - ") + 3 : -1]
tileRow = (fieldNum / TILE_COLUMNS_NUMBER) + 1
tileCol = (fieldNum % TILE_COLUMNS_NUMBER) + 1
img = ImageFileInfo(channel, tileRow, tileCol, path)
img.setWell(well)
return img
# ------------
# You probably do not want to modify this part
# ------------
def rfind(text, pattern):
ix = text.rfind(pattern)
ensurePatternFound(ix, text, pattern)
return ix
def find(text, pattern):
ix = text.find(pattern)
ensurePatternFound(ix, text, pattern)
return ix
def ensurePatternFound(ix, file, pattern):
if ix == -1:
raise Exception("Cannot find '"+pattern+"' pattern in file name '"+file+"'")
def create_dataset():
basename = extract_file_basename(incoming.getName())
dataset = Dataset()
dataset.dataset_type = DATASET_TYPE
dataset.file_format = FILE_FORMAT
dataset.sample_space = SAMPLE_SPACE
dataset.sample_code = extract_sample_code(basename)
dataset.tile_rows_number = TILE_ROWS_NUMBER
dataset.tile_columns_number = TILE_COLUMNS_NUMBER
return dataset
def get_available_channels():
return CHANNELS
class Dataset:
sample_code = None
sample_space = None
dataset_type = None
file_format = None
# -- imaging specific
tile_rows_number = -1
tile_columns_number = -1
def create_image_infos(dir):
images = []
dir_path = dir.getPath()
for file in os.listdir(dir_path):
image = create_image_info(file)
images.append(image)
return images
def set_dataset_info(registration_details, dataset):
data_set_info = registration_details.getDataSetInformation()
data_set_info.setSpaceCode(dataset.sample_space)
data_set_info.setSampleCode(dataset.sample_code)
registration_details.setFileFormatType(dto.FileFormatType(dataset.file_format));
registration_details.setDataSetType(dto.DataSetType(dataset.dataset_type));
registration_details.setMeasuredData(True);
# -- imaging specific
data_set_info.setTileGeometry(dataset.tile_rows_number, dataset.tile_columns_number)
images = create_image_infos(incoming)
data_set_info.setImages(images)
channels = get_available_channels()
data_set_info.setChannels(channels)
def extract_file_basename(filename):
lastDot = filename.rfind(".")
if lastDot != -1:
return filename[0:lastDot]
else:
return filename
dataset = create_dataset()
registration_details = factory.createRegistrationDetails()
set_dataset_info(registration_details, dataset)
service.queueDataSetRegistration(incoming, registration_details)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment