Geant4
11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VPrimitiveScorer.hh
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
// G4VPrimitiveScorer
27
//
28
// Class description:
29
//
30
// This is the base class of the sensitive detector which owns
31
// only one hits collection.
32
// A concrete class object derived from this base class can be
33
// used either as a sensitive detector or to be registered to
34
// G4MultiFunctionalDetector to define multiple functionalities.
35
//
36
// Author: Makoto Asai
37
// --------------------------------------------------------------------
38
#ifndef G4VPrimitiveScorer_h
39
#define G4VPrimitiveScorer_h 1
40
41
#include "
G4MultiFunctionalDetector.hh
"
42
#include "
G4VSDFilter.hh
"
43
#include "
globals.hh
"
44
45
#include <functional>
46
47
class
G4Step
;
48
class
G4HCofThisEvent
;
49
class
G4TouchableHistory
;
50
51
// Define the signature for the weighting calculation
52
// It should take: (const G4Step*) and return G4double
53
using
G4ScoreWeightCalculator
= std::function<
G4double
(
const
G4Step
*)>;
54
55
class
G4VPrimitiveScorer
56
{
57
friend
class
G4MultiFunctionalDetector
;
58
59
public
:
60
G4VPrimitiveScorer
(
const
G4String
& name,
G4int
depth = 0);
61
virtual
~G4VPrimitiveScorer
() =
default
;
62
63
// This method returns the ID of its hitsCollection. This mehod
64
// gives valid value only after it is registered to G4MultiFunctionalDetector
65
// and the G4MultiFunctionalDetector is registered to G4SDManager.
66
G4int
GetCollectionID
(
G4int
);
67
68
// These five methods are exactly identical to those in G4VSensitiveDetector.
69
// These methods are invoked by G4SDManager through G4MultiFunctionalDetector.
70
virtual
void
Initialize
(
G4HCofThisEvent
*);
71
virtual
void
EndOfEvent
(
G4HCofThisEvent
*);
72
virtual
void
clear
();
73
virtual
void
DrawAll
();
74
virtual
void
PrintAll
();
75
76
void
SetUnit
(
const
G4String
& unit) {
unitName
= unit; }
77
const
G4String
&
GetUnit
()
const
{
return
unitName
; }
78
G4double
GetUnitValue
()
const
{
return
unitValue
; }
79
80
inline
void
ScoreWeighted
(
G4bool
flg =
false
) {
scoreWeighted
= flg; }
81
// Use specific weight for scoring
82
83
inline
G4bool
IsScoreWeighted
()
const
{
return
scoreWeighted
; }
84
// Get option for specific weight for scoring
85
86
// Set/Get methods
87
inline
void
SetMultiFunctionalDetector
(
G4MultiFunctionalDetector
* d) {
detector
= d; }
88
inline
G4MultiFunctionalDetector
*
GetMultiFunctionalDetector
()
const
{
return
detector
; }
89
inline
const
G4String
&
GetName
()
const
{
return
primitiveName
; }
90
inline
void
SetFilter
(
G4VSDFilter
* f) {
filter
= f; }
91
inline
G4VSDFilter
*
GetFilter
()
const
{
return
filter
; }
92
inline
void
SetScoreWeightCalculator
(
G4ScoreWeightCalculator
calculator) {
93
fScoreWeightCalculator
= calculator;
94
}
95
96
inline
void
SetVerboseLevel
(
G4int
vl) {
verboseLevel
= vl; }
97
inline
G4int
GetVerboseLevel
()
const
{
return
verboseLevel
; }
98
99
inline
void
SetNijk
(
G4int
i,
G4int
j,
G4int
k)
100
{
101
fNi
= i;
102
fNj
= j;
103
fNk
= k;
104
}
105
106
protected
:
107
// Get the solid at current depth, ensuring it's correct by
108
// calling a parameterisation is called if it's that volume type
109
G4VSolid
*
ComputeSolid
(
G4Step
* aStep,
G4int
replicaIdx);
110
111
// Same as above -- using stored replica number
112
G4VSolid
*
ComputeCurrentSolid
(
G4Step
* aStep);
113
114
// This is the method must be implemented in each concrete class.
115
virtual
G4bool
ProcessHits
(
G4Step
*,
G4TouchableHistory
*) = 0;
116
117
// This is a function mapping from copy number(s) to an index of
118
// the hit collection. In the default implementation, just the
119
// copy number of the physical volume is taken.
120
virtual
G4int
GetIndex
(
G4Step
*);
121
122
void
CheckAndSetUnit
(
const
G4String
& unit,
const
G4String
& category);
123
124
protected
:
125
G4String
primitiveName
;
126
G4MultiFunctionalDetector
*
detector
{
nullptr
};
127
G4VSDFilter
*
filter
{
nullptr
};
128
G4int
verboseLevel
{0};
129
G4int
indexDepth
;
130
G4String
unitName
{
"NoUnit"
};
131
G4double
unitValue
{1.0};
132
G4int
fNi
{0},
fNj
{0},
fNk
{0};
// used for 3D scorers
133
G4bool
scoreWeighted
{
false
};
134
G4ScoreWeightCalculator
fScoreWeightCalculator
= [](
const
G4Step
*) ->
G4double
{
135
return
1.0;
136
};
137
138
private
:
139
inline
G4bool
HitPrimitive(
G4Step
* aStep,
G4TouchableHistory
* ROhis)
140
{
141
if
(
filter
!=
nullptr
) {
142
if
(! (
filter
->
Accept
(aStep)))
return
false
;
143
}
144
return
ProcessHits
(aStep, ROhis);
145
}
146
};
147
148
#endif
G4MultiFunctionalDetector.hh
G4double
double G4double
Definition
G4Types.hh:83
G4bool
bool G4bool
Definition
G4Types.hh:86
G4int
int G4int
Definition
G4Types.hh:85
G4ScoreWeightCalculator
std::function< G4double(const G4Step *)> G4ScoreWeightCalculator
Definition
G4VPrimitiveScorer.hh:53
G4VSDFilter.hh
G4HCofThisEvent
Definition
G4HCofThisEvent.hh:51
G4Step
Definition
G4Step.hh:61
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
G4VPrimitiveScorer::~G4VPrimitiveScorer
virtual ~G4VPrimitiveScorer()=default
G4VPrimitiveScorer::DrawAll
virtual void DrawAll()
Definition
G4VPrimitiveScorer.cc:56
G4VPrimitiveScorer::scoreWeighted
G4bool scoreWeighted
Definition
G4VPrimitiveScorer.hh:133
G4VPrimitiveScorer::fNk
G4int fNk
Definition
G4VPrimitiveScorer.hh:132
G4VPrimitiveScorer::fNj
G4int fNj
Definition
G4VPrimitiveScorer.hh:132
G4VPrimitiveScorer::SetUnit
void SetUnit(const G4String &unit)
Definition
G4VPrimitiveScorer.hh:76
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::ScoreWeighted
void ScoreWeighted(G4bool flg=false)
Definition
G4VPrimitiveScorer.hh:80
G4VPrimitiveScorer::SetMultiFunctionalDetector
void SetMultiFunctionalDetector(G4MultiFunctionalDetector *d)
Definition
G4VPrimitiveScorer.hh:87
G4VPrimitiveScorer::SetScoreWeightCalculator
void SetScoreWeightCalculator(G4ScoreWeightCalculator calculator)
Definition
G4VPrimitiveScorer.hh:92
G4VPrimitiveScorer::PrintAll
virtual void PrintAll()
Definition
G4VPrimitiveScorer.cc:58
G4VPrimitiveScorer::unitName
G4String unitName
Definition
G4VPrimitiveScorer.hh:130
G4VPrimitiveScorer::fNi
G4int fNi
Definition
G4VPrimitiveScorer.hh:132
G4VPrimitiveScorer::GetFilter
G4VSDFilter * GetFilter() const
Definition
G4VPrimitiveScorer.hh:91
G4VPrimitiveScorer::GetName
const G4String & GetName() const
Definition
G4VPrimitiveScorer.hh:89
G4VPrimitiveScorer::SetNijk
void SetNijk(G4int i, G4int j, G4int k)
Definition
G4VPrimitiveScorer.hh:99
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::filter
G4VSDFilter * filter
Definition
G4VPrimitiveScorer.hh:127
G4VPrimitiveScorer::SetFilter
void SetFilter(G4VSDFilter *f)
Definition
G4VPrimitiveScorer.hh:90
G4VPrimitiveScorer::GetMultiFunctionalDetector
G4MultiFunctionalDetector * GetMultiFunctionalDetector() const
Definition
G4VPrimitiveScorer.hh:88
G4VPrimitiveScorer::SetVerboseLevel
void SetVerboseLevel(G4int vl)
Definition
G4VPrimitiveScorer.hh:96
G4VPrimitiveScorer::ComputeSolid
G4VSolid * ComputeSolid(G4Step *aStep, G4int replicaIdx)
Definition
G4VPrimitiveScorer.cc:80
G4VPrimitiveScorer::IsScoreWeighted
G4bool IsScoreWeighted() const
Definition
G4VPrimitiveScorer.hh:83
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::ProcessHits
virtual G4bool ProcessHits(G4Step *, G4TouchableHistory *)=0
G4VPrimitiveScorer::GetCollectionID
G4int GetCollectionID(G4int)
Definition
G4VPrimitiveScorer.cc:43
G4VPrimitiveScorer::indexDepth
G4int indexDepth
Definition
G4VPrimitiveScorer.hh:129
G4VPrimitiveScorer::GetVerboseLevel
G4int GetVerboseLevel() const
Definition
G4VPrimitiveScorer.hh:97
G4VPrimitiveScorer::CheckAndSetUnit
void CheckAndSetUnit(const G4String &unit, const G4String &category)
Definition
G4VPrimitiveScorer.cc:67
G4VPrimitiveScorer::GetUnitValue
G4double GetUnitValue() const
Definition
G4VPrimitiveScorer.hh:78
G4VPrimitiveScorer::G4MultiFunctionalDetector
friend class G4MultiFunctionalDetector
Definition
G4VPrimitiveScorer.hh:57
G4VPrimitiveScorer::verboseLevel
G4int verboseLevel
Definition
G4VPrimitiveScorer.hh:128
G4VPrimitiveScorer::fScoreWeightCalculator
G4ScoreWeightCalculator fScoreWeightCalculator
Definition
G4VPrimitiveScorer.hh:134
G4VPrimitiveScorer::ComputeCurrentSolid
G4VSolid * ComputeCurrentSolid(G4Step *aStep)
Definition
G4VPrimitiveScorer.cc:105
G4VSDFilter
Definition
G4VSDFilter.hh:43
G4VSDFilter::Accept
virtual G4bool Accept(const G4Step *) const =0
G4VSolid
G4VSolid is an abstract base class for solids, physical shapes that can be tracked through....
Definition
G4VSolid.hh:80
globals.hh
geant4-v11.4.0
source
digits_hits
detector
include
G4VPrimitiveScorer.hh
Generated by
1.16.1