1 |
|
|
2 |
|
NOTE: GLK's approximate ranking of 6 most imporant tagged with |
3 |
|
[GLK:1], [GLK:2], ... |
4 |
|
|
5 |
======================== |
======================== |
6 |
SHORT TERM ============= (for curvature-based VR) |
SHORT TERM ============= (for curvature-based VR) |
7 |
======================== |
======================== |
69 |
MEDIUM TERM ================== (including needed for streamlines & tractography) |
MEDIUM TERM ================== (including needed for streamlines & tractography) |
70 |
============================== |
============================== |
71 |
|
|
72 |
|
[GLK:3] evals & evecs for symmetric tensor[3,3] (requires sequences) |
73 |
|
|
74 |
|
[GLK:4] Save Diderot output to nrrd, instead of "mip.txt" |
75 |
|
For grid of strands, save to similarly-shaped array |
76 |
|
For list of strands, save to long 1-D (or 2-D for non-scalar output) list |
77 |
|
For ragged things (like tractography output), will need to save both |
78 |
|
complete list of values, as well as list of start indices and lengths |
79 |
|
to index into complete list |
80 |
|
|
81 |
|
[GLK:5] Use of Teem's "hest" command-line parser for getting |
82 |
|
any input variables that are not defined in the source file |
83 |
|
|
84 |
|
[GLK:6] ability to declare a field in such a way so that probe |
85 |
|
positions are *always* clamped to the support of "inside"; |
86 |
|
there are many cases where this is the sensible behavior. |
87 |
|
(More generally, we could also have "repeat" declaration, |
88 |
|
copying action of GL_REPEAT in texturing) |
89 |
|
|
90 |
|
ability to emit/track/record variables into dynamically re-sized |
91 |
|
runtime buffer |
92 |
|
|
93 |
Want: allow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C, |
Want: allow X *= Y, X /= Y, X += Y, X -= Y to mean what they do in C, |
94 |
provided that X*Y, X/Y, X+Y, X-Y are already supported. |
provided that X*Y, X/Y, X+Y, X-Y are already supported. |
95 |
Nearly every Diderot program would be simplified by this. |
Nearly every Diderot program would be simplified by this. |
96 |
|
|
97 |
Want: ability to apply "normalize" to a field itself, e.g. |
Want: non-trivial field expressions & functions: |
|
field#1(2)[2] V = normalize(Vimg ⊛ ctmr); |
|
|
so that V(x) = normalize((Vimg ⊛ ctmr)(x)). |
|
|
(For now, it would be okay for the differentability of V to be 0; |
|
|
later we can teach Diderot the quotient rule of derivatives.) |
|
|
Having this would simplify expression of standard LIC method, and |
|
|
would also help express other vector field expressions that arise |
|
|
in vector field feature exraction |
|
|
Related to this and possibly simpler: |
|
98 |
image(2)[2] Vimg = load(...); |
image(2)[2] Vimg = load(...); |
99 |
field#0(2)[] Vlen = |Vimg ⊛ bspln3|; |
field#0(2)[] Vlen = |Vimg ⊛ bspln3|; |
100 |
to get a scalar field of vector length, or |
to get a scalar field of vector length, or |
104 |
field#2(2)[] F = Fimg ⊛ bspln3; |
field#2(2)[] F = Fimg ⊛ bspln3; |
105 |
field#0(2)[] Gmsq = ∇F•∇F; |
field#0(2)[] Gmsq = ∇F•∇F; |
106 |
to get a scalar field of squared gradient magnitude, which is simpler |
to get a scalar field of squared gradient magnitude, which is simpler |
107 |
to differentiate. Again, though, it would be such a benefit to have |
to differentiate. However, there is value in having these, even if |
108 |
these expressions, without any differentiability. Hence my indication |
the differentiation of them is not supported (hence the indication |
109 |
of "field#0" for these above. |
of "field#0" for these above) |
|
|
|
|
ability to declare a field in such a way so that probe |
|
|
positions are *always* clamped to the support of "inside"; |
|
|
there are many cases where this is the sensible behavior |
|
110 |
|
|
111 |
ability to emit/track/record variables into dynamically re-sized |
Want: ability to apply "normalize" to a field itself, e.g. |
112 |
runtime buffer |
field#0(2)[2] V = normalize(Vimg ⊛ ctmr); |
113 |
|
so that V(x) = normalize((Vimg ⊛ ctmr)(x)). |
114 |
evals & evecs for symmetric tensor[3,3] |
Having this would simplify expression of standard LIC method, and |
115 |
|
would also help express other vector field expressions that arise |
116 |
|
in vector field feature exraction. |
117 |
|
|
118 |
tensor fields: convolution on general tensor images |
tensor fields: convolution on general tensor images |
119 |
|
|
|
Use of Teem's "hest" command-line parser for getting |
|
|
any input variables that are not defined in the source file |
|
|
|
|
|
Save Diderot output to nrrd, instead of "mip.txt" |
|
|
For grid of strands, save to similarly-shaped array |
|
|
For list of strands, save to long 1-D (or 2-D for non-scalar output) list |
|
|
For ragged things (like tractography output), will need to save both |
|
|
complete list of values, as well as list of start indices and lengths |
|
|
to index into complete list |
|
|
|
|
120 |
============================== |
============================== |
121 |
other MEDIUM TERM ============ (needed for particles) |
other MEDIUM TERM ============ (needed for particles) |
122 |
============================== |
============================== |
136 |
|
|
137 |
(F1 if x else F2)@pos |
(F1 if x else F2)@pos |
138 |
|
|
139 |
This will require duplication of the continuation of the conditional (but we should only |
This will require duplication of the continuation of the conditional |
140 |
duplicate over the live-range of the result of the conditional. |
(but we should only duplicate over the live-range of the result of the |
141 |
|
conditional. |
142 |
|
|
143 |
============================== |
============================== |
144 |
other MEDIUM TERM ============ |
other MEDIUM TERM ============ |
182 |
BUGS ================= |
BUGS ================= |
183 |
====================== |
====================== |
184 |
|
|
185 |
test/fields.diderot: |
[GLK:1] test/derivs2.diderot: |
186 |
documents various bugs/questions associated with field expressions |
test/derivs3.diderot: |
187 |
|
gradients & Hessians are not being transformed from index-to-world, |
188 |
|
these test programs should produce black images when that is working |
189 |
|
|
190 |
|
[GLK:2] test/fields.diderot: |
191 |
|
documents various bugs/questions associated with simple field expressions |
192 |
|
(negation, addition, scalar multiplication) |
193 |
|
|
194 |
|
test/read2vecs.diderot: |
195 |
|
// HEY (BUG?) shouldn't it be a type error to load this 2-D array of |
196 |
|
// 2-vectors into a 2-D *scalar* field? Instead, get: |
197 |
|
// uncaught exception Fail [Fail: Error in compiling lic.diderot] |
198 |
|
// raised at driver/main.sml:31.39-31.76 |
199 |
|
image(2)[] Vimg = load("../data/vorttest.nrrd"); |
200 |
|
|
201 |
|
test/iso2d.diderot: not able to use "nan". |
202 |
|
// HEY (BUG) not able to use NaN as in "pos = [nan,nan]" |
203 |
|
// generated C code "vec2f(nanf, nanf)" causes problems: |
204 |
|
// iso2d.c: In function ‘sample_update’: |
205 |
|
// iso2d.c:86: error: incompatible type for argument 1 of ‘vec2f’ |
206 |
|
// iso2d.c:86: error: incompatible type for argument 2 of ‘vec2f’ |
207 |
|
// uncaught exception Fail [Fail: error compiling/linking] |
208 |
|
// raised at c-target/c-target.sml:323.14-323.44 |
209 |
|
pos = [∞,∞]; // should be: pos = [nan,nan]; |
210 |
|
|
211 |
test/mip-cam.diderot: |
test/mip-cam.diderot: |
212 |
// generated C code looks like "(float)p_ui_0--0.5e0f" |
// generated C code looks like "(float)p_ui_0--0.5e0f" |