-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsqueeze_stack.py
More file actions
93 lines (77 loc) · 2.98 KB
/
Copy pathsqueeze_stack.py
File metadata and controls
93 lines (77 loc) · 2.98 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
93
if __name__ == "__main__" and __package__ is None:
__package__ = "renderapps.stack.squeeze_stack"
import json
import os
import renderapi
from ..module.render_module import RenderModule,RenderParameters
#from json_module import InputFile,InputDir,OutputDir
from argschema.fields import Str, Int
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 = Str(required=True,
metadata={'description':'input stacks'})
output_stack = Str(required=True,
metadata={'description':'output stack to name'})
output_directory = Str(required=True,
metadata={'description':'input stacks'})
pool_size = 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()