ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4SDManager.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4SDManager.cc
1
//
2
// ********************************************************************
3
// * License and Disclaimer *
4
// * *
5
// * The Geant4 software is copyright of the Copyright Holders of *
6
// * the Geant4 Collaboration. It is provided under the terms and *
7
// * conditions of the Geant4 Software License, included in the file *
8
// * LICENSE and available at http://cern.ch/geant4/license . These *
9
// * include a list of copyright holders. *
10
// * *
11
// * Neither the authors of this software system, nor their employing *
12
// * institutes,nor the agencies providing financial support for this *
13
// * work make any representation or warranty, express or implied, *
14
// * regarding this software system or assume any liability for its *
15
// * use. Please see the license in the file LICENSE and URL above *
16
// * for the full disclaimer and the limitation of liability. *
17
// * *
18
// * This code implementation is the result of the scientific and *
19
// * technical work of the GEANT4 collaboration. *
20
// * By using, copying, modifying or distributing the software (or *
21
// * any work based on the software) you agree to acknowledge its *
22
// * use in resulting scientific publications, and indicate your *
23
// * acceptance of all terms of the Geant4 Software license. *
24
// ********************************************************************
25
//
26
//
27
//
28
29
#include "
G4SDManager.hh
"
30
#include "
G4SDmessenger.hh
"
31
#include "G4HCofThisEvent.hh"
32
#include "G4VHitsCollection.hh"
33
#include "
G4VSensitiveDetector.hh
"
34
#include "
G4ios.hh
"
35
36
37
G4ThreadLocal
G4SDManager
*
G4SDManager::fSDManager
=
nullptr
;
38
39
G4SDManager
*
G4SDManager::GetSDMpointer
()
40
{
41
if
(!
fSDManager
)
42
{
43
fSDManager
=
new
G4SDManager
;
44
}
45
return
fSDManager
;
46
}
47
48
G4SDManager
*
G4SDManager::GetSDMpointerIfExist
()
49
{
return
fSDManager
; }
50
51
G4SDManager::G4SDManager
():verboseLevel(0)
52
{
53
G4String
topName =
"/"
;
54
treeTop
=
new
G4SDStructure
(topName);
55
theMessenger
=
new
G4SDmessenger
(
this
);
56
HCtable
=
new
G4HCtable
;
57
}
58
59
G4SDManager::~G4SDManager
()
60
{
61
delete
theMessenger
;
62
delete
HCtable
;
63
delete
treeTop
;
64
DestroyFilters
();
65
theMessenger
=
nullptr
;
66
HCtable
=
nullptr
;
67
treeTop
=
nullptr
;
68
fSDManager
=
nullptr
;
69
}
70
71
void
G4SDManager::AddNewDetector
(
G4VSensitiveDetector
*aSD)
72
{
73
G4int
numberOfCollections = aSD->
GetNumberOfCollections
();
74
G4String
pathName = aSD->
GetPathName
();
75
if
( pathName(0) !=
'/'
) pathName.
prepend
(
"/"
);
76
if
( pathName(pathName.length()-1) !=
'/'
) pathName +=
"/"
;
77
treeTop
->
AddNewDetector
(aSD,pathName);
78
if
(numberOfCollections<1)
return
;
79
for
(
G4int
i=0;i<numberOfCollections;i++)
80
{
81
G4String
SDname = aSD->
GetName
();
82
G4String
DCname = aSD->
GetCollectionName
(i);
83
AddNewCollection
(SDname,DCname);
84
}
85
if
(
verboseLevel
> 0 )
86
{
87
G4cout
<<
"New sensitive detector <"
<< aSD->
GetName
()
88
<<
"> is registered at "
<< pathName <<
G4endl
;
89
}
90
}
91
92
void
G4SDManager::AddNewCollection
(
G4String
SDname,
G4String
DCname)
93
{
94
G4int
i =
HCtable
->
Registor
(SDname,DCname);
95
if
(
verboseLevel
>0)
96
{
97
if
(i<0) {
98
if
(
verboseLevel
>1)
G4cout
<<
"G4SDManager::AddNewCollection : the collection <"
99
<< SDname <<
"/"
<< DCname <<
"> has already been reginstered."
<<
G4endl
;
100
}
101
else
102
{
103
G4cout
<<
"G4SDManager::AddNewCollection : the collection <"
104
<< SDname <<
"/"
<< DCname <<
"> is registered at "
<< i <<
G4endl
;
105
}
106
}
107
}
108
109
G4HCofThisEvent
*
G4SDManager::PrepareNewEvent
()
110
{
111
G4HCofThisEvent
* HCE =
new
G4HCofThisEvent
(
HCtable
->
entries
());
112
treeTop
->
Initialize
(HCE);
113
return
HCE;
114
}
115
116
void
G4SDManager::TerminateCurrentEvent
(
G4HCofThisEvent
* HCE)
117
{
118
treeTop
->
Terminate
(HCE);
119
}
120
121
void
G4SDManager::Activate
(
G4String
dName,
G4bool
activeFlag)
122
{
123
G4String
pathName = dName;
124
if
( pathName(0) !=
'/'
) pathName.
prepend
(
"/"
);
125
treeTop
->
Activate
(pathName,activeFlag);
126
}
127
128
G4VSensitiveDetector
*
G4SDManager::FindSensitiveDetector
(
G4String
dName,
G4bool
warning)
129
{
130
G4String
pathName = dName;
131
if
( pathName(0) !=
'/'
) pathName.
prepend
(
"/"
);
132
return
treeTop
->
FindSensitiveDetector
(pathName, warning);
133
}
134
135
G4int
G4SDManager::GetCollectionID
(
G4String
colName)
136
{
137
G4int
id
=
HCtable
->
GetCollectionID
(colName);
138
if
(
id
==-1)
139
{
G4cout
<<
"<"
<< colName <<
"> is not found."
<<
G4endl
; }
140
else
if
(
id
==-2)
141
{
G4cout
<<
"<"
<< colName <<
"> is ambiguous."
<<
G4endl
; }
142
return
id;
143
}
144
145
G4int
G4SDManager::GetCollectionID
(
G4VHitsCollection
* aHC)
146
{
147
G4String
HCname = aHC->
GetSDname
();
148
HCname +=
"/"
;
149
HCname += aHC->
GetName
();
150
return
GetCollectionID
(HCname);
151
}
152
153
void
G4SDManager::RegisterSDFilter
(
G4VSDFilter
*
filter
)
154
{
155
FilterList
.push_back(filter);
156
}
157
158
void
G4SDManager::DeRegisterSDFilter
(
G4VSDFilter
*
filter
)
159
{
160
for
(
auto
f
=
FilterList
.begin();
f
!=
FilterList
.end();
f
++)
161
{
162
if
(*
f
== filter)
163
{
164
FilterList
.erase(
f
);
165
break
;
166
}
167
}
168
}
169
170
void
G4SDManager::DestroyFilters
()
171
{
172
auto
f
=
FilterList
.begin();
173
while
(
f
!=
FilterList
.end() )
174
{
175
if
(
verboseLevel
>0)
G4cout
<<
"### deleting "
<< (*f)->GetName() <<
" "
<< (*f) <<
G4endl
;
176
delete
*
f
;
177
f
=
FilterList
.begin();
178
}
179
FilterList
.clear();
180
}
181
geant4
tree
geant4-10.6-release
source
digits_hits
detector
src
G4SDManager.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:12
using
1.8.2 with
ECCE GitHub integration