To ease up the development of new exotic model that can be plugged on the rest of the infrastructure, we have developped a Julia bind. The choice is Julia is motivated by the following aspects:
Python could not qualify easily to all these aspects and Julia offers an attractive middle ground between the fairly abstract C++ code base of BORG3 and the high level representation in Python.
When the Julia core is activated inside the libLSS core, a Julia Virtual machine is started and a number of libLSS primitives are made available from Julia code as called by libLSS at some point. Currently there are two available points:
While the main user of the Julia likelihood/Forward model is the HADES_JULIA main program it can be used by any other user of the LibLSS framework of ARES/BORG3. In HADES_JULIA the likelihood (and model in the future) are provided by two simple statement in the text configuration file: the main julia source file of the likelihood (as given in the example below) and the name of the module coded in that file.
The likelihood model is designed to allow some flexibility and easy parallelization for quick experimentation on large supercluster. We have opted to export the C++ basic code path for likelihoods while restraining to make the entirety of subtleties available to the user. Also the available I/Os are limited to the one provided by the ARES/BORG3 core to allow for safety and correct error reporting.
The file describing the likelihood must follow the following pattern:
The C++ side also provides a way of plugging a Julia code as a forward model. With the chaining framework for forward models, it is thus possible to couple a very complex chain of non-linear models. This part is still in heavy development and we only provide some early example.