File indexing completed on 2025-01-18 09:58:12
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044 #ifndef G4EMDATASET_HH
0045 #define G4EMDATASET_HH 1
0046
0047 #include <CLHEP/Units/SystemOfUnits.h>
0048 #include "globals.hh"
0049 #include "G4VEMDataSet.hh"
0050
0051 class G4VDataSetAlgorithm;
0052
0053 class G4EMDataSet : public G4VEMDataSet
0054 {
0055 public:
0056 explicit G4EMDataSet(G4int argZ,
0057 G4VDataSetAlgorithm* algo,
0058 G4double xUnit=CLHEP::MeV,
0059 G4double yUnit=CLHEP::barn,
0060 G4bool random=false);
0061
0062 explicit G4EMDataSet(G4int argZ,
0063 G4DataVector* xData,
0064 G4DataVector* data,
0065 G4VDataSetAlgorithm* algo,
0066 G4double xUnit=CLHEP::MeV,
0067 G4double yUnit=CLHEP::barn,
0068 G4bool random=false);
0069
0070 explicit G4EMDataSet(G4int argZ,
0071 G4DataVector* xData,
0072 G4DataVector* data,
0073 G4DataVector* xLogData,
0074 G4DataVector* Logdata,
0075 G4VDataSetAlgorithm* algo,
0076 G4double xUnit=CLHEP::MeV,
0077 G4double yUnit=CLHEP::barn,
0078 G4bool random=false);
0079
0080 virtual ~G4EMDataSet();
0081
0082 virtual G4double FindValue(G4double x, G4int componentId=0) const;
0083
0084 virtual void PrintData(void) const;
0085
0086 virtual const G4VEMDataSet* GetComponent(G4int ) const { return 0; }
0087
0088 virtual void AddComponent(G4VEMDataSet* ) {}
0089
0090 virtual std::size_t NumberOfComponents(void) const { return 0; }
0091
0092 virtual const G4DataVector& GetEnergies(G4int ) const { return *energies; }
0093 virtual const G4DataVector& GetData(G4int ) const { return *data; }
0094 virtual const G4DataVector& GetLogEnergies(G4int ) const { return *log_energies; }
0095 virtual const G4DataVector& GetLogData(G4int ) const { return *log_data; }
0096
0097 virtual void SetEnergiesData(G4DataVector* xData, G4DataVector* data, G4int componentId);
0098 virtual void SetLogEnergiesData(G4DataVector* xData,
0099 G4DataVector* data,
0100 G4DataVector* xLogData,
0101 G4DataVector* Logdata,
0102 G4int componentId);
0103
0104
0105 virtual G4bool LoadData(const G4String& fileName);
0106 virtual G4bool LoadNonLogData(const G4String& fileName);
0107
0108 virtual G4bool SaveData(const G4String& fileName) const;
0109
0110 virtual G4double RandomSelect(G4int componentId = 0) const;
0111
0112
0113 private:
0114
0115 std::size_t FindLowerBound(G4double energy) const;
0116 std::size_t FindLowerBound(G4double x, G4DataVector* values) const;
0117
0118 G4double IntegrationFunction(G4double x);
0119 virtual void BuildPdf();
0120 G4String FullFileName(const G4String& fileName) const;
0121
0122
0123 explicit G4EMDataSet();
0124 G4EMDataSet(const G4EMDataSet& copy) = delete;
0125 G4EMDataSet& operator=(const G4EMDataSet& right) = delete;
0126
0127 G4DataVector* energies;
0128 G4DataVector* data;
0129 G4DataVector* log_energies;
0130 G4DataVector* log_data;
0131 G4VDataSetAlgorithm* algorithm;
0132 G4DataVector* pdf;
0133
0134 G4double unitEnergies;
0135 G4double unitData;
0136
0137 G4int z;
0138 G4bool randomSet;
0139 };
0140 #endif