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 #include <cmath>
00027
00028 #include "G4XpipNTotal.hh"
00029 #include "G4SystemOfUnits.hh"
00030
00031 G4XpipNTotal::
00032 G4XpipNTotal()
00033 {
00034 std::pair<double,double> it;
00035 it.first=1105.46; it.second= 6.4; theLowEData.push_back(it);
00036 it.first=1133.28; it.second= 18.0; theLowEData.push_back(it);
00037 it.first=1165.12; it.second= 66.0; theLowEData.push_back(it);
00038 it.first=1198.8; it.second= 160.; theLowEData.push_back(it);
00039 it.first=1212.51; it.second= 199.; theLowEData.push_back(it);
00040 it.first=1233.18; it.second= 195.; theLowEData.push_back(it);
00041 it.first=1301.86; it.second= 73.8; theLowEData.push_back(it);
00042 it.first=1368.93; it.second= 35.0; theLowEData.push_back(it);
00043 it.first=1433.81; it.second= 22.0; theLowEData.push_back(it);
00044 it.first=1496.42; it.second= 15.0; theLowEData.push_back(it);
00045 it.first=1556.84; it.second= 15.2; theLowEData.push_back(it);
00046 it.first=1615.21; it.second= 19.4; theLowEData.push_back(it);
00047 it.first=1671.7; it.second= 25.; theLowEData.push_back(it);
00048 it.first=1726.44; it.second= 26.; theLowEData.push_back(it);
00049 it.first=1779.57; it.second= 30.; theLowEData.push_back(it);
00050 it.first=1881.49; it.second= 40.; theLowEData.push_back(it);
00051 it.first=1930.49; it.second= 40.; theLowEData.push_back(it);
00052 it.first=2070.69; it.second= 30.; theLowEData.push_back(it);
00053 it.first=2202.11; it.second= 29.; theLowEData.push_back(it);
00054 it.first=2326.19; it.second= 30.7; theLowEData.push_back(it);
00055 it.first=2405.38; it.second= 30.7; theLowEData.push_back(it);
00056 it.first=2733.67; it.second= 28.3; theLowEData.push_back(it);
00057 it.first=3207.21; it.second= 26.5; theLowEData.push_back(it);
00058 it.first=4434.76; it.second= 25.0; theLowEData.push_back(it);
00059 }
00060
00061 G4double G4XpipNTotal::
00062 CrossSection(const G4KineticTrack& trk1, const G4KineticTrack& trk2) const
00063 {
00064 G4double sqrts = (trk1.Get4Momentum() + trk2.Get4Momentum()).mag();
00065 if(sqrts > theLowEData.back().first/MeV) return thePDGData.CrossSection(trk1, trk2);
00066 G4double result = 0;
00067 size_t i(0), it(0);
00068 if(sqrts<theLowEData[0].first) return 0;
00069 for(i=0; i<theLowEData.size(); i++)
00070 {
00071 if(theLowEData[i].first/MeV>sqrts) break;
00072 it = i;
00073 }
00074 G4double x1 = std::log(theLowEData[it].first);
00075 G4double x2 = std::log(theLowEData[it+1].first);
00076 G4double y1 = std::log(theLowEData[it].second);
00077 G4double y2 = std::log(theLowEData[it+1].second);
00078 G4double x = std::log(sqrts);
00079 G4double y = y1+(x-x1)*(y2-y1)/(x2-x1);
00080 result = std::exp(y);
00081 return result*millibarn;
00082 }