@vitessce/spatial-accelerated 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.js +52925 -0
- package/dist-tsc/SpatialWrapper.d.ts +2 -0
- package/dist-tsc/SpatialWrapper.d.ts.map +1 -0
- package/dist-tsc/SpatialWrapper.js +45 -0
- package/dist-tsc/VolumeDataManager.d.ts +170 -0
- package/dist-tsc/VolumeDataManager.d.ts.map +1 -0
- package/dist-tsc/VolumeDataManager.js +1273 -0
- package/dist-tsc/VolumeDataManager.test.d.ts +2 -0
- package/dist-tsc/VolumeDataManager.test.d.ts.map +1 -0
- package/dist-tsc/VolumeDataManager.test.js +164 -0
- package/dist-tsc/VolumeRenderManager.d.ts +265 -0
- package/dist-tsc/VolumeRenderManager.d.ts.map +1 -0
- package/dist-tsc/VolumeRenderManager.js +396 -0
- package/dist-tsc/VolumeShader.d.ts +262 -0
- package/dist-tsc/VolumeShader.d.ts.map +1 -0
- package/dist-tsc/VolumeShader.js +73 -0
- package/dist-tsc/VolumeView.d.ts +2 -0
- package/dist-tsc/VolumeView.d.ts.map +1 -0
- package/dist-tsc/VolumeView.js +521 -0
- package/dist-tsc/index.d.ts +2 -0
- package/dist-tsc/index.d.ts.map +1 -0
- package/dist-tsc/index.js +1 -0
- package/dist-tsc/shaders/GaussianFragmentShader.d.ts +2 -0
- package/dist-tsc/shaders/GaussianFragmentShader.d.ts.map +1 -0
- package/dist-tsc/shaders/GaussianFragmentShader.js +242 -0
- package/dist-tsc/shaders/GaussianVertexShader.d.ts +2 -0
- package/dist-tsc/shaders/GaussianVertexShader.d.ts.map +1 -0
- package/dist-tsc/shaders/GaussianVertexShader.js +51 -0
- package/dist-tsc/shaders/VolumeFragmentShader.d.ts +2 -0
- package/dist-tsc/shaders/VolumeFragmentShader.d.ts.map +1 -0
- package/dist-tsc/shaders/VolumeFragmentShader.js +1817 -0
- package/dist-tsc/shaders/VolumeVertexShader.d.ts +2 -0
- package/dist-tsc/shaders/VolumeVertexShader.d.ts.map +1 -0
- package/dist-tsc/shaders/VolumeVertexShader.js +110 -0
- package/package.json +63 -0
- package/src/SpatialWrapper.js +60 -0
- package/src/VolumeDataManager.js +1515 -0
- package/src/VolumeDataManager.test.js +180 -0
- package/src/VolumeRenderManager.js +589 -0
- package/src/VolumeShader.js +74 -0
- package/src/VolumeView.js +651 -0
- package/src/index.js +1 -0
- package/src/shaders/GaussianFragmentShader.js +243 -0
- package/src/shaders/GaussianVertexShader.js +52 -0
- package/src/shaders/VolumeFragmentShader.js +1818 -0
- package/src/shaders/VolumeVertexShader.js +111 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
_initMRMCPT,
|
|
4
|
+
_resolutionStatsToBrickLayout,
|
|
5
|
+
_packPT,
|
|
6
|
+
_ptToZarr,
|
|
7
|
+
_requestBufferToRequestObjects,
|
|
8
|
+
} from './VolumeDataManager.js';
|
|
9
|
+
|
|
10
|
+
describe('spatial-accelerated data utils', () => {
|
|
11
|
+
describe('initialization of page table and brick cache', () => {
|
|
12
|
+
it('Can compute brick layout per resolution', () => {
|
|
13
|
+
// TODO: also add test for calculation of brick layout from zarr metadata
|
|
14
|
+
|
|
15
|
+
const multiResolutionStats = [
|
|
16
|
+
{
|
|
17
|
+
height: 3181,
|
|
18
|
+
width: 4045,
|
|
19
|
+
depth: 194,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
height: 1590,
|
|
23
|
+
width: 2022,
|
|
24
|
+
depth: 194,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
height: 795,
|
|
28
|
+
width: 1011,
|
|
29
|
+
depth: 194,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
height: 398,
|
|
33
|
+
width: 506,
|
|
34
|
+
depth: 194,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
height: 199,
|
|
38
|
+
width: 253,
|
|
39
|
+
depth: 194,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
height: 99,
|
|
43
|
+
width: 126,
|
|
44
|
+
depth: 97,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
height: 50,
|
|
48
|
+
width: 63,
|
|
49
|
+
depth: 48,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
height: 25,
|
|
53
|
+
width: 32,
|
|
54
|
+
depth: 24,
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
const zarrStoreBrickLayout = [
|
|
58
|
+
[7, 100, 127],
|
|
59
|
+
[7, 50, 64],
|
|
60
|
+
[7, 25, 32],
|
|
61
|
+
[7, 13, 16],
|
|
62
|
+
[7, 7, 8],
|
|
63
|
+
[4, 4, 4],
|
|
64
|
+
[2, 2, 2],
|
|
65
|
+
[1, 1, 1],
|
|
66
|
+
];
|
|
67
|
+
const result = _resolutionStatsToBrickLayout(multiResolutionStats);
|
|
68
|
+
expect(result).toEqual(zarrStoreBrickLayout);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('Initializes page table based on data extent', () => {
|
|
72
|
+
const zarrStoreBrickLayout = [
|
|
73
|
+
[7, 100, 127],
|
|
74
|
+
[7, 50, 64],
|
|
75
|
+
[7, 25, 32],
|
|
76
|
+
[7, 13, 16],
|
|
77
|
+
[7, 7, 8],
|
|
78
|
+
[4, 4, 4],
|
|
79
|
+
[2, 2, 2],
|
|
80
|
+
[1, 1, 1],
|
|
81
|
+
];
|
|
82
|
+
const channelsZarrMappingsLength = 7;
|
|
83
|
+
|
|
84
|
+
const { PT, ptTHREE, bcTHREE } = _initMRMCPT(
|
|
85
|
+
zarrStoreBrickLayout,
|
|
86
|
+
channelsZarrMappingsLength,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
expect(PT).toEqual({
|
|
90
|
+
channelOffsets: [
|
|
91
|
+
[0, 0, 1],
|
|
92
|
+
[0, 1, 0],
|
|
93
|
+
[0, 1, 1],
|
|
94
|
+
[1, 0, 0],
|
|
95
|
+
[1, 0, 1],
|
|
96
|
+
[1, 1, 0],
|
|
97
|
+
[1, 1, 1],
|
|
98
|
+
],
|
|
99
|
+
anchors: [
|
|
100
|
+
[0, 0, 36],
|
|
101
|
+
[64, 53, 29],
|
|
102
|
+
[32, 28, 22],
|
|
103
|
+
[16, 15, 15],
|
|
104
|
+
[8, 8, 8],
|
|
105
|
+
[4, 4, 4],
|
|
106
|
+
[2, 2, 2],
|
|
107
|
+
[1, 1, 1],
|
|
108
|
+
],
|
|
109
|
+
offsets: [],
|
|
110
|
+
xExtent: 128,
|
|
111
|
+
yExtent: 103,
|
|
112
|
+
zExtent: 36,
|
|
113
|
+
z0Extent: 7,
|
|
114
|
+
zTotal: 85,
|
|
115
|
+
lowestDataRes: 7,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
expect(ptTHREE.isTexture).toEqual(true);
|
|
119
|
+
expect(ptTHREE.source.data.width).toEqual(128);
|
|
120
|
+
expect(ptTHREE.source.data.height).toEqual(103);
|
|
121
|
+
expect(ptTHREE.source.data.depth).toEqual(85);
|
|
122
|
+
expect(ptTHREE.source.data.data).toBeInstanceOf(Uint32Array);
|
|
123
|
+
expect(ptTHREE.source.data.data.length).toEqual(1120640);
|
|
124
|
+
|
|
125
|
+
expect(bcTHREE.isTexture).toEqual(true);
|
|
126
|
+
expect(bcTHREE.source.data.width).toEqual(2048);
|
|
127
|
+
expect(bcTHREE.source.data.height).toEqual(2048);
|
|
128
|
+
expect(bcTHREE.source.data.depth).toEqual(128);
|
|
129
|
+
expect(bcTHREE.source.data.data).toBeInstanceOf(Uint8Array);
|
|
130
|
+
expect(bcTHREE.source.data.data.length).toEqual(536870912);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
describe('_packPT packs page table properties for a brick', () => {
|
|
134
|
+
it('correctly packs the properties', () => {
|
|
135
|
+
expect(_packPT(0, 80, 1, 0, 0)).toEqual(3223847936);
|
|
136
|
+
expect(_packPT(0, 56, 2, 0, 0)).toEqual(3223062528);
|
|
137
|
+
expect(_packPT(0, 0, 27, 0, 0)).toEqual(3221253120);
|
|
138
|
+
expect(_packPT(0, 111, 61, 0, 0)).toEqual(3224892416);
|
|
139
|
+
expect(_packPT(0, 3, 14, 1, 0)).toEqual(3221305360);
|
|
140
|
+
expect(_packPT(0, 41, 60, 1, 0)).toEqual(3222597648);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('_ptToZarr returns channel, res., xyz coordinates for a page table coord.', () => {
|
|
144
|
+
it('correctly converts page table coordinates to image pyramid chunk keys', () => {
|
|
145
|
+
const ptInfo = {
|
|
146
|
+
PT_zExtent: 36,
|
|
147
|
+
PT_z0Extent: 7,
|
|
148
|
+
PT_anchors: [
|
|
149
|
+
[0, 0, 36],
|
|
150
|
+
[64, 53, 29],
|
|
151
|
+
[32, 28, 22],
|
|
152
|
+
[16, 15, 15],
|
|
153
|
+
[8, 8, 8],
|
|
154
|
+
[4, 4, 4],
|
|
155
|
+
[2, 2, 2],
|
|
156
|
+
[1, 1, 1],
|
|
157
|
+
],
|
|
158
|
+
};
|
|
159
|
+
expect(_ptToZarr(4, 1, 13, ptInfo)).toEqual({ channel: 0, resolution: 4, x: 4, y: 1, z: 5 });
|
|
160
|
+
expect(_ptToZarr(7, 1, 14, ptInfo)).toEqual({ channel: 0, resolution: 4, x: 7, y: 1, z: 6 });
|
|
161
|
+
expect(_ptToZarr(2, 1, 4, ptInfo)).toEqual({ channel: 0, resolution: 5, x: 2, y: 1, z: 0 });
|
|
162
|
+
expect(_ptToZarr(0, 4, 14, ptInfo)).toEqual({ channel: 0, resolution: 4, x: 0, y: 4, z: 6 });
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
describe('_requestBufferToRequestObjects', () => {
|
|
166
|
+
it('correctly converts a buffer to request objects', () => {
|
|
167
|
+
const buffer = new Uint8Array([
|
|
168
|
+
0, 0, 0, 0,
|
|
169
|
+
0, 0, 0, 0,
|
|
170
|
+
0, 128, 16, 13,
|
|
171
|
+
0, 0, 0, 0,
|
|
172
|
+
]);
|
|
173
|
+
const k = 40;
|
|
174
|
+
const { requests: result } = _requestBufferToRequestObjects(buffer, k);
|
|
175
|
+
expect(result).toEqual([
|
|
176
|
+
{ x: 2, y: 1, z: 13 },
|
|
177
|
+
]);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
});
|