Geant4  10.02.p03
G4ParameterManager Class Reference

#include <G4ParameterManager.hh>

Collaboration diagram for G4ParameterManager:

Public Member Functions

 G4ParameterManager (G4bool isMaster=true)
 
virtual ~G4ParameterManager ()
 
template<typename T >
void CreateParameter (const G4String &name, T value, G4MergeMode mergeMode=G4MergeMode::kAddition)
 
template<typename T >
void RegisterParameter (G4Parameter< T > &parameter)
 
template<typename T >
G4Parameter< T > * GetParameter (const G4String &name, G4bool warn=true) const
 
void RegisterParameter (G4VParameter *parameter)
 
G4VParameterGetParameter (const G4String &name, G4bool warn=true) const
 
void Merge ()
 
void Reset ()
 

Static Public Member Functions

static G4ParameterManagerInstance ()
 

Private Attributes

const G4AnalysisManagerState fState
 
std::map< G4String, G4VParameter * > fMap
 
std::vector< G4VParameter * > fParametersToDelete
 

Static Private Attributes

static G4ParameterManagerfgMasterInstance = nullptr
 
static G4ThreadLocal G4ParameterManagerfgInstance = nullptr
 

Detailed Description

Definition at line 45 of file G4ParameterManager.hh.

Constructor & Destructor Documentation

◆ G4ParameterManager()

G4ParameterManager::G4ParameterManager ( G4bool  isMaster = true)

Definition at line 56 of file G4ParameterManager.cc.

57  : fState("Parameter", isMaster),
58  fMap()
59 {
60  if ( ( isMaster && fgMasterInstance ) || ( fgInstance ) ) {
61  G4ExceptionDescription description;
62  description
63  << " "
64  << "G4ParameterAnalysisManager already exists."
65  << "Cannot create another instance.";
66  G4Exception("G4ParameterAnalysisManager::G4ParameterAnalysisManager()",
67  "Analysis_F001", FatalException, description);
68  }
69  if ( isMaster ) fgMasterInstance = this;
70  fgInstance = this;
71 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
static G4ParameterManager * fgMasterInstance
const G4AnalysisManagerState fState
std::map< G4String, G4VParameter * > fMap
static G4ThreadLocal G4ParameterManager * fgInstance
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~G4ParameterManager()

G4ParameterManager::~G4ParameterManager ( )
virtual

Definition at line 74 of file G4ParameterManager.cc.

75 {
76  // delete only parameters create by the mager itself
77  for ( auto it : fParametersToDelete ) {
78  delete it;
79  }
80 }
std::vector< G4VParameter * > fParametersToDelete

Member Function Documentation

◆ CreateParameter()

template<typename T >
void G4ParameterManager::CreateParameter ( const G4String name,
value,
G4MergeMode  mergeMode = G4MergeMode::kAddition 
)

◆ GetParameter() [1/2]

template<typename T >
G4Parameter<T>* G4ParameterManager::GetParameter ( const G4String name,
G4bool  warn = true 
) const

◆ GetParameter() [2/2]

G4VParameter * G4ParameterManager::GetParameter ( const G4String name,
G4bool  warn = true 
) const

Definition at line 94 of file G4ParameterManager.cc.

95 {
96  // get G4VParammeter from the map
97  auto it = fMap.find(name);
98  if ( it == fMap.end() ) {
99  if ( warn) {
100  G4ExceptionDescription description;
101  description << " " << "parameter " << name << " does not exist.";
102  G4Exception("G4ParameterManager::GetParameter",
103  "Analysis_W011", JustWarning, description);
104  }
105  return 0;
106  }
107 
108  return it->second;
109 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
std::map< G4String, G4VParameter * > fMap
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
Here is the call graph for this function:

◆ Instance()

G4ParameterManager * G4ParameterManager::Instance ( void  )
static

Definition at line 45 of file G4ParameterManager.cc.

46 {
47  if ( fgInstance == nullptr ) {
48  G4bool isMaster = ! G4Threading::IsWorkerThread();
49  fgInstance = new G4ParameterManager(isMaster);
50  }
51 
52  return fgInstance;
53 }
bool G4bool
Definition: G4Types.hh:79
static G4ThreadLocal G4ParameterManager * fgInstance
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
G4ParameterManager(G4bool isMaster=true)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Merge()

void G4ParameterManager::Merge ( )

Definition at line 119 of file G4ParameterManager.cc.

120 {
121  // Do nothing if there are no parameters registered
122  // or if master thread
123  if ( (! fMap.size()) || (! G4Threading::IsWorkerThread()) ) return;
124 
125  // The manager on mastter must exist
126  if ( ! fgMasterInstance ) {
127  G4ExceptionDescription description;
128  description
129  << " " << "No master G4ParameterManager instance exists."
130  << G4endl
131  << " " << "Parameters will not be merged.";
132  G4Exception("G4ParameterManager::Merge()",
133  "Analysis_W031", JustWarning, description);
134  return;
135  }
136 
137  // The worker manager just merges its parameters to the master
138  // This operation needs a lock
139  G4cout << "Go to merge parameters" << G4endl;
140  G4AutoLock lock(&mergeMutex);
141 
142  // the other manager has the map with identical keys
143  auto it = fMap.begin();
144  for ( auto itMaster : fgMasterInstance->fMap ) {
145  // G4VParameter* parameter = (it++)->second;
146  // G4VParameter* masterParameter = itMaster->second;
147  // masterParameter->Merge(*(parameter));
148  itMaster.second->Merge(*((it++)->second));
149  }
150  lock.unlock();
151 }
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
static G4ParameterManager * fgMasterInstance
G4GLOB_DLL std::ostream G4cout
std::map< G4String, G4VParameter * > fMap
static const double second
Definition: G4SIunits.hh:156
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4bool IsWorkerThread()
Definition: G4Threading.cc:135
#define G4endl
Definition: G4ios.hh:61
Here is the call graph for this function:
Here is the caller graph for this function:

◆ RegisterParameter() [1/2]

template<typename T >
void G4ParameterManager::RegisterParameter ( G4Parameter< T > &  parameter)
Here is the caller graph for this function:

◆ RegisterParameter() [2/2]

void G4ParameterManager::RegisterParameter ( G4VParameter parameter)

Definition at line 87 of file G4ParameterManager.cc.

88 {
89  fMap[parameter->GetName()] = parameter;
90 }
G4String GetName() const
std::map< G4String, G4VParameter * > fMap
Here is the call graph for this function:

◆ Reset()

void G4ParameterManager::Reset ( )

Definition at line 154 of file G4ParameterManager.cc.

155 {
156 // Reset histograms and profiles
157 
158  for ( auto it : fMap ) {
159  it.second->Reset();
160  }
161 }
std::map< G4String, G4VParameter * > fMap
Here is the caller graph for this function:

Member Data Documentation

◆ fgInstance

G4ThreadLocal G4ParameterManager * G4ParameterManager::fgInstance = nullptr
staticprivate

Definition at line 83 of file G4ParameterManager.hh.

◆ fgMasterInstance

G4ParameterManager * G4ParameterManager::fgMasterInstance = nullptr
staticprivate

Definition at line 82 of file G4ParameterManager.hh.

◆ fMap

std::map<G4String, G4VParameter*> G4ParameterManager::fMap
private

Definition at line 87 of file G4ParameterManager.hh.

◆ fParametersToDelete

std::vector<G4VParameter*> G4ParameterManager::fParametersToDelete
private

Definition at line 88 of file G4ParameterManager.hh.

◆ fState

const G4AnalysisManagerState G4ParameterManager::fState
private

Definition at line 86 of file G4ParameterManager.hh.


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