Skip to content
Sascha Wagner edited this page Oct 24, 2019 · 20 revisions

Building Ant

Build fails and complains about liblzma.

Make sure you built ROOT with external lzma/xz and zlib libraries enabled. Install the development packages for zlib and liblzma and use -Dbuiltin_lzma=OFF -Dbuiltin_zlib=OFF for cmake when building ROOT.

Cmake fails to locate Pluto

There is a limited list of locations that are searched for Pluto. See PLUTO_SEARCHPATH variable in cmake/Modules/FindPluto.cmake and place your Pluto directory there. Or set the environment variable PLUTOSYS to point to the Pluto directory.

General

Is ROOT6 supported?

Yes. ROOT6 is supported as well as ROOT5. One thing you have to be careful with is which Pluto version you use. If you use ROOT6, you have to use a migrated Pluto6 version which can be found here: https://github.com/A2-Collaboration/pluto6

Known problems with ROOT6

There's currently a bug in ROOT6 which affects storing own classes, even derived from ROOT classes, nested in a STL container in a tree, like std::vector<ant::TSimpleParticle>. If you try to do something like this, you might get errors starting with Fatal in <TBranchElement::InitializeOffsets>: ... by Ant. This bug is known and reported here: ROOT-9450. If you get those errors, try to avoid nesting your objects in a container and store them individually instead, at least as long as the bug is not fixed.

Another bug in ROOT6 affects reading derived classes from TH2Poly back in from a file, e.g. if you use the cbtaps_display classes like TH2CB or TH2TAPS while running calibrations. The bug is triggered for example when calling Ant-hadd on files including those detector display histograms where they need to be read in. This bug is reported as well: ROOT-9741. Note: It has been finally fixed starting with the release of 6.20/00. If you're affected by this, either apply the patch yourself or update to a fixed ROOT version.

Why is Ant not multi-threaded?

Ant works singe-threaded by design. Writing multi-threaded programs that work correctly and reliably is orders of magnitude more complicated then the single-threaded approach. In most use-cases the work can be parallelized on the file level by running multiple instances of Ant, each processing one input file at a time and merging the output afterwards.

Is there something like the "Worker" from AcquROOT?

No. Use blaster or GNU parallel to run Ant on each input file and merge the output. See the tool AntSubmit, linked into your build/bin from the extra folder.

Are there no config files?

Ant stores the detector and experiment configuration and running conditions as source code inside C++ classes, called Setups. See files below src/expconfig.

What does "build failing" mean after I pushed some changes?

Everytime you push something to the master branch of Ant, an automated build and test of the code is triggered. For more information see Tests. If you introduced something which is not supported by older compilers (current requirement is GCC 4.9.2 should be able to build the code) or which breaks the expected behaviour of Ant, the compiling of the code itself or the subsequently run tests might fail. If this happens, the green "build passing" badge in the top section of the Readme turns into a red "build failing" badge.

Analysing Data with Ant

What happens if my data has been taken during the transition to/from DST?

Unfortunately there's no proper way to detect if a run file was taken while the transition to or from daylight saving time (DST) took place. This needs to be done within the acqu::FileFormatBase::GetTimeStamp() method in the unpacker/detail/UnpackerAcqu_detail.cc file. If the transition MEST->MET or the other way round happened during your beamtime, you need to add the run number with the year and if the time of the file is DST or not to the vector manual_dsts.