The Gaudi Framework  master (181af51f)
Loading...
Searching...
No Matches
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
18
19#include <math.h>
20
22
23//------------------------------------------------------------------------------
24HistoAlgorithm::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;
69 }
70 info() << "Finished booking Histograms" << endmsg;
71
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++;
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}
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition MsgStream.h:198
#define DECLARE_COMPONENT(type)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
SmartIF< IHistogramSvc > & histoSvc() const
The standard histogram service.
Algorithm(std::string name, ISvcLocator *svcloc, std::string version=PACKAGE_VERSION)
Constructor.
Definition Algorithm.h:98
const std::string & name() const override
The identifying name of the algorithm object.
HistoAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
IProfile2D * m_p2D
StatusCode initialize() override
IHistogram2D * m_h2D
IHistogram1D * m_h1DVar
IHistogram1D * m_h1D
IHistogram3D * m_h3DVar
StatusCode execute() override
IProfile1D * m_p1D
StatusCode finalize() override
IHistogram3D * m_h3D
IHistogram2D * m_h2DVar
virtual AIDA::IHistogram1D * book(const std::string &fullPath, const std::string &title, int binsX, double lowX, double highX)=0
Book histogram and register it with the histogram data store.
virtual std::ostream & print(AIDA::IBaseHistogram *h, std::ostream &s=std::cout) const =0
Print (ASCII) the histogram into the output stream.
virtual AIDA::IProfile1D * bookProf(const std::string &fullPath, const std::string &title, int binsX, double lowX, double highX, const std::string &opt="")=0
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Definition ISvcLocator.h:42
A small class used to access easily (and efficiently) data items residing in data stores.
This class is used for returning status codes from appropriate routines.
Definition StatusCode.h:64
constexpr static const auto SUCCESS
Definition StatusCode.h:99
constexpr static const auto FAILURE
Definition StatusCode.h:100
STL namespace.