Gaudi Framework, version v23r4

Home   Generated: Mon Sep 17 2012

HistoLabels.cpp

Go to the documentation of this file.
00001 // $Id: $
00002 // Include files
00003 
00004 //-----------------------------------------------------------------------------
00005 // Implementation file for class : HistoLabels
00006 //-----------------------------------------------------------------------------
00007 #ifdef WIN32
00008 // Disable warning
00009 //   warning C4996: 'sprintf': This function or variable may be unsafe.
00010 // coming from TString.h
00011 #pragma warning(disable:4996)
00012 #endif
00013 
00014 // local
00015 #include "GaudiUtils/HistoLabels.h"
00016 #include "GaudiUtils/Aida2ROOT.h"
00017 
00018 // ============================================================================
00019 // ROOT
00020 // ============================================================================
00021 #include "TH1D.h"
00022 #include "TH2D.h"
00023 #include "TProfile.h"
00024 #include "TProfile2D.h"
00025 
00026 // Private namespace
00027 namespace
00028 {
00029   //--------------------------------------------------------------------
00030 
00031   template <typename R, typename A>
00032   bool setAxisLabels_( A* aida,
00033                        const std::string& xAxis,
00034                        const std::string& yAxis )
00035   {
00036     if (!aida) return false;
00037     R * root = Gaudi::Utils::Aida2ROOT::aida2root( aida );
00038     if (!root) return false;
00039     root->SetXTitle(xAxis.c_str());
00040     root->SetYTitle(yAxis.c_str());
00041     return true;
00042   }
00043 
00044   //--------------------------------------------------------------------
00045 
00046   bool setBinLabels_( TAxis* axis,
00047                       const Gaudi::Utils::Histos::BinLabels & labels )
00048   {
00049     if (!axis) return false;
00050     const unsigned nbins = axis->GetNbins();
00051     for ( Gaudi::Utils::Histos::BinLabels::const_iterator i = labels.begin();
00052          i != labels.end(); ++i )
00053     {
00054       if ( 1+i->first <= 0 || 1+i->first > nbins ) return false;
00055       // Argh... ROOT bins start counting at '1' instead of '0'
00056       axis -> SetBinLabel( 1 + i->first, i->second.c_str() );
00057     }
00058     return true;
00059   }
00060 
00061   //--------------------------------------------------------------------
00062 
00063   template <typename R, typename A>
00064   bool setBinLabels_( A* aida,
00065                       const Gaudi::Utils::Histos::BinLabels& labels )
00066   {
00067     if (!aida) return false;
00068     R * root = Gaudi::Utils::Aida2ROOT::aida2root( aida );
00069     if (!root) return false;
00070     return setBinLabels_( root->GetXaxis(), labels );
00071   }
00072 
00073   template <typename Histogram>
00074   bool setBinLabels_( Histogram* hist,
00075                       const Gaudi::Utils::Histos::Labels& labels )
00076   {
00077     Gaudi::Utils::Histos::BinLabels l;
00078     l.reserve(labels.size());
00079     for ( unsigned i = 0; i<labels.size(); ++i )
00080     {
00081       l.push_back( Gaudi::Utils::Histos::BinLabel(i,labels[i]) );
00082     }
00083     return Gaudi::Utils::Histos::setBinLabels(hist,l);
00084   }
00085 
00086   //--------------------------------------------------------------------
00087 
00088 }
00089 
00090 namespace Gaudi
00091 {
00092   namespace Utils
00093   {
00094     namespace Histos
00095     {
00096 
00097   // --------------------------------------------------------------------------
00098 
00099       bool setBinLabels( AIDA::IHistogram1D* hist,
00100                          const BinLabels& labels )
00101       {
00102         return setBinLabels_<TH1D>(hist,labels);
00103       }
00104 
00105       bool setBinLabels( AIDA::IProfile1D* hist,
00106                          const BinLabels& labels )
00107       {
00108         return setBinLabels_<TProfile>(hist,labels);
00109       }
00110 
00111       bool setBinLabels( AIDA::IHistogram1D* hist,
00112                          const Labels& labels )
00113       {
00114         return setBinLabels_(hist,labels);
00115       }
00116 
00117       bool setBinLabels( AIDA::IProfile1D* hist,
00118                          const Labels& labels )
00119       {
00120         return setBinLabels_(hist,labels);
00121       }
00122 
00123       bool setBinLabels( AIDA::IHistogram2D* hist,
00124                          const Labels& xlabels,
00125                          const Labels& ylabels )
00126       {
00127         if (!hist) return false;
00128         TH2D * h2d = Gaudi::Utils::Aida2ROOT::aida2root( hist );
00129         if (!h2d)  return false;
00130         BinLabels lx;
00131         lx.reserve(xlabels.size());
00132         for ( unsigned int i = 0; i < xlabels.size(); ++i )
00133         {
00134           lx.push_back( Gaudi::Utils::Histos::BinLabel( i , xlabels[i] ) );
00135         }
00136         BinLabels ly;
00137         ly.reserve(ylabels.size());
00138         for ( unsigned int i = 0; i < ylabels.size(); ++i )
00139         {
00140           ly.push_back(Gaudi::Utils::Histos::BinLabel( i , ylabels[i] ) );
00141         }
00142         return ( setBinLabels_( h2d->GetXaxis(), lx ) &&
00143                  setBinLabels_( h2d->GetYaxis(), ly ) );
00144       }
00145 
00146       bool setBinLabels( AIDA::IHistogram2D* hist,
00147                          const BinLabels& xlabels,
00148                          const BinLabels& ylabels)
00149       {
00150         TH2D * h2d = Gaudi::Utils::Aida2ROOT::aida2root( hist );
00151         return ( h2d &&
00152                  setBinLabels_( h2d->GetXaxis(), xlabels ) &&
00153                  setBinLabels_( h2d->GetYaxis(), ylabels ) );
00154       }
00155 
00156       bool setBinLabels( AIDA::IProfile2D* hist,
00157                          const Labels& xlabels,
00158                          const Labels& ylabels )
00159       {
00160         if (!hist) return false;
00161         TProfile2D * h2d = Gaudi::Utils::Aida2ROOT::aida2root( hist );
00162         if (!h2d)  return false;
00163         BinLabels lx;
00164         lx.reserve(xlabels.size());
00165         for ( unsigned int i = 0; i < xlabels.size(); ++i )
00166         {
00167           lx.push_back(Gaudi::Utils::Histos::BinLabel( i , xlabels[i] ) );
00168         }
00169         BinLabels ly;
00170         ly.reserve(ylabels.size());
00171         for ( unsigned int i = 0; i < ylabels.size(); ++i )
00172         {
00173           ly.push_back(Gaudi::Utils::Histos::BinLabel( i , ylabels[i] ) );
00174         }
00175         return ( setBinLabels_( h2d->GetXaxis(), lx ) &&
00176                  setBinLabels_( h2d->GetYaxis(), ly ) );
00177       }
00178 
00179       bool setBinLabels( AIDA::IProfile2D* hist,
00180                          const BinLabels& xlabels,
00181                          const BinLabels& ylabels )
00182       {
00183         TProfile2D * h2d = Gaudi::Utils::Aida2ROOT::aida2root( hist );
00184         return ( h2d &&
00185                  setBinLabels_( h2d->GetXaxis(), xlabels ) &&
00186                  setBinLabels_( h2d->GetYaxis(), ylabels ) );
00187       }
00188 
00189       // --------------------------------------------------------------------------
00190 
00191       bool setAxisLabels( AIDA::IHistogram1D* hist,
00192                           const std::string & xAxis,
00193                           const std::string & yAxis  )
00194       {
00195         return setAxisLabels_<TH1D>( hist, xAxis, yAxis );
00196       }
00197 
00198       bool setAxisLabels( AIDA::IProfile1D* hist,
00199                           const std::string & xAxis,
00200                           const std::string & yAxis  )
00201       {
00202         return setAxisLabels_<TProfile>( hist, xAxis, yAxis );
00203       }
00204 
00205       bool setAxisLabels( AIDA::IHistogram2D* hist,
00206                           const std::string & xAxis,
00207                           const std::string & yAxis  )
00208       {
00209         return setAxisLabels_<TH2D>( hist, xAxis, yAxis );
00210       }
00211 
00212       bool setAxisLabels( AIDA::IProfile2D* hist,
00213                           const std::string & xAxis,
00214                           const std::string & yAxis  )
00215       {
00216         return setAxisLabels_<TProfile2D>( hist, xAxis, yAxis );
00217       }
00218 
00219       // --------------------------------------------------------------------------
00220 
00221     }
00222   }
00223 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Sep 17 2012 13:49:37 for Gaudi Framework, version v23r4 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004