Introduction
Sample scripts demonstrating how to produce screen-cap images from tkmedit and tksurfer.
The basic ideas:
1. A tcl script run from within tkmedit (or tksurfer) instructing it to load particular files, set up a particular view, and save images. (The tcl script needs to finish by causing tkmedit/tksurfer to quit, so that the whole operation can be run multiple times from a shell script.)
2. A shell script to launch tkmedit (or tksurfer) and tell it to run the tcl script. The shell script can do this multiple times to handle multi subjects.
3. Optional: some mechanism to view the saved image files en masse, convert them to gif or jpg and possibly generate html pages to allow users to access them in an organized and annotated manner.
tkmedit example
tcl script (images for one subject)
# tkmedit_surfposn_makeimages.tcl
set subject [GetSubjectName 0]
#set subjectdir [GetSubjectDir 0] # FS bug -- this returns path to main volume, not SubjectDir
global env
set subjectsdir $env(SUBJECTS_DIR)
set subjectdir "${subjectsdir}/${subject}"
set imagedir "$subjectdir/screencaps_surfpos"
puts "Subject : $subject"
puts "Subject Dir: $subjectdir"
#----------------------------------
# Prep
#----------------------------------
# 0 Main vertices
# 1 Inflated vertices
# 2 White vertices
# 3 Pial vertices
# 4 Orig vertices
#-------------------------------------
# Load T1.mgz to main volume -- already done by original command
#-------------------------------------
# Load surfaces:
#
#LoadMainSurface [0=main; 1=Aux] [filename]
puts "Load main surfaces"
LoadMainSurface 0 lh.white
LoadPialSurface 0 lh.pial
LoadOriginalSurface 0 lh.orig
puts "Load aux surfaces"
LoadMainSurface 1 rh.white
LoadPialSurface 1 rh.pial
LoadOriginalSurface 1 rh.orig
puts "SetDisplayFlags"
# SetDisplayFlag 2 1
SetDisplayFlag 4 1
SetDisplayFlag 5 1
SetDisplayFlag 6 1
SetDisplayFlag 22 1
#---------------------------
proc do_one_view {orient slicenum} {
#---------------------------
global imagedir
global subject
switch -exact -- $orient {
0 { set viewname cor }
1 { set viewname axl }
2 { set viewname sag }
}
set slicestr [format "%03d" $slicenum]
SetOrientation $orient
SetSlice $slicenum
puts "RedrawScreen"
RedrawScreen
RedrawAll
RedrawScreen
RedrawAll
RedrawScreen
RedrawAll
RedrawScreen
RedrawAll
# Use braces to avoid tcl's utterly brain-dead catenation inadequacies...
set imagepath "${imagedir}/${subject}_${viewname}_${slicestr}.tif"
puts "SaveTIFF ${imagepath}"
SaveTIFF $imagepath
}
#-----------------------------
# coronal
#-----------------------------
foreach slicenum { 95 120 150 160 170 200 } {
do_one_view 0 $slicenum
}
#-----------------------------
# axial
#-----------------------------
foreach slicenum { 120 150 160 170 180 190 } {
do_one_view 1 $slicenum
}
puts "QuitMedit"
QuitMedit
# exit(0)
#=============================================
bash shell script (to produce images for multi subjects)
# tkmedit_surfposn_mass_images_20070917.bash
# mass images
subjectsdir=/brain-RAID2C/freesurfer_gw/MMIL_Download/20070917/Subjects
scriptdir=/brain-RAID2C/freesurfer_gw/MMIL_Download/20070917/scripts
function onesubject() {
sbjid=$1
echo "========================================"
echo " "$sbjid
echo "========================================"
subjectdir=$subjectsdir"/FS_"$sbjid
screencapdir=$subjectdir"/screencaps_surfpos"
mkdir $screencapdir
tkmedit "FS_"$sbjid T1.mgz -tcl $scriptdir"/tkmedit_surfposn_makeimages.tcl"
}
onesubject 10419
onesubject 12009
onesubject 12378
[... etc ...]
tksurfer example
tcl script (images for one subject)
# surfparc_makeimages.tcl
set subjectsdir $home
set subjectdir "$home/$subject"
set imagedir "$subjectdir/screencaps"
puts "Subject Dir: $subjectdir"
puts "Hemi: $hemi"
#----------------------------------
# Prep
#----------------------------------
# 0 Main vertices
# 1 Inflated vertices
# 2 White vertices
# 3 Pial vertices
# 4 Orig vertices
# Supposed to load into pial vertex slots, but appears to load into main instead
# read_pial_vertex_coordinates
read_surface_vertex_set 2 white
read_surface_vertex_set 3 pial
# note: following command wants side omitted
labl_import_annotation "aparc.annot"
set rotmult 1
if {$hemi == "rh"} {
set rotmult -1
}
#---------------------------
# Iterate surfaces
#---------------------------
foreach surfix {2 3} {
set surfname "ERROR"
switch -exact -- $surfix {
2 { set surfname wh }
3 { set surfname pl }
}
#show_surf vertexSet
set_current_vertex_set $surfix
#---------------------------
# Iterate views
#---------------------------
for {set viewix0 0} {$viewix0 < 6} {incr viewix0 1} {
switch -exact -- $viewix0 {
0 { set rot 0 ; set axis a ; set viewname lat ; set zoom 1.35 }
1 { set rot 180 ; set axis y ; set viewname med ; set zoom 1.35 }
2 { set rot [expr -90 * $rotmult] ; set axis y ; set viewname ant ; set zoom 1.8 }
3 { set rot [expr 90 * $rotmult] ; set axis y ; set viewname pst ; set zoom 1.8 }
4 { set rot -90 ; set axis x ; set viewname sup ; set zoom 1.35 }
5 { set rot 90 ; set axis x ; set viewname inf ; set zoom 1.35 }
}
make_lateral_view
switch -exact -- $axis {
x { rotate_brain_x $rot }
y { rotate_brain_y $rot }
}
scale_brain $zoom
redraw
# Use braces to avoid tcl's utterly brain-dead catenation inadequacies...
set imagepath "${imagedir}/${subject}_${surfname}_${hemi}_${viewname}.tif"
save_tiff $imagepath
}
}
# will cause FS to exit
exit 0
bash shell script (to produce images for multi subjects)
# tkmedit_surfposn_mass_images_20070917.bash
# mass images
subjectsdir=/brain-RAID2C/freesurfer_gw/MMIL_Download/20070917/Subjects
scriptdir=/brain-RAID2C/freesurfer_gw/MMIL_Download/20070917/scripts
function onehemi() {
sbjid=$1
hemi=$2
subjectdir=$subjectsdir"/FS_"$sbjid
screencapdir=$subjectdir"/screencaps"
mkdir $screencapdir
tksurfer "FS_"$sbjid $hemi white -tcl $scriptdir"/surfparc_makeimages.tcl"
}
function onesubject() {
sbjid=$1
echo "========================================"
echo " "$sbjid
echo "========================================"
onehemi $sbjid lh
onehemi $sbjid rh
}
onesubject 10419
onesubject 12009
onesubject 12378
[... etc ...]