FreeSurfer Tutorial #5: Using the Open Science Grid


Time Constraints with Recon-All

Even if you are able to run multiple jobs with the parallel command, it may not be practical for very large datasets - for example, a study that includes hundreds of subjects. You also may not want to have all of your processing cores tied up in running recon-all, and would prefer to have your computer free to use for other projects.

One option is to use a supercomputer, which is available at most universities. If you don’t have access to one, then you can use a publicly available supercomputer hosted by the Open Science Grid, which uses processing cores on computers located across over a hundred sites - laboratories, universities, and other institutions. You can submit a recon-all command to the Open Science Grid, which is then distributed to one of the many cores that are available. For most imaging researchers there is essentially no limit on how many jobs you can submit; a batch containing one or two hundred jobs isn’t very large by supercomputer standards, and the entire batch can usually be finished in less than a week.

Preparing Your Data for the Open Science Grid

Before you can use any of the Open Science Grid resources, you must create an account here.

You will also need a command called fsurf to submit recon-all jobs to the Open Science Grid supercomputer. To download this command, type:

curl -L -o fsurf 'http://stash.osgconnect.net/+fsurf/fsurf'
chmod +x fsurf

And then move the fsurf executible into a directory that your PATH points to. For example, most operating systems have a path that by default points to the /bin directory - the same directory that contains commands such as ls, cd, and pwd. If you move fsurf to /bin, then you can run the command from any directory:

sudo mv fsurf /bin

Note

In the code example above, sudo is used to move fsurf to the /bin directory. That is because the /bin directory is considered sensitive - you don’t want anyone changing it unless they know what they’re doing. Consequently, sudo will prompt you to enter your password before it moves the file.

Next, create a list of all of the subjects by typing the following code:

ls | grep sub- > subjList.txt

This will pipe the results of the ls command into a file called subjList.txt. We will then use this list to create a for-loop to submit all of our recon-all jobs to the Open Science Grid supercomputer.

Submitting Recon-All Jobs

The Open Science Grid is particular about how the jobs are submitted; each anatomical image needs to be packaged in a certain way, just as you need to package items when you drop them off at the post office.

First you will need to run recon-all on your anatomical images, omitting the -all option. This will create a series of directories, and then convert the anatomical image to .mgz format and place it in the mri/orig directory. The following code can be either copied and pasted into the Terminal, or you can copy it into a shell script and run it with tcsh:

foreach subj (`cat subjList.txt`)
      cd $subj/ses-BL/anat
      if (! -d $subj ) then #If the FS directory doesn't exist, then run recon-all
              recon-all -s $subj -i *.nii.gz -sd .
              #zip the FreeSurfer directories, so they can be submitted to fsurf
              zip -r $subj.zip $subj
              cd ../../..
      else
              echo "FreeSurfer folder for $subj already exists; if you want to rerun recon-all for this subject, delete the folder and rerun this script."
              cd ../../..
      endif
  end

Once that has finished, you can submit the jobs using fsurf. In this example, I’ve placed fsurf in a for-loop:

foreach subj (`cat subjList.txt`)
      cd $subj/ses-BL/anat
      fsurf submit --subject=$subj --input=$subj.zip --defaced --deidentified --version 6.0.0 --freesurfer-options='-all -qcache -3T'
      cd ../../..
end

The status of the jobs can then be checked by typing fsurf list, which will print several columns to the screen. The first column is the subject name, the second column is the subject ID assigned by the Open Science Grid supercomputer, and the second-to-last column specifies whether the job is running, completed, or has failed. Periodically check the status of these jobs to see which ones can be downloaded.

Note

The previous code examples are written in tcsh instead of bash. You can write it in either one; I just happened to be using tcsh at the time.

Downloading or Removing Jobs

Once recon-all has finished, you can download the output by typing this code:

fsurf output --id <subjID>

In which subjID is the identifcation code assigned by the supercomputer. It is the number in the second column of the output of the command fsurf list. The downloaded data will have . .bz2 extension; you can unpack it by typing tar xvjf <subjName>, replacing subjName with the name of the downloaded dataset.

On the other hand, if you want to remove a job at any time for any reason, you can do so by typing:

fsurf remove --id <subjID>

subjID is found the same way as above.