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,174 +1,175 @@
// -*- 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 =
+ 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;
+ if(!vertex->allowed(-24,24,(**ih).id())) continue;
}
else {
if(!vertex->isIncoming(Z0)) continue;
if(!vertex->allowed(23,23,(**ih).id())) 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::Process process = _type ?
GeneralfftoffH::Hadron : GeneralfftoffH::Lepton;
// set the information
matrixElement->setProcessInfo( process, *ih, svert,_shapeOpt,
ix+1 );
// insert it
- generator()->preinitInterface(subProcess(), "MatrixElements",
+ generator()->preinitInterface(subProcess(), "MatrixElements",
subProcess()->MEs().size(),
"insert", matrixElement->fullName());
}
}
}
}
diff --git a/Models/General/HiggsVectorBosonProcessConstructor.cc b/Models/General/HiggsVectorBosonProcessConstructor.cc
--- a/Models/General/HiggsVectorBosonProcessConstructor.cc
+++ b/Models/General/HiggsVectorBosonProcessConstructor.cc
@@ -1,170 +1,174 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the HiggsVectorBosonProcessConstructor class.
//
#include "HiggsVectorBosonProcessConstructor.h"
#include "ThePEG/Utilities/DescribeClass.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Reference.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/GeneralfftoVH.h"
using namespace Herwig;
HiggsVectorBosonProcessConstructor::HiggsVectorBosonProcessConstructor()
: _type(true), _shapeOpt(1) {
}
IBPtr HiggsVectorBosonProcessConstructor::clone() const {
return new_ptr(*this);
}
IBPtr HiggsVectorBosonProcessConstructor::fullclone() const {
return new_ptr(*this);
}
void HiggsVectorBosonProcessConstructor::persistentOutput(PersistentOStream & os) const {
os << _vector << _higgs << _type << _shapeOpt << _alpha;
}
void HiggsVectorBosonProcessConstructor::persistentInput(PersistentIStream & is, int) {
is >> _vector >> _higgs >> _type >> _shapeOpt >> _alpha;
}
// The following static variable is needed for the type
// description system in ThePEG.
DescribeClass<HiggsVectorBosonProcessConstructor,HardProcessConstructor>
describeHerwigHiggsVectorBosonProcessConstructor("Herwig::HiggsVectorBosonProcessConstructor", "Herwig.so");
void HiggsVectorBosonProcessConstructor::Init() {
static ClassDocumentation<HiggsVectorBosonProcessConstructor> documentation
("The HiggsVectorBosonProcessConstructor class generates hard process for"
" Higgs boson production in assoication with a vector boson in general models.");
static RefVector<HiggsVectorBosonProcessConstructor,ParticleData> interfaceVectorBoson
("VectorBoson",
"The possible outgoing vector bosons, must be W/Z",
&HiggsVectorBosonProcessConstructor::_vector, -1, false, false, true, false, false);
static RefVector<HiggsVectorBosonProcessConstructor,ParticleData> interfaceHiggsBoson
("HiggsBoson",
"The possible Higgs bosons",
&HiggsVectorBosonProcessConstructor::_higgs, -1, false, false, true, false, false);
static Switch<HiggsVectorBosonProcessConstructor,unsigned int> interfaceShapeOption
("ShapeScheme",
"Option for the treatment of the Higgs resonance shape",
&HiggsVectorBosonProcessConstructor::_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<HiggsVectorBosonProcessConstructor,bool> interfaceCollisionType
("CollisionType",
"Type of collision",
&HiggsVectorBosonProcessConstructor::_type, true, false, false);
static SwitchOption interfaceCollisionTypeLepton
(interfaceCollisionType,
"Lepton",
"Lepton-Lepton collisions",
false);
static SwitchOption interfaceCollisionTypeHadron
(interfaceCollisionType,
"Hadron",
"Hadron-Hadron collisions",
true);
static Reference<HiggsVectorBosonProcessConstructor,ShowerAlpha> interfaceAlphaQCD
("AlphaQCD",
"The strong coupling used in the shower for MME or POWHEG corrections.",
&HiggsVectorBosonProcessConstructor::_alpha, false, false, true, false, false);
}
void HiggsVectorBosonProcessConstructor::constructDiagrams() {
if(_vector.empty()||_higgs.empty() || !subProcess() ) return;
// initialise the particles
for(unsigned int ix=0;ix<_vector.size();++ix)
_vector[ix]->init();
for(unsigned int ix=0;ix<_higgs.size();++ix)
_higgs[ix]->init();
for(PDVector::const_iterator iv=_vector.begin();
iv!=_vector.end();++iv) {
// skip if combination not possible
if(_type==false && (**iv).id()!=ParticleID::Z0)
continue;
else if(_type==true && (abs((**iv).id()) != ParticleID::Wplus &&
- (**iv).id() != ParticleID::Z0))
+ (**iv).id() != ParticleID::Z0))
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 =
+ AbstractVVSVertexPtr svert =
dynamic_ptr_cast<AbstractVVSVertexPtr>(vertex);
if(!svert) continue;
if(vertex->getNpoint() != 3) continue;
if(!vertex->isIncoming(*iv)) continue;
if(!vertex->isOutgoing(*iv)) continue;
if(!vertex->isOutgoing(*ih)) continue;
// create the MatrixElement object
string objectname ("/Herwig/MatrixElements/");
string classname("Herwig::GeneralfftoVH");
if(_type) objectname += "MEPP2";
else objectname += "MEee2";
objectname += (**iv).PDGName();
objectname += (**ih).PDGName();
GeneralfftoVHPtr matrixElement = dynamic_ptr_cast<GeneralfftoVHPtr>
(generator()->preinitCreate(classname, objectname));
+ if(abs((**iv).id()) == ParticleID::Z0 && !vertex->allowed(23,23,(**ih).id()))
+ continue;
+ if(abs((**iv).id()) == ParticleID::Wplus && !vertex->allowed(-24,24,(**ih).id()))
+ continue;
if( !matrixElement )
throw Exception()
<< "HiggsVectorBosonProcessConstructor::constructDiagrams() "
<< " Failed to construct matrix element for "
<< (**iv).PDGName() << " + "
<< (**ih).PDGName() << " production"
<< Exception::runerror;
GeneralfftoVH::Process process = GeneralfftoVH::Lepton;
if(_type) {
if((**iv).id()==ParticleID::Z0)
process = GeneralfftoVH::HadronZ;
else if((**iv).id()==ParticleID::Wplus)
process = GeneralfftoVH::HadronWplus;
else if((**iv).id()==ParticleID::Wminus)
process = GeneralfftoVH::HadronWminus;
}
// set the coupling
- generator()->preinitInterface(matrixElement, "Coupling",
- "set", _alpha->fullName());
+ generator()->preinitInterface(matrixElement, "Coupling",
+ "set", _alpha->fullName());
// set the information
matrixElement->setProcessInfo( process, *ih, svert,_shapeOpt);
// insert it
- generator()->preinitInterface(subProcess(), "MatrixElements",
+ generator()->preinitInterface(subProcess(), "MatrixElements",
subProcess()->MEs().size(),
"insert", matrixElement->fullName());
}
}
}
}

File Metadata

Mime Type
text/x-diff
Expires
Mon, Jan 20, 9:02 PM (23 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4202794
Default Alt Text
(13 KB)

Event Timeline