Geant4-11
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | Friends
G4AccumulableManager Class Reference

#include <G4AccumulableManager.hh>

Public Member Functions

std::vector< G4VAccumulable * >::iterator Begin ()
 
std::vector< G4VAccumulable * >::const_iterator BeginConst () const
 
template<typename T >
G4Accumulable< T > * CreateAccumulable (const G4String &name, T value, G4MergeMode mergeMode=G4MergeMode::kAddition)
 
template<typename T >
G4Accumulable< T > * CreateAccumulable (T value, G4MergeMode mergeMode=G4MergeMode::kAddition)
 
std::vector< G4VAccumulable * >::iterator End ()
 
std::vector< G4VAccumulable * >::const_iterator EndConst () const
 
template<typename T >
G4Accumulable< T > * GetAccumulable (const G4String &name, G4bool warn=true) const
 
G4VAccumulableGetAccumulable (const G4String &name, G4bool warn=true) const
 
template<typename T >
G4Accumulable< T > * GetAccumulable (G4int id, G4bool warn=true) const
 
G4VAccumulableGetAccumulable (G4int id, G4bool warn=true) const
 
G4int GetNofAccumulables () const
 
void Merge ()
 
template<typename T >
G4bool RegisterAccumulable (G4Accumulable< T > &accumulable)
 
G4bool RegisterAccumulable (G4VAccumulable *accumulable)
 
void Reset ()
 
virtual ~G4AccumulableManager ()
 

Static Public Member Functions

static G4AccumulableManagerInstance ()
 

Private Member Functions

G4bool CheckName (const G4String &name, const G4String &where) const
 
 G4AccumulableManager ()
 
G4String GenerateName () const
 
template<typename T >
G4Accumulable< T > * GetAccumulable (G4VAccumulable *accumulable, G4bool warn) const
 

Private Attributes

std::vector< G4VAccumulable * > fAccumulablesToDelete
 
std::map< G4String, G4VAccumulable * > fMap
 
std::vector< G4VAccumulable * > fVector
 
const G4String kBaseName = "accumulable"
 

Static Private Attributes

static G4AccumulableManagerfgMasterInstance { nullptr }
 

Friends

class G4ThreadLocalSingleton< G4AccumulableManager >
 

Detailed Description

Definition at line 46 of file G4AccumulableManager.hh.

Constructor & Destructor Documentation

◆ ~G4AccumulableManager()

G4AccumulableManager::~G4AccumulableManager ( )
virtual

Definition at line 55 of file G4AccumulableManager.cc.

56{
57 // delete only accumulables create by the mager itself
58 for ( auto it : fAccumulablesToDelete ) {
59 delete it;
60 }
61}
std::vector< G4VAccumulable * > fAccumulablesToDelete

References fAccumulablesToDelete.

◆ G4AccumulableManager()

G4AccumulableManager::G4AccumulableManager ( )
private

Definition at line 49 of file G4AccumulableManager.cc.

50{
52}
static G4AccumulableManager * fgMasterInstance
G4bool IsWorkerThread()
Definition: G4Threading.cc:123

References fgMasterInstance, and G4Threading::IsWorkerThread().

Member Function Documentation

◆ Begin()

std::vector< G4VAccumulable * >::iterator G4AccumulableManager::Begin ( )

◆ BeginConst()

std::vector< G4VAccumulable * >::const_iterator G4AccumulableManager::BeginConst ( ) const

◆ CheckName()

G4bool G4AccumulableManager::CheckName ( const G4String name,
const G4String where 
) const
private

Definition at line 79 of file G4AccumulableManager.cc.

80{
81 if ( fMap.find(name) == fMap.end() ) return true;
82
83 G4ExceptionDescription description;
84 description << "Name " << name << " is already used." << G4endl;
85 description << "Parameter will be not created/registered.";
86 G4String method("G4AccumulableManager::");
87 method.append(where);
88 G4Exception(method, "Analysis_W001", JustWarning, description);
89 return false;
90}
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
#define G4endl
Definition: G4ios.hh:57
std::map< G4String, G4VAccumulable * > fMap
const char * name(G4int ptype)

References fMap, G4endl, G4Exception(), JustWarning, and G4InuclParticleNames::name().

Referenced by RegisterAccumulable().

◆ CreateAccumulable() [1/2]

template<typename T >
G4Accumulable< T > * G4AccumulableManager::CreateAccumulable ( const G4String name,
value,
G4MergeMode  mergeMode = G4MergeMode::kAddition 
)

◆ CreateAccumulable() [2/2]

template<typename T >
G4Accumulable< T > * G4AccumulableManager::CreateAccumulable ( value,
G4MergeMode  mergeMode = G4MergeMode::kAddition 
)

◆ End()

std::vector< G4VAccumulable * >::iterator G4AccumulableManager::End ( )

◆ EndConst()

std::vector< G4VAccumulable * >::const_iterator G4AccumulableManager::EndConst ( ) const

◆ GenerateName()

G4String G4AccumulableManager::GenerateName ( ) const
private

Definition at line 68 of file G4AccumulableManager.cc.

69{
71 std::ostringstream os;
72 os << fVector.size();
73 name.append("_");
74 name.append(os.str());
75 return name;
76}
std::vector< G4VAccumulable * > fVector

References fVector, kBaseName, and G4InuclParticleNames::name().

Referenced by RegisterAccumulable().

◆ GetAccumulable() [1/5]

template<typename T >
G4Accumulable< T > * G4AccumulableManager::GetAccumulable ( const G4String name,
G4bool  warn = true 
) const

◆ GetAccumulable() [2/5]

G4VAccumulable * G4AccumulableManager::GetAccumulable ( const G4String name,
G4bool  warn = true 
) const

Definition at line 117 of file G4AccumulableManager.cc.

118{
119 // get G4VParammeter from the map
120 auto it = fMap.find(name);
121 if ( it == fMap.end() ) {
122 if ( warn) {
123 G4ExceptionDescription description;
124 description << "Accumulable " << name << " does not exist.";
125 G4Exception("G4AccumulableManager::GetAccumulable",
126 "Analysis_W001", JustWarning, description);
127 }
128 return nullptr;
129 }
130
131 return it->second;
132}

References fMap, G4Exception(), JustWarning, and G4InuclParticleNames::name().

◆ GetAccumulable() [3/5]

template<typename T >
G4Accumulable< T > * G4AccumulableManager::GetAccumulable ( G4int  id,
G4bool  warn = true 
) const

◆ GetAccumulable() [4/5]

G4VAccumulable * G4AccumulableManager::GetAccumulable ( G4int  id,
G4bool  warn = true 
) const

Definition at line 136 of file G4AccumulableManager.cc.

137{
138 // get G4VParammeter from the vector
139 if ( id < 0 || id >= G4int(fVector.size()) ) {
140 if ( warn) {
141 G4ExceptionDescription description;
142 description << "Accumulable " << id << " does not exist.";
143 G4Exception("G4AccumulableManager::GetAccumulable",
144 "Analysis_W001", JustWarning, description);
145 }
146 return nullptr;
147 }
148
149 return fVector[id];
150}
int G4int
Definition: G4Types.hh:85

References fVector, G4Exception(), and JustWarning.

◆ GetAccumulable() [5/5]

template<typename T >
G4Accumulable< T > * G4AccumulableManager::GetAccumulable ( G4VAccumulable accumulable,
G4bool  warn 
) const
private

◆ GetNofAccumulables()

G4int G4AccumulableManager::GetNofAccumulables ( ) const

◆ Instance()

G4AccumulableManager * G4AccumulableManager::Instance ( )
static

◆ Merge()

void G4AccumulableManager::Merge ( )

Definition at line 153 of file G4AccumulableManager.cc.

154{
155 // Do nothing if there are no accumulables registered
156 // or if master thread
157 if ( (! fVector.size()) || (! G4Threading::IsWorkerThread()) ) return;
158
159 // The manager on mastter must exist
160 if ( ! fgMasterInstance ) {
161 G4ExceptionDescription description;
162 description
163 << "No master G4AccumulableManager instance exists." << G4endl
164 << "Accumulables will not be merged.";
165 G4Exception("G4AccumulableManager::Merge()",
166 "Analysis_W001", JustWarning, description);
167 return;
168 }
169
170 // The worker manager just merges its accumulables to the master
171 // This operation needs a lock
172 // G4cout << "Go to merge accumulables" << G4endl;
173 G4AutoLock lock(&mergeMutex);
174
175 // the other manager has the vector with the "same" accumulables
176 auto it = fVector.begin();
177 for ( auto itMaster : fgMasterInstance->fVector ) {
178 // G4VAccumulable* masterAccumulable = itMaster;
179 // G4VAccumulable* accumulable = *(it++);
180 // masterAccumulable->Merge(*(accumulable));
181 itMaster->Merge(*(*(it++)));
182 }
183 lock.unlock();
184}

References fgMasterInstance, fVector, G4endl, G4Exception(), G4Threading::IsWorkerThread(), JustWarning, anonymous_namespace{G4AccumulableManager.cc}::mergeMutex, and G4TemplateAutoLock< _Mutex_t >::unlock().

◆ RegisterAccumulable() [1/2]

template<typename T >
G4bool G4AccumulableManager::RegisterAccumulable ( G4Accumulable< T > &  accumulable)

◆ RegisterAccumulable() [2/2]

G4bool G4AccumulableManager::RegisterAccumulable ( G4VAccumulable accumulable)

Definition at line 97 of file G4AccumulableManager.cc.

98{
99 auto name = accumulable->GetName();
100
101 // do not accept name if it is already used
102 if ( ! CheckName(name, "RegisterAccumulable") ) return false;
103
104 // generate name if empty
105 if ( ! name.length() ) {
106 name = GenerateName();
107 accumulable->fName = name;
108 }
109
110 fMap[name] = accumulable;
111 fVector.push_back(accumulable);
112 return true;
113}
G4String GenerateName() const
G4bool CheckName(const G4String &name, const G4String &where) const
G4String GetName() const

References CheckName(), fMap, G4VAccumulable::fName, fVector, GenerateName(), G4VAccumulable::GetName(), and G4InuclParticleNames::name().

◆ Reset()

void G4AccumulableManager::Reset ( )

Definition at line 187 of file G4AccumulableManager.cc.

188{
189// Reset histograms and profiles
190
191 for ( auto it : fVector ) {
192 it->Reset();
193 }
194}

References fVector.

Friends And Related Function Documentation

◆ G4ThreadLocalSingleton< G4AccumulableManager >

Definition at line 1 of file G4AccumulableManager.hh.

Field Documentation

◆ fAccumulablesToDelete

std::vector<G4VAccumulable*> G4AccumulableManager::fAccumulablesToDelete
private

Definition at line 127 of file G4AccumulableManager.hh.

Referenced by ~G4AccumulableManager().

◆ fgMasterInstance

G4AccumulableManager* G4AccumulableManager::fgMasterInstance { nullptr }
inlinestaticprivate

Definition at line 122 of file G4AccumulableManager.hh.

Referenced by G4AccumulableManager(), and Merge().

◆ fMap

std::map<G4String, G4VAccumulable*> G4AccumulableManager::fMap
private

Definition at line 126 of file G4AccumulableManager.hh.

Referenced by CheckName(), GetAccumulable(), and RegisterAccumulable().

◆ fVector

std::vector<G4VAccumulable*> G4AccumulableManager::fVector
private

◆ kBaseName

const G4String G4AccumulableManager::kBaseName = "accumulable"
private

Definition at line 119 of file G4AccumulableManager.hh.

Referenced by GenerateName().


The documentation for this class was generated from the following files: