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.

2. A shell script to launch tkmedit (or tksurfer) and tell it to run the tcl script.

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

# 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

# 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 ...]