Geant4 Cross Reference |
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 // 27 // ------------------------------------------------------------------- 28 // 29 // GEANT4 Class header file 30 // 31 // File name: G4EmDataHandler 32 // 33 // Author: V. Ivanchenko 34 // 35 // Creation date: 16 August 2016 36 // 37 // Modifications: 38 // 39 // Class Description: 40 // 41 // A storage of G4PhysicsTable 42 // 43 // Class Description: End 44 45 // ------------------------------------------------------------------- 46 // 47 48 #ifndef G4EmDataHandler_h 49 #define G4EmDataHandler_h 1 50 51 #include <vector> 52 53 #include "globals.hh" 54 #include "G4PhysicsTable.hh" 55 #include "G4PhysicsVector.hh" 56 #include "G4EmTableType.hh" 57 #include "G4EmElementSelector.hh" 58 59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 60 61 class G4ParticleDefinition; 62 class G4VEmProcess; 63 class G4VEnergyLossProcess; 64 65 class G4EmDataHandler 66 { 67 public: 68 69 explicit G4EmDataHandler(std::size_t nTable, const G4String& nam=""); 70 71 ~G4EmDataHandler(); 72 73 // add table 74 std::size_t SetTable(G4PhysicsTable*); 75 76 // update existing table 77 void UpdateTable(G4PhysicsTable*, std::size_t idx); 78 79 // save table pointer 80 void SaveTable(G4PhysicsTable*, std::size_t idx); 81 82 // assuming that the table is already defined 83 G4PhysicsTable* MakeTable(std::size_t idx); 84 85 // existing table may be substituted 86 G4PhysicsTable* MakeTable(G4PhysicsTable*, std::size_t idx); 87 88 // clean existing table 89 void CleanTable(std::size_t idx); 90 91 G4bool StorePhysicsTable(std::size_t idx, 92 const G4ParticleDefinition* part, 93 const G4String& fname, 94 G4bool ascii); 95 96 G4bool RetrievePhysicsTable(std::size_t idx, 97 const G4ParticleDefinition* part, 98 const G4String& fname, 99 G4bool ascii, G4bool spline); 100 101 void SetMasterProcess(const G4VEmProcess*); 102 103 const G4VEmProcess* GetMasterProcess(size_t idx) const; 104 105 const G4PhysicsTable* GetTable(std::size_t idx) const { 106 return (idx < tLength) ? data[idx] : nullptr; 107 } 108 109 G4PhysicsTable* Table(std::size_t idx) const { 110 return (idx < tLength) ? data[idx] : nullptr; 111 } 112 113 const G4PhysicsVector* GetVector(std::size_t itable, std::size_t ivec) const { 114 return (*(data[itable]))[ivec]; 115 } 116 117 const std::vector<G4PhysicsTable*>& GetTables() const { 118 return data; 119 } 120 121 std::vector<G4double>* EnergyOfCrossSectionMax() const { 122 return fMaxXS; 123 } 124 125 void SetEnergyOfCrossSectionMax(std::vector<G4double>* p) { 126 if (p != fMaxXS) { 127 delete fMaxXS; 128 fMaxXS = p; 129 } 130 } 131 132 std::vector<G4TwoPeaksXS*>* TwoPeaksXS() const { 133 return fXSpeaks; 134 } 135 136 void SetTwoPeaksXS(std::vector<G4TwoPeaksXS*>* p) { 137 if (p != fXSpeaks) { 138 delete fXSpeaks; 139 fXSpeaks = p; 140 } 141 } 142 143 std::vector<G4EmElementSelector*>* GetElementSelectors(std::size_t i) { 144 return (i < eLength) ? fElemSelectors[i] : nullptr; 145 } 146 147 void SetElementSelectors(std::vector<G4EmElementSelector*>*, std::size_t); 148 149 G4CrossSectionType CrossSectionType() const { 150 return fXSType; 151 } 152 153 void SetCrossSectionType(G4CrossSectionType val) { 154 fXSType = val; 155 } 156 157 const G4String& GetName() const { 158 return fName; 159 } 160 161 void SetUseBaseParticleTable(G4bool val) { 162 fUseBaseParticleTable = val; 163 } 164 165 // hide assignment operator 166 G4EmDataHandler & operator=(const G4EmDataHandler &right) = delete; 167 G4EmDataHandler(const G4EmDataHandler&) = delete; 168 169 private: 170 171 std::vector<G4PhysicsTable*> data; 172 std::vector<G4double>* fMaxXS; 173 std::vector<G4TwoPeaksXS*>* fXSpeaks; 174 std::vector<std::vector<G4EmElementSelector*>* > fElemSelectors; 175 std::vector<const G4VEmProcess*> masterProcess; 176 std::size_t tLength{0}; 177 std::size_t eLength{0}; 178 G4CrossSectionType fXSType{fEmNoIntegral}; 179 G4String fName; 180 G4bool fUseBaseParticleTable{false}; 181 }; 182 183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 184 185 #endif 186 187