comparison omero_roi_upload.py @ 3:83ccd2b525e5 draft

planemo upload for repository https://github.com/Helmholtz-UFZ/galaxy-tools/tree/main/tools/omero commit 266752b0162fbdb32f132a6702cb661ae36f48f0
author ufz
date Thu, 12 Sep 2024 16:30:43 +0000
parents 267227e757cb
children
comparison
equal deleted inserted replaced
2:267227e757cb 3:83ccd2b525e5
1 import argparse 1 import argparse
2 import json
2 import re 3 import re
3 4
5 import numpy as np
4 import pandas as pd 6 import pandas as pd
5 from ezomero import connect, post_roi 7 from ezomero import connect, post_roi
6 from ezomero.rois import Ellipse, Label, Line, Point, Polygon, Polyline, Rectangle 8 from ezomero.rois import Ellipse, Label, Line, Point, Polygon, Polyline, Rectangle
7 9
8 10
33 x_rad=row['x_rad'], 35 x_rad=row['x_rad'],
34 y_rad=row['y_rad'], 36 y_rad=row['y_rad'],
35 z=row.get('z'), 37 z=row.get('z'),
36 c=row.get('c'), 38 c=row.get('c'),
37 t=row.get('t'), 39 t=row.get('t'),
40 label=row.get('label'),
38 fill_color=parse_color(row.get('fill_color')), 41 fill_color=parse_color(row.get('fill_color')),
39 stroke_color=parse_color(row.get('stroke_color')), 42 stroke_color=parse_color(row.get('stroke_color')),
40 stroke_width=row.get('stroke_width') 43 stroke_width=row.get('stroke_width')
41 ) 44 )
42 elif shape_type == 'Label': 45 elif shape_type == 'Label':
58 y1=row['y1'], 61 y1=row['y1'],
59 x2=row['x2'], 62 x2=row['x2'],
60 y2=row['y2'], 63 y2=row['y2'],
61 markerStart=row.get('markerStart', None), 64 markerStart=row.get('markerStart', None),
62 markerEnd=row.get('markerEnd', None), 65 markerEnd=row.get('markerEnd', None),
63 label=row.get('label', None), 66 label=row.get('label'),
64 z=row.get('z'), 67 z=row.get('z'),
65 c=row.get('c'), 68 c=row.get('c'),
66 t=row.get('t'), 69 t=row.get('t'),
67 fill_color=parse_color(row.get('fill_color')), 70 fill_color=parse_color(row.get('fill_color')),
68 stroke_color=parse_color(row.get('stroke_color')), 71 stroke_color=parse_color(row.get('stroke_color')),
73 x=row['x'], 76 x=row['x'],
74 y=row['y'], 77 y=row['y'],
75 z=row.get('z'), 78 z=row.get('z'),
76 c=row.get('c'), 79 c=row.get('c'),
77 t=row.get('t'), 80 t=row.get('t'),
81 label=row.get('label'),
78 fill_color=parse_color(row.get('fill_color')), 82 fill_color=parse_color(row.get('fill_color')),
79 stroke_color=parse_color(row.get('stroke_color')), 83 stroke_color=parse_color(row.get('stroke_color')),
80 stroke_width=row.get('stroke_width') 84 stroke_width=row.get('stroke_width')
81 ) 85 )
82 elif shape_type == 'Polygon': 86 elif shape_type == 'Polygon':
83 shape = Polygon( 87 shape = Polygon(
84 points=parse_points(row['points']), 88 points=parse_points(row['points']),
85 z=row.get('z'), 89 z=row.get('z'),
86 c=row.get('c'), 90 c=row.get('c'),
87 t=row.get('t'), 91 t=row.get('t'),
92 label=row.get('label'),
88 fill_color=parse_color(row.get('fill_color')), 93 fill_color=parse_color(row.get('fill_color')),
89 stroke_color=parse_color(row.get('stroke_color')), 94 stroke_color=parse_color(row.get('stroke_color')),
90 stroke_width=row.get('stroke_width') 95 stroke_width=row.get('stroke_width')
91 ) 96 )
92 elif shape_type == 'Polyline': 97 elif shape_type == 'Polyline':
93 shape = Polyline( 98 shape = Polyline(
94 points=parse_points(row['points']), 99 points=parse_points(row['points']),
95 z=row.get('z'), 100 z=row.get('z'),
96 c=row.get('c'), 101 c=row.get('c'),
97 t=row.get('t'), 102 t=row.get('t'),
103 label=row.get('label'),
98 fill_color=parse_color(row.get('fill_color')), 104 fill_color=parse_color(row.get('fill_color')),
99 stroke_color=parse_color(row.get('stroke_color')), 105 stroke_color=parse_color(row.get('stroke_color')),
100 stroke_width=row.get('stroke_width') 106 stroke_width=row.get('stroke_width')
101 ) 107 )
102 elif shape_type == 'Rectangle': 108 elif shape_type == 'Rectangle':
106 width=row['width'], 112 width=row['width'],
107 height=row['height'], 113 height=row['height'],
108 z=row.get('z'), 114 z=row.get('z'),
109 c=row.get('c'), 115 c=row.get('c'),
110 t=row.get('t'), 116 t=row.get('t'),
117 label=row.get('label'),
111 fill_color=parse_color(row.get('fill_color')), 118 fill_color=parse_color(row.get('fill_color')),
112 stroke_color=parse_color(row.get('stroke_color')), 119 stroke_color=parse_color(row.get('stroke_color')),
113 stroke_width=row.get('stroke_width') 120 stroke_width=row.get('stroke_width')
114 ) 121 )
115 return shape 122 return shape
117 124
118 def main(input_file, conn, image_id, log_file): 125 def main(input_file, conn, image_id, log_file):
119 # Open log file 126 # Open log file
120 with open(log_file, 'w') as log: 127 with open(log_file, 'w') as log:
121 df = pd.read_csv(input_file, sep='\t') 128 df = pd.read_csv(input_file, sep='\t')
129 # Replace nan to none
130 df = df.replace({np.nan: None})
122 for index, row in df.iterrows(): 131 for index, row in df.iterrows():
123 msg = f"Processing row {index + 1}/{len(df)}: {row.to_dict()}" 132 msg = f"Processing row {index + 1}/{len(df)}: {row.to_dict()}"
124 print(msg) 133 print(msg)
125 log.write(msg + "\n") 134 log.write(msg + "\n")
126 shape = create_shape(row) 135 shape = create_shape(row)
141 parser = argparse.ArgumentParser( 150 parser = argparse.ArgumentParser(
142 description="Create shapes from a tabular file and optionally post them as an ROI to OMERO.") 151 description="Create shapes from a tabular file and optionally post them as an ROI to OMERO.")
143 parser.add_argument("--input_file", help="Path to the input tabular file.") 152 parser.add_argument("--input_file", help="Path to the input tabular file.")
144 parser.add_argument("--image_id", type=int, required=True, help="ID of the image to which the ROI will be linked") 153 parser.add_argument("--image_id", type=int, required=True, help="ID of the image to which the ROI will be linked")
145 parser.add_argument("--host", type=str, required=True, help="OMERO server host") 154 parser.add_argument("--host", type=str, required=True, help="OMERO server host")
146 parser.add_argument("--user", type=str, required=True, help="OMERO username") 155 parser.add_argument("--credential-file", dest="credential_file", type=str, required=True, help="Credential file (JSON file with username and password for OMERO)")
147 parser.add_argument("--psw", type=str, required=True, help="OMERO password")
148 parser.add_argument("--port", type=int, default=4064, help="OMERO server port") 156 parser.add_argument("--port", type=int, default=4064, help="OMERO server port")
149 parser.add_argument("--log_file", type=str, default="process.txt", help="Log file path") 157 parser.add_argument("--log_file", type=str, default="process.txt", help="Log file path")
150 158
151 args = parser.parse_args() 159 args = parser.parse_args()
152 160
161 with open(args.credential_file, 'r') as f:
162 crds = json.load(f)
163
153 conn = connect( 164 conn = connect(
154 host=args.host, 165 host=args.host,
155 user=args.user, 166 user=crds['username'],
156 password=args.psw, 167 password=crds['password'],
157 port=args.port, 168 port=args.port,
158 group="", 169 group="",
159 secure=True 170 secure=True
160 ) 171 )
161 172