Warning: Can't synchronize with repository "(default)" (/home/git/ome.git does not appear to be a Git repository.). Look in the Trac log for more information.

Ticket #2893: wells.py

File wells.py, 4.1 KB (added by jmoore, 14 years ago)
Line 
1import omero
2from omero_sys_ParametersI import ParametersI
3
4import time
5import sys
6import itertools
7import logging
8
9LOGFORMAT =  """%(asctime)s %(levelname)-5.5s [%(name)40s] (%(threadName)-10s) %(message)s"""
10logging.basicConfig(level=10, format=LOGFORMAT)
11
12class Test(object):
13
14    def __init__(self, user, password, host="localhost", port=4063):
15        self.client = omero.client(host, port)
16        self.session = self.client.createSession(user, password)
17        self.update = self.session.getUpdateService()
18        self.query = self.session.getQueryService()
19
20    def create_screen(self):
21        s = omero.model.ScreenI()
22        s.name = omero.rtypes.rstring("test-screen")
23        s = self.update.saveAndReturnObject(s)
24        return s.id
25
26    def create_acquisition(self, screen_id):
27        ac = omero.model.ScreenAcquisitionI()
28        ac.startTime = omero.rtypes.rtime(time.time() * 1e3)
29        ac.endTime = omero.rtypes.rtime(time.time() * 1e3)
30        ac.screen = omero.model.ScreenI(screen_id, False)
31        ac = self.update.saveAndReturnObject(ac)
32        return ac.id
33
34    def create_plate(self, rows=1, cols=1):
35        p = omero.model.PlateI()
36        p.name = omero.rtypes.rstring("test-plate")
37        for r in range(rows):
38            for c in range(cols):
39                w = omero.model.WellI()
40                w.plate = p
41                w.column = omero.rtypes.rint(c)
42                w.row = omero.rtypes.rint(r)
43                p.addWell(w)
44
45        p = self.update.saveAndReturnObject(p)
46        return p.id
47
48    def get_well(self, plate_id, row, col):
49        query = '''
50        select w from Well w
51        left outer join fetch w.wellSamples
52        where w.row = :row and
53        w.column = :col and
54        w.plate.id = :pid'''
55        params = ParametersI()
56        params.add('pid', plate_id)
57        params.add('row', omero.rtypes.rint(row))
58        params.add('col', omero.rtypes.rint(col))
59        return self.query.findByQuery(query, params)
60
61    def create_image(self):
62        i = omero.model.ImageI()
63        i.name = omero.rtypes.rstring("test-image")
64        i.acquisitionDate = omero.rtypes.rtime(time.time()*1e3)
65        i = self.update.saveAndReturnObject(i)
66        return i.id
67
68    def create_well_sample(self, plate_id, acquisition_id, row, col):
69        w = self.get_well(plate_id, row, col)
70        image_id = self.create_image()
71
72        ws = omero.model.WellSampleI()
73        ws.well = omero.model.WellI(w.id, False)
74        ws.image = omero.model.ImageI(image_id, False)
75        w.addWellSample(ws)
76        w = self.update.saveAndReturnObject(w)
77
78        ws = w.getWellSample(w.sizeOfWellSamples()-1)
79        ws = omero.model.WellSampleI(ws.id.val, False)
80
81        l = omero.model.ScreenAcquisitionWellSampleLinkI()
82        l.parent = omero.model.ScreenAcquisitionI(acquisition_id, False)
83        l.child = omero.model.WellSampleI(ws.id, False)
84        # comment the next line and the update log entry disappears
85        self.update.saveObject(l)
86        return ws.id
87
88
89def main(rows, cols, samples):
90    logging.info("login")
91    test = Test(*sys.argv[1:])
92    logging.info("create screen")
93    screen_id = test.create_screen()
94    logging.info("create acquisition")
95    acquisition_id = test.create_acquisition(screen_id)
96    logging.info("create plate")
97    plate_id = test.create_plate(rows, cols)
98    for r, c, s in itertools.product(range(rows),
99                                     range(cols),
100                                     range(samples)):
101        logging.info("creating sample-%i for well %i,%i" % (s, r, c))
102        test.create_well_sample(plate_id, acquisition_id, r, c)
103
104
105if __name__ == "__main__":
106    # create 1x1 plate with 2 samples
107    import threading
108    import random
109
110    stop=[False]
111    class T(threading.Thread):
112        def run(self):
113            while not stop[0]:
114                cols=random.choice([2,3,4])
115                rows=random.choice([2,3,4])
116                samples=random.choice([2,4,8])
117                main(2,2,8)
118
119
120threads = [T() for x in range(8)]
121for t in threads: t.start()
122
123try:
124    sys.stdin.read()
125except KeyboardInterrupt:
126    pass
127stop[0] = True
128
129for t in threads: t.join()

1.3.13-PRO © 2008-2011 Agilo Software all rights reserved (this page was served in: 0.62488 sec.)

We're Hiring!