Geant4
11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VPrimitiveScorer.cc
Go to the documentation of this file.
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
// G4VPrimitiveScorer
29
#include "
G4VPrimitiveScorer.hh
"
30
31
#include "
G4MultiFunctionalDetector.hh
"
32
#include "
G4SDManager.hh
"
33
#include "
G4Step.hh
"
34
#include "
G4TouchableHistory.hh
"
35
#include "
G4UnitsTable.hh
"
36
#include "
G4VPVParameterisation.hh
"
37
#include "
G4VSolid.hh
"
38
39
G4VPrimitiveScorer::G4VPrimitiveScorer
(
const
G4String
& name,
G4int
depth)
40
:
primitiveName
(name),
indexDepth
(depth)
41
{}
42
43
G4int
G4VPrimitiveScorer::GetCollectionID
(
G4int
)
44
{
45
if
(
detector
!=
nullptr
)
46
return
G4SDManager::GetSDMpointer
()->
GetCollectionID
(
detector
->GetName() +
"/"
+
primitiveName
);
47
return
-1;
48
}
49
50
void
G4VPrimitiveScorer::Initialize
(
G4HCofThisEvent
*) {}
51
52
void
G4VPrimitiveScorer::EndOfEvent
(
G4HCofThisEvent
*) {}
53
54
void
G4VPrimitiveScorer::clear
() {}
55
56
void
G4VPrimitiveScorer::DrawAll
() {}
57
58
void
G4VPrimitiveScorer::PrintAll
() {}
59
60
G4int
G4VPrimitiveScorer::GetIndex
(
G4Step
* aStep)
61
{
62
G4StepPoint
* preStep = aStep->
GetPreStepPoint
();
63
auto
th = (
G4TouchableHistory
*)(preStep->
GetTouchable
());
64
return
th->GetReplicaNumber(
indexDepth
);
65
}
66
67
void
G4VPrimitiveScorer::CheckAndSetUnit
(
const
G4String
& unit,
const
G4String
& category)
68
{
69
if
(
G4UnitDefinition::GetCategory
(unit) == category) {
70
unitName
= unit;
71
unitValue
=
G4UnitDefinition::GetValueOf
(unit);
72
}
73
else
{
74
G4String
msg =
"Invalid unit ["
+ unit +
"] (Current unit is ["
+
GetUnit
() +
75
"] ) requested for "
+
GetName
();
76
G4Exception
(
"G4VPrimitiveScorer::CheckAndSetUnit"
,
"Det0151"
,
JustWarning
, msg);
77
}
78
}
79
80
G4VSolid
*
G4VPrimitiveScorer::ComputeSolid
(
G4Step
* aStep,
G4int
replicaIdx)
81
{
82
G4VSolid
* solid =
nullptr
;
83
G4StepPoint
* preStep = aStep->
GetPreStepPoint
();
84
85
auto
physVol = preStep->
GetPhysicalVolume
();
86
G4VPVParameterisation
* physParam = physVol->GetParameterisation();
87
88
if
(physParam !=
nullptr
) {
// for parameterized volume
89
if
(replicaIdx < 0) {
90
G4ExceptionDescription
desc;
91
desc <<
"Incorrect replica number --- GetReplicaNumber : "
<< replicaIdx <<
G4endl
;
92
G4Exception
(
"G4VPrimitiveScorer::ComputeSolid"
,
"DetPS0001"
,
JustWarning
, desc);
93
// replicaIdx= 0; // You must ensure that it's in range !!!
94
}
95
solid = physParam->
ComputeSolid
(replicaIdx, physVol);
96
solid->
ComputeDimensions
(physParam, replicaIdx, physVol);
97
}
98
else
{
// for ordinary volume
99
solid = physVol->GetLogicalVolume()->GetSolid();
100
}
101
102
return
solid;
103
}
104
105
G4VSolid
*
G4VPrimitiveScorer::ComputeCurrentSolid
(
G4Step
* aStep)
106
{
107
G4StepPoint
* preStep = aStep->
GetPreStepPoint
();
108
// The only difference: did not know the replica number
109
G4int
replicaIdx =
110
(
static_cast<
const
G4TouchableHistory
*
>
(preStep->
GetTouchable
()))->GetReplicaNumber(
indexDepth
);
111
112
return
ComputeSolid
(aStep, replicaIdx);
113
}
JustWarning
@ JustWarning
Definition
G4ExceptionSeverity.hh:71
G4Exception
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition
G4Exception.cc:59
G4ExceptionDescription
std::ostringstream G4ExceptionDescription
Definition
G4Exception.hh:40
G4MultiFunctionalDetector.hh
G4SDManager.hh
G4Step.hh
G4TouchableHistory.hh
G4int
int G4int
Definition
G4Types.hh:85
G4UnitsTable.hh
G4VPVParameterisation.hh
G4VPrimitiveScorer.hh
G4VSolid.hh
G4endl
#define G4endl
Definition
G4ios.hh:67
G4HCofThisEvent
Definition
G4HCofThisEvent.hh:51
G4SDManager::GetSDMpointer
static G4SDManager * GetSDMpointer()
Definition
G4SDManager.cc:39
G4SDManager::GetCollectionID
G4int GetCollectionID(const G4String &colName)
Definition
G4SDManager.cc:127
G4StepPoint
Definition
G4StepPoint.hh:56
G4StepPoint::GetTouchable
const G4VTouchable * GetTouchable() const
G4StepPoint::GetPhysicalVolume
G4VPhysicalVolume * GetPhysicalVolume() const
G4Step
Definition
G4Step.hh:61
G4Step::GetPreStepPoint
G4StepPoint * GetPreStepPoint() const
G4String
Definition
G4String.hh:62
G4TouchableHistory
G4TouchableHistory is an object representing a touchable detector element, and its history in the geo...
Definition
G4TouchableHistory.hh:107
G4UnitDefinition::GetValueOf
static G4double GetValueOf(const G4String &)
Definition
G4UnitsTable.cc:185
G4UnitDefinition::GetCategory
static G4String GetCategory(const G4String &)
Definition
G4UnitsTable.cc:210
G4VPVParameterisation
G4VPVParameterisation ia an abstract base class for Parameterisation, able to compute the transformat...
Definition
G4VPVParameterisation.hh:72
G4VPVParameterisation::ComputeSolid
virtual G4VSolid * ComputeSolid(const G4int no, G4VPhysicalVolume *pv)
Definition
G4VPVParameterisation.cc:39
G4VPrimitiveScorer::DrawAll
virtual void DrawAll()
Definition
G4VPrimitiveScorer.cc:56
G4VPrimitiveScorer::clear
virtual void clear()
Definition
G4VPrimitiveScorer.cc:54
G4VPrimitiveScorer::Initialize
virtual void Initialize(G4HCofThisEvent *)
Definition
G4VPrimitiveScorer.cc:50
G4VPrimitiveScorer::GetIndex
virtual G4int GetIndex(G4Step *)
Definition
G4VPrimitiveScorer.cc:60
G4VPrimitiveScorer::PrintAll
virtual void PrintAll()
Definition
G4VPrimitiveScorer.cc:58
G4VPrimitiveScorer::unitName
G4String unitName
Definition
G4VPrimitiveScorer.hh:130
G4VPrimitiveScorer::GetName
const G4String & GetName() const
Definition
G4VPrimitiveScorer.hh:89
G4VPrimitiveScorer::unitValue
G4double unitValue
Definition
G4VPrimitiveScorer.hh:131
G4VPrimitiveScorer::primitiveName
G4String primitiveName
Definition
G4VPrimitiveScorer.hh:125
G4VPrimitiveScorer::EndOfEvent
virtual void EndOfEvent(G4HCofThisEvent *)
Definition
G4VPrimitiveScorer.cc:52
G4VPrimitiveScorer::ComputeSolid
G4VSolid * ComputeSolid(G4Step *aStep, G4int replicaIdx)
Definition
G4VPrimitiveScorer.cc:80
G4VPrimitiveScorer::GetUnit
const G4String & GetUnit() const
Definition
G4VPrimitiveScorer.hh:77
G4VPrimitiveScorer::G4VPrimitiveScorer
G4VPrimitiveScorer(const G4String &name, G4int depth=0)
Definition
G4VPrimitiveScorer.cc:39
G4VPrimitiveScorer::detector
G4MultiFunctionalDetector * detector
Definition
G4VPrimitiveScorer.hh:126
G4VPrimitiveScorer::GetCollectionID
G4int GetCollectionID(G4int)
Definition
G4VPrimitiveScorer.cc:43
G4VPrimitiveScorer::indexDepth
G4int indexDepth
Definition
G4VPrimitiveScorer.hh:129
G4VPrimitiveScorer::CheckAndSetUnit
void CheckAndSetUnit(const G4String &unit, const G4String &category)
Definition
G4VPrimitiveScorer.cc:67
G4VPrimitiveScorer::ComputeCurrentSolid
G4VSolid * ComputeCurrentSolid(G4Step *aStep)
Definition
G4VPrimitiveScorer.cc:105
G4VSolid
G4VSolid is an abstract base class for solids, physical shapes that can be tracked through....
Definition
G4VSolid.hh:80
G4VSolid::ComputeDimensions
virtual void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
Definition
G4VSolid.cc:136
geant4-v11.4.0
source
digits_hits
detector
src
G4VPrimitiveScorer.cc
Generated by
1.16.1