Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 26 //-------------------------------------------- 27 // 28 // GEANT4 Class file 29 // 30 // Description: Data structure for cross secti 31 // isotope cross sections 32 // 33 // Author: V.Ivanchenko 10.03.2011 34 // 35 // Modifications: 36 // 37 //-------------------------------------------- 38 39 #include "G4ElementData.hh" 40 #include "G4ElementDataRegistry.hh" 41 42 G4ElementData::G4ElementData(G4int length) 43 : maxNumElm(length) 44 { 45 elmData.resize(maxNumElm, nullptr); 46 G4ElementDataRegistry::Instance()->RegisterM 47 } 48 49 G4ElementData::~G4ElementData() 50 { 51 for (auto const & p : elmData) { delete p; } 52 for (auto const & p : elm2Data) { delete p; 53 for (auto const & p : compData) { 54 if (nullptr != p ) { 55 for (auto const & q : *p) { delete q.sec 56 delete p; 57 } 58 } 59 for (auto const & p : comp2D) { 60 if (nullptr != p ) { 61 for (auto const & q : *p) { delete q.sec 62 delete p; 63 } 64 } 65 G4ElementDataRegistry::Instance()->RemoveMe( 66 } 67 68 void G4ElementData::InitialiseForElement(G4int 69 { 70 if (Z < 0 || Z >= maxNumElm) { 71 DataError(Z, "InitialiseForElement"); 72 return; 73 } 74 delete elmData[Z]; 75 elmData[Z] = v; 76 } 77 78 void G4ElementData::InitialiseForElement(G4int 79 { 80 if (Z < 0 || Z >= maxNumElm) { 81 DataError(Z, "InitialiseForElement"); 82 return; 83 } 84 if (0 == elm2Data.size()) { 85 elm2Data.resize(maxNumElm, nullptr); 86 } 87 delete elm2Data[Z]; 88 elm2Data[Z] = v; 89 } 90 91 void G4ElementData::InitialiseForComponent(G4i 92 { 93 if (Z < 0 || Z >= maxNumElm) { 94 DataError(Z, "InitialiseForComponent"); 95 return; 96 } 97 if (0 == compData.size()) { 98 compData.resize(maxNumElm, nullptr); 99 } 100 delete compData[Z]; 101 compData[Z] = new std::vector<std::pair<G4in 102 if (0 < nComponents) { compData[Z]->reserve( 103 } 104 105 void G4ElementData::InitialiseFor2DComponent(G 106 { 107 if (Z < 0 || Z >= maxNumElm) { 108 DataError(Z, "InitialiseFor2DComponent"); 109 return; 110 } 111 if (0 == comp2D.size()) { 112 comp2D.resize(maxNumElm, nullptr); 113 } 114 delete comp2D[Z]; 115 comp2D[Z] = new std::vector<std::pair<G4int, 116 if (0 < nComponents) { comp2D[Z]->reserve(nC 117 } 118 119 void G4ElementData::AddComponent(G4int Z, G4in 120 { 121 if (Z < 0 || Z >= maxNumElm) { 122 DataError(Z, "AddComponent"); 123 return; 124 } 125 if (0 == compData.size()) { 126 compData.resize(maxNumElm, nullptr); 127 } 128 if (nullptr == compData[Z]) { 129 compData[Z] = new std::vector<std::pair<G4 130 } 131 compData[Z]->emplace_back(id, v); 132 } 133 134 void G4ElementData::Add2DComponent(G4int Z, G4 135 { 136 if (Z < 0 || Z >= maxNumElm) { 137 DataError(Z, "Add2DComponent"); 138 return; 139 } 140 if (0 == comp2D.size()) { 141 compData.resize(maxNumElm, nullptr); 142 } 143 if (nullptr == comp2D[Z]) { 144 comp2D[Z] = new std::vector<std::pair<G4in 145 } 146 comp2D[Z]->emplace_back(id, v); 147 } 148 149 void G4ElementData::DataError(G4int Z, const G 150 { 151 G4cout << "G4ElementData::" << type << " ERR 152 << name << "> Z = " << Z << " is out 153 G4Exception("G4ElementData", "mat603", Fatal 154 } 155