diff --git a/Decay/General/GeneralCurrentDecayer.cc b/Decay/General/GeneralCurrentDecayer.cc --- a/Decay/General/GeneralCurrentDecayer.cc +++ b/Decay/General/GeneralCurrentDecayer.cc @@ -1,155 +1,154 @@ // -*- C++ -*- // // GeneralCurrentDecayer.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 GeneralCurrentDecayer class. // #include "GeneralCurrentDecayer.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace Herwig; void GeneralCurrentDecayer::persistentOutput(PersistentOStream & os) const { os << theVertex_ << inpart_ << outpart_ << currentOut_ << current_ << ounit(maxmass_,GeV) << mode_ << wgtloc_ << wgtmax_ << weights_; } void GeneralCurrentDecayer::persistentInput(PersistentIStream & is, int) { is >> theVertex_ >> inpart_ >> outpart_ >> currentOut_ >> current_ >> iunit(maxmass_,GeV) >> mode_ >> wgtloc_ >> wgtmax_ >> weights_; } // The following static variable is needed for the type // description system in ThePEG. DescribeAbstractClass describeHerwigGeneralCurrentDecayer("Herwig::GeneralCurrentDecayer", "Herwig.so"); void GeneralCurrentDecayer::Init() { static ClassDocumentation documentation ("The GeneralCurrentDecayer class is designed to be the base class for all " "decays using the WeakCurrents"); } void GeneralCurrentDecayer::setDecayInfo(PDPtr in, PDPtr out, const vector & outCurrent, VertexBasePtr vertex, WeakCurrentPtr current, Energy maxmass) { inpart_ = in; outpart_ = out; currentOut_ = outCurrent; theVertex_ = vertex; current_ = current; maxmass_ = maxmass; } int GeneralCurrentDecayer::modeNumber(bool & cc, tcPDPtr parent, const tPDVector & children) const { vector id; id.push_back(parent->id()); for(unsigned int ix=0;ixid()); return modeNumber(cc,id); } void GeneralCurrentDecayer::doinitrun() { current_->initrun(); DecayIntegrator::doinitrun(); } void GeneralCurrentDecayer::doinit() { DecayIntegrator::doinit(); // make sure the current got initialised current_->init(); Energy mdiff(inpart_->mass()-outpart_->mass()); - // vector::iterator start,end; for(unsigned int ix=0;ixnumberOfModes();++ix) { // get the external particles for this mode int iq(0),ia(0); tPDVector ptemp = current_->particles(inpart_->iCharge()-outpart_->iCharge(),ix,iq,ia); // check this is the right mode if(ptemp.size()!=currentOut_.size()) continue; vector matched(ptemp.size(),false); bool match = true; for(unsigned int iy=0;iycreateMode(inpart_->iCharge()-outpart_->iCharge(), tcPDPtr(),FlavourInfo(),ix,mode,1,0,channel,mdiff); if(done) { // the maximum weight and the channel weights // the weights for the channel if(weights_.empty()) { weights_.resize(mode->channels().size(),1./(mode->channels().size())); } mode_ = ix; // special for the two body modes if(out.size()==3) { weights_.clear(); mode=new_ptr(PhaseSpaceMode(inpart_,out,1.)); } mode->maxWeight(wgtmax_); mode->setWeights(weights_); addMode(mode); } break; } } int GeneralCurrentDecayer::modeNumber(bool & cc, vector id) const { // incoming particle int idtemp[2]; tPDPtr p0=getParticleData(id[0]); idtemp[0] = p0->CC() ? -id[0] : id[0]; if(id [0]==inpart_->id()) cc=false; else if(idtemp[0]==inpart_->id()) cc=true ; else return -1; tPDPtr p1 = outpart_; if(cc&&p1->CC()) p1 = p1->CC(); // if this in the particles vector::iterator iloc = std::find(++id.begin(), id.end(), p1->id()); if(idtemp[0]==id[0]&&iloc==id.end()) { iloc = std::find(++id.begin(), id.end(), p1->CC()->id()); } if(iloc==id.end()) return -1; vector idother; for(vector::iterator it=++id.begin();it!=id.end();++it) { if(it!=iloc) idother.push_back(*it); } unsigned int icurr=current_->decayMode(idother); if(mode_==icurr) return 0; else return -1; } diff --git a/Looptools/Makefile.am b/Looptools/Makefile.am --- a/Looptools/Makefile.am +++ b/Looptools/Makefile.am @@ -1,68 +1,68 @@ noinst_LTLIBRARIES = libHwLooptoolsXFC.la libHwLooptoolsCFC.la noinst_LTLIBRARIES += libHwLooptools.la EXTRA_DIST = \ include/cexternals.h \ include/clooptools.h \ include/defs.h \ include/externals.h \ include/fferr.h \ include/ff.h \ include/ffperm5.h \ include/ffwarn.h \ include/ftypes.h \ include/looptools.h \ include/lt.h \ include/ltnames.h \ include/perm.h \ include/types.h \ util/solve-LU.F \ util/solve-LU.h \ util/solve-Eigen.F theXFCSOURCES = \ A/Aget.F A/ffxa0.F A/ffca0.F \ B/Bget.F B/Bcoeff.F B/BcoeffC.F B/BcoeffAD.F B/BcoeffFF.F \ B/ffxb0.F B/ffcb0.F B/ffxb1.F B/ffcb1.F B/ffxb2p.F B/ffcb2p.F \ B/ffxdb0.F B/ffcdb0.F B/ffxdb1.F B/ffdel2.F B/ffcel2.F \ C/C0func.F C/C0funcC.F C/Cget.F C/ffxc0.F C/ffcc0.F \ C/ffxc0i.F C/ffxc0p.F C/ffxc0p0.F C/ffcc0p.F C/ffdxc0.F \ C/ffdel3.F C/ffcel3.F \ D/D0func.F D/D0funcC.F D/Dget.F \ D/ffxd0.F D/ffxd0h.F D/ffxd0i.F D/ffxd0p.F D/ffxd0m0.F \ D/ffxd0tra.F D/ffxdbd.F D/ffdcc0.F D/ffdel4.F D/ffd0c.F \ D/ffTn.F D/ffT13.F D/ffS2.F D/ffS3n.F D/ffRn.F \ E/E0func.F E/Eget.F E/Ecoeffa.F E/Ecoeffb.F \ E/ffxe0.F E/ffdel5.F \ util/ini.F util/auxCD.F util/solve.F util/Dump.F \ util/Li2.F util/Li2omx.F util/ffinit.F util/ffxli2.F util/ffcli2.F util/ffxxyz.F \ util/ffcxyz.F util/ffcrr.F util/ffcxr.F util/fftran.F util/ffabcd.F \ util/ff2dl2.F util/ffcxs3.F util/ffcxs4.F util/ffdcxs.F util/ffbndc.F ## the following need -DCOMPLEXPARA theCFCSOURCES = \ A/Aget.F B/Bget.F B/BcoeffFF.F C/Cget.F D/Dget.F \ E/E0func.F E/Eget.F E/Ecoeffa.F E/Ecoeffb.F \ util/solve.F util/Dump.F util/Li2.F util/Li2omx.F commonCPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/include libHwLooptoolsXFC_la_SOURCES = $(theXFCSOURCES) libHwLooptoolsXFC_la_CPPFLAGS = $(commonCPPFLAGS) -libHwLooptoolsXFC_la_FCFLAGS = $(AM_FCFLAGS) -ffixed-line-length-none -libHwLooptoolsXFC_la_FFLAGS = $(AM_FFLAGS) -ffixed-line-length-none +libHwLooptoolsXFC_la_FCFLAGS = $(AM_FCFLAGS) +libHwLooptoolsXFC_la_FFLAGS = $(AM_FFLAGS) libHwLooptoolsCFC_la_SOURCES = $(theCFCSOURCES) libHwLooptoolsCFC_la_CPPFLAGS = $(commonCPPFLAGS) -DCOMPLEXPARA -libHwLooptoolsCFC_la_FCFLAGS = $(AM_FCFLAGS) -ffixed-line-length-none -libHwLooptoolsCFC_la_FFLAGS = $(AM_FFLAGS) -ffixed-line-length-none +libHwLooptoolsCFC_la_FCFLAGS = $(AM_FCFLAGS) +libHwLooptoolsCFC_la_FFLAGS = $(AM_FFLAGS) libHwLooptools_la_SOURCES = util/cache.c clooptools.cc libHwLooptools_la_CXXFLAGS = $(AM_CXXFLAGS) -Wno-strict-aliasing libHwLooptools_la_CPPFLAGS = $(commonCPPFLAGS) libHwLooptools_la_CFLAGS = $(AM_CFLAGS) -std=c99 libHwLooptools_la_LIBADD = libHwLooptoolsXFC.la libHwLooptoolsCFC.la EXTRA_PROGRAMS = tester tester_SOURCES = tester.cc tester_LDADD = libHwLooptools.la $(FCLIBS) $(THEPEGLDFLAGS) $(THEPEGLIB) diff --git a/Models/UED/UEDBase.cc b/Models/UED/UEDBase.cc --- a/Models/UED/UEDBase.cc +++ b/Models/UED/UEDBase.cc @@ -1,472 +1,471 @@ // -*- C++ -*- // // UEDBase.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2019 The Herwig Collaboration // // Herwig is licenced under version 3 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 UEDBase class. // #include "UEDBase.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace Herwig; UEDBase::UEDBase() : theRadCorr(true), theInvRadius(500.*GeV), theLambdaR(20.), theMbarH(), theSinThetaOne(0.), theVeV(246.*GeV), includeSMMass_(true), fixedCouplings_(false), includeGaugeMixing_(true) {} void UEDBase::doinit() { readDecays(false); BSMModel::doinit(); //level-1 masses and mixing angle calculateKKMasses(1); writeSpectrum(); //add the level-1 vertices. addVertex(theF1F1Z0Vertex); addVertex(theF1F1G0Vertex); addVertex(theF1F0G1Vertex); addVertex(theG1G1G0Vertex); addVertex(theG0G0G1G1Vertex); addVertex(theF1F1P0Vertex); addVertex(theF1F1W0Vertex); addVertex(theF1F0W1Vertex); addVertex(theF1F0H1Vertex); addVertex(theP0H1H1Vertex); addVertex(theZ0H1H1Vertex); addVertex(theW0A1H1Vertex); addVertex(theZ0A1h1Vertex); addVertex(theW0W1W1Vertex); readDecays(true); if(decayFile()=="") return; decayRead(); } void UEDBase::persistentOutput(PersistentOStream & os) const { os << theRadCorr << ounit(theInvRadius, GeV) << theLambdaR << theF1F1Z0Vertex << theF1F1G0Vertex << theF1F0G1Vertex << theG1G1G0Vertex << theG0G0G1G1Vertex << theF1F1P0Vertex << theF1F1W0Vertex << theF1F0W1Vertex << theF1F0H1Vertex << theP0H1H1Vertex << theZ0H1H1Vertex << theW0A1H1Vertex << theZ0A1h1Vertex << theW0W1W1Vertex << ounit(theVeV,GeV) << ounit(theMbarH, GeV) << theSinThetaOne << includeSMMass_ << fixedCouplings_ << includeGaugeMixing_; } void UEDBase::persistentInput(PersistentIStream & is, int) { is >> theRadCorr >> iunit(theInvRadius, GeV) >> theLambdaR >> theF1F1Z0Vertex >> theF1F1G0Vertex >> theF1F0G1Vertex >> theG1G1G0Vertex >> theG0G0G1G1Vertex >> theF1F1P0Vertex >> theF1F1W0Vertex >> theF1F0W1Vertex >> theF1F0H1Vertex >> theP0H1H1Vertex >> theZ0H1H1Vertex >> theW0A1H1Vertex >> theZ0A1h1Vertex >> theW0W1W1Vertex >> iunit(theVeV,GeV) >> iunit(theMbarH, GeV) >> theSinThetaOne >> includeSMMass_ >> fixedCouplings_ >> includeGaugeMixing_; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigUEDBase("Herwig::UEDBase", "HwUED.so"); void UEDBase::Init() { static ClassDocumentation documentation ("This class implements/stores the necessary information for the simulation" " of a Universal Extra Dimensions model.", "Universal extra dimensions model based on \\cite{Cheng:2002iz,Appelquist:2000nn}.", "%\\cite{Cheng:2002iz}\n" "\\bibitem{Cheng:2002iz}\n" " H.~C.~Cheng, K.~T.~Matchev and M.~Schmaltz,\n" " ``Radiative corrections to Kaluza-Klein masses,''\n" " Phys.\\ Rev.\\ D {\\bf 66}, 036005 (2002)\n" " [arXiv:hep-ph/0204342].\n" " %%CITATION = PHRVA,D66,036005;%%\n" "%\\cite{Appelquist:2000nn}\n" "\\bibitem{Appelquist:2000nn}\n" " T.~Appelquist, H.~C.~Cheng and B.~A.~Dobrescu,\n" " ``Bounds on universal extra dimensions,''\n" " Phys.\\ Rev.\\ D {\\bf 64}, 035002 (2001)\n" " [arXiv:hep-ph/0012100].\n" " %%CITATION = PHRVA,D64,035002;%%\n" ); static Switch interfaceRadiativeCorrections ("RadiativeCorrections", "Calculate the radiative corrections to the masses", &UEDBase::theRadCorr, true, false, false); static SwitchOption interfaceRadiativeCorrectionsYes (interfaceRadiativeCorrections, "Yes", "Calculate the radiative corrections to the masses", true); static SwitchOption interfaceRadiativeCorrectionsNo (interfaceRadiativeCorrections, "No", "Leave the masses of the KK particles as n/R", false); static Parameter interfaceInverseRadius ("InverseRadius", "The inverse radius of the compactified dimension ", &UEDBase::theInvRadius, GeV, 500.*GeV, ZERO, ZERO, true, false, Interface::nolimits); static Parameter interfaceLambdaR ("LambdaR", "The product of the cut-off scale and the radius of compactification", &UEDBase::theLambdaR, 20.0, 0.0, 0, false, false, Interface::lowerlim); static Parameter interfaceBoundaryMass ("HiggsBoundaryMass", "The boundary mass for the Higgs", &UEDBase::theMbarH, GeV, ZERO, ZERO, ZERO, false, false, Interface::lowerlim); static Parameter interfaceVeV ("HiggsVEV", "The vacuum expectation value of the Higgs field", &UEDBase::theVeV, GeV, 246.*GeV, ZERO, ZERO, true, false, Interface::nolimits); static Reference interfaceF1F1Z ("Vertex/F1F1Z", "The F1F1Z UED Vertex", &UEDBase::theF1F1Z0Vertex, false, false, true, false, false); static Reference interfaceF1F1G0 ("Vertex/F1F1G0", "The F1F1G UED Vertex", &UEDBase::theF1F1G0Vertex, false, false, true, false, false); static Reference interfaceF1F0G1 ("Vertex/F1F0G1", "The F1F0G0 UED Vertex", &UEDBase::theF1F0G1Vertex, false, false, true, false, false); static Reference interfaceG1G1G0 ("Vertex/G1G1G0", "The G1G1G0 UED Vertex", &UEDBase::theG1G1G0Vertex, false, false, true, false, false); static Reference interfaceG0G0G1G1 ("Vertex/G0G0G1G1", "The G0G0G1G1 UED Vertex", &UEDBase::theG0G0G1G1Vertex, false, false, true, false, false); static Reference interfaceF1F1P ("Vertex/F1F1P", "The F1F1P UED Vertex", &UEDBase::theF1F1P0Vertex, false, false, true, false, false); static Reference interfaceF1F1W ("Vertex/F1F1W", "The F1F1W UED Vertex", &UEDBase::theF1F1W0Vertex, false, false, true, false, false); static Reference interfaceF1F0W1 ("Vertex/F1F0W1", "The F1F0W1 UED Vertex", &UEDBase::theF1F0W1Vertex, false, false, true, false, false); static Reference interfaceF1F0H1 ("Vertex/F1F0H1", "The F1F0H1 UED Vertex", &UEDBase::theF1F0H1Vertex, false, false, true, false, false); static Reference interfaceP0H1H1 ("Vertex/P0H1H1", "The P0H1H1 UED Vertex", &UEDBase::theP0H1H1Vertex, false, false, true, false, false); static Reference interfaceZ0H1H1 ("Vertex/Z0H1H1", "The Z0H1H1 UED Vertex", &UEDBase::theZ0H1H1Vertex, false, false, true, false, false); static Reference interfaceW0A1H1 ("Vertex/W0A1H1", "The W0A1H1 UED Vertex", &UEDBase::theW0A1H1Vertex, false, false, true, false, false); static Reference interfaceZ0A1h1 ("Vertex/Z0A1h1", "The W0A1H1 UED Vertex", &UEDBase::theZ0A1h1Vertex, false, false, true, false, false); static Reference interfaceW0W1W1 ("Vertex/W0W1W1", "The W0W1W1 UED Vertex", &UEDBase::theW0W1W1Vertex, false, false, true, false, false); static Switch interfaceIncludeSMMass ("IncludeSMMass", "Whether or not to include the SM mass in the calculation of the masses of the KK states.", &UEDBase::includeSMMass_, true, false, false); static SwitchOption interfaceIncludeSMMassYes (interfaceIncludeSMMass, "Yes", "Include them", true); static SwitchOption interfaceIncludeSMMassNo (interfaceIncludeSMMass, "No", "Don't include them", false); static Switch interfaceFixedCouplings ("FixedCouplings", "Use fixed or running couplings to calculate the masses.", &UEDBase::fixedCouplings_, false, false, false); static SwitchOption interfaceFixedCouplingsYes (interfaceFixedCouplings, "Yes", "Use fixed couplings", true); static SwitchOption interfaceFixedCouplingsNo (interfaceFixedCouplings, "No", "Use running couplings", false); static Switch interfaceIncludeGaugeMixing ("IncludeGaugeMixing", "Whether or not to include mixing between the KK photon" " and Z in the vertices, always included in the mass", &UEDBase::includeGaugeMixing_, true, false, false); static SwitchOption interfaceIncludeGaugeMixingYes (interfaceIncludeGaugeMixing, "Yes", "Include the mixing", true); static SwitchOption interfaceIncludeGaugeMixingNo (interfaceIncludeGaugeMixing, "No", "Don't include the mixing", false); } void UEDBase::calculateKKMasses(const unsigned int n) { useMe(); if(n == 0) throw InitException() << "UEDBase::resetKKMasses - " << "Trying to reset masses with KK number == 0!" << Exception::warning; - if(theRadCorr) { - fermionMasses(n); - bosonMasses(n); + if(theRadCorr) { + fermionMasses(n); + bosonMasses(n); + } + else { + cerr << + "Warning: Radiative corrections to particle masses have been " + "turned off.\n The masses will be set to (n/R + m_sm)^1/2 and " + "the spectrum will be\n highly degenerate so that no decays " + "will occur.\n This is only meant to be used for debugging " + "purposes.\n"; + //set masses to tree level for each kk mode + long level1 = 5000000 + n*100000; + long level2 = 6000000 + n*100000; + Energy2 ndmass2 = sqr(n*theInvRadius); + for ( int i = 1; i < 38; ++i ) { + if(i == 7 || i == 17) i += 4; + if(i == 26) i += 10; + Energy kkmass = sqrt( ndmass2 + sqr(getParticleData(i)->mass()) ); + resetMass(level1 + i, kkmass); + if( i < 7 || i == 11 || i == 13 || i == 15 ) + resetMass(level2 + i, kkmass); } - else { - cerr << - "Warning: Radiative corrections to particle masses have been " - "turned off.\n The masses will be set to (n/R + m_sm)^1/2 and " - "the spectrum will be\n highly degenerate so that no decays " - "will occur.\n This is only meant to be used for debugging " - "purposes.\n"; - //set masses to tree level for each kk mode - long level1 = 5000000 + n*100000; - long level2 = 6000000 + n*100000; - Energy2 ndmass2 = sqr(n*theInvRadius); - for ( int i = 1; i < 38; ++i ) { - if(i == 7 || i == 17) i += 4; - if(i == 26) i += 10; - Energy kkmass = sqrt( ndmass2 + sqr(getParticleData(i)->mass()) ); - resetMass(level1 + i, kkmass); - if( i < 7 || i == 11 || i == 13 || i == 15 ) - resetMass(level2 + i, kkmass); - } - } - + } } void UEDBase::bosonMasses(const unsigned int n) { // Common constants const Energy2 invRad2 = theInvRadius*theInvRadius; const double g_em2 = fixedCouplings_ ? 4.*Constants::pi*alphaEMMZ() : 4.*Constants::pi*alphaEM(invRad2); const double g_s2 = fixedCouplings_ ? 4.*Constants::pi*alphaS() : 4.*Constants::pi*alphaS(invRad2); const double g_W2 = g_em2/sin2ThetaW(); const double g_P2 = g_em2/(1-sin2ThetaW()); //Should probably use a function to calculate zeta. const double zeta3 = 1.20206; const Energy2 nmass2 = sqr(n*theInvRadius); const double pi2 = sqr(Constants::pi); const double norm = 1./16./pi2; const double nnlogLR = n*n*log(theLambdaR); long level = 5000000 + n*100000; //gluon Energy2 deltaGB = g_s2*invRad2*norm*(23.*nnlogLR - 3.*zeta3/2./pi2 ); resetMass(level + 21, sqrt(nmass2 + deltaGB)); //W+/- Energy2 deltaGW = g_W2*invRad2*norm*( 15.*nnlogLR - 5.*zeta3/2./pi2 ); Energy2 mw2 = sqr(getParticleData(24)->mass()); resetMass(level + 24, sqrt(mw2 + nmass2 + deltaGW)); //Z and gamma are a mixture of Bn and W3n deltaGB = -g_P2*invRad2*norm*( 39.*zeta3/2./pi2 + nnlogLR/3. ); Energy2 mz2 = sqr(getParticleData(23)->mass()); Energy2 fp = 0.5*(mz2 + deltaGB + deltaGW + 2.*nmass2); Energy2 sp = 0.5*sqrt( sqr(deltaGB - deltaGW - 2.*mw2 + mz2) - 4.*mw2*(mw2 - mz2) ); resetMass(level + 22, sqrt(fp - sp)); resetMass(level + 23, sqrt(fp + sp)); //mixing angle will now depend on both Z* and gamma* mass //Derived expression: // // cos^2_theta_N = ( (n/R)^2 + delta_GW + mw^2 - m_gam*^2)/(m_z*^2 - m_gam*^2) // if(includeGaugeMixing_) { double cn2 = (nmass2 + deltaGW + mw2 - fp + sp)/2./sp; double sn = sqrt(1. - cn2); theMixingAngles.insert(make_pair(n, sn)); if( n == 1 ) theSinThetaOne = sn; } else { theMixingAngles.insert(make_pair(n,0.)); if( n == 1 ) theSinThetaOne = 0.; } //scalars Energy2 mh2 = sqr(getParticleData(25)->mass()); double lambda_H = mh2/sqr(theVeV); deltaGB = nnlogLR*norm*invRad2*(3.*g_W2 + (3.*g_P2/2.) - 2.*lambda_H) + sqr(theMbarH); //H0 Energy2 new_m2 = nmass2 + deltaGB; resetMass(level + 25, sqrt( mh2 + new_m2 )); //A0 resetMass(level + 36, sqrt( mz2 + new_m2 )); //H+ resetMass(level + 37, sqrt( mw2 + new_m2 )); } void UEDBase::fermionMasses(const unsigned int n) { const Energy2 invRad2 = theInvRadius*theInvRadius; const double g_em2 = fixedCouplings_ ? 4.*Constants::pi*alphaEMMZ() : 4.*Constants::pi*alphaEM(invRad2); const double g_s2 = fixedCouplings_ ? 4.*Constants::pi*alphaS() : 4.*Constants::pi*alphaS(invRad2); const double g_W2 = g_em2/sin2ThetaW(); const double g_P2 = g_em2/(1-sin2ThetaW()); const Energy nmass = n*theInvRadius; const Energy norm = nmass*log(theLambdaR)/16./Constants::pi/Constants::pi; const Energy topMass = getParticleData(6)->mass(); const double ht = sqrt(2)*topMass/theVeV; //doublets Energy deltaL = norm*(6.*g_s2 + (27.*g_W2/8.) + (g_P2/8.)); Energy deltaQ = deltaL; Energy2 shift = sqr(nmass + deltaL); long level = 5000000 + n*100000; for(long i = 1; i < 17; ++i) { if(i == 5) { i += 6; deltaL = norm*( (27.*g_W2/8.) + (9.*g_P2/8.) ); shift = sqr(nmass + deltaL); } Energy2 new_m2 = includeSMMass_ ? sqr(getParticleData(i)->mass()) + shift : shift; resetMass(level + i, sqrt(new_m2)); } //singlet shifts const Energy deltaU = norm*(6.*g_s2 + 2.*g_P2); const Energy deltaD = norm*(6.*g_s2 + 0.5*g_P2); const Energy2 shiftU = sqr(nmass + deltaU); const Energy2 shiftD = sqr(nmass + deltaD); //Top quarks seperately as they have different corrections const Energy2 mt2 = sqr(topMass); const Energy delta_Q3 = -3.*ht*ht*norm/2.; const Energy deltaTD = deltaQ + delta_Q3; const Energy deltaTS = deltaU + 2.*delta_Q3; Energy second_term = 0.5*sqrt( sqr(2.*nmass + deltaTS + deltaTD) + 4.*mt2 ); //doublet resetMass(level + 6, abs(0.5*(deltaTD - deltaTS) - second_term) ); //singlet resetMass(level + 1000000 + 6, 0.5*(deltaTD - deltaTS) + second_term); //Bottom quarks const Energy2 mb2 = sqr(getParticleData(5)->mass()); const Energy deltaBS = deltaD; second_term = 0.5*sqrt( sqr(2.*nmass + deltaBS + deltaTD) + 4.*mb2 ); //doublet resetMass(level + 1000000 + 5, abs(0.5*(deltaTD - deltaBS) - second_term) ); //singlet resetMass(level + 5, 0.5*(deltaTD - deltaBS) + second_term); // others //lepton Energy delta = 9.*norm*g_P2/2.; shift = sqr(nmass + delta); level += 1000000; for(long i = 1; i < 17; ) { if(i == 5) i += 6; Energy2 smMass2(sqr(getParticleData(i)->mass())); if(i < 6) { Energy2 new_m2 = includeSMMass_ ? smMass2 : ZERO; if( i % 2 == 0) new_m2 = shiftU; else new_m2 = shiftD; resetMass(level + i, sqrt(new_m2)); ++i; } else { if(includeSMMass_) resetMass(level + i, sqrt(smMass2 + shift)); else resetMass(level + i, sqrt(shift)); i += 2; } } } void UEDBase::resetMass(long id, Energy mass) { theMasses.push_back(make_pair(id, mass)); StandardModel::resetMass(id,mass); } void UEDBase::writeSpectrum() { sort(theMasses.begin(), theMasses.end(), lowerMass); ostream & ofs = CurrentGenerator::current().misc(); ofs << "# MUED Model Particle Spectrum\n" << "# R^-1: " << theInvRadius/GeV << " GeV\n" << "# Lambda * R: " << theLambdaR << "\n" << "# Higgs Mass: " << getParticleData(25)->mass()/GeV << " GeV\n"; ofs << "#\n# ID\t\t\tMass(GeV)\n"; while (!theMasses.empty()) { IDMassPair tmp = theMasses.back(); tcPDPtr data = getParticleData(tmp.first); ofs << tmp.first << "\t\t\t" << tmp.second/GeV << "\t\t" << (data? data->PDGName() : "") << endl; theMasses.pop_back(); } ofs << "#\n"; } double UEDBase::sinThetaN(const unsigned int n) const { WAMap::const_iterator pos = theMixingAngles.find(n); if(pos != theMixingAngles.end()) return pos->second; else { throw Exception() << "UEDBase::sinThetaN() - A mixing angle has " << "been requested for a level that does not " << "exist. Check that the radiative corrections " << "for the " << n << "th level have been " << "calculated." << Exception::warning; return 0.0; } } diff --git a/m4/herwig.m4 b/m4/herwig.m4 --- a/m4/herwig.m4 +++ b/m4/herwig.m4 @@ -1,922 +1,973 @@ dnl ##### THEPEG ##### AC_DEFUN([HERWIG_CHECK_THEPEG], [ defaultlocation="${prefix}" test "x$defaultlocation" = xNONE && defaultlocation="${ac_default_prefix}" AC_MSG_CHECKING([for libThePEG in]) AC_ARG_WITH(thepeg, AC_HELP_STRING([--with-thepeg=DIR],[location of ThePEG installation]), [], [with_thepeg="${defaultlocation}"]) AC_MSG_RESULT([$with_thepeg]) if test "x$with_thepeg" = "xno"; then AC_MSG_ERROR([Cannot build Herwig without ThePEG. Please set --with-thepeg.]) fi THEPEGLDFLAGS="-L${with_thepeg}/lib/ThePEG" THEPEGHASLHAPDF="no" if test -e ${with_thepeg}/lib/ThePEG/ThePEGLHAPDF.so ; then THEPEGHASLHAPDF="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/ThePEGLHAPDF.so ; then THEPEGHASLHAPDF="yes" fi fi if test "x$THEPEGHASLHAPDF" == "xno" ; then AC_MSG_ERROR([Herwig requires ThePEG to be build with lhapdf.]) fi THEPEGHASFASTJET="no" if test -e ${with_thepeg}/lib/ThePEG/FastJetFinder.so ; then THEPEGHASFASTJET="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/FastJetFinder.so ; then THEPEGHASFASTJET="yes" fi fi if test "x$THEPEGHASFASTJET" == "xno" ; then AC_MSG_ERROR([Herwig requires ThePEG to be build with FastJet.]) fi THEPEGPATH="${with_thepeg}" oldldflags="$LDFLAGS" oldlibs="$LIBS" LDFLAGS="$LDFLAGS $THEPEGLDFLAGS" AC_CHECK_LIB([ThePEG],[debugThePEG],[], [AC_MSG_ERROR([No ThePEG libraries in $THEPEGLDFLAGS. Please set --with-thepeg.])]) AC_SUBST([THEPEGLIB],[-lThePEG]) AC_SUBST(THEPEGLDFLAGS) AC_SUBST(THEPEGPATH) AC_SUBST(THEPEGHASLHAPDF) AC_SUBST(THEPEGHASFASTJET) LIBS="$oldlibs" LDFLAGS="$oldldflags" AC_MSG_CHECKING([for ThePEG headers in]) AC_ARG_WITH([thepeg-headers], AC_HELP_STRING([--with-thepeg-headers=DIR],[location of ThePEG include directory]), [], [with_thepeg_headers="${with_thepeg}/include"]) AC_MSG_RESULT([$with_thepeg_headers]) if test "x$with_thepeg_headers" = "xno"; then AC_MSG_ERROR([Cannot build Herwig without ThePEG headers. Please set --with-thepeg-headers.]) fi THEPEGINCLUDE="-I$with_thepeg_headers" oldcppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $THEPEGINCLUDE" AC_CHECK_HEADER([ThePEG/Config/ThePEG.h],[], [AC_MSG_ERROR([No ThePEG headers in $with_thepeg_headers. Please set --with-thepeg-headers.])]) CPPFLAGS="$oldcppflags" AC_SUBST(THEPEGINCLUDE) AC_MSG_CHECKING([for HepMCAnalysis.so in ThePEG]) THEPEGHASHEPMC="no" if test -e ${with_thepeg}/lib/ThePEG/HepMCAnalysis.so ; then THEPEGHASHEPMC="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/HepMCAnalysis.so ; then THEPEGHASHEPMC="yes" fi fi if test "x$THEPEGHASHEPMC" == "xno" ; then CREATE_HEPMC="# create" AC_MSG_RESULT([not found]) else CREATE_HEPMC="create" AC_MSG_RESULT([found]) fi AC_SUBST([CREATE_HEPMC]) AC_MSG_CHECKING([for RivetAnalysis.so in ThePEG]) THEPEGHASRIVET="no" if test -e ${with_thepeg}/lib/ThePEG/RivetAnalysis.so ; then THEPEGHASRIVET="yes" fi if test "${host_cpu}" == "x86_64" -a -e ${with_thepeg}/lib64/ThePEG/libThePEG.so ; then THEPEGLDFLAGS="-L${with_thepeg}/lib64/ThePEG" if test -e ${with_thepeg}/lib64/ThePEG/RivetAnalysis.so ; then THEPEGHASRIVET="yes" fi fi if test "x$THEPEGHASRIVET" == "xno" ; then CREATE_RIVET="# create" AC_MSG_RESULT([not found]) else CREATE_RIVET="create" AC_MSG_RESULT([found]) fi AM_CONDITIONAL(HAVE_RIVET,[test x$THEPEGHASRIVET = xyes]) AC_SUBST([CREATE_RIVET]) ]) dnl ##### LOOPTOOLS ##### AC_DEFUN([HERWIG_LOOPTOOLS], [ AC_REQUIRE([AC_PROG_FC]) AC_REQUIRE([AC_FC_LIBRARY_LDFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([HERWIG_COMPILERFLAGS]) AC_MSG_CHECKING([if Looptools build works]) enable_looptools=yes if test "x$GCC" = "xyes"; then case "${host}" in x86_64-*|*-darwin1*) AM_FCFLAGS="$AM_FCFLAGS -fdefault-integer-8" ;; esac AC_LANG_PUSH([Fortran]) oldFCFLAGS="$FCFLAGS" FCFLAGS="$AM_FCFLAGS" AC_COMPILE_IFELSE( AC_LANG_PROGRAM([],[ print *[,]"Hello"]), [], [AC_MSG_RESULT([no]) AC_MSG_ERROR([needs gfortran on 64bit machines])] ) FCFLAGS="$oldFCFLAGS" AC_LANG_POP([Fortran]) fi AC_MSG_RESULT([$enable_looptools]) -if test "x$GCC" = "xyes"; then - AC_LANG_PUSH([Fortran]) - oldFCFLAGS="$FCFLAGS" - AC_MSG_CHECKING([checking if fortran compiler supports -std=legacy]) - FCFLAGS="-std=legacy" - AC_COMPILE_IFELSE( - AC_LANG_PROGRAM([],[ print *[,]"Hello"]), - [AC_MSG_RESULT([yes]) - AM_FCFLAGS="$AM_FCFLAGS -std=legacy" - AM_FFLAGS="$AM_FFLAGS -std=legacy"], - [AC_MSG_RESULT([no])] - ) - FCFLAGS="$oldFCFLAGS" - AC_LANG_POP([Fortran]) -fi +AC_LANG_PUSH([Fortran]) +AC_MSG_CHECKING([checking if fortran compiler compiles argument mismatches]) +AC_COMPILE_IFELSE(AC_LANG_SOURCE([[ + program temp + call a(1.0D0) + end program + subroutine a(b) + double complex b + end]]), + [AC_MSG_RESULT([yes])], + [oldFCFLAGS="$FCFLAGS" + FCFLAGS="-std=legacy" + AC_MSG_CHECKING([checking if fortran compiler compiles argument mismatches with -std=legacy]) + AC_COMPILE_IFELSE(AC_LANG_SOURCE([[ + program temp + double precision b + double complex c + b = 1.0D0 + c =1.0D0 + call a(b) + call a(c) + end program + subroutine a(b) + double complex b + end]]), + [AC_MSG_RESULT([yes]) + AM_FCFLAGS="$AM_FCFLAGS -std=legacy"], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([fortran compiler won't compile LoopTools])]) + FCFLAGS="$oldFCFLAGS -std=legacy"] +) +AC_MSG_CHECKING([checking if fortran compiler compiles long lines]) +AC_COMPILE_IFELSE(AC_LANG_SOURCE([[ + program temp + write (*,*) 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + end program]]), + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + oldFCFLAGS="$FCFLAGS" + FCFLAGS="-ffixed-line-length-none" + AC_MSG_CHECKING([checking if fortran compiler compiles long lines with -ffixed-line-length-none]) + AC_COMPILE_IFELSE(AC_LANG_SOURCE([[ + program temp + write (*,*) 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + end program]]), + [AC_MSG_RESULT([yes]) + AM_FCFLAGS="$AM_FCFLAGS -ffixed-line-length-none" + FCFLAGS="$oldFCFLAGS -ffixed-line-length-none"], + [FCFLAGS="-132" + AC_MSG_CHECKING([checking if fortran compiler compiles long lines with -132]) + AC_COMPILE_IFELSE(AC_LANG_SOURCE([[ + program temp + write (*,*) 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + end program]]), + [AC_MSG_RESULT([yes]) + AM_FCFLAGS="$AM_FCFLAGS -132" + FCFLAGS="$oldFCFLAGS -132"], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([fortran compiler won't compile LoopTools])])]) + ] +) + + +AC_LANG_POP([Fortran]) + + AC_SUBST([F77],[$FC]) AC_SUBST([FFLAGS],[$FCFLAGS]) AC_SUBST([AM_FFLAGS],[$AM_FCFLAGS]) AC_SUBST([FLIBS],[$FCLIBS]) ]) dnl ##### VBFNLO ##### AC_DEFUN([HERWIG_CHECK_VBFNLO], [ AC_MSG_CHECKING([for VBFNLO]) AC_ARG_WITH([vbfnlo], AS_HELP_STRING([--with-vbfnlo=DIR], [Installation path of VBFNLO]), [], [with_vbfnlo=no] ) AC_MSG_RESULT([$with_vbfnlo]) AS_IF([test "x$with_vbfnlo" != "xno"], [AC_CHECK_FILES( ${with_vbfnlo}/lib/VBFNLO/libVBFNLO.so, [have_vbfnlo=lib], [have_vbfnlo=no])], [have_vbfnlo=no]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno" ], [AC_CHECK_FILES( ${with_vbfnlo}/lib64/VBFNLO/libVBFNLO.so, [have_vbfnlo=lib64], [have_vbfnlo=no])]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno" ], [AC_CHECK_FILES( ${with_vbfnlo}/lib/VBFNLO/libVBFNLO.dylib, [have_vbfnlo=lib], [have_vbfnlo=no])]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno" ], [AC_CHECK_FILES( ${with_vbfnlo}/lib64/VBFNLO/libVBFNLO.dylib, [have_vbfnlo=lib64], [have_vbfnlo=no])]) AS_IF([test "x$have_vbfnlo" = "xlib"], [VBFNLOLIBS=${with_vbfnlo}/lib/VBFNLO AC_SUBST(VBFNLOLIBS) ]) AS_IF([test "x$have_vbfnlo" = "xlib64"], [VBFNLOLIBS=${with_vbfnlo}/lib64/VBFNLO AC_SUBST(VBFNLOLIBS) ]) AS_IF([test "x$with_vbfnlo" != "xno" -a "x$have_vbfnlo" = "xno"], [AC_MSG_ERROR([vbfnlo requested but not found])]) AM_CONDITIONAL(HAVE_VBFNLO,[test "x$have_vbfnlo" = "xlib" -o "x$have_vbfnlo" = "xlib64"]) if test "x$have_vbfnlo" = "xlib" -o "x$have_vbfnlo" = "xlib64" ; then AC_REQUIRE([AC_PROG_SED]) VBFNLOINCLUDE=${with_vbfnlo}/include AC_SUBST(VBFNLOINCLUDE) VBFNLOLIB=$(echo ${with_vbfnlo}/${have_vbfnlo}/VBFNLO | $SED -e 's%/\+%/%g') AC_SUBST(VBFNLOLIB) LOAD_VBFNLO="library" CREATE_VBFNLO="create" INSERT_VBFNLO="insert" SET_VBFNLO="set" DO_VBFNLO="do" MKDIR_VBFNLO="mkdir" else LOAD_VBFNLO="# library" CREATE_VBFNLO="# create" INSERT_VBFNLO="# insert" SET_VBFNLO="# set" DO_VBFNLO="# do" MKDIR_VBFNLO="# mkdir" fi AC_SUBST([LOAD_VBFNLO]) AC_SUBST([CREATE_VBFNLO]) AC_SUBST([INSERT_VBFNLO]) AC_SUBST([SET_VBFNLO]) AC_SUBST([DO_VBFNLO]) AC_SUBST([MKDIR_VBFNLO]) ]) dnl ##### njet ##### AC_DEFUN([HERWIG_CHECK_NJET], [ AC_MSG_CHECKING([for njet]) AC_ARG_WITH([njet], AS_HELP_STRING([--with-njet=DIR], [Installation path of njet]), [], [with_njet=no] ) AC_MSG_RESULT([$with_njet]) AS_IF([test "x$with_njet" != "xno"], [AC_CHECK_FILES( ${with_njet}/lib/libnjet2.so, [have_njet=lib], [have_njet=no])], [have_njet=no]) AS_IF([test "x$with_njet" != "xno" -a "x$have_njet" = "xno" ], [AC_CHECK_FILES( ${with_njet}/lib64/libnjet2.so, [have_njet=lib64], [have_njet=no])]) AS_IF([test "x$with_njet" != "xno" -a "x$have_njet" = "xno" ], [AC_CHECK_FILES( ${with_njet}/lib/libnjet2.dylib, [have_njet=lib], [have_njet=no])]) AS_IF([test "x$have_njet" = "xlib"], [NJETLIBPATH=${with_njet}/lib AC_SUBST(NJETLIBPATH) NJETINCLUDEPATH=${with_njet}/include AC_SUBST(NJETINCLUDEPATH) NJETPREFIX=${with_njet} AC_SUBST(NJETPREFIX) ]) AS_IF([test "x$have_njet" = "xlib64"], [NJETLIBPATH=${with_njet}/lib64 AC_SUBST(NJETLIBPATH) NJETINCLUDEPATH=${with_njet}/include AC_SUBST(NJETINCLUDEPATH) NJETPREFIX=${with_njet} AC_SUBST(NJETPREFIX) ]) AS_IF([test "x$with_njet" != "xno" -a "x$have_njet" = "xno"], [AC_MSG_ERROR([njet requested but not found])]) AM_CONDITIONAL(HAVE_NJET,[test "x$have_njet" = "xlib" -o "x$have_njet" = "xlib64"]) if test "x$have_njet" = "xlib" -o "x$have_njet" = "xlib64" ; then LOAD_NJET="library" CREATE_NJET="create" INSERT_NJET="insert" DO_NJET="do" else LOAD_NJET="# library" CREATE_NJET="# create" INSERT_NJET="# insert" DO_NJET="# do" fi AC_SUBST([LOAD_NJET]) AC_SUBST([CREATE_NJET]) AC_SUBST([INSERT_NJET]) AC_SUBST([DO_NJET]) ]) dnl ##### gosam ##### AC_DEFUN([HERWIG_CHECK_GOSAM], [ AC_MSG_CHECKING([for GoSam]) AC_ARG_WITH([gosam], AS_HELP_STRING([--with-gosam=DIR], [Installation path of GoSam]), [], [with_gosam=no] ) AC_MSG_RESULT([$with_gosam]) AS_IF([test "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/bin/gosam.py, [have_gosam=lib], [have_gosam=no])], [have_gosam=no]) AS_IF([test "x$have_gosam" = "xlib"], [GOSAMPREFIX=${with_gosam} AC_SUBST(GOSAMPREFIX) ]) AS_IF([test "x$with_gosam" != "xno" -a "x$have_gosam" = "xno"], [AC_MSG_ERROR([GoSam requested but not found])]) AS_IF([test "x$with_gosam" != "xno"], [AC_MSG_CHECKING([for GoSam version >= 2.0.4]) tmp_gosamversion=[$(${with_gosam}/bin/gosam.py --version | grep 'GoSam.*rev' | cut -d' ' -f2)] AX_COMPARE_VERSION([${tmp_gosamversion}],[lt],[2.0.4], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Herwig requires GoSam 2.0.4 or later, found ${tmp_gosamversion}])], [AC_MSG_RESULT([yes])])]) AM_CONDITIONAL(HAVE_GOSAM,[test "x$have_gosam" = "xlib" ]) if test "x$have_gosam" = "xlib" ; then LOAD_GOSAM="library" CREATE_GOSAM="create" INSERT_GOSAM="insert" DO_GOSAM="do" else LOAD_GOSAM="# library" CREATE_GOSAM="# create" INSERT_GOSAM="# insert" DO_GOSAM="# do" fi AC_SUBST([LOAD_GOSAM]) AC_SUBST([CREATE_GOSAM]) AC_SUBST([INSERT_GOSAM]) AC_SUBST([DO_GOSAM]) ]) dnl ##### gosam-contrib ##### AC_DEFUN([HERWIG_CHECK_GOSAM_CONTRIB], [ AC_MSG_CHECKING([for gosam-contrib]) AC_ARG_WITH([gosam-contrib], AS_HELP_STRING([--with-gosam-contrib=DIR], [Installation path of gosam-contrib]), [], [with_gosam_contrib=no] ) AC_MSG_RESULT([$with_gosam_contrib]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib/libsamurai.so, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib64/libsamurai.so, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib/libsamurai.dylib, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_CHECK_FILES( ${with_gosam}/lib64/libsamurai.dylib, [with_gosam_contrib=${with_gosam}], []) ]) AS_IF([test "x$with_gosam_contrib" = "xno" -a "x$with_gosam" != "xno"], [AC_MSG_ERROR([GoSam requested without requesting GoSam-Contrib])]) AS_IF([test "x$with_gosam_contrib" != "xno"], [AC_CHECK_FILES( ${with_gosam_contrib}/lib/libsamurai.so, [have_gosam_contrib=lib], [have_gosam_contrib=no])], [have_gosam_contrib=no]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno" ], [AC_CHECK_FILES( ${with_gosam_contrib}/lib64/libsamurai.so, [have_gosam_contrib=lib64], [have_gosam_contrib=no])]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno" ], [AC_CHECK_FILES( ${with_gosam_contrib}/lib/libsamurai.dylib, [have_gosam_contrib=lib], [have_gosam_contrib=no])]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno" ], [AC_CHECK_FILES( ${with_gosam_contrib}/lib64/libsamurai.dylib, [have_gosam_contrib=lib64], [have_gosam_contrib=no])]) AS_IF([test "x$have_gosam_contrib" != "xno"], [GOSAMCONTRIBPREFIX=${with_gosam_contrib} AC_SUBST(GOSAMCONTRIBPREFIX) ]) AS_IF([test "x$have_gosam_contrib" = "xlib"], [GOSAMCONTRIBLIBS=${with_gosam_contrib}/lib AC_SUBST(GOSAMCONTRIBLIBS) ]) AS_IF([test "x$have_gosam_contrib" = "xlib64"], [GOSAMCONTRIBLIBS=${with_gosam_contrib}/lib64 AC_SUBST(GOSAMCONTRIBLIBS) ]) AS_IF([test "x$with_gosam_contrib" != "xno" -a "x$have_gosam_contrib" = "xno"], [AC_MSG_ERROR([GoSam-Contrib requested but not found])]) AM_CONDITIONAL(HAVE_GOSAM_CONTRIB,[test "x$have_gosam_contrib" = "xlib" -o "x$have_gosam_contrib" = "xlib64"]) if test "x$have_gosam_contrib" = "xlib" -o "x$have_gosam_contrib" = "xlib64" ; then LOAD_GOSAM_CONTRIB="library" CREATE_GOSAM_CONTRIB="create" INSERT_GOSAM_CONTRIB="insert" else LOAD_GOSAM_CONTRIB="# library" CREATE_GOSAM_CONTRIB="# create" INSERT_GOSAM_CONTRIB="# insert" fi AC_SUBST([LOAD_GOSAM_CONTRIB]) AC_SUBST([CREATE_GOSAM_CONTRIB]) AC_SUBST([INSERT_GOSAM_CONTRIB]) ]) dnl ##### OpenLoops ##### AC_DEFUN([HERWIG_CHECK_OPENLOOPS], [ AC_MSG_CHECKING([for OpenLoops]) AC_ARG_WITH([openloops], AS_HELP_STRING([--with-openloops=DIR], [Installation path of OpenLoops]), [], [with_openloops=no] ) AC_MSG_RESULT([$with_openloops]) AS_IF([test "x$with_openloops" != "xno"], [AC_CHECK_FILES( ${with_openloops}/lib/libopenloops.so, [have_openloops=lib], [have_openloops=no])], [have_openloops=no]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno" ], [AC_CHECK_FILES( ${with_openloops}/lib/libopenloops.dylib, [have_openloops=lib], [have_openloops=no])]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno" ], [AC_CHECK_FILES( ${with_openloops}/lib64/libopenloops.so, [have_openloops=lib64], [have_openloops=no])]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno" ], [AC_CHECK_FILES( ${with_openloops}/lib64/libopenloops.dylib, [have_openloops=lib64], [have_openloops=no])]) AS_IF([test "x$have_openloops" = "xlib"], [OPENLOOPSLIBS=${with_openloops}/lib AC_SUBST(OPENLOOPSLIBS) ]) AS_IF([test "x$have_openloops" = "xlib64"], [OPENLOOPSLIBS=${with_openloops}/lib64 AC_SUBST(OPENLOOPSLIBS) ]) AS_IF([test "x$with_openloops" != "xno" -a "x$have_openloops" = "xno"], [AC_MSG_ERROR([OpenLoops requested but not found])]) AM_CONDITIONAL(HAVE_OPENLOOPS,[test "x$have_openloops" = "xlib" -o "x$have_openloops" = "xlib64"]) if test "x$have_openloops" = "xlib" -o "x$have_openloops" = "xlib64" ; then OPENLOOPSPREFIX=${with_openloops} LOAD_OPENLOOPS="library" CREATE_OPENLOOPS="create" INSERT_OPENLOOPS="insert" SET_OPENLOOPS="set" DO_OPENLOOPS="do" MKDIR_OPENLOOPS="mkdir" else LOAD_OPENLOOPS="# library" CREATE_OPENLOOPS="# create" INSERT_OPENLOOPS="# insert" SET_OPENLOOPS="# set" DO_OPENLOOPS="# do" MKDIR_OPENLOOPS="# mkdir" fi AC_SUBST([OPENLOOPSPREFIX]) AC_SUBST([LOAD_OPENLOOPS]) AC_SUBST([CREATE_OPENLOOPS]) AC_SUBST([INSERT_OPENLOOPS]) AC_SUBST([SET_OPENLOOPS]) AC_SUBST([DO_OPENLOOPS]) AC_SUBST([MKDIR_OPENLOOPS]) ]) ######################################### dnl ##### madgraph ##### AC_DEFUN([HERWIG_CHECK_MADGRAPH], [ AC_MSG_CHECKING([for MadGraph]) AC_ARG_WITH([madgraph], AS_HELP_STRING([--with-madgraph=DIR], [Installation path of MadGraph]), [], [with_madgraph=no] ) AC_MSG_RESULT([$with_madgraph]) AS_IF([test "x$with_madgraph" != "xno"], [AC_CHECK_FILES( ${with_madgraph}/bin/mg5_aMC, [have_madgraph=yes], [have_madgraph=no])], [have_madgraph=no]) AS_IF([test "x$have_madgraph" = "xyes"], [MADGRAPHPREFIX=${with_madgraph} AC_SUBST(MADGRAPHPREFIX) ]) AS_IF([test "x$with_madgraph" != "xno" -a "x$have_madgraph" = "xno"], [AC_MSG_ERROR([MadGraph requested but not found])]) AM_CONDITIONAL(HAVE_MADGRAPH,[test "x$have_madgraph" = "xyes" ]) if test "x$have_madgraph" = "xyes" ; then LOAD_MADGRAPH="library" CREATE_MADGRAPH="create" INSERT_MADGRAPH="insert" SET_MADGRAPH="set" DO_MADGRAPH="do" else LOAD_MADGRAPH="# library" CREATE_MADGRAPH="# create" INSERT_MADGRAPH="# insert" SET_MADGRAPH="# set" DO_MADGRAPH="# do" fi AC_SUBST([LOAD_MADGRAPH]) AC_SUBST([CREATE_MADGRAPH]) AC_SUBST([INSERT_MADGRAPH]) AC_SUBST([SET_MADGRAPH]) AC_SUBST([DO_MADGRAPH]) ]) dnl ##### EvtGen ##### AC_DEFUN([HERWIG_CHECK_EVTGEN], [ AC_MSG_CHECKING([for evtgen]) AC_ARG_WITH([evtgen], AS_HELP_STRING([--with-evtgen=DIR], [Installation path of EvtGen]), [], [with_evtgen=no] ) AC_MSG_RESULT([$with_evtgen]) AS_IF([test "x$with_evtgen" != "xno"], [AC_CHECK_FILES( ${with_evtgen}/lib/libEvtGenExternal.so, [have_evtgen=lib], [have_evtgen=no])], [have_evtgen=no]) AS_IF([test "x$with_evtgen" != "xno" -a "x$have_evtgen" = "xno"], [AC_CHECK_FILES( ${with_evtgen}/lib64/libEvtGenExternal.so, [have_evtgen=lib64], [have_evtgen=no])]) AS_IF([test "x$with_evtgen" != "xno" -a "x$have_evtgen" = "xno" ], [AC_CHECK_FILES( ${with_evtgen}/lib/libEvtGenExternal.dylib, [have_evtgen=lib], [have_evtgen=no])]) AS_IF([test "x$have_evtgen" = "xlib" -o "x$have_evtgen" = "xlib64" ], [EVTGENPREFIX=${with_evtgen} AC_SUBST(EVTGENPREFIX) ]) AS_IF([test "x$with_evtgen" != "xno" -a "x$have_evtgen" = "xno"], [AC_MSG_ERROR([EvtGen requested but not found])]) AC_SUBST([EVTGENINCLUDE],[-I$EVTGENPREFIX/include]) AM_CONDITIONAL(HAVE_EVTGEN,[test "x$have_evtgen" = "xlib" -o "x$have_evtgen" = "xlib64"]) if test "x$have_evtgen" = "xlib" ; then LOAD_EVTGEN_DECAYS="read EvtGenBDecays.in" LOAD_EVTGEN_DECAYER="read EvtGenDecayer.in" EVTGENLIBS="-L$with_evtgen/lib -lEvtGen -lEvtGenExternal" elif test "x$have_evtgen" = "xlib64" ; then LOAD_EVTGEN_DECAYS="read EvtGenBDecays.in" LOAD_EVTGEN_DECAYER="read EvtGenDecayer.in" EVTGENLIBS="-L$with_evtgen/lib64 -lEvtGen -lEvtGenExternal" else LOAD_EVTGEN_DECAYS="read HerwigBDecays.in" LOAD_EVTGEN_DECAYER="#read EvtGenDecayer.in" EVTGENLIBS="" fi AC_SUBST([LOAD_EVTGEN_DECAYS]) AC_SUBST([LOAD_EVTGEN_DECAYER]) AC_SUBST([EVTGENLIBS]) ]) AC_DEFUN([HERWIG_CHECK_PYTHIA], [ dnl check if a directory is specified for Pythia AC_ARG_WITH(pythia, [AC_HELP_STRING([--with-pythia=dir], [Assume the given directory for Pythia])]) dnl search for the pythia-config script if test "$with_pythia" = ""; then AC_PATH_PROG(pythiaconfig, pythia8-config, no) else AC_PATH_PROG(pythiaconfig, pythia8-config, no, ${with_pythia}/bin) fi if test "${pythiaconfig}" = "no"; then AC_MSG_CHECKING(Pythia) AC_MSG_RESULT(no); # $2 else PYTHIA8DATA=`${pythiaconfig} --datadir`/xmldoc fi AC_SUBST(PYTHIA8DATA) ]) dnl CHECK PYTHIA END dnl ###### GSL ###### AC_DEFUN([HERWIG_CHECK_GSL], [ AC_MSG_CHECKING([for gsl location]) GSLINCLUDE="" GSLLIBS="" AC_ARG_WITH(gsl, AC_HELP_STRING([--with-gsl=DIR],[location of gsl installation @<:@default=system libs@:>@]), [], [with_gsl=system]) if test "x$with_gsl" = "xno"; then AC_MSG_ERROR([libgsl is required. Please install the GNU scientific library and header files.]) fi if test "x$with_gsl" = "xsystem"; then AC_MSG_RESULT([in system libraries]) oldlibs="$LIBS" AC_CHECK_LIB(m,main) AC_CHECK_LIB(gslcblas,main) AC_CHECK_LIB(gsl,main,[], [ AC_MSG_ERROR([Cannot find libgsl. Please install the GNU scientific library and header files or use --with-gsl=.]) ] ) GSLLIBS="$LIBS" GSLPATH="$with_gsl" LIBS=$oldlibs else if test "`uname -m`" = "x86_64" -a -e "$with_gsl/lib64/libgsl.a" -a -d "$with_gsl/include/gsl"; then AC_MSG_RESULT([found in $with_gsl]) GSLLIBS="-L$with_gsl/lib64 -R$with_gsl/lib64 -lgslcblas -lgsl" GSLINCLUDE="-I$with_gsl/include" GSLPATH="$with_gsl" elif test -e "$with_gsl/lib/libgsl.a" -a -d "$with_gsl/include/gsl"; then AC_MSG_RESULT([found in $with_gsl]) GSLLIBS="-L$with_gsl/lib -R$with_gsl/lib -lgslcblas -lgsl" GSLINCLUDE="-I$with_gsl/include" GSLPATH="$with_gsl" else AC_MSG_RESULT([not found]) AC_MSG_ERROR([Can't find $with_gsl/lib/libgsl.a or the headers in $with_gsl/include]) fi fi AC_SUBST(GSLINCLUDE) AC_SUBST(GSLLIBS) AC_SUBST(GSLPATH) ]) dnl ##### COMPILERFLAGS ##### AC_DEFUN([HERWIG_COMPILERFLAGS], [ AC_REQUIRE([HERWIG_CHECK_GSL]) AC_REQUIRE([HERWIG_CHECK_THEPEG]) AC_REQUIRE([BOOST_REQUIRE]) AC_REQUIRE([AX_COMPILER_VENDOR]) AM_CPPFLAGS="-I\$(top_builddir)/include $THEPEGINCLUDE \$(GSLINCLUDE) \$(BOOST_CPPFLAGS)" AC_MSG_CHECKING([for debugging mode]) AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],[debug mode, use --enable-debug=slow for additional options that slow down the run.]), [], [enable_debug=no] ) AC_MSG_RESULT([$enable_debug]) if test "x$enable_debug" = "xno"; then debugflags="" else debugflags="-g" fi dnl -Wfloat-equal -fvisibility-inlines-hidden -Wctor-dtor-privacy -Weffc++ if test -n "$GCC"; then warnflags="-pedantic -Wall -Wextra -Wno-overloaded-virtual" if test "x$enable_debug" = "xslow"; then debugflags="$debugflags -fno-inline" AM_CPPFLAGS="$AM_CPPFLAGS -D_GLIBCXX_DEBUG" fi fi dnl do an actual capability check on ld instead of this workaround case "${host}" in *-darwin*) ;; *) AM_LDFLAGS="-Wl,--enable-new-dtags" ;; esac case "${ax_cv_cxx_compiler_vendor}" in gnu) AM_CXXFLAGS="-pedantic -Wall -W" ;; clang) AM_CXXFLAGS="-pedantic -Wall -Wno-overloaded-virtual -Wno-unused-function -Wno-unused-parameter" dnl -Wno-unneeded-internal-declaration ;; intel) AM_CXXFLAGS="-strict-ansi -Wall -wd13000,1418,981,444,383,1599,1572,2259,980" ;; esac AC_SUBST(AM_CPPFLAGS) AC_SUBST(AM_CFLAGS, ["$warnflags $debugflags"]) AC_SUBST(AM_CXXFLAGS,["$AM_CXXFLAGS $warnflags $debugflags"]) AC_SUBST(AM_FCFLAGS, ["$debugflags"]) AC_SUBST(AM_LDFLAGS) ]) AC_DEFUN([HERWIG_ENABLE_MODELS], [ AC_MSG_CHECKING([if BSM models should be built]) AC_ARG_ENABLE(models, AC_HELP_STRING([--disable-models],[Turn off compilation of BSM models.]), [], [enable_models=yes] ) AC_MSG_RESULT([$enable_models]) LOAD_BSM="" if test "$enable_models" = "yes"; then LOAD_BSM="read BSMlibs.in" fi AC_SUBST(LOAD_BSM) AM_CONDITIONAL(WANT_BSM,[test "$enable_models" = "yes"]) ]) AC_DEFUN([HERWIG_OVERVIEW], [ FCSTRING=`$FC --version | head -1` CXXSTRING=`$CXX --version | head -1` CCSTRING=`$CC --version | head -1` if test "x$PYTHON" != "x:" then python_was_found="yes, using Python $PYTHON_VERSION" else python_was_found="no, requires Python >= 2.6" fi cat << _HW_EOF_ > config.herwig ***************************************************** *** $PACKAGE_STRING configuration summary *** Please include this information in bug reports! ***-------------------------------------------------- *** Prefix: $prefix *** *** BSM models: $enable_models *** UFO converter: ${python_was_found} *** *** Herwig debug mode: $enable_debug *** *** ThePEG: $with_thepeg *** ThePEG headers: $with_thepeg_headers *** *** GoSam: $with_gosam *** GoSam-Contrib: $with_gosam_contrib *** MadGraph: $with_madgraph *** njet: $with_njet *** OpenLoops: $with_openloops *** VBFNLO: $with_vbfnlo *** *** EvtGen: $with_evtgen *** GSL: $with_gsl *** boost: ${BOOST_CPPFLAGS:-system} *** Fastjet: ${fjconfig} *** *** Host: $host *** CC: $CCSTRING *** CXX: $CXXSTRING *** FC: $FCSTRING *** *** CXXFLAGS: $CXXFLAGS *** FCFLAGS: $FCFLAGS ***************************************************** _HW_EOF_ ]) diff --git a/src/Matchbox/FiveFlavourNoBMassScheme.in b/src/Matchbox/FiveFlavourNoBMassScheme.in --- a/src/Matchbox/FiveFlavourNoBMassScheme.in +++ b/src/Matchbox/FiveFlavourNoBMassScheme.in @@ -1,126 +1,126 @@ # -*- ThePEG-repository -*- cd /Herwig/MatrixElements/Matchbox do Factory:StartParticleGroup p insert Factory:ParticleGroup 0 /Herwig/Particles/b insert Factory:ParticleGroup 0 /Herwig/Particles/bbar insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup do Factory:StartParticleGroup pbar insert Factory:ParticleGroup 0 /Herwig/Particles/b insert Factory:ParticleGroup 0 /Herwig/Particles/bbar insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup cd /Herwig/Merging/ do MergingFactory:StartParticleGroup p insert MergingFactory:ParticleGroup 0 /Herwig/Particles/b insert MergingFactory:ParticleGroup 0 /Herwig/Particles/bbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup do MergingFactory:StartParticleGroup pbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/b insert MergingFactory:ParticleGroup 0 /Herwig/Particles/bbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup cd /Herwig/Particles do b:UnsetHardProcessMass do bbar:UnsetHardProcessMass do c:UnsetHardProcessMass do cbar:UnsetHardProcessMass set b:NominalMass 0*GeV set bbar:NominalMass 0*GeV set c:NominalMass 0*GeV set cbar:NominalMass 0*GeV cd /Herwig/DipoleShower/Kernels set IFgx2bbbarxDipoleKernel:UseKernel Yes set IFgx2bbarbxDipoleKernel:UseKernel Yes ## Even though the b-quarks are massless in this scheme, ## the spectator can be massive. set IFMgx2bbbarxDipoleKernel:UseKernel Yes set IFMgx2bbarbxDipoleKernel:UseKernel Yes set IIgx2bbbarxDipoleKernel:UseKernel Yes set IIgx2bbarbxDipoleKernel:UseKernel Yes ## First remove the bbar splittings. cd /Herwig/Shower do SplittingGenerator:DeleteInitialSplitting b->b,g; QtoQGSudakov do SplittingGenerator:DeleteInitialSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:DeleteInitialSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:DeleteInitialSplitting g->b,bbar; GtobbbarSudakov -do SplittingGenerator:DeleteInitialSplitting gamma->b,bbar; GammatoQQbarSudakov +#do SplittingGenerator:DeleteInitialSplitting gamma->b,bbar; GammatoQQbarSudakov do SplittingGenerator:DeleteInitialSplitting b->g,b; QtoGQSudakov do SplittingGenerator:DeleteInitialSplitting bbar->g,bbar; QtoGQSudakov do SplittingGenerator:DeleteInitialSplitting b->gamma,b; QtoGammaQSudakov do SplittingGenerator:DeleteInitialSplitting bbar->gamma,bbar; QtoGammaQSudakov ## Now insert the bbar splittings. do SplittingGenerator:AddInitialSplitting b->b,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting g->b,bbar; GtobbbarSudakov -do SplittingGenerator:AddInitialSplitting gamma->b,bbar; GammatoQQbarSudakov +#do SplittingGenerator:AddInitialSplitting gamma->b,bbar; GammatoQQbarSudakov do SplittingGenerator:AddInitialSplitting b->g,b; QtoGQSudakov do SplittingGenerator:AddInitialSplitting bbar->g,bbar; QtoGQSudakov do SplittingGenerator:AddInitialSplitting b->gamma,b; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting bbar->gamma,bbar; QtoGammaQSudakov cd /Herwig/UnderlyingEvent set MEQCD2to2Fast:MaximumFlavour 5 diff --git a/src/Matchbox/FiveFlavourScheme.in b/src/Matchbox/FiveFlavourScheme.in --- a/src/Matchbox/FiveFlavourScheme.in +++ b/src/Matchbox/FiveFlavourScheme.in @@ -1,110 +1,110 @@ # -*- ThePEG-repository -*- cd /Herwig/MatrixElements/Matchbox do Factory:StartParticleGroup p insert Factory:ParticleGroup 0 /Herwig/Particles/b insert Factory:ParticleGroup 0 /Herwig/Particles/bbar insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup do Factory:StartParticleGroup pbar insert Factory:ParticleGroup 0 /Herwig/Particles/b insert Factory:ParticleGroup 0 /Herwig/Particles/bbar insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup cd /Herwig/Merging/ do MergingFactory:StartParticleGroup p insert MergingFactory:ParticleGroup 0 /Herwig/Particles/b insert MergingFactory:ParticleGroup 0 /Herwig/Particles/bbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup do MergingFactory:StartParticleGroup pbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/b insert MergingFactory:ParticleGroup 0 /Herwig/Particles/bbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup cd /Herwig/Particles set b:HardProcessMass 0*GeV set bbar:HardProcessMass 0*GeV cd /Herwig/DipoleShower/Kernels set IFgx2bbbarxDipoleKernel:UseKernel Yes set IFgx2bbarbxDipoleKernel:UseKernel Yes set IFMgx2bbbarxDipoleKernel:UseKernel Yes set IFMgx2bbarbxDipoleKernel:UseKernel Yes set IIgx2bbbarxDipoleKernel:UseKernel Yes set IIgx2bbarbxDipoleKernel:UseKernel Yes ## First remove the bbar splittings. In case someone read a FourFlavour snippet. cd /Herwig/Shower do SplittingGenerator:DeleteInitialSplitting b->b,g; QtoQGSudakov do SplittingGenerator:DeleteInitialSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:DeleteInitialSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:DeleteInitialSplitting g->b,bbar; GtobbbarSudakov -do SplittingGenerator:DeleteInitialSplitting gamma->b,bbar; GammatoQQbarSudakov +#do SplittingGenerator:DeleteInitialSplitting gamma->b,bbar; GammatoQQbarSudakov do SplittingGenerator:DeleteInitialSplitting b->g,b; QtoGQSudakov do SplittingGenerator:DeleteInitialSplitting bbar->g,bbar; QtoGQSudakov do SplittingGenerator:DeleteInitialSplitting b->gamma,b; QtoGammaQSudakov do SplittingGenerator:DeleteInitialSplitting bbar->gamma,bbar; QtoGammaQSudakov ## Now insert the bbar splittings. do SplittingGenerator:AddInitialSplitting b->b,g; QtoQGSudakov do SplittingGenerator:AddInitialSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:AddInitialSplitting g->b,bbar; GtobbbarSudakov -do SplittingGenerator:AddInitialSplitting gamma->b,bbar; GammatoQQbarSudakov +#do SplittingGenerator:AddInitialSplitting gamma->b,bbar; GammatoQQbarSudakov do SplittingGenerator:AddInitialSplitting b->g,b; QtoGQSudakov do SplittingGenerator:AddInitialSplitting bbar->g,bbar; QtoGQSudakov do SplittingGenerator:AddInitialSplitting b->gamma,b; QtoGammaQSudakov do SplittingGenerator:AddInitialSplitting bbar->gamma,bbar; QtoGammaQSudakov cd /Herwig/UnderlyingEvent set MEQCD2to2Fast:MaximumFlavour 5 diff --git a/src/Matchbox/FourFlavourScheme.in b/src/Matchbox/FourFlavourScheme.in --- a/src/Matchbox/FourFlavourScheme.in +++ b/src/Matchbox/FourFlavourScheme.in @@ -1,105 +1,105 @@ # -*- ThePEG-repository -*- cd /Herwig/MatrixElements/Matchbox do Factory:StartParticleGroup p insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup do Factory:StartParticleGroup pbar insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup do Factory:StartParticleGroup j insert Factory:ParticleGroup 0 /Herwig/Particles/c insert Factory:ParticleGroup 0 /Herwig/Particles/cbar insert Factory:ParticleGroup 0 /Herwig/Particles/s insert Factory:ParticleGroup 0 /Herwig/Particles/sbar insert Factory:ParticleGroup 0 /Herwig/Particles/d insert Factory:ParticleGroup 0 /Herwig/Particles/dbar insert Factory:ParticleGroup 0 /Herwig/Particles/u insert Factory:ParticleGroup 0 /Herwig/Particles/ubar insert Factory:ParticleGroup 0 /Herwig/Particles/g do Factory:EndParticleGroup cd /Herwig/Merging/ do MergingFactory:StartParticleGroup p insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup do MergingFactory:StartParticleGroup pbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup do MergingFactory:StartParticleGroup j insert MergingFactory:ParticleGroup 0 /Herwig/Particles/c insert MergingFactory:ParticleGroup 0 /Herwig/Particles/cbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/s insert MergingFactory:ParticleGroup 0 /Herwig/Particles/sbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/d insert MergingFactory:ParticleGroup 0 /Herwig/Particles/dbar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/u insert MergingFactory:ParticleGroup 0 /Herwig/Particles/ubar insert MergingFactory:ParticleGroup 0 /Herwig/Particles/g do MergingFactory:EndParticleGroup cd /Herwig/DipoleShower/Kernels set IFgx2bbbarxDipoleKernel:UseKernel No set IFgx2bbarbxDipoleKernel:UseKernel No set IFMgx2bbbarxDipoleKernel:UseKernel No set IFMgx2bbarbxDipoleKernel:UseKernel No set IIgx2bbbarxDipoleKernel:UseKernel No set IIgx2bbarbxDipoleKernel:UseKernel No cd /Herwig/Shower do SplittingGenerator:DeleteInitialSplitting b->b,g; QtoQGSudakov do SplittingGenerator:DeleteInitialSplitting b->b,gamma; QtoQGammaSudakov do SplittingGenerator:DeleteInitialSplitting t->t,gamma; QtoQGammaSudakov do SplittingGenerator:DeleteInitialSplitting g->b,bbar; GtobbbarSudakov -do SplittingGenerator:DeleteInitialSplitting gamma->b,bbar; GammatoQQbarSudakov +#do SplittingGenerator:DeleteInitialSplitting gamma->b,bbar; GammatoQQbarSudakov do SplittingGenerator:DeleteInitialSplitting b->g,b; QtoGQSudakov do SplittingGenerator:DeleteInitialSplitting bbar->g,bbar; QtoGQSudakov do SplittingGenerator:DeleteInitialSplitting b->gamma,b; QtoGammaQSudakov do SplittingGenerator:DeleteInitialSplitting bbar->gamma,bbar; QtoGammaQSudakov cd /Herwig/UnderlyingEvent set MEQCD2to2Fast:MaximumFlavour 4