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 #include "G4CrystalExtension.hh" 29 30 #include "G4AtomicFormFactor.hh" 31 32 G4CrystalExtension::G4CrystalExtension(G4Mater 33 : G4VMaterialExtension(name), fMaterial(mat) 34 {} 35 36 //....oooOO0OOooo........oooOO0OOooo........oo 37 38 G4complex G4CrystalExtension::ComputeStructure 39 G4double kScatteringVector, G4int h, G4int k 40 { 41 // SF == Structure Factor 42 // AFF == Atomic Form Factor 43 // GFS == Geometrical Structure Factor 44 G4complex SF = G4complex(0., 0.); 45 46 for (auto& anElement : *(fMaterial->GetEleme 47 G4double AFF = G4AtomicFormFactor::GetMana 48 49 G4complex GFS = G4complex(0., 0.); 50 51 for (const auto& anAtomPos : GetAtomBase(a 52 G4double aDouble = h * anAtomPos.x() + k 53 GFS += G4complex(std::cos(CLHEP::twopi * 54 } 55 56 SF += G4complex(AFF * GFS.real(), AFF * GF 57 } 58 return SF; 59 } 60 61 //....oooOO0OOooo........oooOO0OOooo........oo 62 63 G4complex G4CrystalExtension::ComputeStructure 64 { 65 // GFS == Geometrical Structure Form Factor 66 G4complex GFS = G4complex(0., 0.); 67 68 for (auto& anElement : *(fMaterial->GetEleme 69 for (const auto& anAtomPos : GetAtomBase(a 70 G4double aDouble = h * anAtomPos.x() + k 71 GFS += G4complex(std::cos(CLHEP::twopi * 72 } 73 } 74 return GFS; 75 } 76 77 //....oooOO0OOooo........oooOO0OOooo........oo 78 79 void G4CrystalExtension::SetElReduced(const Re 80 { 81 for (size_t i = 0; i < 6; ++i) { 82 for (size_t j = 0; j < 6; ++j) { 83 fElReduced[i][j] = mat[i][j]; 84 } 85 } 86 } 87 88 //....oooOO0OOooo........oooOO0OOooo........oo 89 90 void G4CrystalExtension::SetCpq(G4int p, G4int 91 { 92 if (p > 0 && p < 7 && q > 0 && q < 7) { 93 fElReduced[p - 1][q - 1] = value; 94 } 95 } 96 97 //....oooOO0OOooo........oooOO0OOooo........oo 98 99 G4CrystalAtomBase* G4CrystalExtension::GetAtom 100 { 101 if ((theCrystalAtomBaseMap.count(anElement) 102 G4String astring = "Atom base for element 103 G4Exception("G4CrystalExtension::GetAtomBa 104 105 AddAtomBase(anElement, new G4CrystalAtomBa 106 } 107 return theCrystalAtomBaseMap[anElement]; 108 } 109 110 //....oooOO0OOooo........oooOO0OOooo........oo 111 112 G4bool G4CrystalExtension::GetAtomPos(const G4 113 { 114 std::vector<G4ThreeVector> pos; 115 for (auto& asinglepos : GetAtomBase(anEl)->G 116 pos.clear(); 117 theUnitCell->FillAtomicPos(asinglepos, pos 118 vecout.insert(std::end(vecout), std::begin 119 } 120 return true; 121 } 122 123 //....oooOO0OOooo........oooOO0OOooo........oo 124 125 G4bool G4CrystalExtension::GetAtomPos(std::vec 126 { 127 std::vector<G4ThreeVector> pos; 128 vecout.clear(); 129 for (auto& anElement : *(fMaterial->GetEleme 130 pos.clear(); 131 GetAtomPos(anElement, pos); 132 vecout.insert(std::end(vecout), std::begin 133 } 134 return true; 135 } 136