Page MenuHomeHEPForge

No OneTemporary

diff --git a/Models/General/HiggsVBFProcessConstructor.cc b/Models/General/HiggsVBFProcessConstructor.cc
--- a/Models/General/HiggsVBFProcessConstructor.cc
+++ b/Models/General/HiggsVBFProcessConstructor.cc
@@ -1,173 +1,174 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the HiggsVBFProcessConstructor class.
//
#include "HiggsVBFProcessConstructor.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/RefVector.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "Herwig/MatrixElement/General/GeneralfftoffH.h"
using namespace Herwig;
HiggsVBFProcessConstructor::HiggsVBFProcessConstructor()
: _type(true), _shapeOpt(1), _intermediates(0) {
}
IBPtr HiggsVBFProcessConstructor::clone() const {
return new_ptr(*this);
}
IBPtr HiggsVBFProcessConstructor::fullclone() const {
return new_ptr(*this);
}
void HiggsVBFProcessConstructor::persistentOutput(PersistentOStream & os) const {
os << _higgs << _type << _shapeOpt;
}
void HiggsVBFProcessConstructor::persistentInput(PersistentIStream & is, int) {
is >> _higgs >> _type >> _shapeOpt;
}
// The following static variable is needed for the type
// description system in ThePEG.
DescribeClass<HiggsVBFProcessConstructor,HardProcessConstructor>
describeHerwigHiggsVBFProcessConstructor("Herwig::HiggsVBFProcessConstructor", "Herwig.so");
void HiggsVBFProcessConstructor::Init() {
static ClassDocumentation<HiggsVBFProcessConstructor> documentation
("The HiggsVBFProcessConstructor class generates hard processes for"
" Higgs boson production in association with a vector boson in general models.");
static RefVector<HiggsVBFProcessConstructor,ParticleData> interfaceHiggsBoson
("HiggsBoson",
"The possible Higgs bosons",
&HiggsVBFProcessConstructor::_higgs, -1, false, false, true, false, false);
static Switch<HiggsVBFProcessConstructor,unsigned int> interfaceShapeOption
("ShapeScheme",
"Option for the treatment of the Higgs resonance shape",
&HiggsVBFProcessConstructor::_shapeOpt, 2, false, false);
static SwitchOption interfaceStandardShapeFixed
(interfaceShapeOption,
"FixedBreitWigner",
"Breit-Wigner s-channel resonanse",
1);
static SwitchOption interfaceStandardShapeRunning
(interfaceShapeOption,
"MassGenerator",
"Use the mass generator to give the shape",
2);
static SwitchOption interfaceStandardShapeYes
(interfaceShapeOption,
"OnShell",
"Produce the Higgs on-shell",
0);
static Switch<HiggsVBFProcessConstructor,unsigned int> interfaceProcess
("Process",
"Which processes to include",
&HiggsVBFProcessConstructor::_intermediates, 0, false, false);
static SwitchOption interfaceProcessBoth
(interfaceProcess,
"Both",
"Include both WW and ZZ processes",
0);
static SwitchOption interfaceProcessWW
(interfaceProcess,
"WW",
"Only include WW processes",
1);
static SwitchOption interfaceProcessZZ
(interfaceProcess,
"ZZ",
"Only include ZZ processes",
2);
static Switch<HiggsVBFProcessConstructor,bool> interfaceCollisionType
("CollisionType",
"Type of collision",
&HiggsVBFProcessConstructor::_type, true, false, false);
static SwitchOption interfaceCollisionTypeLepton
(interfaceCollisionType,
"Lepton",
"Lepton-Lepton collisions",
false);
static SwitchOption interfaceCollisionTypeHadron
(interfaceCollisionType,
"Hadron",
"Hadron-Hadron collisions",
true);
}
void HiggsVBFProcessConstructor::constructDiagrams() {
if(_higgs.empty() || !subProcess() ) return;
tPDPtr Wplus = getParticleData(ParticleID::Wplus);
tPDPtr Wminus = getParticleData(ParticleID::Wminus);
tPDPtr Z0 = getParticleData(ParticleID::Z0);
for(unsigned int ix=0;ix<_higgs.size();++ix)
_higgs[ix]->init();
for(unsigned int ix=0;ix<2;++ix) {
if( ( ix == 0 && _intermediates == 2 ) ||
( ix == 1 && _intermediates == 1 )) continue;
// loop over the possible Higgs bosons
for(PDVector::const_iterator ih=_higgs.begin();
ih!=_higgs.end();++ih) {
// check higgs is neutral and scalar
if((**ih).iCharge()!=0 || (**ih).coloured() ||
(**ih).iSpin()!=PDT::Spin0) continue;
// find a suitable vertex
for(unsigned int nv = 0; nv < model()->numberOfVertices(); ++nv ) {
VertexBasePtr vertex = model()->vertex(nv);
AbstractVVSVertexPtr svert =
dynamic_ptr_cast<AbstractVVSVertexPtr>(vertex);
if(!svert) continue;
if(vertex->getNpoint() != 3) continue;
+ // check outgoing higgs allowed
+ if(!vertex->isOutgoing(*ih)) continue;
// check incoming W+W- or ZZ allowed
if(ix==0) {
if(!vertex->isIncoming(Wminus)||
!vertex->isIncoming(Wplus)) continue;
}
else {
if(!vertex->isIncoming(Z0)) continue;
+ if(!vertex->allowed(23,23,(**ih).id())) continue;
}
- // check outgoing higgs allowed
- if(!vertex->isOutgoing(*ih)) continue;
// create the MatrixElement object
string objectname ("/Herwig/MatrixElements/");
string classname("Herwig::GeneralfftoffH");
if(_type) objectname += "MEPP2";
else objectname += "MEee2";
string bos = ix==0 ? "W+W+" : "ZOZO";
objectname += bos;
objectname += (**ih).PDGName();
GeneralfftoffHPtr matrixElement = dynamic_ptr_cast<GeneralfftoffHPtr>
(generator()->preinitCreate(classname, objectname));
if( !matrixElement )
throw Exception()
<< "HiggsVBFProcessConstructor::constructDiagrams() "
<< " Failed to construct matrix element for "
<< bos << " + "
<< (**ih).PDGName() << " production"
<< Exception::runerror;
GeneralfftoffH::Process process = _type ?
GeneralfftoffH::Hadron : GeneralfftoffH::Lepton;
// set the information
matrixElement->setProcessInfo( process, *ih, svert,_shapeOpt,
ix+1 );
// insert it
generator()->preinitInterface(subProcess(), "MatrixElements",
subProcess()->MEs().size(),
"insert", matrixElement->fullName());
}
}
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 9:14 PM (22 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3806221
Default Alt Text
(6 KB)

Event Timeline