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

LMS-2069 iBrain2 dropboxes: HCS_ANALYSIS_WELL_FEATURES dropbox

SVN: 20349
parent 76b989e9
No related branches found
No related tags found
No related merge requests found
...@@ -10,6 +10,7 @@ class AbstractPropertiesParser: ...@@ -10,6 +10,7 @@ class AbstractPropertiesParser:
path = os.path.join(incoming, fileName) path = os.path.join(incoming, fileName)
self._propertiesDict = self._parseMetadata(path) self._propertiesDict = self._parseMetadata(path)
# Returns: name of the file
def _findFile(self, incoming, prefix): def _findFile(self, incoming, prefix):
for file in os.listdir(incoming): for file in os.listdir(incoming):
if file.startswith(prefix): if file.startswith(prefix):
...@@ -184,30 +185,34 @@ class RegistrationConfirmationUtils: ...@@ -184,30 +185,34 @@ class RegistrationConfirmationUtils:
# -------------- # --------------
def setImageDatasetPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory): def setImageDatasetPropertiesAndRegister(imageDataset, metadataParser, incoming, service, factory):
imageRegistrationDetails = factory.createImageRegistrationDetails(imageDataset, incoming) iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
for propertyCode, value in metadataParser.getDatasetPropertiesIter(): imageRegistrationDetails = factory.createImageRegistrationDetails(imageDataset, incoming)
imageRegistrationDetails.setPropertyValue(propertyCode, value) for propertyCode, value in metadataParser.getDatasetPropertiesIter():
imageRegistrationDetails.setPropertyValue(propertyCode, value)
tr = service.transaction(incoming, factory)
dataset = tr.createNewDataSet(imageRegistrationDetails) tr = service.transaction(incoming, factory)
dataset.setParentDatasets([metadataParser.getParentDatasetPermId()]) dataset = tr.createNewDataSet(imageRegistrationDetails)
imageDataSetFolder = tr.moveFile(incoming.getPath(), dataset) dataset.setParentDatasets([metadataParser.getParentDatasetPermId()])
if tr.commit(): imageDataSetFolder = tr.moveFile(incoming.getPath(), dataset)
if tr.commit():
createSuccessStatus(iBrain2DatasetId, dataset, incoming.getPath()) createSuccessStatus(iBrain2DatasetId, dataset, incoming.getPath())
def registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataParser, datasetType, fileFormatType): def registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataParser, datasetType, fileFormatType):
transaction = service.transaction(incoming, factory)
dataset = transaction.createNewDataSet()
dataset.setDataSetType(datasetType)
dataset.setFileFormatType(fileFormatType)
registerDerivedDataset(state, transaction, dataset, incoming, metadataParser)
def registerDerivedDataset(state, transaction, dataset, incoming, metadataParser):
iBrain2DatasetId = metadataParser.getIBrain2DatasetId() iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
openbisDatasetParent = metadataParser.getParentDatasetPermId() openbisDatasetParent = metadataParser.getParentDatasetPermId()
(space, plate) = tryGetConnectedPlate(state, openbisDatasetParent, iBrain2DatasetId, incoming.getPath()) (space, plate) = tryGetConnectedPlate(state, openbisDatasetParent, iBrain2DatasetId, incoming.getPath())
if plate == None: if plate == None:
return return
transaction = service.transaction(incoming, factory)
dataset = transaction.createNewDataSet()
dataset.setDataSetType(datasetType)
dataset.setFileFormatType(fileFormatType)
dataset.setSample(transaction.getSample('/'+space+'/'+plate)) dataset.setSample(transaction.getSample('/'+space+'/'+plate))
dataset.setMeasuredData(False) dataset.setMeasuredData(False)
for propertyCode, value in metadataParser.getDatasetPropertiesIter(): for propertyCode, value in metadataParser.getDatasetPropertiesIter():
...@@ -218,6 +223,12 @@ def registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataPa ...@@ -218,6 +223,12 @@ def registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataPa
if transaction.commit(): if transaction.commit():
createSuccessStatus(iBrain2DatasetId, dataset, incoming.getPath()) createSuccessStatus(iBrain2DatasetId, dataset, incoming.getPath())
def findCSVFile(dir):
for file in os.listdir(dir):
if file.endswith(".csv"):
return dir + "/" + file
raise Exception("No CSV file has been found in "+dir)
""" """
Returns: Returns:
(plateSpace, plateCode) tuple for the plate connected with the specified dataset (plateSpace, plateCode) tuple for the plate connected with the specified dataset
......
#! /usr/bin/env python #! /usr/bin/env python
# This is an example Jython dropbox for importing feature vectors coming from analysis of image datasets # 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 * from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import *
import commonImageDropbox
import commonDropbox
reload(commonImageDropbox)
reload(commonDropbox)
# Global variable where we set the iBrain2 id of the dataset at the beginning,
# so that the rollback can use it as well.
iBrain2DatasetId = None
SEPARATOR = "," SEPARATOR = ","
# Specific code which defines the feature vector values for the dataset.. # 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. # 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 # Parameters
# incoming: java.io.File which points to the incoming dataset # incomingCsvPath: path which points to the incoming CSV file
def defineFeatures(featuresBuilder, incoming): def defineFeatures(incomingCsvFile):
file = open(incoming.getPath()) featuresBuilder = factory.createFeaturesBuilder()
file = open(incomingCsvFile)
for header in file: for header in file:
headerTokens = header.split(SEPARATOR) headerTokens = header.split(SEPARATOR)
featureCode = headerTokens[0] featureCode = headerTokens[0]
...@@ -27,40 +34,24 @@ def defineFeatures(featuresBuilder, incoming): ...@@ -27,40 +34,24 @@ def defineFeatures(featuresBuilder, incoming):
value = rowTokens[column].strip() value = rowTokens[column].strip()
well = rowLabel + str(column) well = rowLabel + str(column)
featureValues.addValue(well, value) featureValues.addValue(well, value)
return featuresBuilder
# Returns the code of the plate to which the dataset should be connected.
# Parameters def register(incomingPath):
# incoming: java.io.File which points to the incoming dataset metadataParser = commonDropbox.DerivedDatasetMetadataParser(incomingPath)
def extractPlateCode(incoming): global iBrain2DatasetId
return os.path.splitext(incoming.getName())[0] iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
def extractSpaceCode(incoming): transaction = service.transaction(incoming, factory)
return "TEST" incomingCsvFile = commonDropbox.findCSVFile(incomingPath)
featuresBuilder = defineFeatures(incomingCsvFile)
# ---------------------------- analysisRegistrationDetails = factory.createFeatureVectorRegistrationDetails(featuresBuilder, incoming)
# --- boilerplate code which register one dataset with image analysis results on the well level dataset = transaction.createNewDataSet(analysisRegistrationDetails)
# --- Nothing has to be modified if your case is not complicated. dataset.setDataSetType('HCS_ANALYSIS_WELL_FEATURES')
# ---------------------------- dataset.setFileFormatType('CSV')
commonDropbox.registerDerivedDataset(state, transaction, dataset, incoming, metadataParser)
featuresBuilder = factory.createFeaturesBuilder()
defineFeatures(featuresBuilder, incoming) def rollback_transaction(service, transaction, algorithmRunner, throwable):
commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
analysisRegistrationDetails = factory.createFeatureVectorRegistrationDetails(featuresBuilder, incoming)
tr = service.transaction(incoming, factory) if incoming.isDirectory():
analysisDataset = tr.createNewDataSet(analysisRegistrationDetails) register(incoming.getPath())
\ No newline at end of file
# 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
...@@ -19,16 +19,7 @@ def register(incomingPath): ...@@ -19,16 +19,7 @@ def register(incomingPath):
if plate == None: if plate == None:
return return
imageDataset = commonImageDropbox.IBrain2ImageDataSetConfig() #TODO: finish me !!!!
imageDataset.setOverviewImageDatasetType()
imageDataset.setPlate(space, plate)
imageDataset.setFileFormatType("JPG")
imageDataset.setRecognizedImageExtensions(["jpg", "jpeg", "png", "gif"])
imageDataset.setStoreChannelsOnExperimentLevel(False)
imageDataset.setGenerateThumbnails(True)
imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE)
commonDropbox.setPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory)
def rollback_transaction(service, transaction, algorithmRunner, throwable): def rollback_transaction(service, transaction, algorithmRunner, throwable):
commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming) commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
......
...@@ -29,7 +29,7 @@ def register(incomingPath): ...@@ -29,7 +29,7 @@ def register(incomingPath):
imageDataset.setGenerateThumbnails(True) imageDataset.setGenerateThumbnails(True)
imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE) imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE)
commonDropbox.setImageDatasetPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory) commonDropbox.setImageDatasetPropertiesAndRegister(imageDataset, metadataParser, incoming, service, factory)
def rollback_transaction(service, transaction, algorithmRunner, throwable): def rollback_transaction(service, transaction, algorithmRunner, throwable):
commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming) commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
......
...@@ -33,7 +33,7 @@ def register(incomingPath): ...@@ -33,7 +33,7 @@ def register(incomingPath):
imageDataset.setStoreChannelsOnExperimentLevel(False) imageDataset.setStoreChannelsOnExperimentLevel(False)
imageDataset.setOriginalDataStorageFormat(OriginalDataStorageFormat.HDF5) imageDataset.setOriginalDataStorageFormat(OriginalDataStorageFormat.HDF5)
commonDropbox.setImageDatasetPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory) commonDropbox.setImageDatasetPropertiesAndRegister(imageDataset, metadataParser, incoming, service, factory)
def rollback_transaction(service, transaction, algorithmRunner, throwable): def rollback_transaction(service, transaction, algorithmRunner, throwable):
commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming) commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
......
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