Page MenuHomeHEPForge

No OneTemporary

diff --git a/Models/Susy/MSSM.cc b/Models/Susy/MSSM.cc
--- a/Models/Susy/MSSM.cc
+++ b/Models/Susy/MSSM.cc
@@ -1,224 +1,221 @@
// -*- C++ -*-
//
// MSSM.cc is a part of Herwig++ - A multi-purpose Monte Carlo event generator
// Copyright (C) 2002-2011 The Herwig Collaboration
//
// Herwig++ is licenced under version 2 of the GPL, see COPYING for details.
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
//
//
// This is the implementation of the non-inlined, non-templated member
// functions of the MSSM class.
//
#include "MSSM.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
using namespace Herwig;
void MSSM::persistentOutput(PersistentOStream & os) const {
os << theStopMix << theSbotMix << theStauMix << theAlpha
<< ounit(theAtop,GeV) << ounit(theAbottom,GeV) << ounit(theAtau,GeV)
<< theHiggsMix << HiggsAMix_ << HiggsPMix_;
}
void MSSM::persistentInput(PersistentIStream & is, int) {
is >> theStopMix >> theSbotMix >> theStauMix >> theAlpha
>> iunit(theAtop,GeV) >> iunit(theAbottom,GeV) >> iunit(theAtau,GeV)
>> theHiggsMix >> HiggsAMix_ >> HiggsPMix_;
}
-// *** Attention *** The following static variable is needed for the type
-// description system in ThePEG. Please check that the template arguments
-// are correct (the class and its base class), and that the constructor
-// arguments are correct (the class name and the name of the dynamically
-// loadable library where the class implementation can be found).
+// The following static variable is needed for the type
+// description system in ThePEG.
DescribeClass<MSSM,SusyBase>
describeMSSM("Herwig::MSSM", "HwSusy.so");
void MSSM::Init() {
static ClassDocumentation<MSSM> documentation
("The MSSM class is the base class for the MSSM model.",
"MSSM Feynman rules were taken from \\cite{Haber:1984rc,Gunion:1984yn}.",
" %\\cite{Haber:1984rc}\n"
"\\bibitem{Haber:1984rc}\n"
" H.~E.~Haber and G.~L.~Kane,\n"
" %``The Search For Supersymmetry: Probing Physics Beyond The Standard Model,''\n"
" Phys.\\ Rept.\\ {\\bf 117}, 75 (1985).\n"
" %%CITATION = PRPLC,117,75;%%\n"
"%\\cite{Gunion:1984yn}\n"
"\\bibitem{Gunion:1984yn}\n"
" J.~F.~Gunion and H.~E.~Haber,\n"
" %``Higgs Bosons In Supersymmetric Models. 1,''\n"
" Nucl.\\ Phys.\\ B {\\bf 272}, 1 (1986)\n"
" [Erratum-ibid.\\ B {\\bf 402}, 567 (1993)].\n"
" %%CITATION = NUPHA,B272,1;%%\n"
);
}
void MSSM::createMixingMatrices() {
useMe();
map<string,pair<MatrixSize, MixingVector> >::const_iterator it;
for(it=mixings().begin();it!=mixings().end();++it) {
string name=it->first;
// create the stop, sbottom and stau mixing matrices
if(name == "stopmix" ){
createMixingMatrix(theStopMix,name,it->second.second,it->second.first);
}
else if (name == "sbotmix" ) {
createMixingMatrix(theSbotMix,name,it->second.second,it->second.first);
}
else if (name == "staumix") {
createMixingMatrix(theStauMix,name,it->second.second,it->second.first);
}
// Higgs mixing matrix in extended models
else if (name == "nmhmix" || name == "rvhmix") {
createMixingMatrix(theHiggsMix,name,it->second.second,it->second.first);
}
}
// neutral higgs mixing if not already set
if(!theHiggsMix) {
MixingVector hmix;
hmix.push_back(MixingElement(2,1, cos(theAlpha)));
hmix.push_back(MixingElement(2,2, sin(theAlpha)));
hmix.push_back(MixingElement(1,1,-sin(theAlpha)));
hmix.push_back(MixingElement(1,2, cos(theAlpha)));
vector<long> ids(2);
ids[0] = 25; ids[1] = 35;
theHiggsMix = new_ptr(MixingMatrix(2,2));
(*theHiggsMix).setIds(ids);
for(unsigned int ix=0; ix < hmix.size(); ++ix)
(*theHiggsMix)(hmix[ix].row-1,hmix[ix].col-1) = hmix[ix].value;
hmix.clear();
double beta = atan(tanBeta());
hmix.push_back(MixingElement(1,1,sin(beta)));
hmix.push_back(MixingElement(1,2,cos(beta)));
ids.resize(1,37);
HiggsPMix_ = new_ptr(MixingMatrix(1,2));
(*HiggsPMix_).setIds(ids);
for(unsigned int ix=0; ix < hmix.size(); ++ix)
(*HiggsPMix_)(hmix[ix].row-1,hmix[ix].col-1) = hmix[ix].value;
ids.resize(1,36);
HiggsAMix_ = new_ptr(MixingMatrix(1,2));
(*HiggsAMix_).setIds(ids);
for(unsigned int ix=0; ix < hmix.size(); ++ix)
(*HiggsAMix_)(hmix[ix].row-1,hmix[ix].col-1) = hmix[ix].value;
}
// base class for neutralinos and charginos
SusyBase::createMixingMatrices();
}
void MSSM::adjustMixingMatrix(long id) {
switch (id) {
case 1000006 :
case 2000006 :
if(theStopMix)
theStopMix->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The stop mixing matrix pointer is null!"
<< Exception::runerror;
break;
case 1000005 :
case 2000005 :
if(theSbotMix)
theSbotMix->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The sbottom mixing matrix pointer is null!"
<< Exception::runerror;
break;
case 1000015 :
case 2000015 :
if(theStauMix)
theStauMix->adjustPhase(id);
else
throw SetupException() << "SusyBase::adjustMixingMatrix - "
<< "The stau mixing matrix pointer is null!"
<< Exception::runerror;
break;
default :
SusyBase::adjustMixingMatrix(id);
break;
}
}
void MSSM::extractParameters(bool checkmodel) {
map<string,pair<MatrixSize, MixingVector> >::const_iterator it;
// trilinear couplings
for(it=mixings().begin();it!=mixings().end();++it) {
string name=it->first;
MixingVector::const_iterator vit;
if(name=="au") {
theAtop=ZERO;
for(vit=it->second.second.begin();vit!=it->second.second.end();++vit) {
if(vit->row==3&&vit->col==3) theAtop=vit->value*GeV;
}
}
else if(name=="ad") {
theAbottom=ZERO;
for(vit=it->second.second.begin();vit!=it->second.second.end();++vit) {
if(vit->row==3&&vit->col==3) theAbottom=vit->value*GeV;
}
}
else if(name=="ae") {
theAtau=ZERO;
for(vit=it->second.second.begin();vit!=it->second.second.end();++vit) {
if(vit->row==3&&vit->col==3) theAtau=vit->value*GeV;
}
}
}
// neutralino and chargino paramters in the base class
SusyBase::extractParameters(false);
// check the model
map<string,ParamMap>::const_iterator pit;
pit=parameters().find("modsel");
if(pit==parameters().end()) return;
// nmssm or mssm
ParamMap::const_iterator jt;
jt = pit->second.find(3);
int inmssm = jt!=pit->second.end() ? int(jt->second) : 0;
// RPV
jt = pit->second.find(4);
int irpv = jt!=pit->second.end() ? int(jt->second) : 0;
// CPV
jt = pit->second.find(5);
int icpv = jt!=pit->second.end() ? int(jt->second) : 0;
// flavour violation
jt = pit->second.find(6);
int ifv = jt!=pit->second.end() ? int(jt->second) : 0;
// the higgs mixing angle
theAlpha=0.;
bool readAlpha = false;
pit=parameters().find("alpha");
if(pit!=parameters().end()) {
ParamMap::const_iterator it = pit->second.find(1);
if(it!=pit->second.end()) {
readAlpha = true;
theAlpha=it->second;
}
}
if(inmssm==0&&irpv==0&&!readAlpha)
throw Exception() << "In the MSSM model BLOCK ALPHA which must be"
<< " present in the SLHA file is missing"
<< Exception::runerror;
if(checkmodel) {
if(inmssm!=0) throw Exception() << "R-parity, CP and flavour conserving MSSM model"
<< " used but NMSSM read in "
<< Exception::runerror;
if(irpv!=0) throw Exception() << "R-parity, CP and flavour conserving MSSM model"
<< " used but RPV read in "
<< Exception::runerror;
if(icpv!=0) throw Exception() << "R-parity, CP and flavour conserving MSSM model"
<< " used but CPV read in "
<< Exception::runerror;
if(ifv!=0) throw Exception() << "R-parity, CP and flavour conserving MSSM model"
<< " used but flavour violation read in "
<< Exception::runerror;
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 8:40 PM (1 d, 2 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3806118
Default Alt Text
(8 KB)

Event Timeline