FeynCalc / feyncalc

Mathematica package for algebraic calculations in elementary particle physics.
https://feyncalc.github.io
GNU General Public License v3.0
310 stars 87 forks source link

What should be the expected usage and behaviour of ChangeDimension[] ? #39

Closed HBelusca closed 5 years ago

HBelusca commented 6 years ago

11.2.0 for Microsoft Windows (64-bit) (September 11, 2017)

9.3.0 (development) (7cc253f8329342eba934b8167396c9712cffea4f)


During a loop computation in dimensional regularization in Breitenlohner-Maison scheme (1-loop scalar self-energy with fermion loop and chiral couplings; k1 is the external momentum), I obtain a result whose divergent part structurally looks like:

I ( Pair[Momentum[k1, -4 + D], Momentum[k1, -4 + D]] * (product_of_Yukawas) + Pair[Momentum[k1, D], Momentum[k1, D]] * (other_product_of_Yukawas) ) / EpsilonUV

(I neglected here the factors of Pi etc...). Note that when I compute the same process using the "usual" (aka. naive) gamma_5 scheme I obtain the usual result:

I ( Pair[Momentum[k1, D], Momentum[k1, D]] * (other_product_of_Yukawas) ) / EpsilonUV

Then I used ChangeDimension[divPart, 4] to turn the external momentum back to 4-dimension, but this has as an effect to turn also the Pair[Momentum[k1, -4 + D], Momentum[k1, -4 + D]] to Pair[Momentum[k1, 4], Momentum[k1, 4]], therefore messing with the result.

The question is then, is it the correct usage of ChangeDimension, or its expected behaviour, or am I doing something wrong here, aka. should I do something else to filter out all the D-4-dimensional momenta? (I know that if I replace D by 4 this will transform these momenta to Momentum[k1,0] which will provide the "correct" behaviour, but this may mess with other things...)

HBelusca commented 6 years ago

Note: it seems that FCReplaceD[] may be the answer, but I would like a confirmation.

vsht commented 6 years ago

The main purpose of ChangeDimension is to convert all FeynCalc objects in the particular expression to the specified dimension. This is conceptually different from taking the D->4 limit, since the function does not replace D with something else, but rather it replaces any dimension with the specified dimension. That is

ChangeDimension[a SPD[p, q] + b SPE[p, q], 4, FCE -> True]

will return a SP[p, q] + b SP[p, q] and not just a SP[p, q] as one might naively expect. This is fine, since otherwise things like

ChangeDimension[SP[p, q], D, FCE -> True]

returning SPD[p,q] would not make much sense. Notice that ChangeDimension does not modify the explicit values of D, i.e. if your expression contains some D-dependent prefactors like (D - 2)/(D - 1) SPD[p, q], those prefactors will not be changed. This is again consistent with the behavior of the function. Otherwise, applying ChangeDimension[exp,D] to a 4-dimensional expression you would expect it to recover the original D-dependence of the prefactors, which is not possible.

FCReplaceD is indeed more useful when taking the D->4 limit. This is because when you take the limit, you want to replace the D's in the prefactors with say 4-2 Epsilon, but you do not want to change the dimension of the involved FeynCalc objects. For example, if I naively write

FCI[(D - 2)/(D - 1) SPD[p, q]] /. D -> 4 - 2 Epsilon

I obtain the awkward looking

((2 - 2 Epsilon) Pair[Momentum[p, 4 - 2 Epsilon],  Momentum[q, 4 - 2 Epsilon]])/(3 - 2 Epsilon)

which is not what I want. With FCReplaceD, however, the dimension of the scalar product is left untouched, so that

FCReplaceD[(D - 2)/(D - 1) SPD[p, q], D -> 4 - 2 Epsilon]

gives me

((2 - 2 Epsilon) Pair[Momentum[p, D], Momentum[q, D]])/(3 - 2 Epsilon)

as desired.

For you particular example, there are two possible ways to process:

  1. If you insist on obtaining the result with an explicit D-4 dimensional part and killing that piece only at the very end, you can simply use a replacement rule res/.D->4. Since you have already calculated the loop integrals and exposed the epsilon poles, you are not loosing any finite parts, so that the replacement rule will be essentially applied only to your scalar products and Dirac structures. Of course, you can also use a more refined rule like Momentum[a,D-4] ->0 or so. Notice that the simple D->4 rule is sufficient, since all dimensional FeynCalc objects evaluate to zero in "0" dimensions:
FCI[GAE[mu]] /. D -> 4
FCI[GSE[p]] /. D -> 4
FCI[SPE[mu]] /. D -> 4
  1. You can also set the D-4 dimensional part of you external momenta to zero before doing the calculation. This will also speed up the tensor reduction and the Dirac algebra, since a lot of "useless" terms will be set to zero from the very beginning. If p is your external momentum, it is sufficient to use
Momentum[p,D-4]=0;

The nice thing about FeynCalc 9.3, is that there FCClearScalarProducts[] is able to remove such assignments, while in FeynCalc 9.2 one would need to restart the kernel in order to make Momentum[p,D-4] nonvanishing again. But in the development version this is not needed

Momentum[p, D - 4] = 0;
FVE[p, mu]

FCClearScalarProducts[]
FVE[p, mu]

Compare

$BreitMaison = True;
FCClearScalarProducts[];

int = FVD[l, mu] FVE[l, nu] FV[l, rho] FAD[l, l - p]
TID[int, l]

with

Momentum[p, D - 4] = 0;
int = FVD[l, mu] FVE[l, nu] FV[l, rho] FAD[l, l - p]
TID[int, l]

Hope that helps.