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

Problem when using explicit Dirac indices in FeynArts #46

Closed DavidMStraub closed 4 years ago

DavidMStraub commented 5 years ago

First of all, thanks for your great work on this package!

I am having issues doing calculations when using FeynArts models with explicit Dirac indices. For instance, consider the minimal working example below. When using GenericModel->"Lorentz", everything works as expected. When using GenericModel->"Dirac", DiracTrick throws

Error! DiracTrick has encountered a fatal problem and must abort the computation. The problem reads: Incorrect combination of dimensions and g^5 scheme!

when trying to apply things like TID to the amplitude, even though everything is D-dimensional.

$LoadFeynArts = True;
<< FeynCalc`;
top = CreateTopologies[1, 1 -> 1, ExcludeTopologies -> {Tadpoles}];
ins = InsertFields[top, {F[1, {1}]} -> {F[1, {1}]}, InsertionLevel -> {Particles},
  Model -> "QED", GenericModel -> "Dirac"];
amp = CreateFeynAmp[ins];
fcamp = FCFAConvert[amp,
  IncomingMomenta -> {p}, OutgoingMomenta -> {q}, LoopMomenta -> {k},
  DropSumOver -> True, UndoChiralSplittings -> True, ChangeDimension -> D,
  List -> False, SMP -> True]
TID[fcamp, k]

This works for GenericModel -> "Lorentz" instead of "Dirac".

vsht commented 5 years ago

Sorry for the late reply. With FeynCalc 9.2 this cannot work in principle, since there is no support for explicit Dirac indices. However, such support was added to the current dev version (aka the future FeynCalc 9.3), although mainly because of QGRAF, not FeynArts.

I did some further modifications to the code that I hope to commit soon, after which your example should work normally. At the moment I still need to do few more tests and also clarify some things with Thomas regarding the output with Dirac.gen.

I also had to refactor the initial symbol name (FermionicChain), as at the end of the day I want it to work both for Dirac and Pauli chains. This is why now they are called DiracChain and PauliChain.

vsht commented 5 years ago

So the situation is the following. As Thomas explained to me the output of GenericModel->"Dirac" still may contain fermion chains that require further reordering according to the flipping rules (cf. pp. 56-57) in the FeynArts manual. This is why even after applying DiracChainSimplify (the new FC routine that handles Dirac index contractions) one often cannot obtain a closed fermion chain.

The original motivation for having Dirac.gen was to handle theories with more than 2 fermions per vertex, where FeynArts cannot determine the relative sign and this has to be done by the processing code.

If you don't have such interactions and simply want to have explicit Dirac indices in correctly ordered chains, there is a small trick to achieve that. One has to add F to P$NonCommuting. With the latest commit to master, the following works

$LoadFeynArts = True;
<< FeynCalc`;

$FAVerbose = 0;
InitializeModel[{SM}, GenericModel -> Dirac];
P$NonCommuting = F | U;

top = CreateTopologies[1, 1 -> 1, ExcludeTopologies -> {Tadpoles}];
ins = InsertFields[top, {F[1, {1}]} -> {F[1, {1}]}, 
   InsertionLevel -> {Particles}, Model -> "QED", 
   GenericModel -> Dirac];
amp = CreateFeynAmp[ins];

fcamp = FCFAConvert[amp,
  IncomingMomenta -> {p}, OutgoingMomenta -> {q}, LoopMomenta -> {k},
  DropSumOver -> True, UndoChiralSplittings -> True, ChangeDimension -> D,
  List -> False, SMP -> True]
TID[fcamp//DiracChainSimplify, k]

However, as you can see TID is applied after the explicit Dirac indices have been eliminated via DiracChainSimplify.

The following

 TID[DCHN[-GSD[k] + SMP["m_e"], Dir3, Dir4] FAD[{k, SMP["m_e"]}, k - q], k]

still does not work, since there is a bunch of auxiliary functions that need to be added for that, e.g DiracChainExpand. This will take some more time, so let us keep this issue open for a while.

DavidMStraub commented 5 years ago

Thanks a lot for the explanation! It's great that this feature is in the works.

In our case, eventually we do want to work with 4-fermion vertices, so we are forced to use explicit Dirac indices. Our FeynArts model was generated by FeynRules, which automatically switches to explicit Dirac indices whenever a theory contains vertices with more than two fermions.

My collaborators and I also talked to Thomas to better understand the FeynArts output in this case and he explained to use that e.g. FormCalc takes care of "flipping" the vertices in case the Dirac indices do not match in the FeynArts output (see here). It would be nice of FeynCalc could do something like that as well eventually.

vsht commented 4 years ago

Sorry that it took so long. I just wanted to have the DiracChain and DiracIndex stuff to be integrated more deeply as compared to what it was before. In principle, the main ingredients are all now in the dev version and there is a bunch of new routines for dealing with open index chains: DiracChainCombine, DiracChainExpand, DiracChainFactor, DiracChainJoin.

At the end I removed an explicit DiracChainSimpliy and merged it into DiracSimplify.

Coming back to your question, what you want to do should be possible using FCChargeConjugateTransposed, which I introduced even earlier to allow calculations with Majorana spinors, cf.

https://www.feyncalc.org/forum/1458.html

Now this function also supports open chains, so for example

FCChargeConjugateTransposed[DCHN[GA[mu, 5], i, j], Explicit -> True, 
 FCE -> True]

corresponds to C ((g^mu g^5)_ij)^T C^{-1} and returns (-g^5 g^mu)_{ij}

If I understand it correctly, in the output of FeynArts (when it cannot combine the chains by itself) the C-matrices and the transposition are implicit. So then FormCalc simply assumes that and applies the charge conjugate transposed to every matrix with flipped indices. There is no automatic function for doing that in FeynCalc yet, but I suppose that with FCCCT (a shortcut FCChargeConjugateTransposed) you can write one easily, since now all the necessary bits and pieces are there.

Alternatively, if you could supply me with enough examples (just sample FeynArts output and to what it was converted by FormCalc), I could probably cook up something suitable rather soon. You can also send me the files by mail (posteo or KIT), if you don't want them to be publicly visible.

PS TID[DCHN[-GSD[k] + SMP["m_e"], Dir3, Dir4] FAD[{k, SMP["m_e"]}, k - q], k] finally works as well.

vsht commented 4 years ago

OK, at some point I needed 4-fermion operators myself, so I added the corresponding function to the dev version: FCFADiracChainJoin. However, FCFAConvert will call it automatically when it detects uncontracted Dirac indices, so usually in the output you should already get properly closed chains with correct relative signs. Your initial example now works OOTB. The same goes for FeynRules models with 4-fermion vertices.

DavidMStraub commented 4 years ago

Awesome, thanks!

vsht commented 4 years ago

So far it seems to work reasonably well. I've also just pushed some modifications to the Dirac algebra so that the chiral structure of the expression (GA[6] and GA[7]) doesn't get messed up when applying Dirac equation (via DiracEquation and Anti5). Strange that no one complained about that before.

I guess this particular issue (explicit Dirac indices for FeynArts) is now resolved, so I'm closing it. Feel free to open new issues if you spot further problems.