Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ConvergenceTester.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// G4ConvergenceTester
27//
28// Class description:
29//
30// Convergence Tests for Monte Carlo results.
31//
32// Reference
33// MCNP(TM) -A General Monte Carlo N-Particle Transport Code
34// Version 4B
35// Judith F. Briesmeister, Editor
36// LA-12625-M, Issued: March 1997, UC 705 and UC 700
37// CHAPTER 2. GEOMETRY, DATA, PHYSICS, AND MATHEMATICS
38// VI. ESTIMATION OF THE MONTE CARLO PRECISION
39//
40// Positive numbers are assumed for input values
41
42// Author: Tatsumi Koi (SLAC/SCCS)
43// --------------------------------------------------------------------
44#ifndef G4ConvergenceTester_hh
45#define G4ConvergenceTester_hh 1
46
47#include "G4SimplexDownhill.hh"
48#include "G4Timer.hh"
49#include "globals.hh"
50
51#include <map>
52#include <vector>
53
55{
56 public:
57
58 G4ConvergenceTester(const G4String& theName = "NONAME");
61
62 void AddScore(G4double);
63
65 {
66 this->AddScore(val);
67 return *this;
68 }
69
70 void ShowHistory(std::ostream& out = G4cout);
71 void ShowResult(std::ostream& out = G4cout);
72 // Default to G4cout but can be redirected to another ostream
73
74 inline G4double GetValueOfMinimizingFunction(std::vector<G4double> x)
75 {
76 return slope_fitting_function(x);
77 }
78
79 void ComputeStatistics() { calStat(); }
80 // Explicitly calculate statistics
81
82 // All accessors check to make sure value is current before returning
83
84 inline G4double GetMean() { CheckIsUpdated(); return mean; }
85 inline G4double GetStandardDeviation() { CheckIsUpdated(); return sd; }
86 inline G4double GetVariance() { CheckIsUpdated(); return var; }
87 inline G4double GetR() { CheckIsUpdated(); return r; }
88 inline G4double GetEfficiency() { CheckIsUpdated(); return efficiency; }
89 inline G4double GetR2eff() { CheckIsUpdated(); return r2eff; }
90 inline G4double GetR2int() { CheckIsUpdated(); return r2int; }
91 inline G4double GetShift() { CheckIsUpdated(); return shift; }
92 inline G4double GetVOV() { CheckIsUpdated(); return vov; }
93 inline G4double GetFOM() { CheckIsUpdated(); return fom; }
94
95 private:
96
97 void calStat();
98 // Boolean value of 'statsAreUpdated' is set to TRUE at end of calStat
99 // and set to FALSE at end of AddScore().
100 // NOTE: A thread lock needs to be put in AddScore() so calStat()
101 // is not executed in one thread while AddScore() is adding data
102
103 inline void CheckIsUpdated()
104 {
105 if(!statsAreUpdated) { calStat(); }
106 }
107
108 void calc_grid_point_of_history();
109 void calc_stat_history();
110 void check_stat_history(std::ostream& out = G4cout);
111 G4double calc_Pearson_r(G4int,std::vector<G4double>,std::vector<G4double>);
112 G4bool is_monotonically_decrease(const std::vector<G4double>&);
113 void calc_slope_fit(const std::vector<G4double>&);
114 G4double slope_fitting_function(std::vector<G4double>);
115
116 private:
117
118 G4String name;
119 std::map<G4int, G4double> nonzero_histories; // (ith-history, score value)
120 G4int n = 0; // number of history
121 G4double sum = 0.0; // sum of scores;
122
123 G4Timer* timer = nullptr;
124 std::vector<G4double> cpu_time;
125
126 G4double mean = 0.0;
127 G4double var = 0.0;
128 G4double sd = 0.0;
129 G4double r = 0.0; // relative err sd/mean/sqrt(n)
130 G4double efficiency = 0.0; // rate of non zero score
131 G4double r2eff = 0.0;
132 G4double r2int = 0.0;
133 G4double shift = 0.0;
134 G4double vov = 0.0;
135 G4double fom = 0.0;
136
137 G4double largest = 0.0;
138 G4int largest_score_happened = 0;
139
140 G4double mean_1 = 0.0;
141 G4double var_1 = 0.0;
142 G4double sd_1 = 0.0;
143 G4double r_1 = 0.0; // relative err sd/mean/sqrt(n)
144 G4double shift_1 = 0.0;
145 G4double vov_1 = 0.0;
146 G4double fom_1 = 0.0;
147
148 G4int noBinOfHistory = 16;
149 std::vector<G4int> history_grid;
150 std::vector<G4double> mean_history;
151 std::vector<G4double> var_history;
152 std::vector<G4double> sd_history;
153 std::vector<G4double> r_history;
154 std::vector<G4double> vov_history;
155 std::vector<G4double> fom_history;
156 std::vector<G4double> shift_history;
157 std::vector<G4double> e_history;
158 std::vector<G4double> r2eff_history;
159 std::vector<G4double> r2int_history;
160
161 G4double slope = 0.0;
162 std::vector<G4double> largest_scores;
163 std::vector<G4double> f_xi;
164 std::vector<G4double> f_yi;
165 G4int noBinOfPDF = 10;
166 G4SimplexDownhill<G4ConvergenceTester>* minimizer = nullptr;
167
168 G4int noPass = 0;
169 G4int noTotal = 8; // Total number of tests
170
171 G4bool statsAreUpdated = true;
172 G4bool showHistory = true;
173 G4bool calcSLOPE = true;
174};
175
176#endif
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cout
G4ConvergenceTester & operator+=(G4double val)
void ShowResult(std::ostream &out=G4cout)
G4double GetValueOfMinimizingFunction(std::vector< G4double > x)
void ShowHistory(std::ostream &out=G4cout)
G4ConvergenceTester(G4double)