Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/global/HEPNumerics/include/G4StatAnalysis.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /global/HEPNumerics/include/G4StatAnalysis.hh (Version 11.3.0) and /global/HEPNumerics/include/G4StatAnalysis.hh (Version 11.1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4StatAnalysis                                  26 // G4StatAnalysis
 27 //                                                 27 //
 28 // Class description:                              28 // Class description:
 29 //                                                 29 //
 30 //  Class for statistical analysis of random v     30 //  Class for statistical analysis of random variable
 31 //                                                 31 //
 32 //  Adapted from:                                  32 //  Adapted from:
 33 //  Lux, I.                                        33 //  Lux, I.
 34 //      Monte Carlo particle transport methods     34 //      Monte Carlo particle transport methods: neutron and photon
 35 //      calculations/authors, Ivan Lux and Las     35 //      calculations/authors, Ivan Lux and Laszlo Koblinger.
 36 //      ISBN 0-8493-6074-9                         36 //      ISBN 0-8493-6074-9
 37 //  1. Neutron transport theory. 2. Photon tra     37 //  1. Neutron transport theory. 2. Photon transport theory.
 38 //  3. Monte Carlo method. I. Koblinger, Laszl     38 //  3. Monte Carlo method. I. Koblinger, Laszlo. II. Title.
 39 //     QC793.5.N4628L88 1990 530.1 '38'20          39 //     QC793.5.N4628L88 1990 530.1 '38'20
 40                                                    40 
 41 // Author: J.Madsen, 25.10.2018                    41 // Author: J.Madsen, 25.10.2018
 42 // -------------------------------------------     42 // --------------------------------------------------------------------
 43 #ifndef G4StatAnalysis_hh                          43 #ifndef G4StatAnalysis_hh
 44 #define G4StatAnalysis_hh 1                        44 #define G4StatAnalysis_hh 1
 45                                                    45 
 46 #include <cmath>                                   46 #include <cmath>
 47 #include <fstream>                                 47 #include <fstream>
 48 #include <iomanip>                                 48 #include <iomanip>
 49 #include <iostream>                                49 #include <iostream>
 50 #include <limits>                                  50 #include <limits>
 51 #include <optional>                            << 
 52                                                    51 
 53 #include "globals.hh"                              52 #include "globals.hh"
 54 #include "tls.hh"                                  53 #include "tls.hh"
 55                                                    54 
 56 #include "G4Allocator.hh"                          55 #include "G4Allocator.hh"
 57 #include "G4Timer.hh"                              56 #include "G4Timer.hh"
 58 #include "G4Types.hh"                              57 #include "G4Types.hh"
 59 #include "G4ios.hh"                                58 #include "G4ios.hh"
 60                                                    59 
 61 class G4StatAnalysis                               60 class G4StatAnalysis
 62 {                                                  61 {
 63  public:                                           62  public:
 64   inline G4StatAnalysis();                         63   inline G4StatAnalysis();
 65   inline ~G4StatAnalysis() {}                      64   inline ~G4StatAnalysis() {}
 66                                                    65 
 67   // Accumulated values                            66   // Accumulated values
 68   inline G4double GetMean() const;                 67   inline G4double GetMean() const;
 69   inline const G4double& GetSum() const;           68   inline const G4double& GetSum() const;
 70   inline const G4double& GetSumSquared() const     69   inline const G4double& GetSumSquared() const;
 71   inline const G4double& GetSum1() const;          70   inline const G4double& GetSum1() const;
 72   inline const G4double& GetSum2() const;          71   inline const G4double& GetSum2() const;
 73   inline const G4int& GetHits() const;             72   inline const G4int& GetHits() const;
 74   inline G4int GetNumNonZero() const;              73   inline G4int GetNumNonZero() const;
 75   inline G4int GetNumZero() const;                 74   inline G4int GetNumZero() const;
 76                                                    75 
 77   // Some control over accumulated variables       76   // Some control over accumulated variables
 78   inline void SetSum(const G4double& val);         77   inline void SetSum(const G4double& val);
 79   inline void SetSumSquared(const G4double& va     78   inline void SetSumSquared(const G4double& val);
 80   inline void SetSum1(const G4double& val);        79   inline void SetSum1(const G4double& val);
 81   inline void SetSum2(const G4double& val);        80   inline void SetSum2(const G4double& val);
 82   inline void SetHits(const G4int& val);           81   inline void SetHits(const G4int& val);
 83   inline void SetZero(const G4int& val);           82   inline void SetZero(const G4int& val);
 84                                                    83 
 85   // Computed values                               84   // Computed values
 86   inline G4double GetFOM() const;                  85   inline G4double GetFOM() const;
 87   inline G4double GetRelativeError() const;        86   inline G4double GetRelativeError() const;
 88   inline G4double GetStdDev() const;               87   inline G4double GetStdDev() const;
 89   inline G4double GetVariance() const;             88   inline G4double GetVariance() const;
 90   inline G4double GetCoeffVariation() const;       89   inline G4double GetCoeffVariation() const;
 91   inline G4double GetEfficiency() const;           90   inline G4double GetEfficiency() const;
 92   inline G4double GetR2Int() const;                91   inline G4double GetR2Int() const;
 93   inline G4double GetR2Eff() const;                92   inline G4double GetR2Eff() const;
 94                                                    93 
 95   // Conversion                                    94   // Conversion
 96   inline operator G4double() const;                95   inline operator G4double() const;
 97                                                    96 
 98   // Modifications                                 97   // Modifications
 99   inline void Reset();                             98   inline void Reset();
100   inline void Add(const G4double& _val, const      99   inline void Add(const G4double& _val, const G4double& _weight = 1.0);
101   inline void Rescale(const G4double& factor);    100   inline void Rescale(const G4double& factor);
102                                                   101 
103   // Output                                       102   // Output
104   inline void PrintInfo(std::ostream& os, cons    103   inline void PrintInfo(std::ostream& os, const std::string& = "") const;
105                                                   104 
106   // Operators                                    105   // Operators
107   inline G4StatAnalysis& operator+=(const G4do    106   inline G4StatAnalysis& operator+=(const G4double& _val);
108   inline G4StatAnalysis& operator/=(const G4do    107   inline G4StatAnalysis& operator/=(const G4double& _val);
109   inline G4StatAnalysis& operator+=(const G4St    108   inline G4StatAnalysis& operator+=(const G4StatAnalysis&);
110   inline G4StatAnalysis& operator-=(const G4St    109   inline G4StatAnalysis& operator-=(const G4StatAnalysis&);
111                                                   110 
112   // Allocators                                   111   // Allocators
113   inline void* operator new(std::size_t);         112   inline void* operator new(std::size_t);
114   inline void operator delete(void*);             113   inline void operator delete(void*);
115                                                   114 
116   // Timing (member functions)                    115   // Timing (member functions)
117   inline G4double GetCpuTime() const;             116   inline G4double GetCpuTime() const;
118   // Timing (static functions)                    117   // Timing (static functions)
119   static tms* GetCpuClock()                    << 118   static tms*& GetCpuClock()
120   {                                               119   {
121     G4ThreadLocalStatic std::optional<tms> _in << 120     G4ThreadLocalStatic tms* _instance = nullptr;
122     if(_instance == std::nullopt)              << 121     if(!_instance)
123     {                                             122     {
124       _instance = tms();                       << 123       _instance = new tms;
125       times(&_instance.value());               << 124       times(_instance);
126     }                                             125     }
127     return &_instance.value();                 << 126     return _instance;
128   }                                               127   }
129   // Note: this above implementation was imple    128   // Note: this above implementation was implemented in such a way as to
130   // conserve memory by eliminated every insta    129   // conserve memory by eliminated every instance from requiring their own
131   // timing variables. The ResetCpuClock funct    130   // timing variables. The ResetCpuClock function below is called at the
132   // beginning of the run (G4Run constructor)     131   // beginning of the run (G4Run constructor) to attempt to ensure the
133   // FOM is not skewed by multiple runs -- it     132   // FOM is not skewed by multiple runs -- it may be necessary to
134   // manually invoke in some situations           133   // manually invoke in some situations
135   static void ResetCpuClock()                     134   static void ResetCpuClock()
136   {                                               135   {
137     tms* _clock = GetCpuClock();               << 136     tms*& _clock = GetCpuClock();
138     times(_clock);                                137     times(_clock);
139   }                                               138   }
140                                                   139 
141   // friend operator for output                   140   // friend operator for output
142   friend std::ostream& operator<<(std::ostream    141   friend std::ostream& operator<<(std::ostream& os, const G4StatAnalysis& obj)
143   {                                               142   {
144     obj.PrintInfo(os);                            143     obj.PrintInfo(os);
145     return os;                                    144     return os;
146   }                                               145   }
147   // friend operator for addition                 146   // friend operator for addition
148   friend const G4StatAnalysis operator+(const     147   friend const G4StatAnalysis operator+(const G4StatAnalysis& lhs,
149                                         const     148                                         const G4StatAnalysis& rhs)
150   {                                               149   {
151     return G4StatAnalysis(lhs) += rhs;            150     return G4StatAnalysis(lhs) += rhs;
152   }                                               151   }
153   // friend operator for subtraction              152   // friend operator for subtraction
154   friend const G4StatAnalysis operator-(const     153   friend const G4StatAnalysis operator-(const G4StatAnalysis& lhs,
155                                         const     154                                         const G4StatAnalysis& rhs)
156   {                                               155   {
157     return G4StatAnalysis(lhs) -= rhs;            156     return G4StatAnalysis(lhs) -= rhs;
158   }                                               157   }
159                                                   158 
160  private:                                         159  private:
161   G4double fSum1 = 0.0;  // summation of each     160   G4double fSum1 = 0.0;  // summation of each history^1
162   G4double fSum2 = 0.0;  // summation from eac    161   G4double fSum2 = 0.0;  // summation from each history^2
163   G4int fHits    = 0;    // number of scoring     162   G4int fHits    = 0;    // number of scoring histories
164   G4int fZero    = 0;    // number of historie    163   G4int fZero    = 0;    // number of histories that were not greater than 0.0
165 };                                                164 };
166                                                   165 
167 #include "G4StatAnalysis.icc"                     166 #include "G4StatAnalysis.icc"
168                                                   167 
169 #endif                                            168 #endif
170                                                   169