Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/src/G4ElNucleusSFcs.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 #include <iostream>
 29 
 30 #include "G4SystemOfUnits.hh"
 31 #include "G4PhysicalConstants.hh"
 32 #include "G4HadTmpUtil.hh"
 33 #include "G4ElNucleusSFcs.hh"
 34 #include "G4ElectroNuclearCrossSection.hh"
 35 
 36 // factory
 37 #include "G4CrossSectionFactory.hh"
 38 //
 39 G4_DECLARE_XS_FACTORY(G4ElNucleusSFcs);
 40 
 41 
 42 G4ElNucleusSFcs::G4ElNucleusSFcs():G4VCrossSectionDataSet(Default_Name())
 43 {
 44   fCHIPScs = new G4ElectroNuclearCrossSection();  
 45 }
 46 
 47 G4ElNucleusSFcs::~G4ElNucleusSFcs()
 48 {
 49   if( fCHIPScs != nullptr ) delete fCHIPScs;
 50 }
 51 
 52 void
 53 G4ElNucleusSFcs::CrossSectionDescription( std::ostream& outFile) const
 54 {
 55     outFile << "G4ElNucleusSFcs provides the inelastic\n"
 56     << "cross section for e- and e+ interactions with nuclei according to the structure function approach."
 57     << "all energies.\n";
 58 }
 59 
 60 G4bool G4ElNucleusSFcs::IsElementApplicable( const G4DynamicParticle* aPart, G4int Z, const G4Material*)
 61 {
 62 
 63   G4double eKin   = aPart->GetKineticEnergy();
 64   G4double thTkin = ThresholdEnergy();
 65   
 66   return ( Z > 0 && Z < 120 && eKin > thTkin );
 67 }
 68 
 69 
 70 G4double G4ElNucleusSFcs::GetIsoCrossSection( const G4DynamicParticle* aPart, G4int ZZ, G4int AA,  const G4Isotope* ,
 71                               const G4Element* , const G4Material* )
 72 {
 73   G4double xsc(0.), ratio(1.);
 74 
 75   xsc = fCHIPScs->GetElementCrossSection( aPart, ZZ, nullptr ); //, const G4Material*);
 76 
 77   ratio = GetRatio(ZZ,AA);
 78 
 79   if( ratio > 0. ) xsc /= ratio;
 80   
 81   return xsc;
 82 }
 83 
 84 /////////////////////////////////////////////////////////////////////////
 85 //
 86 // Calculate ratio CHIPS-CS/SF-CS, averaged between 200 MeV and 100 GeV
 87 
 88 G4double G4ElNucleusSFcs::GetRatio( G4int Z, G4int A )
 89 {
 90   G4double ratio(1.);
 91 
 92   if      ( Z == 1   && A == 1 )   return 1.51;
 93   else if ( Z == 1   && A == 2 )   return 0.33;
 94   else if ( Z == 1   && A == 3 )   return 0.27;
 95   else if ( Z == 2   && A == 4 )   return 1.81;
 96   else if ( Z == 6   && A == 12 )  return 2.26;
 97   else if ( Z == 7   && A == 14 )  return 2.47;
 98   else if ( Z == 8   && A == 16 )  return 2.61;
 99   else if ( Z == 13  && A == 27 )  return 2.57;
100   else if ( Z == 14  && A == 28 )  return 2.49;
101   else if ( Z == 18  && A == 40 )  return 2.72;
102   else if ( Z == 22  && A == 48 )  return 2.71;
103   else if ( Z == 26  && A == 56 )  return 2.79;
104   else if ( Z == 29  && A == 64 )  return 2.78;
105   else if ( Z == 32  && A == 73 )  return 2.87;
106   else if ( Z == 42  && A == 96 )  return 3.02;
107   else if ( Z == 46  && A == 106 ) return 3.02;
108   else if ( Z == 47  && A == 108 ) return 2.99;
109   else if ( Z == 48  && A == 112 ) return 3.00;
110   else if ( Z == 74  && A == 184 ) return 3.44;
111   else if ( Z == 79  && A == 200 ) return 3.49;
112   else if ( Z == 82  && A == 207 ) return 3.48;
113   else if ( Z == 92  && A == 238 ) return 3.88;
114   else
115   {
116     G4int it(0), iMax(19);
117     G4double zz = G4double(Z);
118 
119     for ( it = 0; it < iMax; ++it ) if ( zz <= fZZ[it] ) break;
120 
121     if     ( it == 0 )    return fRR[0];
122     else if( it == iMax ) return fRR[iMax-1];
123     else
124     {
125       G4double x1 = fZZ[it-1];
126       G4double x2 = fZZ[it];
127       G4double y1 = fRR[it-1];
128       G4double y2 = fRR[it];
129       
130       if( x1 >= x2 ) return fRR[it];
131       else
132       {
133         G4double angle = (y2-y1)/(x2-x1);
134   ratio = y1 + ( zz - x1 )*angle;
135       }
136     } 
137   }
138   return ratio;
139 }
140 
141 /////////////////////////////////////////
142 
143 G4double G4ElNucleusSFcs::ThresholdEnergy()
144 {
145   G4double thTkin = 134.9766*CLHEP::MeV; // Pi0 threshold for the nucleon
146   
147   thTkin *= 1.3; // nucleon motion
148   
149   return thTkin;
150 }
151 
152 /////////////////////////////////////////
153 
154 const G4double G4ElNucleusSFcs::fZZ[19] =
155   {
156     2., 6., 7., 8., 13., 14., 18., 22., 26., 29.,
157     32., 42., 46., 47., 48., 74., 79., 82., 92.
158   };
159 
160 /////////////////////////////////////////
161 
162 const G4double G4ElNucleusSFcs::fRR[19] =
163   {
164     1.81, 2.26, 2.47, 2.61, 2.57, 2.49, 2.72, 2.71, 2.79, 2.78,
165     2.87, 3.02, 3.02, 2.99, 3., 3.44, 3.49, 3.48, 2.88
166   };
167