24 #include <Math/SMatrix.h>
25 #include <Math/SVector.h>
26 #include <Math/LorentzVector.h>
40 using namespace genie::constants;
43 typedef ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >
LorentzVector;
44 typedef ROOT::Math::SVector< cdouble , 4>
CVector;
47 namespace alvarezruso {
49 AlvarezRusoCOHPiPDXSec::AlvarezRusoCOHPiPDXSec(
unsigned int Z_,
unsigned int A_,
const current_t current_,
63 fLastE_pi (-9999999.),
84 double AlvarezRusoCOHPiPDXSec::DXSec(
const double E_nu_,
const double E_l_,
const double theta_l_,
const double phi_l_,
const double theta_pi_,
const double phi_pi_)
91 fPhi = phi_pi_ - phi_l_;
106 LOG(
"AlvarezRusoCOHPiPDXSec",
pERROR)<<
"Pion energy smaller than mass: "<<
fP_pi.E();
155 cdouble term1,term2,term3,term4;
157 term1 =
fQ.X() * (
H(0,1) - i*
H(0,2) +
H(1,0) -
H(1,3) + i*
H(2,0) - i*
H(2,3) -
H(3,1) + i*
H(3,2) );
158 term2 =
fQ.Z() * ( -
H(0,0) +
H(0,3) +
H(1,1) - i*
H(1,2) + i*
H(2,1) +
H(2,2) +
H(3,0) -
H(3,3) );
159 term3 = 2.0 *
fP_nu.E() * (
H(0,0) -
H(0,3) -
H(3,0) +
H(3,3) );
160 term4 = -
fQ.E() * (
H(0,0) -
H(0,3) +
H(1,1) - i*
H(1,2) + i*
H(2,1) +
H(2,2) -
H(3,0) +
H(3,3) );
162 term1 =
fQ.X() * (
H(0,1) + i*
H(0,2) +
H(1,0) -
H(1,3) - i*
H(2,0) + i*
H(2,3) -
H(3,1) - i*
H(3,2) );
163 term2 =
fQ.Z() * ( -
H(0,0) +
H(0,3) +
H(1,1) + i*
H(1,2) - i*
H(2,1) +
H(2,2) +
H(3,0) -
H(3,3) );
164 term3 = 2.0 *
fP_nu.E() * (
H(0,0) -
H(0,3) -
H(3,0) +
H(3,3) );
165 term4 = -
fQ.E() * (
H(0,0) -
H(0,3) +
H(1,1) + i*
H(1,2) - i*
H(2,1) +
H(2,2) -
H(3,0) +
H(3,3) );
168 cdouble complex_amp2 = 8.0 *
fP_nu.E() * (term1 + term2 + term3 + term4);
170 double amp2 = real(complex_amp2);
189 double Lam4 = Lam*Lam*Lam*Lam;
191 double mass2 = mass*mass;
195 double factor = decaying_momentum.mag2() - mass2;
198 double ofshel = Lam4 / ( Lam4 + factor );
213 double p_l_x = mod_p_l * TMath::Sin(
fTheta_l);
214 double p_l_z = mod_p_l * TMath::Cos(
fTheta_l);
221 double E_pi =
fQ.E();
222 double mod_fP_pi = TMath::Sqrt( E_pi*E_pi -
fM_pi*
fM_pi );
223 double p_pi_x = mod_fP_pi * TMath::Sin(
fTheta_pi) * TMath::Cos(
fPhi);
224 double p_pi_y = mod_fP_pi * TMath::Sin(
fTheta_pi) * TMath::Sin(
fPhi);
225 double p_pi_z = mod_fP_pi * TMath::Cos(
fTheta_pi);
253 LOG(
"AlvarezRusoCOHPiPDXSec",
pERROR) <<
"[ERROR] Unknown lepton flavour";
259 LOG(
"AlvarezRusoCOHPiPDXSec",
pERROR) <<
"[ERROR] Unknown current";
284 LOG(
"AlvarezRusoCOHPiPDXSec",
pERROR) <<
"[ERROR] Unknown current type";
316 for(
unsigned int i = 0; i != n_points; ++i)
318 for(
unsigned int j = 0; j != n_points; ++j)
326 cosine_rz = x2 / radius;
332 if( radius < delta_r ) delta_r = radius;
340 fUwaveDr->
set(i, j, (uwave_plus - uwave_minus) / (2.0 * delta_r) );
344 if ( (cosine_rz - delta_c) <= -1.0 ) delta_c = cosine_rz + 1.0 - 1E-12;
345 else if( (cosine_rz + delta_c) >= 1.0 ) delta_c = 1.0 - cosine_rz - 1E-12;
351 fUwaveDtheta->
set( i, j, (uwave_plus - uwave_minus) / (2.0 * delta_c) );
361 double W = TMath::Abs( delta_momentum.mag() );
369 cdouble result = 1.0 / (denom1 * denom2);
380 if(free_width == 0.0)
387 double p_f = TMath::Power( ((3.0/2.0)*
constants::kPi2*density), (1.0/3.0) );
393 double r = p_cm / p_f;
397 f = 1.0 + ( (-2.0)/(5.0*r2) + (9.0)/(35.0*r2*r2) - (2.0)/(21.0*r2*r2*r2) );
401 f = (34.0/35.0)*r - (22.0/105.0)*r*r*r;
408 double wd = TMath::Abs( delta_momentum.M());
412 double kd = delta_momentum.R();
415 f = (kd*p_cm + delta_momentum.E()*E_n - E_f*wd) / (2.0*kd*p_cm);
418 else if(f > 1.0) f = 1.0;
422 LOG(
"AlvarezRusoCOHPiPDXSec",
pERROR) <<
"[ERROR] Choice of form-factor approximation not properly made";
426 width = free_width*f;
434 double pre_factor_1 = 1.0 / (6.0 *
kPi );
438 double qcm3 = qcm*qcm*qcm;
443 double p = sqrt(delta_momentum.mag2());
445 if (not(p>=
fM_pi+mn)) {
446 LOG(
"AlvarezRusoCOHPiPDXSec",
pWARN)<<
"DeltaWidthFree >> Delta invariant mass less than pion mass plus nucleon mass: "<<p;
449 double pre_factor_3 = mn/p;
451 double delta_width = pre_factor_1 * pre_factor_2 * pre_factor_3 * qcm3;
465 double s = delta_momentum.mag2();
468 double p_pi_cm = ((s-m_pi2-m_n2)*(s-m_pi2-m_n2)) - 4.0*m_pi2*m_n2;
470 assert(p_pi_cm > 0.);
472 p_pi_cm = TMath::Sqrt(p_pi_cm / s) / 2.0;
482 double lambda4 = lambda*lambda*lambda*lambda;
484 double mass2 = mass*mass;
488 double factor = decaying_momentum.mag2() - mass2;
491 double result = lambda4 / (lambda4 + factor);
508 double E =
fP_pi.E();
535 double gamma = 2.0*beta;
539 double result = Cq * TMath::Power(ratio, alpha);
540 result += Ca2 * TMath::Power(ratio, beta);
541 result += Ca3 * TMath::Power(ratio, gamma);
549 double x = (E /
fM_pi) - 1.0;
550 return (a*x*x + b*x + c);
565 double mn3 = mn*mn*mn;
567 double mdel2 = mdel*mdel;
568 double mdel3 = mdel*mdel*mdel;
572 double q03 = q0*q0*q0;
573 double q04 = q0*q0*q0*q0;
574 double q05 = q0*q0*q0*q0*q0;
577 double q13 = q1*q1*q1;
578 double q14 = q1*q1*q1*q1;
581 double q33 = q3*q3*q3;
582 double q34 = q3*q3*q3*q3;
584 double ppim = ppi.P();
585 double ppim2 = ppim*ppim;
586 double ppi1 = ppi.X();
587 double ppi12 = ppi1*ppi1;
588 double ppi2 = ppi.Y();
589 double ppi22 = ppi2*ppi2;
590 double ppi3 = ppi.Z();
591 double ppi32 = ppi3*ppi3;
592 double ppitr = TMath::Sqrt( ppi12 + ppi22 );
593 double ppitr2 = ppitr*ppitr;
622 double t = q.mag2() * hbarsq;
626 double C3v = 2.05 / ( (1.0 - (t/Mv2_Delta))*(1.0 - (t/Mv2_Delta)) );
639 ( ( 1.0 - (t / Ma2_Delta))*( 1.0 - (t / Ma2_Delta)) );
640 double C4a = -C5a / 4.0;
641 double C6a = (C5a * mn*mn) / ((mpi*mpi) - (t / hbarsq));
658 double Q_s2 = Q_s* Q_s;
659 double Q_s3 = Q_s2*Q_s;
660 double Q_s4 = Q_s3*Q_s;
661 double Q_s5 = Q_s4*Q_s;
662 double Q_s6 = Q_s5*Q_s;
664 double tau = Q_s / (4.0 * MNucleon*MNucleon);
669 double GEp = 1.0 / (1.0 + 3.253*Q_s + 1.422*Q_s2 + 0.08582*Q_s3 + 0.3318*Q_s4 - 0.09371*Q_s5 + 0.01076*Q_s6);
670 double GMp = mup / (1.0 + 3.104*Q_s + 1.428*Q_s2 + 0.1112*Q_s3 - 0.006981*Q_s4 + 0.0003705*Q_s5 - 7.063e-6*Q_s6);
671 double GEn = ((-mun * 0.942 * tau) / (1.0 + 4.61*tau)) / ( (1.0 + Q_s/Mv2_Nucleon) * (1.0 + Q_s/Mv2_Nucleon) );
675 double GMn = mun / (1.+3.043*Q_s + 0.8548*Q_s2 + 0.6806*Q_s3 - 0.1287*Q_s4 + 0.008912*Q_s5);
676 F1 = ((GEp - GEn) + tau*(GMp - GMn)) / (1.0 + tau);
677 F2 = ((GMp - GMn) - (GEp - GEn)) / (1.0 + tau);
679 FA = 1.0 + ( Q_s / Ma2_Nucleon );
683 FP = (2.0 * MNucleon*MNucleon);
684 FP /= ( MPion*MPion + Q_s );
697 double qper2 = q.P2();
698 double tot = ppi.P2();
699 double dot = q.Vect().Dot(ppi.Vect());
700 if (tot > 0.) qper2 -=dot*dot/tot;
701 qper2 = TMath::Max(qper2,0.);
703 double qper = TMath::Sqrt(qper2);
704 double qpar = dot / ppim;
708 std::vector<cdouble > empty_row(n,
cdouble(0.0,0.0));
709 std::vector< std::vector<cdouble > > ordez (4, empty_row);
710 std::vector< std::vector<cdouble > > ordez1(4, empty_row);
711 std::vector< std::vector<cdouble > > ordez2(4, empty_row);
712 std::vector< std::vector<cdouble > > ordez3(4, empty_row);
713 std::vector< std::vector<cdouble > > ordez4(4, empty_row);
715 std::vector< std::vector<cdouble > > ordeb2(4, empty_row);
718 std::vector<cdouble > empty_row_backwards(4,
cdouble(0.0,0.0));
719 std::vector< std::vector<cdouble > > ordeb(n, empty_row_backwards);
723 std::vector<cdouble > jnuclear(4);
726 for(
unsigned int i = 0; i != n; ++i)
729 double bej0 = TMath::BesselJ0( qper*be );
730 double bej1 = TMath::BesselJ1( qper*be );
732 for(
unsigned int l = 0; l != n; ++l)
735 double r = TMath::Sqrt(za*za + be*be);
740 double dens_p_cent = dens_cent *
fZ /
fA ;
741 double dens_n_cent = dens_cent * (
fA-
fZ)/
fA;
743 cdouble exp_i_qpar_za = exp(I*qpar*za);
745 const cdouble & uwavefunc = (*fUwave)[i][l];
746 const cdouble & uwavedr = (*fUwaveDr)[i][l];
747 const cdouble & uwavedtheta = (*fUwaveDtheta)[i][l];
749 cdouble A = I * ( uwavedr - (za/r2) * uwavedtheta ) * (be/r);
750 cdouble B = I * ( uwavedr*za + (be*be/r2)*uwavedtheta ) / r;
753 if( (qper == 0.0) && ppitr != 0.0)
755 ppi1d = ( q1 * ((ppi12*ppi32)+(ppi22*ppim2)) - q3*ppi1*ppi3*ppitr2 ) /
756 (ppim2*ppitr2)*A*(I*be/2.0) + ppi1/ppim *B*bej0;
757 ppi2d = -ppi2*(ppi1*q1+ppi3*q3)/ppim2*A*(I*be/2.)+ppi2/ppim*B*bej0;
758 ppi3d = -(q1*ppi1*ppi3-q3*ppitr2)/ppim2*A*(I*be/2.)+ppi3/ppim*B*bej0 ;
760 else if( (qper != 0.0) && (ppitr == 0.0) )
762 ppi1d = (q1/qper)*A*(I*bej1);
766 else if( (qper == 0.0) && (ppitr == 0.0) )
768 ppi1d = q1*A*(I*be/2.0);
774 ppi1d=(q1*((ppi12*ppi32)+(ppi22*ppim2))-q3*ppi1*ppi3*ppitr2)/(ppim2*ppitr2)/
775 qper*A*(I*bej1)+ppi1/ppim*B*bej0;
776 ppi2d = -ppi2 * (ppi1*q1 + ppi3*q3) / ppim2/qper*A*(I*bej1)+ppi2/ppim*B*bej0;
777 ppi3d=-(q1*ppi1*ppi3-q3*ppitr2)/ppim2/qper*A*(I*bej1)+ppi3/ppim*B*bej0;
786 j1[0] = -4.*(mdel + mn + q0)*(
787 (C5a*mdel2*mn2*q0 + C6a*mdel2*q03 + C5a*mn2*(-mn - q0)*q0*(mn + q0) -
788 C4a*mdel2*q0*q12 - C4a*mdel2*q0*q32 - C6a*q02*(mn + q0)*(q0*(mn + q0) - q12 - q32))*bej0*uwavefunc +
789 ppi1d*(-(C5a*mn2*(-mn - q0)*q1) - C6a*mdel2*q0*q1 + C4a*mdel2*(mn + q0)*q1 +
790 C6a*q0*q1*(q0*(mn + q0) - q12 - q32)) +
791 ppi3d*(-(C5a*mn2*(-mn - q0)*q3) -
792 C6a*mdel2*q0*q3 + C4a*mdel2*(mn + q0)*q3 + C6a*q0*q3*(q0*(mn + q0) - q12 - q32))
795 j1[1] = (-4.*C6a*mdel3*q02*q1 - 4.*C6a*mdel2*mn*q02*q1 + 4.*C6a*mdel*mn2*q02*q1 + 4.*C6a*mn3*q02*q1 -
796 4.*C6a*mdel2*q03*q1 + 8.*C6a*mdel*mn*q03*q1 + 12.*C6a*mn2*q03*q1 + 4.*C6a*mdel*q04*q1 +
797 12.*C6a*mn*q04*q1 + 4.*C6a*q05*q1 + 4.*C4a*mdel2*q02*(mdel + mn + q0)*q1 +
798 4.*C5a*mn2*q0*(mn + q0)*(mdel + mn + q0)*q1 - 4.*C6a*mdel*mn*q0*q13 - 4.*C6a*mn2*q0*q13 -
799 4.*C6a*mdel*q02*q13 - 8.*C6a*mn*q02*q13 - 4.*C6a*q03*q13 -
800 4.*C6a*q0*(mn + q0)*(mdel + mn + q0)*q1*q32)*bej0*uwavefunc +
801 ppi1d*(-4.*C4a*mdel2*q0*(mn + q0)*(mdel + mn + q0) + 4.*C6a*mdel3*q12 + 4.*C6a*mdel2*mn*q12 +
802 4.*C6a*mdel2*q0*q12 - 4.*C6a*mdel*mn*q0*q12 - 4.*C6a*mn2*q0*q12 - 4.*C6a*mdel*q02*q12 -
803 8.*C6a*mn*q02*q12 - 4.*C6a*q03*q12 + 4.*C6a*mdel*q14 + 4.*C6a*mn*q14 + 4.*C6a*q0*q14 -
804 4.*C5a*mn2*(mdel + mn + q0)*(mdel2 + q12) + 4.*C4a*mdel2*(mdel + mn + q0)*q32 +
805 4.*C6a*(mdel + mn + q0)*q12*q32) +
806 ppi2d*(twoI*C4v*mdel2*(q0*(mn + q0) - q12)*q3 +
807 twoI*C3v*mdel*mn*(2*mdel2 + 2.*mdel*mn - q0*(mn + q0) + q12)*q3 -
808 twoI*mdel*(C4v*mdel - C3v*mn)*q33) +
809 ppi3d*(-4.*C4a*mdel2*(mdel + mn + q0)*q1*q3 -
810 4.*C5a*mn2*(mdel + mn + q0)*q1*q3 + 4.*C6a*(mdel + mn + q0)*q1*(mdel2 - q0*(mn + q0) + q12)*q3 +
811 4.*C6a*(mdel + mn + q0)*q1*q33) +
812 ppi2d*twoI*C5v*mdel2*mn*q0*q3;
814 j1[2] = -2.*I*(-2.*I*C5a*mdel*mn2*ppi2d*(mdel + mn + q0) -
815 twoI*C4a*mdel*ppi2d*(mdel + mn + q0)*(q0*(mn + q0) - q12 - q32) -
816 (ppi3d*q1 - ppi1d*q3)*(C4v*mdel*(q0*(mn + q0) - q12 - q32) +
817 C3v*mn*(2*mdel2 + 2*mdel*mn - q0*(mn + q0) + q12 + q32)))*mdel +
818 twoI*C5v*mdel*mn*q0*(ppi3d*q1 - ppi1d*q3)*mdel;
820 j1[3] = (4.*C4a*mdel2*q02*(mdel + mn + q0)*q3 - 4.*C6a*mdel2*q02*(mdel + mn + q0)*q3 +
821 4.*C5a*mn2*q0*(mn + q0)*(mdel + mn + q0)*q3 + 4.*C6a*q0*(mn + q0)*(mdel + mn + q0)*
822 (q0*(mn + q0) - q12)*q3 - 4.*C6a*q0*(mn + q0)*(mdel + mn + q0)*q33)*bej0*uwavefunc +
823 ppi2d*(-twoI*mdel*q1*(C4v*mdel*(q0*(mn + q0) - q12) +
824 C3v*mn*(2.*mdel2 + 2*mdel*mn - q0*(mn + q0) + q12)) + twoI*mdel*
825 (C4v*mdel - C3v*mn)*q1*q32) +
826 ppi1d*(-4.*C4a*mdel2*(mdel + mn + q0)*q1*q3 +
827 4.*C6a*mdel2*(mdel + mn + q0)*q1*q3 - 4.*C5a*mn2*(mdel + mn + q0)*q1*q3 -
828 4.*C6a*(mdel + mn + q0)*q1*(q0*(mn + q0) - q12)*q3 + 4.*C6a*(mdel + mn + q0)*q1*q33) +
829 ppi3d*(-4.*C4a*mdel2*mn*q0*(mdel + mn + q0) - 4.*C4a*mdel2*(mdel + mn + q0)*(q0 - q1)*(q0 + q1) +
830 4.*C6a*(mdel + mn + q0)*(mdel2 - q0*(mn + q0) + q12)*q32 + 4.*C6a*(mdel + mn + q0)*q34 -
831 4.*C5a*mn2*(mdel + mn + q0)*(mdel2 + q32)) +
832 -twoI*C5v*mdel2*mn*ppi2d*q0*q1;
836 j2[0]=-4.*(mdel + mn - q0)*(
837 (C5a*mdel2*mn2*q0 - C5a*mn2*(mn - q0)*(mn - q0)*q0 + C6a*mdel2*q03 -
838 C4a*mdel2*q0*q12 - C4a*mdel2*q0*q32 - C6a*(mn - q0)*q02*((mn - q0)*q0 + q12 + q32))*bej0*uwavefunc +
839 ppi1d*(-(C4a*mdel2*mn*q1) - C5a*mn2*(mn - q0)*q1 + C4a*mdel2*q0*q1 -
840 C6a*mdel2*q0*q1 - C6a*q0*q1*((mn - q0)*q0 + q12 + q32)) +
841 ppi3d*(-(C4a*mdel2*mn*q3) - C5a*mn2*(mn - q0)*q3 + C4a*mdel2*q0*q3 -
842 C6a*mdel2*q0*q3 - C6a*q0*q3*((mn - q0)*q0 + q12 + q32)));
844 j2[1]=(-4.*C5a*mn2*(mn - q0)*(mdel + mn - q0)*q0*q1 - 4.*C6a*mdel3*q02*q1 -
845 4.*C6a*mdel2*mn*q02*q1 + 4.*C6a*mdel*mn2*q02*q1 + 4.*C6a*mn3*q02*q1 +
846 4.*C4a*mdel2*(mdel + mn - q0)*q02*q1 + 4.*C6a*mdel2*q03*q1 -
847 8.*C6a*mdel*mn*q03*q1 - 12.*C6a*mn2*q03*q1 + 4.*C6a*mdel*q04*q1 +
848 12.*C6a*mn*q04*q1 - 4.*C6a*q05*q1 + 4.*C6a*mdel*mn*q0*q13 +
849 4.*C6a*mn2*q0*q13 - 4.*C6a*mdel*q02*q13 - 8.*C6a*mn*q02*q13 +
850 4.*C6a*q03*q13 + 4.*C6a*(mn - q0)*(mdel + mn - q0)*q0*q1*q32)*bej0*uwavefunc +
851 ppi1d*(-4.*C5a*mdel2*mn2*(mdel + mn - q0) + 4.*C4a*mdel2*mn*(mdel + mn - q0)*q0 -
852 4.*C4a*mdel2*(mdel + mn - q0)*q02 + 4.*C6a*mdel3*q12 +
853 4.*C6a*mdel2*mn*q12 - 4.*C5a*mn2*(mdel + mn - q0)*q12 -
854 4.*C6a*mdel2*q0*q12 + 4.*C6a*mdel*mn*q0*q12 + 4.*C6a*mn2*q0*q12 -
855 4.*C6a*mdel*q02*q12 - 8.*C6a*mn*q02*q12 + 4.*C6a*q03*q12 +
856 4.*C6a*mdel*q14 + 4.*C6a*mn*q14 - 4.*C6a*q0*q14 +
857 4.*C4a*mdel2*(mdel + mn - q0)*q32 + 4.*C6a*(mdel + mn - q0)*q12*q32) +
858 ppi2d*(twoI*mdel*(mdel*q0*(-((C4v + C5v)*mn) + C4v*q0) +
859 C3v*mn*(2*mdel*(mdel + mn) + mn*q0 - q02))*q3 +
860 twoI*mdel*(-(C4v*mdel) + C3v*mn)*q12*q3 - twoI*mdel*(C4v*mdel - C3v*mn)*q33) +
861 ppi3d*(-4.*C4a*mdel2*(mdel + mn - q0)*q1*q3 -
862 4.*C5a*mn2*(mdel + mn - q0)*q1*q3 + 4.*C6a*(mdel + mn - q0)*(mdel2 + (mn - q0)*q0)*q1*q3 +
863 4.*C6a*(mdel + mn - q0)*q13*q3 + 4.*C6a*(mdel + mn - q0)*q1*q33);
865 j2[2]=-(twoI*ppi2d*(-twoI*C5a*mdel*mn2*(mdel + mn - q0) +
866 twoI*C4a*mdel*(mdel + mn - q0)*((mn - q0)*q0 + q12 + q32)) -
867 ppi3d*twoI*q1*(C3v*mn*(2*mdel*(mdel + mn) + mn*q0 - q02 + q12 + q32) -
868 mdel*(C5v*mn*q0 + C4v*((mn - q0)*q0 + q12 + q32))) +
869 ppi1d*twoI*q3*(C3v*mn*(2*mdel*(mdel + mn) + mn*q0 - q02 + q12 + q32) -
870 mdel*(C5v*mn*q0 + C4v*((mn - q0)*q0 + q12 + q32)))
873 j2[3] = (-4.*C5a*mn2*(mn - q0)*(mdel + mn - q0)*q0*q3 +
874 4.*C4a*mdel2*(mdel + mn - q0)*q02*q3 - 4.*C6a*mdel2*(mdel + mn - q0)*q02*q3 +
875 4.*C6a*(mn - q0)*(mdel + mn - q0)*q0*((mn - q0)*q0 + q12)*q3 +
876 4.*C6a*(mn - q0)*(mdel + mn - q0)*q0*q33)*bej0*uwavefunc +
877 ppi2d*(-twoI*mdel*q1*(C3v*mn*(2*mdel*(mdel + mn) + mn*q0 - q02 + q12) -
878 mdel*(q0*((C4v + C5v)*mn - C4v*q0) + C4v*q12)) +
879 twoI*mdel*(C4v*mdel - C3v*mn)*q1*q32) +
880 ppi1d*(-4.*C4a*mdel2*(mdel + mn - q0)*q1*q3 + 4.*C6a*mdel2*(mdel + mn - q0)*q1*q3 -
881 4.*C5a*mn2*(mdel + mn - q0)*q1*q3 +
882 4.*C6a*(mdel + mn - q0)*q1*((mn - q0)*q0 + q12)*q3 +
883 4.*C6a*(mdel + mn - q0)*q1*q33) +
884 ppi3d*(-4.*C5a*mdel2*mn2*(mdel + mn - q0) +
885 4.*C4a*mdel2*(mdel + mn - q0)*((mn - q0)*q0 + q12) -
886 4.*C5a*mn2*(mdel + mn - q0)*q32 +
887 4.*C6a*(mdel + mn - q0)*(mdel2 + (mn - q0)*q0 + q12)*q32 +
888 4.*C6a*(mdel + mn - q0)*q34);
893 j3[0]=-2.0*(FA - FP*q0)*(q02*bej0*uwavefunc - ppi1d*q1 - ppi3d*q3);
895 j3[1] = 2.0*(-(FA*q0*q1) + FP*q02*q1) * bej0 * uwavefunc +
896 2.0*ppi1d*(2.0*FA*mn + FA*q0 - FP*q12) -
897 twoI*(F1 + F2)*ppi2d*q3 - 2.*FP*ppi3d*q1*q3;
899 j3[2]=twoI*(-I*FA*ppi2d*(2.0*mn + q0) - (F1 + F2)*(ppi3d*q1 - ppi1d*q3));
901 j3[3]=twoI*(F1 + F2)*ppi2d*q1 - 2.0*FP*ppi1d*q1*q3 +
902 2.0*(-(FA*q0*q3) + FP*q02*q3)*bej0*uwavefunc +
903 2.0*ppi3d*(2.0*FA*mn + FA*q0 - FP*q32);
908 j4[0] = 2.0*(FA + FP*q0)*(q02 *bej0*uwavefunc - ppi1d*q1 - ppi3d*q3);
910 j4[1] = -2.0*(-(FA*q0*q1) - FP*q02*q1)*bej0*uwavefunc - 2.0*ppi1d*(-2.0*FA*mn + FA*q0 + FP*q12) -
911 twoI*(F1 + F2)*ppi2d*q3 - 2.0*FP*ppi3d*q1*q3;
913 j4[2] = twoI*(-I*FA*ppi2d*(2.0*mn - q0) - (F1 + F2)*(ppi3d*q1 - ppi1d*q3));
915 j4[3] = twoI*(F1 + F2)*ppi2d*q1 - 2.0*FP*ppi1d*q1*q3 + 2.0*(FA*q0*q3 + FP*q02*q3)*bej0*uwavefunc +
916 2.0*ppi3d*(2.0*FA*mn - FA*q0 - FP*q32);
920 (alp*dens_p_cent+dens_n_cent) *
929 cdouble pre_factor_3 = 1./mod*(-I)*PreFacMult*exp_i_qpar_za*
931 cdouble pre_factor_4 = 1./mod*(-I)*PreFacMult*exp_i_qpar_za*
934 for(
int m = 0;
m != 4; ++
m)
936 ordez1[
m][l] = pre_factor_1 * j1[
m];
937 ordez2[
m][l] = pre_factor_2 * j2[
m];
938 ordez3[
m][l] = pre_factor_3 * j3[
m];
939 ordez4[
m][l] = pre_factor_4 * j4[
m];
941 ordez[
m][l] = ordez1[
m][l] + ordez2[
m][l] + ordez3[
m][l] + ordez4[
m][l];
950 for(
unsigned int z = 0; z != 4; ++z)
956 for(
unsigned int z = 0; z != n; ++z)
958 for(
unsigned int y = 0; y != 4; ++y)
960 ordeb2[y][z] = ordeb[z][y];
966 for (
int i=0; i<4; i++) {
968 *(jHadCurrent+i) =
cdouble(jn);
976 cdouble s_delta (delta_momentum.mag2(),0);
982 else if( delta_momentum.E() < 0.0 )
988 cdouble sqrt_delta = sqrt(s_delta);
997 gdmed = 1.0 / (part_1 * part_2);
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_nu
static const double kSqrt3
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fQ
void SolveWavefunctions()
Wave function class for AlvarezRuso Coherent pion production xsec.
double DeltaSelfEnergyRe(double density)
static const double kSqrt2
ROOT::Math::SVector< cdouble, 4 > CVector
std::complex< double > cdouble
~AlvarezRusoCOHPiPDXSec()
double DeltaWidthFree(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
static constexpr double s
std::complex< double > DeltaPropagatorInMed(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
static constexpr double fs
double Radius(const int i, const int j) const
double DeltaWidthPauliBlocked(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum, double density)
double PionMomentumCM(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
Eikonal wavefunction solution for Alvarez-Ruso Coherent Pion Production xsec.
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > LorentzVector
std::complex< double > fJ_hadronic[4]
static constexpr double b
double W(const Interaction *const i)
std::complex< double > DeltaCouplingInMed(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pion_momentum, double density_cent)
void NuclearCurrent(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > q, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pdir, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pcrs, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > ppi, std::complex< double > *jPtr)
ARWavefunction * fUwaveDtheta
double PNVertexFactor(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > momentum, double mass)
double DXSec(const double E_nu_, const double E_l_, const double theta_l_, const double phi_l_, const double theta_pi_, const double phi_pi_)
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double A
double SamplePoint2(const unsigned int i) const
virtual std::complex< double > Element(const double radius, const double cosine_rz, const double e_pion)=0
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_l
double DeltaSelfEnergyIm(double density)
double DeltaSelfEnergyConstant(double a, double b, double c, double E)
std::complex< double > H(unsigned int i, unsigned int j) const
Nucleus class for Alvarez-Ruso Coherent Pion Production xsec.
unsigned int GetNDensities(void) const
double PiDecayVertex(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pion_momentum, double mass)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_cross
ARSampledNucleus * fNucleus
double DifferentialCrossSection()
ARWavefunction * fUwaveDr
ARConstants & GetConstants(void)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_direct
void set(unsigned int i, unsigned int j, const std::complex< double > &value)
double DensityOfCentres(const int i, const int j) const
ARSampledNucleus & GetNucleus(void)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_pi
static constexpr double m
double SamplePoint1(const unsigned int i) const
ARWFSolution * fWfsolution
formfactors_t formfactors
std::complex< double > NucleonPropagator(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > nucleon_momentum)