The Gaudi Framework  master (37c0b60a)
HistoAlgorithm.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2024 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 // Include files
12 #include "HistoAlgorithm.h"
13 
14 #include <GaudiKernel/DataObject.h>
16 #include <GaudiKernel/MsgStream.h>
18 
19 #include <math.h>
20 
22 
23 //------------------------------------------------------------------------------
24 HistoAlgorithm::HistoAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
25  : Algorithm( name, pSvcLocator )
26 //------------------------------------------------------------------------------
27 {
28  m_h1D = m_h1DVar = 0;
29  m_h2D = m_h2DVar = 0;
30  m_h3D = m_h3DVar = 0;
31  m_p1D = 0;
32  m_p2D = 0;
33 }
34 
35 //------------------------------------------------------------------------------
37 //------------------------------------------------------------------------------
38 {
39  int i;
40  std::vector<double> edges;
41  for ( i = 0; i <= 10; i++ ) edges.push_back( double( i ) * double( i ) );
42  // Getting existing histograms
43  SmartDataPtr<IHistogram1D> h1( histoSvc(), "InFile/1" );
44  if ( h1 ) {
45  info() << "Got histogram from file" << endmsg;
46  histoSvc()->print( h1 );
47  } else {
48  error() << "Histogram h1 not found" << endmsg;
49  }
50 
51  info() << "Booking Histograms" << endmsg;
52 
53  // Book 1D histogram with fixed and variable binning
54  m_h1D = histoSvc()->book( "1", "1D fix binning", 50, 0., 100. );
55  m_h1DVar = histoSvc()->book( "Var/1", "1D variable binning", edges );
56 
57  m_h2D = histoSvc()->book( "2", "2D fix binning", 50, 0., 100., 50, 0., 100. );
58  m_h2DVar = histoSvc()->book( "Var/2", "2D variable binning", edges, edges );
59 
60  m_h3D = histoSvc()->book( "3", "3D fix binning", 50, 0., 100., 50, 0., 100., 10, 0., 100. );
61  m_h3DVar = histoSvc()->book( "Var/3", "3D variable binning", edges, edges, edges );
62  m_p1D = histoSvc()->bookProf( "Prof/1", "Profile 1D", 50, 0., 100. );
63  m_p2D = histoSvc()->bookProf( "Prof/2", "Profile 2D", 50, 0., 100., 50, 0., 100. );
64 
65  if ( 0 == m_h1D || 0 == m_h2D || 0 == m_h3D || 0 == m_h1DVar || 0 == m_h2DVar || 0 == m_h3DVar || 0 == m_p1D ||
66  0 == m_p2D ) {
67  error() << "----- Cannot book or register histograms -----" << endmsg;
68  return StatusCode::FAILURE;
69  }
70  info() << "Finished booking Histograms" << endmsg;
71 
72  return StatusCode::SUCCESS;
73 }
74 
75 //------------------------------------------------------------------------------
77 //------------------------------------------------------------------------------
78 {
79 
80  static int n = 0;
81 
82  double x = sin( double( n ) ) * 52. + 50.;
83  double y = cos( double( 2 * n ) ) * 52. + 50.;
84  double z = cos( double( 5 * n ) ) * 52. + 50.;
85 
86  m_h1D->fill( x );
87  m_h1DVar->fill( x );
88 
89  m_h2D->fill( x, y );
90  m_h2DVar->fill( x, y );
91 
92  m_h3D->fill( x, y, z );
93  m_h3DVar->fill( x, y, z );
94 
95  m_p1D->fill( x, y );
96  m_p2D->fill( x, y, z );
97 
98  n++;
99  return StatusCode::SUCCESS;
100 }
101 
102 //------------------------------------------------------------------------------
104 //------------------------------------------------------------------------------
105 {
106  debug() << "Finalizing..." << endmsg;
107 
108  // 1D HISTOGRAM STUFF
109  debug() << "Info about Histogram 1D\n" << endmsg;
110  // General Info:
111  debug() << "title: " << m_h1D->title() << endmsg;
112  debug() << "dim: " << m_h1D->dimension() << endmsg;
113  // Histo Info:
114  debug() << "Entries (In): " << m_h1D->entries() << endmsg;
115  debug() << "Entries (Out): " << m_h1D->extraEntries() << endmsg;
116  debug() << "Entries (All): " << m_h1D->allEntries() << endmsg;
117  debug() << "Entries (Eq.): " << m_h1D->equivalentBinEntries() << endmsg;
118 
119  debug() << "Sum of Heights(In): " << m_h1D->sumBinHeights() << endmsg;
120  debug() << "Sum of Heights(Out): " << m_h1D->sumExtraBinHeights() << endmsg;
121  debug() << "Sum of Heights(All): " << m_h1D->sumAllBinHeights() << endmsg;
122  debug() << "Min. Heights(In): " << m_h1D->minBinHeight() << endmsg;
123  debug() << "Max. Heights(In): " << m_h1D->maxBinHeight() << endmsg;
124  // Statistics:
125  debug() << "mean: " << m_h1D->mean() << endmsg;
126  debug() << "rms: " << m_h1D->rms() << endmsg;
127  // Print Histogram stream in ASCII on screen:
128  debug() << "Printing H1: " << endmsg;
129  // histoSvc()->print( m_h1D );
130 
131  // 1DVar HISTOGRAM STUFF
132  debug() << "Info about Histogram 1DVar\n" << endmsg;
133  // General Info:
134  debug() << "title: " << m_h1DVar->title() << endmsg;
135  debug() << "dim: " << m_h1DVar->dimension() << endmsg;
136  // Histo Info:
137  debug() << "Entries (In): " << m_h1DVar->entries() << endmsg;
138  debug() << "Entries (Out): " << m_h1DVar->extraEntries() << endmsg;
139  debug() << "Entries (All): " << m_h1DVar->allEntries() << endmsg;
140  debug() << "Entries (Eq.): " << m_h1DVar->equivalentBinEntries() << endmsg;
141  debug() << "Sum of Heights(In): " << m_h1DVar->sumBinHeights() << endmsg;
142  debug() << "Sum of Heights(Out): " << m_h1DVar->sumExtraBinHeights() << endmsg;
143  debug() << "Sum of Heights(All): " << m_h1DVar->sumAllBinHeights() << endmsg;
144  debug() << "Min. Heights(In): " << m_h1DVar->minBinHeight() << endmsg;
145  debug() << "Max. Heights(In): " << m_h1DVar->maxBinHeight() << endmsg;
146  // Statistics:
147  debug() << "mean: " << m_h1DVar->mean() << endmsg;
148  debug() << "rms: " << m_h1DVar->rms() << endmsg;
149  // Print Histogram stream in ASCII on screen:
150  debug() << "Printing H1Var: " << endmsg;
151  // histoSvc()->print( m_h1DVar );
152 
153  // 2D HISTOGRAM STUFF
154  debug() << "Info about Histogram 2D\n" << endmsg;
155  // General Info:
156  debug() << "title: " << m_h2D->title() << endmsg;
157  debug() << "dim: " << m_h2D->dimension() << endmsg;
158  // Histo Info:
159  debug() << "Entries (In): " << m_h2D->entries() << endmsg;
160  debug() << "Entries (Out): " << m_h2D->extraEntries() << endmsg;
161  debug() << "Entries (All): " << m_h2D->allEntries() << endmsg;
162  debug() << "Entries (Eq.): " << m_h2D->equivalentBinEntries() << endmsg;
163  debug() << "Sum of Heights(In): " << m_h2D->sumBinHeights() << endmsg;
164  debug() << "Sum of Heights(Out): " << m_h2D->sumExtraBinHeights() << endmsg;
165  debug() << "Sum of Heights(All): " << m_h2D->sumAllBinHeights() << endmsg;
166  debug() << "Min. Heights(In): " << m_h2D->minBinHeight() << endmsg;
167  debug() << "Max. Heights(In): " << m_h2D->maxBinHeight() << endmsg;
168  // Statistics:
169  debug() << "meanX: " << m_h2D->meanX() << endmsg;
170  debug() << "meanY: " << m_h2D->meanY() << endmsg;
171  debug() << "rmsX: " << m_h2D->rmsX() << endmsg;
172  debug() << "rmsY: " << m_h2D->rmsY() << endmsg;
173  // Print Histogram stream in ASCII on screen:
174  debug() << "Printing H1Var: " << endmsg;
175  // histoSvc()->print( m_h2D );
176 
177  // 2DVar HISTOGRAM STUFF
178  debug() << "Info about Histogram 2DVar\n" << endmsg;
179  // General Info:
180  debug() << "title: " << m_h2DVar->title() << endmsg;
181  debug() << "dim: " << m_h2DVar->dimension() << endmsg;
182  // Histo Info:
183  debug() << "Entries (In): " << m_h2DVar->entries() << endmsg;
184  debug() << "Entries (Out): " << m_h2DVar->extraEntries() << endmsg;
185  debug() << "Entries (All): " << m_h2DVar->allEntries() << endmsg;
186  debug() << "Entries (Eq.): " << m_h2DVar->equivalentBinEntries() << endmsg;
187 
188  debug() << "Sum of Heights(In): " << m_h2DVar->sumBinHeights() << endmsg;
189  debug() << "Sum of Heights(Out): " << m_h2DVar->sumExtraBinHeights() << endmsg;
190  debug() << "Sum of Heights(All): " << m_h2DVar->sumAllBinHeights() << endmsg;
191  debug() << "Min. Heights(In): " << m_h2DVar->minBinHeight() << endmsg;
192  debug() << "Max. Heights(In): " << m_h2DVar->maxBinHeight() << endmsg;
193  // Statistics:
194  debug() << "meanX: " << m_h2DVar->meanX() << endmsg;
195  debug() << "meanY: " << m_h2DVar->meanX() << endmsg;
196  debug() << "rmsX: " << m_h2DVar->rmsX() << endmsg;
197  debug() << "rmsY: " << m_h2DVar->rmsY() << endmsg;
198  // Print Histogram stream in ASCII on screen:
199  // debug() << "Printing H2Var: " << endmsg;
200  // histoSvc()->print( m_h2DVar );
201 
202  // Create X projection of the Pt versus P histogram m_hPtvsP
203  // IHistogram1D* xProj = histoSvc()->histogramFactory()->projectionX( "Proj/101", *m_h2D );
204  // IHistogram1D* yProj = histoSvc()->histogramFactory()->projectionY( "Proj/102" , *m_h2D );
205  // IHistogram1D* xSlice = histoSvc()->histogramFactory()->sliceX( "Slice/101" , *m_h2D, 10);
206  // IHistogram1D* ySlice = histoSvc()->histogramFactory()->sliceY( "Slice/102" , *m_h2D, 20);
207  // debug() << "Projection X" << endmsg;
208  // histoSvc()->print( xProj );
209  // debug() << "Projection Y" << endmsg;
210  // histoSvc()->print( yProj );
211  // // Print the slices
212  // debug() << "Slice X:" << endmsg;
213  // histoSvc()->print( xSlice );
214  // debug() << "Slice Y:" << endmsg;
215  // histoSvc()->print( ySlice );
216 
217  return StatusCode::SUCCESS;
218 }
HistoAlgorithm::finalize
StatusCode finalize() override
Definition: HistoAlgorithm.cpp:103
HistoAlgorithm::m_h1DVar
IHistogram1D * m_h1DVar
Definition: HistoAlgorithm.h:42
HistoAlgorithm::initialize
StatusCode initialize() override
Definition: HistoAlgorithm.cpp:36
HistoAlgorithm::m_h3DVar
IHistogram3D * m_h3DVar
Definition: HistoAlgorithm.h:46
HistoAlgorithm::m_h3D
IHistogram3D * m_h3D
Definition: HistoAlgorithm.h:45
std::vector< double >
ISvcLocator
Definition: ISvcLocator.h:46
Algorithm
Alias for backward compatibility.
Definition: Algorithm.h:58
Gaudi::Algorithm::histoSvc
SmartIF< IHistogramSvc > & histoSvc() const
The standard histogram service.
Definition: Algorithm.cpp:561
std::vector::push_back
T push_back(T... args)
HistoAlgorithm::execute
StatusCode execute() override
Definition: HistoAlgorithm.cpp:76
StatusCode
Definition: StatusCode.h:65
HistoAlgorithm::m_h2DVar
IHistogram2D * m_h2DVar
Definition: HistoAlgorithm.h:44
SmartDataPtr.h
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:202
cpluginsvc.n
n
Definition: cpluginsvc.py:234
HistoAlgorithm::m_h1D
IHistogram1D * m_h1D
Definition: HistoAlgorithm.h:41
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
HistoAlgorithm::m_p1D
IProfile1D * m_p1D
Definition: HistoAlgorithm.h:47
DataObject.h
SmartDataPtr
A small class used to access easily (and efficiently) data items residing in data stores.
Definition: SmartDataPtr.h:57
std
STL namespace.
DECLARE_COMPONENT
#define DECLARE_COMPONENT(type)
Definition: PluginServiceV1.h:46
HistoAlgorithm.h
HistoAlgorithm::m_h2D
IHistogram2D * m_h2D
Definition: HistoAlgorithm.h:43
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
HistoAlgorithm::m_p2D
IProfile2D * m_p2D
Definition: HistoAlgorithm.h:48
HistoAlgorithm
Definition: HistoAlgorithm.h:29
IHistogramSvc.h
MsgStream.h