NSCLSpecTcl is a low overhead dynamic histograming framework for Nuclear Sciecne experimental data. It was written for the National Superconducting Cyclotron Laboratory (NSCL) at Michigan State University. When the NSCL experimental program finished and the NSCL was succeeded by the Facility for Rare Isotope Beams (FRIB), the FRIB adopted NSCLSpecTcl for use in online and early offline analysis.
Note that NSCLSpecTcl should not be confised with the Tcl GUI interface
generated named SpecTcl. In this document the word `SpecTcl
will
be used for brevity to mean NSCLSpecTcl
NSCLSpecTcl development is now hosted at:
http://github.com/FRIBDAQ/SpecTcl
The documentation for NSCLSpecTcl is at:
Various documents describing SpecTcl are in the section labeled "What is SpecTcl?" on that web page.
SpecTcl is developed under Debian Linux and has several dependencies, some are built in, some are expected to be installed by the system owner. As the FRIB actively develops NSCLSPecTcl, it is possible that the list of dependencies below are incomplete.
One can install NSCLSpecTcl in three ways. These are listed in decreasing order of our preference for you;
https://github.com/FRIBDAQ/SpecTcl/releases
Provides a set of the releases we would prefer you to use. Each of those releases has several 'assets' or files; If a release is named x.y-zzz; it will have the files:
make dist
, see however DEPENDENCIES below. if you want
to build using this.This installation requires the least knowledge -- once you have your containerized system up and running. Suppose you downloaded version 5.13-010's binary tarball for e.g. the bullseye container. You would have gottan a file named:
spectcl-5.13-010-bullseye.tar.gz
Hand that file to a user that is allowed to write into the directory tree that is bound
into the bullseye container's /usr/opt directory tree. Suppose they put that file
in their home directory and a script or alias named bullseye
has been defined
to start the container with that directory tree bound to /usr/opt. Here's how to
install that new SpecTcl Version:
cd /usr/opt/spectcl # if necessary make this directory.
tar xzf ~/spectcl-5.13-010-bullseye.tar.gz
Done, you now have NSCLSpecTcl version 5.13-010 installed for use in your containerized buster system.
Unwrap the git clones and cd into the main subdirectory of the resulting tree.
SpecTcl depends on a few other FRIB/NSCL products. Rather than make you build and install them, we have three scripts that allow you to incorporate them into the SpecTcl build. Each script is quite short but you'll want to read the comments that descdribe the most recently used version/tag of that product.
You will need to have git installed on your system to incorpoprate these.
# Most recently used version 1.2
run the script as:
./unifiedfmt-incorp.sh 1.2
to incorporate that version of the unified format verison.
# e.g. ./tcl++incorp libtclplus-v4.3-001
# last used in this branch.
#
towards the top of the script. In that case, invoke it as:
./tcl++incorp libtclplus-v4.3-001
# last tag was v1.4
Run this script as folllows:
./qtpi-incorp.sh v1.4
Now all of the internal dependencies are incorporated and you can build SpecTcl as if you got a spectcl-5.13-010-dist tarball and had unwrapped it into the 'main' directory that is now your working directory.
These must either be installed via your system's package manager or built and installed somewhere on your system. For each dependency you must build I'll describe where the default configuration of SpecTcl expects it. By default I mean that if you install there you don't need to specify any special options to the configuration script.
--with-nscldaq-root
option to
specify the location of the version of NSCLDAQ you with to use. Note that
this is only used to locate the helper that SpecTcl uses to get online data.--with-motif-header-dir
and --with-motif-lib
can be used
to describe where the libXm .h file are and th efull path to libXm.--with-gd-headerdir
and --with-gd-libdir
can be used to specify where this is installed if you choose to build it.imagemagick
package on
Debian is suittable for this.--with-gri-dir
--with-rootsys
--with-restclient-cpp
zlib1g-dev
to do this compression.libjsoncpp1
for the libraries and
libjsoncpp-dev
for the headers.libtcl8.6-dev
libtk8.6-dev
to get
everything pulled in via apt.tcllib
package.itcl3
, itk3
and iwidgets4
libsqlite3-0
libsqlite3-dev
and libsqlite3-tcl
on Debian.xmlto
on Debian.python3
and python3-dev
If you have all of the external dependencies installed in their normal places you should be able to:
./configure --prefix=/where/to/install --with-rootsys=/where/cernroot/is/installed
This will trundle along (out of tree builds are also supported).
Once configure worked:
make
make all -jn #n like the number of processors you system has.
make install
VERBOSE=1 make check # If you want to run tests.
and you are done.