ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4RDCrossSectionHandler.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4RDCrossSectionHandler.cc
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 // Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
29 //
30 // History:
31 // -----------
32 // 1 Aug 2001 MGP Created
33 // 19 Jul 2002 VI Create composite data set for material
34 // 24 Apr 2003 VI Cut per region mfpt
35 //
36 // -------------------------------------------------------------------
37 
39 #include "G4RDVDataSetAlgorithm.hh"
40 #include "G4RDVEMDataSet.hh"
41 #include "G4RDEMDataSet.hh"
43 #include "G4RDShellEMDataSet.hh"
44 #include "G4ProductionCutsTable.hh"
45 #include "G4Material.hh"
46 #include "G4Element.hh"
47 #include "Randomize.hh"
48 #include <map>
49 #include <vector>
50 
52 
54 { }
55 
57 { }
58 
59 std::vector<G4RDVEMDataSet*>*
61  const G4DataVector*)
62 {
63  G4DataVector* energies;
65 
66  std::vector<G4RDVEMDataSet*>* matCrossSections = new std::vector<G4RDVEMDataSet*>;
67 
68  const G4ProductionCutsTable* theCoupleTable=
70  size_t numOfCouples = theCoupleTable->GetTableSize();
71 
72  size_t nOfBins = energyVector.size();
73  const G4RDVDataSetAlgorithm* interpolationAlgo = CreateInterpolation();
74 
75  for (size_t m=0; m<numOfCouples; m++)
76  {
77  const G4MaterialCutsCouple* couple = theCoupleTable->GetMaterialCutsCouple(m);
78  const G4Material* material= couple->GetMaterial();
79  G4int nElements = material->GetNumberOfElements();
80  const G4ElementVector* elementVector = material->GetElementVector();
81  const G4double* nAtomsPerVolume = material->GetAtomicNumDensityVector();
82 
83  G4RDVDataSetAlgorithm* algo = interpolationAlgo->Clone();
84 
85  G4RDVEMDataSet* setForMat = new G4RDCompositeEMDataSet(algo,1.,1.);
86 
87  for (G4int i=0; i<nElements; i++) {
88 
89  G4int Z = (G4int) (*elementVector)[i]->GetZ();
90  G4double density = nAtomsPerVolume[i];
91 
92  energies = new G4DataVector;
93  data = new G4DataVector;
94 
95 
96  for (size_t bin=0; bin<nOfBins; bin++)
97  {
98  G4double e = energyVector[bin];
99  energies->push_back(e);
100  G4double cross = density*FindValue(Z,e);
101  data->push_back(cross);
102  }
103 
104  G4RDVDataSetAlgorithm* algo1 = interpolationAlgo->Clone();
105  G4RDVEMDataSet* elSet = new G4RDEMDataSet(i,energies,data,algo1,1.,1.);
106  setForMat->AddComponent(elSet);
107  }
108 
109  matCrossSections->push_back(setForMat);
110  }
111  return matCrossSections;
112 }
113