Name: Vladyslav Shtabovenko Date: 12/23/14-01:44:34 PM Z


Hi,

it is not a bug. The thing is that OneLoop does not know how your
external momenta are related to each other, which prevents certain
simplifications from happening. Here is a very simple example. Consider
the following term that might occur in your amplitude after taking the
limit D->4

(GA[p1+k]-m2).SpinorU[p2,m2]

For a human it is clear that this is zero by the equation of motion.
However, without knowing that p1+k===p2, DiracSimplify cannot put this
to zero. For this reason it is useful to “power cylce” through momentum
conservation to ensure that all possible simplifications have indeed
been applied.

Coming back to your code:

1) sp[p1, Polarization[k]] should probably be p1epk not p2epk
2) Do not set sp[p1, Polarization[k]] -> p1epk and sp[p2,
Polarization[k]] -> p2epk, since this prevents simplifications that
occur when you insert p2->p1+k and p1->p2-k
3) It is useful to get rid of StandardMatrixElement here.

Here is your original code

dm[mu_] := DiracMatrix[mu, Dimension -> D]
ds[p_] := DiracSlash[p]
gA := I (AL dm[7] +
     AR dm[6])(*lepton scalar fermion Yukawa vertex*)
gB :=
  I (BL dm[7] + BR dm[6])(*fermion scalar lepton Yukawa vertex*)

sp[p_, q_] := ScalarProduct[p, q]

onshell = {sp[p1, p1] -> m1^2, sp[p2, p2] -> m2^2, sp[k, k] -> 0,
   sp[k, p1] -> (m2^2 - m1^2)/2, sp[k, p2] -> (m2^2 - m1^2)/2,
   sp[p1, p2] -> (m1^2 + m2^2)/2}

div = {B0[m1^2, mf^2, ms^2] -> Div, B0[m2^2, mf^2, ms^2] -> Div,
    B0[0, mf^2, ms^2] -> Div, B0[0, mf^2, mf^2] -> Div,
    B0[0, ms^2, ms^2] -> Div};

num1 = SpinorUBar[p1, m1].gA.(ds[q + p2 - k] + mf).ds[
      Polarization[k]].(ds[q + p2] + mf).gB.SpinorU[p2, m2] // FCI;
amp1 = num1 FeynAmpDenominator[PropagatorDenominator[q + p2 - k, mf],
    PropagatorDenominator[q + p2, mf], PropagatorDenominator[q, ms]]
num2 = SpinorUBar[p1,
     m1].gA.(ds[q + p2 - k] + mf).gB.(ds[p1] + m2).ds[
     Polarization[k]].SpinorU[p2, m2] // FCI; amp2 =
  num2 FeynAmpDenominator[PropagatorDenominator[q + p1, mf],
    PropagatorDenominator[p2 - k, m2], PropagatorDenominator[q, ms]]
num3 = SpinorUBar[p1, m1].ds[
      Polarization[k]].(ds[p2] + m1).gA.(ds[q + p2] + mf).gB.SpinorU[
      p2, m2] // FCI;
amp3 = num3 FeynAmpDenominator[PropagatorDenominator[p2, m1],
    PropagatorDenominator[q + p2, mf], PropagatorDenominator[q, ms]]

SetOptions[OneLoop, Dimension -> D];
ans = -I/Pi^2 (OneLoop[q, amp1 + amp2 + amp3] /. onshell //
        PaVeReduce) /. div // Simplify;
test = Coefficient[ans, Div] // Simplify

As you said, the result is not zero. So let us power cycle through the
momentum conservation p2===p1+k

test // ReplaceAll[#, StandardMatrixElement[x_] :> x] & //
             ReplaceAll[#, k -> p2 - p1] & // MomentumExpand //
           DiracSimplify //
          ReplaceAll[#, StandardMatrixElement[0] -> 0] & //
         ReplaceAll[#, p2 -> p1 + k] & // MomentumExpand //
       DiracSimplify //
      ReplaceAll[#, StandardMatrixElement[0] -> 0] & //
     ReplaceAll[#, p1 -> p2 - k] & // MomentumExpand //
   DiracSimplify // Simplify

and the result is zero of course. Obviously, the momenta routing
that you chose in your fists e-mail was more convenient to obtain
all the cancellations without much effort. The other routing is less
convenient, so that a bit of additional work is required here.

At the end, the result of course does not depend on the way how momenta
are routed, but a particular choice can make computations simpler.

P.S. Instead of defining dm[mu_] := DiracMatrix[mu, Dimension -> D] and
ds[p_] := DiracSlash[p] you could just use GAD[mu] and GSD[p], see
<https://github.com/FeynCalc/feyncalc/wiki/FAQ#fci_fce>

Cheers,
Vladyslav

On 21/12/14 17:32, Lingxiao Xu wrote:
> In my previous message, I’ve made two small mistakes.
> 1)I should use PaVeReduce before “div” substitution, namely
> ans = -I/Pi^2 (OneLoop[q, amp1 + amp2 + amp3] /. onshell //
> PaVeReduce) /. div // Simplify;
> 2)further need to define sp[p1, p2] -> (m1^2 + m2^2)/2 in “onshell”.
> then the result is zero.
>
> However, I just made some modification in the amplitude with the relation p2=p1+k, then the result is not zero.
>
> In[2]:= (*some shorthands*)
> dm[mu_] := DiracMatrix[mu, Dimension -> D]
> ds[p_] := DiracSlash[p]
> gA := I (AL dm[7] + AR dm[6])(*lepton scalar fermion Yukawa vertex*)
> gB := I (BL dm[7] + BR dm[6])(*fermion scalar lepton Yukawa vertex*)
> sp[p_, q_] := ScalarProduct[p, q]
>
> In[7]:= onshell = {sp[p1, p1] -> m1^2, sp[p2, p2] -> m2^2,
> sp[k, k] -> 0, sp[k, p1] -> (m2^2 - m1^2)/2,
*> sp[k, p2] -> (m2^2 - m1^2)/2, sp[p1, p2] -> (m1^2