Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/cross_sections/src/G4NeutrinoElectronNcXsc.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 ]

Diff markup

Differences between /processes/hadronic/cross_sections/src/G4NeutrinoElectronNcXsc.cc (Version 11.3.0) and /processes/hadronic/cross_sections/src/G4NeutrinoElectronNcXsc.cc (Version 10.5)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26                                                    26 
 27                                                    27 
 28 #include "G4NeutrinoElectronNcXsc.hh"              28 #include "G4NeutrinoElectronNcXsc.hh"
 29 #include "G4PhysicalConstants.hh"                  29 #include "G4PhysicalConstants.hh"
 30 #include "G4SystemOfUnits.hh"                      30 #include "G4SystemOfUnits.hh"
 31 #include "G4DynamicParticle.hh"                    31 #include "G4DynamicParticle.hh"
 32 #include "G4ParticleTable.hh"                      32 #include "G4ParticleTable.hh"
 33 #include "G4IonTable.hh"                           33 #include "G4IonTable.hh"
 34 #include "G4HadTmpUtil.hh"                         34 #include "G4HadTmpUtil.hh"
 35 #include "G4Proton.hh"                             35 #include "G4Proton.hh"
 36 #include "G4NistManager.hh"                        36 #include "G4NistManager.hh"
 37                                                    37 
 38 using namespace std;                               38 using namespace std;
 39 using namespace CLHEP;                             39 using namespace CLHEP;
 40                                                    40 
 41 G4NeutrinoElectronNcXsc::G4NeutrinoElectronNcX     41 G4NeutrinoElectronNcXsc::G4NeutrinoElectronNcXsc()
 42  : G4VCrossSectionDataSet("NuElectronNcXsc")       42  : G4VCrossSectionDataSet("NuElectronNcXsc")
 43 {                                                  43 {
 44   // PDG2016: Gf=1.1663787(6)e-5*(hc)^3/GeV^2      44   // PDG2016: Gf=1.1663787(6)e-5*(hc)^3/GeV^2
 45   // fCofXsc  = Gf*Gf*MeC2*2/pi                    45   // fCofXsc  = Gf*Gf*MeC2*2/pi
 46                                                    46 
 47   fCofXsc  = 1.36044e-22;                          47   fCofXsc  = 1.36044e-22;
 48   fCofXsc *= hbarc*hbarc*electron_mass_c2;         48   fCofXsc *= hbarc*hbarc*electron_mass_c2;
 49   fCofXsc /= halfpi;                               49   fCofXsc /= halfpi;
 50                                                    50 
 51   // G4cout<<"hbarc = "<<hbarc/MeV/fermi<<" Me     51   // G4cout<<"hbarc = "<<hbarc/MeV/fermi<<" MeV*fermi"<<G4endl;
 52                                                    52 
 53   // PDG2016: sin^2 theta Weinberg                 53   // PDG2016: sin^2 theta Weinberg
 54                                                    54 
 55   fSin2tW = 0.23129; // 0.2312;                    55   fSin2tW = 0.23129; // 0.2312;
 56                                                    56 
 57   fCutEnergy = 0.; // default value                57   fCutEnergy = 0.; // default value
 58   fBiasingFactor = 1.;                             58   fBiasingFactor = 1.; 
 59 }                                                  59 }
 60                                                    60 
 61 G4NeutrinoElectronNcXsc::~G4NeutrinoElectronNc     61 G4NeutrinoElectronNcXsc::~G4NeutrinoElectronNcXsc() 
 62 {}                                                 62 {}
 63                                                    63 
 64 //////////////////////////////////////////////     64 //////////////////////////////////////////////////////
 65                                                    65 
 66 G4bool                                             66 G4bool 
 67 G4NeutrinoElectronNcXsc::IsElementApplicable(      67 G4NeutrinoElectronNcXsc::IsElementApplicable( const G4DynamicParticle* aPart, G4int, const G4Material*)
 68 {                                                  68 {
 69   G4bool result  = false;                          69   G4bool result  = false;
 70   G4String pName = aPart->GetDefinition()->Get     70   G4String pName = aPart->GetDefinition()->GetParticleName();
 71   G4double minEnergy = 0., energy = aPart->Get     71   G4double minEnergy = 0., energy = aPart->GetTotalEnergy();
 72   // Z *= 1;                                       72   // Z *= 1;
 73   if( fCutEnergy > 0. ) // min detected recoil     73   if( fCutEnergy > 0. ) // min detected recoil electron energy
 74   {                                                74   {
 75     minEnergy = 0.5*(fCutEnergy+sqrt(fCutEnerg     75     minEnergy = 0.5*(fCutEnergy+sqrt(fCutEnergy*(fCutEnergy+2.*electron_mass_c2)));
 76   }                                                76   }
 77   if( ( pName == "nu_e"   || pName == "anti_nu     77   if( ( pName == "nu_e"   || pName == "anti_nu_e"   || 
 78         pName == "nu_mu"  || pName == "anti_nu     78         pName == "nu_mu"  || pName == "anti_nu_mu"  || 
 79         pName == "nu_tau" || pName == "anti_nu     79         pName == "nu_tau" || pName == "anti_nu_tau"   ) &&
 80         energy > minEnergy                         80         energy > minEnergy                                 )
 81   {                                                81   {
 82     result = true;                                 82     result = true;
 83   }                                                83   }
 84   return result;                                   84   return result;
 85 }                                                  85 }
 86                                                    86 
 87 //////////////////////////////////////////////     87 ////////////////////////////////////////////////////
 88                                                    88 
 89 G4double G4NeutrinoElectronNcXsc::                 89 G4double G4NeutrinoElectronNcXsc::
 90 GetElementCrossSection(const G4DynamicParticle     90 GetElementCrossSection(const G4DynamicParticle* aPart, G4int ZZ,  
 91            const G4Material*)                      91            const G4Material*) 
 92 {                                                  92 {
 93   G4double result = 0., cofL, cofR, cofL2, cof     93   G4double result = 0., cofL, cofR, cofL2, cofR2, cofLR;
 94                                                    94 
 95   G4double energy = aPart->GetTotalEnergy();       95   G4double energy = aPart->GetTotalEnergy();
 96   G4String pName   = aPart->GetDefinition()->G     96   G4String pName   = aPart->GetDefinition()->GetParticleName();
 97                                                    97 
 98   if( pName == "nu_e")                             98   if( pName == "nu_e")
 99   {                                                99   {
100     cofL = 0.5 + fSin2tW;                         100     cofL = 0.5 + fSin2tW;
101     cofR = fSin2tW;                               101     cofR = fSin2tW;
102   }                                               102   }
103   else if( pName == "anti_nu_e")                  103   else if( pName == "anti_nu_e")
104   {                                               104   {
105     cofL = fSin2tW;                               105     cofL = fSin2tW;
106     cofR = 0.5 + fSin2tW;                         106     cofR = 0.5 + fSin2tW;
107   }                                               107   }
108   else if( pName == "nu_mu")                      108   else if( pName == "nu_mu")
109   {                                               109   {
110     cofL = -0.5 + fSin2tW;                        110     cofL = -0.5 + fSin2tW;
111     cofR = fSin2tW;                               111     cofR = fSin2tW;
112   }                                               112   }
113   else if( pName == "anti_nu_mu")                 113   else if( pName == "anti_nu_mu")
114   {                                               114   {
115     cofL = fSin2tW;                               115     cofL = fSin2tW;
116     cofR = -0.5 + fSin2tW;                        116     cofR = -0.5 + fSin2tW;
117   }                                               117   }
118   else if( pName == "nu_tau") // vmg: nu_tau a    118   else if( pName == "nu_tau") // vmg: nu_tau as nu_mu ???
119   {                                               119   {
120     cofL = -0.5 + fSin2tW;                        120     cofL = -0.5 + fSin2tW;
121     cofR = fSin2tW;                               121     cofR = fSin2tW;
122   }                                               122   }
123   else if( pName == "anti_nu_tau")                123   else if( pName == "anti_nu_tau")
124   {                                               124   {
125     cofL = fSin2tW;                               125     cofL = fSin2tW;
126     cofR = -0.5 + fSin2tW;                        126     cofR = -0.5 + fSin2tW;
127   }                                               127   }
128   else                                            128   else
129   {                                               129   {
130     return result;                                130     return result;
131   }                                               131   }
132   // if( energy <= electron_mass_c2 ) return r    132   // if( energy <= electron_mass_c2 ) return result;
133                                                   133 
134   cofL2 = cofL*cofL;                              134   cofL2 = cofL*cofL;
135   cofR2 = cofR*cofR;                              135   cofR2 = cofR*cofR;
136   cofLR = cofL*cofR;                              136   cofLR = cofL*cofR;
137                                                   137 
138   if( fCutEnergy > 0. )                           138   if( fCutEnergy > 0. )
139   {                                               139   {
140     G4double tM  = 2.*energy*energy/(electron_    140     G4double tM  = 2.*energy*energy/(electron_mass_c2 + 2.*energy);
141     G4double tM2 = tM*tM;                         141     G4double tM2 = tM*tM;
142     G4double tM3 = tM*tM2;                        142     G4double tM3 = tM*tM2;
143     G4double tC  = fCutEnergy;                    143     G4double tC  = fCutEnergy;
144     G4double tC2 = tC*tC;                         144     G4double tC2 = tC*tC;
145     G4double tC3 = tC*tC2;                        145     G4double tC3 = tC*tC2;
146                                                   146 
147     result  = (cofL2+cofR2)*(tM-tC);              147     result  = (cofL2+cofR2)*(tM-tC);
148     result -= (cofR2+cofLR*0.5*electron_mass_c    148     result -= (cofR2+cofLR*0.5*electron_mass_c2/energy)*(tM2-tC2)/energy;
149     result += cofR2*(tM3-tC3)/energy/energy/3.    149     result += cofR2*(tM3-tC3)/energy/energy/3.;
150   }                                               150   }
151   else                                            151   else
152   {                                               152   {
153     G4double rtM  = 2.*energy/(electron_mass_c    153     G4double rtM  = 2.*energy/(electron_mass_c2 + 2.*energy);
154     G4double rtM2 = rtM*rtM;                      154     G4double rtM2 = rtM*rtM;
155     G4double rtM3 = rtM*rtM2;                     155     G4double rtM3 = rtM*rtM2;
156                                                   156 
157     result  = (cofL2+cofR2)*rtM*energy;           157     result  = (cofL2+cofR2)*rtM*energy;
158     result -= (cofR2*energy+cofLR*0.5*electron    158     result -= (cofR2*energy+cofLR*0.5*electron_mass_c2)*rtM2;
159     result += cofR2*rtM3*energy/3.;               159     result += cofR2*rtM3*energy/3.;
160   }                                               160   }
161   // result = cofL*cofL + cofR*cofR/3.;           161   // result = cofL*cofL + cofR*cofR/3.;
162   // G4cout<<"cofL2 + cofR2/3. = "<<result<<G4    162   // G4cout<<"cofL2 + cofR2/3. = "<<result<<G4endl;
163   // result -= 0.5*cofL*cofR*electron_mass_c2/    163   // result -= 0.5*cofL*cofR*electron_mass_c2/energy;
164                                                   164 
165   G4double aa = 1.;                            << 
166   G4double bb = 1.7;                           << 
167   G4double gw = 2.141*GeV;                     << 
168   G4double dd = 5000.;                         << 
169   G4double mw = 80.385*GeV;                    << 
170   G4double mz = 91.1876*GeV;                   << 
171                                                << 
172   G4double emass = electron_mass_c2;           << 
173   G4double totS  = 2.*energy*emass + emass*ema << 
174                                                << 
175   if( energy > 50.*GeV )                       << 
176   {                                            << 
177     result *= bb;                              << 
178     result /= 1.+ aa*totS/mz/mz;               << 
179                                                << 
180     if( pName == "anti_nu_e")                  << 
181     {                                          << 
182       result *= 1. + dd*gw*gw*totS/( (totS-mw* << 
183     }                                          << 
184   }                                            << 
185                                                << 
186   result *= fCofXsc; //*energy;                   165   result *= fCofXsc; //*energy;
187                                                   166 
188   result *= ZZ;  // incoherent sum over  all e    167   result *= ZZ;  // incoherent sum over  all element electrons
189                                                   168 
190   result *= fBiasingFactor;                       169   result *= fBiasingFactor;
191                                                   170 
192   return result;                                  171   return result;
193 }                                                 172 }
194                                                   173 
195                                                   174