Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cbmroot
Manage
Activity
Members
Labels
Plan
Wiki
Redmine
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Computing
cbmroot
Commits
23535557
Commit
23535557
authored
3 years ago
by
Sergei Zharko
Browse files
Options
Downloads
Patches
Plain Diff
QA: CbmQaTable class added
parent
45b57cef
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!796
L1Algo interface and tools: updates
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
core/qa/CMakeLists.txt
+2
-0
2 additions, 0 deletions
core/qa/CMakeLists.txt
core/qa/CbmQaBaseLinkDef.h
+1
-0
1 addition, 0 deletions
core/qa/CbmQaBaseLinkDef.h
core/qa/CbmQaTable.cxx
+169
-0
169 additions, 0 deletions
core/qa/CbmQaTable.cxx
core/qa/CbmQaTable.h
+90
-0
90 additions, 0 deletions
core/qa/CbmQaTable.h
with
262 additions
and
0 deletions
core/qa/CMakeLists.txt
+
2
−
0
View file @
23535557
...
...
@@ -22,12 +22,14 @@ set(SRCS
CbmQaCanvas.cxx
CbmQaPie.cxx
CbmQaHist.cxx
CbmQaTable.cxx
)
set
(
HEADERS
CbmQaCanvas.h
CbmQaPie.h
CbmQaHist.h
CbmQaTable.h
)
set
(
LINKDEF CbmQaBaseLinkDef.h
)
...
...
This diff is collapsed.
Click to expand it.
core/qa/CbmQaBaseLinkDef.h
+
1
−
0
View file @
23535557
...
...
@@ -22,5 +22,6 @@
#pragma link C++ class CbmQaHist < TH1I> + ;
#pragma link C++ class CbmQaHist < TProfile> + ;
#pragma link C++ class CbmQaHist < TProfile2D> + ;
#pragma link C++ class CbmQaTable + ;
#endif
This diff is collapsed.
Click to expand it.
core/qa/CbmQaTable.cxx
0 → 100644
+
169
−
0
View file @
23535557
/* Copyright (C) 2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Sergey Gorbunov, Sergei Zharko [committer] */
/// \file CbmQaTable.cxx
/// \brief Implementation of CbmQaTable class
/// \author Sergei Zharko
/// \data 24.03.2022
///
/// Provides a ROOT Class to handle a numeric table
///
#include
"CbmQaTable.h"
#include
"TAxis.h"
#include
<iomanip>
#include
<iostream>
#include
<fstream>
#include
<sstream>
// TODO: Insert class info, try __PRETTY_FUNCTION__ and inline function for its modification (S.Zharko)
//------------------------------------------------------------------------------------------------------------------------
//
CbmQaTable
::
CbmQaTable
(
const
char
*
name
,
const
char
*
title
,
Int_t
nRows
,
Int_t
nCols
)
:
TH2D
(
name
,
title
,
nCols
,
0.
,
static_cast
<
Double_t
>
(
nCols
),
nRows
,
0.
,
static_cast
<
Double_t
>
(
nRows
))
,
fNcols
(
nCols
)
,
fNrows
(
nRows
)
{
//
// Setup default style of the table
TH2D
::
SetStats
(
kFALSE
);
TH2D
::
SetOption
(
"text"
);
TH2D
::
GetXaxis
()
->
SetTickLength
(
0.
);
TH2D
::
GetYaxis
()
->
SetTickLength
(
0.
);
TH2D
::
GetXaxis
()
->
SetLabelFont
(
kDefaultFontStyle
);
TH2D
::
GetYaxis
()
->
SetLabelFont
(
kDefaultFontStyle
);
// Define basic names of rows and columns
for
(
Int_t
iRow
=
1
;
iRow
<=
fNrows
;
++
iRow
)
{
TH2D
::
GetYaxis
()
->
SetBinLabel
(
fNrows
-
iRow
+
1
,
TString
::
Format
(
"row %d"
,
iRow
).
Data
());
}
for
(
Int_t
iCol
=
1
;
iCol
<=
fNcols
;
++
iCol
)
{
TH2D
::
GetXaxis
()
->
SetBinLabel
(
iCol
,
TString
::
Format
(
"col %d"
,
iCol
).
Data
());
}
}
//
//------------------------------------------------------------------------------------------------------------------------
//
CbmQaTable
::~
CbmQaTable
()
{
}
//
//------------------------------------------------------------------------------------------------------------------------
//
Double_t
CbmQaTable
::
GetCell
(
Int_t
iRow
,
Int_t
iCol
)
const
{
return
TH2D
::
GetBinContent
(
iCol
+
1
,
fNrows
-
iRow
);
}
//
//------------------------------------------------------------------------------------------------------------------------
//
Double_t
CbmQaTable
::
GetCellError
(
Int_t
iRow
,
Int_t
iCol
)
const
{
return
TH2D
::
GetBinError
(
iCol
+
1
,
fNrows
-
iRow
);
}
//
//------------------------------------------------------------------------------------------------------------------------
//
void
CbmQaTable
::
SetCell
(
Int_t
iRow
,
Int_t
iCol
,
Double_t
content
,
Double_t
error
)
{
TH2D
::
SetBinContent
(
iCol
+
1
,
fNrows
-
iRow
,
content
);
TH2D
::
SetBinError
(
iCol
+
1
,
fNrows
-
iRow
,
error
);
}
//
//------------------------------------------------------------------------------------------------------------
//
void
CbmQaTable
::
SetNamesOfCols
(
const
std
::
vector
<
std
::
string
>&
names
)
{
Int_t
nEntries
=
(
fNcols
>
static_cast
<
Int_t
>
(
names
.
size
()))
?
static_cast
<
Int_t
>
(
names
.
size
())
:
fNcols
;
// TODO: Possibly, we need a restriction on the names size (S.Zharko)
for
(
Int_t
iCol
=
1
;
iCol
<=
nEntries
;
++
iCol
)
{
TH2D
::
GetXaxis
()
->
SetBinLabel
(
iCol
,
names
[
iCol
-
1
].
c_str
());
}
}
//
//------------------------------------------------------------------------------------------------------------------------
//
void
CbmQaTable
::
SetNamesOfRows
(
const
std
::
vector
<
std
::
string
>&
names
)
{
Int_t
nEntries
=
(
fNrows
>
static_cast
<
Int_t
>
(
names
.
size
()))
?
static_cast
<
Int_t
>
(
names
.
size
())
:
fNrows
;
// TODO: Possibly, we need a restriction on the names size (S.Zharko)
for
(
Int_t
iRow
=
1
;
iRow
<=
nEntries
;
++
iRow
)
{
TH2D
::
GetYaxis
()
->
SetBinLabel
(
fNrows
-
iRow
+
1
,
names
[
iRow
-
1
].
c_str
());
}
}
//
//------------------------------------------------------------------------------------------------------------------------
//
std
::
string
CbmQaTable
::
ToString
()
const
{
std
::
stringstream
aStream
;
aStream
<<
(
*
this
);
return
aStream
.
str
();
}
//
//------------------------------------------------------------------------------------------------------------------------
//
void
CbmQaTable
::
ToTextFile
(
const
std
::
string
&
fileName
,
std
::
ios_base
::
openmode
mode
)
const
{
std
::
ofstream
fileOut
(
fileName
,
mode
);
fileOut
<<
(
*
this
);
fileOut
.
close
();
}
//
//------------------------------------------------------------------------------------------------------------------------
//
void
CbmQaTable
::
SetTextSize
(
Float_t
size
)
{
TH2D
::
SetMarkerSize
(
size
/
kDefaultTextSize
);
TH2D
::
GetXaxis
()
->
SetLabelSize
(
size
);
TH2D
::
GetYaxis
()
->
SetLabelSize
(
size
);
}
//
//------------------------------------------------------------------------------------------------------------------------
//
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
const
CbmQaTable
&
aTable
)
{
out
.
setf
(
std
::
ios
::
fixed
);
out
.
setf
(
std
::
ios
::
showpoint
);
out
.
precision
(
3
);
out
.
setf
(
std
::
ios
::
left
);
// Print column titles
out
<<
std
::
setw
(
CbmQaTable
::
kRowTitlesSetwPar
)
<<
std
::
setfill
(
' '
)
<<
' '
<<
' '
;
// top-left cell, always
for
(
Int_t
iCol
=
1
;
iCol
<=
aTable
.
fNcols
;
++
iCol
)
{
std
::
string
entry
=
std
::
string
(
aTable
.
GetXaxis
()
->
GetBinLabel
(
iCol
));
if
(
static_cast
<
Int_t
>
(
entry
.
size
())
>
CbmQaTable
::
kDefaultSetwPar
)
{
entry
=
entry
.
substr
(
0
,
CbmQaTable
::
kDefaultSetwPar
-
3
)
+
"..."
;
}
out
<<
std
::
setw
(
CbmQaTable
::
kDefaultSetwPar
)
<<
std
::
setfill
(
' '
)
<<
entry
<<
' '
;
}
out
<<
'\n'
;
for
(
Int_t
iRow
=
0
;
iRow
<
aTable
.
fNrows
;
++
iRow
)
{
// Print row title
std
::
string
entry
=
std
::
string
(
aTable
.
GetYaxis
()
->
GetBinLabel
(
aTable
.
fNrows
-
iRow
));
if
(
static_cast
<
Int_t
>
(
entry
.
size
())
>
CbmQaTable
::
kRowTitlesSetwPar
)
{
entry
=
entry
.
substr
(
0
,
CbmQaTable
::
kDefaultSetwPar
-
3
)
+
"..."
;
}
out
<<
std
::
setw
(
CbmQaTable
::
kRowTitlesSetwPar
)
<<
std
::
setfill
(
' '
)
<<
entry
<<
' '
;
for
(
Int_t
iCol
=
0
;
iCol
<
aTable
.
fNcols
;
++
iCol
)
{
out
<<
std
::
setw
(
CbmQaTable
::
kDefaultSetwPar
)
<<
std
::
setfill
(
' '
)
<<
aTable
.
GetCell
(
iRow
,
iCol
)
<<
' '
;
}
out
<<
'\n'
;
}
return
out
;
}
//
//------------------------------------------------------------------------------------------------------------------------
//
This diff is collapsed.
Click to expand it.
core/qa/CbmQaTable.h
0 → 100644
+
90
−
0
View file @
23535557
/* Copyright (C) 2022 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
SPDX-License-Identifier: GPL-3.0-only
Authors: Sergey Gorbunov, Sergei Zharko [committer] */
/// \file CbmQaTable.h
/// \brief Definition of CbmQaTable class
/// \author Sergei Zharko
/// \data 24.03.2022
///
/// Provides a ROOT Class to handle a numeric table
///
#ifndef CbmQaTable_h
#define CbmQaTable_h 1
#include
"TROOT.h"
#include
"TH2D.h"
#include
<fstream>
#include
<string>
// TODO: We need a method, which sets and gets cell values! (S.Zharko)
class
CbmQaTable
:
public
TH2D
{
public:
//
// CONSTRUCTORS AND DESTRUCTORS
//
/// Default constructor
CbmQaTable
()
:
TH2D
()
{}
/// Constructor from number of rows and columns
CbmQaTable
(
const
char
*
name
,
const
char
*
title
,
Int_t
nRows
,
Int_t
nCols
);
/// Destructor
virtual
~
CbmQaTable
();
/// Dumps table content into a string
std
::
string
ToString
()
const
;
/// Dumps table content into a text file. File open mode is also controllable, for example, use
/// mode = std::ios_base::app to append the table into an existing file
void
ToTextFile
(
const
std
::
string
&
fileName
,
std
::
ios_base
::
openmode
mode
=
std
::
ios_base
::
out
)
const
;
//
// GETTERS
//
/// Gets cell content. Please mind, that the signature and result of this function is different to TH2D::GetBinContent
Double_t
GetCell
(
Int_t
iRow
,
Int_t
iCol
)
const
;
/// Gets cell error. Please mind, that the signature and result of this function is different to TH2D::GetBinError
Double_t
GetCellError
(
Int_t
iRow
,
Int_t
iCol
)
const
;
/// Sets number of rows
Int_t
GetNrows
()
const
{
return
fNrows
;
}
/// Sets number of columns
Int_t
GetNcols
()
const
{
return
fNcols
;
}
/// Sets cell content and error. Please mind, that the signature and result of this function
/// is different to TH2D::SetBinContent and TH2D::SetBinError
void
SetCell
(
Int_t
iRow
,
Int_t
iCol
,
Double_t
content
,
Double_t
error
=
0.
);
/// Sets the names of table columns
void
SetNamesOfCols
(
const
std
::
vector
<
std
::
string
>&
names
);
/// Sets the names of table rows
void
SetNamesOfRows
(
const
std
::
vector
<
std
::
string
>&
names
);
/// Sets size of the text
void
SetTextSize
(
Float_t
size
=
0.03
);
/// Dumps table content into a stream
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
const
CbmQaTable
&
aTable
);
private
:
// Forbid methods for direct access to the bins
using
TH2D
::
GetBinContent
;
using
TH2D
::
GetBinError
;
using
TH2D
::
SetBinContent
;
using
TH2D
::
SetBinError
;
// Structural fields
Int_t
fNcols
{
0
};
///< number of columns in a table
Int_t
fNrows
{
0
};
///< number of rows in a table
// Some hard-coded constants
static
constexpr
Float_t
kDefaultTextSize
{
0.03
};
///< default size of text
static
constexpr
Style_t
kDefaultFontStyle
{
62
};
///< default text style
static
constexpr
Int_t
kDefaultSetwPar
{
12
};
///< default size of entry in std::setw() for columns
static
constexpr
Int_t
kRowTitlesSetwPar
{
30
};
///< size of entry in std::setw() for row titles
static
constexpr
Int_t
kValuesPrecision
{
3
};
///< precision of output parameters
// TODO: Apply this precision and other options to graphical verion of the table
ClassDef
(
CbmQaTable
,
1
);
};
#endif // CbmQaTable_h
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment