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
G4PDefManager.hh
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4PDefManager.hh
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
// ------------------------------------------------------------
30
//
31
// GEANT 4 class header file
32
//
33
// ---------------- G4PDefManager ----------------
34
//
35
// Utility template class for splitting RW data for thread-safety from
36
// classes: G4ParticleDefinition, G4VDecayChannel.
37
//
38
// ------------------------------------------------------------
39
// History:
40
// 01.25.2009 Xin Dong: First implementation from automatic MT conversion.
41
// ------------------------------------------------------------
42
#ifndef G4PDefManager_HH
43
#define G4PDefManager_HH
44
45
#include <stdlib.h>
46
47
#include "
globals.hh
"
48
#include "
pwdefs.hh
"
49
#include "
G4AutoLock.hh
"
50
51
class
G4ProcessManager
;
52
53
// G4PDefData is the private data from the object to be split
54
class
G4PDefData
55
{
56
// Encapsulates the fields of the class G4ParticleDefinition
57
// that may not be read-only.
58
59
public
:
60
61
void
initialize
();
62
63
G4ProcessManager
*
theProcessManager
;
64
};
65
66
// The type G4PDefManager is introduced to encapsulate the methods used by
67
// both the master thread and worker threads to allocate memory space for
68
// the fields encapsulated by the class G4PDefData. When each thread
69
// changes the value for these fields, it refers to them using a macro
70
// definition defined below. For every G4ParticleDefinition instance,
71
// there is a corresponding G4PDefData instance. All G4PDefData instances
72
// are organized by the class G4PDefManager as an array.
73
// The field "int g4particleDefinitionInstanceID" is added to the class G4ParticleDefinition.
74
// The value of this field in each G4ParticleDefinition instance is the
75
// subscript of the corresponding G4PDefData instance.
76
// In order to use the class G4PDefManager, we add a static member in the class
77
// G4ParticleDefinition as follows: "static G4PDefManager subInstanceManager".
78
// Both the master thread and worker threads change the length of the array
79
// for G4PDefData instances mutually along with G4ParticleDefinition
80
// instances are created. For each worker thread, it dynamically creates ions.
81
// Consider any thread A, if there is any other thread which creates an ion.
82
// This ion is shared by the thread A. So the thread A leaves an empty space
83
// in the array of G4PDefData instances for the ion.
84
//
85
86
class
G4PDefManager
87
{
88
public
:
89
90
G4PDefManager
();
91
G4int
CreateSubInstance
();
92
// Invoked by the master or work thread to create a new subinstance
93
// whenever a new split class instance is created. For each worker
94
// thread, ions are created dynamically.
95
96
97
void
NewSubInstances
();
98
// Invoked by each worker thread to grow the subinstance array and
99
// initialize each new subinstance using a particular method defined
100
// by the subclass.
101
102
void
FreeSlave
();
103
// Invoked by all threads to free the subinstance array.
104
105
G4PDefData
*
GetOffset
();
106
107
void
UseWorkArea
(
G4PDefData
* newOffset );
// , G4int numObjects, G4int numSpace)
108
109
G4PDefData
*
FreeWorkArea
();
// G4int* numObjects, G4int* numSpace)
110
111
public
:
112
113
G4PART_DLL
static
G4int
&
slavetotalspace
();
// thread-local
114
G4PART_DLL
static
G4PDefData
*&
offset
();
// thread-local
115
116
private
:
117
118
G4int
totalobj
;
119
G4Mutex
mutex
;
120
};
121
122
#endif
geant4
tree
geant4-10.6-release
source
particles
management
include
G4PDefManager.hh
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:24
using
1.8.2 with
ECCE GitHub integration