-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsqueeze_stack.py
More file actions
92 lines (76 loc) · 3 KB
/
Copy pathsqueeze_stack.py
File metadata and controls
92 lines (76 loc) · 3 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
if __name__ == "__main__" and __package__ is None:
__package__ = "renderapps.materialize.make_downsample_image_stack"
import json
import os
import renderapi
from ..module.render_module import RenderModule,RenderParameters
from json_module import InputFile,InputDir,OutputDir
import marshmallow as mm
from functools import partial
import glob
import time
import numpy as np
import time
from PIL import Image
import tifffile
from functools import reduce
import operator
#modified and fixed by Sharmishtaa Seshamani
example_parameters={
"render":{
"host":"ibs-forrestc-ux1",
"port":80,
"client_scripts":"/var/www/render/render-ws-java-client/src/main/scripts",
"owner":"S3_Run1",
"project":"S3_Run1_Master"
},
"input_stack": "Stitched_DAPI_1_dropped",
"output_stack": "Stitched_DAPI_1_dropped_Squeezed",
"output_directory": "/nas3/data/S3_Run1_Igor/processed/tilespecs_squeezed",
"pool_size":20
}
class SqueezeStackParameters(RenderParameters):
input_stack = mm.fields.Str(required=True,
metadata={'description':'input stacks'})
output_stack = mm.fields.Str(required=True,
metadata={'description':'output stack to name'})
output_directory = mm.fields.Str(required=True,
metadata={'description':'input stacks'})
pool_size = mm.fields.Int(required=False,default=20,
metadata={'description':'number of parallel threads to use'})
def process_z(stack,render,output_directory,Z):
tilespecs = renderapi.tilespec.get_tile_specs_from_z(stack,Z[0],render=render)
for ts in tilespecs:
t = ts.to_dict()
t['z'] = Z[1]
ts.from_dict(t)
tilespecfilename = os.path.join(output_directory,'tilespec_%04d.json'%Z[1])
print(tilespecfilename)
fp = open(tilespecfilename,'w')
json.dump([ts.to_dict() for ts in tilespecs] ,fp,indent=4)
fp.close()
class SqueezeStack(RenderModule):
def __init__(self,schema_type=None,*args,**kwargs):
if schema_type is None:
schema_type = SqueezeStackParameters
super(SqueezeStack,self).__init__(schema_type=schema_type,*args,**kwargs)
def run(self):
render=self.render
if not os.path.exists(self.args['output_directory']):
os.mkdir(self.args['output_directory'])
z = self.render.run(renderapi.stack.get_z_values_for_stack,self.args['input_stack'])
newz = range(0,len(z))
Z = []
for i in range(0,len(z)):
Z.append( [z[i], newz[i]])
mypartial = partial(process_z,self.args['input_stack'],render,self.args['output_directory'])
with renderapi.client.WithPool(self.args['pool_size']) as pool:
pool.map(mypartial,Z)
outstack = self.args['output_stack']
jsonfiles = glob.glob("%s/*.json"%self.args['output_directory'])
renderapi.stack.create_stack(outstack,render=self.render,cycleNumber=10,cycleStepNumber=1)
renderapi.client.import_jsonfiles_parallel(outstack,jsonfiles,render=self.render)
if __name__ == "__main__":
mod = SqueezeStack(input_data=example_parameters)
#mod = SqueezeStack(schema_type=MakeDownsampleSectionStackParameters)
mod.run()