ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
ISF
ISF_FastCaloSim
ISF_FastCaloSimParametrization
src
lib
CaloCellContainerSD.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// Class header
6
#include "
ISF_FastCaloSimParametrization/CaloCellContainerSD.h
"
7
8
// Athena headers
9
#include "
HitManagement/HitCollectionMap.h
"
10
#include "
ISF_FastCaloSimParametrization/CaloCellContainerBuilder.h
"
11
#include "
MCTruth/AtlasG4EventUserInfo.h
"
12
13
// FastCaloSim simulation include
14
#include "
ISF_FastCaloSimEvent/TFCSSimulationState.h
"
15
16
#include "G4EventManager.hh"
17
18
#include <memory>
19
20
CaloCellContainerSD::CaloCellContainerSD
(
const
std::string& name,
21
const
std::string& CaloCellContainerName)
22
: G4VSensitiveDetector(name)
23
,
m_caloCellContainerName
(CaloCellContainerName)
24
{
25
}
26
27
void
CaloCellContainerSD::Initialize
(G4HCofThisEvent*)
28
{
29
m_caloCellContainer
=
getCaloCellContainer
();
30
}
31
32
G4bool
CaloCellContainerSD::ProcessHits
(G4Step*, G4TouchableHistory*)
33
{
34
// This method needs to be implemented when deriving from G4VSensitiveDetector has no use in this case
35
G4Exception(
"CaloCellContainerSD"
,
"UndefinedProcessHitsCall"
, FatalException,
"CaloCellContainerSD: Call to undefined ProcessHits."
);
36
abort();
37
return
true
;
38
}
39
40
41
void
CaloCellContainerSD::recordCells
(
TFCSSimulationState
& simState)
42
{
43
if
(!
m_caloCellContainer
) {
44
// ISF can initialize SDs before the per-G4Event user info is installed.
45
// Refresh from the current event when available to avoid stale caches.
46
m_caloCellContainer
=
getCaloCellContainer
();
47
}
48
if
(!
m_caloCellContainer
) {
49
G4Exception(
"CaloCellContainerSD"
,
"MissingCaloCellContainer"
, FatalException,
"CaloCellContainerSD: Failed to retrieve the event-owned CaloCellContainer."
);
50
abort();
51
}
52
53
// Add the energies from the simulation state to the CaloCellContainer
54
for
(
const
auto
& icell : simState.
cells
()) {
55
CaloCell
* caloCell =
56
static_cast<
CaloCell
*
>
(
m_caloCellContainer
->findCell(icell.first->calo_hash()));
57
caloCell->
addEnergy
(icell.second);
58
}
59
}
60
61
CaloCellContainer
*
CaloCellContainerSD::getCaloCellContainer
()
const
62
{
63
auto
* eventManager = G4EventManager::GetEventManager();
64
if
(!eventManager) {
65
return
nullptr
;
66
}
67
68
auto
* eventInfo =
69
dynamic_cast<
AtlasG4EventUserInfo
*
>
(eventManager->GetUserInformation());
70
if
(!eventInfo) {
71
return
nullptr
;
72
}
73
74
std::shared_ptr<HitCollectionMap> hitCollections = eventInfo->
GetHitCollectionMap
();
75
auto
* builder = hitCollections
76
? hitCollections->Find<
CaloCellContainerBuilder
>(
m_caloCellContainerName
)
77
:
nullptr
;
78
return
builder ? builder->container.get() :
nullptr
;
79
}
AtlasG4EventUserInfo.h
CaloCellContainerBuilder.h
CaloCellContainerSD.h
HitCollectionMap.h
TFCSSimulationState.h
AtlasG4EventUserInfo
This class is attached to G4Event objects as UserInformation.
Definition
AtlasG4EventUserInfo.h:26
AtlasG4EventUserInfo::GetHitCollectionMap
std::shared_ptr< HitCollectionMap > GetHitCollectionMap() const
Get the HitCollectionMap object with shared ownership.
Definition
AtlasG4EventUserInfo.h:82
CaloCellContainerBuilder
Event-owned holder for the FastCaloSim CaloCellContainer.
Definition
CaloCellContainerBuilder.h:21
CaloCellContainerSD::Initialize
void Initialize(G4HCofThisEvent *) override final
Definition
CaloCellContainerSD.cxx:27
CaloCellContainerSD::m_caloCellContainer
CaloCellContainer * m_caloCellContainer
Definition
CaloCellContainerSD.h:38
CaloCellContainerSD::m_caloCellContainerName
std::string m_caloCellContainerName
Definition
CaloCellContainerSD.h:36
CaloCellContainerSD::ProcessHits
G4bool ProcessHits(G4Step *, G4TouchableHistory *) override final
Definition
CaloCellContainerSD.cxx:32
CaloCellContainerSD::getCaloCellContainer
CaloCellContainer * getCaloCellContainer() const
Definition
CaloCellContainerSD.cxx:61
CaloCellContainerSD::recordCells
void recordCells(TFCSSimulationState &)
Definition
CaloCellContainerSD.cxx:41
CaloCellContainerSD::CaloCellContainerSD
CaloCellContainerSD(const std::string &name, const std::string &CaloCellContainerName)
Definition
CaloCellContainerSD.cxx:20
CaloCellContainer
Container class for CaloCell.
Definition
CaloCellContainer.h:55
CaloCell
Data object for each calorimeter readout cell.
Definition
CaloCell.h:57
CaloCell::addEnergy
void addEnergy(float energy)
add energy
Definition
CaloCell.h:449
TFCSSimulationState
Definition
TFCSSimulationState.h:32
TFCSSimulationState::cells
Cellmap_t & cells()
Definition
TFCSSimulationState.h:72
Generated on
for ATLAS Offline Software by
1.17.0