Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
quantumField.h
Go to the documentation of this file.
1 // This file is part of MARTY.
2 //
3 // MARTY is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // MARTY is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with MARTY. If not, see <https://www.gnu.org/licenses/>.
15 
22 #ifndef QUANTUMFIELD_H
23 #define QUANTUMFIELD_H
24 
25 #include <typeinfo>
26 #include "mrtError.h"
27 #include "gauge.h"
28 #include "flavor.h"
29 #include "iterable.h"
30 #include "quantumNumber.h"
31 #include "latexLink.h"
32 #include "doc_brown_link.h"
33 
34 
35 namespace mty {
40 enum class Chirality {
41  Left = 0,
42  Right = 1,
43  None = 2
44 };
45 
54 
55 inline
56 std::ostream &operator<<(std::ostream &out, Chirality chir)
57 {
58  switch(chir) {
59  case Chirality::Left: out << "Left"; break;
60  case Chirality::Right: out << "Right"; break;
61  default: out << "No chirality";
62  }
63  return out;
64 }
65 
66  class Particle;
67  class QuantumField;
68  class WeylFermion;
69  class DiracFermion;
70  class GaugeBoson;
71  class GhostBoson;
72  class GoldstoneBoson;
73 
86 inline csl::Tensor defaultSpaceTimePoint = csl::tensor_s(
87  "X",
88  &csl::Minkowski
89  );
90 
91 enum class ParticleType {
92 
96  GhostBoson,
100 };
101 
102 std::ostream &operator<<(
103  std::ostream &out,
104  ParticleType type
105  );
106 
120 struct PartnerShip {
121  int self { -1 };
122  int partner { -1 };
123  bool isLeft { false };
124 
125  bool isHappyWith(PartnerShip const &other) const {
126  // Sufficient condition
127  return self != -1 && self == other.partner;
128  }
129 };
130 
153 
154  public:
155 
184  using Propagator_func = std::function<
185  csl::Expr(QuantumField const&,
186  QuantumField const&,
187  csl::Tensor &,
188  bool)>;
189 
190  protected:
191 
195  bool bosonic;
196 
204  bool selfConjugate = false;
205 
210  bool integratedOut = false;
211 
216  bool physical = true;
217 
222  bool enabledInDiagrams = true;
223 
227  csl::Expr mass = CSL_0;
228 
232  csl::Expr width = CSL_0;
233 
238  drawer::ParticleType drawType = drawer::ParticleType::None;
239 
245 
251 
256 
261 
266  bool polarizationSumInitialized = false;
267 
272 
277 
281  const Flavor* flavor;
282 
287 
294  mutable
295  std::map<QuantumNumber::ID, QuantumNumber::Value> qNumbers;
296 
305  std::map<QuantumFieldParent const*, Propagator_func> propagator;
306 
307  std::vector<std::weak_ptr<mty::QuantumFieldParent>> relatives;
308 
309  public:
310 
314  QuantumFieldParent() = default;
315 
319  QuantumFieldParent(QuantumFieldParent const& other) = default;
320 
330  QuantumFieldParent(const std::string& t_name,
331  int t_spin,
332  Gauge* t_gauge);
333 
343  QuantumFieldParent(const std::string& t_name,
344  int t_spin,
345  const GaugeIrrep& irrep);
346 
358  QuantumFieldParent(const std::string& t_name,
359  int t_spin,
360  Gauge* t_gauge,
361  bool t_isSelfConjugate);
362 
373  QuantumFieldParent(const std::string& t_name,
374  int t_spin,
375  const GaugeIrrep& irrep,
376  bool t_isSelfConjugate);
377 
388  QuantumFieldParent(const std::string& t_name,
389  int t_spin,
390  const GaugeIrrep& irrep,
391  const FlavorIrrep& flavorRep);
392 
398  QuantumFieldParent(const std::string& t_name,
399  const QuantumFieldParent* other);
400 
406  drawer::ParticleType getDrawType() const;
407 
408  virtual bool contains(QuantumFieldParent const *other) const {
409  return this == other;
410  }
411 
412  virtual bool isSameSpecies(QuantumFieldParent const *other) const {
413  return this == other;
414  }
415 
416  virtual ParticleType getParticleType() const;
417 
424  void setDrawType(drawer::ParticleType type);
425 
432  virtual Particle generateSimilar(std::string const& t_name) const = 0;
433 
440  virtual Chirality getChirality() const;
441 
446  virtual csl::Expr getEnergyDimension() const = 0;
447 
454  virtual int getNDegreesOfFreedom() const = 0;
455 
456  int getNGaugeDegreesOfFreedom() const;
457 
465  virtual bool hasSpecialContractionWith(QuantumField const& other) const;
466 
472  virtual bool isChiral() const;
473 
483  virtual Particle getChiralityCounterPart() const;
484 
493  virtual Particle getWeylFermion(Chirality chirality) const;
494 
501  virtual Particle getDiracParent() const;
502 
510  virtual Particle getGoldstone() const;
511 
512  virtual void setDiracParent(Particle const &diracFermion);
513 
524  virtual csl::Expr getPropagator(QuantumField const& self,
525  QuantumField const& other,
526  csl::Tensor & P,
527  bool external) const;
528 
542  virtual csl::Expr getInvPropagator(QuantumField const& other,
543  QuantumField const& self,
544  csl::Tensor & P,
545  bool external) const;
546 
562  virtual csl::Expr getKineticTerm(csl::Tensor & X);
563 
570  virtual bool isGaugeBoson() const;
571 
579  virtual csl::Expr getXiGauge() const;
580 
586  virtual Particle getVectorBoson() const;
587 
588  virtual GaugedGroup const* getGaugedGroup() const;
589  virtual GaugedGroup* getGaugedGroup();
590 
597  virtual Particle getGoldstoneBoson() const;
598 
605  virtual Particle getGhostBoson() const;
606 
607  virtual Particle getConjugatedGhostBoson() const;
608 
622  virtual void setGoldstoneBoson(Particle const& goldstone);
623 
636  virtual void setGhostBoson(Particle const& ghost);
637 
638  virtual void setConjugatedGhostBoson(Particle const& ghost);
639 
658  virtual bool hasFieldStrength() const;
659 
667  virtual Particle getFieldStrength() const;
668 
677  virtual void setFieldStrength(Particle const& fieldStrength);
678 
687  bool isContractibleWith(QuantumFieldParent const* other) const;
688 
695  bool isBosonic() const;
696 
703  bool isFermionic() const;
704 
711  virtual bool isAntiCommuting() const;
712 
722  bool isSelfConjugate() const;
723 
724  bool isReal() const;
725 
735  bool isPhysical() const;
736 
745  bool isEnabledInDiagrams() const;
746 
768  bool isIntegratedOut() const;
769 
778  int getSpinDimension() const;
779 
785  csl::Expr getMass() const;
786 
787  csl::Expr getSquaredMass() const;
788 
794  csl::Expr getWidth() const;
795 
796  virtual mty::gauge::Choice getGaugeChoice() const;
797 
803  Irrep getLorentzRep() const;
804 
810  Gauge* getGauge() const;
811 
818  GaugeIrrep getGaugeIrrep() const;
819 
829  Irrep getGroupIrrep(const Group* group) const;
830 
831  Flavor const* getFlavor() const;
832 
833  void setFlavor(Flavor const *flavor);
840  FlavorIrrep getFlavorIrrep() const;
841 
851  Irrep getFlavorIrrep(const FlavorGroup* group) const;
852 
864  std::vector<csl::Index> getSpaceIndex(
865  const std::string& nameIndex = "") const;
866 
873  std::vector<csl::Index> getGaugeIndex(std::vector<std::string> names
874  = std::vector<std::string>()) const;
875 
882  std::vector<csl::Index> getFlavorIndex(std::vector<std::string> names
883  = std::vector<std::string>()) const;
884 
894  std::vector<csl::Index> getFullSetOfIndices() const;
895 
906  QuantumNumber::Value getQuantumNumber(
907  QuantumNumber const* number) const;
908 
925  QuantumNumber::Value getQuantumNumber(
926  QuantumField const* instance,
927  QuantumNumber const* number) const;
928 
940  csl::Expr getInstance(csl::Tensor point = defaultSpaceTimePoint);
941 
954  void integrateOut(bool value = true);
955 
964  void setMass(const std::string& t_mass);
965 
976  void setMass(const std::string& t_mass, long double value);
977 
987  void setMass(const csl::Expr& t_mass);
988 
996  void setWidth(const csl::Expr& t_width);
997 
998  virtual void setGaugeChoice(gauge::Type type);
999 
1007  void setSelfConjugate(bool t_selfConjugate);
1008 
1018  void setPhysical(bool t_physical);
1019 
1030  void setEnabledInDiagrams(bool t_enabled);
1031 
1043  void adjustFlavorRep(Flavor* t_flavor);
1044 
1045  void setGaugeIrrep(const GaugeIrrep& newRep);
1057  void setGroupRep(Group* group,
1058  const Irrep& newRep);
1059 
1074  void setGroupRep(std::string const& group,
1075  std::vector<int> const& highestWeight);
1076 
1077  void setGroupRep(std::string const& group,
1078  int charge);
1079 
1091  void setFlavorRep(const FlavorGroup* group,
1092  const Irrep& newRep);
1093  void setFundamentalFlavorRep(
1094  std::string const &flavorGroup
1095  );
1096 
1103  void addQuantumNumber(QuantumNumber const& number,
1104  QuantumNumber::Value value);
1105 
1115  virtual void setBrokenParts(
1116  const csl::Space* broken,
1117  const std::vector<Particle>& brokenParts);
1118 
1129  std::vector<csl::Parent> breakSpace(
1130  const csl::Space* broken,
1131  const std::vector<const csl::Space*>& newSpace,
1132  const std::vector<size_t>& pieces
1133  ) const override;
1134 
1141  QuantumFieldParent& operator=(const QuantumFieldParent& other) = default;
1142 
1149  friend
1150  std::ostream& operator<<(std::ostream& fout, const QuantumFieldParent& obj);
1151 
1160  csl::Expr operator()(const csl::Tensor& t_point) override;
1161 
1171  csl::Expr operator()(csl::Index index,
1172  const csl::Tensor& t_point) override;
1173 
1182  csl::Expr operator()(std::vector<int> const& indices,
1183  const csl::Tensor& t_point) override;
1184 
1194  csl::Expr operator()(std::vector<csl::Index> indices,
1195  const csl::Tensor& t_point) override;
1196 
1206  csl::Expr operator()(csl::Index polarization,
1207  std::vector<int> const& indices,
1208  const csl::Tensor& t_point);
1209 
1219  csl::Expr operator()();
1220 
1230  csl::Expr operator()(csl::Index index) override;
1231 
1241  csl::Expr operator()(std::vector<csl::Index> indices) override;
1242 
1260  csl::Expr operator()(csl::Index polarization,
1261  csl::Index index,
1262  const csl::Tensor& momentum);
1263 
1282  csl::Expr operator()(csl::Index polarization,
1283  std::vector<csl::Index> indices,
1284  const csl::Tensor& momentum);
1285 
1286  operator csl::Expr();
1287 
1288  virtual void breakParticle(
1289  mty::Group *brokenGroup,
1290  std::vector<std::string> const &newNames
1291  );
1292  virtual void breakParticle(
1293  mty::FlavorGroup *brokenFlavor,
1294  std::vector<mty::FlavorGroup*> const &subGroups,
1295  std::vector<std::string> const &names
1296  );
1297 
1298  protected:
1299 
1300  void addRelative(std::weak_ptr<mty::QuantumFieldParent> const &particle);
1301 
1302  std::weak_ptr<mty::QuantumFieldParent> removeRelative(
1303  QuantumFieldParent const *particle
1304  );
1305 
1306  void checkRelatives();
1307 
1308  template<class Func>
1309  void applyToRelatives(Func &&func);
1310 
1311  void printQuantumDefinition(
1312  std::ostream &out,
1313  int indentSize
1314  ) const;
1315 
1321  virtual void initPropagator();
1322 
1328  void initIndexSpaces();
1329 
1335  void initPolarizationSum();
1336 
1345  void setPropagator(QuantumFieldParent const* other,
1346  Propagator_func prop);
1347 
1365  friend
1367  QuantumFieldParent* right,
1369 
1380  friend
1383 
1384 };
1385 
1409 class Particle: public std::shared_ptr<QuantumFieldParent> {
1410 
1411  public:
1412 
1413  INHERIT_SHARED_PTR_CONSTRUCTOR(Particle, mty::QuantumFieldParent)
1414 
1415 
1423  template<class ...Args>
1424  inline
1425  csl::Expr operator()(Args&& ...args)
1426  {
1427  return (**this)(std::forward<Args>(args)...);
1428  }
1429 
1440  template<class ...Args>
1441  inline
1443  const csl::Index& index,\
1444  Args&& ...args)
1445  {
1446  return (**this)(polar, index, std::forward<Args>(args)...);
1447  }
1448 
1458  template<class ...Args>
1459  inline
1460  csl::Expr operator()(const std::vector<int>& indices,\
1461  Args&& ...args)
1462  {
1463  return (**this)(indices, std::forward<Args>(args)...);
1464  }
1465 
1475  template<class ...Args>
1476  inline
1477  csl::Expr operator()(std::initializer_list<int> indices,\
1478  Args&& ...args)
1479  {
1480  return (**this)(indices, std::forward<Args>(args)...);
1481  }
1482 
1493  template<class ...Args>
1494  inline
1496  const std::vector<int>& indices,\
1497  Args&& ...args)
1498  {
1499  return (**this)(polar, indices, std::forward<Args>(args)...);
1500  }
1501 
1512  template<class ...Args>
1513  inline
1515  const std::vector<csl::Index>& indices,\
1516  Args&& ...args)
1517  {
1518  return (**this)(polar, indices, std::forward<Args>(args)...);
1519  }
1520 
1531  template<class ...Args>
1532  inline
1534  std::initializer_list<int> indices,\
1535  Args&& ...args)
1536  {
1537  return (**this)(polar, indices, std::forward<Args>(args)...);
1538  }
1539 
1550  template<class ...Args>
1551  inline
1553  std::initializer_list<csl::Index> indices,\
1554  Args&& ...args)
1555  {
1556  return (**this)(polar, indices, std::forward<Args>(args)...);
1557  }
1558 
1568  template<class ...Args>
1569  inline
1570  csl::Expr operator()(const std::vector<csl::Index>& indices,\
1571  Args&& ...args)
1572  {
1573  return (**this)(indices, std::forward<Args>(args)...);
1574  }
1575 
1585  template<class ...Args>
1586  inline
1587  csl::Expr operator()(std::initializer_list<csl::Index> indices,\
1588  Args&& ...args)
1589  {
1590  return (**this)(indices, std::forward<Args>(args)...);
1591  }
1592 
1593  operator csl::Expr()
1594  {
1595  return csl::Expr(**this);
1596  }
1597 };
1598 
1615 
1616  protected:
1617 
1627  bool particle = true;
1628 
1636  bool external = false;
1637 
1638  bool onShell = false;
1639 
1648  bool incoming = true;
1649 
1664  csl::IndexStructure derivativeIndices {};
1665 
1684  PartnerShip partnerShip {};
1685 
1686  public:
1687 
1695  QuantumField(const csl::Tensor& t_vector,
1696  const csl::Parent& t_parent);
1697 
1705  QuantumField(const csl::Tensor& t_vector,
1706  const csl::Parent& t_parent,
1707  const std::vector<csl::Index>& indices);
1708 
1716  QuantumField(const csl::Tensor& t_vector,
1717  const csl::Parent& t_parent,
1718  const csl::IndexStructure& indices);
1719 
1720  public:
1721 
1722  template<typename ...Args>
1723  friend csl::Expr quantumfield_s(Args&& ...args);
1724 
1731  QuantumField();
1732 
1736  QuantumField(QuantumField const&) = default;
1737 
1741  QuantumField(QuantumField&&) = default;
1742 
1746  QuantumField& operator=(const QuantumField& other) = default;
1747 
1751  QuantumField& operator=(QuantumField&&) = default;
1752 
1760  inline
1762  return static_cast<QuantumFieldParent*>(parent.get());
1763  }
1764 
1773  inline
1775  return std::static_pointer_cast<QuantumFieldParent>(parent);
1776  }
1777 
1778  auto getGaugeIrrep() const {
1779  auto rep = getQuantumParent()->getGaugeIrrep();
1780  return (conjugated) ? rep.getConjugatedRep() : rep;
1781  }
1782  auto getFlavorIrrep() const {
1783  auto rep = getQuantumParent()->getFlavorIrrep();
1784  return rep;
1785  }
1786  template<class GroupType>
1787  auto getGroupIrrep(GroupType &&group) const {
1788  auto rep = getQuantumParent()->getGroupIrrep(std::forward<GroupType>(group));
1789  return (conjugated) ? rep.getConjugatedRep() : rep;
1790  }
1791  template<class FlavorGroupType>
1792  auto getFlavorIrrep(FlavorGroupType &&group) const {
1793  auto rep = getQuantumParent()->getFlavorIrrep(std::forward<FlavorGroupType>(group));
1794  return rep;
1795  }
1796 
1801  int getSpinDimension() const;
1802 
1807  csl::Expr getEnergyDimension() const;
1808 
1813  csl::Expr getMass() const;
1814 
1819  csl::Expr getWidth() const;
1820 
1821  PartnerShip getPartnerShip() const {
1822  return partnerShip;
1823  }
1824 
1830  bool isChiral() const;
1831 
1836  Chirality getChirality() const;
1837 
1853  void setChirality(Chirality chirality);
1854 
1860  bool isGaugeBoson() const;
1861 
1866  csl::Expr getXiGauge() const;
1867 
1873  csl::Expr getSquaredMass() const;
1874 
1881  bool getConjugated() const;
1882 
1889  bool isExternal() const;
1890 
1891  bool isOnShell() const;
1892 
1898  bool isBosonic() const;
1899 
1905  bool isFermionic() const;
1906 
1912  bool isAntiCommuting() const;
1913 
1919  bool isSelfConjugate() const;
1920 
1921  bool isReal() const override;
1922 
1932  bool isPhysical() const;
1933 
1940  bool isContractibleWith(const QuantumField& other) const;
1941 
1954  bool isExactlyContractiblewith(const QuantumField& other) const;
1955 
1962  void addDerivative(const csl::Index& index);
1963 
1972  bool hasDerivative() const;
1973 
1980  csl::IndexStructure getDerivativeStructure() const;
1981 
1997  csl::Expr getPropagator(const QuantumField& other,
1998  csl::Tensor& vertex) const;
1999 
2008  csl::Expr getLSZInsertion(
2009  const csl::Tensor& momentum,
2010  bool ruleMode = false,
2011  bool lock = false
2012  ) const;
2013 
2020  QuantumField getConjugatedField() const;
2021 
2022  csl::Expr contraction(csl::Expr_info other) const override;
2023 
2024  virtual csl::Expr matrixChargeConjugation(csl::Expr_info other) const;
2025 
2031  std::optional<csl::Expr> getComplexConjugate() const override;
2032 
2040  void conjugate();
2041 
2048  void setExternal(bool t_external);
2049 
2050  void setOnShell(bool t_onShell);
2051 
2058  virtual void setIncoming(bool t_incoming);
2059 
2066  virtual void setParticle(bool t_particle);
2067 
2068  void setPartnerShip(PartnerShip const &t_partnerShip) {
2069  partnerShip = t_partnerShip;
2070  }
2071 
2077  void setDerivativeStructure(const csl::IndexStructure& structure);
2078 
2085  bool getCommutable() const override;
2086 
2102  bool commutesWith(csl::Expr_info other, int sign=-1) const override;
2103 
2112  bool hasContractionProperty(csl::Expr_info expr) const override;
2113 
2118  csl::unique_Expr copy_unique() const override;
2119 
2125  bool isIndexed() const override;
2126 
2138  bool operator==(csl::Expr_info other) const override;
2139 
2157  bool compareWithDummy(csl::Expr_info other,
2158  std::map<csl::Index, csl::Index>& constraints,
2159  bool keepAllCosntraints = false) const override;
2160 
2168  bool operator<(const QuantumField& other) const;
2169 
2177  bool operator==(const QuantumField& other) const;
2178 
2186  bool operator!=(const QuantumField& other) const;
2187 
2195  bool isParticle() const;
2196 
2204  bool isIncoming() const;
2205 
2213  bool isIncomingParticle() const;
2214 
2222  bool isOutgoingParticle() const;
2223 
2231  bool isIncomingAntiParticle() const;
2232 
2240  bool isOutgoingAntiParticle() const;
2241 };
2242 
2243 template<class Func>
2244 void QuantumFieldParent::applyToRelatives(Func &&func) {
2245  checkRelatives();
2246  for (auto &rel : relatives) {
2247  // Making sure to avoid any loop dependency here
2248  auto shared = rel.lock();
2249  auto self = shared->removeRelative(this);
2250  func(mty::Particle(shared));
2251  if (self.lock())
2252  shared->addRelative(self);
2253  }
2254 }
2255 
2263 template<typename ...Args>
2264 csl::Expr quantumfield_s(Args&& ...args)
2265 {
2266  auto field = csl::make_shared<QuantumField>(std::forward<Args>(args)...);
2267  field->getCanonicalPermutation();
2268  return field;
2269 }
2270 
2289 csl::Expr getMomentumSum(const std::vector<QuantumField>& insertions,
2290  const std::vector<csl::Tensor>& impulsions,
2291  const csl::Index& index);
2292 
2300 std::ostream& operator<<(std::ostream& fout,
2301  const mty::QuantumField& field);
2302 
2303 
2304 } // End of namespace mty
2305 
2306 #endif /* QUANTUMFIELD_H */
Definition: gaugedGroup.h:194
Contains the QuantumNumber class.
Particle getParticle() const
Returns a mty::Particle, pointer to the parent of the field.
Definition: quantumField.h:1774
Definition: gauge.h:36
std::function< csl::Expr(QuantumField const &, QuantumField const &, csl::Tensor &, bool)> Propagator_func
Type definition. A Propagator_func is a function called to get the propagator result of the contracti...
Definition: quantumField.h:188
size_t firstGaugeIndex
Position of the first gauge index, after flavor indices.
Definition: quantumField.h:271
std::ostream & operator<<(std::ostream &fout, csl::Type type)
This class inherits from std::shared_ptr<QuantumFieldParent> and should be used instead of direct Qua...
Definition: quantumField.h:1409
Namespace of MARTY.
Definition: 2HDM.h:31
csl::Expr operator()(const std::vector< csl::Index > &indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1570
size_t firstSpaceIndex
Position of the first space index, after flavor and gauge indices.
Definition: quantumField.h:276
csl::Expr operator()(std::initializer_list< csl::Index > indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1587
class mty::AbstractGroup Group
Abstract base class for groups.
constexpr auto names
Names for topologies.
Definition: topology.h:72
csl::Expr quantumfield_s(Args &&...args)
Creates and returns an expression corresponding to a QuantumField.
Definition: quantumField.h:2264
QuantumFieldParent * getQuantumParent() const
Returns a pointer to the QuantumFieldParent of the field.
Definition: quantumField.h:1761
Definition: gauge.h:137
This class represents quantum numbers of a theory, like for example baryon number B...
Definition: quantumNumber.h:44
Chirality
Chirality for fermions. Either Left or Right for WeylFermion, or None for DiracFermion.
Definition: quantumField.h:40
csl::Expr operator()(const csl::Index &polar, const std::vector< csl::Index > &indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1514
Implementation of vector bosons in AMRTY.
Definition: vectorField.h:164
Goldstone boson class.
Definition: goldstoneField.h:39
Definition: flavor.h:37
csl::Expr operator()(const csl::Index &polar, std::initializer_list< csl::Index > indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1552
int Value
Integer type for quantum number value.
Definition: quantumNumber.h:55
csl::Expr operator()(Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1425
GaugeIrrep irrep
Representation of the field in the gauge gauge.
Definition: quantumField.h:260
Field strength object in MARTY.
Definition: vectorField.h:389
std::map< QuantumNumber::ID, QuantumNumber::Value > qNumbers
List of quantum numbers of the field.
Definition: quantumField.h:295
Chirality operator!(Chirality init)
Returns the inverse chirality with respect to init.
Definition: quantumField.cpp:32
Class deriving from csl::TensorFieldElement, may enter expressions. In contrary to QuantumFieldParent...
Definition: quantumField.h:1614
FlavorIrrep flavorRep
Representation of the field in the flavor flavor.
Definition: quantumField.h:286
csl::Expr operator()(const std::vector< int > &indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1460
Definition: gaugedGroup.h:100
Weyl fermion, two-component Chiral particle.
Definition: fermionicField.h:41
Definition: flavor.h:133
bool operator==(const Expr &a, const Expr &b)
Definition: flavor.h:72
csl::Expr operator()(std::initializer_list< int > indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1477
const Flavor * flavor
Pointer to the flavor the particle is a representation of.
Definition: quantumField.h:281
csl::Tensor defaultSpaceTimePoint
Default space-time point when not given while defining a QuantumField.
Definition: quantumField.h:86
Structure containing data about fermion ordering.
Definition: quantumField.h:120
Handles the irreducible representation of a given semi-simple algebra.
Definition: representation.h:42
Gauge * gauge
Pointer to the gauge the particle is a representation of.
Definition: quantumField.h:255
Ghost boson, created with the vector bosons in non abelian gauge groups.
Definition: ghostField.h:41
Type
Different types of gauge ficing parameter for gauge boson propagators.
Definition: gaugedGroup.h:92
bool bosonic
True if the field is bosonic.
Definition: quantumField.h:195
void AddCustomPropagator(QuantumFieldParent *left, QuantumFieldParent *right, QuantumFieldParent::Propagator_func propagator)
Definition: quantumField.cpp:1648
Group * stGroup
Pointer to the space-time group. For know it is the Lorentz group, algebra.
Definition: quantumField.h:244
Irrep spin
Spin representation in stGroup. To have a number corresponding to the spin, see getSpinDimension().
Definition: quantumField.h:250
csl::Expr getMomentumSum(const std::vector< QuantumField > &insertions, const std::vector< csl::Tensor > &impulsions, const csl::Index &index)
Creates and returns the sum of momentums in a process, taking into account incoming or outgoing parti...
Definition: quantumField.cpp:1676
csl::Expr operator()(const csl::Index &polar, const std::vector< int > &indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1495
Base class for parents of QuantumField objects.
Definition: quantumField.h:152
Dirac or Majorana fermion in MARTY.
Definition: fermionicField.h:159
std::map< QuantumFieldParent const *, Propagator_func > propagator
Contains all propagators for the field with other.
Definition: quantumField.h:305
GaugeIrrep getGaugeIrrep() const
Returns the gauge representation containing all individual group representations of the field in the ...
Definition: quantumField.cpp:590
csl::Expr operator()(const csl::Index &polar, const csl::Index &index, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1442
bool operator<(const Expr &a, const Expr &b)
bool operator!=(const Expr &a, const Expr &b)
Gauge boson implementation in MARTY.
Definition: vectorField.h:343
csl::Expr operator()(const csl::Index &polar, std::initializer_list< int > indices, Args &&...args)
Delegates the arguments to QuantumFieldParent::operator()() of the managed object.
Definition: quantumField.h:1533
Scalar boson, spin 0 particles in MARTY.
Definition: scalarField.h:35