diff --git a/integration-tests/templates/data-ibrain2/dss-dropboxes-service.properties b/integration-tests/templates/data-ibrain2/dss-dropboxes-service.properties new file mode 100644 index 0000000000000000000000000000000000000000..7ae9067169995ceccf11499587ae253f8cab784f --- /dev/null +++ b/integration-tests/templates/data-ibrain2/dss-dropboxes-service.properties @@ -0,0 +1,73 @@ +inputs = hcs_image_raw, hcs_image_overview, hcs_image_segmentation, hcs_analysis_well_features, hcs_analysis_well_quality, hcs_analysis_well_features, hcs_analysis_cell_features_csv, hcs_analysis_cell_features_mat + +root = ~/data/dropboxes +ibrain2-dropboxes-dir = ${root}/ibrain2-dropboxes-test +staging-dir = ${root}/tmp +scripts-dir = ${root}/scripts + + +# --- hcs_image_raw ------------ + +hcs_image_raw.incoming-dir = ${ibrain2-dropboxes-dir}/hcs_image_raw +hcs_image_raw.script-path = ${scripts-dir}/hcs_image_raw.py + +hcs_image_raw.incoming-data-completeness-condition = auto-detection +hcs_image_raw.top-level-data-set-handler = ch.systemsx.cisd.openbis.dss.etl.jython.JythonPlateDataSetHandler +hcs_image_raw.staging-dir = ${staging-dir} + +hcs_image_raw.storage-processor = ch.systemsx.cisd.openbis.dss.etl.PlateStorageProcessor +hcs_image_raw.storage-processor.data-source = imaging-db + +# --- hcs_image_overview + +# --- hcs_image_segmentation + +# --- hcs_analysis_cell_features_csv + +# --- hcs_analysis_cell_features_mat + + +# --- hcs_analysis_well_quality ----------- + +hcs_analysis_well_quality.incoming-dir = ${ibrain2-dropboxes-dir}/hcs_analysis_well_quality +hcs_analysis_well_quality.script-path = ${scripts-dir}/hcs_analysis_well_quality.py + +hcs_analysis_well_quality.incoming-data-completeness-condition = auto-detection +hcs_analysis_well_quality.top-level-data-set-handler = ch.systemsx.cisd.openbis.dss.etl.jython.JythonPlateDataSetHandler +hcs_analysis_well_quality.staging-dir = ${staging-dir} + +hcs_analysis_well_quality.storage-processor = ch.systemsx.cisd.openbis.dss.etl.featurevector.FeatureVectorStorageProcessor +hcs_analysis_well_quality.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor +hcs_analysis_well_quality.storage-processor.data-source = imaging-db +hcs_analysis_well_quality.storage-processor.separator = , +hcs_analysis_well_quality.storage-processor.ignore-comments = true +hcs_analysis_well_quality.storage-processor.well-name-col-is-alphanum = true +hcs_analysis_well_quality.storage-processor.well-name-row = File_Name +hcs_analysis_well_quality.storage-processor.well-name-col = File_Name + +# --- hcs_analysis_well_features ----------- + +hcs_analysis_well_features.incoming-dir = ${ibrain2-dropboxes-dir}/hcs_analysis_well_features +hcs_analysis_well_features.script-path = ${scripts-dir}/hcs_analysis_well_features.py + +hcs_analysis_well_features.incoming-data-completeness-condition = auto-detection +hcs_analysis_well_features.top-level-data-set-handler = ch.systemsx.cisd.openbis.dss.etl.jython.JythonPlateDataSetHandler +hcs_analysis_well_features.staging-dir = ${staging-dir} + +hcs_analysis_well_features.storage-processor = ch.systemsx.cisd.openbis.dss.etl.featurevector.FeatureVectorStorageProcessor +hcs_analysis_well_features.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor +hcs_analysis_well_features.storage-processor.data-source = imaging-db + +# --- hcs_analysis_well_metadata ----------- + +hcs_analysis_well_metadata.incoming-dir = ${ibrain2-dropboxes-dir}/hcs_analysis_well_metadata +hcs_analysis_well_metadata.script-path = ${scripts-dir}/hcs_analysis_well_metadata.py + +hcs_analysis_well_metadata.incoming-data-completeness-condition = auto-detection +hcs_analysis_well_metadata.top-level-data-set-handler = ch.systemsx.cisd.openbis.dss.etl.jython.JythonPlateDataSetHandler +hcs_analysis_well_metadata.staging-dir = ${staging-dir} + +hcs_analysis_well_metadata.storage-processor = ch.systemsx.cisd.openbis.dss.etl.featurevector.FeatureVectorStorageProcessor +hcs_analysis_well_metadata.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor +hcs_analysis_well_metadata.storage-processor.data-source = imaging-db + diff --git a/integration-tests/templates/data-ibrain2/ibrain2-dropboxes-test.zip b/integration-tests/templates/data-ibrain2/ibrain2-dropboxes-test.zip new file mode 100644 index 0000000000000000000000000000000000000000..15a65ebaa6306628e010d636bb094a084a85f6f4 Binary files /dev/null and b/integration-tests/templates/data-ibrain2/ibrain2-dropboxes-test.zip differ diff --git a/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py b/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py new file mode 100755 index 0000000000000000000000000000000000000000..57886ecb685070f75b445bc3df0c7fa4adc30a2c --- /dev/null +++ b/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py @@ -0,0 +1,195 @@ +#! /usr/bin/env python + +import os + +class AbstractPropertiesParser: + _propertiesDict = None + + def __init__(self, incoming, fileName): + path = os.path.join(incoming, fileName) + self._propertiesDict = self._parseMetadata(path) + + # Parses the metadata file from the given incoming directory. + # Each line should have a form: + # key = value + # Keys should be unique in the file. + # Returns: + # a dictionary with keys and values from the file. + def _parseMetadata(self, path): + f = open(path) + myDict = {} + for line in f: + line = line.strip() + if len(line) == 0 or line.startswith("#"): + continue + + ix = line.find("=") + if ix == -1: + raise Exception("Cannot find '=' in line '"+line+"' in file: "+path) + key = line[:ix].strip() + value = line[ix+1:].strip() + if key in myDict: + raise Exception("Duplicated key '"+key+"' in file: "+path) + myDict[key] = value + return myDict + + def get(self, propertyName): + return self._propertiesDict[propertyName] + + # All properties in the file. + # Returns: + # an iterator which yields (propertyName, propertyValue) pairs + def getPropertiesIter(self): + for key, value in self._propertiesDict.iteritems(): + yield (key, value) + + # All dataset properties. + # Returns: + # an iterator which yields (propertyCode, propertyValue) pairs + def getDatasetPropertiesIter(self): + for key, value in self._propertiesDict.iteritems(): + if key.startswith(self.DATASET_PROPERTY_PREFIX): + yield (key, value) + +class AbstractMetadataParser(AbstractPropertiesParser): + METADATA_FILE="metadata.properties" + + IBRAIN2_DATASET_ID_PROPERTY = "brain2.dataset.id" + DATASET_PROPERTY_PREFIX = "ibrain2." + DATASET_TYPE_PROPERTY = "dataset.type" + + def __init__(self, incoming): + AbstractPropertiesParser.__init__(self, incoming, self.METADATA_FILE) + + def getDatasetType(self): + return self.get(self.DATASET_TYPE_PROPERTY) + + def getIBrain2DatasetId(self): + return self.get(self.IBRAIN2_DATASET_ID_PROPERTY) + +# --- concrete parser classes ---------------------- + +class AcquiredDatasetMetadataParser(AbstractMetadataParser): + PLATE_CODE_PRPOPERTY = "barcode" + INSTRUMENT_PROPERTY = "instrument.id" + TIMESTAMP_PROPERTY = "timestamp" # not used + + # All dataset properties. + # Returns: + # an iterator which yields (propertyCode, propertyValue) pairs + def getDatasetPropertiesIter(self): + for propertyCode, value in AbstractPropertiesParser.getDatasetPropertiesIter(self): + yield (propertyCode, value) + yield (self.INSTRUMENT_PROPERTY, self.get(self.INSTRUMENT_PROPERTY)) + + def getPlateCode(self): + return self.get(self.PLATE_CODE_PRPOPERTY) + +class DerivedDatasetMetadataParser(AbstractMetadataParser): + PARENT_DATSASET_PERMID_PRPOPERTY = "storage_provider.parent.dataset.id" + DATASET_TYPE_PROPERTY = "dataset.type" + + def getDatasetPropertiesIter(self): + return AbstractMetadataParser.getDatasetPropertiesIter(self) + + def getParentDatasetPermId(self): + return self.get(self.PARENT_DATSASET_PERMID_PRPOPERTY) + + def getDatasetType(self): + return self.get(self.DATASET_TYPE_PROPERTY) + +class AssayParser(AbstractPropertiesParser): + ASSAY_FILE_PREFIX="assay_" + + ASSAY_ID_PROPERTY = "assay.id" + ASSAY_TYPE_PROPERTY = "assay.type" + ASSAY_DESC_PROPERTY = "assay.description" + LAB_LEADER_PROPERTY = "labinfo.pi" + EXPERIMENTER_PROPERTY = "experimenter.login" + WORKFLOW_NAME_PROPERTY = "workflow.name" + WORKFLOW_AUTHOR_PROPERTY = "workflow.author" + + def _findAssayFile(self, incoming): + for file in os.listdir(incoming): + print file + if file.startswith(self.ASSAY_FILE_PREFIX): + return file + raise Exception("Assay file not found!") + + def __init__(self, incoming): + AbstractPropertiesParser.__init__(self, incoming, self._findAssayFile(incoming)) + +class IBRAIN2Utils: + """ path to the registration confirmation directory relative to the incoming dataset """ + CONFIRMATION_DIRECTORY = "../../registration-status" + + STATUS_PROPERTY = "storage_provider.storage.status" + OK = "STORAGE_SUCCESS" + ERROR = "STORAGE_FAILED" + ERROR_MSG_PROPERTY = "storage_provider.message" + + OPENBIS_DATASET_ID_PROPERTY = "storage_provider.dataset.id" + IBRAIN2_STATUS_FILE_PREFIX = "ibrain2_dataset_id_" + IBRAIN2_STATUS_FILE_SUFFIX = ".properties" + + def _getStatusFileName(self, ibrain2DatasetId, incoming): + return incoming + "/" + self.CONFIRMATION_DIRECTORY + "/" + self.IBRAIN2_STATUS_FILE_PREFIX + ibrain2DatasetId + self.IBRAIN2_STATUS_FILE_SUFFIX + + def _prop(self, name, value): + return name + " = " + value + "\n" + + def _writeConfirmationFile(self, ibrain2DatasetId, fileContent, incoming): + confirmationFile = self._getStatusFileName(ibrain2DatasetId, incoming) + file = open(confirmationFile, "w") + file.write(fileContent) + file.close() + + def createSuccessStatus(self, ibrain2DatasetId, openbisDatasetId, incoming): + fileContent = self._prop(self.STATUS_PROPERTY, self.OK) + fileContent += self._prop(AbstractMetadataParser.IBRAIN2_DATASET_ID_PROPERTY, ibrain2DatasetId) + fileContent += self._prop(self.OPENBIS_DATASET_ID_PROPERTY, openbisDatasetId) + self._writeConfirmationFile(ibrain2DatasetId, fileContent, incoming) + + def createFailureStatus(self, ibrain2DatasetId, errorMessage, incoming): + fileContent = self._prop(self.STATUS_PROPERTY, self.ERROR) + fileContent += self._prop(AbstractMetadataParser.IBRAIN2_DATASET_ID_PROPERTY, ibrain2DatasetId) + fileContent += self._prop(self.ERROR_MSG_PROPERTY, errorMessage) + self._writeConfirmationFile(ibrain2DatasetId, fileContent, incoming) + + +# -------------- TODO: remove tests + +TEST_DIR = "/Users/tpylak/main/src/screening-demo/biozentrum/dropboxes/ibrain2-dropboxes-test" + +def testMetadataParsers(): + print "-- acquired ---------------------------------" + parser = AcquiredDatasetMetadataParser(TEST_DIR+"/HCS_IMAGE_RAW/ibrain2_dataset_id_32") + print "dataset type:", parser.getDatasetType() + print "plate:", parser.getPlateCode() + print "properties" + for key, value in parser.getDatasetPropertiesIter(): + print key, value + + print "\n-- derived ---------------------------------" + parser = DerivedDatasetMetadataParser(TEST_DIR+"/HCS_IMAGE_OVERVIEW/ibrain2_dataset_id_48") + print "dataset type:", parser.getDatasetType() + print "parent perm id:", parser.getParentDatasetPermId() + print "properties" + for key, value in parser.getDatasetPropertiesIter(): + print key, value + +def testAssayParsers(): + print "-- assay ---------------------------------" + parser = AssayParser(TEST_DIR+"/HCS_IMAGE_RAW/ibrain2_dataset_id_32") + print "properties" + for key, value in parser.getPropertiesIter(): + print key, value + +def testConfirmationFiles(): + IBRAIN2Utils().createSuccessStatus("123", "123123123123-12312", TEST_DIR+"/HCS_IMAGE_RAW/ibrain2_dataset_id_32") + IBRAIN2Utils().createFailureStatus("321", "Global catastrophy!", TEST_DIR+"/HCS_IMAGE_RAW/ibrain2_dataset_id_32") + +#testAssayParsers() +#testMetadataParsers() +#testConfirmationFiles() + diff --git a/integration-tests/templates/data-ibrain2/scripts/commonImageDropbox.py b/integration-tests/templates/data-ibrain2/scripts/commonImageDropbox.py new file mode 100755 index 0000000000000000000000000000000000000000..60372dc0da410aeaefabd3af4084edc86f689af7 --- /dev/null +++ b/integration-tests/templates/data-ibrain2/scripts/commonImageDropbox.py @@ -0,0 +1,51 @@ +#! /usr/bin/env python + +import os +from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import * +from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import Geometry + +class IBrain2ImageDataSetConfig(SimpleImageDataConfig): + THUMBANAIL_SIZE = 200 + + def extractImageMetadata(self, imagePath): + image_tokens = ImageMetadata() + + basename = os.path.splitext(imagePath)[0] + # + token_dict = {} + for token in basename.split("_"): + token_dict[token[:1]] = token[1:] + + image_tokens.well = token_dict["w"] + fieldText = token_dict["s"] + try: + image_tokens.tileNumber = int(fieldText) + except ValueError: + raise Exception("Cannot parse field number from '" + fieldText + "' in '" + basename + "' file name.") + + image_tokens.channelCode = basename.split("_")[-1] + " ("+ token_dict["c"] + ")" + return image_tokens + + def geom(self, row, col): + return Geometry.createFromRowColDimensions(row, col) + + """ + Parameters: + image_tokens_list - list of ImageTokens + Returns: (rows, columns) tuple describing the matrix of tiles (aka fields or sides) in the well + """ + def getTileGeometry(self, imageTokens, maxTileNumber): + # if a number of tiles is strange, assume that one tile is missing + if maxTileNumber == 5 or maxTileNumber == 7 or maxTileNumber == 11 or maxTileNumber == 13: + maxTileNumber = maxTileNumber + 1 + + if maxTileNumber % 4 == 0 and maxTileNumber != 4: + return self.geom(4, maxTileNumber / 4) # (4,2), (4,4) + elif maxTileNumber % 3 == 0: + return self.geom(maxTileNumber / 3, 3) # (3,3), (4,3), (5,3) + elif maxTileNumber % 2 == 0: + return self.geom(maxTileNumber / 2, 2) # (2,2), (3,2), (5,2), (7,2) + else: + return self.geom(maxTileNumber, 1) + + \ No newline at end of file diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_csv.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_csv.py new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_mat.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_mat.py new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_features.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_features.py new file mode 100755 index 0000000000000000000000000000000000000000..6486b490795426a271bc3d6571e08ac2653eeefe --- /dev/null +++ b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_features.py @@ -0,0 +1,66 @@ +#! /usr/bin/env python +# This is an example Jython dropbox for importing feature vectors coming from analysis of image datasets + +import os +from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import * + +SEPARATOR = "," + +# Specific code which defines the feature vector values for the dataset.. +# Usually you will parse the content of the incoming file or directory to get the values. +# Here all the values are hard-coded for simplicity, +# but the example shows which calls you need to perform in your parser. +# Parameters +# incoming: java.io.File which points to the incoming dataset +def defineFeatures(featuresBuilder, incoming): + file = open(incoming.getPath()) + for header in file: + headerTokens = header.split(SEPARATOR) + featureCode = headerTokens[0] + featureValues = featuresBuilder.defineFeature(featureCode) + for rowValues in file: + rowTokens = rowValues.split(SEPARATOR) + rowLabel = rowTokens[0].strip() + if len(rowLabel) == 0: + break + for column in range(1,len(headerTokens)): + value = rowTokens[column].strip() + well = rowLabel + str(column) + featureValues.addValue(well, value) + +# Returns the code of the plate to which the dataset should be connected. +# Parameters +# incoming: java.io.File which points to the incoming dataset +def extractPlateCode(incoming): + return os.path.splitext(incoming.getName())[0] + +def extractSpaceCode(incoming): + return "TEST" + +# ---------------------------- +# --- boilerplate code which register one dataset with image analysis results on the well level +# --- Nothing has to be modified if your case is not complicated. +# ---------------------------- + +featuresBuilder = factory.createFeaturesBuilder() +defineFeatures(featuresBuilder, incoming) + +analysisRegistrationDetails = factory.createFeatureVectorRegistrationDetails(featuresBuilder, incoming) +tr = service.transaction(incoming, factory) +analysisDataset = tr.createNewDataSet(analysisRegistrationDetails) + +# set plate to which the dataset should be connected +sampleIdentifier = "/"+extractSpaceCode(incoming)+"/"+extractPlateCode(incoming) +plate = tr.getSample(sampleIdentifier) +analysisDataset.setSample(plate) + +# store the original file in the dataset. +tr.moveFile(incoming.getPath(), analysisDataset) + +# ---------------------------- +# --- optional: other standard operations on analysisDataset can be performed (see IDataSet interface) +# ---------------------------- + +analysisDataset.setFileFormatType("CSV") +analysisDataset.setDataSetType("HCS_ANALYSIS_WELL_FEATURES") +#analysisDataset.setParentDatasets(["20110302085840150-90"]) \ No newline at end of file diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_metadata.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_metadata.py new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_quality.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_quality.py new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_image_overview.py b/integration-tests/templates/data-ibrain2/scripts/hcs_image_overview.py new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_image_raw.py b/integration-tests/templates/data-ibrain2/scripts/hcs_image_raw.py new file mode 100755 index 0000000000000000000000000000000000000000..b5446e3157640066d4340c5373748f152b048ef3 --- /dev/null +++ b/integration-tests/templates/data-ibrain2/scripts/hcs_image_raw.py @@ -0,0 +1,71 @@ +#! /usr/bin/env python + +from commonImageDropbox import IBrain2ImageDataSetConfig +from commonDropbox import AcquiredDatasetMetadataParser + +""" Plate geometry which will be used. Other possible value: 96_WELLS_8X12 """ +PLATE_GEOMETRY = "384_WELLS_16X24" + +""" sample type code of the plate, needed if a new sample is registered automatically """ +PLATE_TYPE_CODE = "PLATE" +SIRNA_EXP_TYPE = "SIRNA_HCS" +PLATE_GEOMETRY_PROPERTY_CODE = "$PLATE_GEOMETRY" + +def createPlateWithExperimentIfNeeded(transaction, assayParser, plate, space): + project = assayParser.get(assayParser.EXPERIMENTER_PROPERTY) + experiment = assayParser.get(assayParser.ASSAY_ID_PROPERTY) + experimentDesc = assayParser.get(assayParser.ASSAY_DESC_PROPERTY) + experimentType = assayParser.get(assayParser.ASSAY_TYPE_PROPERTY) + + sampleIdentifier = "/"+space+"/"+plate + plate = transaction.getSample(sampleIdentifier) + if plate == None: + expIdentifier = "/"+space+"/"+project+"/"+experiment + experiment = transaction.getExperiment(expIdentifier) + if experiment == None: + experiment = transaction.createNewExperiment(expIdentifier, SIRNA_EXP_TYPE) + openbisExpDesc = experimentDesc + "\ntype: "+experimentType + experiment.setPropertyValue("DESCRIPTION", openbisExpDesc) + + plate = transaction.createNewSample(sampleIdentifier, PLATE_TYPE_CODE) + plate.setPropertyValue(PLATE_GEOMETRY_PROPERTY_CODE, PLATE_GEOMETRY) + plate.setExperiment(experiment) + +""" +TODO: +- +""" +if incoming.isDirectory(): + imageDataset = IBrain2ImageDataSetConfig() + imageDataset.setRawImageDatasetType() + metadataParser = AcquiredDatasetMetadataParser(incoming) + assayParser = AssayParser(incoming) + + plate = metadataParser.getPlateCode() + space = assayParser.get(assayParser.LAB_LEADER_PROPERTY) + + imageDataset.setPlate(space, plate) + imageDataset.setFileFormatType("TIFF") + imageDataset.setGenerateThumbnails(True) + imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE) + imageDataset.setRecognizedImageExtensions(["tif, tiff"]) + imageDataset.setStoreChannelsOnExperimentLevel(False) + + imageRegistrationDetails = factory.createImageRegistrationDetails(imageDataset, incoming) + for propertyCode, value in metadataParser.getPropertiesIter(): + imageRegistrationDetails.setPropertyValue(propertyCode, value) + + tr = service.transaction(incoming, factory) + + createPlateWithExperimentIfNeeded(tr, assayParser, plate, space) + dataset = tr.createNewDataSet(imageRegistrationDetails) + imageDataSetFolder = tr.moveFile(incoming.getPath(), dataset) + imageDatasetCode = dataset.getDataSetCode() + IBRAIN2Utils().createSuccessStatus(metadataParser.getIBrain2DatasetId(), imageDatasetCode, incoming) + print "Registered dataset:", imageDatasetCode + +# TODO: test this !!! +def rollback_transaction(service, transaction, algorithmRunner, throwable): + incoming = service.incomingDataSetFile + iBrain2DatasetId = AcquiredDatasetMetadataParser(incoming).getIBrain2DatasetId() + IBRAIN2Utils().createFailureStatus(iBrain2DatasetId, throwable.getMessage(), incoming) diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py b/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py new file mode 100755 index 0000000000000000000000000000000000000000..409e1a3331de11a9a13efa829300df5468789208 --- /dev/null +++ b/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py @@ -0,0 +1,34 @@ +#! /usr/bin/env python +# This is a dropbox for importing HCS segmentation image datasets + +import IBrain2ImageDataSetConfig from common-image-dropbox + +""" +TODO: +- check if parent exists and exit otherwise (ask Eva) +- +""" +if incoming.isDirectory(): + imageDataset = IBrain2ImageDataSetConfig() + imageDataset.setSegmentationImageDatasetType() + plate = incoming.getName().split("_")[2][1:] + space = "IBRAIN2" + #space = "TEST" + imageDataset.setPlate(space, plate) + imageDataset.setFileFormatType("PNG") + imageDataset.setGenerateThumbnails(True) + imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE) + imageDataset.setRecognizedImageExtensions(["png"]) + imageDataset.setStoreChannelsOnExperimentLevel(False) + imageDataset.setOriginalDataStorageFormat(OriginalDataStorageFormat.HDF5) + + imageRegistrationDetails = factory.createImageRegistrationDetails(imageDataset, incoming) + info = imageRegistrationDetails.getDataSetInformation() + info.getImageStorageConfiguraton().getThumbnailsStorageFormat().setHighQuality(True) + tr = service.transaction(incoming, factory) + + dataset = tr.createNewDataSet(imageRegistrationDetails) + imageDataSetFolder = tr.moveFile(incoming.getPath(), dataset) + imageDatasetCode = dataset.getDataSetCode() + print "Registered dataset:", imageDatasetCode + \ No newline at end of file