Skip to content

Commit a4287e5

Browse files
committed
merging changes from sharmi
2 parents 0a5f073 + 0cb2a2c commit a4287e5

28 files changed

+2144
-146
lines changed

allen_utils/reorg_setup.sh

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
docker pull atbigdawg:5000/fcollman/render-python:master
2+
docker tag atbigdawg:5000/fcollman/render-python:master fcollman/render-python
3+
docker build -t fcollman/render-python-apps:reorg .
4+
docker tag fcollman/render-python-apps:reorg fcollman/render-python-apps:reorg_testsharmi
5+
#docker push atbigdawg:5000/fcollman/render-python-apps:reorg
6+
docker kill renderapps_testsharmi
7+
docker rm renderapps_testsharmi
8+
docker run -d --name renderapps_testsharmi \
9+
-v /nas2:/nas2 \
10+
-v /nas:/nas \
11+
-v /nas3:/nas3 \
12+
-v /nas4:/nas4 \
13+
-v /data:/data \
14+
-v /pipeline:/pipeline \
15+
-v /pipeline/sharmi/Sharmi_tools/render-python-apps:/usr/local/render-python-apps \
16+
-v /etc/hosts:/etc/hosts \
17+
-p 9999:9999 \
18+
-e "PASSWORD=$JUPYTERPASSWORD" \
19+
-i -t fcollman/render-python-apps:reorg_testsharmi
20+
21+

append_fast_stacks.py

+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
import argparse
2+
import json
3+
import os
4+
import pandas as pd
5+
import subprocess
6+
import copy
7+
import renderapi
8+
from renderapi.tilespec import TileSpec,Layout,MipMapLevel
9+
from renderapi.transform import AffineModel
10+
from create_mipmaps import create_mipmaps
11+
my_env = os.environ.copy()
12+
from itertools import izip_longest
13+
from pathos.multiprocessing import Pool
14+
from render_module import RenderModule,RenderParameters
15+
from json_module import InputFile,InputDir
16+
import marshmallow as mm
17+
18+
class CreateFastStacksParameters(RenderParameters):
19+
statetableFile = InputFile(required=True,
20+
metadata={'description':'state table file'})
21+
projectDirectory = InputDir(required=True,
22+
metadata={'description':'path to project root'})
23+
outputStackPrefix = mm.fields.Str(required=False,default="ACQ",
24+
metadata={'description':'prefix to include in front of channel name for render stack'})
25+
pool_size = mm.fields.Int(require=False,default=20,
26+
metadata={'description':'number of parallel threads to use'})
27+
28+
def make_tilespec_from_statetable (df,rootdir,outputProject,outputOwner,outputStack,minval=0,maxval=50000):
29+
df = df[df['zstack']==0]
30+
#ribbons = df.groupby('ribbon')
31+
#zoffset=0
32+
33+
#for ribbnum,ribbon in ribbons:
34+
# ribbon.loc[ribbon.index,'z']=ribbon['section']+zoffset
35+
# zoffset += ribbon['section'].max()+1
36+
# df.loc[ribbon.index,'z']=ribbon['z'].values
37+
38+
39+
mipmap_args = []
40+
tilespecpaths = []
41+
for ((ch,sess),chgroup) in df.groupby(['ch_name','session']):
42+
print ch,sess
43+
44+
for ((rib,sect),group) in chgroup.groupby(['ribbon','section']):
45+
tilespeclist=[]
46+
z=0
47+
for ind,row in group.iterrows():
48+
filepath=row.full_path
49+
fileparts=filepath.split(os.path.sep)[1:]
50+
tilespecdir = rootdir + "/processed/downsamp_tilespec/"+fileparts[5]+"/"+fileparts[6]+"/"+fileparts[7]
51+
#print tilespecdir
52+
if not os.path.isdir(tilespecdir):
53+
os.makedirs(tilespecdir)
54+
downdir = rootdir+"/processed/downsamp_images/"+fileparts[5]+"/"+fileparts[6]+"/"+fileparts[7]
55+
#print "This is the Down Sampled Directory: %s"%downdir
56+
57+
if not os.path.exists(downdir):
58+
os.makedirs(downdir)
59+
60+
#construct command for creating mipmaps for this tilespec
61+
#downcmd = ['python','create_mipmaps.py','--inputImage',filepath,'--outputDirectory',downdir,'--mipmaplevels','1','2','3']
62+
#cmds.append(downcmd)
63+
mipmap_args.append((filepath,downdir))
64+
layout = Layout(sectionId=row.ribbon*1000+row.section,
65+
scopeId='Leica',
66+
cameraId='zyla',
67+
imageRow=0,
68+
imageCol=0,
69+
stageX = row.xstage,
70+
stageY = row.ystage,
71+
rotation = 0.0,
72+
pixelsize = row.scale_x)
73+
74+
mipmap0 = MipMapLevel(level=0,imageUrl=row.full_path)
75+
mipmaplevels=[mipmap0]
76+
filename = "%s_S%04d_F%04d_Z%02d.tif"%(row.ch_name,row.section,row.frame,0)
77+
for i in range(1,4):
78+
scUrl = 'file:' + os.path.join(downdir,filename[0:-4]+'_mip0%d.jpg'%i)
79+
mml = MipMapLevel(level=i,imageUrl=scUrl)
80+
mipmaplevels.append(mml)
81+
82+
tform = AffineModel(M00=row.a00,
83+
M01=row.a01,
84+
M10=row.a10,
85+
M11=row.a11,
86+
B0=row.a02,
87+
B1=row.a12)
88+
89+
tilespeclist.append(TileSpec(tileId=row.tileID,
90+
frameId = row.frame,
91+
z=row.z,
92+
width=row.width,
93+
height=row.height,
94+
mipMapLevels=mipmaplevels,
95+
tforms=[tform],
96+
minint=minval,
97+
maxint=maxval,
98+
layout= layout))
99+
z = row.z
100+
101+
json_text=json.dumps([t.to_dict() for t in tilespeclist],indent=4)
102+
json_file = os.path.join(tilespecdir,outputProject+'_'+outputOwner+'_'+outputStack+'_%04d.json'%z)
103+
fd=open(json_file, "w")
104+
fd.write(json_text)
105+
fd.close()
106+
tilespecpaths.append(json_file)
107+
return tilespecpaths,mipmap_args
108+
109+
def create_mipmap_from_tuple(mipmap_tuple):
110+
(filepath,downdir)=mipmap_tuple
111+
return create_mipmaps(filepath,downdir)
112+
113+
class CreateFastStack(RenderModule):
114+
def __init__(self,schema_type=None,*args,**kwargs):
115+
if schema_type is None:
116+
schema_type = CreateFastStacksParameters
117+
118+
super(CreateFastStack,self).__init__(schema_type=schema_type,*args,**kwargs)
119+
def run(self):
120+
outputProject=self.args['render']['project']
121+
outputOwner = self.args['render']['owner']
122+
statetablefile = self.args['statetableFile']
123+
rootdir = self.args['projectDirectory']
124+
125+
df = pd.read_csv(statetablefile)
126+
ribbons = df.groupby('ribbon')
127+
k=0
128+
pool = Pool(self.args['pool_size'])
129+
for ribnum,ribbon in ribbons:
130+
mydf = ribbon.groupby('ch_name')
131+
for channum,chan in mydf:
132+
outputStack = self.args['outputStackPrefix'] + '_%s'%(channum)
133+
134+
self.logger.info("creating tilespecs and cmds....")
135+
tilespecpaths,mipmap_args = make_tilespec_from_statetable(chan,rootdir,outputProject,outputOwner,outputStack,0,65000)
136+
self.logger.info("importing tilespecs into render....")
137+
self.logger.info("creating downsampled images ...")
138+
139+
results=pool.map(create_mipmap_from_tuple,mipmap_args)
140+
141+
#groups = [(subprocess.Popen(cmd,\
142+
# stdout=subprocess.PIPE) for cmd in cmds)] \
143+
# * self.args['pool_size'] # itertools' grouper recipe
144+
#for processes in izip_longest(*groups): # run len(processes) == limit at a time
145+
# for p in filter(None, processes):
146+
# p.wait()
147+
self.logger.info("uploading to render ...")
148+
if k==0:
149+
#renderapi.stack.delete_stack(outputStack,owner=outputOwner,
150+
#project=outputProject,render=self.render)
151+
renderapi.stack.create_stack(outputStack,owner=outputOwner, cycleNumber=1, cycleStepNumber=1,
152+
project=outputProject,verbose=False,render=self.render)
153+
print k
154+
self.logger.info(tilespecpaths)
155+
renderapi.client.import_jsonfiles_parallel(outputStack,tilespecpaths,render=self.render)
156+
157+
k+=1
158+
159+
if __name__ == "__main__":
160+
161+
mod = CreateFastStack(schema_type = CreateFastStacksParameters)
162+
163+
mod.run()
164+

renderapps/TrakEM2/create_trakem2_subvolume_from_render.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@
1515
"render":{
1616
"host":"ibs-forrestc-ux1",
1717
"port":8080,
18-
"owner":"Forrest",
19-
"project":"M247514_Rorb_1",
18+
"owner":"S3_Run1",
19+
"project":"S3_Run1_Jarvis",
2020
"client_scripts":"/pipeline/render/render-ws-java-client/src/main/scripts"
2121
},
22-
'minX':59945,
23-
'maxX':83341,
24-
'minY':84722,
25-
'maxY':138658,
26-
'minZ':24,
27-
'maxZ':24,
28-
'inputStack':'EM_fix',
29-
'outputStack':'EM_Site4_stitched',
22+
'minX':-871,
23+
'maxX':1417,
24+
'minY':-1239,
25+
'maxY':2017,
26+
'minZ':0,
27+
'maxZ':694,
28+
'inputStack':'Stitched_DAPI_1_Lowres_68_to_223_RoughAlign_filter1_round1111_concat_ds',
29+
'outputStack':'Stitched_DAPI_1_Lowres_68_to_223_RoughAlign_filter1_round1111_concat_fixed',
3030
"doChunk":False,
31-
"outputXMLdir":"/nas3/data/M247514_Rorb_1/processed/Site4StitchFix/",
31+
"outputXMLdir":"/nas4/data/S3_Run1_Jarvis/processed/TRAKEM2/",
3232
"renderHome":"/pipeline/forrestrender/"
3333
}
3434

@@ -53,8 +53,8 @@ def run(self):
5353
ck.dir = str(ck.first)+ "-" + str(ck.last)
5454
allchunks.append(ck)
5555

56-
layersetfile = "layerset.xml"
57-
headerfile = "header.xml"
56+
layersetfile = "renderapps/TrakEM2/layerset.xml"
57+
headerfile = "renderapps/TrakEM2/header.xml"
5858

5959
for x in allchunks:
6060

renderapps/TrakEM2/reimport_trakem2_to_render.py

+15-11
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,29 @@
99
import json
1010
from ..module.render_module import TEM2ProjectTransfer, TrakEM2RenderModule, EMLMRegistrationParameters
1111
import numpy as np
12+
from ..module.render_module import RenderModule, RenderParameters, TEM2ProjectTransfer
13+
import json_module
14+
import marshmallow as mm
15+
1216

1317
example_parameters = {
1418
"render":{
1519
"host":"ibs-forrestc-ux1",
1620
"port":8080,
17-
"owner":"Forrest",
18-
"project":"M247514_Rorb_1",
21+
"owner":"S3_Run1",
22+
"project":"S3_Run1_Jarvis",
1923
"client_scripts":"/pipeline/render/render-ws-java-client/src/main/scripts"
2024
},
21-
'minX':59945,
22-
'maxX':83341,
23-
'minY':84722,
24-
'maxY':138658,
25-
'minZ':24,
26-
'maxZ':24,
27-
'inputStack':'EM_fix',
28-
'outputStack':'EM_Site4_stitched',
25+
'minX':-871,
26+
'maxX':1417,
27+
'minY':-1239,
28+
'maxY':2017,
29+
'minZ':0,
30+
'maxZ':694,
31+
'inputStack':'Stitched_DAPI_1_Lowres_68_to_223_RoughAlign_filter1_round1111_concat_ds',
32+
'outputStack':'Stitched_DAPI_1_Lowres_68_to_223_RoughAlign_filter1_round1111_FIXED',
2933
"doChunk":False,
30-
"outputXMLdir":"/nas3/data/M247514_Rorb_1/processed/Site4StitchFix/",
34+
"outputXMLdir":"/nas4/data/S3_Run1_Jarvis/processed/TRAKEM2/",
3135
"renderHome":"/pipeline/forrestrender/"
3236
}
3337

renderapps/__init__.py

+15-14
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
#!/usr/bin/env python
22

3-
#from . import cross_modal_registration
4-
#from . import dataimport
5-
#from . import materialize
6-
#from . import pointmatch
7-
#from . import refactor
8-
#from . import registration
9-
#from . import section_polygons
10-
#from . import stack
11-
#from . import stitching
12-
#from . import tile
13-
#from . import TrakEM2
14-
#from . import transfer
15-
#from . import wrinkle_detection
3+
from . import cross_modal_registration
4+
from . import dataimport
5+
from . import materialize
6+
from . import pointmatch
7+
from . import refactor
8+
from . import registration
9+
from . import section_polygons
10+
from . import stack
11+
from . import stitching
12+
from . import tile
13+
from . import TrakEM2
14+
from . import transfer
15+
from . import wrinkle_detection
16+
from . import rough_align
1617

1718

1819
__all__ = ['cross_modal_registration', 'dataimport', 'materialize', 'pointmatch',
1920
'module','shapely',
2021
'refactor', 'registration', 'section_polygons', 'stack',
21-
'stitching', 'tile', 'TrakEM2','transfer','wrinkle_detection']
22+
'stitching', 'tile', 'TrakEM2','transfer','wrinkle_detection','datamanagement','rough_align']

renderapps/datamanagement/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
if __name__ == "__main__" and __package__ is None:
2+
__package__ = "renderapps.datamanagement.DeleteSection"
3+
import json
4+
import os
5+
import renderapi
6+
from ..module.render_module import RenderModule,RenderParameters
7+
from json_module import InputFile,InputDir,OutputDir
8+
import marshmallow as mm
9+
from functools import partial
10+
import glob
11+
import time
12+
import numpy as np
13+
14+
#Author: Sharmishtaa Seshamani
15+
16+
example_parameters={
17+
"render":{
18+
"host":"ibs-forrestc-ux1",
19+
"port":80,
20+
"owner":"SC_MT_IUE1_2",
21+
"project":"SC_MT22_IUE1_2_PlungeLowicryl",
22+
"client_scripts":"/var/www/render/render-ws-java-client/src/main/scripts"
23+
},
24+
'input_stack':'Registered_DAPI2',
25+
'section_z': 301
26+
}
27+
28+
class DeleteSectionParameters(RenderParameters):
29+
input_stack = mm.fields.Str(required=True,
30+
metadata={'description':'Input Stack'})
31+
section_z = mm.fields.Int(required=True,
32+
metadata={'description':'Section to Delete'})
33+
34+
35+
class DeleteSection(RenderModule):
36+
def __init__(self,schema_type=None,*args,**kwargs):
37+
if schema_type is None:
38+
schema_type = DeleteSectionParameters
39+
super(DeleteSection,self).__init__(schema_type=schema_type,*args,**kwargs)
40+
def run(self):
41+
42+
allzvalues = self.render.run(renderapi.stack.get_z_values_for_stack,self.args['input_stack'])
43+
print "Number of z values:"
44+
a = np.array(allzvalues)
45+
print a
46+
print self.args['input_stack']
47+
print self.args['section_z']
48+
49+
renderapi.stack.set_stack_state(self.args['input_stack'], state='LOADING', render=self.render)
50+
51+
renderapi.stack.delete_section(self.args['input_stack'],int(self.args['section_z']),render=self.render)
52+
53+
renderapi.stack.set_stack_state(self.args['input_stack'], state='COMPLETE', render=self.render)
54+
55+
#renderapi.stack.create_stack(self.args['output_stack'],cycleNumber=5,cycleStepNumber=1, render=self.render)
56+
#renderapi.client.import_jsonfiles_parallel(self.args['output_stack'],jsonfiles,render=self.render)
57+
58+
59+
60+
if __name__ == "__main__":
61+
#mod = DeleteSection(input_data=example_parameters)
62+
mod = DeleteSection(schema_type = DeleteSectionParameters)
63+
mod.run()

0 commit comments

Comments
 (0)