Anaphe Frequently Asked Questions



General Questions

  • Is this a new tool? Why haven't I heard about it before?

    Anaphe used to be called LHC++. The project was started a few years ago and has developed alongside Geant4 and CLHEP. The planning stage of Lizard (the interactive part) was started in September 1999 and the first prototype was completed in time for CHEP 2000. Work on the production version began in April 2000 and the first `fully functional' release was in June 2001.

  • Why should I use Lizard?

    It's modular, it's extensible, and it's very flexible. It's carefully designed to be maintainable in the long term. It is (and will continue to be) fully supported by CERN. Despite being a very young project, it is already comparable with PAW and we will keep adding functionality.

  • What is planned for the future?

    A condensed (and incomplete) list of things we want to do in the near and medium future is here. If you have suggestions and/or requests we would love to hear from you!

  • What about PAW/HBOOK?

    PAW will still be supported by CERN for some time, but maintenance and support will stop eventually. Long before that happens, Anaphe/Lizard will be able to do everything that PAW can, and much more. This is already true for many tasks.

  • How does this relate to the LCG?

    Anaphe now falls under the umbrella of the Applications workgroup of the LCG (leader T.Wenaus). As of May 2002 our work has been guided by their requirements, though the project remains part of the IT/API group.

  • How do I report a bug?

    Send an email to the the mailing list.

  • How can I help?

    We are still developing Lizard, and are actively seeking users who would like to help shape the functionality and user interface. Contact us if you would like to help.


Python Questions

  • Why use Python (instead of KUIP, Cint, Perl...)

    Python is a very powerful and stable interpreted OO programming language. It is free, open-source, and remarkably bug-free. Python has hundreds of thousands of users and hundreds of maintainers and developers. It has been around for ten years and will certainly be around for another ten or more. There are a large number of powerful Python libraries which are trivial for the user to add, and extending it yourself is quite simple. It is more weakly-typed and compact than C++ (which makes it considerably less tedious to type). It also, importantly, acts as an insulating layer between you and the details of the libraries you are currently using to do the work. Some/all of the libraries underlying Lizard could be rewritten in Java (or something else) in 2010 and all your scripts and experiment frameworks would remain valid. Regarding Cint (the C++ interpreter used for the interactive part of Root) we feel the benefits (similar syntax for interpreted and compiled parts) are outweighed by the problems (tied to C++ for ever, tedious to type, smaller user base = riskier). Regarding KUIP, we feel Python provides everything KUIP did (and much more) and we don't have to support it, which wastes manpower. Regarding Perl, we just preferred the language, although in principle the Anaphe libraries could be bound to Perl instead of Python. Python is genuinely OO in philosophy and syntax, and mirrors much more closely the underlying structure of the libraries, which has less potential for confusion.

  • Isn't it slow?

    Not particularly (it's about as fast as an interpreted language gets). If you write something and find it's slow, you can use the Analyzer module in Lizard to move the bottlenecks (for example, histogram filling) into a compiled library. Most applications have a very few time-critical components, and the rest can be interpreted without noticeable penalty. Where the Anaphe libraries are concerned, the "translation" from Python to C++ often consists of nothing more than changing the dots to arrows (Python has no pointers) and putting it in a function.

  • What about support?

    The Python web site has lots and lots of documentation and FAQs (some of it mirrored here at CERN). There is also a very active comp.lang.python newsgroup if you can't find a solution to your problem in the docs. We will also help you with Python problems if you still can't find a solution.


Installation

  • I want to run on Fedora Core 1. How do I do this?

    For Fedora Core 1 follow the procedure for RedHat 9: please download the binaries for the redhat73/gcc-3.2 platform. After this, you need to do two fixes in order to get Anaphe run:
    1. Upgrade the guessPlatf.py script in your /path/to/Anaphe/share/LHCXX/5.0.6/scripts/ directory. To do this, please download the new script and copy it into your /path/to/Anaphe/share/LHCXX/5.0.6/scripts/guessPlatf.py.
      Alternatively, you can edit the file /path/to/Anaphe/share/LHCXX/5.0.6/scripts/guessPlatf.py and replace the "9.0" for redhat with just "9".
    2. Replace the libg2cforMinuit.so :
        pushd /path/to/Anaphe/specific/redhat73/gcc-3.2/5.0.6/lib
        mv libg2c-forMinuit.so libg2c-forMinuit.so-fromRelease
        ln -s /usr/lib/libg2c.so.0 libg2c-forMinuit.so
      

    Ignore the "Segmentation fault" in aida-config.py, if you get it (this appears in some environments after the ending of python when unloading the libraries and is not yet traced, but is harmless)

    Make sure you have added the path to the libraries: /specific/redhat73/gcc-3.2/5.0.6/lib to your LD_LIBRARY_PATH environment variable before running any executable.

  • I want to run on RedHat 9. How do I do this?

    For RedHat 9 please download the binaries for the redhat73/gcc-3.2 platform. After this, you need to do two fixes in order to get Anaphe 5.0.6 to run:
    1. Upgrade the guessPlatf.py script in your /path/to/Anaphe/share/LHCXX/5.0.6/scripts/ directory. To do this, please download the new script and copy it into your /path/to/Anaphe/share/LHCXX/5.0.6/scripts/guessPlatf.py.
      Alternatively, you can edit the file /path/to/Anaphe/share/LHCXX/5.0.6/scripts/guessPlatf.py and replace the "9.0" for redhat with just "9".
    2. Replace the libg2cforMinuit.so :
        pushd /path/to/Anaphe/specific/redhat73/gcc-3.2/5.0.6/lib
        mv libg2c-forMinuit.so libg2c-forMinuit.so-fromRelease
        ln -s /usr/lib/libg2c.so.0 libg2c-forMinuit.so
      
    For Anaphe 5.0.5 the following two patches have been provided by Ping Yeh (Thanks !!) to run on RedHat 9: patch to setup-Anaphe and patch to anaphe-setup.py .
  • I can't find the AIDA header files. What's wrong?

    The AIDA headers are not (currently) distributed as part of Anaphe. If the environment variable AIDA_DIR is not set then the default behaviour of aida-config is to produce -I/afs/cern.ch/sw/contrib/AIDA/<version>/cpp. If you are doing a local installation then you need to put the AIDA header files (available from the web site) somewhere and set AIDA_DIR to point to it.

  • How do I check out a package from the CVS repository?

    Use the following commands:
    cvs -d :pserver:cvsuser@pcitasd28.cern.ch:/data/CVS/Anaphe/cvsroot login
    passwd: cvsuser
    cvs -d :pserver:cvsuser@pcitasd28.cern.ch:/data/CVS/Anaphe/cvsroot checkout package
    Alternatively, you can set the environment variable CVSROOT to point to the directory:
    export CVSROOT=:pserver:cvsuser@pcitasd28.cern.ch:/data/CVS/Anaphe/cvsroot (bash etal.)
    setenv CVSROOT=:pserver:cvsuser@pcitasd28.cern.ch:/data/CVS/Anaphe/cvsroot (tcsh et al.)
    and use the cvs commands without the -d option:
    cvs login
    passwd: cvsuser
    cvs checkout package


  • My version of g++ is not up-to-date. How can I switch to gcc 2.95.2?

    Read this page.

  • Using Nag Mark 6, the compiler fails on the nagg01.h header file. Why?

    A: The nagg01.h header file in the standard distribution contains a function prototype that can't be compiled in C++ (because it uses the C++ keyword class). If you're using the NAG C libraries under the Cern licensing scheme, please contact us to get the fixed header file. Otherwise, report the problem to your local NAG dealer. If you need a quick-and-dirty fix, just substitute Nag_ClassBoundary class_ind to Nag_ClassBoundary class in the prototype:
    g01aec(Integer n, const double x[], Integer num_class,Nag_ClassBoundary class, 
           double cint[], Integer ifreq[], double *xmin,double *xmax,
           NagError *fail);
    	           



Error Messages


Histograms and Ntuples


Plotting and Graphics


Fitting