Singularity Containers for WCT and WC/LS Running and Development

As part of an enjoyable tutorial on applying machine learning techniques to LArTPC given by Kazu at BNL we were introduced to Singularity containers. There's been some WCT-related work in the past using Docker containers but that fizzled due to Docker's complexity and usage barrier (even if that leads to better build performance and features). It was immediately clear from Kazu's tutorial that Singularity reduces the usage barrier and would solve a big problem for the WCT team. Namely the difficulties we have in building FNAL's art and LArSoft (LS) software ecosystem on our computers. With Singularity containers we now have a way for just one person to suffer and let many others benefit.

Read more…

Overriding Configuration Parameters

The WCT configuration language Jsonnet allows to exploit software development patterns such as "don't repeat yourself" (DRY) and object inheritance. They are exploited to factor a configuration into layers so that it may, in total, serve many uses. This post describes how to override a parameter from a base object.

Read more…

Default Config Dumper

WCT is very configurable. It provides a way for the expert that wrote the C++ component to provide sane defaults and a way that a user may override or augment those defaults. WCT helps such intrepid users to discover the defaults with the ConfigDumper WCT app component.

Read more…

Response Refactoring

In WCT we try to follow the mantra "everything is a component". One corollary to that is we try to avoid hard-wiring dependencies by having functionality accessed by hard-wired construction of concrete classes. The various classes having to do with responses suffered from not being available as components. This led to the entire toolkit having hard-wired behavior which hampers support for multiple detectors. This post describes some recent steps to fix this problem.

Read more…

Pgrapher Execution Engine

The Wire Cell Toolkit is based on functional components which can be used as arbitrary "tools" (in the Gaudi sense of the word). But, they can also composed together following the paradigm of data flow programming (DFP). Each component thus becomes a node (aka "vertex") in a graph joined to other nodes via edges that represent the transfer of data from an output port of one to the input port of the other. A new way to perform this execution has been added to WCT in the form of the Pgrapher app.

Read more…