Main Page | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members | Related Pages

MatrixOfH.C

Go to the documentation of this file.
00001 
00014 #include "jbltools/sfh/MatrixOfH.h"
00015 #include "jbltools/sfh/SetOfHistograms.h"
00016 #include "jbltools/sfh/RegH1F.h"
00017 #include "jbltools/sfh/BinningFun.h"
00018 
00019 #include <TFile.h>
00020 #include <TAxis.h>
00021 
00022 #include <iostream>
00023 #include <cassert>
00024 
00025 using std::endl;
00026 using std::cout;
00027 using std::cerr;
00028 
00029 static const char *ident="@(#)$Id: MatrixOfH.C,v 1.5 2005/07/08 15:01:34 blist Exp $";
00030 
00031 MatrixOfH::MatrixOfH (const char* name_,  
00032                       const char* title_, 
00033                       const ROListPoR& rol, 
00034                       const BinningFunPoR& binning1_, 
00035                       const BinningFunPoR& binning2_,
00036                       Option_t* option_) 
00037 : SetOfH (name_, title_, rol, binning1_, binning2_, option_)
00038 {
00039   assert (getBinning (2));
00040   nbins2 = getBinning (2)->getMaxBins();
00041 }  
00042 
00043 void MatrixOfH::initHisto (IndexType i) {
00044   assert (0);
00045 }
00046 
00047 TH1 *MatrixOfH::getHisto (IndexType i, IndexType j) {
00048   return dynamic_cast<TH1 *>(getEntry (getBinNumber(i, j)));
00049 }
00050 
00051 void MatrixOfH::initHistos () {
00052   const BinningFun *binning1 = getBinning (1);
00053   const BinningFun *binning2 = getBinning (2);
00054   assert (binning1);
00055   assert (binning2);
00056   IndexType nbins1 = binning1->getNBins();
00057   IndexType nbins2 = binning2->getNBins();
00058   IndexType nbins = nbins1*nbins2;
00059   for (IndexType i = 0; i < nbins1; i++) {
00060     for (IndexType j = 0; j < nbins2; j++) {
00061       initHisto (i, j);
00062     }
00063   }
00064   cout << "MatrixOfH::initHistos: name=" << getName()
00065        << ", title=" << getTitle() 
00066        << "\nnbins1=" << nbins1 << ", nbins2=" << nbins2 << ", nbins=" << nbins
00067        << ", entries=" << getEntries() << endl;
00068   
00069   assert (getEntries() == nbins);
00070 }
00071 
00072 
00073 const char *MatrixOfH::genBinTitle (IndexType i, IndexType j) const {
00074   const BinningFun *binning1 = getBinning (1);
00075   const BinningFun *binning2 = getBinning (2);
00076   assert (binning1);
00077   assert (binning2);
00078   const char *bintitle1 = binning1->getBinTitle(i);
00079   const char *bintitle2 = binning2->getBinTitle(j);
00080   if (!bintitle1) {
00081     char *bt = new char[10];
00082     snprintf (bt, 10, "%lld", i);
00083     bintitle1 = bt;
00084   }
00085   if (!bintitle2) {
00086     char *bt = new char[10];
00087     snprintf (bt, 10, "%lld", i);
00088     bintitle2 = bt;
00089   }
00090   const char *title = getTitle();
00091   if (!title) title = "?";
00092   size_t size = strlen (title) + 1 + 
00093                 strlen (bintitle1) + 1 + 
00094                 strlen (bintitle2) + 1;
00095   char *htitle = new char[size];
00096   snprintf (htitle, size, "%s %s %s", title, bintitle1, bintitle2);
00097   delete[] bintitle1;
00098   delete[] bintitle2;
00099   return htitle;
00100 }
00101 
00102 const char *MatrixOfH::genBinName (IndexType i, IndexType j) const {
00103   const BinningFun *binning1 = getBinning (1);
00104   const BinningFun *binning2 = getBinning (2);
00105   assert (binning1);
00106   assert (binning2);
00107   const char *binname1 = binning1->getBinName(i);
00108   const char *binname2 = binning2->getBinName(j);
00109   if (!binname1) {
00110     char *bn = new char[10];
00111     snprintf (bn, 10, "%lld", i);
00112     binname1 = bn;
00113   }
00114   if (!binname2) {
00115     char *bn = new char[10];
00116     snprintf (bn, 10, "%lld", i);
00117     binname2 = bn;
00118   }
00119   const char *name = getName();
00120   if (!name) name = "?";
00121   size_t size = strlen (name) + strlen (binname1) + strlen (binname2) + 1;
00122   char *hname = new char[size];
00123   snprintf (hname, size, "%s%s%s", name, binname1, binname2);
00124   delete[] binname1;
00125   delete[] binname2;
00126   return hname;
00127 }
00128 
00129 MatrixOfH::~MatrixOfH () {
00130 }                    
00131 

Generated on Thu Oct 26 12:52:58 2006 for SFH by doxygen 1.3.2