Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
vectorField.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 
24 #ifndef VECTOR_FIELD_H_INCLUDED
25 #define VECTOR_FIELD_H_INCLUDED
26 
27 #include "quantumField.h"
28 
29 namespace mty {
30 
31 class FieldStrength;
32 class Model;
33 
38 
39  public:
40 
44  BaseVectorBoson() = default;
45 
51  BaseVectorBoson(BaseVectorBoson const& other) = default;
52 
59  BaseVectorBoson(const std::string& t_name,
60  Gauge* t_gauge);
61 
68  BaseVectorBoson(const std::string& t_name,
69  mty::Model & model);
70 
80  BaseVectorBoson(const std::string& t_name,
81  const GaugeIrrep& irrep);
82 
90  BaseVectorBoson(const std::string& t_name,
91  Gauge* t_gauge,
92  bool t_isSelfConjugate);
93 
104  BaseVectorBoson(const std::string& t_name,
105  const GaugeIrrep& irrep,
106  bool t_isSelfConjugate);
107 
119  BaseVectorBoson(const std::string& t_name,
120  const GaugeIrrep& irrep,
121  const FlavorIrrep& flavorRep);
122 
129  BaseVectorBoson(const std::string& t_name,
130  const BaseVectorBoson* other);
131 
135  csl::Expr getEnergyDimension() const override;
136 
141  int getNDegreesOfFreedom() const override;
142 
152  csl::Expr getKineticTerm(csl::Tensor & X) override;
153 };
154 
165 
166  protected:
167 
173 
193 
194  public:
195 
203  template<class ...Args>
204  inline VectorBoson(Args&& ...args);
205 
206  void setName(std::string t_name) override;
207 
208  bool isSameSpecies(QuantumFieldParent const *other) const override;
209 
210  bool contains(QuantumFieldParent const *other) const override {
211  return isSameSpecies(other);
212  }
213 
214  void printDefinition(
215  std::ostream &out = std::cout,
216  int indentSize = 4,
217  bool header = false
218  ) const override;
219 
220  ParticleType getParticleType() const override {
221  return ParticleType::VectorBoson;
222  }
223 
224  Particle generateSimilar(std::string const& t_name) const override;
225 
226  bool hasFieldStrength() const override;
227 
233  Particle getFieldStrength() const override;
234 
238  csl::Expr getXiGauge() const override;
239 
243  mty::gauge::Choice getGaugeChoice() const override;
244 
252  Particle getGhostBoson() const override;
253 
254  Particle getConjugatedGhostBoson() const override;
255 
263  Particle getGoldstone() const override;
264 
273  void setGoldstoneBoson(Particle const& goldstone) override;
274 
283  void setGhostBoson(Particle const& ghost) override;
284 
285  void setConjugatedGhostBoson(Particle const& ghost) override;
286 
287  void setGaugeChoice(gauge::Type type) override;
288 
289  void setFieldStrength(Particle const& fieldStrength) override;
290 
291  void setBrokenParts(
292  const csl::Space* broken,
293  const std::vector<Particle>& parts) override;
294 
309  csl::Expr operator()(std::vector<csl::Index> indices,
310  const csl::Tensor& t_point) override;
311 
312  void breakParticle(
313  mty::Group *brokenGroup,
314  std::vector<std::string> const &newNames
315  ) override;
316  void breakParticle(
317  mty::FlavorGroup *brokenFlavor,
318  std::vector<mty::FlavorGroup*> const &subGroups,
319  std::vector<std::string> const &names
320  ) override;
321 
322 
323  protected:
324 
325  void initPropagator() override;
326 
327  void updateBrokenFieldStrength(csl::Space const *space);
328  void updateBrokenGhost(
329  csl::Space const *space,
330  std::shared_ptr<GhostBoson> const &local_ghost
331  );
332  void updateBrokenGoldstone(csl::Space const *space);
333 };
334 
335 class GoldstoneBoson;
336 class GhostBoson;
343 class GaugeBoson: public VectorBoson {
344 
345  private:
346 
351 
352  public:
353 
354  GaugeBoson(std::string const& t_name,
355  GaugeIrrep const& irrep,
356  GaugedGroup* group);
357 
358  GaugeBoson(const std::string& t_name,
359  GaugeBoson const* other);
360 
361  void printDefinition(
362  std::ostream &out = std::cout,
363  int indentSize = 4,
364  bool header = false
365  ) const override;
366 
367  GaugedGroup const* getGaugedGroup() const override;
368 
369  GaugedGroup* getGaugedGroup() override;
370 
371  Particle generateSimilar(std::string const& t_name) const override;
372 
373  bool isGaugeBoson() const override;
374 };
375 
390 
391  private:
392 
397 
398  public:
399 
408  FieldStrength(VectorBoson* t_vectorParent);
409 
410  void printDefinition(
411  std::ostream &out = std::cout,
412  int indentSize = 4,
413  bool header = false
414  ) const override;
415 
416  bool isSameSpecies(QuantumFieldParent const *other) const override {
417  return this == other
418  || vectorParent == other;
419  }
420 
424  ParticleType getParticleType() const override {
425  return ParticleType::FieldStrength;
426  }
427 
428  VectorBoson* getVectorParent() const;
429 
430  Particle generateSimilar(std::string const& t_name) const override;
431 
432  csl::Expr getEnergyDimension() const override;
433 };
434 
435 template<class ...Args>
436 inline VectorBoson::VectorBoson(Args&& ...args)
437  :BaseVectorBoson(std::forward<Args>(args)...)
438 {
439  choice.setName("xi_" + getName());
440  fieldStrength = csl::make_shared<FieldStrength>(this);
441  addRelative(fieldStrength);
442  initPropagator();
443 }
444 
456 template<class ...Args>
457 inline Particle vectorboson_s(Args&& ...args)
458 {
459  return csl::make_shared<VectorBoson>(std::forward<Args>(args)...);
460 }
461 
473 template<class ...Args>
474 inline Particle gaugeboson_s(Args&& ...args)
475 {
476  return csl::make_shared<GaugeBoson>(std::forward<Args>(args)...);
477 }
478 
490 template<class ...Args>
491 inline Particle fieldstrength_s(Args&& ...args)
492 {
493  return csl::make_shared<FieldStrength>(std::forward<Args>(args)...);
494 }
495 
496 
497 }
498 
499 
500 #endif
Definition: gaugedGroup.h:194
virtual void setFieldStrength(Particle const &fieldStrength)
For a VectorBoson, sets the associated FieldStrength.
Definition: quantumField.cpp:391
Definition: gauge.h:36
std::string const & getName() const
csl::Expr operator()()
Generates an instance of the field as a symbolic expression.
Definition: quantumField.cpp:1000
BaseVectorBoson()=default
Default constructor. Initializes nothing.
virtual void setGoldstoneBoson(Particle const &goldstone)
For a GaugeBoson, sets the associated GoldstoneBoson.
Definition: quantumField.cpp:438
std::shared_ptr< GhostBoson > ghost_c
Pointer to the conjugated GhostBoson associated to the vector, if there is one (for example for the W...
Definition: vectorField.h:188
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
Particle vectorboson_s(Args &&...args)
Delegates the construction of a vector boson and returns the result.
Definition: vectorField.h:457
virtual void setBrokenParts(const csl::Space *broken, const std::vector< Particle > &brokenParts)
Sets broken parts (from gauge of flavor symmetry full breaking) containing the new particles...
Definition: quantumField.cpp:928
class mty::AbstractGroup Group
Abstract base class for groups.
constexpr auto names
Names for topologies.
Definition: topology.h:72
std::shared_ptr< GhostBoson > ghost
Pointer to the GhostBoson associated to the vector, if there is one.
Definition: vectorField.h:183
csl::Expr getEnergyDimension() const override
Definition: vectorField.cpp:92
Definition: gauge.h:137
ParticleType getParticleType() const override
Definition: vectorField.h:424
virtual void setGhostBoson(Particle const &ghost)
For a GaugeBoson, sets the associated GhostBoson.
Definition: quantumField.cpp:444
virtual void setName(std::string t_name)
csl::Expr getKineticTerm(csl::Tensor &X) override
Calculates the kinetic term for the vector boson.
Definition: vectorField.cpp:103
GaugedGroup * gaugedGroup
Raw pointer to the gauged group associated with the gauge boson.
Definition: vectorField.h:350
virtual Particle generateSimilar(std::string const &t_name) const =0
Pure virtual function. Generates a partical similar to the current object, changing only the name...
mty::gauge::Choice choice
Gauge choice for the vector, modifying also properties of the Ghost and Goldstone boson (if some are ...
Definition: vectorField.h:172
Implementation of vector bosons in AMRTY.
Definition: vectorField.h:164
Goldstone boson class.
Definition: goldstoneField.h:39
std::vector< const Space *> space
Definition: flavor.h:37
virtual csl::Expr getXiGauge() const
For a GaugeBoson, returns the expression of in the current gauge.
Definition: quantumField.cpp:374
VectorBoson * vectorParent
Raw pointer to the vector boson associated with the FieldStrength.
Definition: vectorField.h:396
Particle fieldstrength_s(Args &&...args)
Delegates the construction of a field strength and returns the result.
Definition: vectorField.h:491
GaugeIrrep irrep
Representation of the field in the gauge gauge.
Definition: quantumField.h:260
Field strength object in MARTY.
Definition: vectorField.h:389
virtual bool hasFieldStrength() const
Tells if the particle has a FieldStrength.
Definition: quantumField.cpp:381
std::shared_ptr< GoldstoneBoson > goldstone
Pointer to the GoldstoneBoson associated to the vector, if there is one.
Definition: vectorField.h:178
virtual Particle getFieldStrength() const
For a VectorBoson, returns the associated FieldStrength if it exists.
Definition: quantumField.cpp:386
FlavorIrrep flavorRep
Representation of the field in the flavor flavor.
Definition: quantumField.h:286
void initPropagator() override
Initializes default propagators for the particle. This function is called automatically in the constr...
Definition: vectorField.cpp:194
Definition: gaugedGroup.h:100
Definition: flavor.h:133
Particle gaugeboson_s(Args &&...args)
Delegates the construction of a gauge boson and returns the result.
Definition: vectorField.h:474
virtual bool isGaugeBoson() const
Tells if the particle is a gauge boson.
Definition: quantumField.cpp:369
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
virtual Particle getGoldstone() const
For a vector boson in a non abelian gauged group, returns the associated Goldstone boson...
Definition: quantumField.cpp:294
Contains all objects in the theory. In particular QuantumField objects, Gauge, Flavor, Particle...
Definition: model.h:68
std::shared_ptr< FieldStrength > fieldStrength
Pointer to the FieldStrength associated to the vector.
Definition: vectorField.h:192
Base class for parents of QuantumField objects.
Definition: quantumField.h:152
VectorBoson(Args &&...args)
Delegates any arguments to the BaseVectorBoson::BaseVectorBoson() constructors and creates the associ...
Definition: vectorField.h:436
Base class for vector objects.
Definition: vectorField.h:37
virtual void initPropagator()
Initializes default propagators for the particle. This function is called automatically in the constr...
Definition: quantumField.cpp:502
Gauge boson implementation in MARTY.
Definition: vectorField.h:343
Contains QuantumField and QuantumFieldParent, basic objects handling quantum fields as csl expression...
virtual Particle getGhostBoson() const
For a GoldstoneBoson, returns the associated Golstone boson of there is one.
Definition: quantumField.cpp:428
int getNDegreesOfFreedom() const override
Definition: vectorField.cpp:97