Skip to content

Commit cd22327

Browse files
committed
Add tests and demo
1 parent 1de4b0d commit cd22327

File tree

2 files changed

+191
-103
lines changed

2 files changed

+191
-103
lines changed

Demo 1.ipynb

+99-64
Large diffs are not rendered by default.

bosslet/__init__.py

+92-39
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,59 @@
44
import json
55
import os
66

7-
from utils import block_compute
7+
from typing import List
88

99
from flask import Flask, request, Response, send_file, jsonify
1010
import numpy as np
1111

1212
APP = Flask(__name__)
1313

1414
UPLOADS_PATH = "./uploads"
15-
BLOCK_SIZE = (256, 256, 256)
15+
BLOCK_SIZE = (64, 64, 64)
1616

1717

18-
def file_compute(x_start, x_stop,
18+
def file_compute(
19+
x_start, x_stop,
20+
y_start, y_stop,
21+
z_start, z_stop,
22+
origin=(0, 0, 0),
23+
block_size=(256, 256, 256)
24+
):
25+
"""
26+
Which files do we need to pull for this volume?
27+
"""
28+
# x
29+
30+
x_block_origins = [
31+
b
32+
for b in range(0, x_stop + block_size[0], block_size[0])
33+
if b > (x_start - block_size[0]) and b < x_stop
34+
]
35+
y_block_origins = [
36+
b
37+
for b in range(0, y_stop + block_size[1], block_size[1])
38+
if b > (y_start - block_size[1]) and b < y_stop
39+
]
40+
z_block_origins = [
41+
b
42+
for b in range(0, z_stop + block_size[2], block_size[2])
43+
if b > (z_start - block_size[2]) and b < z_stop
44+
]
45+
46+
files = []
47+
for x in x_block_origins:
48+
for y in y_block_origins:
49+
for z in z_block_origins:
50+
files.append((x, y, z))
51+
return files
52+
53+
def block_compute(x_start, x_stop,
1954
y_start, y_stop,
2055
z_start, z_stop,
2156
origin=(0, 0, 0),
2257
block_size=(256, 256, 256)):
2358
"""
24-
Which files do we need to pull for this box?
59+
What are the block-aligned indices for this volume?
2560
"""
2661
# x
2762

@@ -30,22 +65,34 @@ def file_compute(x_start, x_stop,
3065
for b in range(0, x_stop + block_size[0], block_size[0])
3166
if b > (x_start - block_size[0]) and b < x_stop
3267
]
68+
x_block_origins[0] = max(x_block_origins[0], x_start)
69+
x_block_origins[-1] = min(x_block_origins[-1], x_stop)
70+
3371
y_block_origins = [
3472
b
3573
for b in range(0, y_stop + block_size[1], block_size[1])
3674
if b > (y_start - block_size[1]) and b < y_stop
3775
]
76+
y_block_origins[0] = max(y_block_origins[0], y_start)
77+
y_block_origins[-1] = min(y_block_origins[-1], y_stop)
78+
3879
z_block_origins = [
3980
b
4081
for b in range(0, z_stop + block_size[2], block_size[2])
4182
if b > (z_start - block_size[2]) and b < z_stop
4283
]
84+
z_block_origins[0] = max(z_block_origins[0], z_start)
85+
z_block_origins[-1] = min(z_block_origins[-1], z_stop)
4386

4487
files = []
4588
for x in x_block_origins:
4689
for y in y_block_origins:
4790
for z in z_block_origins:
48-
files.append((x, y, z))
91+
files.append((
92+
(x, min(x_stop, x+block_size[0])),
93+
(y, min(y_stop, y+block_size[1])),
94+
(z, min(z_stop, z+block_size[2]))
95+
))
4996
return files
5097

5198

@@ -84,7 +131,6 @@ def blockfile_indices(xs, ys, zs, origin=(0, 0, 0), block_size=(256, 256, 256)):
84131
return inds
85132

86133

87-
88134
class StorageManager:
89135
"""
90136
Abstract class.
@@ -108,27 +154,35 @@ def setdata(self, data, col, exp, chan, res, xs, ys, zs):
108154
origin=(0, 0, 0),
109155
block_size=self.block_size
110156
)
157+
files = file_compute(
158+
xs[0], xs[1], ys[0], ys[1], zs[0], zs[1],
159+
origin=(0, 0, 0),
160+
block_size=self.block_size,
161+
)
162+
indices = blockfile_indices(
163+
xs, ys, zs,
164+
origin=(0, 0, 0),
165+
block_size=self.block_size
166+
)
167+
168+
print(blocks)
111169

112-
for b in blocks:
113-
# Check to see if the file already exists
114-
115-
# TODO: All of this assumes 0-padded block alignment
116-
self.store(
117-
data[b[0][0] - xs[0]: b[0][1] - xs[0],
118-
b[1][0] - ys[0]: b[1][1] - ys[0],
119-
b[2][0] - zs[0]: b[2][1] - zs[0]],
120-
col, exp, chan, res, b
121-
)
122-
123-
# if self._exists(col, exp, chan, res, b):
124-
# # Open file, add new data, write file
125-
# # data = self.read(col, exp, chan, res, b)
126-
# pass
127-
# else:
128-
# # Create the file with the appropriate contents
129-
# # and 0pad if necessary.
130-
# # pad0_data = np.zeros((self.block_size))
131-
# pass
170+
for b, f, i in zip(blocks, files, indices):
171+
try:
172+
data_partial = self.retrieve(col, exp, chan, res, f)
173+
except:
174+
data_partial = np.zeros(self.block_size, dtype="uint8")
175+
176+
data_partial[
177+
i[0][0]:i[0][1],
178+
i[1][0]:i[1][1],
179+
i[2][0]:i[2][1],
180+
] = data[
181+
(f[0] + i[0][0]) - xs[0]: (f[0] + i[0][1]) - xs[0],
182+
(f[1] + i[1][0]) - ys[0]: (f[1] + i[1][1]) - ys[0],
183+
(f[2] + i[2][0]) - zs[0]: (f[2] + i[2][1]) - zs[0],
184+
]
185+
data_partial = self.store(data_partial, col, exp, chan, res, f)
132186

133187
def getdata(self, col, exp, chan, res, xs, ys, zs):
134188
"""
@@ -162,22 +216,18 @@ def getdata(self, col, exp, chan, res, xs, ys, zs):
162216
i[1][0]:i[1][1],
163217
i[2][0]:i[2][1],
164218
]
165-
payload[
166-
f[0] + i[0][0]: f[0] + i[0][1],
167-
f[1] + i[1][0]: f[1] + i[1][1],
168-
f[2] + i[2][0]: f[2] + i[2][1],
169-
] = data_partial
170-
171-
except ValueError:
172-
payload[
173-
f[0] + i[0][0]: f[0] + i[0][1],
174-
f[1] + i[1][0]: f[1] + i[1][1],
175-
f[2] + i[2][0]: f[2] + i[2][1],
176-
] = np.zeros(self.block_size, dtype="uint8")[
219+
except:
220+
data_partial = np.zeros(self.block_size, dtype="uint8")[
177221
i[0][0]:i[0][1],
178222
i[1][0]:i[1][1],
179223
i[2][0]:i[2][1],
180224
]
225+
payload[
226+
(f[0] + i[0][0]) - xs[0]: (f[0] + i[0][1]) - xs[0],
227+
(f[1] + i[1][0]) - ys[0]: (f[1] + i[1][1]) - ys[0],
228+
(f[2] + i[2][0]) - zs[0]: (f[2] + i[2][1]) - zs[0],
229+
] = data_partial
230+
181231
return payload
182232

183233
def store(self, data, col, exp, chan, res, b):
@@ -188,7 +238,10 @@ def store(self, data, col, exp, chan, res, b):
188238
fname = "{}/{}/{}/{}/{}-{}-{}-{}.npy".format(
189239
UPLOADS_PATH,
190240
col, exp, chan,
191-
res, b[0], b[1], b[2],
241+
res,
242+
(b[0], b[0] + self.block_size[0]),
243+
(b[1], b[1] + self.block_size[1]),
244+
(b[2], b[2] + self.block_size[2]),
192245
)
193246
# print(fname)
194247
return np.save(fname, data)

0 commit comments

Comments
 (0)