35 using namespace osetUtils;
40 static const double constFactor = 3.0 / 2.0 *
kPi *
kPi;
42 fNuclearDensity = density;
43 fFermiMomentum = pow (constFactor * fNuclearDensity, 1.0 / 3.0) * 197.327;
44 fFermiEnergy = sqrt (fFermiMomentum*fFermiMomentum + fNucleonMass2);
56 fPionMass = PDGLibrary::Instance()->Find(
kPdgPi0)->Mass() * 1000.0;
57 fPionMass2 = fPionMass * fPionMass;
61 fPionMass = PDGLibrary::Instance()->Find(
kPdgPiP)->Mass() * 1000.0;
62 fPionMass2 = fPionMass * fPionMass;
65 fPionKineticEnergy = pionTk;
66 fPionEnergy = fPionKineticEnergy + fPionMass;
67 fPionMomentum = sqrt (fPionEnergy * fPionEnergy - fPionMass2);
70 fInvariantMass = sqrt (fPionMass2 + 2.0 * fNucleonMass * fPionEnergy +
73 fMomentumCMS = fPionMomentum * fNucleonMass / fInvariantMass;
74 fMomentumCMS2 = fMomentumCMS * fMomentumCMS;
85 static const double constFactor = 1.0 / 12.0 /
kPi;
87 fCouplingFactor = fCouplingConstant / fPionMass2;
90 fReducedHalfWidth = constFactor * fCouplingFactor * fNucleonMass * fMomentumCMS *
91 fMomentumCMS2 / fInvariantMass * deltaReduction ();
96 const double ReDelta = fInvariantMass - fDeltaMass;
97 const double ImDelta = fReducedHalfWidth + fSelfEnergyTotal;
99 fDeltaPropagator2 = 1.0 / (ReDelta * ReDelta + ImDelta * ImDelta);
112 const double pXsecCommon = fNormFactor * fCouplingFactor * fDeltaPropagator2 *
113 fMomentumCMS2 / fPionMomentum;
118 static const double pAborptionFactor = 4.0 / 9.0;
121 const double pXsecAbsorption = pAborptionFactor * pXsecCommon *
122 fSelfEnergyAbsorption;
125 static const double sAbsorptionFactor = 4.0 *
kPi * 197.327 * 10.0 * ImB0;
128 const double sXsecAbsorption = sAbsorptionFactor / fPionMomentum * fNuclearDensity *
129 (1.0 + fPionEnergy / 2.0 / fNucleonMass) / pow (fPionMass / 197.327, 4.0);
132 fAbsorptionCrossSection = pXsecAbsorption + sXsecAbsorption;
137 const double pXsecTotalQel = pXsecCommon * fReducedHalfWidth;
140 const double ksi = (fInvariantMass - fNucleonMass - fPionMass) / fPionMass;
144 fPionMass2 * fNormFactor;
149 const double A = 0.5 + 0.5*D;
150 const double C = 1.0 -
A;
153 const double sTotalQelFactor[fNChannels] = {C - B, A + B, 1.0};
156 static const double pTotalQelFactor[fNChannels] = {2.0 / 9.0, 2.0 / 3.0,
160 for (
unsigned int i = 0; i < fNChannels; i++)
161 fQelCrossSections[i] = pTotalQelFactor[i] * pXsecTotalQel + sTotalQelFactor[i] * sXsecTotalQel;
166 static const double pCexFactor[fNChannels] = {4.0 / 27.0, 0.0, 5.0 / 27.0};
169 const double sCexFactor[fNChannels] = {2.0 * C, 0.0, 2.0 * C};
172 for (
unsigned int i = 0; i < fNChannels; i++)
173 fCexCrossSections[i] = pCexFactor[i] * pXsecTotalQel + sCexFactor[i] * sXsecTotalQel;
180 const double deltaEnergy = fPionEnergy + fNucleonMass;
182 const double energyCMS = sqrt(fMomentumCMS * fMomentumCMS + fNucleonMass2);
184 const double mu0 = (deltaEnergy * energyCMS - fFermiEnergy * fInvariantMass) /
185 fPionMomentum / fMomentumCMS;
188 if (mu0 < -1.0)
return 0.0;
189 if (mu0 > 1.0)
return 1.0;
191 return (mu0*mu0*mu0 + mu0 + 2) / 4.0;
197 const double x = fPionKineticEnergy / fPionMass;
198 const double densityFraction = fNuclearDensity / fNormalDensity;
206 absNN *= pow (densityFraction, beta);
208 if (absNNN < 0.0) absNNN = 0.0;
209 else absNNN *= pow (densityFraction, 2.0 * beta);
214 fSelfEnergyAbsorption = absNN + absNNN;
217 fSelfEnergyTotal = absNN + absNNN +
quadraticFunction (x, fCoefCQ) * pow (densityFraction, alpha);
228 const double &protonFraction)
230 setNucleus (density);
231 setKinematics (pionTk, pionPDG ==
kPdgPi0);
static const double kNucleonMass
double quadraticFunction(const double &x, const double *a)
static constexpr double A
virtual void setCrossSections()=0
calculalte cross sections for each channel