Closed DavidMStraub closed 4 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
.
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.
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.
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.
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.
Awesome, thanks!
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.
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 usingGenericModel->"Dirac"
,DiracTrick
throwswhen trying to apply things like
TID
to the amplitude, even though everything is D-dimensional.11.3.0 for Linux x86 (64-bit) (March 7, 2018)
9.2.0
Yes
This works for
GenericModel -> "Lorentz"
instead of"Dirac"
.