Documentation of MARTY
A Modern ARtificial Theoretical phYsicist
filters.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 
74 #pragma once
75 
76 #include "model.h"
77 #include "feynmanRule.h"
78 #include "feynmanDiagram.h"
79 #include <algorithm>
80 
84 namespace mty::filter {
85 
103  template<class ParticleIterator>
105  ParticleIterator first,
106  ParticleIterator last
107  )
108  {
109  return [particles = std::vector<mty::Particle>(first, last)]
110  (InteractionTerm const &rule) {
111  return std::all_of(begin(particles), end(particles),
112  [&](Particle const &p) {
113  return !rule.containsWeakly(p);
114  });
115  };
116  }
117 
126  inline auto disableParticles(std::vector<mty::Particle> const &particles)
127  {
128  return disableParticles(begin(particles), end(particles));
129  }
130 
139  inline auto disableParticles(std::initializer_list<mty::Particle> particles)
140  {
141  return disableParticles(begin(particles), end(particles));
142  }
143 
155  inline auto disableParticles(
156  std::initializer_list<std::string_view> names,
157  mty::Model const &model = *Model::current
158  )
159  {
160  return disableParticles(model.getParticles(names));
161  }
162 
171  inline auto disableParticle(mty::Particle const &particle)
172  {
173  return disableParticles({particle});
174  }
175 
186  inline auto disableParticle(
187  std::string_view name,
188  mty::Model const &model = *Model::current
189  )
190  {
191  return disableParticle(model.getParticle(name));
192  }
193 
210  template<class ParticleIterator>
212  ParticleIterator first,
213  ParticleIterator last
214  )
215  {
216  return [particles = std::vector<mty::Particle>(first, last)]
217  (FeynmanDiagram const &rule) {
218  return std::any_of(begin(particles), end(particles),
219  [&](Particle const &p) {
220  return !rule.contains(p);
221  });
222  };
223  }
224 
235  std::vector<mty::Particle> const &particles
236  )
237  {
238  return disableParticleCombination(begin(particles), end(particles));
239  }
240 
251  std::initializer_list<mty::Particle> particles
252  )
253  {
254  return disableParticleCombination(begin(particles), end(particles));
255  }
256 
270  std::initializer_list<std::string_view> names,
271  mty::Model const &model = *Model::current
272  )
273  {
274  return disableParticleCombination(model.getParticles(names));
275  }
276 
277 
294  template<class ParticleIterator>
296  ParticleIterator first,
297  ParticleIterator last
298  )
299  {
300  return [particles = std::vector<mty::Particle>(first, last)]
301  (FeynmanDiagram const &diagram) {
302  return std::all_of(begin(particles), end(particles),
303  [&](Particle const &p) {
304  return diagram.contains(p);
305  });
306  };
307  }
308 
319  std::vector<mty::Particle> const &particles
320  )
321  {
322  return forceParticleCombination(begin(particles), end(particles));
323  }
324 
335  std::initializer_list<mty::Particle> particles
336  )
337  {
338  return forceParticleCombination(begin(particles), end(particles));
339  }
340 
353  std::initializer_list<std::string_view> names,
354  mty::Model const &model = *Model::current
355  )
356  {
357  return forceParticleCombination(model.getParticles(names));
358  }
359 
368  inline auto forceParticle(mty::Particle const &particle)
369  {
370  return forceParticleCombination({particle});
371  }
372 
383  inline auto forceParticle(
384  std::string_view name,
385  mty::Model const &model = *Model::current
386  )
387  {
388  return forceParticle(model.getParticle(name));
389  }
390 
407  template<class ParticleIterator>
409  ParticleIterator first,
410  ParticleIterator last
411  )
412  {
413  return [particles = std::vector<mty::Particle>(first, last)]
414  (FeynmanDiagram const &diagram) {
415  return std::any_of(begin(particles), end(particles),
416  [&](Particle const &p) {
417  return diagram.contains(p);
418  });
419  };
420  }
421 
430  inline auto forceParticles(std::vector<mty::Particle> const &particles)
431  {
432  return forceParticles(begin(particles), end(particles));
433  }
434 
444  inline auto forceParticles(std::initializer_list<mty::Particle> particles)
445  {
446  return forceParticles(begin(particles), end(particles));
447  }
448 
459  inline auto forceParticles(
460  std::initializer_list<std::string_view> names,
461  mty::Model const &model = *Model::current
462  )
463  {
464  return forceParticles(model.getParticles(names));
465  }
466 
467 }
bool contains(mty::Particle const &part, DiagramParticleType type=Any) const
Tells if one particle is contained in the diagram for a given type.
Definition: feynmanDiagram.cpp:65
auto disableParticle(mty::Particle const &particle)
Filter disabling one particle.
Definition: filters.h:171
This class inherits from std::shared_ptr<QuantumFieldParent> and should be used instead of direct Qua...
Definition: quantumField.h:1409
Contains the mty::Model class. It contains all objects in the theory. In particular QuantumField obje...
constexpr auto names
Names for topologies.
Definition: topology.h:72
auto forceParticle(mty::Particle const &particle)
Filter forcing one particle in diagrams.
Definition: filters.h:368
auto disableParticles(ParticleIterator first, ParticleIterator last)
Filter disabling a range of particles provided begin and end iterators for the given range...
Definition: filters.h:104
auto disableParticleCombination(ParticleIterator first, ParticleIterator last)
Filter disabling a particular combination of particles.
Definition: filters.h:211
Class containing a Feynman diagram, symbolic expression and graph included.
Definition: feynmanDiagram.h:50
Contains the FeynmanRule object for Feynman rules.
auto forceParticles(ParticleIterator first, ParticleIterator last)
Filter forcing particles in diagrams.
Definition: filters.h:408
Namespace containing built-in filters in MARTY.
Definition: filters.h:84
auto forceParticleCombination(ParticleIterator first, ParticleIterator last)
Filter forcing a particular combination of particles.
Definition: filters.h:295
bool containsWeakly(const QuantumFieldParent *p) const
Tells if the interaction term contains a given field or only a part of it.
Definition: interactionTerm.cpp:402
Contains all objects in the theory. In particular QuantumField objects, Gauge, Flavor, Particle...
Definition: model.h:68
Interaction term (in the Lagrangian) in MARTY.
Definition: interactionTerm.h:50
Contains the mty::FeynmanDiagram class.