Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F8723644
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
13 KB
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
R563 testingHerwigHG
Event Timeline
Log In to Comment