WireCell / wire-cell-toolkit

Toolkit for Liquid Argon TPC Simulation and Reconstruction
https://wirecell.github.io/
Other
7 stars 19 forks source link
dataflow-programming deconvolution detector-response lartpc multithreading signal-processing simulation tomographic-reconstruction

+TITLE: Wire-Cell Toolkit

+SETUPFILE: docs/setup-readme.org

Welcome to the Wire-Cell Toolkit (WCT) source repository at https://github.com/wirecell/wire-cell-toolkit.

The WCT is a multi-faceted, high performance software project developed for liquid argon time projection chamber (LArTPC) simulation and data processing. Some features of WCT include:

Additional ~README~ information is available in the WCT sub packages:

See http://wirecell.bnl.gov/ for the home of Wire-Cell Toolkit documentation and news "blog".

Wire-Cell Toolkit provides simple and automated installation while allowing you to adapt it so you may provide the required dependencies in a variety of ways.

** External software dependencies

The WCT dependencies are curated and minimized with some required and some optional. Below shows the intra- and inter-package dependency tree:

[[file:wct-deps.png]]

Black arrows are library dependencies, blue are for applications and gray are for testing programs. They represent compile/link time dependencies.

The dependencies for the ~WireCellUtil~ package are required. The rest are optional. Missing optional dependencies, or ones specifically turned off, will cause the dependent WCT package to not be built.

Some external dependencies have explicit minimum required versions:

You may provide the necessary external software dependencies in a manner of your own choosing and some options include:

** Developer Source

Developers check out =master= branch via SSH.

+BEGIN_EXAMPLE

$ git clone git@github.com:WireCell/wire-cell-toolkit.git wct

+END_EXAMPLE

** 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 [[https://github.com/WireCell/wire-cell-toolkit/releases][this GitHub release page]].

Users may also anonymously clone in the usual way:

+BEGIN_EXAMPLE

$ git clone https://github.com/WireCell/wire-cell-toolkit.git wct

+END_EXAMPLE

** Configuring the source

On well-behaved systems, configuring the source may be as simple as:

+BEGIN_EXAMPLE

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

+END_EXAMPLE

Software dependencies which can not automatically be located in system areas or via ~pkg-config~ can be manually specified. For a list of options run:

+BEGIN_EXAMPLE

$ ./wcb --help

+END_EXAMPLE

Here is an example where some packages are found automatically and some need help and others are explicitly turned off:

+begin_example

$ ./wcb configure \ --prefix=$HOME/dev/wct/install \ --with-jsonnet=$HOME/opt/jsonnet \ --with-root=no ... Removing submodule "dfp" due to lack of external Removing package "tbb" due to lack of external dependency Removing package "root" due to lack of external dependency Removing package "cuda" due to lack of external dependency Configured for submodules: apps, cfg, gen, iface, img, pgraph, ress, sigproc, sio, util 'configure' finished successfully (5.683s)

+end_example

** Building

The libraries and programs may be built with:

+BEGIN_EXAMPLE

$ ./wcb

+END_EXAMPLE

** Installing

To install:

+BEGIN_EXAMPLE

$ ./wcb install

+END_EXAMPLE

Optionally, the reference configuration and data files for one or more supported experiments may be installed by giving naming them with the ~--install-config~ option. A name matches a sub-directory under [[file:cfg/pgrapher/experiment/][cfg/pgrapher/experiment/]] or the special ~all~ name will install all.

+begin_example

$ ./wcb --install-config= install

+end_example

** Testing

Running the tests can take a while but are off by default. They may be run with:

+begin_example

$ ./wcb --tests

+end_example

See [[file:tests/README.org]] for more details on testing.

WCT uses an ~X.Y.Z~ version string. While ~X=0~, a ~0.Y.0~ version indicates a new release that may extend or break API or ABI compared to ~Y-1~. A ~Z>0~ indicates a bug fix to ~Z-1~ which should otherwise retain the API and ABI. Bug fixes will be made on a branch rooted on ~0.X.0~ called ~0.X.x~.

To make releases, the above details are baked into two test scripts [[https://github.com/WireCell/waf-tools/blob/master/make-release.sh][make-release.sh]] and [[https://github.com/WireCell/waf-tools/blob/master/test-release.sh][test-release.sh]]. 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.

Prior to 0.25.0, ~wcb~ was a custom version of [[https://waf.io][Waf]] and is now simply a copy of ~waf~. The customized tools are held in the [[file:waft/]] directory.