949{
950 HadrEnergy = std::sqrt(hMass2 + hLabMomentum2);
951
952 G4double sHadr = 2.*HadrEnergy*protonM+protonM2+hMass2;
954 G4double Ecm = 0.5*(sHadr-hMass2+protonM2)/sqrS;
955 MomentumCM = std::sqrt(Ecm*Ecm-protonM2);
956
958 G4cout <<
"GetHadrVall.: Z= " << Z <<
" iHadr= " << iHadron
959 << " E(GeV)= " << HadrEnergy << " sqrS= " << sqrS
960 << " plab= " << hLabMomentum
961 <<
" E - m "<<HadrEnergy - hMass<<
G4endl;
962
964 G4double logE = std::log(HadrEnergy);
966 TotP = 0.0;
967
968 switch (iHadron)
969 {
970 case 0:
971 case 6:
972
973 if(hLabMomentum > 10)
974 TotP = TotN = 7.5*logE - 40.12525 + 103*std::pow(sHadr,-0.165);
975
976 else
977 {
978
979
980
981
982
983 if( hLabMomentum > 1.4 )
984 TotN = 33.3+15.2*(hLabMomentum2-1.35)/
985 (std::pow(hLabMomentum,2.37)+0.95);
986
987 else if(hLabMomentum > 0.8)
988 {
990 TotN = 33.0 + 25.5*A0*A0;
991 }
992 else
993 {
995 TotN = 33.0 + 30.*A0*A0*A0*A0;
996 }
997
998
999 {
1000 if(hLabMomentum >= 1.05)
1001 {
1002 TotP = 39.0+75.*(hLabMomentum-1.2)/
1003 (hLabMomentum2*hLabMomentum+0.15);
1004 }
1005
1006 else if(hLabMomentum >= 0.7)
1007 {
1009 TotP = 23.0 + 40.*A0*A0;
1010 }
1011 else
1012 {
1013 TotP = 23.+50.*std::pow(std::log(0.73/hLabMomentum),3.5);
1014 }
1015 }
1016 }
1017
1018
1019 HadrTot = 0.5*(TotP+TotN);
1020
1021
1022 if(hLabMomentum >= 2.) HadrSlope = 5.44 + 0.88*logS;
1023
1024 else if(hLabMomentum >= 0.5) HadrSlope = 3.73*hLabMomentum-0.37;
1025
1026 else HadrSlope = 1.5;
1027
1028
1029 if(hLabMomentum >= 1.2)
1030 HadrReIm = 0.13*(logS - 5.8579332)*std::pow(sHadr,-0.18);
1031
1032 else if(hLabMomentum >= 0.6)
1033 HadrReIm = -75.5*(std::pow(hLabMomentum,0.25)-0.95)/
1034 (std::pow(3*hLabMomentum,2.2)+1);
1035
1036 else
1037 HadrReIm = 15.5*hLabMomentum/(27*hLabMomentum2*hLabMomentum+2);
1038
1039 DDSect2 = 2.2;
1040 DDSect3 = 0.6;
1041
1042 if( iHadrCode == 3122)
1043 {
1044 HadrTot *= 0.88;
1045 HadrSlope *=0.85;
1046 }
1047
1048 else if( iHadrCode == 3222)
1049 {
1050 HadrTot *=0.81;
1051 HadrSlope *=0.85;
1052 }
1053
1054 else if(iHadrCode == 3112 || iHadrCode == 3212 )
1055 {
1056 HadrTot *=0.88;
1057 HadrSlope *=0.85;
1058 }
1059
1060 else if( iHadrCode == 3312 || iHadrCode == 3322 )
1061 {
1062 HadrTot *=0.77;
1063 HadrSlope *=0.75;
1064 }
1065
1066 else if( iHadrCode == 3334)
1067 {
1068 HadrTot *=0.78;
1069 HadrSlope *=0.7;
1070 }
1071
1072 break;
1073
1074 case 1:
1075 case 7:
1076
1077 HadrTot = 5.2+5.2*logE + 123.2/sqrS;
1078 HadrSlope = 8.32+0.57*logS;
1079
1080 if( HadrEnergy < 1000 )
1081 HadrReIm = 0.06*(sqrS-2.236)*(sqrS-14.14)*std::pow(sHadr,-0.8);
1082 else
1083 HadrReIm = 0.6*(logS - 5.8579332)*std::pow(sHadr,-0.25);
1084
1085 DDSect2 = 11;
1086 DDSect3 = 3;
1087
1088 if( iHadrCode == -3122)
1089 {
1090 HadrTot *= 0.88;
1091 HadrSlope *=0.85;
1092 }
1093
1094 else if( iHadrCode == -3222)
1095 {
1096 HadrTot *=0.81;
1097 HadrSlope *=0.85;
1098 }
1099
1100 else if(iHadrCode == -3112 || iHadrCode == -3212 )
1101 {
1102 HadrTot *=0.88;
1103 HadrSlope *=0.85;
1104 }
1105
1106 else if( iHadrCode == -3312 || iHadrCode == -3322 )
1107 {
1108 HadrTot *=0.77;
1109 HadrSlope *=0.75;
1110 }
1111
1112 else if( iHadrCode == -3334)
1113 {
1114 HadrTot *=0.78;
1115 HadrSlope *=0.7;
1116 }
1117
1118 break;
1119
1120 case 2:
1121 case 3:
1122
1123 if(hLabMomentum >= 3.5)
1124 TotP = 10.6+2.*logE + 25.*std::pow(HadrEnergy,-0.43);
1125
1126 else if(hLabMomentum >= 1.15)
1127 {
1128 G4double x = (hLabMomentum - 2.55)/0.55;
1129 G4double y = (hLabMomentum - 1.47)/0.225;
1130 TotP = 3.2*std::exp(-x*x) + 12.*std::exp(-y*y) + 27.5;
1131 }
1132
1133 else if(hLabMomentum >= 0.4)
1134 {
1135 TotP = 88*(logE+0.2877)*(logE+0.2877)+14.0;
1136 }
1137
1138 else
1139 {
1140 G4double x = (hLabMomentum - 0.29)/0.085;
1141 TotP = 20. + 180.*std::exp(-x*x);
1142 }
1143
1144
1145 if(hLabMomentum >= 3.0 )
1146 TotN = 10.6 + 2.*logE + 30.*std::pow(HadrEnergy,-0.43);
1147
1148 else if(hLabMomentum >= 1.3)
1149 {
1150 G4double x = (hLabMomentum - 2.1)/0.4;
1151 G4double y = (hLabMomentum - 1.4)/0.12;
1152 TotN = 36.1+0.079 - 4.313*logE + 3.*std::exp(-x*x) +
1153 1.5*std::exp(-y*y);
1154 }
1155 else if(hLabMomentum >= 0.65)
1156 {
1157 G4double x = (hLabMomentum - 0.72)/0.06;
1158 G4double y = (hLabMomentum - 1.015)/0.075;
1159 TotN = 36.1 + 10.*std::exp(-x*x) + 24*std::exp(-y*y);
1160 }
1161 else if(hLabMomentum >= 0.37)
1162 {
1163 G4double x = std::log(hLabMomentum/0.48);
1164 TotN = 26. + 110.*x*x;
1165 }
1166 else
1167 {
1168 G4double x = (hLabMomentum - 0.29)/0.07;
1169 TotN = 28.0 + 40.*std::exp(-x*x);
1170 }
1171 HadrTot = (TotP+TotN)/2;
1172
1173 HadrSlope = 7.28+0.245*logS;
1174 HadrReIm = 0.2*(logS - 4.6051702)*std::pow(sHadr,-0.15);
1175
1176 DDSect2 = 0.7;
1177 DDSect3 = 0.27;
1178
1179 break;
1180
1181 case 4:
1182
1183 HadrTot = 10.6+1.8*logE + 9.0*std::pow(HadrEnergy,-0.55);
1184 if(HadrEnergy>100) HadrSlope = 15.0;
1185 else HadrSlope = 1.0+1.76*logS - 2.84/sqrS;
1186
1187 HadrReIm = 0.4*(sHadr-20)*(sHadr-150)*std::pow(sHadr+50,-2.1);
1188 DDSect2 = 0.7;
1189 DDSect3 = 0.21;
1190 break;
1191
1192 case 5:
1193
1194 HadrTot = 10+1.8*logE + 25./sqrS;
1195 HadrSlope = 6.98+0.127*logS;
1196 HadrReIm = 0.4*(sHadr-20)*(sHadr-20)*std::pow(sHadr+50,-2.1);
1197 DDSect2 = 0.7;
1198 DDSect3 = 0.27;
1199 break;
1200 }
1201
1203 G4cout <<
"HadrTot= " << HadrTot <<
" HadrSlope= " << HadrSlope
1204 << " HadrReIm= " << HadrReIm << " DDSect2= " << DDSect2
1205 <<
" DDSect3= " << DDSect3 <<
G4endl;
1206
1207 if(Z != 1) return;
1208
1209
1210
1211 Coeff0 = Coeff1 = Coeff2 = 0.0;
1212 Slope0 = Slope1 = 1.0;
1213 Slope2 = 5.0;
1214
1215
1216 static const G4double EnP0[6]={1.5,3.0,5.0,9.0,14.0,19.0};
1217 static const G4double C0P0[6]={0.15,0.02,0.06,0.08,0.0003,0.0002};
1218 static const G4double C1P0[6]={0.05,0.02,0.03,0.025,0.0,0.0};
1219 static const G4double B0P0[6]={1.5,2.5,3.0,4.5,1.4,1.25};
1220 static const G4double B1P0[6]={5.0,1.0,3.5,4.0,4.8,4.8};
1221
1222
1223 static const G4double EnN[5]={1.5,5.0,10.0,14.0,20.0};
1224 static const G4double C0N[5]={0.0,0.0,0.02,0.02,0.01};
1225 static const G4double C1N[5]={0.06,0.008,0.0015,0.001,0.0003};
1226 static const G4double B0N[5]={1.5,2.5,3.8,3.8,3.5};
1227 static const G4double B1N[5]={1.5,2.2,3.6,4.5,4.8};
1228
1229
1230 static const G4double EnP[2]={1.5,4.0};
1231 static const G4double C0P[2]={0.001,0.0005};
1232 static const G4double C1P[2]={0.003,0.001};
1233 static const G4double B0P[2]={2.5,4.5};
1234 static const G4double B1P[2]={1.0,4.0};
1235
1236
1237 static const G4double EnPP[4]={1.0,2.0,3.0,4.0};
1238 static const G4double C0PP[4]={0.0,0.0,0.0,0.0};
1239 static const G4double C1PP[4]={0.15,0.08,0.02,0.01};
1240 static const G4double B0PP[4]={1.5,2.8,3.8,3.8};
1241 static const G4double B1PP[4]={0.8,1.6,3.6,4.6};
1242
1243
1244 static const G4double EnPPN[4]={1.0,2.0,3.0,4.0};
1245 static const G4double C0PPN[4]={0.0,0.0,0.0,0.0};
1246 static const G4double C1PPN[4]={0.0,0.0,0.0,0.0};
1247 static const G4double B0PPN[4]={1.5,2.8,3.8,3.8};
1248 static const G4double B1PPN[4]={0.8,1.6,3.6,4.6};
1249
1250
1251 static const G4double EnK[4]={1.4,2.33,3.0,5.0};
1252 static const G4double C0K[4]={0.0,0.0,0.0,0.0};
1253 static const G4double C1K[4]={0.01,0.007,0.005,0.003};
1254 static const G4double B0K[4]={1.5,2.0,3.8,3.8};
1255 static const G4double B1K[4]={1.6,1.6,1.6,1.6};
1256
1257
1258 static const G4double EnKM[2]={1.4,4.0};
1259 static const G4double C0KM[2]={0.006,0.002};
1260 static const G4double C1KM[2]={0.00,0.00};
1261 static const G4double B0KM[2]={2.5,3.5};
1262 static const G4double B1KM[2]={1.6,1.6};
1263
1264 switch(iHadron)
1265 {
1266 case 0 :
1267
1268 if(hLabMomentum <BoundaryP[0])
1270
1271 Coeff2 = 0.8/hLabMomentum/hLabMomentum;
1272 break;
1273
1274 case 6 :
1275
1276 if(hLabMomentum < BoundaryP[1])
1278
1279 Coeff2 = 0.8/hLabMomentum/hLabMomentum;
1280 break;
1281
1282 case 1 :
1283 case 7 :
1284 if(hLabMomentum < BoundaryP[2])
1286 break;
1287
1288 case 2 :
1289
1290 if(hLabMomentum < BoundaryP[3])
1292
1293 Coeff2 = 0.02/hLabMomentum;
1294 break;
1295
1296 case 3 :
1297
1298 if(hLabMomentum < BoundaryP[4])
1300
1301 Coeff2 = 0.02/hLabMomentum;
1302 break;
1303
1304 case 4 :
1305
1306 if(hLabMomentum < BoundaryP[5])
1308
1309 if(hLabMomentum < 1) Coeff2 = 0.34;
1310 else Coeff2 = 0.34/hLabMomentum2/hLabMomentum;
1311 break;
1312
1313 case 5 :
1314 if(hLabMomentum < BoundaryP[6])
1316
1317 if(hLabMomentum < 1) Coeff2 = 0.01;
1318 else Coeff2 = 0.01/hLabMomentum2/hLabMomentum;
1319 break;
1320 }
1321
1323 G4cout<<
" HadrVal : Plasb "<<hLabMomentum
1324 <<
" iHadron "<<iHadron<<
" HadrTot "<<HadrTot<<
G4endl;
1325}
G4DLLIMPORT std::ostream G4cout
void InterpolateHN(G4int n, const G4double EnP[], const G4double C0P[], const G4double C1P[], const G4double B0P[], const G4double B1P[])