htl - histogram template library
DESCRIPTION
HTL - Histogram Template Library. Pavel Binko LHCb / CERN. What is HTL ?. C++ class library Provides powerful histogramming functionality It only deals with histograms - binned data (not with n-tuples - unbinned data) Exploits the template facility of C++ - PowerPoint PPT PresentationTRANSCRIPT
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 1
LHCb Computing Meeting
HTL - Histogram Template Library
Pavel Binko
LHCb / CERN
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 2
LHCb Computing Meeting
What is HTL ?
C++ class library– Provides powerful histogramming functionality– It only deals with histograms - binned data
(not with n-tuples - unbinned data)
– Exploits the template facility of C++– Designed to be compact, extensible, modular and performant– Uses “the same” basic signature as HBOOK subroutines
Histogram name, number of bins, lower and upper bounds of the histogram axis are enough to create a 1D histogram
Transient and Persistent Histograms are de-coupled– Uses Objectivity/DB for persistency– Light weight Persistent Object Manager available (pre-alpha version)
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 3
LHCb Computing Meeting
Histogram Classes
User works with these predefined types– Histo1D - 1D histogram with Gravity_Bin_1D and fixed binning– Histo1DVar - 1D histogram with Gravity_Bin_1D and variable binning– ProfileHisto - 1D histogram with Profile_Bin and fixed binning– ProfileHistoVar - 1D histogram with Profile_Bin and variable binning– Histo2D - 2D histogram with Weighted_Bin and fixed binning– Histo2DF - 2D histogram with Float_Weighted_Bin and fixed binning– Histo2DVar - 2D histogram with Weighted_Bin and variable binning
Persistent version of all of them available– PHisto1D etc.
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 4
LHCb Computing Meeting
Partitions and Bins
Partitions describe– One dimension of the problem space– How it is divided into intervals
Bins contain information about– The content, the error and possibly the center of the bin– Fix and variable binning available
Weighted_Bin represents bins with weighted data points– By default the gravity centers are the middle or center of the bin
Gravity_Bin_1D represents bins with weighted data points– They know how to determine the gravity center of the bins
Profile_Bin represents bins that can average another quantity
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 5
LHCb Computing Meeting
I_Histo Interface
– virtual const char* name( ) – Title attached to current histogram.
– virtual I_Bin& i_bin( I_Bin_Location &a_location ) – virtual I_Bin& i_extra_bin( I_Extra_Bin_Location &a_location )
– In-range and extra bin associated with extra location a_location
– virtual Size bin_count( ) – virtual Size extra_bin_count( )
– Number of in-range and extra bins
– virtual Size dim( )– Dimension of the histo, i.e., of the problem space
– virtual I_Partition& i_partition( Index p = 0 ) – Partition interface of this histogram
– virtual I_Bin& i_bin( Index i )– Any bin (in-range or extra) with index "i" (note that this is a linear access)
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 6
LHCb Computing Meeting
I_Partition Interface
– virtual double i_bin_width( Index i ) – Width of in-range bin "i".
– virtual double i_lower_point( ) – Leftmost point of the partition.
– virtual double i_lower_point( Index i ) – Leftmost point of bin indexed by "i".
– virtual double i_upper_point( ) – Rightmost point of the partition.
– virtual double i_upper_point( Index i ) – Rightmost point of bin indexed by "i".
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 7
LHCb Computing Meeting
I_Bin Interface
– virtual double value( Index i = 0) and virtual double error( Index i = 0) – Value and error associated with this bin
– virtual Size count( ) – Count associated with this bin = Number of entries
– virtual void set_value( double other, Index i = 0 )– Set the value associated with this bin to "other"
– virtual void set_error( double other, Index i = 0 ) – Change/set the error of the bin to "other"
– virtual void set_count( Size other ) – Change/set the count of the bin to "other"
– virtual double center( Index i = 0) – Absolute or relative center of this bin on axis "i"
– virtual int offset( Index i = 0) – Relative or absolute position for the center of the bin
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 8
LHCb Computing Meeting
Create and fill a histogram
#include "HTL/Histograms.h" // Transient histograms
Histo1D *histo = new Histo1D( "Transient Histo_1D", 20, 0.0, 20.0 );
// Let's fill the histogram with 50000 points
long i;
double x, w;
for( i=0; i<50000; i++ ) {
x = (i % 22) - 1;
w = (x-9.5)*(x-9.5)/100;
histo->fill(x,w);
}
delete histo;
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 9
LHCb Computing Meeting
Helper Classes
I_Histo, I_Partition and I_Bin interfaces not sufficient– Helper classes introduced do add missing functionality
H_2D_Helper ( make slices, 2D projections ) H_Bin_Helper ( mins, maxs, in_range_error( ), bin_center() ) H_HistoTable1D and 2D ( write( ) - ASCII table output ) H_Printout ( print( ) - line printer output ) H_Statistics ( mean( ), rms( ), entries counts )
– Shortcuts for mean( ) and rms( ) provided Syntax: histo->mean( )
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 10
LHCb Computing Meeting
Output of a histogram
#include "HTL/Histograms.h" // Transient histograms
#include "HTL/PHistograms.h" // Persistent histograms
Histo1D *histoT = new Histo1D("Transient Histo_1D", 20, 0.0, 20.0 );
HepRef(PHisto2D) histoP =
new PHisto2D("Persistent Histo_2D", 20, 0.0, 20.0, 20, 0.0, 20.0 );
// Line printer representation of a histogram
HPrinter hp( cout ); // Into any output stream
hp.print( *histoT );
// ASCII table with a histogram contents
HistoTable1D ht1( "histo.txt” ); // Only into a text file
ht1.write( *histoP );
delete histoT;
delete histoP;
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 11
LHCb Computing Meeting
What is missing
Fill( ) is not part of any interface– Implemented as non-virtual inline functions
Output the histogram contents as an array (not ASCII)
Open for any input ...
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 12
LHCb Computing Meeting
Interface to PAW (1)
Provide set of new (similar to old) PAW commands To access HTL histograms the same way as the HBOOK histograms are accessed now
Two new menus created– OODB - interface to the Objectivity/DB
OPEN - Open a data base and a container HTLIN - Put in memory the HTL histogram indexed by ID LIST - List the HTL histograms in the currently opened data base
– T_HTL - to manipulate HTL transient histograms 1DHISTO - Create an HTL histogram PRINT - Print a HTL histogram LIST - List HTL histograms DELETE - Delete HTL histograms identified by ID PLOT - Plot a HTL histogram FRHBOOK - Convert the HBOOK histogram ID into an HTL histogram
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 13
LHCb Computing Meeting
Interface to PAW (2)
Proof of concept done– Integration of C++ in a FORTRAN application possible– Integration of HTL in well known PAW framework possible
Missing– 1D histograms with non-equidistant binning– Profile histograms– 2D histograms– Interface to KUIP vectors (PUT/CONTENT, GET/CONTENT etc ...)– HTL histograms filling– Fitting– etc.
25th May, 1999
HTL - Histogram Template Library
Pavel Binko , LHCb / CERN 14
LHCb Computing Meeting
Integration in GAUDI
Neither HTL code, nor HTL libraries compatible with our strategy– Changes done by Dino Ferrero Merlino and me– Library compiled in our environment with new created project file
Integration started last week - not part of this GAUDI release Required changes
– Slight modifications into HistogramSvc– Decisive changes in IHistogram interface
Merging of HTL interfaces into single consistent IHistogram interface