| The Gaudi Framework v32r1 (f65d50dc)

P2D.cpp
Go to the documentation of this file.
1 #ifdef __ICC
2 // disable icc remark #2259: non-pointer conversion from "X" to "Y" may lose significant bits
3 // TODO: To be removed, since it comes from ROOT TMathBase.h
4 # pragma warning( disable : 2259 )
5 #endif
6 #ifdef WIN32
7 // Disable warning
8 // warning C4996: 'sprintf': This function or variable may be unsafe.
9 // coming from TString.h
10 # pragma warning( disable : 4996 )
11 #endif
12 #include "GaudiPI.h"
13 #include <GaudiCommonSvc/HistogramUtility.h>
14 #include <GaudiCommonSvc/P2D.h>
15 #include <GaudiKernel/DataObject.h>
16 #include <GaudiKernel/ObjectFactory.h>
17 #include <TH2D.h>
18 #include <TProfile2D.h>
19
20 namespace Gaudi {
21 template <>
22 void* Generic2D<AIDA::IProfile2D, TProfile2D>::cast( const std::string& className ) const {
23 return className == "AIDA::IProfile2D"
24 ? const_cast<AIDA::IProfile2D*>( static_cast<const AIDA::IProfile2D*>( this ) )
25 : className == "AIDA::IProfile"
26 ? const_cast<AIDA::IProfile*>( static_cast<const AIDA::IProfile*>( this ) )
27 : className == "AIDA::IBaseHistogram"
28 ? const_cast<AIDA::IBaseHistogram*>( static_cast<const AIDA::IBaseHistogram*>( this ) )
29 : nullptr;
30 }
31
32 template <>
33 int Generic2D<AIDA::IProfile2D, TProfile2D>::binEntries( int idX, int idY ) const {
34 int rBin = m_rep->GetBin( rIndexX( idX ), rIndexY( idY ) );
35 return int( m_rep->GetBinEntries( rBin ) + 0.5 );
36 }
37
38 template <>
39 void Generic2D<AIDA::IProfile2D, TProfile2D>::adoptRepresentation( TObject* rep ) {
40 TProfile2D* imp = dynamic_cast<TProfile2D*>( rep );
41 if ( !imp ) throw std::runtime_error( "Cannot adopt native histogram representation." );
42 m_rep.reset( imp );
43 m_xAxis.initialize( m_rep->GetXaxis(), true );
44 m_yAxis.initialize( m_rep->GetYaxis(), true );
45 setTitle( m_rep->GetTitle() );
46 }
47 } // namespace Gaudi
48
49 std::pair<DataObject*, AIDA::IProfile2D*> Gaudi::createProf2D( const std::string& title, const Edges& eX,
50 const Edges& eY, double /* zlow */, double /* zup */ ) {
51 // Not implemented in ROOT! Can only use TProfile2D with no z-limits
52 auto p = new Profile2D( new TProfile2D( title.c_str(), title.c_str(), eX.size() - 1, &eX.front(), eY.size() - 1,
53 &eY.front() /*,zlow,zup */ ) );
54 return {p, p};
55 }
56
57 std::pair<DataObject*, AIDA::IProfile2D*> Gaudi::createProf2D( const std::string& title, int binsX, double xlow,
58 double xup, int binsY, double ylow, double yup,
59 double zlow, double zup ) {
60 auto p =
61 new Profile2D( new TProfile2D( title.c_str(), title.c_str(), binsX, xlow, xup, binsY, ylow, yup, zlow, zup ) );
62 return {p, p};
63 }
64
65 std::pair<DataObject*, AIDA::IProfile2D*> Gaudi::createProf2D( const AIDA::IProfile2D& hist ) {
66 auto h = getRepresentation<AIDA::IProfile2D, TProfile2D>( hist );
67 auto n = ( h ? new Profile2D( new TProfile2D( *h ) ) : nullptr );
68 return {n, n};
69 }
70
71 Gaudi::Profile2D::Profile2D( TProfile2D* rep ) {
72 m_classType = "IProfile2D";
73 rep->SetDirectory( nullptr );
74 adoptRepresentation( rep );
75 m_sumEntries = 0;
76 }
Gaudi::Generic2D::m_sumEntries
int m_sumEntries
cache sumEntries (allEntries) when setting contents since Root can't compute by himself
Definition: Generic2D.h:155
Gaudi::Generic2D::cast
void * cast(const std::string &className) const override
Introspection method.
ObjectFactory.h
Gaudi::Generic2D::binEntries
int binEntries(int indexX, int indexY) const override
The number of entries (ie the number of times fill was called for this bin).
GaudiPI.h
std::string
STL class.
Gaudi::Generic2D::adoptRepresentation
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
GaudiPluginService.cpluginsvc.n
n
Definition: cpluginsvc.py:210
P2D.h
Gaudi::Generic2D::m_classType
std::string m_classType
class type
Definition: Generic2D.h:153
std::runtime_error
STL class.
std::pair
Gaudi::createProf2D
std::pair< DataObject *, AIDA::IProfile2D * > createProf2D(const AIDA::IProfile2D &hist)
Copy constructor.
std::string::c_str
T c_str(T... args)
HistogramUtility.h
Gaudi::Profile2D::Profile2D
Profile2D()
Default Constructor.
Definition: P2D.h:20
Gaudi
Header file for std:chrono::duration-based Counters.
Definition: __init__.py:1
DataObject.h