Situation Regarding Histogram Template Libraries (HTL)

15-2-00

After working with the HTL installation for some time, it was established that Objectivity was required to facilitate the use of persistent histograms. The only realistic alternative available at this time is "Espresso", a program designed by RD45 as a fallback for Objectivity. It is currently only an 'alpha' version, and therefore is clearly not appropriate for our needs. Dino Ferrero (Bernardino.Ferrero.Merlino@cern.ch) and Tony Johnson are looking at the possibility of saving the histograms in XML format, but there is likely to be some delay before this is ready.

Once certain adjustments were implemented, they facilitated transient histograms that could then be sent to screen or saved as ASCII files. As such they can be used by PAW or Excel, but will ultimately be far too unwieldy to justify the use of HTL over programs such as HBOOK.

The examples directory, to be found in the path lhcxx/share/HTL/Sept99/HTL/examples, contains various illustrations of the functions offered by HTL. In order to run these, they should be copied to a local area, and adjusted as below.

HTL.csh

It is necessary to source this file in order to run the examples. It can be found in lhcxx/share/HTL/Sept99 and should be copied to the newly created examples directory. The undermentioned lines should be removed from the beginning of the file:

#setenv LHCXXTOP /afs/cern.ch/sw/lhcxx
setenv PLATF @sys
setenv HEP_ODBMS_DIR $LHCXXTOP/specific/$PLATF/HepODBMS/new
setenv HISTOODIR $LHCXXTOP/specific/$PLATF/HTL/pro
set LIBDIR = $LHCXXTOP/specific/$PLATF/new

They should be replaced by the following:

setenv OS Linux
setenv LHCXXTOP /lhcxx
setenv PLATF i386_redhat51
setenv HEP_ODBMS_DIR $LHCXXTOP/specific/$PLATF/HepODBMS/Sept99
setenv HISTOODIR $LHCXXTOP/specific/$PLATF/HTL/Sept99
set LIBDIR = $LHCXXTOP/specific/$PLATF/new

setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/lhcxx/specific/lnx/HTL/ Sept99/lib/
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/lhcxx/specific/lnx/ HepODBMS/Sept99/lib/
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/lhcxx/specific/lnx/ Objectivity/5.1.2/lib/
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/lhcxx/specific/lnx/ ObjectSpace/new/ToolKit/lib/

GNUMakefiles

The following addition should be made to the C Flags of all the GNUMakefiles of the examples you intend to use:

-I/lhcxx/specific/lnx/Objectivity/5.1.2/include

This is hardly an elegant and satisfactory solution, but it works.

The above adjustments enable some of the examples to compile and run. Once compiled, they create a file "Linux" and place the executable in that.

  • "NameHistos" (do read the README file) creates histograms, names them, then locates them by name and prints them.
  • "THistos" creates transient histograms and writes them to the screen. The line: hp.print( *histo ); should be removed (N.B. it appears twice in the code - once for each histogram), since the function itself causes segmentation faults.
  • "HistoTables" creates a two-dimensional histogram and writes it to an ASCII file.
  • "TSliceProj" creates sliced projections from transient histograms and prints them to screen.
  • Fully adjusted versions of the working examples may be found on ppu1 in home/blackler/prog/examples/ If you want to run them, then simply copy examples to your local area and run the gmakes. They were run on a HEP group PC running RedHat 6.0 Linux

    The other examples will not compile as they contain the line #include HTL/PHistograms.h, which requires Objectivity. Objectivity itself will not run under Red Hat 6.0 Linux.

    The decision has been made to continue using HBOOK with its C++ interface for the present. Eventually support for HBOOK will cease, but given the current state of its proposed replacements, that does not appear likely to happen in the near future.


    Note

    HEPFitting does not require HTL in order to function. Nor does it require Objectivity.

    In order to get rid of Objectivity you need to derive your own fitting class from HEPFitting and override the method setHistogram() with your own version of it. In order to do this, you should study the existing code model your new code on it.

    Once the histogram data has been copied to HEPFitting, it becomes independent of the particular implementation of the histogram class. Gemini is completely Objectivity independent.

    (Alternatively, the existing method setDataPoints() could be used, but the previous approach is preferable.)


  • Main Page