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 
00036 
00037 
00038 
00039  
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 #ifndef G4ComponentSAIDTotalXS_h
00048 #define G4ComponentSAIDTotalXS_h 1
00049 
00050 #include "G4VComponentCrossSection.hh"
00051 #include "G4ParticleDefinition.hh"
00052 #include "globals.hh"
00053 
00054 enum G4SAIDCrossSectionType 
00055 { 
00056   saidUnknown = 0, 
00057   saidPP = 1, 
00058   saidNP = 2, 
00059   saidPIPP = 3,
00060   saidPINP = 4,
00061   saidPINP_PI0N = 5, 
00062   saidPINP_ETAN = 6,
00063   saidGP_PI0P = 7,
00064   saidGP_PIPN = 8,
00065   saidGN_PINP = 9,
00066   saidGN_PI0N = 10,
00067   saidGP_ETAP = 11,
00068   saidGP_ETAPP = 12
00069 };
00070 
00071 class G4PhysicsVector;
00072 
00073 class G4ComponentSAIDTotalXS : public G4VComponentCrossSection
00074 {
00075 public: 
00076 
00077   G4ComponentSAIDTotalXS();
00078 
00079   virtual ~G4ComponentSAIDTotalXS();
00080 
00081   virtual
00082   G4double GetTotalElementCrossSection(const G4ParticleDefinition*,
00083                                        G4double kinEnergy, 
00084                                        G4int , G4double );
00085 
00086   virtual
00087   G4double GetTotalIsotopeCrossSection(const G4ParticleDefinition*,
00088                                        G4double kinEnergy,
00089                                        G4int , G4int );
00090 
00091   virtual
00092   G4double GetInelasticElementCrossSection(const G4ParticleDefinition*,
00093                                            G4double kinEnergy, 
00094                                            G4int , G4double );
00095 
00096   virtual
00097   G4double GetInelasticIsotopeCrossSection(const G4ParticleDefinition*,
00098                                            G4double kinEnergy, 
00099                                            G4int , G4int );
00100 
00101   virtual
00102   G4double GetElasticElementCrossSection(const G4ParticleDefinition*,
00103                                          G4double kinEnergy, 
00104                                          G4int , G4double );
00105 
00106   virtual
00107   G4double GetElasticIsotopeCrossSection(const G4ParticleDefinition*,
00108                                          G4double kinEnergy, 
00109                                          G4int , G4int );
00110 
00111   G4double GetChargeExchangeCrossSection(const G4ParticleDefinition* prim,
00112                                          const G4ParticleDefinition* sec,
00113                                          G4double kinEnergy, 
00114                                          G4int , G4int );
00115 
00116   virtual
00117   void Description() const;
00118 
00119 private:
00120 
00121   G4SAIDCrossSectionType GetType(const G4ParticleDefinition* prim,
00122                                  const G4ParticleDefinition* sec,
00123                                  G4int Z, G4int N);
00124 
00125   void Initialise(G4SAIDCrossSectionType tp);
00126 
00127   void ReadData(G4int index, G4PhysicsVector*,
00128                 const G4String&, const G4String&);
00129 
00130   void PrintWarning(const G4ParticleDefinition* prim,
00131                     const G4ParticleDefinition* sec,
00132                     G4int , G4int ,
00133                     const G4String&, const G4String&);
00134 
00135   G4ComponentSAIDTotalXS & operator=(const G4ComponentSAIDTotalXS &right);
00136   G4ComponentSAIDTotalXS(const G4ComponentSAIDTotalXS&);
00137 
00138   G4int numberOfSaidXS;
00139 
00140   static G4String fnames[13];
00141   static G4PhysicsVector* elastdata[13];
00142   static G4PhysicsVector* inelastdata[13];
00143 
00144 };
00145 
00146 #endif