ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
LArCalorimeter
LArClusterRec
src
LArDigitThinnerFromEMClust.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
LArClusterRec/LArDigitThinnerFromEMClust.h
"
6
7
#include <iostream>
8
9
#include "Identifier/Identifier.h"
10
#include "
Identifier/HWIdentifier.h
"
11
#include "
LArRawEvent/LArDigitContainer.h
"
12
#include "
LArRawEvent/LArDigit.h
"
13
#include "
xAODCaloEvent/CaloClusterContainer.h
"
14
#include "
CaloEvent/CaloCell.h
"
15
#include "
AthContainers/ConstDataVector.h
"
16
#include "
LArCabling/LArOnOffIdMapping.h
"
17
18
19
LArDigitThinnerFromEMClust::LArDigitThinnerFromEMClust
(
const
std::string& name,
20
ISvcLocator* pSvcLocator) :
21
AthReentrantAlgorithm
(name, pSvcLocator)
22
,
m_onlineID
(nullptr)
23
,
m_inputContainerKey
(
"FREE"
)
24
,
m_outputContainerKey
(
"LArDigitContainer_EMClust"
)
25
,
m_larCablingKey
(
"LArOnOffIdMap"
)
26
{
27
declareProperty
(
"InputContainerName"
,
m_inputContainerKey
);
28
declareProperty
(
"OutputContainerName"
,
m_outputContainerKey
);
29
declareProperty
(
"ClusterContainer"
,
m_clusterContainerKey
);
30
declareProperty
(
"LArOnOffMap"
,
m_larCablingKey
);
31
}
32
33
LArDigitThinnerFromEMClust::~LArDigitThinnerFromEMClust
() { }
34
35
36
StatusCode
LArDigitThinnerFromEMClust::initialize
() {
37
ATH_CHECK
(
detStore
()->retrieve(
m_onlineID
,
"LArOnlineID"
) );
38
ATH_CHECK
(
m_inputContainerKey
.initialize());
39
ATH_CHECK
(
m_outputContainerKey
.initialize());
40
ATH_CHECK
(
m_clusterContainerKey
.initialize());
41
ATH_CHECK
(
m_larCablingKey
.initialize());
42
return
StatusCode::SUCCESS;
43
}
44
45
StatusCode
LArDigitThinnerFromEMClust::finalize
() {
46
return
StatusCode::SUCCESS;
47
}
48
49
50
StatusCode
LArDigitThinnerFromEMClust::execute
(
const
EventContext& ctx)
const
{
51
52
//Get inputs from read handles:
53
SG::ReadHandle<LArDigitContainer>
inputContainer(
m_inputContainerKey
,ctx);
54
SG::ReadHandle<xAOD::CaloClusterContainer>
clusterContainer(
m_clusterContainerKey
,ctx);
55
56
//Write output via write handle
57
SG::WriteHandle<ConstDataVector<LArDigitContainer>
>outputContainer(
m_outputContainerKey
,ctx);
58
ATH_CHECK
(outputContainer.
record
(std::make_unique<
ConstDataVector<LArDigitContainer>
>(
SG::VIEW_ELEMENTS
)));
59
60
//Get cable map via read conditions handle
61
SG::ReadCondHandle<LArOnOffIdMapping>
larCablingHdl(
m_larCablingKey
,ctx);
62
const
LArOnOffIdMapping
* larCabling=*larCablingHdl;
63
64
auto
clusteredDigits = std::make_unique<std::bitset<200000> >();
65
66
//Loop over Clusters:
67
for
(
const
xAOD::CaloCluster
* clus : *clusterContainer) {
68
69
//Loop over cells in cluster:
70
xAOD::CaloCluster::const_cell_iterator
cellIter = clus->cell_begin();
71
xAOD::CaloCluster::const_cell_iterator
cellIterEnd = clus->cell_end();
72
for
( ;cellIter!=cellIterEnd;cellIter++) {
73
const
CaloCell
* cell = (*cellIter);
74
if
(cell) {
75
Identifier
id
= cell->ID();
76
HWIdentifier
hwid = larCabling->
createSignalChannelID
(
id
);
77
IdentifierHash
idHash =
m_onlineID
->channel_Hash(hwid);
78
size_t
index
= (size_t) (idHash);
79
clusteredDigits->set(
index
);
80
}
81
}
//end loop over cells in cluster
82
}
//end loop over cluster
83
84
85
for
(
const
LArDigit
* dig : *inputContainer) {
86
HWIdentifier
channelID = dig->channelID();
87
IdentifierHash
idHash =
m_onlineID
->channel_Hash(channelID);
88
size_t
index
= (size_t) (idHash);
89
if
(clusteredDigits->test(
index
)) outputContainer->push_back(dig);
90
}
91
92
ATH_MSG_DEBUG
(
"Copied "
<< outputContainer->size() <<
" of "
<< inputContainer->size() <<
" digits."
);
93
94
return
StatusCode::SUCCESS;
95
}
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
CaloCell.h
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
CaloClusterContainer.h
HWIdentifier.h
LArDigitContainer.h
LArDigitThinnerFromEMClust.h
LArDigit.h
LArOnOffIdMapping.h
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonAlgorithm< Gaudi::Algorithm >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Definition
AthCommonDataStore.h:95
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition
AthReentrantAlgorithm.h:74
CaloCell
Data object for each calorimeter readout cell.
Definition
CaloCell.h:57
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition
ConstDataVector.h:76
HWIdentifier
Definition
HWIdentifier.h:13
IdentifierHash
This is a "hash" representation of an Identifier.
Definition
IdentifierHash.h:25
LArDigitThinnerFromEMClust::~LArDigitThinnerFromEMClust
~LArDigitThinnerFromEMClust()
Definition
LArDigitThinnerFromEMClust.cxx:33
LArDigitThinnerFromEMClust::m_inputContainerKey
SG::ReadHandleKey< LArDigitContainer > m_inputContainerKey
Definition
LArDigitThinnerFromEMClust.h:53
LArDigitThinnerFromEMClust::m_clusterContainerKey
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_clusterContainerKey
Definition
LArDigitThinnerFromEMClust.h:55
LArDigitThinnerFromEMClust::LArDigitThinnerFromEMClust
LArDigitThinnerFromEMClust(const std::string &name, ISvcLocator *pSvcLocator)
Definition
LArDigitThinnerFromEMClust.cxx:19
LArDigitThinnerFromEMClust::initialize
StatusCode initialize() override
Definition
LArDigitThinnerFromEMClust.cxx:36
LArDigitThinnerFromEMClust::m_outputContainerKey
SG::WriteHandleKey< ConstDataVector< LArDigitContainer > > m_outputContainerKey
Definition
LArDigitThinnerFromEMClust.h:54
LArDigitThinnerFromEMClust::m_onlineID
const LArOnlineID * m_onlineID
Definition
LArDigitThinnerFromEMClust.h:51
LArDigitThinnerFromEMClust::finalize
StatusCode finalize() override
Definition
LArDigitThinnerFromEMClust.cxx:45
LArDigitThinnerFromEMClust::execute
StatusCode execute(const EventContext &ctx) const override
Definition
LArDigitThinnerFromEMClust.cxx:50
LArDigitThinnerFromEMClust::m_larCablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_larCablingKey
Definition
LArDigitThinnerFromEMClust.h:57
LArDigit
Liquid Argon digit base class.
Definition
LArDigit.h:25
LArOnOffIdMapping
Definition
LArOnOffIdMapping.h:20
LArOnOffIdMapping::createSignalChannelID
HWIdentifier createSignalChannelID(const Identifier &id) const
create a HWIdentifier from an Identifier (not inline)
Definition
LArOnOffIdMapping.h:126
SG::ReadCondHandle
Definition
ReadCondHandle.h:40
SG::ReadHandle
Definition
StoreGate/StoreGate/ReadHandle.h:67
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.
xAOD::CaloCluster_v1::const_cell_iterator
CaloClusterCellLink::const_iterator const_cell_iterator
Iterator of the underlying CaloClusterCellLink (explicitly const version).
Definition
CaloCluster_v1.h:796
Identifier
Definition
IdentifierFieldParser.cxx:14
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition
OwnershipPolicy.h:18
index
Definition
index.py:1
xAOD::CaloCluster
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Definition
Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloCluster.h:19
Generated on
for ATLAS Offline Software by
1.17.0