ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
ISF
ISF_FastCaloSim
ISF_FastCaloSimParametrization
src
CaloCellContainerSDTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
6
// Header include
7
#include "
CaloCellContainerSDTool.h
"
8
9
// CaloCellContainer sensitive detector
10
#include "
ISF_FastCaloSimParametrization/CaloCellContainerBuilder.h
"
11
#include "
ISF_FastCaloSimParametrization/CaloCellContainerSD.h
"
12
13
#include "
HitManagement/HitCollectionMap.h
"
14
#include "
StoreGate/WriteHandle.h
"
15
16
#include <memory>
17
18
CaloCellContainerSDTool::CaloCellContainerSDTool
(
const
std::string&
type
,
const
std::string& name,
const
IInterface* parent)
19
:
SensitiveDetectorBase
(
type
, name , parent ),
20
m_EmptyCellBuilderTool
(
"EmptyCellBuilderTool/EmptyCellBuilderTool"
),
21
m_FastHitConvertTool
(
"FastHitConvertTool/FastHitConvertTool"
)
22
{
23
declareProperty (
"EmptyCellBuilderTool"
,
m_EmptyCellBuilderTool
,
"EmptyCellBuilderTool"
);
24
declareProperty (
"FastHitConvertTool"
,
m_FastHitConvertTool
,
"FastHitConvertTool"
);
25
}
26
27
StatusCode
CaloCellContainerSDTool::initialize
()
28
{
29
ATH_CHECK
(
m_EmptyCellBuilderTool
.retrieve());
30
ATH_CHECK
(
m_FastHitConvertTool
.retrieve());
31
return
StatusCode::SUCCESS;
32
}
33
34
StatusCode
CaloCellContainerSDTool::SetupEvent
(
HitCollectionMap
& hitCollections)
35
{
36
// Get current event context
37
const
EventContext& ctx = Gaudi::Hive::currentContext();
38
39
const
std::string& collectionName =
m_outputCollectionNames
[0];
40
hitCollections.
Emplace
<
CaloCellContainerBuilder
>(collectionName);
41
auto
* builder = hitCollections.
Find
<
CaloCellContainerBuilder
>(collectionName);
42
if
(!builder) {
43
ATH_MSG_ERROR
(
"SetupEvent: Failed to create CaloCellContainerBuilder."
);
44
return
StatusCode::FAILURE;
45
}
46
47
// Initialize cell container with empty cells.
48
if
(
m_EmptyCellBuilderTool
->process(builder->container.get(), ctx).isFailure()){
49
ATH_MSG_ERROR
(
"SetupEvent: Failed to process calo cell container with the empty cell builder tool."
);
50
return
StatusCode::FAILURE;
51
}
52
53
return
StatusCode::SUCCESS;
54
}
55
56
StatusCode
CaloCellContainerSDTool::Gather
(
HitCollectionMap
& hitCollections)
57
{
58
// Get current event context
59
const
EventContext& ctx = Gaudi::Hive::currentContext();
60
61
const
std::string& collectionName =
m_outputCollectionNames
[0];
62
std::unique_ptr<CaloCellContainerBuilder> builder =
63
hitCollections.
Extract
<
CaloCellContainerBuilder
>(collectionName);
64
if
(!builder || !builder->container) {
65
ATH_MSG_ERROR
(
"Gather: Failed to retrieve CaloCellContainerBuilder."
);
66
return
StatusCode::FAILURE;
67
}
68
69
// Update the calo iterators of the calo cell container.
70
builder->container->updateCaloIterators();
71
72
// Convert FastCaloSim hits into HitCollections, taking into account sampling fractions.
73
if
(
m_FastHitConvertTool
->process(builder->container.get(), ctx).isFailure()){
74
ATH_MSG_ERROR
(
"Gather: Failed to process calo cell container with the fast hit convert tool."
);
75
return
StatusCode::FAILURE;
76
}
77
78
SG::WriteHandle<CaloCellContainer>
handle{collectionName, ctx};
79
ATH_CHECK
(handle.record(std::move(builder->container)));
80
return
StatusCode::SUCCESS;
81
}
82
83
G4VSensitiveDetector*
CaloCellContainerSDTool::makeSD
()
const
84
{
85
ATH_MSG_DEBUG
(
"Initializing SD"
);
86
87
// Create a fresh SD
88
return
new
CaloCellContainerSD
(name(),
m_outputCollectionNames
[0]);
89
}
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_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
CaloCellContainerBuilder.h
CaloCellContainerSDTool.h
CaloCellContainerSD.h
HitCollectionMap.h
WriteHandle.h
Handle class for recording to StoreGate.
CaloCellContainerBuilder
Event-owned holder for the FastCaloSim CaloCellContainer.
Definition
CaloCellContainerBuilder.h:21
CaloCellContainerSDTool::makeSD
G4VSensitiveDetector * makeSD() const override final
Definition
CaloCellContainerSDTool.cxx:83
CaloCellContainerSDTool::m_EmptyCellBuilderTool
PublicToolHandle< ICaloCellMakerTool > m_EmptyCellBuilderTool
Definition
CaloCellContainerSDTool.h:33
CaloCellContainerSDTool::initialize
StatusCode initialize() override final
Definition
CaloCellContainerSDTool.cxx:27
CaloCellContainerSDTool::SetupEvent
StatusCode SetupEvent(HitCollectionMap &) override final
Beginning of an athena event.
Definition
CaloCellContainerSDTool.cxx:34
CaloCellContainerSDTool::Gather
StatusCode Gather(HitCollectionMap &) override final
End of an athena event.
Definition
CaloCellContainerSDTool.cxx:56
CaloCellContainerSDTool::m_FastHitConvertTool
PublicToolHandle< ICaloCellMakerTool > m_FastHitConvertTool
Definition
CaloCellContainerSDTool.h:34
CaloCellContainerSDTool::CaloCellContainerSDTool
CaloCellContainerSDTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition
CaloCellContainerSDTool.cxx:18
CaloCellContainerSD
Definition
CaloCellContainerSD.h:19
HitCollectionMap
Small wrapper around hit collection map to facilitate accessing the hit collection.
Definition
HitCollectionMap.h:23
HitCollectionMap::Find
T * Find(std::string const &hitCollectionName)
Get the hit collection for a given SDs.
Definition
HitCollectionMap.h:49
HitCollectionMap::Extract
std::unique_ptr< T > Extract(std::string const &hitCollectionName)
Extract the hit collection for a given SDs downcasted to the template parameter.
Definition
HitCollectionMap.h:62
HitCollectionMap::Emplace
std::pair< StorageIterator, bool > Emplace(std::string const &hitCollectionName, CollectionArgs &&... args)
Insert a container in the map with in-place construction.
Definition
HitCollectionMap.h:40
SG::WriteHandle
Definition
StoreGate/StoreGate/WriteHandle.h:73
SensitiveDetectorBase::m_outputCollectionNames
Gaudi::Property< std::vector< std::string > > m_outputCollectionNames
Names of all output collections written out by this SD.
Definition
SensitiveDetectorBase.h:80
SensitiveDetectorBase::SensitiveDetectorBase
SensitiveDetectorBase(const std::string &type, const std::string &name, const IInterface *parent)
Standard constructor.
Definition
SensitiveDetectorBase.cxx:17
type
Generated on
for ATLAS Offline Software by
1.17.0