Differences between revisions 10 and 190 (spanning 180 versions)
Revision 10 as of 2005-03-25 13:59:54
Size: 1953
Editor: KevinTeich
Comment:
Revision 190 as of 2023-09-13 15:46:41
Size: 3992
Editor: JacksonNolan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#pragma section-numbers on #acl LcnGroup:read,write,delete,revert All:read
Line 3: Line 3:
[[Navigation(children)]] = FreeSurfer Dev Guide =
Line 5: Line 5:
'''Index'''  * Visit the BuildGuide for instructions on building and installing freesurfer manually.
 * Visit the GitHub page for an introduction to the github workflow.
 * Visit the GitAnnex page for detailed instructions on using git annex for storing and retrieving large data files in the repository.
Line 7: Line 9:
[[TableOfContents]] == File Size Limitations ==
Line 9: Line 11:
=== Medical Image Format FAQ ===
[http://www.dclunie.com/medical-image-faq/html Medical Image Format FAQ]
Any files '''larger than 50MB''' should be stored in the GitAnnex, following the hyperlinked instructions, and properly linked to your utility.
Line 12: Line 13:
=== CVS Checkout === == Adding a New C Program ==
Line 14: Line 15:
You can checkout the FreeSurfer source code from the NMR center using local CVS access or remotely by using SSH as the CVS remote connection method. If you'd like to add a new program to the tree, you should create a new subdirectory with the title of your tool. As an example, let's create a new c++ program called `mri_process`. First, we'll create a top-level subdirectory that contains our new c++ file and an empty `CMakeLists.txt` file:
Line 16: Line 17:
==== Local CVS Access ==== {{{
freesurfer/
    mri_process/
        CMakeLists.txt
        mri_process.cpp
}}}
Line 18: Line 24:
The CVS repository is /space/repo/1/dev. Use this as your CVSROOT. You can either set it as an environment variable: In order to configure our new code, we should add the following to the empty `CMakeLists.txt` file.
Line 20: Line 26:
{{{setenv CVSROOT /space/repo/1/dev}}} {{{
project(mri_process)
Line 22: Line 29:
or specify it in the checkout command with the -d option. Note that the CVS root is cached in a CVS checkout directory, so if you choose to use the -d method, you will only have to do it once during your first checkout. include_directories(${FS_INCLUDE_DIRS})
Line 24: Line 31:
Check out the code with the CVS checkout command. The archive name is dev. add_executable(mri_process mri_process.cpp)
target_link_libraries(mri_process utils)
Line 26: Line 34:
{{{cvs checkout dev}}} install(TARGETS mri_process DESTINATION bin)
}}}
Line 28: Line 37:
or This will compile `mri_process.cpp`, link it against the `utils` freesurfer library, and copy the executable to the `$FREESURFER_HOME/bin` directory during install. To include this subdirectory in the main freesurfer build, make sure to modify the top-level `CMakeLists.txt` by adding `mri_process` to the long list of included directories at the bottom of the file. Now, after reconfiguring your build, you can run `make` in the `mri_process` directory of your build tree to successfully compile the new program. If you're having trouble configuring and building freesurfer, be sure to visit the BuildGuide for step-by-step instructions.
Line 30: Line 39:
{{{cvs -d /space/repo/1/dev checkout dev}}} == Adding a New Python Program ==
Line 32: Line 41:
This will copy the entire archive to your directory, creating a
directory called dev/. Now set up your environment to use this dev
directory by running the script in dev/:
Adding a new python program is similar to adding a new c++ program, with an additional step of creating a bash wrapper to be installed in `$FREESURFER_HOME/bin`.
 * Note: Make sure all paths in the Bash wrapper that reference files in the FreeSurfer file tree are defined relative to `$FREESURFER_HOME`, to ensure they are found regardless of the install location
Line 36: Line 44:
{{{cd dev
source set_dev_env_to_here.csh}}}
As an example, let’s add a program called `mri_process` to the FreeSurfer tree, where the main functionality is in a python script called `mri_process.py`, and has a dependency on a model called `process_model.h5`.
Line 39: Line 46:
==== Remote CVS Access ==== First, we’ll create a directory containing the scripts, dependencies, and `CMakeLists.txt`:
Line 41: Line 48:
Tell CVS to use SSH to access the archive by setting the following environment variable: {{{
freesurfer/
 mri_process/
  CMakeLists.txt
  mri_process.sh # shell wrapper to install in bin/
  process_model.h5 # model dependency stored in the annex
  python/ # dir containing the python code
   mri_process.py # python script called by shell wrapper
}}}
Line 43: Line 58:
{{{setenv CVS_RSH ssh}}} Now we’ll need to populate the empty `CMakeLists.txt` file. We need to achieve the following in this file:
 1. Give the utility a project name
 2. Link the python scripts to the location they are referenced by the Bash wrapper
 3. Install the wrapper script into `$FREESURFER_HOME/bin`
 4. Link any models to the proper location to be accessible to the python code
Line 45: Line 64:
Use the following string as your CVS root: An example `CMakeLists.txt`:
{{{
project(mri_process)
Line 47: Line 68:
{{{:ext:USER@MACHINE.nmr.mgh.harvard.edu:/space/repo/1/dev}}} install_symlinks(python/mri_process.py TYPE files DESTINATION python/scripts)
Line 49: Line 70:
Where USER is your username and MACHINE is one of the NMR machines visible to the outside, i.e. gate, entry, or door. Then use the CVS commands normally. install_configured(mri_process.sh DESTINATION bin)
Line 51: Line 72:
Note that using this method makes an SSH connection for every CVS command, and you will be required to enter your password every time. You may want to look into a utility to automatically authenticate SSH connections, such as SSH agent. install_symlinks(process_model.h5 TYPE files DESTINATION models)
}}}
Line 53: Line 75:
=== Building ===

==== autoconf Troubleshooting ====

[AutoconfTroubleshooting]


=== RPM ===

[RpmInfo]
Finally, we need to add this directory to the list of included directories in the `CMakeLists.txt` located at the top level of the FreeSurfer file tree. To add your new utility to your build of FreeSurfer, reconfigure your build, and run make in the `mri_process` directory. You can also rebuild all of FreeSurfer with your new utility if needed. More information on building Freesurfer is located in the BuildGuide.

FreeSurfer Dev Guide

  • Visit the BuildGuide for instructions on building and installing freesurfer manually.

  • Visit the GitHub page for an introduction to the github workflow.

  • Visit the GitAnnex page for detailed instructions on using git annex for storing and retrieving large data files in the repository.

File Size Limitations

Any files larger than 50MB should be stored in the GitAnnex, following the hyperlinked instructions, and properly linked to your utility.

Adding a New C Program

If you'd like to add a new program to the tree, you should create a new subdirectory with the title of your tool. As an example, let's create a new c++ program called mri_process. First, we'll create a top-level subdirectory that contains our new c++ file and an empty CMakeLists.txt file:

freesurfer/
    mri_process/
        CMakeLists.txt
        mri_process.cpp

In order to configure our new code, we should add the following to the empty CMakeLists.txt file.

project(mri_process)

include_directories(${FS_INCLUDE_DIRS})

add_executable(mri_process mri_process.cpp)
target_link_libraries(mri_process utils)

install(TARGETS mri_process DESTINATION bin)

This will compile mri_process.cpp, link it against the utils freesurfer library, and copy the executable to the $FREESURFER_HOME/bin directory during install. To include this subdirectory in the main freesurfer build, make sure to modify the top-level CMakeLists.txt by adding mri_process to the long list of included directories at the bottom of the file. Now, after reconfiguring your build, you can run make in the mri_process directory of your build tree to successfully compile the new program. If you're having trouble configuring and building freesurfer, be sure to visit the BuildGuide for step-by-step instructions.

Adding a New Python Program

Adding a new python program is similar to adding a new c++ program, with an additional step of creating a bash wrapper to be installed in $FREESURFER_HOME/bin.

  • Note: Make sure all paths in the Bash wrapper that reference files in the FreeSurfer file tree are defined relative to $FREESURFER_HOME, to ensure they are found regardless of the install location

As an example, let’s add a program called mri_process to the FreeSurfer tree, where the main functionality is in a python script called mri_process.py, and has a dependency on a model called process_model.h5.

First, we’ll create a directory containing the scripts, dependencies, and CMakeLists.txt:

freesurfer/
        mri_process/
                CMakeLists.txt
                mri_process.sh          # shell wrapper to install in bin/
                process_model.h5        # model dependency stored in the annex
                python/                 # dir containing the python code
                        mri_process.py  # python script called by shell wrapper

Now we’ll need to populate the empty CMakeLists.txt file. We need to achieve the following in this file:

  1. Give the utility a project name
  2. Link the python scripts to the location they are referenced by the Bash wrapper
  3. Install the wrapper script into $FREESURFER_HOME/bin

  4. Link any models to the proper location to be accessible to the python code

An example CMakeLists.txt:

project(mri_process)

install_symlinks(python/mri_process.py TYPE files DESTINATION python/scripts)

install_configured(mri_process.sh DESTINATION bin)

install_symlinks(process_model.h5 TYPE files DESTINATION models)

Finally, we need to add this directory to the list of included directories in the CMakeLists.txt located at the top level of the FreeSurfer file tree. To add your new utility to your build of FreeSurfer, reconfigure your build, and run make in the mri_process directory. You can also rebuild all of FreeSurfer with your new utility if needed. More information on building Freesurfer is located in the BuildGuide.

DevelopersGuide (last edited 2023-09-13 15:46:41 by JacksonNolan)