00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef G4UPiNuclearCrossSection_h
00036 #define G4UPiNuclearCrossSection_h
00037
00038 #include "G4VCrossSectionDataSet.hh"
00039 #include "G4DynamicParticle.hh"
00040 #include "G4DataVector.hh"
00041 #include "G4HadTmpUtil.hh"
00042 #include "globals.hh"
00043 #include <vector>
00044
00045 class G4PhysicsTable;
00046
00047 class G4UPiNuclearCrossSection : public G4VCrossSectionDataSet
00048 {
00049 public:
00050
00051 G4UPiNuclearCrossSection();
00052
00053 virtual ~G4UPiNuclearCrossSection();
00054
00055 virtual
00056 G4bool IsElementApplicable(const G4DynamicParticle* aParticle,
00057 G4int Z, const G4Material*);
00058
00059 G4double GetElasticCrossSection(const G4DynamicParticle* aParticle,
00060 G4int Z, G4int A);
00061
00062 G4double GetInelasticCrossSection(const G4DynamicParticle* aParticle,
00063 G4int Z, G4int A);
00064
00065 void BuildPhysicsTable(const G4ParticleDefinition&);
00066
00067 void DumpPhysicsTable(const G4ParticleDefinition&);
00068
00069 virtual void CrossSectionDescription(std::ostream&) const;
00070
00071 private:
00072
00073 void AddDataSet(const G4String& p, const G4double* tot,
00074 const G4double* in, const G4double* e, G4int n);
00075
00076 G4double Interpolate(G4int Z, G4int A, G4double ekin,
00077 G4PhysicsTable*);
00078
00079 G4int NZ;
00080 std::vector<G4int> theZ;
00081 G4DataVector theA;
00082 G4PhysicsTable* piPlusElastic;
00083 G4PhysicsTable* piPlusInelastic;
00084 G4PhysicsTable* piMinusElastic;
00085 G4PhysicsTable* piMinusInelastic;
00086
00087 G4double aPower;
00088 G4double elow;
00089 G4double elowest;
00090 G4double APower[93];
00091
00092 const G4ParticleDefinition* piPlus;
00093 const G4ParticleDefinition* piMinus;
00094 G4bool isInitialized;
00095 };
00096
00097 #endif