Skip to content
Top-level build/aggregation package for building Wire Cell packages.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
apps @ 740dfc6
cfg @ 8787a7a
dfp @ 888d72a
gen @ 4809bc1
iface @ 0273682
img @ 9059ed7
pgraph @ 6746099
python @ e83ff90
ress @ 6c35e0f
root @ f3f94dd
sigproc @ feaeee1
sio @ 10b8537
tbb @ f1d91e7
util @ a30af2a
waftools @ c94f2ac

Wire Cell Toolkit

This package provides the primary “build aggregation” source package for the various Wire Cell Toolkit (WCT) packages.

See for WCT manual and news “blog”.

The home page for the general Wire Cell effort is


Get the source

See below for how to use git to get the full source history and any particular release. Select releases are archived and available in tar file form at:

External software dependencies

The core of WCT depends on:

  • Boost
  • JsonCPP
  • Jsonnet
  • Eigen
  • FFTW

Optional dependencies include

  • ROOT
  • TBB

You may provide the necessary external software dependencies as you wish. Some options include:

Developer Source

Developers check out master branch via SSH.

$ git clone --recursive wct

User Source

Users typically should build a release branch, either the tip or a tagged release on that branch. Tagged releases are shown on the this GitHub release page. To get the source, for example for release 0.5.0 on branch 0.5.x do:

$ git clone --recursive --branch 0.5.x
$ git checkout -b 0.5.0 0.5.0
$ git submodule init
$ git submodule update
$ git submodule foreach git checkout -b 0.5.0 0.5.0

Anonymous users can clone the master branch but will need to switch the submodule urls to use HTTPS. A script is provided to make that easier:

$ git clone
$ ./swith-git-urls
$ git submodule init
$ git submodule update

Except when mistakes are made, the release branches default to anonymous HTTPS URLs.

Configuring the source

On well-behaved systems you can do:

$ ./wcb configure --prefix=/path/to/install

If your system is not well-behaved you can exhaustively specify where externals are found. In this contrived example, they are installed all into one directory named by the WCT_EXTERNALS variable (such as when making a Spack “view”)

$ ./wcb --help
$ ./wcb configure --prefix=/path/to/install \
   --boost-includes=$WCT_EXTERNALS/include --boost-libs=$WCT_EXTERNALS/lib --boost-mt \
   --with-eigen=$WCT_EXTERNALS --with-jsoncpp=$WCT_EXTERNALS --with-tbb=$WCT_EXTERNALS \
   --with-root=$WCT_EXTERNALS --with-fftw=$WCT_EXTERNALS --with-root=$WCT_EXTERNALS

To force no use of ROOT, even if it is found, use --with-root=false.


To build the code but not run the tests do

$ ./wcb -p --notests


To install the code but not run the tests do:

$ ./wcb -p --notests install


To run the tests, depending on your installation environment you may need to set LD_LIBRARY_PATH and will need to set WIRECELL_PATH to find both data and cfg directories.

$ export LD_LIBRARY_PATH=/path/to/install/lib:$LD_LIBRARY_PATH
$ export WIRECELL_PATH=/path/to/data:/path/to/cfg


$ ./wcb -p --alltests

In principle, no tests should fail.

Release management

To make releases, the above details are baked into two test scripts and See comments at the top of each for how to run them. These scripts can be used by others but are meant for developers to make official releases.


A new wcb build script is made from waf source via:

$ ./waf-light --tools=compat15,doxygen,boost,bjam
$ cp waf /path/to/wire-cell/source/wcb
You can’t perform that action at this time.