Loading...
Searching...
No Matches
TSRun.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/// \file parallel/ThreadsafeScorers/include/TSRun.hh
27/// \brief Definition of the TSRun class
28//
29//
30//
31//
32/// TSRun contains three collections of hits maps: a thread-local hits map,
33/// a global atomic hits map (implemented as a static since TSRun is
34/// implemented as a thread-local instance), and a global "mutex" hits map
35/// (also implemented as a static). The thread-local hits map is the
36/// same as you will find in many other examples. The atomics hits map
37/// is the purpose of this example. Code-wise, the implementation looks
38/// extremely similar to the thread-local version with the 3 primary
39/// exceptions: (1) construction - there should only be one instance so
40/// it should be a static member variable or a pointer/reference to a
41/// single instance elsewhere in the code (stored in ActionInitialization,
42/// for instance); (2) It does not need to, nor should be, summed in
43/// G4Run::Merge(); and (3) destruction -- it should only be cleared by
44/// the master thread since there is only one instance.
45/// A "mutex" hits map is also included as reference for checking the results
46/// accumulated by the thread-local hits maps and atomic hits maps. The
47/// differences w.r.t. this hits maps are computed in
48/// TSRunAction::EndOfRunAction
49//
50//
51//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
52//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
53
54#ifndef tsrun_h
55#define tsrun_h 1
56
57#include "globals.hh"
58
59#include "G4Run.hh"
60#include "G4Event.hh"
61#include "G4THitsMap.hh"
62#include "G4TAtomicHitsMap.hh"
63#include "G4THitsVector.hh"
64#include "G4StatAnalysis.hh"
65#include "G4ConvergenceTester.hh"
66
67#include <vector>
68
69class G4Event;
70
71// template <typename _Tp> using G4StatContainer = G4THitsMap<_Tp>;
72// template <typename _Tp> using G4StatContainer = G4THitsVector<_Tp>;
73template <typename _Tp>
75
76class TSRun : public G4Run
77{
78 public:
79 typedef std::map<G4int, G4double> MutexHitsMap_t;
80
81 public:
82 TSRun(const G4String&);
83 virtual ~TSRun();
84
85 // virtual method from G4Run.
86 // The method is overriden in this class for scoring.
87 virtual void RecordEvent(const G4Event*);
88
89 // Access methods for scoring information.
90 // - Get HitsMap of this RUN.
91 G4THitsMap<G4double>* GetHitsMap(const G4String& collname) const;
96
97 void ConstructMFD(const G4String&);
98
99 virtual void Merge(const G4Run*);
100
101 private:
102 std::vector<G4String> fCollNames;
103 std::vector<G4int> fCollIDs;
104 std::vector<G4THitsMap<G4double>*> fRunMaps;
105 std::vector<G4StatContainer<G4StatAnalysis>*> fStatMaps;
106 static std::vector<G4TAtomicHitsMap<G4double>*> fAtomicRunMaps;
107 static std::map<G4String, MutexHitsMap_t> fMutexRunMaps;
108 static std::vector<G4StatContainer<G4ConvergenceTester>*> fConvMaps;
109};
110
111#endif
Definition of the G4TAtomicHitsMap class.
G4THitsDeque< _Tp > G4StatContainer
Definition TSRun.hh:74
This is an implementation of G4THitsMap<T> where the underlying type is G4atomic<T>,...
virtual ~TSRun()
Definition TSRun.cc:97
std::vector< G4String > fCollNames
Definition TSRun.hh:102
static std::map< G4String, MutexHitsMap_t > fMutexRunMaps
Definition TSRun.hh:107
MutexHitsMap_t * GetMutexHitsMap(const G4String &) const
Definition TSRun.cc:303
virtual void Merge(const G4Run *)
Definition TSRun.cc:248
G4TAtomicHitsMap< G4double > * GetAtomicHitsMap(const G4String &) const
Definition TSRun.cc:284
G4StatContainer< G4StatAnalysis > * GetStatMap(const G4String &collname) const
Definition TSRun.cc:318
std::map< G4int, G4double > MutexHitsMap_t
Definition TSRun.hh:79
virtual void RecordEvent(const G4Event *)
Definition TSRun.cc:182
static std::vector< G4TAtomicHitsMap< G4double > * > fAtomicRunMaps
TSRun contains five hits collections types: 1) a thread-local hits map, 2) a global atomic hits map 3...
Definition TSRun.hh:106
std::vector< G4int > fCollIDs
Definition TSRun.hh:103
G4THitsMap< G4double > * GetHitsMap(const G4String &collname) const
Definition TSRun.cc:266
void ConstructMFD(const G4String &)
Definition TSRun.cc:120
std::vector< G4StatContainer< G4StatAnalysis > * > fStatMaps
Definition TSRun.hh:105
G4StatContainer< G4ConvergenceTester > * GetConvMap(const G4String &) const
Definition TSRun.cc:334
std::vector< G4THitsMap< G4double > * > fRunMaps
Definition TSRun.hh:104
static std::vector< G4StatContainer< G4ConvergenceTester > * > fConvMaps
Definition TSRun.hh:108

Applications | User Support | Publications | Collaboration