1 


2 

NOTE: GLK's approximate ranking of 6 most imporant tagged with 
3 

[GLK:1], [GLK:2], ... 
4 


5 
======================== 
======================== 
6 
SHORT TERM ============= (for curvaturebased VR) 
SHORT TERM ============= (for curvaturebased 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 similarlyshaped array 
76 

For list of strands, save to long 1D (or 2D for nonscalar 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" commandline 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 resized 
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, XY are already supported. 
provided that X*Y, X/Y, X+Y, XY 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: nontrivial 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 resized 
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" commandline 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 similarlyshaped array 


For list of strands, save to long 1D (or 2D for nonscalar 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 liverange of the result of the conditional. 
(but we should only duplicate over the liverange 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 indextoworld, 
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 2D array of 
196 

// 2vectors into a 2D *scalar* field? Instead, get: 
197 

// uncaught exception Fail [Fail: Error in compiling lic.diderot] 
198 

// raised at driver/main.sml:31.3931.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 ctarget/ctarget.sml:323.14323.44 
209 

pos = [∞,∞]; // should be: pos = [nan,nan]; 
210 


211 
test/mipcam.diderot: 
test/mipcam.diderot: 
212 
// generated C code looks like "(float)p_ui_00.5e0f" 
// generated C code looks like "(float)p_ui_00.5e0f" 