Changes between Initial Version and Version 1 of ToolBox


Ignore:
Timestamp:
Feb 16, 2010, 10:25:00 AM (15 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ToolBox

    v1 v1  
     1
     2== The !ToolBox ==
     3
     4The !FeynRules !ToolBox provides the user a developper environment for building up his new model inside Mathmatica®. The !ToolBox contains a set of Mathmatica functions that are useful even before and independently of the calculation of Feynman rules. These functions can serve the user as a starting point to develop his own routines, using the full power of Mathematica. The user can like this develop ad expand his own !ToolBox. The current version of the !ToolBox contains
     5   1. Routines to expand over all the suppressed indices in the lagrangian, as well as writing the lagrangian into a flavor-expanded form.
     6   1. Routines to pick out different pieces of a lagrangian (kinetic terms, mass terms, cubic interactions, ...)
     7   1. Routines to check if all kinetic and mass terms are flavor diagonal.
     8   1. Checking if the Lagrangian is hermitian.
     9   1. A routine for checking quantum number conservation in the lagrangian.
     10   1. Routines to calculate the field strength tensor of a vector field, as well as its dual.
     11   1. Routines to manipulate the vertex lists produced by !FeynRules.
     12   1. Routines for numerical evaluation of the parameters.
     13   1. A set of boolean functions ( ''e.g.'' {{{FieldQ}}}), useful for the development of new routines.
     14
     15The most recent version of the !ToolBox is provided together with the [:CoreCode:package], or it can as well be downloaded from below.
     16
     17
     18
     19=== Current content of the !ToolBox ===
     20==== Miscellaneous ====
     21
     22The !ToolBox contains a set of boolean functions which can be usefull when writing new routines, ''e.g.''
     23
     24{{{FieldQ[ψ]}}} returns True if the symbol ψ was defined as a field. Undefined otherwise.
     25
     26Other boolean functions for fields that work in the same way are {{{FermionQ}}}, {{{BosonQ}}}, {{{ScalarFieldQ}}}, {{{GhostFieldQ}}}, {{{VectorFieldQ}}}, {{{DiracFieldQ}}}, {{{MajoranaFieldQ}}}, {{{Spin2FieldQ}}}, {{{SelfConjugateQ}}}.
     27
     28Similarly, there is a set of boolean functions for parameters:
     29
     30{{{numQ[c]}}} returns {{{True}}} if {{{c}}} is a scalar parameter, ''i.e.'' {{{c}}} is a ''c'' -number. Undefined otherwise.
     31
     32{{{CnumQ[c]}}} returns {{{True}}} if {{{c}}} is a complex scalar parameter, and {{{False}}} for real scalar parameters. Undefined otherwise.
     33
     34{{{TensQ[T]}}} returns {{{True}}} if the symbol {{{T}}} represents a tensor (e.g. CKM matrix). Undefined otherwise.
     35
     36{{{UnitaryQ[T]}}} returns {{{True}}} if the symbol {{{T}}} represents a unitary tensor. Undefined otherwise. Functions that work in the same way: {{{HermitianQ}}}, {{{OrthogonalQ}}}.
     37
     38Another usefull function to build user-defined routines is =$IndList=:
     39
     40=$IndList[ψ]= returns the list of symbols carried by the symbol ψ.
     41==== Numerical evaluation of parameters ====
     42
     43{{{NumericalValue[p]}}} returns the numerical value of the parameter {{{p}}}. If {{{p}}} is an internal parameter given in terms of algebraic relations to others parameters, {{{NumericalValue}}} evaluates this algebraic relation to return a number. If no numerical value could be obtained, {{{NoValue}}} is returned.
     44==== Index and flavor expansion ====
     45
     46The !ToolBox has a routine which allows to represent explicitly the lagrangian with all indices. Let us consider as an example the lagrangian descripbing the coupling of the charged leptons to the photon:
     47{{{L = I lbar.Ga[mu].del[l,mu] + ee lbar.Ga[mu].l A[mu]
     48}}}
     49
     50where l represents the class of the charge leptons ( {{{e}}}, {{{m}}}, {{{tt}}}). {{{ExpandIndices[L]}}} returns the lagrangian {{{L}}} with all indices written explicitly:
     51{{{{{{ExpandIndices[L] = I Ga[mu,r,s] lbar[r,f].del[l[s,f],mu] + ee Ga[mu,r,s] lbar[r,f].l[s,f] A[mu]}}} }}}
     52
     53where {{{r}}}, {{{s}}} represent the {{{Spin}}} indices of the leptons, and {{{f}}} the {{{Generation}}} index.
     54
     55In a similar way, one can ask the code to expand over the flavor indices in the lagrangian (see the [[UserManual][user manual] forfurther information):
     56{{{ExpandIndices[L, FlavorExpand -> True] = I Ga[mu,r,s] ebar[r].del[e[s],mu] + ee Ga[mu,r,s] ebar[r].e[s] A[mu]
     57                                         +I Ga[mu,r,s] mbar[r].del[m[s],mu] + ee Ga[mu,r,s] mbar[r].m[s] A[mu]
     58                                         +I Ga[mu,r,s] ttbar[r].del[tt[s],mu] + ee Ga[mu,r,s] ttbar[r].tt[s] A[mu]}}}
     59
     60The option {{{IndexExpand}}} works in a similar fashion.
     61
     62{{{ExpandIndices}}} has some additional options:
     63   * {{{ExpandIndices[L, MaxParticles -> n]}}} selects those terms of the lagrangian which invole at most {{{n}}} fields.
     64   * {{{ExpandIndices[L, MinParticles -> n]}}} selects those terms of the lagrangian which invole at least {{{n}}} fields.
     65   * {{{ExpandIndices[L, MaxCanonicalDimension -> n]}}} selects those terms of the lagrangian canonical dimension is at most {{{n}}}.
     66   * {{{ExpandIndices[L, MinCanonicalDimension -> n]}}} selects those terms of the lagrangian canonical dimension is at least {{{n}}}
     67   * {{{ExpandIndices[L, SelectParticles -> {{...}, {...}}]}}} selects those terms of the lagrangian which invole the field content specified in the list, ''e.g.'' {{{ExpandIndices[L, SelectParticles -> {{e, ebar, A}, {m, mbar, A}}, FlavorExpand -> True]}}} selects only the electron and muon QED couplings. Notice that the appearance of {{{FlavorExpand}}} is crucial in order to find the correct pieces! As a general rule, only mass eigenstates should be selected by this option.
     68
     69==== Selection of different pieces of a lagrangian ====
     70
     71During the model building phase, it might sometimes be convenient to just select a specific substructure of the whole lagrangian, ''e.g.'' the kinetic terms. This can be done using the function
     72{{{GetKineticTerms[L] = I lbar.Ga[mu].del[l,mu] }}}
     73
     74Functions that work in a similar way: {{{GetMassTerms}}}, {{{GetQuadraticTerms}}}, {{{GetInteractionTerms}}}. All of these functions make use of {{{ExpandIndices}}}, and share all its properties concerning flavor expansion, i.e.
     75{{{GetKineticTerms[L, FlavorExpand -> True]}}}
     76
     77first flavor-expands the lagrangian, then looks for the kinetic terms.
     78
     79There is another selection function available: {{{SelectFieldContent[L, ''list'' ]}}} is equivalent to {{{ExpandIndices[L, SelectParticles -> ''list'' ]}}}.
     80==== Checking for flavor diagonal lagrangians ====
     81
     82It is convenient to check that the lagrangian is actually written in terms of mass eigenstates, i.e. that all the quadratic terms in the lagrangian are diagonal. This is done via
     83
     84{{{CheckDiagonalQuadraticTerms}}} : Checks whether all quadratic terms are flavor diagonal.
     85
     86{{{CheckDiagonalKineticTerms}}} : Checks whether all kinetic terms are flavor diagonal.
     87
     88{{{CheckDiagonalMassTerms}}} : Checks whether all mass terms are flavor diagonal.
     89
     90All of these functions make use of {{{ExpandIndices}}}, and share all its properties concerning flavor expansion, i.e.
     91{{{CheckDiagonalMassTerms[L, FlavorExpand -> True]}}}
     92
     93first flavor-expands the lagrangian, then checks whether all mass terms are diagonal.
     94==== Checking for quantum number conservation ====
     95
     96{{{CheckQuantumNumbers[L]}}} checks if all quantum numbers are conserved in the lagrangian.
     97
     98{{{CheckQuantumNumbers[L, QN -> {QN1, QN2}]}}} checks if the quantum numbers {{{QN1}}}, {{{QN2}}}, ... are conserved in the lagrangian.
     99
     100This functions make use of {{{ExpandIndices}}}, and share all its properties concerning flavor expansion, i.e.
     101{{{CheckQuantumNumbers[L, FlavorExpand -> True]}}}
     102
     103first flavor-expands the lagrangian, then checks whether quantum numbers are conserved.
     104==== Check for hermiticity ====
     105
     106{{{CheckHermiticity[L]}}} checks if the lagrangian {{{L}}} is hermitian. {{{CheckHermiticity}}} has the same options as {{{FeynmanRules}}}.
     107
     108==== Field strength tensors ====
     109
     110The !ToolBox contains routines that allow to build in an automated way the field strength tensors for vector fields:
     111   * For abelian vector fields {{{FS[A, mu, nu] = del[A[nu],mu] - del[A[mu] ,nu]}}}
     112   * For non abelian vector fields {{{{{{FS[A, mu, nu, a, f, g] = del[A[nu, a],mu] - del[A[mu,a] ,nu] + g f[a ,b ,c] A[mu,b] A[nu,c]}}} }}}
     113
     114where {{{A}}} denotes the gauge boson, {{{mu}}} and {{{nu}}} the Lorentz indices of the field strength tensor, {{{a}}}, {{{b}}}, {{{c}}} the adjoint color indices, {{{f}}} the structure constant and {{{g}}} is the name of the gauge coupling constant.
     115
     116'''Warning''': This definition for {{{FS}}} uses an implicit sign convention for the term in {{{A[mu, b] A[nu, c]}}}! This convention must be consistent with the sign convention used for the covariant derivation in order to insure gauge invariance!
     117
     118The dual of the field strength tensor can e obtained via the {{{Dual}}} function:
     119   * {{{Dual[FS][A, mu, nu]}}} is the dual of {{{FS[A, mu, nu]}}}, {{{Dual[FS][A, mu, nu] = 1/2 Eps[mu, nu, rho, sig] FS[A, rho, sig]. }}}
     120   * {{{Dual[FS][A, mu, nu, a, f, g]}}} is the dual of {{{FS[A, mu, nu, a, f, g]}}}.
     121==== Manipulating the vertex lists ====
     122
     123The results obtained by {{{FeynmanRules}}} are stored in the function {{{Vertices[ ]}}} (see the [:UserManual:user manual]). {{{Vertices[ ]}}} is a lis, whose entries are two-component lists:
     124   * The first entry contains a list whose entries are the particles that enter the vertex, ''e.g.'' {{G, 1}, {u, 2}, {ubar, 3}}. Each particle is represented by its symbol, followed by an integer number which labels its indices inside the vertex.
     125   * The second entry is the analytic expression of the vertex.
     126===== SelectVertices =====
     127   * {{{SelectVertices[Vertices[...], {G, u, ubar}]}}} extract the vertex ={G, u, ubar}= out of the vertex list {{{Vertices[...]}}}.
     128   * {{{SelectVertices[Vertices[...], {{G, G, G}, {G,G,G}, ...}]}}} extract the vertices ={{G, G, G}, {G,G,G}, ...}= out of the vertex list {{{Vertices[...]}}}.
     129===== Imposing momentum conservation =====
     130   * {{{MomentumReplace[{{{G,1}, {G,2}, {G,3}}, < ''analytic expression'' >}, n]}}} replaces the momentum of the particle with the tag {{{n}}} everywhere by the minus the sum of all the other particles.
     131   * {{{ApplyMomentumConservation[Vertices[...]]}}} is equvalent to applying {{{MomentumReplace[ . , 1]}}} to each element of {{{Vertices[...]}}}. Mathematica is a registered trademark of Wolfram Research, Inc.
     132
     133-- Main.ClaudeDuhr - 09 Feb 2008
     134
     135