Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env python
# This is an Jython dropbox for importing HCS image datasets produced by the scripts that generate platonic screening data
import os
from ch.systemsx.cisd.openbis.dss.etl.dto.api.v1 import SimpleImageDataConfig, ImageMetadata, Location
from ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto import Geometry
class ImageDataSetFlexible(SimpleImageDataConfig):
"""
Extracts tile number, channel code and well code for a given relative path to an image.
Will be called for each file found in the incoming directory which has the allowed image extension.
Example file name: bDZ01-1A_wD17_s3_z123_t321_cGFP
Returns:
ImageMetadata
"""
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 = token_dict["c"]
return image_tokens
"""
Overrides the default implementation which returns (1, maxTileNumber) geometry.
Calculates the width and height of the matrix of tiles (a.k.a. fields or sides) in the well.
Parameter imageMetadataList: a list of metadata for each encountered image
Parameter maxTileNumber: the biggest tile number among all encountered images
Returns:
Geometry
"""
def getTileGeometry(self, imageTokens, maxTileNumber):
return Geometry.createFromRowColDimensions(maxTileNumber / 3, 3);
"""
Overrides the default implementation which does the same thing (to demonstrate how this can be done).
For a given tile number and tiles geometry returns (x,y) which describes where the tile is
located on the well.
Parameter tileNumber: number of the tile
Parameter tileGeometry: the geometry of the well matrix
Returns:
Location
"""
def getTileCoordinates(self, tileNumber, tileGeometry):
columns = tileGeometry.getWidth()
row = ((tileNumber - 1) / columns) + 1
col = ((tileNumber - 1) % columns) + 1
return Location(row, col)
if incoming.isDirectory():
imageDataset = ImageDataSetFlexible()
imageDataset.setRawImageDatasetType()
imageDataset.setPlate("PLATONIC", incoming.getName())
factory.registerImageDataset(imageDataset, incoming, service)