Geant4  10.03.p03
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4CrossSectionHandler Class Reference

#include <G4CrossSectionHandler.hh>

Inheritance diagram for G4CrossSectionHandler:
Collaboration diagram for G4CrossSectionHandler:

Public Member Functions

 G4CrossSectionHandler ()
 
 ~G4CrossSectionHandler ()
 
- Public Member Functions inherited from G4VCrossSectionHandler
 G4VCrossSectionHandler ()
 
 G4VCrossSectionHandler (G4VDataSetAlgorithm *interpolation, G4double minE=250 *CLHEP::eV, G4double maxE=100 *CLHEP::GeV, G4int nBins=200, G4double unitE=CLHEP::MeV, G4double unitData=CLHEP::barn, G4int minZ=1, G4int maxZ=99)
 
virtual ~G4VCrossSectionHandler ()
 
void Initialise (G4VDataSetAlgorithm *interpolation=0, G4double minE=250 *CLHEP::eV, G4double maxE=100 *CLHEP::GeV, G4int numberOfBins=200, G4double unitE=CLHEP::MeV, G4double unitData=CLHEP::barn, G4int minZ=1, G4int maxZ=99)
 
G4int SelectRandomAtom (const G4MaterialCutsCouple *couple, G4double e) const
 
const G4ElementSelectRandomElement (const G4MaterialCutsCouple *material, G4double e) const
 
G4int SelectRandomShell (G4int Z, G4double e) const
 
G4VEMDataSetBuildMeanFreePathForMaterials (const G4DataVector *energyCuts=0)
 
G4double FindValue (G4int Z, G4double e) const
 
G4double FindValue (G4int Z, G4double e, G4int shellIndex) const
 
G4double ValueForMaterial (const G4Material *material, G4double e) const
 
void LoadData (const G4String &dataFile)
 
void LoadNonLogData (const G4String &dataFile)
 
void LoadShellData (const G4String &dataFile)
 
void PrintData () const
 
void Clear ()
 

Protected Member Functions

virtual std::vector
< G4VEMDataSet * > * 
BuildCrossSectionsForMaterials (const G4DataVector &energyVector, const G4DataVector *energyCuts=0)
 
- Protected Member Functions inherited from G4VCrossSectionHandler
G4int NumberOfComponents (G4int Z) const
 
void ActiveElements ()
 
virtual G4VDataSetAlgorithmCreateInterpolation ()
 
const G4VDataSetAlgorithmGetInterpolation () const
 

Detailed Description

Definition at line 57 of file G4CrossSectionHandler.hh.

Constructor & Destructor Documentation

G4CrossSectionHandler::G4CrossSectionHandler ( )

Definition at line 64 of file G4CrossSectionHandler.cc.

65 { }
G4CrossSectionHandler::~G4CrossSectionHandler ( )

Definition at line 67 of file G4CrossSectionHandler.cc.

68 { }

Member Function Documentation

std::vector< G4VEMDataSet * > * G4CrossSectionHandler::BuildCrossSectionsForMaterials ( const G4DataVector energyVector,
const G4DataVector energyCuts = 0 
)
protectedvirtual

Implements G4VCrossSectionHandler.

Definition at line 71 of file G4CrossSectionHandler.cc.

73 {
74  G4DataVector* energies;
76 
77  G4DataVector* log_energies;
78  G4DataVector* log_data;
79 
80  std::vector<G4VEMDataSet*>* matCrossSections = new std::vector<G4VEMDataSet*>;
81 
82  const G4ProductionCutsTable* theCoupleTable=
84  size_t numOfCouples = theCoupleTable->GetTableSize();
85 
86  size_t nOfBins = energyVector.size();
87  const G4VDataSetAlgorithm* interpolationAlgo = CreateInterpolation();
88 
89  for (size_t mLocal=0; mLocal<numOfCouples; mLocal++)
90  {
91  const G4MaterialCutsCouple* couple = theCoupleTable->GetMaterialCutsCouple(mLocal);
92  const G4Material* material= couple->GetMaterial();
93  G4int nElements = material->GetNumberOfElements();
94  const G4ElementVector* elementVector = material->GetElementVector();
95  const G4double* nAtomsPerVolume = material->GetAtomicNumDensityVector();
96 
97  G4VDataSetAlgorithm* algo = interpolationAlgo->Clone();
98 
99  G4VEMDataSet* setForMat = new G4CompositeEMDataSet(algo,1.,1.);
100 
101  for (G4int i=0; i<nElements; i++) {
102 
103  G4int Z = (G4int) (*elementVector)[i]->GetZ();
104  G4double density = nAtomsPerVolume[i];
105 
106  energies = new G4DataVector;
107  data = new G4DataVector;
108 
109  log_energies = new G4DataVector;
110  log_data = new G4DataVector;
111 
112 
113  for (size_t bin=0; bin<nOfBins; bin++)
114  {
115  G4double e = energyVector[bin];
116  energies->push_back(e);
117  if (e==0.) e=1e-300;
118  log_energies->push_back(std::log10(e));
119  G4double cross = density*FindValue(Z,e);
120  data->push_back(cross);
121  if (cross==0.) cross=1e-300;
122  log_data->push_back(std::log10(cross));
123  }
124 
125  G4VDataSetAlgorithm* algo1 = interpolationAlgo->Clone();
126 
127 // G4VEMDataSet* elSet = new G4EMDataSet(i,energies,data,algo1,1.,1.);
128 
129  G4VEMDataSet* elSet = new G4EMDataSet(i,energies,data,log_energies,log_data,algo1,1.,1.);
130 
131  setForMat->AddComponent(elSet);
132  }
133 
134  matCrossSections->push_back(setForMat);
135  }
136  delete interpolationAlgo;
137  return matCrossSections;
138 }
std::vector< G4Element * > G4ElementVector
tuple bin
Definition: plottest35.py:22
const G4ElementVector * GetElementVector() const
Definition: G4Material.hh:190
int G4int
Definition: G4Types.hh:78
virtual G4VDataSetAlgorithm * Clone() const =0
const XML_Char const XML_Char * data
Definition: expat.h:268
string material
Definition: eplot.py:19
G4double FindValue(G4int Z, G4double e) const
virtual void AddComponent(G4VEMDataSet *dataSet)=0
const G4double * GetAtomicNumDensityVector() const
Definition: G4Material.hh:216
static G4ProductionCutsTable * GetProductionCutsTable()
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
size_t GetNumberOfElements() const
Definition: G4Material.hh:186
virtual G4VDataSetAlgorithm * CreateInterpolation()
double G4double
Definition: G4Types.hh:76
const G4Material * GetMaterial() const

Here is the call graph for this function:


The documentation for this class was generated from the following files: