Docker-in-Docker (DinD) capabilities of public runners deactivated. More info

Commit f66032e1 authored by Grégoire Uhlrich's avatar Grégoire Uhlrich
Browse files

Model building fix in Field strength replacement

parent b78a13ee
......@@ -13,7 +13,7 @@
// You should have received a copy of the GNU General Public License
// along with MARTY. If not, see <https://www.gnu.org/licenses/>.
#pragma once
#pragma once
#include "abstract.h"
#include "index.h"
......
......@@ -406,12 +406,15 @@ Expr Abbrev::makeAbbreviation(std::string name,
Expr const& encapsulated,
bool split)
{
if (encapsulated->size() == 0) // nothing to abbreviate
return encapsulated;
// Important refresh to ensure the mathematical equivalence between the
// expression tested here and the entering later the abbreviation
Expr encaps = DeepRefreshed(encapsulated);
if (encaps->size() == 0) // nothing to abbreviate
return encaps;
if (name == "Ab"
&& split
&& (csl::IsSum(encapsulated) || csl::IsProd(encapsulated))) {
const size_t size = csl::Size(encapsulated);
&& (csl::IsSum(encaps) || csl::IsProd(encaps))) {
const size_t size = csl::Size(encaps);
std::vector<csl::Expr> abbrevs;
std::vector<csl::Expr> numericals;
std::vector<csl::Expr> funcs;
......@@ -419,7 +422,7 @@ Expr Abbrev::makeAbbreviation(std::string name,
std::vector<csl::Expr> tensors;
std::vector<csl::Expr> others;
for (size_t i = 0; i != size; ++i) {
auto const &arg = encapsulated[i];
auto const &arg = encaps[i];
if (isAnAbbreviation(arg)) {
abbrevs.push_back(arg);
}
......@@ -439,7 +442,7 @@ Expr Abbrev::makeAbbreviation(std::string name,
others.push_back(arg);
}
}
bool isProd = csl::IsProd(encapsulated);
bool isProd = csl::IsProd(encaps);
std::vector<csl::Expr> last(6);
last[0] = makeSubAbbrev(abbrevs, isProd);
last[1] = makeSubAbbrev(funcs, isProd);
......@@ -459,7 +462,6 @@ Expr Abbrev::makeAbbreviation(std::string name,
// auto res = makeAbbreviation(name, comb, false);
// return res;
}
Expr encaps = DeepRefreshed(encapsulated);
if (avoidDuplicates) {
if (auto ab = findExisting(name, encaps); ab)
return ab.value();
......
......@@ -13,6 +13,7 @@
// You should have received a copy of the GNU General Public License
// along with MARTY. If not, see <https://www.gnu.org/licenses/>.
#include "scopedProperty.h"
#include "comparison.h"
#include "indicial.h"
#include "utils.h"
......@@ -159,13 +160,12 @@ bool Comparator::compare(const Index& A, const Index& B)
return true;
}
else {
freeIndexComparisonActive = false;
csl::ScopedProperty prop(&freeIndexComparisonActive, false);
if (indexCorrespondance[A] == B)
if (indexCorrespondance.find(B) == indexCorrespondance.end()) {
indexCorrespondance[B] = A;
return true;
}
freeIndexComparisonActive = true;
}
return false;
......@@ -184,13 +184,12 @@ bool Comparator::compare(const Index& A, const Index& B)
}
else {
// Deactivating freeIndexComparison here in order to compare exactly.
freeIndexComparisonActive = false;
csl::ScopedProperty prop(&freeIndexComparisonActive, false);
if (indexCorrespondance[A] == B)
if (indexCorrespondance.find(B) == indexCorrespondance.end()) {
indexCorrespondance[B] = A;
return true;
}
freeIndexComparisonActive = true;
}
return false;
......@@ -222,11 +221,10 @@ bool Comparator::dummyVecIntComparison(Expr_info A, Expr_info B)
bool Comparator::freeIndexComparison(Expr_info A, Expr_info B)
{
freeIndexComparisonActive = true;
csl::ScopedProperty prop(&freeIndexComparisonActive, true);
bool rep = A->operator==(B);
// rep = rep and indexCorrespondance.empty();
indexCorrespondance.clear();
freeIndexComparisonActive = false;
return rep;
}
......
......@@ -3147,9 +3147,12 @@ bool ISum::isIndexed() const
IndexStructure ISum::getIndexStructure() const
{
if (argument.size() > 0)
return argument[0]->getIndexStructure();
return IndexStructure();
auto arg = argument.begin();
while (arg != argument.end()) {
if (*arg != CSL_0) return (**arg).getIndexStructure();
++arg;
}
return {};
}
void ISum::selfCheckIndexStructure()
......@@ -3176,12 +3179,14 @@ void ISum::selfCheckIndexStructure()
selfCheckIndexStructure();
return;
}
cout << structure << endl;
cout << (**arg).getFreeIndexStructure() << endl;
std::cout << argument[i] << std::endl;
std::cout << *arg << std::endl;
std::cout << csl::DeepRefreshed(argument[i]) << '\n';
std::cout << csl::DeepRefreshed(*arg) << '\n';
std::cerr << "In : " << '\n';
print();
std::cerr << structure << endl;
std::cerr << (**arg).getFreeIndexStructure() << endl;
std::cerr << argument[i] << std::endl;
std::cerr << *arg << std::endl;
std::cerr << csl::Evaluated(argument[i], csl::eval::abbreviation) << '\n';
std::cerr << csl::Evaluated(*arg, csl::eval::abbreviation) << '\n';
callError(cslError::InvalidIndicialSum,
"Sum::selfCheckIndexStructure() const");
}
......
......@@ -705,13 +705,7 @@ namespace csl {
std::string LibraryGenerator::getFunctionFileName(LibFunction const &f) const
{
std::string res;
for (const char c : f.getName())
if (c >= 'A' and c <= 'Z')
res += c + 'a' - 'A';
else
res += c;
return res;
return f.getName();
}
std::string LibraryGenerator::getGroupFileName(
......@@ -908,14 +902,8 @@ namespace csl {
void LibraryGenerator::printFunction(LibFunction const& f) const
{
std::string nameHeader;
std::string nameSource;
for (const char c : f.getName())
if (c >= 'A' and c <= 'Z')
nameHeader += c + 'a' - 'A';
else
nameHeader += c;
nameSource = nameHeader;
std::string nameHeader = f.getName();
std::string nameSource = nameHeader;
nameHeader += ".h";
nameSource += ".cpp";
......
......@@ -109,9 +109,13 @@ namespace csl {
return;
}
csl::WeakDeepCopy(expr);
auto cc = &csl::GetComplexConjugate;
auto conditionalCC = [&](csl::Expr const &sub) {
if (sub->isComplexConjugate())
return CSL_UNDEF;
return csl::GetComplexConjugate(sub);
};
std::vector<csl::Expr> ccFrom(from.size());
std::transform(from.begin(), from.end(), ccFrom.begin(), cc);
std::transform(from.begin(), from.end(), ccFrom.begin(), conditionalCC);
applyThroughAbbreviations(
expr,
[&](csl::Expr const &sub, bool isPredicate) {
......@@ -359,7 +363,16 @@ namespace csl {
)
{
auto parent = expr->getParent_info();
auto posF = std::find(begin(parentFrom), end(parentFrom), parent);
auto posF = end(parentFrom);
for (size_t i = 0; i != from.size(); ++i) {
if (parent != parentFrom[i])
continue;
// If replacement from complex conjugate, expr must also be
if (from[i]->isComplexConjugate() && !expr->isComplexConjugate())
continue;
posF = begin(parentFrom) + i;
break;
}
if (posF != end(parentFrom)) {
if (isPredicate)
return CSL_UNDEF;
......@@ -370,7 +383,7 @@ namespace csl {
IndexStructure structureToSave = expr->getIndexStructure();
Expr newSub = csl::DeepCopy(res);
RenameIndices(newSub);
if (expr->isComplexConjugate())
if (expr->isComplexConjugate() != from[i]->isComplexConjugate())
newSub = GetComplexConjugate(newSub);
if (not structureToSave.empty())
csl::ApplyIndices(
......
......@@ -861,13 +861,16 @@ bool TensorFieldElement::operator==(Expr_info expr) const
}
if (expr->getType() != getType()
or parent != expr->getParent()
or point != expr->getPoint())
or point != expr->getPoint()) {
return false;
}
if (not Complexified::operator==(expr))
return false;
if (Comparator::getFreeIndexComparisonActive())
return index.compareWithDummy(expr->getIndexStructure(),
if (Comparator::getFreeIndexComparisonActive()) {
return index.compareWithDummy(
expr->getIndexStructure(),
Comparator::indexCorrespondance);
}
if (not index.exactMatch(expr->getIndexStructure()))
return false;
......
......@@ -10,7 +10,7 @@ DYNAMICLIBRARY = libmarty.so
LTVERSION = 2.15
CXXDEBUG = $(CXX) -g # -D DEBUG
CXXFLAGS = $(MARTY_CXX_FLAGS) -Wall -Wextra -Wpedantic -std=c++17 -O3 -fPIC -Wfatal-errors
CXXFLAGS = $(MARTY_CXX_FLAGS) -Wall -Wextra -Wpedantic -std=c++17 -O3 -fPIC -Wfatal-errors -DDEBUGLOG
SRCDIR = src
HEADDIR = include
......
......@@ -280,7 +280,7 @@ public:
protected:
csl::Expr cc(csl::Expr const &init) {
static csl::Expr cc(csl::Expr const &init) {
return csl::GetComplexConjugate(init);
}
......@@ -339,6 +339,7 @@ protected:
void promoteMajoranas();
void diagonalizeSFermions();
void renameSFermions();
void generateDiracFermions();
friend
std::ostream &operator<<(
......
......@@ -803,7 +803,7 @@ class WickCalculator {
std::vector<mty::FeynruleMomentum>& witnessMapping,
bool ruleMode = true);
static std::vector<mty::FeynmanDiagram> getDiagrams_(
static std::vector<mty::FeynmanDiagram> getDiagrams(
mty::Model const *model,
const csl::Expr& initialExpr,
std::map<csl::Tensor, size_t>& vertexIds,
......@@ -811,7 +811,7 @@ class WickCalculator {
bool symmetriseExternalLegs = false,
bool ruleMode = true);
static std::vector<mty::FeynmanDiagram> getDiagrams_(
static std::vector<mty::FeynmanDiagram> getDiagrams(
mty::Model const *model,
const csl::Expr& initialExpr,
std::map<csl::Tensor, size_t>& vertexIds,
......
......@@ -77,7 +77,7 @@ class Insertion {
bool isOutgoingParticle() const {
return !isIncoming() && isParticle();
}
bool isOutoingAntiParticle() const {
bool isOutgoingAntiParticle() const {
return !isIncoming() && !isParticle();
}
......
......@@ -124,6 +124,12 @@ class Lagrangian {
static
void mergeTerms(std::vector<TermType>& terms);
protected:
void ensurePoint(csl::Expr &expr);
void ensurePoint(InteractionTerm &term);
};
inline
......
......@@ -942,8 +942,7 @@ class QuantumFieldParent: public csl::TensorFieldParent {
* indices.
* \sa getFullSetOfIndices(), operator()().
*/
csl::Expr getInstance(csl::Tensor point
= csl::tensor_s("X", &csl::Minkowski));
csl::Expr getInstance(csl::Tensor point = defaultSpaceTimePoint);
/*!
* \brief Sets the integrated out property of the field.
......
......@@ -4,7 +4,7 @@ CXX = g++-7
VERSION=1.0
CXXDEBUG = $(CXX) -g -D DEBUG
CFLAGS = -Wall -Wextra -Wpedantic -std=c++17 -O3 -fPIC #-DDEBUGLOG
CFLAGS = -Wall -Wextra -Wpedantic -std=c++17 -O3 -fPIC -DDEBUGLOG
SRCDIR = src
HEADDIR = include
......
......@@ -128,8 +128,8 @@ void MSSM_Model::initGaugeAndFlavor()
}
void MSSM_Model::initGauginos()
{
s_B = mty::weylfermion_s("~B", B->getGaugeIrrep(), Chirality::Left);
s_Wi = mty::weylfermion_s("~W", Wi->getGaugeIrrep(), Chirality::Left);
s_B = mty::weylfermion_s("sB ; \\tilde{B}", B->getGaugeIrrep(), Chirality::Left);
s_Wi = mty::weylfermion_s("sW ; \\tilde{W}", Wi->getGaugeIrrep(), Chirality::Left);
s_G = mty::weylfermion_s("sG; \\tilde{G}", G->getGaugeIrrep(), Chirality::Left);
s_B->setSelfConjugate(true);
s_Wi->setSelfConjugate(true);
......@@ -167,11 +167,11 @@ void MSSM_Model::initLeptons()
void MSSM_Model::initSLeptons()
{
s_Li = mty::scalarboson_s(
"~L_L",
"sL_L ; \\tilde{L_L}",
Li->getGaugeIrrep(),
Li->getFlavorIrrep());
s_Ei = mty::scalarboson_s(
"~E_R",
"sE_R ; \\tilde{E_R}",
Ei->getGaugeIrrep(),
Ei->getFlavorIrrep());
......@@ -222,15 +222,15 @@ void MSSM_Model::initQuarks()
void MSSM_Model::initSQuarks()
{
s_Qi = mty::scalarboson_s(
"~Q_L",
"sQ_L ; \\tilde{Q_L}",
Qi->getGaugeIrrep(),
Qi->getFlavorIrrep());
s_Ui = mty::scalarboson_s(
"~U_R",
"sU_R ; \\tilde{U_R}",
Ui->getGaugeIrrep(),
Ui->getFlavorIrrep());
s_Di = mty::scalarboson_s(
"~D_R",
"sD_R ; \\tilde{D_R}",
Di->getGaugeIrrep(),
Di->getFlavorIrrep());
......@@ -277,13 +277,13 @@ void MSSM_Model::initHiggs()
Hu = mty::scalarboson_s("Hu", *this);
Hu->setGroupRep("L", 1);
Hu->setGroupRep("Y", {1, 2});
m_sHu = csl::constant_s("m_~Hu");
m_sHu = csl::constant_s("m_sHu");
Hu->setMass(m_sHu);
Hd = mty::scalarboson_s("Hd", *this);
Hd->setGroupRep("L", 1);
Hd->setGroupRep("Y", {-1, 2});
m_sHd = csl::constant_s("m_~Hd");
m_sHd = csl::constant_s("m_sHd");
Hd->setMass(m_sHd);
addParticles({Hu, Hd});
......@@ -291,12 +291,12 @@ void MSSM_Model::initHiggs()
void MSSM_Model::initHiggsinos()
{
s_Hu = mty::weylfermion_s(
"~Hu",
"sHu ; \\tilde{Hu}",
Hu->getGaugeIrrep(),
Hd->getFlavorIrrep(),
Chirality::Left);
s_Hd = mty::weylfermion_s(
"~Hd",
"sHd ; \\tilde{Hd}",
Hd->getGaugeIrrep(),
Hd->getFlavorIrrep(),
Chirality::Left);
......@@ -952,6 +952,7 @@ void MSSM_Model::getToLowEnergyLagrangian()
csl::ScopedProperty p(&mty::InteractionTerm::abbreviateFactors, true);
diagonalizeSFermions();
renameSFermions();
generateDiracFermions();
gatherMasses();
promoteToGoldstone("G^+", "W");
......@@ -965,28 +966,30 @@ void MSSM_Model::breakSU2LGaugeSymmetry()
{"Hu", "Hd", "W", "c_A_L",
"Q_L", "L_L",
"~Hu", "~Hd", "~W",
"~Q_L", "~L_L"},
"sHu", "sHd", "sW",
"sQ_L", "sL_L"},
{{"H_u^+", "H_u^0"},
{"H_d^0", "H_d^-"},
{"W^1", "W^2", "W^3"},
{{"Hup", "Hu0"},
{"Hd0", "Hdm"},
{"W1", "W2", "W3"},
{"c_W_1", "c_W_2", "c_W_3"},
{"U_L", "D_L"},
{"\\Nu _L", "E_L"},
{"~H_u^+", "~H_u^0"},
{"~H_d^0", "~H_d^-"},
{"~W^1", "~W^2", "~W^3"},
{"~U_L", "~D_L"},
{"~\\Nu _L", "~E_L"}});
getParticle("~H_u^0")->setSelfConjugate(true);
getParticle("~H_d^0")->setSelfConjugate(true);
{"Nu_L ; \\Nu_L", "E_L"},
{"sHup ; \\tilde{H}_u^+", "sHu0 ; \\tilde{H}_u^0"},
{"sHd0 ; \\tilde{H}_d^0", "sHdm ; \\tilde{H}_d^-"},
{"sW1 ; \\tilde{W}", "sW2 ; \\tilde{W}^2",
"sW3 ; \\tilde{W}^3"},
{"sU_L ; \\tilde{U}_L", "sD_L ; \\tilde{D}_L"},
{"sNu_L ; \\tilde{\\Nu}_L", "sE_L ; \\tilde{E}_L"}});
getParticle("sHu0")->setSelfConjugate(true);
getParticle("sHd0")->setSelfConjugate(true);
}
void MSSM_Model::replaceWBoson()
{
Particle W1 = GetParticle(*this, "W^1");
Particle W2 = GetParticle(*this, "W^2");
Particle W1 = GetParticle(*this, "W1");
Particle W2 = GetParticle(*this, "W2");
Particle W_SM = GenerateSimilarParticle("W; W^+", W1);
SetSelfConjugate(W_SM, false);
......@@ -1010,10 +1013,10 @@ void MSSM_Model::replaceWBoson()
GetFieldStrength(W2),
CSL_I * (F_W_p - F_W_m) / csl::sqrt_s(2));
Particle s_W1 = GetParticle(*this, "~W^1");
Particle s_W2 = GetParticle(*this, "~W^2");
Particle s_W = GenerateSimilarParticle("sWp ; \\tilde{W^+}", s_W1);
Particle s_Wc = GenerateSimilarParticle("sWm ; \\tilde{W^-}", s_W2);
Particle s_W1 = GetParticle(*this, "sW1");
Particle s_W2 = GetParticle(*this, "sW2");
Particle s_W = GenerateSimilarParticle("sWp ; \\tilde{W}^+", s_W1);
Particle s_Wc = GenerateSimilarParticle("sWm ; \\tilde{W}^-", s_W2);
s_W ->setSelfConjugate(false);
s_Wc->setSelfConjugate(false);
csl::Index alpha = mty::DiracIndex();
......@@ -1030,14 +1033,14 @@ void MSSM_Model::replaceWBoson()
void MSSM_Model::expandAroundVEVs()
{
v_h = sm_input::v;
beta_h = csl::constant_s("\\beta");
beta_h = csl::constant_s("beta");
csl::Expr vu = v_h * csl::sin_s(beta_h);
csl::Expr vd = v_h * csl::cos_s(beta_h);
Particle Hu0 = GetParticle(*this, "H_u^0");
Particle Hup = GetParticle(*this, "H_u^+");
Particle Hdm = GetParticle(*this, "H_d^-");
Particle Hd0 = GetParticle(*this, "H_d^0");
Particle Hu0 = GetParticle(*this, "Hu0");
Particle Hup = GetParticle(*this, "Hup");
Particle Hdm = GetParticle(*this, "Hdm");
Particle Hd0 = GetParticle(*this, "Hd0");
Particle phi_u_c = scalarboson_s("phi_u; \\phi _u^+", *this);
Particle phi_d_c = scalarboson_s("phi_d; \\phi _d^+", *this);
......@@ -1073,29 +1076,15 @@ void MSSM_Model::expandAroundVEVs()
void MSSM_Model::diagonalize2By2Matrices()
{
diagonalizeSymbolically("B");
renameParticle("W^3", "Z");
renameParticle("W3", "Z");
renameParticle("B", "A");
// diagonalizeSymbolically("\\eta _u", true);
// renameParticle("\\eta _u", "A^0");
// renameParticle("\\eta _d", "G^0");
// diagonalizeSymbolically("\\phi _u^+", true);
// renameParticle("\\phi _u^+", "H^+");
// renameParticle("\\phi _d^+", "G^+");
csl::Expr mu_2 = cc(mu_h) * mu_h;
csl::Expr MZ2 = csl::pow_s(sm_input::M_Z, 2);
Replaced(*this,
g_L*g_L + g_Y*g_Y,
4 * MZ2 / (v_h*v_h));
csl::Expr c2beta = 1 - 2 * csl::pow_s(csl::sin_s(beta_h), 2);
// Replaced(*this,
// MZ2,
// csl::Expanded((m_sHu*m_sHu - m_sHd*m_sHd)/c2beta)
// - m_sHu*m_sHu
// - m_sHd*m_sHd
// - 2*mu_2);
Replaced(*this,
m_sHu,
csl::sqrt_s(M_A0*M_A0 - m_sHd*m_sHd - 2*mu_2));
......@@ -1139,7 +1128,7 @@ void MSSM_Model::diagonalize2By2Matrices()
mty::Particle H = scalarboson_s("H0; H^0", *this);
mty::SetSelfConjugate(h, true);
mty::SetSelfConjugate(H, true);
alpha_h = csl::constant_s("alpha; \\alpha");
alpha_h = csl::constant_s("alpha");
rotateFields(
{rho_u, rho_d},
{h, H},
......@@ -1157,15 +1146,15 @@ void MSSM_Model::diagonalize2By2Matrices()
}
void MSSM_Model::diagonalizeYukawas()
{
m_e = sm_input::m_e; // csl::constant_s("m_e");
m_mu = sm_input::m_mu; // csl::constant_s("m_\\mu");
m_tau = sm_input::m_tau; // csl::constant_s("m_\\tau");
m_u = sm_input::m_u; // csl::constant_s("m_u");
m_c = sm_input::m_c; // csl::constant_s("m_c");
m_t = sm_input::m_t; // csl::constant_s("m_t");
m_d = sm_input::m_d; // csl::constant_s("m_d");
m_s = sm_input::m_s; // csl::constant_s("m_s");
m_b = sm_input::m_b; // csl::constant_s("m_b");
m_e = sm_input::m_e;
m_mu = sm_input::m_mu;
m_tau = sm_input::m_tau;
m_u = sm_input::m_u;
m_c = sm_input::m_c;
m_t = sm_input::m_t;
m_d = sm_input::m_d;
m_s = sm_input::m_s;
m_b = sm_input::m_b;
const csl::Space* flavorSpace = csl::GetSpace(Ye);
csl::Tensor M_e = csl::tensor_s(
......@@ -1225,8 +1214,8 @@ void MSSM_Model::diagonalizeYukawas()
mty::Particle D_L = GetParticle(*this, "D_L");
mty::Particle D_R = GetParticle(*this, "D_R");
mty::Particle sD_L = GetParticle(*this, "~D_L");
mty::Particle sD_R = GetParticle(*this, "~D_R");
mty::Particle sD_L = GetParticle(*this, "sD_L");
mty::Particle sD_R = GetParticle(*this, "sD_R");
csl::Index a1 = DiracIndex();
csl::Index A = generateIndex("C", D_L);
......@@ -1281,8 +1270,8 @@ void MSSM_Model::breakSMFlavorSymmetry()
*this,
"SM_flavor",
{"U_L", "U_R", "D_L", "D_R", "E_L", "E_R", "\\Nu _L",
"~U_L", "~U_R", "~D_L", "~D_R", "~E_L", "~E_R", "~\\Nu _L"},
{"U_L", "U_R", "D_L", "D_R", "E_L", "E_R", "Nu_L",
"sU_L", "sU_R", "sD_L", "sD_R", "sE_L", "sE_R", "sNu_L"},
{{"u_L", "c_L", "t_L"},
{"u_R", "c_R", "t_R"},
......@@ -1290,42 +1279,45 @@ void MSSM_Model::breakSMFlavorSymmetry()
{"d_R", "s_R", "b_R"},
{"e_L", "mu_L; \\mu_L", "tau_L; \\tau_L"},
{"e_R", "mu_R; \\mu_R", "tau_R; \\tau_R"},
{"nu_e_L; \\nu_{eL}", "nu_mu_L; \\nu_{\\mu L}", "nu_tau_L; \\nu_{\\tau L}"},
{"su_L;\\tilde{u_L}", "sc_L;\\tilde{c_L}", "st_L;\\tilde{t_L}"},
{"su_R;\\tilde{u_R}", "sc_R;\\tilde{c_R}", "st_R;\\tilde{t_R}"},
{"sd_L;\\tilde{d_L}", "ss_L;\\tilde{s_L}", "sb_L;\\tilde{b_L}"},
{"sd_R;\\tilde{d_R}", "ss_R;\\tilde{s_R}", "sb_R;\\tilde{b_R}"},
{"se_L;\\tilde{e_L}", "smu_L; \\tilde{\\mu_L}", "stau_L; \\tilde{\\tau_L}"},
{"se_R;\\tilde{e_R}", "smu_R; \\tilde{\\mu_R}", "stau_R; \\tilde{\\tau_R}"},
{"snu_e_L; \\tilde{\\nu_{eL}}", "snu_mu_L; \\tilde{\\nu_{\\mu L}}", "snu_tau_L; \\tilde{\\nu_{\\tau L}}"}});
{"nu_e; \\nu_{eL}", "nu_mu; \\nu_{\\mu L}", "nu_tau; \\nu_{\\tau L}"},
{"su_L;\\tilde{u}_L", "sc_L;\\tilde{c}_L", "st_L;\\tilde{t}_L"},
{"su_R;\\tilde{u}_R", "sc_R;\\tilde{c}_R", "st_R;\\tilde{t}_R"},
{"sd_L;\\tilde{d}_L", "ss_L;\\tilde{s}_L", "sb_L;\\tilde{b}_L"},
{"sd_R;\\tilde{d}_R", "ss_R;\\tilde{s}_R", "sb_R;\\tilde{b}_R"},
{"se_L;\\tilde{e}_L", "smu_L; \\tilde{\\mu}_L",
"stau_L; \\tilde{\\tau}_L"},
{"se_R;\\tilde{e}_R", "smu_R; \\tilde{\\mu}_R",
"stau_R; \\tilde{\\tau}_R"},
{"snu_e; \\tilde{\\nu}_{eL}", "snu_mu; \\tilde{\\nu}_{\\mu L}",
"snu_tau; \\tilde{\\nu}_{\\tau L}"}});
}
void MSSM_Model::diagonalizeNeutralinos()
{
mty::Particle N1_init = getParticle("~B");</