// the amplitudes for K-> 2pi
// the physical amplitudes are the Feynman Diagram amplitude
// for K->pi pi and
// -i_ times the Feynman diagram amplitude for K-> 3 pi

// uses the output from KPPall_iso.6.frm
// last version used for the publication
// oneloopintegrals and IRoneloopintegrals can both be used here


#include <iostream>

#include <cmath>
#include <complex>
#include "IRoneloopintegrals.h"
#include "amplitudes.iso.2pi.h"
#include "amplitudes.iso.h"

typedef std::complex<double> dcomplex;


namespace photoncutoffs{
  extern double eg3pi,egfpi,egcoulomb;
}

const double pi=4.*atan(1.);
const double pi16 = 1./(16.*pi*pi);

//inline double prop(double msq, double qsq){
//  return 1./(qsq-msq);
//}

// is in amplitudes.iso.6b.cc
double Ab(double mko2, double mkp2, double mu2);
//double Ab(double mko2, double mkp2, double mu2){
//  return Ab(mko2,mu2)-Ab(mkp2,mu2);
//}

dcomplex Ap2KSpm(){
  using namespace inputpars;
  double mpp2r = mpp*mpp, mko2r = mko*mko;
  double spe3 = spe/sqrt(3.);
  double Ap2KSpmiso = 0.;

    Ap2KSpmiso +=
       + G8 * ( 2*mpp2r - 2*mko2r );

      Ap2KSpmiso +=  + G27 * ( 4./3.*mpp2r - 4./3.*mko2r );

      Ap2KSpmiso +=  + GE * ( 2 );

  return dcomplex(Ap2KSpmiso/(pow(fpip,2)*fkp));
}

dcomplex Ap2KSoo(){
  using namespace inputpars;
  double mpo2r = mpo*mpo, mko2r = mko*mko;
  double spe3 = spe/sqrt(3.);
  double Ap2KSooiso = 0.;

   Ap2KSooiso +=
       + G8*spe3 * (  - 4*mpo2r + 4*mko2r );

      Ap2KSooiso +=  + G8 * ( 2*mpo2r - 2*mko2r );

      Ap2KSooiso +=  + G27*spe3 * ( 4*mpo2r - 4*mko2r );

      Ap2KSooiso +=  + G27 * (  - 2*mpo2r + 2*mko2r );

  return dcomplex(Ap2KSooiso/(pow(fpip,2)*fkp));
}

dcomplex Ap2KPpo(){
  using namespace inputpars;
  double mpo2r = mpo*mpo, mpp2r = mpp*mpp, mkp2r = mkp*mkp;
  double spe3 = spe/sqrt(3.);
  double Ap2KPpoiso = 0.;

   Ap2KPpoiso +=
       + G8*spe3 * (  - mpp2r + 3*mpo2r - 2*mkp2r );

      Ap2KPpoiso +=  + G8 * ( mpp2r - mpo2r );

      Ap2KPpoiso +=  + G27*spe3 * ( mpp2r + 2*mpo2r - 3*mkp2r );

      Ap2KPpoiso +=  + G27 * ( 7./3.*mpp2r - 2./3.*mpo2r - 5./3.*mkp2r
          );

      Ap2KPpoiso +=  + GE * ( 1 );

  return dcomplex(Ap2KPpoiso/(pow(fpip,2)*fkp));
}


dcomplex Ap4KSoo(){
  using namespace inputpars;
  double mpp2 = mpp*mpp, mpo2 = mpo*mpo, mkp2 = mkp*mkp, mko2 = mko*mko,
    me2 = me*me, mu2 = mu*mu;
  double mp2 = mpo2,mk2=mko2;
  double spe3 = spe/sqrt(3.);
  dcomplex Ap4KSooiso = 0.;


   Ap4KSooiso =
       + G8*L5r*spe3 * (  - 64*mp2*mk2 + 32*pow(mp2,2) + 32*pow(mk2,2)
          );

      Ap4KSooiso +=  + G8*L7r*spe3 * ( 768*mp2*mk2 - 384*pow(mp2,2) - 
         384*pow(mk2,2) );

      Ap4KSooiso +=  + G8*L8r*spe3 * ( 256*mp2*mk2 - 128*pow(mp2,2) - 
         128*pow(mk2,2) );

      Ap4KSooiso +=  + G8*spe3 * ( 56*mp2*mk2*N5r + 96*mp2*mk2*N6r + 96
         *mp2*mk2*N7r - 40*mp2*mk2*N8r - 8*mp2*mk2*N9r - 112*mp2*mk2*
         N10r - 64*mp2*mk2*N11r - 144*mp2*mk2*N12r - 192*mp2*mk2*N13r
          - 48*pow(mp2,2)*N5r - 48*pow(mp2,2)*N6r - 64*pow(mp2,2)*N7r
          + 8*pow(mp2,2)*N8r + 80*pow(mp2,2)*N10r + 64*pow(mp2,2)*N11r
          + 80*pow(mp2,2)*N12r + 96*pow(mp2,2)*N13r - 8*pow(mk2,2)*N5r
          - 48*pow(mk2,2)*N6r - 32*pow(mk2,2)*N7r + 32*pow(mk2,2)*N8r
          + 8*pow(mk2,2)*N9r + 32*pow(mk2,2)*N10r + 64*pow(mk2,2)*N12r
          + 96*pow(mk2,2)*N13r );

      Ap4KSooiso +=  + G8 * ( 2*mp2*Z5r - 4./3.*mp2*Z6r + 4./3.*mp2*Z7r
          - 2*mp2*Z8r - 2*mp2*Z9r - 4./3.*mp2*Z10r + 4./3.*mp2*Z11r + 4.
         /3.*mp2*Z12r + 4*mp2*K3r - 2*mp2*K4r + 8./3.*mp2*K5r + 8./3.*
         mp2*K6r - 4./3.*mp2*K9r - 4./3.*mp2*K10r + 12*mp2*K12r - 2*mk2
         *Z5r + 4./3.*mk2*Z6r - 4./3.*mk2*Z7r + 2*mk2*Z8r + 2*mk2*Z9r
          + 4./3.*mk2*Z10r - 4./3.*mk2*Z11r - 4./3.*mk2*Z12r - 8*mk2*
         K3r + 4*mk2*K4r - 4./3.*mk2*K5r - 4./3.*mk2*K6r - 12*mk2*K12r
          - 4*mpo2*mko2*N5r - 24*mpo2*mko2*N7r + 4*mpo2*mko2*N8r + 4*
         mpo2*mko2*N9r + 8*mpo2*mko2*N10r + 16*mpo2*mko2*N11r + 8*mpo2*
         mko2*N12r + 8*pow(mpo2,2)*N5r + 16*pow(mpo2,2)*N7r + 4*pow(
         mpo2,2)*N8r - 8*pow(mpo2,2)*N10r - 16*pow(mpo2,2)*N11r - 8*
         pow(mpo2,2)*N12r - 4*pow(mko2,2)*N5r + 8*pow(mko2,2)*N7r - 8*
         pow(mko2,2)*N8r - 4*pow(mko2,2)*N9r );

      Ap4KSooiso +=  + G27*L5r*spe3 * ( 64*mp2*mk2 - 32*pow(mp2,2) - 32
         *pow(mk2,2) );

      Ap4KSooiso +=  + G27*L7r*spe3 * (  - 768*mp2*mk2 + 384*pow(mp2,2)
          + 384*pow(mk2,2) );

      Ap4KSooiso +=  + G27*L8r*spe3 * (  - 256*mp2*mk2 + 128*pow(mp2,2)
          + 128*pow(mk2,2) );

      Ap4KSooiso +=  + G27*spe3 * ( 208./3.*mp2*mk2*D1r + 16*mp2*mk2*
         D2r - 12*mp2*mk2*D4r - 4*mp2*mk2*D5r - 28./3.*mp2*mk2*D6r + 40
         *mp2*mk2*D7r - 112./3.*pow(mp2,2)*D1r - 16*pow(mp2,2)*D2r + 16
         *pow(mp2,2)*D4r + 16./3.*pow(mp2,2)*D6r - 8*pow(mp2,2)*D7r - 
         32*pow(mk2,2)*D1r - 4*pow(mk2,2)*D4r + 4*pow(mk2,2)*D5r + 4*
         pow(mk2,2)*D6r - 32*pow(mk2,2)*D7r );

      Ap4KSooiso +=  + G27 * (  - 4*mp2*K3r + 2*mp2*K4r - 8./3.*mp2*K5r
          - 8./3.*mp2*K6r + 4./3.*mp2*K9r + 4./3.*mp2*K10r - 12*mp2*
         K12r + 8*mk2*K3r - 4*mk2*K4r + 4./3.*mk2*K5r + 4./3.*mk2*K6r
          + 12*mk2*K12r + 8./3.*mpo2*mko2*D1r - 8*mpo2*mko2*D2r + 6*
         mpo2*mko2*D4r + 2*mpo2*mko2*D5r - 14./3.*mpo2*mko2*D6r - 4*
         mpo2*mko2*D7r - 8./3.*pow(mpo2,2)*D1r + 8*pow(mpo2,2)*D2r - 8*
         pow(mpo2,2)*D4r + 8./3.*pow(mpo2,2)*D6r - 4*pow(mpo2,2)*D7r + 
         2*pow(mko2,2)*D4r - 2*pow(mko2,2)*D5r + 2*pow(mko2,2)*D6r + 8*
         pow(mko2,2)*D7r );

      Ap4KSooiso +=  + Ab(mp2,mu2)*ZE*G8 * ( 8./3. );

      Ap4KSooiso +=  + Ab(mp2,mu2)*ZE*G27 * ( 46./9. );

      Ap4KSooiso +=  + Ab(mp2,mu2)*G8*spe3 * (  - 17*mp2 + 22*mk2 );

      Ap4KSooiso +=  + Ab(mp2,mu2)*G27*spe3 * ( 61./3.*mp2 - 91./3.*mk2
          );

      Ap4KSooiso +=  + Ab(mp2,mu2)*GE * (  - 1 );

      Ap4KSooiso +=  + Ab(mk2,mk2,mu2)*G8 * (  - 1./3.*mp2 - 2./3.*mk2
          );

      Ap4KSooiso +=  + Ab(mk2,mk2,mu2)*G27 * ( 1./3.*mp2 + 2./3.*mk2 );

      Ap4KSooiso +=  + Ab(mk2,mu2)*ZE*G8 * (  - 8./3. );

      Ap4KSooiso +=  + Ab(mk2,mu2)*ZE*G27 * (  - 46./9. );

      Ap4KSooiso +=  + Ab(mk2,mu2)*G8*spe3 * (  - 2*mp2 - mk2 );

      Ap4KSooiso +=  + Ab(mk2,mu2)*G27*spe3 * ( 88./9.*mp2 - 16./9.*mk2
          );

      Ap4KSooiso +=  + Ab(mk2,mu2)*GE * ( 1 );

      Ap4KSooiso +=  + Ab(mpp2,mu2)*G8 * (  - 7./3.*mpp2 + 4./3.*mpo2
          + 1./2.*mko2 );

      Ap4KSooiso +=  + Ab(mpp2,mu2)*G27 * (  - 29./9.*mpp2 - 67./9.*
         mpo2 + 7*mko2 );

      Ap4KSooiso +=  + Ab(mpo2,mu2)*G8 * ( 5./2.*mpo2 - 4*mko2 );

      Ap4KSooiso +=  + Ab(mpo2,mu2)*G27 * (  - 5./2.*mpo2 + 4*mko2 );

      Ap4KSooiso +=  + Ab(mkp2,mu2)*G8 * ( mpp2 + 7./6.*mpo2 + 4./3.*
         mkp2 - 3*mko2 );

      Ap4KSooiso +=  + Ab(mkp2,mu2)*G27 * ( 7./3.*mpp2 - 17./6.*mpo2 + 
         8./9.*mkp2 + 59./18.*mko2 );

      Ap4KSooiso +=  + Ab(mko2,mu2)*G8 * ( 8./3.*mpo2 + 1./12.*mko2 - 1.
         /2.*me2 );

      Ap4KSooiso +=  + Ab(mko2,mu2)*G27 * (  - 8./3.*mpo2 - 1./12.*mko2
          + 1./2.*me2 );

      Ap4KSooiso +=  + Ab(me2,mu2)*G8*spe3 * ( 7./9.*mp2 - 25./9.*mk2 )
         ;

      Ap4KSooiso +=  + Ab(me2,mu2)*G8 * (  - 2./9.*mpo2 - 49./36.*mko2
          + 5./6.*me2 );

      Ap4KSooiso +=  + Ab(me2,mu2)*G27*spe3 * (  - 7./9.*mp2 + 25./9.*
         mk2 );

      Ap4KSooiso +=  + Ab(me2,mu2)*G27 * ( 2./9.*mpo2 + 49./36.*mko2 - 
         5./6.*me2 );

      Ap4KSooiso +=  + Bb(mp2,mp2,mk2,mu2)*ZE*G8 * ( 8./3.*mp2 - 8./3.*
         mk2 );

      Ap4KSooiso +=  + Bb(mp2,mp2,mk2,mu2)*ZE*G27 * ( 16./9.*mp2 - 16./
         9.*mk2 );

      Ap4KSooiso +=  + Bb(mp2,mp2,mk2,mu2)*G8*spe3 * ( 2*mp2*mk2 - 2*
         pow(mp2,2) );

      Ap4KSooiso +=  + Bb(mp2,mp2,mk2,mu2)*G27*spe3 * (  - 2*mp2*mk2 + 
         2*pow(mp2,2) );

      Ap4KSooiso +=  + Bb(mp2,mp2,mk2,mu2)*GE * (  - 2*mp2 + 2*mk2 );

      Ap4KSooiso +=  + Bb(mp2,mk2,mp2,mu2)*ZE*G27 * (  - 10./3.*mp2 + 
         10./3.*mk2 );

      Ap4KSooiso +=  + Bb(mp2,mk2,mp2,mu2)*G8*spe3 * (  - 12*mp2*mk2 + 
         5*pow(mk2,2) );

      Ap4KSooiso +=  + Bb(mp2,mk2,mp2,mu2)*G27*spe3 * ( 16./3.*mp2*mk2
          - 10./3.*pow(mk2,2) );

      Ap4KSooiso +=  + Bb(mp2,mk2,mp2,mu2)*GE * ( mk2 );

      Ap4KSooiso +=  + Bb(mp2,me2,mk2,mu2)*G8*spe3 * (  - 16./3.*mp2*
         mk2 + 8./3.*pow(mp2,2) + 8./3.*pow(mk2,2) );

      Ap4KSooiso +=  + Bb(mp2,me2,mk2,mu2)*G27*spe3 * ( 16./3.*mp2*mk2
          - 8./3.*pow(mp2,2) - 8./3.*pow(mk2,2) );

      Ap4KSooiso +=  + Bb(mk2,mk2,mk2,mu2)*GE * (  - 1./2.*mk2 );

      Ap4KSooiso +=  + Bb(mk2,me2,mp2,mu2)*G8*spe3 * ( 16./9.*mp2*mk2
          - 8./9.*pow(mp2,2) - 26./9.*pow(mk2,2) );

      Ap4KSooiso +=  + Bb(mk2,me2,mp2,mu2)*G27*spe3 * (  - 16./9.*mp2*
         mk2 + 8./9.*pow(mp2,2) + 26./9.*pow(mk2,2) );

      Ap4KSooiso +=  + Bb(mpp2,mpp2,mko2,mu2)*G8 * (  - 2./3.*mpp2*mpo2
          + 10./3.*mpp2*mko2 - 4./3.*pow(mpp2,2) + 2./3.*mpo2*mko2 - 2*
         pow(mko2,2) );

      Ap4KSooiso +=  + Bb(mpp2,mpp2,mko2,mu2)*G27 * (  - 4./9.*mpp2*
         mpo2 + 20./9.*mpp2*mko2 - 8./9.*pow(mpp2,2) + 4./9.*mpo2*mko2
          - 4./3.*pow(mko2,2) );

      Ap4KSooiso +=  + Bb(mpp2,mkp2,mpo2,mu2)*G8 * (  - 2*mpp2*mpo2 + 3.
         /2.*mpp2*mko2 + pow(mpp2,2) - 1./2.*mpo2*mko2 + pow(mpo2,2) - 
         1./2.*mkp2*mko2 );

      Ap4KSooiso +=  + Bb(mpp2,mkp2,mpo2,mu2)*G27 * (  - 3*mpp2*mpo2 - 
         5./3.*mpp2*mkp2 + 8./3.*mpp2*mko2 + 7./3.*pow(mpp2,2) + 5./3.*
         mpo2*mkp2 - 1./3.*mpo2*mko2 + 2./3.*pow(mpo2,2) - 2*mkp2*mko2
          );

      Ap4KSooiso +=  + Bb(mpo2,mpo2,mko2,mu2)*G8 * (  - mpo2*mko2 + 
         pow(mpo2,2) );

      Ap4KSooiso +=  + Bb(mpo2,mpo2,mko2,mu2)*G27 * ( mpo2*mko2 - pow(
         mpo2,2) );

      Ap4KSooiso +=  + Bb(mpo2,mko2,mpo2,mu2)*G8 * ( 2*mpo2*mko2 - 3./2.
         *pow(mko2,2) );

      Ap4KSooiso +=  + Bb(mpo2,mko2,mpo2,mu2)*G27 * (  - 2*mpo2*mko2 + 
         3./2.*pow(mko2,2) );

      Ap4KSooiso +=  + Bb(mkp2,mkp2,mko2,mu2)*G8 * (  - 7./6.*mkp2*mko2
          + 1./3.*pow(mkp2,2) + 5./6.*pow(mko2,2) );

      Ap4KSooiso +=  + Bb(mkp2,mkp2,mko2,mu2)*G27 * (  - 7./9.*mkp2*
         mko2 + 2./9.*pow(mkp2,2) + 5./9.*pow(mko2,2) );

      Ap4KSooiso +=  + Bb(mko2,me2,mpo2,mu2)*G8 * (  - 7./36.*mpo2*mko2
          + 1./18.*pow(mpo2,2) + 7./4.*mko2*me2 - 31./36.*pow(mko2,2)
          - 1./2.*pow(me2,2) );

      Ap4KSooiso +=  + Bb(mko2,me2,mpo2,mu2)*G27 * ( 7./36.*mpo2*mko2
          - 1./18.*pow(mpo2,2) - 7./4.*mko2*me2 + 31./36.*pow(mko2,2)
          + 1./2.*pow(me2,2) );

      Ap4KSooiso +=  + Bb(me2,me2,mk2,mu2)*G8*spe3 * ( 2./9.*mp2*mk2 - 
         2./9.*pow(mp2,2) );

      Ap4KSooiso +=  + Bb(me2,me2,mk2,mu2)*G27*spe3 * (  - 2./9.*mp2*
         mk2 + 2./9.*pow(mp2,2) );

      Ap4KSooiso +=  + Bb(me2,me2,mko2,mu2)*G8 * ( 1./3.*mpo2*mko2 - 1./
         3.*mpo2*me2 );

      Ap4KSooiso +=  + Bb(me2,me2,mko2,mu2)*G27 * (  - 1./3.*mpo2*mko2
          + 1./3.*mpo2*me2 );

      Ap4KSooiso +=  + B1b(mp2,mk2,mp2,mu2)*G8*spe3 * ( 4*mp2*mk2 + 10*
         pow(mk2,2) );

      Ap4KSooiso +=  + B1b(mp2,mk2,mp2,mu2)*G27*spe3 * ( 6*mp2*mk2 - 10
         *pow(mk2,2) );

      Ap4KSooiso +=  + B1b(mp2,mk2,mp2,mu2)*GE * (  - mk2 );

      Ap4KSooiso +=  + B1b(mk2,me2,mp2,mu2)*G8*spe3 * ( 4*pow(mk2,2) );

      Ap4KSooiso +=  + B1b(mk2,me2,mp2,mu2)*G27*spe3 * (  - 4*pow(
         mk2,2) );

      Ap4KSooiso +=  + B1b(mpp2,mkp2,mpo2,mu2)*G8 * (  - mpp2*mko2 );

      Ap4KSooiso +=  + B1b(mpp2,mkp2,mpo2,mu2)*G27 * (  - 7./3.*mpp2*
         mko2 + 5./3.*mkp2*mko2 );

      Ap4KSooiso +=  + B1b(mpo2,mko2,mpo2,mu2)*G8 * (  - pow(mko2,2) );

      Ap4KSooiso +=  + B1b(mpo2,mko2,mpo2,mu2)*G27 * ( pow(mko2,2) );

      Ap4KSooiso +=  + B1b(mko2,me2,mpo2,mu2)*G8 * (  - 3./2.*mko2*me2
          + pow(mko2,2) );

      Ap4KSooiso +=  + B1b(mko2,me2,mpo2,mu2)*G27 * ( 3./2.*mko2*me2 - 
         pow(mko2,2) );


  return Ap4KSooiso/(pow(fpip,4)*fkp);
}

dcomplex Ap4KSpm(){
  using namespace inputpars;
  double mpp2 = mpp*mpp, mpo2 = mpo*mpo, mkp2 = mkp*mkp, mko2 = mko*mko,
    me2 = me*me, mu2 = mu*mu;
  double mp2 = mpp2,mk2=mko2;
  double spe3 = spe/sqrt(3.);
  dcomplex Ap4KSpmiso = 0.;


   Ap4KSpmiso =
       + ZE*G8 * (  - 16*mp2*N5r - 32*mp2*N7r - 8*mp2*N8r + 32*mp2*N10r
          + 64*mp2*N11r + 32*mp2*N12r + 8*mk2*N5r + 16*mk2*N7r + 8*mk2*
         N8r + 8*mk2*N9r - 16*mk2*N10r - 32*mk2*N11r - 16*mk2*N12r );

      Ap4KSpmiso +=  + ZE*G27 * ( 32./3.*mp2*D1r + 64./3.*mp2*D2r - 32./
         3.*mp2*D4r - 16./3.*mp2*D6r - 16./3.*mp2*D7r - 16./3.*mk2*D1r
          - 32./3.*mk2*D2r + 8*mk2*D4r - 8./3.*mk2*D5r + 4*mk2*D6r + 16.
         /3.*mk2*D7r );

      Ap4KSpmiso +=  + G8*L5r*spe3 * (  - 64*mp2*mk2 + 32*pow(mp2,2) + 
         32*pow(mk2,2) );

      Ap4KSpmiso +=  + G8*spe3 * ( 32*mp2*mk2*N5r + 96*mp2*mk2*N7r - 32
         *mp2*mk2*N8r - 64*mp2*mk2*N10r - 64*mp2*mk2*N11r - 32*pow(
         mp2,2)*N5r - 64*pow(mp2,2)*N7r + 16*pow(mp2,2)*N8r + 64*pow(
         mp2,2)*N10r + 64*pow(mp2,2)*N11r - 32*pow(mk2,2)*N7r + 16*pow(
         mk2,2)*N8r );

      Ap4KSpmiso +=  + G8 * ( 8*mp2*Z1r + 4*mp2*Z2r + 8./3.*mp2*Z3r - 8
         *mp2*Z4r + 2*mp2*Z5r - 4./3.*mp2*Z6r + 4./3.*mp2*Z7r + 4./3.*
         mp2*K5r + 4./3.*mp2*K6r + 12*mp2*K12r + 4*mk2*Z1r + 8*mk2*Z2r
          - 8./3.*mk2*Z3r + 8*mk2*Z4r - 2*mk2*Z5r - 2./3.*mk2*Z6r - 4./
         3.*mk2*Z7r - 4./3.*mk2*K5r - 4./3.*mk2*K6r - 12*mk2*K12r - 4*
         mpp2*mko2*N5r - 24*mpp2*mko2*N7r + 4*mpp2*mko2*N8r + 4*mpp2*
         mko2*N9r + 8*mpp2*mko2*N10r + 16*mpp2*mko2*N11r + 8*mpp2*mko2*
         N12r + 8*pow(mpp2,2)*N5r + 16*pow(mpp2,2)*N7r + 4*pow(mpp2,2)*
         N8r - 8*pow(mpp2,2)*N10r - 16*pow(mpp2,2)*N11r - 8*pow(mpp2,2)
         *N12r - 4*pow(mko2,2)*N5r + 8*pow(mko2,2)*N7r - 8*pow(mko2,2)*
         N8r - 4*pow(mko2,2)*N9r );

      Ap4KSpmiso +=  + G27*L5r*spe3 * (  - 128./3.*mp2*mk2 + 64./3.*
         pow(mp2,2) + 64./3.*pow(mk2,2) );

      Ap4KSpmiso +=  + G27*spe3 * ( 224./3.*mp2*mk2*D1r - 8*mp2*mk2*D6r
          - 64./3.*mp2*mk2*D7r - 64./3.*pow(mp2,2)*D1r + 32./3.*pow(
         mp2,2)*D7r - 160./3.*pow(mk2,2)*D1r + 8*pow(mk2,2)*D6r + 32./3.
         *pow(mk2,2)*D7r );

      Ap4KSpmiso +=  + G27 * ( 8./9.*mp2*K5r + 8./9.*mp2*K6r + 8*mp2*
         K12r - 8./9.*mk2*K5r - 8./9.*mk2*K6r - 8*mk2*K12r + 8./3.*mpp2
         *mko2*D1r + 16./3.*mpp2*mko2*D2r - 4*mpp2*mko2*D4r - 4./3.*
         mpp2*mko2*D5r - 14./3.*mpp2*mko2*D6r + 8./3.*mpp2*mko2*D7r - 8.
         /3.*pow(mpp2,2)*D1r - 16./3.*pow(mpp2,2)*D2r + 16./3.*pow(
         mpp2,2)*D4r + 8./3.*pow(mpp2,2)*D6r + 8./3.*pow(mpp2,2)*D7r - 
         4./3.*pow(mko2,2)*D4r + 4./3.*pow(mko2,2)*D5r + 2*pow(mko2,2)*
         D6r - 16./3.*pow(mko2,2)*D7r );

      Ap4KSpmiso +=  + Ab(mp2,mu2)*ZE*G8 * ( 26./3. );

      Ap4KSpmiso +=  + Ab(mp2,mu2)*ZE*G27 * ( 19./3. );

      Ap4KSpmiso +=  + Ab(mp2,mu2)*G8*spe3 * (  - 3./2.*mk2 );

      Ap4KSpmiso +=  + Ab(mp2,mu2)*G27*spe3 * ( 5*mp2 + 7./3.*mk2 );

      Ap4KSpmiso +=  + Ab(mp2,mu2)*GE * ( 7 );

      Ap4KSpmiso +=  + Ab(mk2,mu2)*ZE*G8 * (  - 16./3. );

      Ap4KSpmiso +=  + Ab(mk2,mu2)*ZE*G27 * (  - 32./9. );

      Ap4KSpmiso +=  + Ab(mk2,mu2)*G8*spe3 * (  - 4*mp2 + 4*mk2 );

      Ap4KSpmiso +=  + Ab(mk2,mu2)*G27*spe3 * (  - 8./3.*mp2 + 8./3.*
         mk2 );

      Ap4KSpmiso +=  + Ab(mk2,mu2)*GE * ( 5 );

      Ap4KSpmiso +=  + Ab(mpp2,mu2)*G8 * ( mpp2 - 5./2.*mko2 );

      Ap4KSpmiso +=  + Ab(mpp2,mu2)*G27 * ( 22./3.*mpp2 - 10./3.*mko2 )
         ;

      Ap4KSpmiso +=  + Ab(mpo2,mu2)*G8 * ( 5./3.*mpp2 - 7./6.*mpo2 - 3./
         4.*mko2 );

      Ap4KSpmiso +=  + Ab(mpo2,mu2)*G27 * ( 5./6.*mpp2 - 4./3.*mpo2 - 
         41./12.*mko2 );

      Ap4KSpmiso +=  + Ab(mkp2,mu2)*G8 * ( 11./6.*mpp2 + 1./2.*mpo2 + 4.
         /3.*mkp2 - 19./6.*mko2 - 1./2.*me2 );

      Ap4KSpmiso +=  + Ab(mkp2,mu2)*G27 * ( 11./9.*mpp2 + 1./3.*mpo2 + 
         8./9.*mkp2 - 53./18.*mko2 - 1./3.*me2 );

      Ap4KSpmiso +=  + Ab(mko2,mu2)*G8 * ( 5./2.*mpp2 );

      Ap4KSpmiso +=  + Ab(mko2,mu2)*G27 * ( 5./3.*mpp2 );

      Ap4KSpmiso +=  + Ab(me2,mu2)*ZE*G8 * ( 16./9. );

      Ap4KSpmiso +=  + Ab(me2,mu2)*ZE*G27 * ( 1 );

      Ap4KSpmiso +=  + Ab(me2,mu2)*G8*spe3 * ( 4./9.*mp2 + 19./18.*mk2
          );

      Ap4KSpmiso +=  + Ab(me2,mu2)*G8 * (  - 2./9.*mpp2 - 2./3.*mkp2 - 
         25./36.*mko2 + 5./6.*me2 );

      Ap4KSpmiso +=  + Ab(me2,mu2)*G27*spe3 * (  - mp2 - 19./3.*mk2 );

      Ap4KSpmiso +=  + Ab(me2,mu2)*G27 * ( 1./2.*mpp2 - mkp2 - 5./12.*
         mko2 );

      Ap4KSpmiso +=  + Bb(mp2,mp2,mk2,mu2)*ZE*G8 * ( 26./3.*mp2 - 26./3.
         *mk2 );

      Ap4KSpmiso +=  + Bb(mp2,mp2,mk2,mu2)*ZE*G27 * ( 14./3.*mp2 - 14./
         3.*mk2 );

      Ap4KSpmiso +=  + Bb(mp2,mp2,mk2,mu2)*G8*spe3 * (  - 4*mp2*mk2 + 2
         *pow(mp2,2) + 2*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mp2,mp2,mk2,mu2)*G27*spe3 * ( 4*mp2*mk2 - 2*
         pow(mp2,2) - 2*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mp2,mp2,mk2,mu2)*GE * ( mk2 );

      Ap4KSpmiso +=  + Bb(mp2,mk2,mp2,mu2)*ZE*G27 * (  - 5./3.*mp2 + 5./
         3.*mk2 );

      Ap4KSpmiso +=  + Bb(mp2,mk2,mp2,mu2)*G8*spe3 * ( 1./2.*pow(mk2,2)
          );

      Ap4KSpmiso +=  + Bb(mp2,mk2,mp2,mu2)*G27*spe3 * ( 5./3.*mp2*mk2
          + 1./3.*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mp2,mk2,mp2,mu2)*GE * ( 1./2.*mk2 );

      Ap4KSpmiso +=  + Bb(mp2,me2,mk2,mu2)*G8*spe3 * (  - 14./3.*mp2*
         mk2 + 8./3.*pow(mp2,2) + 2*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mp2,me2,mk2,mu2)*G27*spe3 * ( 14./3.*mp2*mk2
          - 8./3.*pow(mp2,2) - 2*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mk2,mk2,mk2,mu2)*GE * (  - 1./2.*mk2 );

      Ap4KSpmiso +=  + Bb(mk2,me2,mp2,mu2)*ZE*G8 * ( 10./9.*mp2 - 10./9.
         *mk2 );

      Ap4KSpmiso +=  + Bb(mk2,me2,mp2,mu2)*ZE*G27 * (  - 5./27.*mp2 + 5.
         /27.*mk2 );

      Ap4KSpmiso +=  + Bb(mk2,me2,mp2,mu2)*G8*spe3 * (  - 38./9.*mp2*
         mk2 + 16./9.*pow(mp2,2) + 53./18.*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mk2,me2,mp2,mu2)*G27*spe3 * ( 19./27.*mp2*mk2
          - 8./27.*pow(mp2,2) + 43./27.*pow(mk2,2) );

      Ap4KSpmiso +=  + Bb(mk2,me2,mp2,mu2)*GE * (  - mk2 );

      Ap4KSpmiso +=  + Bb(mpp2,mpp2,mko2,mu2)*G8 * ( mpp2*mko2 - pow(
         mko2,2) );

      Ap4KSpmiso +=  + Bb(mpp2,mpp2,mko2,mu2)*G27 * ( 2./3.*mpp2*mko2
          - 2./3.*pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mpp2,mko2,mpp2,mu2)*G8 * ( 2*mpp2*mko2 - 3./2.
         *pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mpp2,mko2,mpp2,mu2)*G27 * ( 4./3.*mpp2*mko2
          - pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mpo2,mpo2,mko2,mu2)*G8 * (  - 1./3.*mpp2*mpo2
          + 1./3.*mpp2*mko2 + 5./3.*mpo2*mko2 - 2./3.*pow(mpo2,2) - 
         pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mpo2,mpo2,mko2,mu2)*G27 * ( 1./3.*mpp2*mpo2
          - 1./3.*mpp2*mko2 - 5./3.*mpo2*mko2 + 2./3.*pow(mpo2,2) + 
         pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mpo2,mkp2,mpp2,mu2)*G8 * (  - mpp2*mpo2 - 1./
         4.*mpp2*mko2 + 1./2.*pow(mpp2,2) + 3./4.*mpo2*mko2 + 1./2.*
         pow(mpo2,2) - 1./4.*mkp2*mko2 );

      Ap4KSpmiso +=  + Bb(mpo2,mkp2,mpp2,mu2)*G27 * (  - 3./2.*mpp2*
         mpo2 - 5./6.*mpp2*mkp2 - 7./12.*mpp2*mko2 + 7./6.*pow(mpp2,2)
          + 5./6.*mpo2*mkp2 + 11./12.*mpo2*mko2 + 1./3.*pow(mpo2,2) + 1.
         /4.*mkp2*mko2 );

      Ap4KSpmiso +=  + Bb(mkp2,mkp2,mko2,mu2)*G8 * (  - 7./6.*mkp2*mko2
          + 1./3.*pow(mkp2,2) + 5./6.*pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mkp2,mkp2,mko2,mu2)*G27 * (  - 7./9.*mkp2*
         mko2 + 2./9.*pow(mkp2,2) + 5./9.*pow(mko2,2) );

      Ap4KSpmiso +=  + Bb(mkp2,me2,mpp2,mu2)*G8 * (  - 2./9.*mpp2*mkp2
          + 1./36.*mpp2*mko2 + 1./18.*pow(mpp2,2) - 7./36.*mkp2*mko2 + 
         4./3.*mkp2*me2 - 2./3.*pow(mkp2,2) + 5./12.*mko2*me2 - 1./2.*
         pow(me2,2) );

      Ap4KSpmiso +=  + Bb(mkp2,me2,mpp2,mu2)*G27 * ( 1./2.*mpp2*mkp2 - 
         1./36.*mpp2*mko2 - 5./18.*mpp2*me2 - 1./18.*pow(mpp2,2) - 11./
         12.*mkp2*mko2 + 7./6.*mkp2*me2 - pow(mkp2,2) + 25./36.*mko2*
         me2 - 1./3.*pow(me2,2) );

      Ap4KSpmiso +=  + Bb(me2,me2,mk2,mu2)*ZE*G8 * (  - 2./9.*mp2 + 2./
         9.*mk2 );

      Ap4KSpmiso +=  + Bb(me2,me2,mk2,mu2)*ZE*G27 * ( 2./9.*mp2 - 2./9.
         *mk2 );

      Ap4KSpmiso +=  + Bb(me2,me2,mk2,mu2)*G8*spe3 * ( 2./9.*mp2*mk2 - 
         2./9.*pow(mp2,2) );

      Ap4KSpmiso +=  + Bb(me2,me2,mk2,mu2)*G27*spe3 * (  - 2./9.*mp2*
         mk2 + 2./9.*pow(mp2,2) );

      Ap4KSpmiso +=  + Bb(me2,me2,mko2,mu2)*G8 * ( 1./3.*mpp2*mko2 - 1./
         3.*mpp2*me2 );

      Ap4KSpmiso +=  + Bb(me2,me2,mko2,mu2)*G27 * (  - 1./3.*mpp2*mko2
          + 1./3.*mpp2*me2 );

      Ap4KSpmiso +=  + B1b(mp2,mk2,mp2,mu2)*G8*spe3 * (  - pow(mk2,2) )
         ;

      Ap4KSpmiso +=  + B1b(mp2,mk2,mp2,mu2)*G27*spe3 * (  - 4*pow(
         mk2,2) );

      Ap4KSpmiso +=  + B1b(mp2,mk2,mp2,mu2)*GE * ( 3./2.*mk2 );

      Ap4KSpmiso +=  + B1b(mk2,me2,mp2,mu2)*G8*spe3 * (  - pow(mk2,2) )
         ;

      Ap4KSpmiso +=  + B1b(mk2,me2,mp2,mu2)*G27*spe3 * (  - 4*pow(
         mk2,2) );

      Ap4KSpmiso +=  + B1b(mk2,me2,mp2,mu2)*GE * ( 3./2.*mk2 );

      Ap4KSpmiso +=  + B1b(mpp2,mko2,mpp2,mu2)*G8 * (  - pow(mko2,2) );

      Ap4KSpmiso +=  + B1b(mpp2,mko2,mpp2,mu2)*G27 * (  - 2./3.*pow(
         mko2,2) );

      Ap4KSpmiso +=  + B1b(mpo2,mkp2,mpp2,mu2)*G8 * (  - 1./2.*mpo2*
         mko2 );

      Ap4KSpmiso +=  + B1b(mpo2,mkp2,mpp2,mu2)*G27 * (  - 1./3.*mpo2*
         mko2 - 5./6.*mkp2*mko2 );

      Ap4KSpmiso +=  + B1b(mkp2,me2,mpp2,mu2)*G8 * ( mkp2*mko2 - 3./2.*
         mko2*me2 );

      Ap4KSpmiso +=  + B1b(mkp2,me2,mpp2,mu2)*G27 * ( 3./2.*mkp2*mko2
          - mko2*me2 );

  return Ap4KSpmiso/(pow(fpip,4)*fkp);
}


dcomplex Ap4KPpo(){
  using namespace inputpars;
  double mpp2 = mpp*mpp, mpo2 = mpo*mpo, mkp2 = mkp*mkp, mko2 = mko*mko,
    me2 = me*me, mu2 = mu*mu;
  double mp2 = (mpp2+mpo2)/2.,mk2=mkp2;
  double spe3 = spe/sqrt(3.);
  dcomplex Ap4KPpoiso = 0.;

   Ap4KPpoiso =
       + ZE*G8 * (  - 8*mp2*N10r - 4*mp2*N11r - 4*pow(mp2,2)*pow(
         mk2,-1)*N11r + 8*mk2*N10r + 8*mk2*N11r );

      Ap4KPpoiso +=  + ZE*G27 * ( 16./3.*mp2*D1r - 40./3.*mp2*D2r + 20./
         3.*mp2*D5r - 40./3.*mp2*D7r - 8./3.*pow(mp2,2)*pow(mk2,-1)*D1r
          - 8./3.*mk2*D1r + 10./3.*mk2*D4r - 10./3.*mk2*D5r + 40./3.*
         mk2*D7r );

      Ap4KPpoiso +=  + G8*L7r*spe3 * (  - 384*mp2*mk2 + 192*pow(mp2,2)
          + 192*pow(mk2,2) );

      Ap4KPpoiso +=  + G8*L8r*spe3 * (  - 128*mp2*mk2 + 64*pow(mp2,2)
          + 64*pow(mk2,2) );

      Ap4KPpoiso +=  + G8*spe3 * (  - 12*mp2*mk2*N5r - 48*mp2*mk2*N6r
          + 4*mp2*mk2*N8r + 4*mp2*mk2*N9r + 24*mp2*mk2*N10r + 72*mp2*
         mk2*N12r + 96*mp2*mk2*N13r + 8*pow(mp2,2)*N5r + 24*pow(mp2,2)*
         N6r + 4*pow(mp2,2)*N8r - 8*pow(mp2,2)*N10r - 40*pow(mp2,2)*
         N12r - 48*pow(mp2,2)*N13r + 4*pow(mk2,2)*N5r + 24*pow(mk2,2)*
         N6r - 8*pow(mk2,2)*N8r - 4*pow(mk2,2)*N9r - 16*pow(mk2,2)*N10r
          - 32*pow(mk2,2)*N12r - 48*pow(mk2,2)*N13r );

      Ap4KPpoiso +=  + G8 * ( 4*mp2*Z1r + 2*mp2*Z2r + 4./3.*mp2*Z3r + 
         mp2*Z8r + mp2*Z9r + 2./3.*mp2*Z10r + 4./3.*mp2*Z11r + 4./3.*
         mp2*Z12r + 2*mp2*K3r - mp2*K4r - 2./3.*mp2*K5r - 2./3.*mp2*K6r
          + 2./3.*mp2*K9r + 2./3.*mp2*K10r + 2*mk2*Z1r + 4*mk2*Z2r - 4./
         3.*mk2*Z3r - mk2*Z6r - mk2*Z8r - mk2*Z9r - 2./3.*mk2*Z10r - 4./
         3.*mk2*Z11r - 4./3.*mk2*Z12r + 4*mpp2*mpo2*mkp2*pow(mko2,-1)*
         N10r + 2*mpp2*mpo2*mkp2*pow(mko2,-1)*N11r + 2*mpp2*mpo2*N8r + 
         4*mpp2*mpo2*N9r + 2*mpp2*pow(mpo2,2)*pow(mko2,-1)*N11r + 4*
         mpp2*mkp2*N5r + 4*mpp2*mkp2*N8r - 4*mpp2*pow(mkp2,2)*pow(
         mko2,-1)*N10r - 4*mpp2*pow(mkp2,2)*pow(mko2,-1)*N11r - 4*mpo2*
         mkp2*N5r - 4*mpo2*mkp2*N8r + 4*mpo2*pow(mkp2,2)*pow(mko2,-1)*
         N10r + 4*mpo2*pow(mkp2,2)*pow(mko2,-1)*N11r - 4*pow(mpo2,2)*
         mkp2*pow(mko2,-1)*N10r - 2*pow(mpo2,2)*mkp2*pow(mko2,-1)*N11r
          - 2*pow(mpo2,2)*N8r - 4*pow(mpo2,2)*N9r - 2*pow(mpo2,3)*pow(
         mko2,-1)*N11r );

      Ap4KPpoiso +=  + G27*L7r*spe3 * (  - 576*mp2*mk2 + 288*pow(mp2,2)
          + 288*pow(mk2,2) );

      Ap4KPpoiso +=  + G27*L8r*spe3 * (  - 192*mp2*mk2 + 96*pow(mp2,2)
          + 96*pow(mk2,2) );

      Ap4KPpoiso +=  + G27*spe3 * ( 16*mp2*mk2*D1r + 12*mp2*mk2*D2r - 9
         *mp2*mk2*D4r - 3*mp2*mk2*D5r - 28./3.*mp2*mk2*D6r + 98./3.*mp2
         *mk2*D7r - 16./3.*pow(mp2,2)*D1r - 12*pow(mp2,2)*D2r + 12*pow(
         mp2,2)*D4r + 4*pow(mp2,2)*D6r - 22./3.*pow(mp2,2)*D7r - 32./3.
         *pow(mk2,2)*D1r - 3*pow(mk2,2)*D4r + 3*pow(mk2,2)*D5r + 16./3.
         *pow(mk2,2)*D6r - 76./3.*pow(mk2,2)*D7r );

      Ap4KPpoiso +=  + G27 * ( 19./3.*mp2*K3r - 19./6.*mp2*K4r - mp2*
         K5r - mp2*K6r + mp2*K9r + mp2*K10r + 10*mp2*K12r - 10./3.*mk2*
         K3r + 5./3.*mk2*K4r - 10*mk2*K12r - 8./3.*mpp2*mpo2*mkp2*pow(
         mko2,-1)*D1r + 19./3.*mpp2*mpo2*D4r - 3*mpp2*mpo2*D5r + 2./3.*
         mpp2*mpo2*D6r + 14./3.*mpp2*mpo2*D7r + 4./3.*mpp2*pow(mpo2,2)*
         pow(mko2,-1)*D1r + 3*mpp2*mkp2*D4r - 5./3.*mpp2*mkp2*D5r - 2./
         3.*mpp2*mkp2*D6r + 28./3.*mpp2*mkp2*D7r + 4./3.*mpp2*pow(
         mkp2,2)*pow(mko2,-1)*D1r + 20./3.*mpo2*mkp2*D2r - 8*mpo2*mkp2*
         D4r + 2./3.*mpo2*mkp2*D6r - 6*mpo2*mkp2*D7r - 4./3.*mpo2*pow(
         mkp2,2)*pow(mko2,-1)*D1r + 8./3.*pow(mpo2,2)*mkp2*pow(mko2,-1)
         *D1r - 20./3.*pow(mpo2,2)*D2r + 1./3.*pow(mpo2,2)*D4r + 3*pow(
         mpo2,2)*D5r - 2./3.*pow(mpo2,2)*D6r - 4./3.*pow(mpo2,2)*D7r - 
         4./3.*pow(mpo2,3)*pow(mko2,-1)*D1r - 5./3.*pow(mkp2,2)*D4r + 5.
         /3.*pow(mkp2,2)*D5r - 20./3.*pow(mkp2,2)*D7r );

      Ap4KPpoiso +=  + Ab(mp2,mu2)*ZE*G8 * ( 2 + 3./2.*mp2*pow(mk2,-1)
          );

      Ap4KPpoiso +=  + Ab(mp2,mu2)*ZE*G27 * (  - 2 + 1./6.*mp2*pow(
         mk2,-1) );

      Ap4KPpoiso +=  + Ab(mp2,mu2)*G8*spe3 * ( 73./8.*mp2 - 69./8.*mk2
          );

      Ap4KPpoiso +=  + Ab(mp2,mu2)*G27*spe3 * ( 89./6.*mp2 - 97./6.*mk2
          );

      Ap4KPpoiso +=  + Ab(mp2,mu2)*GE * ( 27./8. );

      Ap4KPpoiso +=  + Ab(mk2,mk2,mu2)*G8 * ( 1./6.*mp2 + 1./3.*mk2 );

      Ap4KPpoiso +=  + Ab(mk2,mk2,mu2)*G27 * ( 1./4.*mp2 + 1./2.*mk2 );

      Ap4KPpoiso +=  + Ab(mk2,mu2)*ZE*G8 * ( 4./3. );

      Ap4KPpoiso +=  + Ab(mk2,mu2)*ZE*G27 * ( 16./3. );

      Ap4KPpoiso +=  + Ab(mk2,mu2)*G8*spe3 * (  - 13./8.*mp2 + 5./8.*
         mk2 );

      Ap4KPpoiso +=  + Ab(mk2,mu2)*G27*spe3 * ( 667./72.*mp2 - 655./72.
         *mk2 );

      Ap4KPpoiso +=  + Ab(mk2,mu2)*GE * ( 9./4. );

      Ap4KPpoiso +=  + Ab(mpp2,mu2)*G8 * ( 1./2.*mpp2*mpo2*pow(mko2,-1)
          - 1./12.*mpp2 - 1./2.*pow(mpp2,2)*pow(mko2,-1) - 7./6.*mpo2
          + 1./2.*mkp2 + 1./4.*mko2 );

      Ap4KPpoiso +=  + Ab(mpp2,mu2)*G27 * ( 1./3.*mpp2*mpo2*pow(
         mko2,-1) + 233./36.*mpp2 - 1./3.*pow(mpp2,2)*pow(mko2,-1) - 19.
         /18.*mpo2 - 61./12.*mkp2 + 1./6.*mko2 );

      Ap4KPpoiso +=  + Ab(mpo2,mu2)*G8 * (  - 1./4.*mpp2*mpo2*pow(
         mko2,-1) + 23./24.*mpp2 + 1./6.*mpo2 + 1./4.*pow(mpo2,2)*pow(
         mko2,-1) - 3./8.*mkp2 - 1./4.*mko2 );

      Ap4KPpoiso +=  + Ab(mpo2,mu2)*G27 * ( 1./4.*mpp2*mpo2*pow(
         mko2,-1) + 281./72.*mpp2 + 13./72.*mpo2 - 1./4.*pow(mpo2,2)*
         pow(mko2,-1) - 19./6.*mkp2 + 1./4.*mko2 );

      Ap4KPpoiso +=  + Ab(mkp2,mu2)*G8 * ( 1./2.*mpp2*mkp2*pow(mko2,-1)
          + mpp2 - 1./2.*mpo2*mkp2*pow(mko2,-1) - 19./24.*mpo2 - 1./3.*
         mkp2 + 1./8.*me2 );

      Ap4KPpoiso +=  + Ab(mkp2,mu2)*G27 * ( 1./3.*mpp2*mkp2*pow(
         mko2,-1) + 46./9.*mpp2 - 1./3.*mpo2*mkp2*pow(mko2,-1) - 3./2.*
         mpo2 - 103./36.*mkp2 + 1./12.*me2 );

      Ap4KPpoiso +=  + Ab(mko2,mu2)*G8 * ( 17./24.*mpp2 - 19./24.*mpo2
          - 1./24.*mkp2 + 1./4.*mko2 - 1./8.*me2 );

      Ap4KPpoiso +=  + Ab(mko2,mu2)*G27 * ( 11./8.*mpp2 - 31./24.*mpo2
          - 29./24.*mkp2 - 2./3.*mko2 + 1./8.*me2 );

      Ap4KPpoiso +=  + Ab(me2,mu2)*ZE*G8 * (  - 5./3. + 1./6.*mp2*pow(
         mk2,-1) );

      Ap4KPpoiso +=  + Ab(me2,mu2)*ZE*G27 * (  - 5./9. - 1./6.*mp2*pow(
         mk2,-1) );

      Ap4KPpoiso +=  + Ab(me2,mu2)*G8*spe3 * (  - 1./6.*mp2 + 2./3.*mk2
          );

      Ap4KPpoiso +=  + Ab(me2,mu2)*G8 * ( 1./4.*mpp2*pow(mko2,-1)*me2
          + 13./12.*mpp2 - 1./4.*mpo2*pow(mko2,-1)*me2 - 13./12.*mpo2
          - 1./12.*mkp2 + 1./12.*mko2 );

      Ap4KPpoiso +=  + Ab(me2,mu2)*G27*spe3 * (  - 103./72.*mp2 + 187./
         72.*mk2 );

      Ap4KPpoiso +=  + Ab(me2,mu2)*G27 * (  - 1./4.*mpp2*pow(mko2,-1)*
         me2 + 17./12.*mpp2 + 1./4.*mpo2*pow(mko2,-1)*me2 - 23./18.*
         mpo2 - 49./72.*mkp2 - 1./12.*mko2 - 5./24.*me2 );

      Ap4KPpoiso +=  + Ab(me2,mu2)*GE * ( 3./8. );

      Ap4KPpoiso +=  + Bb(mp2,mp2,mk2,mu2)*ZE*G27 * ( 20./9.*mp2 - 20./
         9.*mk2 );

      Ap4KPpoiso +=  + Bb(mp2,mp2,mk2,mu2)*G8*spe3 * (  - 3*mp2*mk2 + 2
         *pow(mp2,2) + pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mp2,mp2,mk2,mu2)*G27*spe3 * (  - 9./2.*mp2*
         mk2 + 3*pow(mp2,2) + 3./2.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mp2,mp2,mk2,mu2)*GE * ( mp2 - 1./2.*mk2 );

      Ap4KPpoiso +=  + Bb(mp2,mk2,mp2,mu2)*ZE*G8 * (  - 2*mp2 + 2*mk2 )
         ;

      Ap4KPpoiso +=  + Bb(mp2,mk2,mp2,mu2)*ZE*G27 * ( 38./9.*mp2 - 38./
         9.*mk2 );

      Ap4KPpoiso +=  + Bb(mp2,mk2,mp2,mu2)*G8*spe3 * ( 3./8.*mp2*mk2 - 
         5./4.*pow(mp2,2) + 7./8.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mp2,mk2,mp2,mu2)*G27*spe3 * ( 13./12.*mp2*mk2
          - 13./12.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mp2,mk2,mp2,mu2)*GE * ( 5./4.*mp2 - 7./8.*mk2
          );

      Ap4KPpoiso +=  + Bb(mp2,me2,mk2,mu2)*G8*spe3 * ( 1./3.*mp2*mk2 - 
         1./3.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mp2,me2,mk2,mu2)*G27*spe3 * (  - 1./18.*mp2*
         mk2 + 1./18.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mk2,me2,mp2,mu2)*ZE*G8 * (  - mp2 + mk2 );

      Ap4KPpoiso +=  + Bb(mk2,me2,mp2,mu2)*ZE*G27 * ( 7./27.*mp2 - 7./
         27.*mk2 );

      Ap4KPpoiso +=  + Bb(mk2,me2,mp2,mu2)*G8*spe3 * (  - 14./3.*mp2*
         mk2 + 4./3.*pow(mp2,2) + 10./3.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mk2,me2,mp2,mu2)*G27*spe3 * ( 83./216.*mp2*
         mk2 - 7./54.*pow(mp2,2) - 55./216.*pow(mk2,2) );

      Ap4KPpoiso +=  + Bb(mk2,me2,mp2,mu2)*GE * ( 1./2.*mp2 - 5./8.*mk2
          );

      Ap4KPpoiso +=  + Bb(mpp2,mpo2,mkp2,mu2)*G8 * (  - 2./3.*mpp2*mpo2
          - 1./2.*mpp2*mkp2 + 5./6.*pow(mpp2,2) + 1./2.*mpo2*mkp2 - 1./
         6.*pow(mpo2,2) );

      Ap4KPpoiso +=  + Bb(mpp2,mpo2,mkp2,mu2)*G27 * (  - 11./6.*mpp2*
         mpo2 - 31./18.*mpp2*mkp2 + 25./9.*pow(mpp2,2) - 7./9.*mpo2*
         mkp2 + 13./18.*pow(mpo2,2) + 5./6.*pow(mkp2,2) );

      Ap4KPpoiso +=  + Bb(mpp2,mkp2,mpo2,mu2)*G8 * ( 7./12.*mpp2*mpo2
          - 3./4.*mpp2*mkp2 + 1./3.*pow(mpp2,2) - 5./12.*pow(mpo2,2) + 
         1./4.*pow(mkp2,2) );

      Ap4KPpoiso +=  + Bb(mpp2,mkp2,mpo2,mu2)*G27 * ( 13./12.*mpp2*mpo2
          - 19./18.*mpp2*mkp2 + 13./36.*pow(mpp2,2) - 25./36.*mpo2*mkp2
          - 5./18.*pow(mpo2,2) + 7./12.*pow(mkp2,2) );

      Ap4KPpoiso +=  + Bb(mpp2,mko2,mpp2,mu2)*G8 * (  - 1./2.*mpp2*mpo2
          - 3./4.*mpp2*mko2 + 1./2.*pow(mpp2,2) + 1./4.*mpo2*mko2 + 1./
         4.*mkp2*mko2 + 1./4.*pow(mko2,2) );

      Ap4KPpoiso +=  + Bb(mpp2,mko2,mpp2,mu2)*G27 * (  - 1./3.*mpp2*
         mpo2 - 1./2.*mpp2*mko2 + 1./3.*pow(mpp2,2) + 1./6.*mpo2*mko2
          + 1./6.*mkp2*mko2 + 1./6.*pow(mko2,2) );

      Ap4KPpoiso +=  + Bb(mpo2,mkp2,mpp2,mu2)*G8 * ( 3./8.*mpp2*mpo2 + 
         1./4.*mpp2*mkp2 - 1./8.*pow(mpp2,2) + 1./8.*mpo2*mkp2 - 1./2.*
         pow(mpo2,2) - 1./8.*pow(mkp2,2) );

      Ap4KPpoiso +=  + Bb(mpo2,mkp2,mpp2,mu2)*G27 * ( 2./3.*mpp2*mpo2
          + 19./24.*mpp2*mkp2 - 7./24.*pow(mpp2,2) - 1./8.*mpo2*mkp2 - 
         13./24.*pow(mpo2,2) - 1./2.*pow(mkp2,2) );

      Ap4KPpoiso +=  + Bb(mpo2,mko2,mpo2,mu2)*G8 * ( 1./2.*mpp2*mpo2 - 
         1./4.*mpp2*mko2 + 3./4.*mpo2*mko2 - 1./2.*pow(mpo2,2) - 1./4.*
         mkp2*mko2 - 1./4.*pow(mko2,2) );

      Ap4KPpoiso +=  + Bb(mpo2,mko2,mpo2,mu2)*G27 * (  - 1./2.*mpp2*
         mpo2 + 1./4.*mpp2*mko2 - 3./4.*mpo2*mko2 + 1./2.*pow(mpo2,2)
          + 1./4.*mkp2*mko2 + 1./4.*pow(mko2,2) );

      Ap4KPpoiso +=  + Bb(mkp2,mko2,mkp2,mu2)*G8 * (  - 1./2.*mpp2*mkp2
          + 1./2.*mpo2*mkp2 );

      Ap4KPpoiso +=  + Bb(mkp2,mko2,mkp2,mu2)*G27 * (  - 1./3.*mpp2*
         mkp2 + 1./3.*mpo2*mkp2 );

      Ap4KPpoiso +=  + Bb(mkp2,me2,mpp2,mu2)*G8 * (  - 7./72.*mpp2*mpo2
          + 2./9.*mpp2*mkp2 - 5./12.*mpp2*me2 + 1./8.*pow(mpp2,2) - 5./
         72.*mpo2*mkp2 + 1./24.*mpo2*me2 + 1./4.*mkp2*me2 - 13./72.*
         pow(mkp2,2) + 1./8.*pow(me2,2) );

      Ap4KPpoiso +=  + Bb(mkp2,me2,mpp2,mu2)*G27 * ( 7./72.*mpp2*mpo2
          + 29./72.*mpp2*mkp2 - 5./24.*mpp2*me2 - 1./8.*pow(mpp2,2) + 5.
         /24.*mpo2*mkp2 - 13./72.*mpo2*me2 + 11./36.*mkp2*me2 - 7./12.*
         pow(mkp2,2) + 1./12.*pow(me2,2) );

      Ap4KPpoiso +=  + Bb(mko2,me2,mpo2,mu2)*G8 * ( 1./24.*mpp2*mpo2 - 
         1./24.*mpp2*mko2 + 1./8.*mpp2*me2 - 1./72.*mpo2*mkp2 - 7./72.*
         mpo2*mko2 + 1./4.*mpo2*me2 - 5./72.*pow(mpo2,2) + 7./72.*mkp2*
         mko2 - 5./24.*mkp2*me2 - 1./24.*mko2*me2 + 1./12.*pow(mko2,2)
          - 1./8.*pow(me2,2) );

      Ap4KPpoiso +=  + Bb(mko2,me2,mpo2,mu2)*G27 * (  - 1./24.*mpp2*
         mpo2 + 1./24.*mpp2*mko2 - 1./8.*mpp2*me2 + 1./72.*mpo2*mkp2 + 
         7./72.*mpo2*mko2 - 1./4.*mpo2*me2 + 5./72.*pow(mpo2,2) - 7./72.
         *mkp2*mko2 + 5./24.*mkp2*me2 + 1./24.*mko2*me2 - 1./12.*pow(
         mko2,2) + 1./8.*pow(me2,2) );

      Ap4KPpoiso +=  + B1b(mp2,mk2,mp2,mu2)*G8*spe3 * ( 17./4.*mp2*mk2
          + 5./4.*pow(mp2,2) - 11./2.*pow(mk2,2) );

      Ap4KPpoiso +=  + B1b(mp2,mk2,mp2,mu2)*G27*spe3 * ( 13./4.*mp2*mk2
          - 13./4.*pow(mk2,2) );

      Ap4KPpoiso +=  + B1b(mp2,mk2,mp2,mu2)*GE * (  - 5./4.*mp2 + 5./4.
         *mk2 );

      Ap4KPpoiso +=  + B1b(mk2,me2,mp2,mu2)*G8*spe3 * ( 5./2.*mp2*mk2
          - 5./2.*pow(mk2,2) );

      Ap4KPpoiso +=  + B1b(mk2,me2,mp2,mu2)*G27*spe3 * ( 5./2.*mp2*mk2
          - 5./4.*pow(mp2,2) - 5./4.*pow(mk2,2) );

      Ap4KPpoiso +=  + B1b(mk2,me2,mp2,mu2)*GE * (  - 3./4.*mp2 + 3./4.
         *mk2 );

      Ap4KPpoiso +=  + B1b(mpp2,mpo2,mkp2,mu2)*G8 * ( 2*mpp2*mpo2 - 
         pow(mpp2,2) - pow(mpo2,2) );

      Ap4KPpoiso +=  + B1b(mpp2,mpo2,mkp2,mu2)*G27 * ( 3*mpp2*mpo2 - 7./
         3.*pow(mpp2,2) - 2./3.*pow(mpo2,2) );

      Ap4KPpoiso +=  + B1b(mpp2,mkp2,mpo2,mu2)*G8 * ( 1./2.*mpp2*mkp2
          - 1./2.*pow(mpp2,2) );

      Ap4KPpoiso +=  + B1b(mpp2,mkp2,mpo2,mu2)*G27 * ( 2*mpp2*mkp2 - 7./
         6.*pow(mpp2,2) - 5./6.*pow(mkp2,2) );

      Ap4KPpoiso +=  + B1b(mpp2,mko2,mpp2,mu2)*G8 * ( 1./2.*mpo2*mko2
          - 1./2.*mkp2*mko2 );

      Ap4KPpoiso +=  + B1b(mpp2,mko2,mpp2,mu2)*G27 * ( 1./3.*mpo2*mko2
          - 1./3.*mkp2*mko2 );

      Ap4KPpoiso +=  + B1b(mpo2,mkp2,mpp2,mu2)*G8 * (  - 1./4.*mpo2*
         mkp2 + 1./4.*pow(mpo2,2) );

      Ap4KPpoiso +=  + B1b(mpo2,mkp2,mpp2,mu2)*G27 * ( 1./4.*mpo2*mkp2
          + 1./6.*pow(mpo2,2) - 5./12.*pow(mkp2,2) );

      Ap4KPpoiso +=  + B1b(mpo2,mko2,mpo2,mu2)*G8 * (  - 1./2.*mpp2*
         mko2 + 1./2.*mkp2*mko2 );

      Ap4KPpoiso +=  + B1b(mpo2,mko2,mpo2,mu2)*G27 * ( 1./2.*mpp2*mko2
          - 1./2.*mkp2*mko2 );

      Ap4KPpoiso +=  + B1b(mkp2,mko2,mkp2,mu2)*G8 * ( mpp2*mko2 - mpo2*
         mko2 );

      Ap4KPpoiso +=  + B1b(mkp2,mko2,mkp2,mu2)*G27 * ( 2./3.*mpp2*mko2
          - 2./3.*mpo2*mko2 );

      Ap4KPpoiso +=  + B1b(mkp2,me2,mpp2,mu2)*G8 * (  - 1./2.*mpo2*mkp2
          + 3./4.*mpo2*me2 - 3./4.*mkp2*me2 + 1./2.*pow(mkp2,2) );

      Ap4KPpoiso +=  + B1b(mkp2,me2,mpp2,mu2)*G27 * (  - 3./4.*mpo2*
         mkp2 + 1./2.*mpo2*me2 - 1./2.*mkp2*me2 + 3./4.*pow(mkp2,2) );

      Ap4KPpoiso +=  + B1b(mko2,me2,mpo2,mu2)*G8 * ( 1./2.*mpp2*mko2 - 
         3./4.*mpp2*me2 - 1./2.*mkp2*mko2 + 3./4.*mkp2*me2 );

      Ap4KPpoiso +=  + B1b(mko2,me2,mpo2,mu2)*G27 * (  - 1./2.*mpp2*
         mko2 + 3./4.*mpp2*me2 + 1./2.*mkp2*mko2 - 3./4.*mkp2*me2 );

 return Ap4KPpoiso/(pow(fpip,4)*fkp);
}



dcomplex Ap4IKSoo(){
  using namespace inputpars;
  double mpp2 = mpp*mpp, mpo2 = mpo*mpo, mkp2 = mkp*mkp, mko2 = mko*mko,
    me2 = me*me, mu2 = mu*mu;
  double mp2 = mpo2,mk2=mko2;
  dcomplex Ap4KSooem=dcomplex(0.);
  const double mg2 = 0.;

   Ap4KSooem =
       + B1b(mg2,mp2,mp2,mu2)*G8 * (  - 4*mp2 + 4*mk2 );

      Ap4KSooem +=  + B1b(mg2,mp2,mp2,mu2)*G27 * ( 4*mp2 - 4*mk2 );

      Ap4KSooem +=  + B1b(mg2,mk2,mk2,mu2)*G8 * (  - 2*mp2 + 2*mk2 );

      Ap4KSooem +=  + B1b(mg2,mk2,mk2,mu2)*G27 * ( 2*mp2 - 2*mk2 );

      Ap4KSooem +=  + dqsqBb(mg2,mp2,mp2,mu2)*G8 * (  - 8*mp2*mk2 + 8*
         pow(mp2,2) );

      Ap4KSooem +=  + dqsqBb(mg2,mp2,mp2,mu2)*G27 * ( 8*mp2*mk2 - 8*
         pow(mp2,2) );

      Ap4KSooem +=  + dqsqBb(mg2,mk2,mk2,mu2)*G8 * ( 4*mp2*mk2 - 4*pow(
         mk2,2) );

      Ap4KSooem +=  + dqsqBb(mg2,mk2,mk2,mu2)*G27 * (  - 4*mp2*mk2 + 4*
         pow(mk2,2) );

      Ap4KSooem +=  + dqsqB1b(mg2,mp2,mp2,mu2)*G8 * ( 8*mp2*mk2 - 8*
         pow(mp2,2) );

      Ap4KSooem +=  + dqsqB1b(mg2,mp2,mp2,mu2)*G27 * (  - 8*mp2*mk2 + 8
         *pow(mp2,2) );

      Ap4KSooem +=  + dqsqB1b(mg2,mk2,mk2,mu2)*G8 * (  - 4*mp2*mk2 + 4*
         pow(mk2,2) );

      Ap4KSooem +=  + dqsqB1b(mg2,mk2,mk2,mu2)*G27 * ( 4*mp2*mk2 - 4*
         pow(mk2,2) );

  return  Ap4KSooem*e2/(pow(fpip,2)*fkp);
}



dcomplex Ap4IKSpm(){
  using namespace inputpars;
  double mpp2 = mpp*mpp, mpo2 = mpo*mpo, mkp2 = mkp*mkp, mko2 = mko*mko,
    me2 = me*me, mu2 = mu*mu;
  double mp2 = mpp2,mk2=mko2;
  dcomplex Ap4KSpmem=dcomplex(0.);
  const double mg2 = 0.;


   Ap4KSpmem =
       + Bb(mp2,mp2,mk2,mu2)*G8 * ( 2*mp2 - 4*mk2 );

      Ap4KSpmem +=  + Bb(mp2,mp2,mk2,mu2)*G27 * ( 4./3.*mp2 - 8./3.*mk2
          );

      Ap4KSpmem +=  + Bb(mg2,mp2,mp2,mu2)*G8 * (  - 8*mp2 - 4*mk2 );

      Ap4KSpmem +=  + Bb(mg2,mp2,mp2,mu2)*G27 * (  - 16./3.*mp2 - 8./3.
         *mk2 );

      Ap4KSpmem +=  + B1b(mg2,mp2,mp2,mu2)*G8 * ( 10*mk2 );

      Ap4KSpmem +=  + B1b(mg2,mp2,mp2,mu2)*G27 * ( 20./3.*mk2 );

      Ap4KSpmem +=  + B1b(mg2,mk2,mk2,mu2)*G8 * (  - 2*mp2 + 2*mk2 );

      Ap4KSpmem +=  + B1b(mg2,mk2,mk2,mu2)*G27 * (  - 4./3.*mp2 + 4./3.
         *mk2 );

      Ap4KSpmem +=  + Cb(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G8 * (  - 12*mp2*
         mk2 + 8*pow(mp2,2) + 4*pow(mk2,2) );

      Ap4KSpmem +=  + Cb(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G27 * (  - 8*mp2*
         mk2 + 16./3.*pow(mp2,2) + 8./3.*pow(mk2,2) );

      Ap4KSpmem +=  + C11b(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G8 * ( 22*mp2*
         mk2 - 24*pow(mp2,2) - 4*pow(mk2,2) );

      Ap4KSpmem +=  + C11b(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G27 * ( 44./3.*
         mp2*mk2 - 16*pow(mp2,2) - 8./3.*pow(mk2,2) );

      Ap4KSpmem +=  + C21b(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G8 * (  - 8*mp2
         *mk2 + 16*pow(mp2,2) + pow(mk2,2) );

      Ap4KSpmem +=  + C21b(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G27 * (  - 16./
         3.*mp2*mk2 + 32./3.*pow(mp2,2) + 2./3.*pow(mk2,2) );

      Ap4KSpmem +=  + C24b(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G8 * ( 16*mp2
          - 4*mk2 );

      Ap4KSpmem +=  + C24b(mg2,mp2,mp2,mp2,mk2,mp2,mu2)*G27 * ( 32./3.*
         mp2 - 8./3.*mk2 );

      Ap4KSpmem +=  + dqsqBb(mg2,mp2,mp2,mu2)*G8 * (  - 16*mp2*mk2 + 16
         *pow(mp2,2) );

      Ap4KSpmem +=  + dqsqBb(mg2,mp2,mp2,mu2)*G27 * (  - 32./3.*mp2*mk2
          + 32./3.*pow(mp2,2) );

      Ap4KSpmem +=  + dqsqBb(mg2,mk2,mk2,mu2)*G8 * ( 4*mp2*mk2 - 4*pow(
         mk2,2) );

      Ap4KSpmem +=  + dqsqBb(mg2,mk2,mk2,mu2)*G27 * ( 8./3.*mp2*mk2 - 8.
         /3.*pow(mk2,2) );

      Ap4KSpmem +=  + dqsqB1b(mg2,mp2,mp2,mu2)*G8 * ( 16*mp2*mk2 - 16*
         pow(mp2,2) );

      Ap4KSpmem +=  + dqsqB1b(mg2,mp2,mp2,mu2)*G27 * ( 32./3.*mp2*mk2
          - 32./3.*pow(mp2,2) );

      Ap4KSpmem +=  + dqsqB1b(mg2,mk2,mk2,mu2)*G8 * (  - 4*mp2*mk2 + 4*
         pow(mk2,2) );

      Ap4KSpmem +=  + dqsqB1b(mg2,mk2,mk2,mu2)*G27 * (  - 8./3.*mp2*mk2
          + 8./3.*pow(mk2,2) );

  return  Ap4KSpmem*e2/(pow(fpip,2)*fkp);
}

dcomplex Ap4IKPpo(){
  using namespace inputpars;
  double mpp2 = mpp*mpp, mpo2 = mpo*mpo, mkp2 = mkp*mkp, mko2 = mko*mko,
    me2 = me*me, mu2 = mu*mu;
  double mp2 = (mpp2+mpo2)/2.,mk2=mkp2;
  dcomplex Ap4KPpoem=dcomplex(0.);
  const double mg2 = 0.;

   Ap4KPpoem =
       + Ab(mp2,mu2)*G8 * (  - 1 );

      Ap4KPpoem +=  + Ab(mp2,mu2)*G27 * (  - 29./6. );

      Ap4KPpoem +=  + Ab(mk2,mu2)*G8 * ( 3./2. );

      Ap4KPpoem +=  + Ab(mk2,mu2)*G27 * ( 13./3. );

      Ap4KPpoem +=  + Bb(mp2,mk2,mp2,mu2)*G8 * (  - 2*mp2 + mk2 );

      Ap4KPpoem +=  + Bb(mp2,mk2,mp2,mu2)*G27 * ( 1./3.*mp2 - mk2 );

      Ap4KPpoem +=  + Bb(mg2,mp2,mp2,mu2)*G8 * (  - 4*mp2 );

      Ap4KPpoem +=  + Bb(mg2,mp2,mp2,mu2)*G27 * (  - 6*mp2 );

      Ap4KPpoem +=  + Bb(mg2,mk2,mk2,mu2)*G8 * (  - 2*mk2 );

      Ap4KPpoem +=  + Bb(mg2,mk2,mk2,mu2)*G27 * ( 10./3.*mp2 - 4./3.*
         mk2 );

      Ap4KPpoem +=  + B1b(mp2,mk2,mp2,mu2)*G8 * ( 2*mp2 - 2*mk2 );

      Ap4KPpoem +=  + B1b(mp2,mk2,mp2,mu2)*G27 * ( 4./3.*mp2 - 4./3.*
         mk2 );

      Ap4KPpoem +=  + B1b(mg2,mp2,mp2,mu2)*G8 * ( 4*mp2 );

      Ap4KPpoem +=  + B1b(mg2,mp2,mp2,mu2)*G27 * ( 13./3.*mp2 + 5*mk2 )
         ;

      Ap4KPpoem +=  + B1b(mg2,mk2,mk2,mu2)*G27 * (  - 5*mp2 );

      Ap4KPpoem +=  + Cb(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * ( 10./3.*
         mp2*mk2 - 10./3.*pow(mk2,2) );

      Ap4KPpoem +=  + C11b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G8 * (  - 4*mp2
         *mk2 );

      Ap4KPpoem +=  + C11b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * (  - 23./
         3.*mp2*mk2 - 10./3.*pow(mp2,2) + 5*pow(mk2,2) );

      Ap4KPpoem +=  + C12b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G8 * ( 4*mp2*
         mk2 - 2*pow(mk2,2) );

      Ap4KPpoem +=  + C12b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * ( 8./3.*
         mp2*mk2 + 10./3.*pow(mp2,2) + 2*pow(mk2,2) );

      Ap4KPpoem +=  + C21b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G8 * ( 2*mp2*
         mk2 + 4*pow(mp2,2) );

      Ap4KPpoem +=  + C21b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * ( 4./3.*
         mp2*mk2 + 28./3.*pow(mp2,2) - 5./3.*pow(mk2,2) );

      Ap4KPpoem +=  + C22b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G8 * (  - 6*mp2
         *mk2 + 4*pow(mp2,2) + 2*pow(mk2,2) );

      Ap4KPpoem +=  + C22b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * (  - 32./
         3.*mp2*mk2 + 28./3.*pow(mp2,2) + 4./3.*pow(mk2,2) );

      Ap4KPpoem +=  + C23b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G8 * ( 4*mp2*
         mk2 - 8*pow(mp2,2) + pow(mk2,2) );

      Ap4KPpoem +=  + C23b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * ( 28./3.*
         mp2*mk2 - 56./3.*pow(mp2,2) - 8./3.*pow(mk2,2) );

      Ap4KPpoem +=  + C24b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G8 * ( 4*mp2 + 
         2*mk2 );

      Ap4KPpoem +=  + C24b(mg2,mp2,mk2,mp2,mp2,mk2,mu2)*G27 * ( 28./3.*
         mp2 - 16./3.*mk2 );

      Ap4KPpoem +=  + dqsqBb(mg2,mp2,mp2,mu2)*G27 * (  - 10*mp2*mk2 + 
         10*pow(mp2,2) );

      Ap4KPpoem +=  + dqsqBb(mg2,mk2,mk2,mu2)*G27 * ( 20./3.*mp2*mk2 - 
         20./3.*pow(mk2,2) );

      Ap4KPpoem +=  + dqsqB1b(mg2,mp2,mp2,mu2)*G27 * ( 10*mp2*mk2 - 10*
         pow(mp2,2) );

      Ap4KPpoem +=  + dqsqB1b(mg2,mk2,mk2,mu2)*G27 * (  - 20./3.*mp2*
         mk2 + 20./3.*pow(mk2,2) );

  return  Ap4KPpoem*e2/(pow(fpip,2)*fkp);
}



dcomplex Ap4KSooIR(double eg3pi,double egfpi){
  using namespace inputpars;
  double mp2 = mpo*mpo, mk2 = mko*mko;
  double Ap2KSooiso = 0.;

      Ap2KSooiso =   (G8-G27) * ( 2*mp2 - 2*mk2 )/(pow(fpip,2)*fkp);
  
  return -Ap2KSooiso*e2*3.*pi16*log(egfpi*egfpi/ffcut_.delta);
}

dcomplex Ap4KSpmIR(double eg3pi,double egfpi){
  using namespace inputpars;
  double mp2 = mpp*mpp, mk2 = mko*mko;
  dcomplex Ap4IR = dcomplex(0.),Ap2KSpm = dcomplex(0.);

  Ap2KSpm = dcomplex((G8+2./3.*G27) * ( 2*mp2 - 2*mk2 )/(pow(fpip,2)*fkp));

  Ap4IR =  -Ap2KSpm*e2*3.*pi16*log(egfpi*egfpi/ffcut_.delta);
  Ap4IR +=  -Ap2KSpm*e2/2.*log(eg3pi*eg3pi/ffcut_.delta)*
    (4.*pi16-(mk2-2.*mp2)*CbREAL(ffcut_.delta,mp2,mp2,mk2));
  return Ap4IR;
}

dcomplex Ap4KPpoIR(double eg3pi,double egfpi){
  using namespace inputpars;
  double mp2 = (mpp*mpp+mpo*mpo)/2., mk2 = mkp*mkp;
  dcomplex Ap4IR = dcomplex(0.),Ap2KPpo=dcomplex(0.);


  Ap2KPpo =  + G27*(5./3.*mp2 - 5./3.*mk2)/(pow(fpip,2)*fkp);

  Ap4IR =  -Ap2KPpo*e2*3.*pi16*log(egfpi*egfpi/ffcut_.delta);
  Ap4IR +=  -Ap2KPpo*e2/2.*log(eg3pi*eg3pi/ffcut_.delta)*
    (4.*pi16-(-mk2)*CbREAL(ffcut_.delta,mp2,mk2,mp2));
  return Ap4IR;
}

dcomplex AKSpmg(double s1, double s2, double s3){
  using namespace photoncutoffs;
  using namespace inputpars;
  double mp2 = mpp*mpp, mk2 = mko*mko;
  double egamma = (mk2-s3)/(2.*mko);
  double t0 = (s3-mk2)/2.;
  double t1 = (s2-mp2)/2.;
  double t2 = (s1-mp2)/2.;
  double low1,low2,low3;
  double A2KSpmg = e2*pow((G8+2./3.*G27)*(mk2-mp2)/(pow(fpip,2)*fkp),2);
  double result;
  low1 = 1./t1-1./t2;
  low2 = -1./t1-1./t2;
  low3 = -low2;
  //low's theorem
//  low1 = 0.;
//  low2 = -2./t1;
//  low3 =  2./t2;
  result = -mk2*low1*low1-mp2*low2*low2-mp2*low3*low3
           -(s1-mk2-mp2)*low1*low2-(s2-mk2-mp2)*low1*low3
           -(s3-2.*mp2)*low2*low3;
  if(egamma < eg3pi){
    return dcomplex(0.);
//  low1 = 0.;
//  low2 = -2./t1;
//  low3 =  2./t2;
//  result += (-mk2*low1*low1-mp2*low2*low2-mp2*low3*low3
//           -(s1-mk2-mp2)*low1*low2-(s2-mk2-mp2)*low1*low3
//           -(s3-2.*mp2)*low2*low3);
  }
  return dcomplex(sqrt(result*A2KSpmg));
  //if (result<0.)   return dcomplex(0.,sqrt(-result*A2KSpmg));
}


dcomplex AKPpog(double s1, double s2, double s3){
  using namespace photoncutoffs;
  using namespace inputpars;
  double mp2 = (mpp*mpp+mpo*mpo)/2., mk2 = mkp*mkp;
  double egamma = (mk2-s3)/(2.*mkp);
  double t0 = (s3-mk2)/2.;
  double t1 = (s2-mp2)/2.;
  double t2 = (s1-mp2)/2.;
  double low1,low2,low3;
  double A2KPpog= e2*pow(G27*(mk2-mp2)*5./6./(pow(fpip,2)*fkp),2);
  double result;
  low1 = 1./t1+1./t0;
  low2 = -low1;
  low3 = 1./t1-1./t0;
  // Low's theorem
//  low1 = 2./t0;
//  low2 = -2./t1;
//  low3 = 0.;
  result = -mk2*low1*low1-mp2*low2*low2-mp2*low3*low3
           -(s1-mk2-mp2)*low1*low2-(s2-mk2-mp2)*low1*low3
           -(s3-2.*mp2)*low2*low3;
  if(egamma < eg3pi){
    return dcomplex(0.);
  }
//  std::cout << egamma <<' '<<result<<std::endl;
  if (result>=0.) return dcomplex(sqrt(result*A2KPpog));
  if (result<0.) return dcomplex(0.,sqrt(-result*A2KPpog));
}


dcomplex Ap2KSpmold(){
  using namespace inputpars;
  double mp2 = mpp*mpp, mk2 = mko*mko;
  double Ap2KSpmiso = 0.;

    Ap2KSpmiso +=
       + G8 * ( 2*mp2 - 2*mk2 );

      Ap2KSpmiso +=  + G27 * ( 4./3.*mp2 - 4./3.*mk2 );
  return dcomplex(Ap2KSpmiso/(pow(fpip,2)*fkp));
}

dcomplex Ap2KPpoold(){
  using namespace inputpars;
  double mp2 = (mpo*mpo+mpp*mpp)/2., mk2 = mkp*mkp;
  double Ap2KPpoiso = 0.;

      Ap2KPpoiso +=  + G27 * ( 5./3.*mp2 - 5./3.*mk2
          );

  return dcomplex(Ap2KPpoiso/(pow(fpip,2)*fkp));
}


