#include "PHASIC++/Channels/CSS_Kinematics.H" #include "ATOOLS/Math/ZAlign.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/Exception.H" using namespace PHASIC; using namespace ATOOLS; double Kin_Args::s_uxeps=1.0e-3; LN_Pair PHASIC::GetLN (const Vec4D &pi,const Vec4D &pk,const int mode) { double mi2(pi.Abs2()), mk2(pk.Abs2()); double eps(pi*pk), kap(eps*eps-mi2*mk2); if (kap<0.0) return LN_Pair(); kap=Sign(eps)*sqrt(kap); Vec4D l(((eps+kap)*pi-mi2*pk)/(2.0*kap)); Vec4D n(((eps+kap)*pk-mk2*pi)/(2.0*kap)); return LN_Pair(l,n,mode); } Vec4D PHASIC::LT(const Vec4D &a,const Vec4D &b,const Vec4D &c) { double t(a[1]*b[2]*c[3]+a[2]*b[3]*c[1]+a[3]*b[1]*c[2] -a[1]*b[3]*c[2]-a[3]*b[2]*c[1]-a[2]*b[1]*c[3]); double x(-a[0]*b[2]*c[3]-a[2]*b[3]*c[0]-a[3]*b[0]*c[2] +a[0]*b[3]*c[2]+a[3]*b[2]*c[0]+a[2]*b[0]*c[3]); double y(-a[1]*b[0]*c[3]-a[0]*b[3]*c[1]-a[3]*b[1]*c[0] +a[1]*b[3]*c[0]+a[3]*b[0]*c[1]+a[0]*b[1]*c[3]); double z(-a[1]*b[2]*c[0]-a[2]*b[0]*c[1]-a[0]*b[1]*c[2] +a[1]*b[0]*c[2]+a[0]*b[2]*c[1]+a[2]*b[1]*c[0]); return Vec4D(t,-x,-y,-z); } double PHASIC::ComputePhi(Vec4D pijt,Vec4D pkt,Vec4D pi) { Vec4D n_perp(0.0,cross(Vec3D(pijt),Vec3D(pkt))); if (n_perp.PSpat2()<=rpa->gen.SqrtAccu()) { msg_IODebugging()<<"Set fixed n_perp\n"; n_perp=Vec4D(0.0,1.0,1.0,0.0); Poincare zrot(pijt,Vec4D::ZVEC); zrot.RotateBack(n_perp); } n_perp*=1.0/n_perp.PSpat(); Vec4D l_perp(LT(pijt,pkt,n_perp)); l_perp*=1.0/sqrt(dabs(l_perp.Abs2())); double cp(-pi*n_perp), sp(-pi*l_perp), phi(atan(sp/cp)); return cp<0.0?phi+M_PI:(sp>0.0?phi:phi+2.0*M_PI); } Kin_Args PHASIC::ClusterFFDipole (const double &mi2,const double &mj2,const double &mij2, const double &mk2,const Vec4D &pi,const Vec4D &pj, const Vec4D &pk,const int mode) { double pipj(pi*pj), pipk(pi*pk), pjpk(pj*pk); double yijk(pipj/(pipj+pipk+pjpk)), zi(pipk/(pipk+pjpk)); double sij((pi+pj).Abs2()), Q2((pi+pj+pk).Abs2()); double po(sqr(Q2-mij2-mk2)-4.0*mij2*mk2); double pn(sqr(Q2-sij-mk2)-4.0*sij*mk2); if (pn<0.0 || po<0.0) { msg_IODebugging()<gen.SqrtAccu()) { msg_IODebugging()<<"Set fixed n_perp\n"; n_perp=Vec4D(0.0,1.0,1.0,0.0); Poincare zrot(pij,Vec4D::ZVEC); zrot.RotateBack(n_perp); } n_perp*=1.0/n_perp.PSpat(); Vec4D l_perp(LT(pij,pk,n_perp)); l_perp*=1.0/sqrt(dabs(l_perp.Abs2())); Vec4D Q(pij+pk); double Q2(Q.Abs2()), sij(ffp.m_y*(Q2-mk2)+(1.0-ffp.m_y)*(mi2+mj2)); double po(sqr(Q2-mij2-mk2)-4.0*mij2*mk2); double pn(sqr(Q2-sij-mk2)-4.0*sij*mk2); if (po<0.0 || pn<0.0) { msg_IODebugging()<gen.SqrtAccu()) { msg_IODebugging()<<"Set fixed n_perp\n"; n_perp=Vec4D(0.0,1.0,1.0,0.0); Poincare zrot(fip.m_pi,Vec4D::ZVEC); zrot.RotateBack(n_perp); } n_perp*=1.0/n_perp.PSpat(); Vec4D l_perp(LT(fip.m_pi,fip.m_pk,n_perp)); l_perp*=1.0/sqrt(dabs(l_perp.Abs2())); double pnn(Sign(ecm)*sqrt(sqr(ecm)-4.0*sij*ma2)), gam(0.5*(ecm+pnn)); double zt(ecm/pnn*(fip.m_z-ma2/gam*(sij+mi2-mj2)/ecm)); double ktt(sij*zt*(1.0-zt)-(1.0-zt)*mi2-zt*mj2); if (ktt<0.0 || gam==0.0) { msg_IODebugging()<rpa->gen.SqrtAccu() || dabs(res.m_pi.Abs2()-maj2)>rpa->gen.SqrtAccu()) { msg_IODebugging()<=0.0?ifp.m_mk2:mkt2); double sjk(-yt*(Q2-ma2)+(1.0+yt)*(mj2+mk2)); double po(sqr(Q2-mkt2-maj2)-4.0*maj2*(mkt2+kt2)); double ecm(Q2-sjk-ma2), pn(sqr(ecm)-4.0*ma2*(sjk+kt2)); if (pn<0.0 || po<0.0) { msg_IODebugging()<gen.SqrtAccu()) { msg_IODebugging()<<"Set fixed n_perp\n"; n_perp=Vec4D(0.0,1.0,1.0,0.0); Poincare zrot(ifp.m_pj,Vec4D::ZVEC); zrot.RotateBack(n_perp); } n_perp*=1.0/n_perp.PSpat(); Vec4D l_perp(LT(ifp.m_pj,ifp.m_pi,n_perp)); l_perp*=1.0/sqrt(dabs(l_perp.Abs2())); double pnn(Sign(ecm)*sqrt(sqr(ecm)-4.0*sjk*ma2)), gam(0.5*(ecm+pnn)); double zt(ecm/pnn*(ifp.m_y-ma2/gam*(sjk+mj2-mk2)/ecm)); double ktt(sjk*zt*(1.0-zt)-(1.0-zt)*mj2-zt*mk2); if (ktt<0.0) { msg_IODebugging()<=0.0?ifp.m_mk2:mkt2); double Q2(Q.Abs2()), po(sqr(Q2-maj2-mkt2)-4.0*maj2*mkt2); double yt(ifp.m_y/ifp.m_z), saj(yt*(Q2-mk2)+(1.0-yt)*(ma2+mj2)); double ecm(Q2-saj-mk2), pn(sqr(ecm)-4.0*saj*mk2); if (pn<0.0 || po<0.0) { msg_IODebugging()<