ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
Acts
ActsDataPreparation
src
HgtdClusterizationAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
HgtdClusterizationAlg.h
"
6
#include "
HGTD_ReadoutGeometry/HGTD_DetectorElement.h
"
7
#include "
AthenaMonitoringKernel/Monitored.h
"
8
#include "
ActsInterop/TableUtils.h
"
9
10
namespace
ActsTrk
{
11
12
HgtdClusterizationAlg::HgtdClusterizationAlg
(
const
std::string& name,
13
ISvcLocator* pSvcLocator)
14
:
AthReentrantAlgorithm
(name, pSvcLocator)
15
{}
16
17
StatusCode
HgtdClusterizationAlg::initialize
()
18
{
19
ATH_MSG_DEBUG
(
"Initializing "
<< name() <<
" ..."
);
20
ATH_CHECK
(
m_clusteringTool
.retrieve());
21
ATH_CHECK
(
m_monTool
.retrieve(EnableTool{not m_monTool.empty()}));
22
23
ATH_CHECK
(
m_rdoContainerKey
.initialize(not
m_use_altiroc_rdo
.value()));
24
ATH_CHECK
(
m_altiroc_rdo_rh_key
.initialize(
m_use_altiroc_rdo
.value()));
25
ATH_CHECK
(
m_clusterContainerKey
.initialize());
26
27
return
StatusCode::SUCCESS;
28
29
}
30
31
StatusCode
HgtdClusterizationAlg::finalize
() {
32
ATH_MSG_INFO
(
"Clusterization statistics"
<< std::endl <<
makeTable
(m_stat,
33
std::array<std::string, kNStat>{
34
"RDOs"
,
35
"Clusters"
36
}).columnWidth(10));
37
38
return
StatusCode::SUCCESS;
39
}
40
41
StatusCode
HgtdClusterizationAlg::execute
(
const
EventContext& ctx)
const
42
{
43
ATH_MSG_DEBUG
(
"Executing "
<< name() <<
" ..."
);
44
45
auto
timer =
Monitored::Timer<std::chrono::milliseconds>
(
"TIME_execute"
);
46
auto
mon =
Monitored::Group
(
m_monTool
, timer );
47
48
SG::WriteHandle<xAOD::HGTDClusterContainer>
clusterContainer =
SG::makeHandle
(
m_clusterContainerKey
, ctx);
49
ATH_CHECK
(clusterContainer.
record
(std::make_unique<xAOD::HGTDClusterContainer>(),
50
std::make_unique<xAOD::HGTDClusterAuxContainer>()));
51
52
unsigned
int
nRDOs=0;
53
unsigned
int
nClusters=0;
54
std::vector<IHGTDClusteringTool::ClusterCollection> clusterCollection;
55
if
(
m_use_altiroc_rdo
){
56
SG::ReadHandle<HGTD_ALTIROC_RDO_Container>
rdoContainer =
SG::makeHandle
(
m_altiroc_rdo_rh_key
, ctx);
57
if
(!rdoContainer.
isValid
()) {
58
ATH_MSG_ERROR
(
"Failed to retrieve HGTD ALTIROC RDO container"
);
59
return
StatusCode::FAILURE;
60
}
61
62
clusterCollection.reserve(rdoContainer->size());
63
for
(
const
auto
rdoCollection : *rdoContainer) {
64
if
(rdoCollection->empty()) {
65
continue
;
66
}
67
nRDOs+=rdoCollection->size();
68
ATH_CHECK
(
m_clusteringTool
->clusterize(ctx, *rdoCollection, clusterCollection));
69
nClusters += clusterCollection.back().size();
70
}
71
72
}
else
{
73
SG::ReadHandle<HGTD_RDO_Container>
rdoContainer =
SG::makeHandle
(
m_rdoContainerKey
, ctx);
74
if
(!rdoContainer.
isValid
()) {
75
ATH_MSG_ERROR
(
"Failed to retrieve HGTD RDO container"
);
76
return
StatusCode::FAILURE;
77
}
78
79
clusterCollection.reserve(rdoContainer->size());
80
for
(
const
auto
rdoCollection : *rdoContainer) {
81
if
(rdoCollection->empty()) {
82
continue
;
83
}
84
nRDOs+=rdoCollection->size();
85
ATH_CHECK
(
m_clusteringTool
->clusterize(ctx, *rdoCollection, clusterCollection));
86
nClusters += clusterCollection.back().size();
87
}
88
}
89
90
clusterContainer->push_new(nClusters, []() {
return
new
xAOD::HGTDCluster
;});
91
std::any cache =
m_clusteringTool
->createEventDataCache(*clusterContainer,nRDOs);
92
93
std::size_t icluster=0;
94
for
(std::size_t icollection=0u; icollection<clusterCollection.size(); ++icollection) {
95
ATH_CHECK
(
m_clusteringTool
->makeClusters(ctx,
96
clusterCollection[icollection],
97
*clusterContainer,
98
icluster,
99
cache));
100
icluster += clusterCollection[icollection].size();
101
}
102
assert( clusterContainer->size() == icluster);
103
104
m_stat[
kNRdo
] += nRDOs;
105
m_stat[
kNClusters
] += clusterContainer->size();
106
ATH_MSG_DEBUG
(
"Clusters produced size: "
<<clusterContainer->size());
107
return
StatusCode::SUCCESS;
108
}
109
110
111
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
HGTD_DetectorElement.h
HgtdClusterizationAlg.h
Monitored.h
Header file to be included by clients of the Monitored infrastructure.
TableUtils.h
makeTable
TableUtils::StatTable< T > makeTable(const std::array< T, N > &counter, const std::array< std::string, N > &label)
Definition
TableUtils.h:544
ActsTrk::HgtdClusterizationAlg::m_clusterContainerKey
SG::WriteHandleKey< xAOD::HGTDClusterContainer > m_clusterContainerKey
Definition
HgtdClusterizationAlg.h:38
ActsTrk::HgtdClusterizationAlg::m_rdoContainerKey
SG::ReadHandleKey< HGTD_RDO_Container > m_rdoContainerKey
Definition
HgtdClusterizationAlg.h:36
ActsTrk::HgtdClusterizationAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition
HgtdClusterizationAlg.cxx:41
ActsTrk::HgtdClusterizationAlg::m_altiroc_rdo_rh_key
SG::ReadHandleKey< HGTD_ALTIROC_RDO_Container > m_altiroc_rdo_rh_key
Definition
HgtdClusterizationAlg.h:37
ActsTrk::HgtdClusterizationAlg::HgtdClusterizationAlg
HgtdClusterizationAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition
HgtdClusterizationAlg.cxx:12
ActsTrk::HgtdClusterizationAlg::finalize
virtual StatusCode finalize() override
Definition
HgtdClusterizationAlg.cxx:31
ActsTrk::HgtdClusterizationAlg::m_clusteringTool
ToolHandle< IHGTDClusteringTool > m_clusteringTool
Definition
HgtdClusterizationAlg.h:33
ActsTrk::HgtdClusterizationAlg::m_use_altiroc_rdo
BooleanProperty m_use_altiroc_rdo
Definition
HgtdClusterizationAlg.h:40
ActsTrk::HgtdClusterizationAlg::initialize
virtual StatusCode initialize() override
Definition
HgtdClusterizationAlg.cxx:17
ActsTrk::HgtdClusterizationAlg::m_monTool
ToolHandle< GenericMonitoringTool > m_monTool
Definition
HgtdClusterizationAlg.h:34
ActsTrk::HgtdClusterizationAlg::kNClusters
@ kNClusters
Definition
HgtdClusterizationAlg.h:45
ActsTrk::HgtdClusterizationAlg::kNRdo
@ kNRdo
Definition
HgtdClusterizationAlg.h:44
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
Monitored::Group
Group of local monitoring quantities and retain correlation when filling histograms
Definition
MonitoredGroup.h:53
Monitored::Timer
A monitored timer.
Definition
MonitoredTimer.h:32
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition
MdtCalibInput.h:31
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition
ReadCondHandle.h:269
xAOD::HGTDCluster
HGTDCluster_v1 HGTDCluster
Define the version of the pixel cluster class.
Definition
HGTDCluster.h:13
Generated on
for ATLAS Offline Software by
1.17.0