Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
gaugedGroup.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 
25 #ifndef GAUGEDGROUP_H_INCLUDED
26 #define GAUGEDGROUP_H_INCLUDED
27 
28 #include "group.h"
29 #include "SU_N_algebra.h"
30 #include "generator.h"
31 
32 namespace mty::gauge {
33 
34  enum class GroupType {
35  U1,
36  SU,
37  SO,
38  Sp,
39  E6,
40  E7,
41  E8,
42  F4,
43  G2
44  };
45 
46  std::ostream& operator<<(
47  std::ostream& fout,
48  GroupType type
49  );
50 }
51 
52 
53 
54 namespace mty {
55 
56 class QuantumField;
57 class QuantumFieldParent;
58 class Particle;
59 class GaugeBoson;
60 class GhostBoson;
61 class Gauge;
62 
63 } // End of namespace mty
64 
69 namespace mty::gauge {
92 enum Type {
93 
98 };
99 
100 class Choice {
101 
102  public:
103 
104  Choice()
105  :choice(Type::Feynman),
106  xi(csl::variable_s("xi"))
107  {
108  xi->setElementary(true);
109  setGauge(Type::Feynman);
110  }
111 
112  csl::Expr getXi() const {
113  return xi;
114  }
115 
116  Type getChoice() const {
117  return choice;
118  }
119 
120  void setName(std::string const &t_name) {
121  xi->setName(t_name);
122  }
123 
124  void setGauge(Type t_choice)
125  {
126  choice = t_choice;
127  csl::Expr value;
128  switch(choice) {
129  case Lorenz: value = CSL_0; break;
130  case Feynman: value = CSL_1; break;
131  case Unitary: value = CSL_INF; break;
132  default: value = CSL_UNDEF;
133  }
134  xi->setValue(value);
135  }
136 
137  private:
138 
139  Type choice;
140  const csl::Expr xi;
141 };
142 
143 } // End of namespace mty::gauge
144 
145 namespace mty {
146 
147 template<class Type>
148 class IrrepMap {
149 
150 public:
151 
152  using Pair = std::pair<mty::Irrep, Type>;
153 
154  IMPLEMENTS_STD_VECTOR_NO_OP(Pair, elements)
155 
156  const_iterator find(mty::Irrep const &t_key) const {
157  auto iter = begin();
158  while (iter != end()) {
159  if (key(*iter) == t_key)
160  break;
161  ++iter;
162  }
163  return iter;
164  }
165  iterator find(mty::Irrep const &t_key) {
166  auto iter = begin();
167  while (iter != end()) {
168  if (key(*iter) == t_key)
169  break;
170  ++iter;
171  }
172  return iter;
173  }
174 
175  Type &operator[](mty::Irrep const &rep) {
176  for (auto &el : elements)
177  if (key(el) == rep)
178  return value(el);
179  elements.push_back({rep, Type()});
180  return value(elements.back());
181  }
182 
183 private:
184 
185  inline static mty::Irrep &key (Pair &p) { return p.first; };
186  inline static Type &value(Pair &p) { return p.second; };
187  inline static mty::Irrep const &key (Pair const &p) { return p.first; };
188  inline static Type const &value(Pair const &p) { return p.second; };
189 
190  std::vector<Pair> elements;
191 };
192 
193 
194 class GaugedGroup {
195 
196  public:
197 
198  GaugedGroup(SemiSimpleGroup* t_group,
199  Gauge* gauge,
200  std::string const& bosonName,
201  bool addGhost);
202 
203  GaugedGroup(SemiSimpleGroup* t_group,
204  Gauge* gauge,
205  std::string const& bosonName,
206  bool addGhost,
207  const csl::Expr& t_coupling);
208 
209  virtual ~GaugedGroup();
210 
211  virtual mty::gauge::GroupType getType() const = 0;
212 
213  std::string getName() const {
214  return group->getName();
215  }
216 
217  SemiSimpleGroup* getGroup() const;
218 
219  bool isBroken() const;
220 
221  SemiSimpleAlgebra const *getAlgebra() const {
222  return group->getAlgebra();
223  }
224 
225  mty::gauge::Choice getGaugeChoice() const;
226 
227  csl::Expr getEffectiveQuadraticCasimir(
228  mty::Irrep const &irrep
229  ) const;
230 
231  csl::Expr getCA() const;
232 
233  csl::Expr getCF() const;
234 
235  mty::Generator getF() const;
236 
237  csl::Tensor getD(size_t p) const;
238 
239  virtual csl::Tensor getDTilde() const;
240 
241  void setGaugeChoice(gauge::Type t_choice);
242 
243  std::string getNameGenerator() const;
244 
245  void setNameGenerator(const std::string& newName);
246 
247  csl::Expr getCouplingConstant() const;
248 
249  void setBroken(bool t_broken);
250 
251  void setCouplingConstant(const csl::Expr& expr);
252 
253  Particle buildVectorBoson();
254 
255  Particle buildGhost();
256 
257  AlgebraState getHighestWeight(const csl::Space* space) const;
258 
259  virtual csl::Expr covariantDerivative(
260  QuantumFieldParent& field,
261  const csl::Index& mu,
262  const std::vector<csl::Index>& fieldIndices,
263  csl::Tensor& point) = 0;
264 
265  csl::Expr covariantDerivative(const csl::Expr& field,
266  const csl::Index& mu);
267 
268  mty::Generator getGenerator(const Irrep& field);
269  mty::Generator getGenerator(const QuantumFieldParent& field);
270  mty::Generator getGenerator(std::vector<int> const &labels);
271 
272  protected:
273 
274  bool isFieldInTrivialRep(const QuantumFieldParent& field) const;
275 
276  virtual
277  void setGeneratorProperties(Irrep const& rep,
278  mty::Generator& generator);
279 
280  bool hasGeneratorForRep(const Irrep& irrep) const;
281 
282  virtual void generateRepGenerator(const Irrep& irrep);
283 
284  void initF();
285 
286  protected:
287 
288  Gauge* gauge;
289 
290  SemiSimpleGroup* group;
291 
292  bool broken;
293 
294  csl::Expr coupling;
295 
296  std::string nameGenerator = "T";
297 
298  std::string nameBoson;
299 
300  bool ghostEnabled = false;
301 
302  const csl::Space* adjointSpace;
303 
304  mty::Generator f;
305 
306  mutable
307  std::map<size_t, csl::Tensor> d;
308 
309  IrrepMap<mty::Generator> generator;
310 
312 
314 
320  mutable
321  std::vector<std::pair<AlgebraState, const csl::Space*>> vectorSpaces;
322 };
323 
324 
325 class U1Gauged: public GaugedGroup {
326 
327  public:
328 
329  U1Gauged(SemiSimpleGroup* t_group,
330  Gauge* gauge,
331  std::string const& nameBoson,
332  bool addGhost);
333 
334  U1Gauged(SemiSimpleGroup* t_group,
335  Gauge* gauge,
336  std::string const& nameBoson,
337  bool addGhost,
338  const csl::Expr& t_coupling);
339 
340  ~U1Gauged(){};
341 
342  mty::gauge::GroupType getType() const override;
343 
344  csl::Expr covariantDerivative(QuantumFieldParent& field,
345  const csl::Index& mu,
346  const std::vector<csl::Index>& fieldIndices,
347  csl::Tensor& point) override;
348 };
349 
351 
352  public:
353 
355  Gauge* gauge,
356  std::string const& nameBoson,
357  bool addGhost);
358 
360  Gauge* gauge,
361  std::string const& nameBoson,
362  bool addGhost,
363  const csl::Expr& t_coupling);
364 
365  ~NonAbelianGauged(){};
366 
367  csl::Expr covariantDerivative(QuantumFieldParent& field,
368  const csl::Index& mu,
369  const std::vector<csl::Index>& fieldIndices,
370  csl::Tensor& point) override;
371 
372  void setGeneratorProperties(Irrep const& rep,
373  mty::Generator& generator) override;
374 
375  protected:
376 
377  bool isAdjointGenerator(mty::Generator const &tensor) const;
378 
379  int getGeneratorDim(mty::Generator const &tensor) const;
380 };
381 
382 class SUGauged: public NonAbelianGauged {
383 
384  public:
385 
386  inline static csl::Expr a = CSL_HALF;
387 
388  public:
389 
390  SUGauged(SemiSimpleGroup* t_group,
391  Gauge* gauge,
392  std::string const& nameBoson,
393  bool addGhost);
394 
395  SUGauged(SemiSimpleGroup* t_group,
396  Gauge* gauge,
397  std::string const& nameBoson,
398  bool addGhost,
399  const csl::Expr& t_coupling);
400 
401  ~SUGauged(){};
402 
403  mty::gauge::GroupType getType() const override;
404 
405  void setGeneratorProperties(Irrep const& rep,
406  mty::Generator& generator) override;
407 
408  private:
409 
410  void init_f_d_ABC();
411 };
412 
413 class SOGauged: public NonAbelianGauged {
414 
415  public:
416 
417  inline static csl::Expr a = CSL_1;
418 
419  public:
420 
421  SOGauged(SemiSimpleGroup* t_group,
422  Gauge* gauge,
423  std::string const& nameBoson,
424  bool addGhost);
425 
426  SOGauged(SemiSimpleGroup* t_group,
427  Gauge* gauge,
428  std::string const& nameBoson,
429  bool addGhost,
430  const csl::Expr& t_coupling);
431 
432  ~SOGauged(){};
433 
434  mty::gauge::GroupType getType() const override;
435 
436  void setGeneratorProperties(Irrep const& rep,
437  mty::Generator& generator) override;
438 
439  csl::Tensor getDTilde() const override;
440 
441  void initDTilde();
442 
443  private:
444 
445  csl::Tensor d_tilde;
446 };
447 
448 class SpGauged: public NonAbelianGauged {
449 
450  public:
451 
452  inline static csl::Expr a = CSL_1;
453 
454  public:
455 
456  SpGauged(SemiSimpleGroup* t_group,
457  Gauge* gauge,
458  std::string const& nameBoson,
459  bool addGhost);
460 
461  SpGauged(SemiSimpleGroup* t_group,
462  Gauge* gauge,
463  std::string const& nameBoson,
464  bool addGhost,
465  const csl::Expr& t_coupling);
466 
467  ~SpGauged(){};
468 
469  mty::gauge::GroupType getType() const override;
470 
471  void setGeneratorProperties(Irrep const& rep,
472  mty::Generator& generator) override;
473 
474 };
475 
476 class E6Gauged: public NonAbelianGauged {
477 
478  public:
479 
480  inline static csl::Expr a = CSL_1;
481 
482  inline static csl::Expr alpha = 5 * CSL_HALF;
483 
484  public:
485 
486  E6Gauged(SemiSimpleGroup* t_group,
487  Gauge* gauge,
488  std::string const& nameBoson,
489  bool addGhost);
490 
491  E6Gauged(SemiSimpleGroup* t_group,
492  Gauge* gauge,
493  std::string const& nameBoson,
494  bool addGhost,
495  const csl::Expr& t_coupling);
496 
497  ~E6Gauged(){};
498 
499  mty::gauge::GroupType getType() const override;
500 
501  void setGeneratorProperties(Irrep const& rep,
502  mty::Generator& generator) override;
503 
504  void generateRepGenerator(const Irrep& irrep) override;
505 
506  private:
507 
508  std::map<Irrep, csl::Tensor> d_invariant;
509 };
510 
511 class E7Gauged: public NonAbelianGauged {
512 
513  public:
514 
515  inline static csl::Expr a = CSL_1;
516 
517  inline static csl::Expr alpha = CSL_THIRD;
518 
519  public:
520 
521  E7Gauged(SemiSimpleGroup* t_group,
522  Gauge* gauge,
523  std::string const& nameBoson,
524  bool addGhost);
525 
526  E7Gauged(SemiSimpleGroup* t_group,
527  Gauge* gauge,
528  std::string const& nameBoson,
529  bool addGhost,
530  const csl::Expr& t_coupling);
531 
532  ~E7Gauged(){};
533 
534  mty::gauge::GroupType getType() const override;
535 
536  void setGeneratorProperties(Irrep const& rep,
537  mty::Generator& generator) override;
538 
539  void generateRepGenerator(const Irrep& irrep) override;
540 
541  private:
542 
543  std::map<Irrep, csl::Tensor> d_invariant;
544 };
545 
546 class E8Gauged: public NonAbelianGauged {
547 
548  public:
549 
550  inline static csl::Expr a = CSL_1;
551 
552  public:
553 
554  E8Gauged(SemiSimpleGroup* t_group,
555  Gauge* gauge,
556  std::string const& nameBoson,
557  bool addGhost);
558 
559  E8Gauged(SemiSimpleGroup* t_group,
560  Gauge* gauge,
561  std::string const& nameBoson,
562  bool addGhost,
563  const csl::Expr& t_coupling);
564 
565  ~E8Gauged(){};
566 
567  mty::gauge::GroupType getType() const override;
568 };
569 
570 class F4Gauged: public NonAbelianGauged {
571 
572  public:
573 
574  inline static csl::Expr a = CSL_1;
575 
576  inline static csl::Expr alpha = csl::int_s(7) / 3;
577 
578  public:
579 
580  F4Gauged(SemiSimpleGroup* t_group,
581  Gauge* gauge,
582  std::string const& nameBoson,
583  bool addGhost);
584 
585  F4Gauged(SemiSimpleGroup* t_group,
586  Gauge* gauge,
587  std::string const& nameBoson,
588  bool addGhost,
589  const csl::Expr& t_coupling);
590 
591  ~F4Gauged(){};
592 
593  mty::gauge::GroupType getType() const override;
594 
595  void setGeneratorProperties(Irrep const& rep,
596  mty::Generator& generator) override;
597 
598  void generateRepGenerator(const Irrep& irrep) override;
599 
600  private:
601 
602  std::map<Irrep, csl::Tensor> d_invariant;
603 };
604 
605 class G2Gauged: public NonAbelianGauged {
606 
607  public:
608 
609  inline static csl::Expr a = CSL_1;
610 
611  inline static csl::Expr alpha = csl::int_s(-6);
612 
613  public:
614 
615  G2Gauged(SemiSimpleGroup* t_group,
616  Gauge* gauge,
617  std::string const& nameBoson,
618  bool addGhost);
619 
620  G2Gauged(SemiSimpleGroup* t_group,
621  Gauge* gauge,
622  std::string const& nameBoson,
623  bool addGhost,
624  const csl::Expr& t_coupling);
625 
626  ~G2Gauged(){};
627 
628  mty::gauge::GroupType getType() const override;
629 
630  void setGeneratorProperties(Irrep const& rep,
631  mty::Generator& generator) override;
632 
633  void generateRepGenerator(const Irrep& irrep) override;
634 
635  private:
636 
637  std::map<Irrep, csl::Tensor> f_invariant;
638 
639 };
640 
641 std::unique_ptr<GaugedGroup> createGaugedGroup(
642  SemiSimpleGroup* group,
643  Gauge* gauge,
644  std::string nameBoson,
645  bool addGhost = true,
646  const csl::Expr& coupling = CSL_UNDEF);
647 
648 } // End of namespace mty
649 
650 #endif
Definition: gaugedGroup.h:194
Definition: gaugedGroup.h:95
const csl::Expr CSL_UNDEF
Definition: gauge.h:36
Base class for all Semi simple groups, i.e. groups that has a SemiSimpleAlgebra.
Definition: group.h:219
Definition: gaugedGroup.h:511
Definition: gaugedGroup.h:325
Group objects handling different possible symmetry groups. For now only semi-simple groups have repre...
Type
csl::Expr mu
mu parameter.
Definition: MSSM.h:83
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
Definition: gaugedGroup.h:448
Class inherited from std::vector<int>, dynkin labels for a state of a semi-simple algebra (see docume...
Definition: algebraState.h:35
csl::Expr alpha
Diagonalization angle for (h0 H0).
Definition: MSSM.h:75
const csl::Expr CSL_INF
Definition: gaugedGroup.h:148
Definition: gaugedGroup.h:570
Definition: gaugedGroup.h:413
Definition: gaugedGroup.h:476
Definition: gaugedGroup.h:350
Abstract base class for all semi-simple Lie algebras.
Definition: semiSimpleAlgebra.h:96
Definition: gaugedGroup.h:382
Definition: gaugedGroup.h:546
Class deriving from csl::TensorFieldElement, may enter expressions. In contrary to QuantumFieldParent...
Definition: quantumField.h:1614
Definition: gaugedGroup.h:100
Handles the irreducible representation of a given semi-simple algebra.
Definition: representation.h:42
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
std::vector< std::pair< AlgebraState, const csl::Space * > > vectorSpaces
Association of AlgebraState (highest weights of irreps) and vector spaces. To each irrep (i...
Definition: gaugedGroup.h:321
Definition: gaugedGroup.h:605
Base class for parents of QuantumField objects.
Definition: quantumField.h:152
Definition: generator.h:107
Namespace containing features concerning gauged groups and gauge choices.
Definition: gaugedGroup.h:32
Gauge boson implementation in MARTY.
Definition: vectorField.h:343
Definition: gaugedGroup.h:94
Definition: gaugedGroup.h:97
Definition: gaugedGroup.h:96