Myocardial Display Mike Avison Bradford
Team Work Physicist - test design and tools Technologist - test execution Physician - Accurate reporting
What’s Wrong? With Beacon Factory Processing Views for reformatting are too small for accurate slice placement Operator must remember angles and slice placement too long (sequential stress-rest processing) No colour scale No size information
Taking the easy way I did think of modifying the factory tcl script –for about 6 seconds Instead we quit the tcl just before reformatting This provides us with attenuation corrected and uncorrected T files for Stress and Rest (T files are transaxial)
What Next? Select the Stress files on workbench Select the Rest files on a second workbench Run the same small WB macro on each –In parallel (no need to remember angles and slices) –Does a fixed offset translate (-12,18) of images to put the heart approx centre (work round for reformat bug) –Sets up reformatting to 64x64 matrix with 3mm pixel size
Why 3mm? Makes slices thin –we can add slices in display macro later –it makes the planning images bigger so the operator can prescribe more accurately
Display Macro Allows slice summing Hence allows small realignments (ie ¼ slice) Displays annotated colour stripe Better truncation Annotated with –Slice thickness –Cell dimension –Regardless of acquisition, reformatting, zoom etc
How long did it take? About 10 minutes to “learn” the basics 2 hours to edit in the menus etc 2 weeks to polish, debug, validate….
Simplified Elements Display summed slices, record operator alignments show \ mode="Hex" fnum="0-5" matrix_size="128" cell="I1" \ cell_border="default" image_border="none" labels="Both" \ numbering="Yes" statistics="None" upv="File relative" \ truncation="None" ref_image="Single" stripe_ref="Same" zoom_factor="'zoom'" \ zoom_centers="" image_step="'SliceSum' sum 'sliceSum'" \ sim_groups="" Info_format="default" \ alignment= "Interactive:'a1'" alignment2="Interactive:'a2'" \ alignment3="Interactive:'a3'” alignment4="Interactive:'a4'" \ alignment5="Interactive:'a5'" alignment6="Interactive:'a6'" \ alignment7="beginning" alignment8="beginning" color_stripe="A" \ color_stripe2="A" color_stripe3="A" color_stripe4="A" \ color_stripe5="A" color_stripe6="A" color_stripe7="A" \ color_stripe8="A".;.; capture the alignments and zoom factors as defined by the operator.;.set zoom $show_zoom_factor.set a1 $show_lo_1.set a2 $show_lo_2.set a3 $show_lo_3.set a4 $show_lo_4.set a5 $show_lo_5.set a6 $show_lo_6
Simplified Elements Truncate all 3 series separately record values.set l #0.for n = #0.to #4.step #2.inc l show \ mode="Single" fnum="'n'" matrix_size="128" cell="I'l'" \ cell_border="default" image_border="none" labels="Both" \ numbering="Yes" statistics="None" upv="Pixie relative" \ truncation="100%" ref_image="Single" stripe_ref="Same" zoom_factor="'zoom'" \ zoom_centers="" image_step="'SliceSum' sum 'sliceSum'" sim_groups="" Info_format="default" \ alignment= "Interactive" alignment2="Interactive" alignment3="Interactive" \ alignment4="Interactive" alignment5="Interactive" alignment6="Interactive" \ alignment7="beginning" alignment8="beginning" color_stripe="A" \ color_stripe2="A" color_stripe3="A" color_stripe4="A" \ color_stripe5="A" color_stripe6="A" color_stripe7="A" \ color_stripe8="A".;.set upv'n' $show_trunc_upv_1.endfor
…and redisplay.for k = #0.to #4.step #2.int l = k + #1.set upv upv'k’.; Show show \ mode="Single" fnum="'k'" matrix_size="128" cell="I'l'" \ cell_border="default" image_border="none" labels="Both" \ numbering="Yes" statistics="None" upv="'upv'" \ truncation="none" ref_image="Single" stripe_ref="Same"\ zoom_factor="'zoom'" \ zoom_centers="" image_step="'SliceSum' sum 'sliceSum'" sim_groups=""\ Info_format="default" \ alignment= "Beginning" alignment2="Beginning" alignment3="Beginning" \ alignment4="Beginning" alignment5="Beginning" alignment6="Beginning" \ alignment7="beginning" alignment8="beginning" color_stripe="A" \ color_stripe2="A" color_stripe3="A" color_stripe4="A" \ color_stripe5="A" color_stripe6="A" color_stripe7="A" \ color_stripe8="A".endfor
Simplified Elements Adjusting Slice Thickness is easy!.thicker:.if $show_num_images_1 > #4.then.; variable returned by show.inc SliceSum.gosub display6.else.; Prompt prompt \ title="PIXIE Prompt" text="Slices thick enough" button="Continue" \ control_x="400" control_y="400".gosub display6.endif.return.;==============================================================.thinner:.if SliceSum > #1.then.dec SliceSum.gosub display6.else.; Prompt prompt \ title="PIXIE Prompt" text="Slice thickness = 1" button="Continue" \ control_x="400" control_y="400".gosub display6.;.endif.return
Simplified Elements Calculate and display cell size getiib fnum="0" header_field=" rmx ".set matrix $IIB getiib fnum="0" header_field=" rpx (recon pixel size x axis mm)".set rpx $IIB.; calculate the size of the cell and label it.set fmatrix %'matrix'.set frpx = %'rpx'.float im_size = fmatrix * frpx / zoom.set $fpfmt "%3.0f" label \ mode="Label" text=" " font="dfalt_fr_san_bold" \ dir="Horizontal" color="default" background="None" border="None" \ arrow_head="On" arrow_style="Solid Color" cell="A1" \ placement=" "
Simplified Elements Calculate and display slice thickness getiib fnum="0" header_field=" zap (z-axis pixel size mm)".set zap $IIB getiib fnum="0" header_field=" slt (slice thickness in pix usually 1)".set slt $IIB.; Calculate and display slice thickness.set fslt %'slt'.set fzap %'zap'.set zap_string "zap".float sl_thck = fzap * fslt * SliceSum.set $fpfmt "%4.1f" label \ mode="Label" text="Slice thickness ='sl_thck'mm" \ font="dfalt_fr_san_bold" \ dir="Horizontal" color="default" background="None" border="None" \ arrow_head="On" arrow_style="Solid Color" cell="A1" \ placement="0.820"
Conclusion It’s not rocket science but... Big time saver Fewer rejects More confidence