File indexing completed on 2025-10-31 09:02:40
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