#include <G4BremsstrahlungCrossSectionHandler.hh>
Inheritance diagram for G4BremsstrahlungCrossSectionHandler:
Public Member Functions | |
G4BremsstrahlungCrossSectionHandler (const G4VEnergySpectrum *spectrum, G4VDataSetAlgorithm *interpolation) | |
~G4BremsstrahlungCrossSectionHandler () | |
G4double | GetCrossSectionAboveThresholdForElement (G4double energy, G4double cutEnergy, G4int Z) |
Protected Member Functions | |
std::vector< G4VEMDataSet * > * | BuildCrossSectionsForMaterials (const G4DataVector &energyVector, const G4DataVector *energyCuts) |
Definition at line 62 of file G4BremsstrahlungCrossSectionHandler.hh.
G4BremsstrahlungCrossSectionHandler::G4BremsstrahlungCrossSectionHandler | ( | const G4VEnergySpectrum * | spectrum, | |
G4VDataSetAlgorithm * | interpolation | |||
) |
Definition at line 74 of file G4BremsstrahlungCrossSectionHandler.cc.
00076 : theBR(spec) 00077 { 00078 interp = new G4SemiLogInterpolation(); 00079 }
G4BremsstrahlungCrossSectionHandler::~G4BremsstrahlungCrossSectionHandler | ( | ) |
std::vector< G4VEMDataSet * > * G4BremsstrahlungCrossSectionHandler::BuildCrossSectionsForMaterials | ( | const G4DataVector & | energyVector, | |
const G4DataVector * | energyCuts | |||
) | [protected, virtual] |
Implements G4VCrossSectionHandler.
Definition at line 91 of file G4BremsstrahlungCrossSectionHandler.cc.
References G4VEMDataSet::AddComponent(), G4VDataSetAlgorithm::Clone(), G4VCrossSectionHandler::FindValue(), G4Material::GetElementVector(), G4MaterialCutsCouple::GetMaterial(), G4ProductionCutsTable::GetMaterialCutsCouple(), G4Material::GetNumberOfElements(), G4ProductionCutsTable::GetProductionCutsTable(), G4ProductionCutsTable::GetTableSize(), G4Material::GetVecNbOfAtomsPerVolume(), and G4VEnergySpectrum::Probability().
00093 { 00094 std::vector<G4VEMDataSet*>* set = new std::vector<G4VEMDataSet*>; 00095 00096 G4DataVector* energies; 00097 G4DataVector* cs; 00098 00099 G4DataVector* log_energies; 00100 G4DataVector* log_cs; 00101 00102 G4int nOfBins = energyVector.size(); 00103 00104 const G4ProductionCutsTable* theCoupleTable= 00105 G4ProductionCutsTable::GetProductionCutsTable(); 00106 size_t numOfCouples = theCoupleTable->GetTableSize(); 00107 00108 for (size_t mLocal=0; mLocal<numOfCouples; mLocal++) { 00109 00110 const G4MaterialCutsCouple* couple = theCoupleTable->GetMaterialCutsCouple(mLocal); 00111 const G4Material* material= couple->GetMaterial(); 00112 const G4ElementVector* elementVector = material->GetElementVector(); 00113 const G4double* nAtomsPerVolume = material->GetVecNbOfAtomsPerVolume(); 00114 G4int nElements = material->GetNumberOfElements(); 00115 00116 G4double tcut = (*energyCuts)[mLocal]; 00117 00118 G4VDataSetAlgorithm* algo = interp->Clone(); 00119 G4VEMDataSet* setForMat = new G4CompositeEMDataSet(algo,1.,1.); 00120 00121 for (G4int i=0; i<nElements; i++) { 00122 00123 G4int Z = (G4int) ((*elementVector)[i]->GetZ()); 00124 00125 energies = new G4DataVector; 00126 cs = new G4DataVector; 00127 00128 log_energies = new G4DataVector; 00129 log_cs = new G4DataVector; 00130 00131 G4double density = nAtomsPerVolume[i]; 00132 00133 for (G4int bin=0; bin<nOfBins; bin++) { 00134 00135 G4double e = energyVector[bin]; 00136 energies->push_back(e); 00137 if (e==0.) e=1e-300; 00138 log_energies->push_back(std::log10(e)); 00139 G4double value = 0.0; 00140 00141 if(e > tcut) { 00142 G4double elemCs = FindValue(Z, e); 00143 00144 value = theBR->Probability(Z, tcut, e, e); 00145 00146 value *= elemCs*density; 00147 } 00148 cs->push_back(value); 00149 00150 if (value==0.) value=1e-300; 00151 log_cs->push_back(std::log10(value)); 00152 } 00153 G4VDataSetAlgorithm* algol = interp->Clone(); 00154 00155 //G4VEMDataSet* elSet = new G4EMDataSet(i,energies,cs,algol,1.,1.); 00156 00157 G4VEMDataSet* elSet = new G4EMDataSet(i,energies,cs,log_energies,log_cs,algol,1.,1.); 00158 00159 setForMat->AddComponent(elSet); 00160 } 00161 set->push_back(setForMat); 00162 } 00163 00164 return set; 00165 }
G4double G4BremsstrahlungCrossSectionHandler::GetCrossSectionAboveThresholdForElement | ( | G4double | energy, | |
G4double | cutEnergy, | |||
G4int | Z | |||
) |
Definition at line 169 of file G4BremsstrahlungCrossSectionHandler.cc.
References G4VCrossSectionHandler::FindValue(), and G4VEnergySpectrum::Probability().
Referenced by G4LivermoreBremsstrahlungModel::ComputeCrossSectionPerAtom().
00172 { 00173 G4double value = 0.; 00174 if(energy > cutEnergy) 00175 { 00176 G4double elemCs = FindValue(Z, energy); 00177 value = theBR->Probability(Z,cutEnergy, energy, energy); 00178 value *= elemCs; 00179 } 00180 return value; 00181 }