diff --git a/Contrib/AnomalousHVV/AnomalousWWHVertex.cc b/Contrib/AnomalousHVV/AnomalousWWHVertex.cc deleted file mode 100644 --- a/Contrib/AnomalousHVV/AnomalousWWHVertex.cc +++ /dev/null @@ -1,133 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the AnomalousWWHVertex class. -// - -#include "AnomalousWWHVertex.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/PDT/EnumParticles.h" -#include "ThePEG/Interface/Switch.h" -#include "ThePEG/Interface/Parameter.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "Herwig/Models/StandardModel/StandardModel.h" - -using namespace Herwig; -using namespace ThePEG::Helicity; - -AnomalousWWHVertex::AnomalousWWHVertex() - : interactionType_(0), Lambda_(1000.*GeV), - couplast_(0.), q2last_(ZERO), mw_(ZERO), zfact_(0.) { - // particles - addToList(24,-24,25); - addToList(23,23,25); - // calculate the kinematic invariants needed - kinematics(true); -} - -IBPtr AnomalousWWHVertex::clone() const { - return new_ptr(*this); -} - -IBPtr AnomalousWWHVertex::fullclone() const { - return new_ptr(*this); -} - -void AnomalousWWHVertex::doinit() { - // parameters - mw_ = getParticleData(ThePEG::ParticleID::Wplus)->mass(); - zfact_ = 1./(1.-generator()->standardModel()->sin2ThetaW()); - // order in the couplings - orderInGem(1); - orderInGs(0); - // base class - GeneralVVSVertex::doinit(); -} - -void AnomalousWWHVertex::persistentOutput(PersistentOStream & os) const { - os << interactionType_ << ounit(mw_,GeV) << zfact_ << ounit(Lambda_,GeV); -} - -void AnomalousWWHVertex::persistentInput(PersistentIStream & is, int) { - is >> interactionType_ >> iunit(mw_,GeV) >> zfact_ >> iunit(Lambda_,GeV); -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigAnomalousWWHVertex("Herwig::AnomalousWWHVertex", "AnomalousHVV.so"); - -void AnomalousWWHVertex::Init() { - - static ClassDocumentation documentation - ("The AnomalousWWHVertex class implemenets the Higgs coupling to two electroweak" - " vector bosons including the option of anomalous couplings."); - - static Switch interfaceInteractionType - ("InteractionType", - "The type of interaction", - &AnomalousWWHVertex::interactionType_, 0, false, false); - static SwitchOption interfaceInteractionTypeSM - (interfaceInteractionType, - "SM", - "Use the standard model form", - 0); - static SwitchOption interfaceInteractionTypeCPOdd - (interfaceInteractionType, - "CPOdd", - "Use a CP odd form", - 1); - static SwitchOption interfaceInteractionTypeCPEven - (interfaceInteractionType, - "CPEven", - "Use a CP even form", - 2); - - static Parameter interfaceLambda - ("Lambda", - "The scale of new physics", - &AnomalousWWHVertex::Lambda_, GeV, 1000.0*GeV, ZERO, 1000000.0*GeV, - false, false, Interface::limited); - -} - -void AnomalousWWHVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr, tcPDPtr) { - int ibos=abs(a->id()); - a00(0.); - a11(0.); - a12(0.); - a21(0.); - a22(0.); - aEp(0.); - switch(interactionType_) { - case 0: - // first the overall normalisation - if(q2!=q2last_) { - couplast_ = weakCoupling(q2) * UnitRemoval::InvE * mw_; - q2last_ = q2; - } - if(ibos==24) norm(couplast_ ); - else if(ibos==23) norm(couplast_ * zfact_ ); - else - throw HelicityConsistencyError() << "AnomalousWWHVertex::setCoupling " - << "Invalid particles in WWH Vertex" - << Exception::runerror; - a00(double(UnitRemoval::E2/invariant(1,2))); - break; - case 1: - norm(double(UnitRemoval::E/Lambda_)); - aEp(1.); - break; - case 2: - norm(double(UnitRemoval::E/Lambda_)); - a00( 1.); - a21(-1.); - break; - default: - throw HelicityConsistencyError() << "AnomalousWWHVertex::setCoupling " - << "Unknown type of interaction" - << Exception::runerror; - } -} diff --git a/Contrib/AnomalousHVV/AnomalousWWHVertex.h b/Contrib/AnomalousHVV/AnomalousWWHVertex.h deleted file mode 100644 --- a/Contrib/AnomalousHVV/AnomalousWWHVertex.h +++ /dev/null @@ -1,147 +0,0 @@ -// -*- C++ -*- -#ifndef HERWIG_AnomalousWWHVertex_H -#define HERWIG_AnomalousWWHVertex_H -// -// This is the declaration of the AnomalousWWHVertex class. -// - -#include "ThePEG/Helicity/Vertex/Scalar/GeneralVVSVertex.h" - -namespace Herwig { -using namespace ThePEG; - -/** - * The AnomalousWWHVertex class implements the option of an anomalous - * coupling in the \f$h^0W^+W^+\f$ and \f$h^0Z^0Z^0\f$ vertices. - * - * The options of using either the exact Standard Model, a CP-odd - * \f[\frac1{\Lambda}J_1^\mu J_2^\nu\epsilon^{\mu\nu\alpha\beta}q_{1\alpha}q_{2\beta},\f] - * or CP-even - * \f[\frac1{\Lambda}J_1^\mu J_2^\nu - * \left[g_{\mu\nu}q_1 \cdot q_2-q_{1\nu}q_{2\mu}\right],\f] - * form, where \f$\Lambda\f$ is the scale of the new operator. - * - * @see \ref AnomalousWWHVertexInterfaces "The interfaces" - * defined for AnomalousWWHVertex. - */ -class AnomalousWWHVertex: public Helicity::GeneralVVSVertex { - -public: - - /** - * The default constructor. - */ - AnomalousWWHVertex(); - - /** - * Calculate coupling. - * @param q2 Scale at which to evaluate couplings - * @param part1 ParticleDataPointer to first particle - * @param part2 ParticleDataPointer to second particle - * @param part3 ParticleDataPointer to third particle - */ - virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2, - tcPDPtr part3); - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - virtual IBPtr clone() const; - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - virtual IBPtr fullclone() const; - //@} - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object after the setup phase before saving and - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - AnomalousWWHVertex & operator=(const AnomalousWWHVertex &) = delete; - - /** - * Switch for the type of interaction - */ - unsigned int interactionType_; - - /** - * The scale \f$\Lambda\f$ - */ - Energy Lambda_; - - /** - * Storage of the couplings. - */ - //@{ - /** - * The last value of the electroweak coupling calculated. - */ - Complex couplast_; - - /** - * The scale \f$q^2\f$ at which the coupling was last evaluated. - */ - Energy2 q2last_; - - /** - * The mass of the \f$W\f$ boson. - */ - Energy mw_; - - /** - * The factor for the \f$Z\f$ vertex. - */ - double zfact_; - //@} -}; - -} - -#endif /* HERWIG_AnomalousWWHVertex_H */ diff --git a/Contrib/AnomalousHVV/LHC.in b/Contrib/AnomalousHVV/LHC.in deleted file mode 100644 --- a/Contrib/AnomalousHVV/LHC.in +++ /dev/null @@ -1,57 +0,0 @@ -# -*- ThePEG-repository -*- -################################################## -# Example generator based on LHC parameters -# usage: Herwig read LHC.in -################################################## -read PPCollider.in -################################################## -# Technical parameters for this run -################################################## -cd /Herwig/Generators -set EventGenerator:NumberOfEvents 10000000 -set EventGenerator:RandomNumberGenerator:Seed 31122001 -set EventGenerator:PrintEvent 10 -set EventGenerator:MaxErrors 10000 -set EventGenerator:EventHandler:CascadeHandler NULL -set EventGenerator:EventHandler:DecayHandler NULL -set EventGenerator:EventHandler:HadronizationHandler NULL -set /Herwig/Particles/h0:Stable 1 -set /Herwig/Cuts/JetKtCut:MinKT 20.0*GeV -set /Herwig/Cuts/JetKtCut:MinEta -4.5 -set /Herwig/Cuts/JetKtCut:MaxEta 4.5 - -################################################## -# LHC physics parameters (override defaults here) -################################################## -set EventGenerator:EventHandler:LuminosityFunction:Energy 14000.0 - - -################################################## -# Matrix Elements for hadron-hadron collisions -# (by default only gamma/Z switched on) -################################################## -cd /Herwig/MatrixElements/ -set MEPP2HiggsVBF:Process 1 -set MEPP2HiggsVBF:MaxFlavour 2 -insert SubProcess:MatrixElements[0] MEPP2HiggsVBF - - -create Herwig::AnomalousWWHVertex /Herwig/Vertices/AnonWWHVertex AnomalousHVV.so -set /Herwig/Vertices/AnonWWHVertex:InteractionType SM -set /Herwig/Model:Vertex/WWH /Herwig/Vertices/AnonWWHVertex - - -cd /Herwig/Generators - -################################################## -# Useful analysis handlers for hadron-hadron physics -################################################## -# analysis of W/Z events -set /Herwig/Analysis/Basics:CheckQuark 0 -create Herwig::SimpleVBFAnalysis /Herwig/Analysis/VBF AnomalousWWHVertex.so -insert EventGenerator:AnalysisHandlers 0 /Herwig/Analysis/VBF - -################################################## -# Save run for later usage with 'Herwig run' -################################################## -saverun LHC EventGenerator diff --git a/Contrib/AnomalousHVV/Makefile.in b/Contrib/AnomalousHVV/Makefile.in deleted file mode 100644 --- a/Contrib/AnomalousHVV/Makefile.in +++ /dev/null @@ -1,35 +0,0 @@ -# -*- Makefile -*- (for emacs) - -# -# This Makefile is intended for compiling Herwig++ plugins -# -# This Makefile received very little testing, -# any bug reports are very welcome! -# - -# location of include files -THEPEGINCLUDE = -HERWIGINCLUDE = -GSLINCLUDE = -LDFLAGS = -SHARED_FLAG = -INCLUDE = $(THEPEGINCLUDE) $(HERWIGINCLUDE) $(GSLINCLUDE) -# -# C++ flags -# -CXX = -CXXFLAGS = - -ALLCCFILES=$(shell echo *.cc) - -default : AnomalousHVV.so - -%.o : %.cc %.h - $(CXX) -fPIC $(CPPFLAGS) $(INCLUDE) $(CXXFLAGS) -c -shared $< -o $@ - -AnomalousHVV.so : AnomalousWWHVertex.o SimpleVBFAnalysis.o - $(CXX) -fPIC $(CPPFLAGS) $(INCLUDE) $(CXXFLAGS) $(SHARED_FLAG) $(LDFLAGS) \ - AnomalousWWHVertex.o SimpleVBFAnalysis.o -o AnomalousHVV.so - -clean: - rm -f $(ALLCCFILES:.cc=.o) RadiativeZPrime.so \ No newline at end of file diff --git a/Contrib/AnomalousHVV/SimpleVBFAnalysis.cc b/Contrib/AnomalousHVV/SimpleVBFAnalysis.cc deleted file mode 100644 --- a/Contrib/AnomalousHVV/SimpleVBFAnalysis.cc +++ /dev/null @@ -1,74 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the SimpleVBFAnalysis class. -// - -#include "SimpleVBFAnalysis.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "ThePEG/PDT/EnumParticles.h" -#include "ThePEG/Repository/EventGenerator.h" -#include "ThePEG/EventRecord/Particle.h" -#include "ThePEG/EventRecord/Event.h" - -using namespace Herwig; - -void SimpleVBFAnalysis::analyze(tEventPtr event, long ieve, int loop, int state) { - AnalysisHandler::analyze(event, ieve, loop, state); - // Rotate to CMS, extract final state particles and call analyze(particles). - tPVector part = event->getFinalState(); - tPVector jets; - for(tPVector::const_iterator iter = part.begin(), end = part.end(); - iter!=end;++iter) { - if((**iter).id()==ParticleID::h0) continue; - if((**iter).momentum().perp()<20.*GeV) continue; - if(abs((**iter).momentum().eta())>4.5) continue; - jets.push_back(*iter); - } - if(jets.size()!=2) return; - double eta[2]={jets[0]->momentum().eta(), - jets[1]->momentum().eta()}; - if(eta[0]*eta[1]>0.) return; - if(abs(eta[0]-eta[1])<4.2) return; - double deltaPhi = jets[0]->momentum().phi()-jets[1]->momentum().phi(); - if(deltaPhi<-Constants::pi) deltaPhi+=Constants::twopi; - if(deltaPhi> Constants::pi) deltaPhi-=Constants::twopi; - *_deltaPhi += abs(deltaPhi); -} - -IBPtr SimpleVBFAnalysis::clone() const { - return new_ptr(*this); -} - -IBPtr SimpleVBFAnalysis::fullclone() const { - return new_ptr(*this); -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeNoPIOClass -describeHerwigSimpleVBFAnalysis("Herwig::SimpleVBFAnalysis", "AnomalousHVV.so"); - -void SimpleVBFAnalysis::Init() { - - static ClassDocumentation documentation - ("There is no documentation for the SimpleVBFAnalysis class"); - -} - -void SimpleVBFAnalysis::dofinish() { - AnalysisHandler::dofinish(); - string fname = generator()->filename() + string("-") + name() + string(".top"); - ofstream outfile(fname.c_str()); - using namespace HistogramOptions; - _deltaPhi->topdrawOutput(outfile,Frame,"BLACK","Delta Phi"); - outfile.close(); -} - -void SimpleVBFAnalysis::doinitrun() { - AnalysisHandler::doinitrun(); - _deltaPhi = new_ptr(Histogram(0,Constants::pi,200)); -} diff --git a/Contrib/AnomalousHVV/SimpleVBFAnalysis.h b/Contrib/AnomalousHVV/SimpleVBFAnalysis.h deleted file mode 100644 --- a/Contrib/AnomalousHVV/SimpleVBFAnalysis.h +++ /dev/null @@ -1,126 +0,0 @@ -// -*- C++ -*- -#ifndef HERWIG_SimpleVBFAnalysis_H -#define HERWIG_SimpleVBFAnalysis_H -// -// This is the declaration of the SimpleVBFAnalysis class. -// - -#include "ThePEG/Handlers/AnalysisHandler.h" -#include "Herwig/Utilities/Histogram.h" - -namespace Herwig { - -using namespace ThePEG; - -/** - * Here is the documentation of the SimpleVBFAnalysis class. - * - * @see \ref SimpleVBFAnalysisInterfaces "The interfaces" - * defined for SimpleVBFAnalysis. - */ -class SimpleVBFAnalysis: public AnalysisHandler { - -public: - - /** @name Virtual functions required by the AnalysisHandler class. */ - //@{ - /** - * Analyze a given Event. Note that a fully generated event - * may be presented several times, if it has been manipulated in - * between. The default version of this function will call transform - * to make a lorentz transformation of the whole event, then extract - * all final state particles and call analyze(tPVector) of this - * analysis object and those of all associated analysis objects. The - * default version will not, however, do anything on events which - * have not been fully generated, or have been manipulated in any - * way. - * @param event pointer to the Event to be analyzed. - * @param ieve the event number. - * @param loop the number of times this event has been presented. - * If negative the event is now fully generated. - * @param state a number different from zero if the event has been - * manipulated in some way since it was last presented. - */ - virtual void analyze(tEventPtr event, long ieve, int loop, int state); - //@} - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - virtual IBPtr clone() const; - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - virtual IBPtr fullclone() const; - //@} - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object. Called in the run phase just before - * a run begins. - */ - virtual void doinitrun(); - - /** - * Finalize this object. Called in the run phase just after a - * run has ended. Used eg. to write out statistics. - */ - virtual void dofinish(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - SimpleVBFAnalysis & operator=(const SimpleVBFAnalysis &) = delete; - -private: - - /** - * Histogram for \f$\Delta\phi\f$ - */ - HistogramPtr _deltaPhi; - -}; - -} - -#endif /* HERWIG_SimpleVBFAnalysis_H */ diff --git a/Contrib/RadiativeZPrime/AnomalousVVVVertex.cc b/Contrib/RadiativeZPrime/AnomalousVVVVertex.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/AnomalousVVVVertex.cc +++ /dev/null @@ -1,52 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the AnomalousVVVVertex class. -// - -#include "AnomalousVVVVertex.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Helicity/epsilon.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/PDT/EnumParticles.h" - -using namespace RadiativeZPrime; - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeAbstractNoPIOClass -describeHerwigAnomalousVVVVertex("RadiativeZPrime::AnomalousVVVVertex", "RadiativeZPrime.so"); - -void AnomalousVVVVertex::Init() { - - static ClassDocumentation documentation - ("There is no documentation for the AnomalousVVVVertex class"); - -} - -// evaluate the vertex -Complex AnomalousVVVVertex::evaluate(Energy2 q2, const VectorWaveFunction & vec1, - const VectorWaveFunction & vec2, - const VectorWaveFunction & vec3) { - // calculate the coupling - setCoupling(q2,vec1.particle(),vec2.particle(),vec3.particle()); - LorentzPolarizationVector eps = epsilon(vec1.wave(),vec2.wave(),vec3.wave()); - if(vec1.particle()->id()==ParticleID::gamma) - return norm()*Complex(0.,1.)*(eps*vec1.momentum())*UnitRemoval::InvE; - else if(vec2.particle()->id()==ParticleID::gamma) - return norm()*Complex(0.,1.)*(eps*vec2.momentum())*UnitRemoval::InvE; - else - return norm()*Complex(0.,1.)*(eps*vec3.momentum())*UnitRemoval::InvE; -} - -// off-shell vector -VectorWaveFunction AnomalousVVVVertex::evaluate(Energy2, int, tcPDPtr, - const VectorWaveFunction & , - const VectorWaveFunction &, - complex, - complex) { - throw Exception() << "AnomalousVVVVertex::evaluate() only implemented " - << "for the evaluation of the vertex, not for the " - << "evaluation of the off-shell vector wavefunction" - << Exception::runerror; -} diff --git a/Contrib/RadiativeZPrime/AnomalousVVVVertex.h b/Contrib/RadiativeZPrime/AnomalousVVVVertex.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/AnomalousVVVVertex.h +++ /dev/null @@ -1,107 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_AnomalousVVVVertex_H -#define RADIATIVEZPRIME_AnomalousVVVVertex_H -// -// This is the declaration of the AnomalousVVVVertex class. -// - -#include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" - -namespace RadiativeZPrime { - -using namespace ThePEG; -using namespace ThePEG::Helicity; - -/** - * The AnomalousVVVVertex class implements the anomalous Vector-Vector-Vector vertex. - * - * Only the member which evaluates the matrix element is implemented. The vertex - * is defined to be - * \[ i\epsilon_{\mu\nu\alpha\beta} - * \varepsilon^\mu_1 \varepsilon^\nu_2 \varepsilon^\alpha_2 p_1^\beta\] - * - * - * @see \ref AnomalousVVVVertexInterfaces "The interfaces" - * defined for AnomalousVVVVertex. - */ -class AnomalousVVVVertex: public AbstractVVVVertex { - -public: - - /** - * Members to calculate the helicity amplitude expressions for vertices - * and off-shell particles. - */ - //@{ - /** - * Evaluate the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param vec1 The wavefunction for the first vector. - * @param vec2 The wavefunction for the second vector. - * @param vec3 The wavefunction for the third vector. - */ - virtual Complex evaluate(Energy2 q2, const VectorWaveFunction & vec1, - const VectorWaveFunction & vec2, - const VectorWaveFunction & vec3); - - /** - * Evaluate the off-shell vector coming from the vertex. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. - * @param out The ParticleData pointer for the off-shell vector. - * @param vec2 The wavefunction for the second vector. - * @param vec3 The wavefunction for the third vector. - * @param mass The mass of the off-shell particle if not taken from the ParticleData - * object - * @param width The width of the off-shell particle if not taken from the ParticleData - * object - */ - virtual VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, - const VectorWaveFunction & vec2, - const VectorWaveFunction & vec3, - complex mass=-GeV, - complex width=-GeV); - //@} - - /** - * Calculate the couplings. This method is virtual and must be implemented in - * classes inheriting from this. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param part1 The ParticleData pointer for the first particle. - * @param part2 The ParticleData pointer for the second particle. - * @param part3 The ParticleData pointer for the third particle. - */ - virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; - - /** - * Dummy setCouplings for a four point interaction - * This method is virtual and must be implemented in - * classes inheriting from this. - */ - virtual void setCoupling(Energy2,tcPDPtr,tcPDPtr,tcPDPtr,tcPDPtr) { - assert(false); - } - -public: - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - AnomalousVVVVertex & operator=(const AnomalousVVVVertex &) = delete; - -}; - -} - -#endif /* RADIATIVEZPRIME_AnomalousVVVVertex_H */ diff --git a/Contrib/RadiativeZPrime/FFZPrimeVertex.cc b/Contrib/RadiativeZPrime/FFZPrimeVertex.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/FFZPrimeVertex.cc +++ /dev/null @@ -1,80 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the FFZPrimeVertex class. -// - -#include "FFZPrimeVertex.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "RadiativeZPrimeModel.h" - -using namespace RadiativeZPrime; - -void FFZPrimeVertex::persistentOutput(PersistentOStream & os) const { - os << _gl << _gr; -} - -void FFZPrimeVertex::persistentInput(PersistentIStream & is, int) { - is >> _gl >> _gr; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigFFZPrimeVertex("RadiativeZPrime::FFZPrimeVertex", "RadiativeZPrime.so"); - -void FFZPrimeVertex::Init() { - - static ClassDocumentation documentation - ("There is no documentation for the FFZPrimeVertex class"); - -} - -void FFZPrimeVertex::setCoupling(Energy2 q2,tcPDPtr a,tcPDPtr,tcPDPtr) { - norm(1.); - // the left and right couplings - int iferm=abs(a->id()); - if((iferm>=1 && iferm<=6)||(iferm>=11 &&iferm<=16)) { - left(_gl[iferm]); - right(_gr[iferm]); - } - else - throw HelicityConsistencyError() << "FFZPrimeVertex::setCoupling " - << "Unknown particle in Z vertex" - << Exception::runerror; -} - -FFZPrimeVertex::FFZPrimeVertex() : _gl(17,0.0), _gr(17,0.0) { - // PDG codes for the particles - // the quarks - for(long ix=1;ix<7;++ix) { - addToList(-ix,ix,32); - } - // the leptons - for(long ix=11;ix<17;++ix) { - addToList(-ix,ix,32); - } -} - -void FFZPrimeVertex::doinit() { - tcSMPtr sm = generator()->standardModel(); - tcRadiativeZPrimeModelPtr model = - dynamic_ptr_cast(generator()->standardModel()); - double fact = 0.25*model->gZprime(); - for(int ix=1;ix<4;++ix) { - _gl[2*ix-1] = fact*(model->zPrimevd() + model->zPrimead() ); - _gl[2*ix ] = fact*(model->zPrimevu() + model->zPrimeau() ); - _gl[2*ix+9 ] = fact*(model->zPrimeve() + model->zPrimeae() ); - _gl[2*ix+10] = fact*(model->zPrimevnu() + model->zPrimeanu()); - _gr[2*ix-1] = fact*(model->zPrimevd() - model->zPrimead() ); - _gr[2*ix ] = fact*(model->zPrimevu() - model->zPrimeau() ); - _gr[2*ix+9 ] = fact*(model->zPrimeve() - model->zPrimeae() ); - _gr[2*ix+10] = fact*(model->zPrimevnu() - model->zPrimeanu()); - } - orderInGem(1); - orderInGs(0); - FFVVertex::doinit(); -} diff --git a/Contrib/RadiativeZPrime/FFZPrimeVertex.h b/Contrib/RadiativeZPrime/FFZPrimeVertex.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/FFZPrimeVertex.h +++ /dev/null @@ -1,117 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_FFZPrimeVertex_H -#define RADIATIVEZPRIME_FFZPrimeVertex_H -// -// This is the declaration of the FFZPrimeVertex class. -// - -#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" - -namespace RadiativeZPrime { - -using namespace ThePEG; - -/** - * Here is the documentation of the FFZPrimeVertex class. - * - * @see \ref FFZPrimeVertexInterfaces "The interfaces" - * defined for FFZPrimeVertex. - */ -class FFZPrimeVertex: public Helicity::FFVVertex { - -public: - - /** - * The default constructor. - */ - inline FFZPrimeVertex(); - - /** - * Calculate the couplings. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param part1 The ParticleData pointer for the first particle. - * @param part2 The ParticleData pointer for the second particle. - * @param part3 The ParticleData pointer for the third particle. - */ - virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const {return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const {return new_ptr(*this);} - //@} - -protected: - - /** - * Initialize this object after the setup phase before saving and - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - FFZPrimeVertex & operator=(const FFZPrimeVertex &) = delete; - - - /** - * Storage of the couplings. - */ - //@{ - /** - * The left couplings of the Standard Model fermions. - */ - vector _gl; - - /** - * The right couplings of the Standard Model fermions. - */ - vector _gr; - //@} -}; - -} - -#endif /* RADIATIVEZPRIME_FFZPrimeVertex_H */ diff --git a/Contrib/RadiativeZPrime/GammaZPrimeZVertex.cc b/Contrib/RadiativeZPrime/GammaZPrimeZVertex.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/GammaZPrimeZVertex.cc +++ /dev/null @@ -1,60 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the GammaZPrimeZVertex class. -// - -#include "GammaZPrimeZVertex.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "RadiativeZPrimeModel.h" - -using namespace RadiativeZPrime; - -void GammaZPrimeZVertex::persistentOutput(PersistentOStream & os) const { - os << _coup; -} - -void GammaZPrimeZVertex::persistentInput(PersistentIStream & is, int) { - is >> _coup; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigGammaZPrimeZVertex("RadiativeZPrime::GammaZPrimeZVertex", "RadiativeZPrime.so"); - -void GammaZPrimeZVertex::Init() { - - static ClassDocumentation documentation - ("The GammaZPrimeZVertex class implements the anomalous Z Z' gamma" - " vertex in the radiativeZPrimeModel"); - -} - -void GammaZPrimeZVertex::setCoupling(Energy2, tcPDPtr ,tcPDPtr,tcPDPtr) { - norm(_coup); -} - -GammaZPrimeZVertex::GammaZPrimeZVertex() { - // PDG codes for the particles - addToList(22,32,23); -} - -void GammaZPrimeZVertex::doinit() { - tcSMPtr sm = generator()->standardModel(); - tcRadiativeZPrimeModelPtr model = - dynamic_ptr_cast(generator()->standardModel()); - // calculate the coupling - double F=0.5*(2./3.+1./3.); - Energy2 scale = sqr(getParticleData(32)->mass()); - double sw = sqrt(model->sin2ThetaW()); - double cw = sqrt(1.-model->sin2ThetaW()); - _coup = 1./16/sqr(Constants::pi)*4.*Constants::pi*model->alphaEM(scale)/sw/cw* - model->gZprime()*F; - orderInGem(3); - orderInGs(0); - AbstractVVVVertex::doinit(); -} diff --git a/Contrib/RadiativeZPrime/GammaZPrimeZVertex.h b/Contrib/RadiativeZPrime/GammaZPrimeZVertex.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/GammaZPrimeZVertex.h +++ /dev/null @@ -1,113 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_GammaZPrimeZVertex_H -#define RADIATIVEZPRIME_GammaZPrimeZVertex_H -// -// This is the declaration of the GammaZPrimeZVertex class. -// - -#include "AnomalousVVVVertex.h" - -namespace RadiativeZPrime { - -using namespace ThePEG; - -/** - * Here is the documentation of the GammaZPrimeZVertex class. - * - * @see \ref GammaZPrimeZVertexInterfaces "The interfaces" - * defined for GammaZPrimeZVertex. - */ -class GammaZPrimeZVertex: public AnomalousVVVVertex { - -public: - - /** - * The default constructor. - */ - GammaZPrimeZVertex(); - - /** - * Calculate the couplings. This method is virtual and must be implemented in - * classes inheriting from this. - * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. - * @param part1 The ParticleData pointer for the first particle. - * @param part2 The ParticleData pointer for the second particle. - * @param part3 The ParticleData pointer for the third particle. - */ - virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3); - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const {return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const {return new_ptr(*this);} - //@} - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object after the setup phase before saving an - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - GammaZPrimeZVertex & operator=(const GammaZPrimeZVertex &) = delete; - -private: - - /** - * Storage of the coupling - */ - double _coup; - -}; - -} - -#endif /* RADIATIVEZPRIME_GammaZPrimeZVertex_H */ diff --git a/Contrib/RadiativeZPrime/LHC-RadiativeZPrime.in b/Contrib/RadiativeZPrime/LHC-RadiativeZPrime.in deleted file mode 100644 --- a/Contrib/RadiativeZPrime/LHC-RadiativeZPrime.in +++ /dev/null @@ -1,123 +0,0 @@ -################################################## -# Example generator for the Raditative Z' model -# in hadron collisions -# The best way to use this is to make your own -# copy of this file and edit that as you require. -# -# The first section loads the model file which -# does not contain anything that users need to touch. -# -# The second section contains the user settings. -################################################### -read snippets/PPCollider.in -read RadiativeZPrime.model - -# -# Other parameters for run -# main run parameters -cd /Herwig/Generators -set EventGenerator:NumberOfEvents 10000000 -set EventGenerator:RandomNumberGenerator:Seed 31122001 -set EventGenerator:PrintEvent 10 -set EventGenerator:MaxErrors 10000 -# these switch off the shower and hadronization -#set EventGenerator:EventHandler:CascadeHandler NULL -#set EventGenerator:EventHandler:HadronizationHandler NULL - -# Intrinsic pT tune extrapolated to LHC energy -set /Herwig/Shower/ShowerHandler:IntrinsicPtGaussian 5.7*GeV - -# -# Cuts on jets and photons -# -set /Herwig/Cuts/JetKtCut:MinKT 0.*GeV -set /Herwig/Cuts/PhotonKtCut:MinKT 0.*GeV -set /Herwig/Cuts/PhotonKtCut:MinEta -10 -set /Herwig/Cuts/PhotonKtCut:MaxEta 10 - -# -# switch off Z decay modes if needed -# -#set /Herwig/Particles/Z0/Z0->b,bbar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->c,cbar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->d,dbar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->e-,e+;:OnOff Off -#set /Herwig/Particles/Z0/Z0->mu-,mu+;:OnOff Off -#set /Herwig/Particles/Z0/Z0->nu_e,nu_ebar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->nu_mu,nu_mubar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->nu_tau,nu_taubar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->s,sbar;:OnOff Off -#set /Herwig/Particles/Z0/Z0->tau-,tau+;:OnOff Off -#set /Herwig/Particles/Z0/Z0->u,ubar;:OnOff Off -# switch off spin correlations in 2-2 process if needed -#set /Herwig/Particles/Z0/Z0->e-,e+;:Decayer /Herwig/Decays/DecayME0 - - -################################################## -# -# This section contains the user defined settings -# -################################################## -cd /Herwig/NewPhysics - -# calculate decays for Z' -insert NewModel:DecayParticles 0 /Herwig/Particles/Z'0 - -# set coupling -set RadiativeZPrime/Model:gZPrime 1. - -# use this to get the normal Herwig automatic process generation -# incoming particles -insert ResConstructor:Incoming 0 /Herwig/Particles/d -insert ResConstructor:Incoming 1 /Herwig/Particles/dbar -insert ResConstructor:Incoming 2 /Herwig/Particles/u -insert ResConstructor:Incoming 3 /Herwig/Particles/ubar -insert ResConstructor:Incoming 4 /Herwig/Particles/s -insert ResConstructor:Incoming 5 /Herwig/Particles/sbar -insert ResConstructor:Incoming 6 /Herwig/Particles/c -insert ResConstructor:Incoming 7 /Herwig/Particles/cbar -insert ResConstructor:Incoming 8 /Herwig/Particles/b -insert ResConstructor:Incoming 9 /Herwig/Particles/bbar -# resonance -insert ResConstructor:Intermediates 0 /Herwig/Particles/Z'0 -# resonance decay products -insert ResConstructor:Outgoing 0 /Herwig/Particles/e+ -insert ResConstructor:Outgoing 0 /Herwig/Particles/gamma -# -# of use hand-coded matrix elements -# -cd /Herwig/MatrixElements -# -# q qbar -> Z' -> f f'bar -# -#create RadiativeZPrime::MEqq2ZPrime2ff MEqq2ZPrime2ff RadiativeZPrime.so -#set MEqq2ZPrime2ff:Process Electron -#set MEqq2ZPrime2ff:GammaZ ZPrime -#insert SubProcess:MatrixElements[0] MEqq2ZPrime2ff -# -# q qbar -> Z' > Z gamma (2 -> 2 process) -# -#create RadiativeZPrime::MEqq2ZPrime2ZGamma MEqq2ZPrime2ZGamma -#insert SubProcess:MatrixElements[0] MEqq2ZPrime2ZGamma -# -# q qbar -> Z' -> Z gamma -> f f bar gamma (2 -> 3 process ) -# -#create RadiativeZPrime::MEqq2ZPrime2ZGamma2ffGamma MEqq2ZPrime2ZGamma2ffGamma -#insert SubProcess:MatrixElements[0] MEqq2ZPrime2ZGamma2ffGamma - -# -# Analysis options -# -cd /Herwig/Generators -# don't warn if final-state quarks, needed if shower switched off -set /Herwig/Analysis/Basics:CheckQuark 0 -# -# Simple analysis of Z' events -# -create RadiativeZPrime::SimpleZPrimeAnalysis /Herwig/Analysis/SimpleZPrime -insert EventGenerator:AnalysisHandlers 0 /Herwig/Analysis/SimpleZPrime - -# -# save the run -# -saverun LHC-RadiativeZPrime EventGenerator diff --git a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma.cc b/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma.cc +++ /dev/null @@ -1,194 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the MEqq2ZPrime2ZGamma class. -// - -#include "MEqq2ZPrime2ZGamma.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Interface/Parameter.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" -#include "ThePEG/Handlers/StandardXComb.h" -#include "ThePEG/PDT/EnumParticles.h" -#include "ThePEG/MatrixElement/Tree2toNDiagram.h" -#include "ThePEG/Repository/EventGenerator.h" -#include "Herwig/MatrixElement/HardVertex.h" -#include "RadiativeZPrimeModel.h" -#include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h" -#include "AnomalousVVVVertex.h" - -using namespace RadiativeZPrime; - -MEqq2ZPrime2ZGamma::MEqq2ZPrime2ZGamma() : _maxflavour(5) { - vector mopt(2,1); - mopt[0]=2; - massOption(mopt); - rescalingOption(2); -} - -void MEqq2ZPrime2ZGamma::doinit() { - HwMEBase::doinit(); - _zPrime = getParticleData(32); - tcSMPtr sm = generator()->standardModel(); - tcRadiativeZPrimeModelPtr model = - dynamic_ptr_cast(generator()->standardModel()); - if(!model) throw Exception() << "Must be using the RadiativeZPrimeModel in " - << "MEqq2ZPrime2ZGamma::doinit()" << Exception::abortnow; - _theFFZPrimeVertex = model->vertexFFZPrime(); - _theGammaZPrimeZVertex = model->vertexGammaZPrimeZ(); -} - -void MEqq2ZPrime2ZGamma::getDiagrams() const { - tcPDPtr Z0 = getParticleData(ParticleID::Z0); - tcPDPtr gamma = getParticleData(ParticleID::gamma); - for(unsigned int i = 1; i <= _maxflavour; ++i) { - tcPDPtr q = getParticleData(long(i)); - tcPDPtr qb = q->CC(); - add(new_ptr((Tree2toNDiagram(2), q, qb, 1, _zPrime, 3, Z0, 3, gamma, -1))); - } -} - -Energy2 MEqq2ZPrime2ZGamma::scale() const { - return sHat(); -} - -double MEqq2ZPrime2ZGamma::me2() const { - vector fin; - vector ain; - vector gammaout,Zout; - SpinorWaveFunction q(meMomenta()[0],mePartonData()[0],incoming); - SpinorBarWaveFunction qbar(meMomenta()[1],mePartonData()[1],incoming); - VectorWaveFunction Zwave(meMomenta()[2],mePartonData()[2],outgoing); - VectorWaveFunction Gwave(meMomenta()[3],mePartonData()[3],outgoing); - for(unsigned int ix=0;ix<3;++ix) { - if(ix!=1) { - Gwave.reset(ix); - gammaout.push_back(Gwave); - } - if(ix!=2) { - q.reset(ix) ; fin.push_back(q); - qbar.reset(ix); ain.push_back(qbar); - } - Zwave.reset(ix); - Zout.push_back(Zwave); - } - return qqME(fin,ain,Zout,gammaout,false); -} - -unsigned int MEqq2ZPrime2ZGamma::orderInAlphaS() const { - return 0; -} - -unsigned int MEqq2ZPrime2ZGamma::orderInAlphaEW() const { - return 4; -} - -Selector -MEqq2ZPrime2ZGamma::diagrams(const DiagramVector & diags) const { - Selector sel; - for ( DiagramIndex i = 0; i < diags.size(); ++i ) sel.insert(1., i); - return sel; -} - -Selector -MEqq2ZPrime2ZGamma::colourGeometries(tcDiagPtr diag) const { - static const ColourLines c1("1 -2"); - Selector sel; - sel.insert(1.0, &c1); - return sel; -} - - -void MEqq2ZPrime2ZGamma::persistentOutput(PersistentOStream & os) const { - os << _theFFZPrimeVertex << _theGammaZPrimeZVertex << _zPrime << _maxflavour; -} - -void MEqq2ZPrime2ZGamma::persistentInput(PersistentIStream & is, int) { - is >> _theFFZPrimeVertex >> _theGammaZPrimeZVertex >> _zPrime >> _maxflavour; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigMEqq2ZPrime2ZGamma("RadiativeZPrime::MEqq2ZPrime2ZGamma", "RadiativeZPrime.so"); - -void MEqq2ZPrime2ZGamma::Init() { - - static ClassDocumentation documentation - ("The MEqq2ZPrime2ZGamma class implements the matrix element for q qbar -> Z gamma" - " via a resonant Z' in the RadiativeZPrime Model"); - - static Parameter interfaceMaxFlavour - ("MaxFlavour", - "The heaviest incoming quark flavour this matrix element is allowed to handle", - &MEqq2ZPrime2ZGamma::_maxflavour, 5, 1, 6, - false, false, Interface::limited); - -} - -double MEqq2ZPrime2ZGamma::qqME(vector & fin , - vector & ain , - vector & Zout, - vector & gammaout, - bool calc) const { - // scale - Energy2 mb2(scale()); - // matrix element to be stored - ProductionMatrixElement menew(PDT::Spin1Half,PDT::Spin1Half,PDT::Spin1,PDT::Spin1); - // declare the variables we need - unsigned int ihel1,ihel2,ohel1,ohel2; - VectorWaveFunction inter; - double me(0.); - Complex diag; - // sum over helicities to get the matrix element - for(ihel1=0;ihel1<2;++ihel1) { - for(ihel2=0;ihel2<2;++ihel2) { - // intermediate for Z' - inter=_theFFZPrimeVertex->evaluate(mb2,1,_zPrime,fin[ihel1],ain[ihel2]); - for(ohel1=0;ohel1<3;++ohel1) { - for(ohel2=0;ohel2<2;++ohel2) { - diag = _theGammaZPrimeZVertex->evaluate(mb2,gammaout[ohel2],inter,Zout[ohel1]); - me += norm(diag); - if(calc) menew(ihel1,ihel2,ohel1,2*ohel2) = diag; - } - } - } - } - if(calc) _me.reset(menew); - // spin and colour factor - return me/12.; -} - -void MEqq2ZPrime2ZGamma::constructVertex(tSubProPtr sub) { - // extract the particles in the hard process - ParticleVector hard; - hard.push_back(sub->incoming().first); - hard.push_back(sub->incoming().second); - hard.push_back(sub->outgoing()[0]); - hard.push_back(sub->outgoing()[1]); - // order of particles - unsigned int order[4]={0,1,2,3}; - if(hard[0]->id()<0) swap(order[0],order[1]); - if(hard[2]->id()==ParticleID::gamma) swap(order[2],order[3]); - vector fin; - vector ain; - vector gammaout,Zout; - SpinorWaveFunction( fin ,hard[order[0]],incoming,false,true); - SpinorBarWaveFunction(ain ,hard[order[1]],incoming,false,true); - VectorWaveFunction(Zout ,hard[order[2]],outgoing,true,false,true); - VectorWaveFunction(gammaout,hard[order[3]],outgoing,true,true ,true); - gammaout[1]=gammaout[2]; - qqME(fin,ain,Zout,gammaout,true); - // construct the vertex - HardVertexPtr hardvertex=new_ptr(HardVertex()); - // set the matrix element for the vertex - hardvertex->ME(_me); - // set the pointers and to and from the vertex - for(unsigned int ix=0;ix<4;++ix) - hard[order[ix]]->spinInfo()->productionVertex(hardvertex); -} diff --git a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma.h b/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma.h +++ /dev/null @@ -1,217 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_MEqq2ZPrime2ZGammma_H -#define RADIATIVEZPRIME_MEqq2ZPrime2ZGamma_H -// -// This is the declaration of the MEqq2ZPrime2ZGamma class. -// - -#include "Herwig/MatrixElement/HwMEBase.h" -#include "Herwig/MatrixElement/ProductionMatrixElement.h" -#include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" -#include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" -#include "ThePEG/Helicity/Vertex/AbstractVVVVertex.fh" - -namespace RadiativeZPrime { - -using namespace ThePEG; -using namespace Herwig; - -/** - * The MEqq2ZPrime2ZGamma class implements the matrix element for - * \f$q\bar{q}\to Z'\to Z\gamma\f$. - * - * @see \ref MEqq2ZPrime2ZGammaInterfaces "The interfaces" - * defined for MEqq2ZPrime2ZGamma. - */ -class MEqq2ZPrime2ZGamma: public HwMEBase { - -public: - - /** - * The default constructor. - */ - MEqq2ZPrime2ZGamma(); - - /** @name Virtual functions required by the MEBase class. */ - //@{ - /** - * Return the order in \f$\alpha_S\f$ in which this matrix - * element is given. - */ - virtual unsigned int orderInAlphaS() const; - - /** - * Return the order in \f$\alpha_{EW}\f$ in which this matrix - * element is given. - */ - virtual unsigned int orderInAlphaEW() const; - - /** - * The matrix element for the kinematical configuration - * previously provided by the last call to setKinematics(), suitably - * scaled by sHat() to give a dimension-less number. - * @return the matrix element scaled with sHat() to give a - * dimensionless number. - */ - virtual double me2() const; - - /** - * Return the scale associated with the last set phase space point. - */ - virtual Energy2 scale() const; - - /** - * Add all possible diagrams with the add() function. - */ - virtual void getDiagrams() const; - - /** - * Get diagram selector. With the information previously supplied with the - * setKinematics method, a derived class may optionally - * override this method to weight the given diagrams with their - * (although certainly not physical) relative probabilities. - * @param dv the diagrams to be weighted. - * @return a Selector relating the given diagrams to their weights. - */ - virtual Selector diagrams(const DiagramVector & dv) const; - - /** - * Return a Selector with possible colour geometries for the selected - * diagram weighted by their relative probabilities. - * @param diag the diagram chosen. - * @return the possible colour geometries weighted by their - * relative probabilities. - */ - virtual Selector - colourGeometries(tcDiagPtr diag) const; - - /** - * Construct the vertex of spin correlations. - */ - virtual void constructVertex(tSubProPtr); - //@} - - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const { return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const { return new_ptr(*this);} - //@} - -protected: - - /** - * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$. - * @param fin Spinors for incoming quark - * @param ain Spinors for incoming antiquark - * @param Zout Polarization vectors for outgoing Z - * @param gammaout Polarization vectors for the the outgoing photon - * @param me Whether or not to calculate the matrix element for spin correlations - */ - double qqME(vector & fin , - vector & ain , - vector & Zout, - vector & gammaout, - bool me) const; - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object after the setup phase before saving an - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - MEqq2ZPrime2ZGamma & operator=(const MEqq2ZPrime2ZGamma &) = delete; - -private: - - /** - * Pointer to the vertices for the helicity calculations - */ - //@{ - /** - * Pointer to the \f$Z'\f$ vertex - */ - AbstractFFVVertexPtr _theFFZPrimeVertex; - - /** - * Pointer to the \f$\gamma Z' Z vertex\f$ - */ - AbstractVVVVertexPtr _theGammaZPrimeZVertex; - //@} - - /** - * Pointer to the \f$Z'\f$ ParticleData object - */ - tcPDPtr _zPrime; - - /** - * Switches to control the particles in the hard process - */ - //@{ - /** - * Allowed flavours for the incoming quarks - */ - unsigned int _maxflavour; - //@} - - /** - * Matrix element for spin correlations - */ - ProductionMatrixElement _me; - -}; - -} - -#endif /* RADIATIVEZPRIME_MEqq2ZPrime2ZGamma_H */ diff --git a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma2ffGamma.cc b/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma2ffGamma.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma2ffGamma.cc +++ /dev/null @@ -1,366 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the MEqq2ZPrime2ZGamma2ffGamma class. -// - -#include "MEqq2ZPrime2ZGamma2ffGamma.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Interface/Parameter.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" -#include "ThePEG/Handlers/StandardXComb.h" -#include "ThePEG/PDT/EnumParticles.h" -#include "ThePEG/MatrixElement/Tree2toNDiagram.h" -#include "ThePEG/Repository/EventGenerator.h" -#include "Herwig/MatrixElement/HardVertex.h" -#include "RadiativeZPrimeModel.h" -#include "ThePEG/Cuts/Cuts.h" -#include "ThePEG/Utilities/SimplePhaseSpace.h" -#include "ThePEG/PDT/DecayMode.h" - -using namespace RadiativeZPrime; - -void MEqq2ZPrime2ZGamma2ffGamma::doinit() { - MEBase::doinit(); - _z0 = getParticleData(ParticleID::Z0); - _zPrime = getParticleData(32); - tcSMPtr sm = generator()->standardModel(); - tcRadiativeZPrimeModelPtr model = - dynamic_ptr_cast(generator()->standardModel()); - if(!model) throw Exception() << "Must be using the RadiativeZPrimeModel in " - << "MEqq2ZPrime2ZGamma::doinit()" << Exception::abortnow; - _theFFZPrimeVertex = model->vertexFFZPrime(); - _theGammaZPrimeZVertex = model->vertexGammaZPrimeZ(); - _theFFZVertex = model->vertexFFZ(); -} - -void MEqq2ZPrime2ZGamma2ffGamma::getDiagrams() const { - // find possible Z decays - typedef Selector DecaySelector; - DecaySelector Zdec = _z0->decaySelector(); - vector Zdecays; - for(DecaySelector::const_iterator cit=Zdec.begin();cit!=Zdec.end();++cit) { - if(cit->second->orderedProducts().size()!=2) continue; - if(cit->second->orderedProducts()[0]->id()>0) - Zdecays.push_back(make_pair(cit->second->orderedProducts()[0], - cit->second->orderedProducts()[1])); - else - Zdecays.push_back(make_pair(cit->second->orderedProducts()[1], - cit->second->orderedProducts()[0])); - } - tcPDPtr gamma = getParticleData(ParticleID::gamma); - for(unsigned int i = 1; i <= _maxflavour; ++i) { - tcPDPtr q = getParticleData(long(i)); - tcPDPtr qb = q->CC(); - for(unsigned int iz=0;izmassMin())); - maxMass2 = min(maxMass2,sqr(_z0->massMax())); - // also impose the limits from the ParticleData object - if(maxMass2mass()),Gamma(_z0->width()); - Energy2 M2(sqr(M)),MG(M*Gamma); - double rhomin = atan2((minMass2-M2),MG); - double rhomax = atan2((maxMass2-M2),MG); - _mz2=M2+MG*tan(rhomin+r[1]*(rhomax-rhomin)); - Energy mz=sqrt(_mz2); - InvEnergy2 emjac = MG/(rhomax-rhomin)/(sqr(_mz2-M2)+sqr(MG)); - // jacobian - jacobian(jacobian()/sHat()/emjac); - // set the masses of the outgoing particles to 2-2 scattering - meMomenta()[2].setMass(ZERO); - Lorentz5Momentum pz(mz); - // generate the polar angle of the hard scattering - double ctmin(-1.0), ctmax(1.0); - Energy q(ZERO); - try { - q = SimplePhaseSpace::getMagnitude(sHat(), meMomenta()[2].mass(),mz); - } - catch ( ImpossibleKinematics ) { - return false; - } - Energy2 pq = sqrt(sHat())*q; - if ( ptmin > ZERO ) { - double ctm = 1.0 - sqr(ptmin/q); - if ( ctm <= 0.0 ) return false; - ctmin = max(ctmin, -sqrt(ctm)); - ctmax = min(ctmax, sqrt(ctm)); - } - if ( ctmin >= ctmax ) return false; - double cth = getCosTheta(ctmin, ctmax, r[0]); - Energy pt = q*sqrt(1.0-sqr(cth)); - double phi = 2.0*Constants::pi*r[2]; - meMomenta()[2].setVect(Momentum3( pt*sin(phi), pt*cos(phi), q*cth)); - pz.setVect( Momentum3(-pt*sin(phi),-pt*cos(phi),-q*cth)); - meMomenta()[2].rescaleEnergy(); - pz.rescaleEnergy(); - // generate the momenta of the Z decay products - meMomenta()[3].setMass(mePartonData()[3]->mass()); - meMomenta()[4].setMass(mePartonData()[4]->mass()); - Energy q2 = ZERO; - try { - q2 = SimplePhaseSpace::getMagnitude(_mz2, meMomenta()[3].mass(), - meMomenta()[4].mass()); - } catch ( ImpossibleKinematics ) { - return false; - } - double cth2 =-1.+2.*r[3]; - double phi2=Constants::twopi*r[4]; - Energy pt2 =q2*sqrt(1.-sqr(cth2)); - Lorentz5Momentum pl[2]={Lorentz5Momentum( pt2*cos(phi2), pt2*sin(phi2), q2*cth2,ZERO, - meMomenta()[3].mass()), - Lorentz5Momentum(-pt2*cos(phi2),-pt2*sin(phi2),-q2*cth2,ZERO, - meMomenta()[4].mass())}; - pl[0].rescaleEnergy(); - pl[1].rescaleEnergy(); - Boost boostv(pz.boostVector()); - pl[0].boost(boostv); - pl[1].boost(boostv); - meMomenta()[3] = pl[0]; - meMomenta()[4] = pl[1]; - // check passes all the cuts - vector out(3); - tcPDVector tout(3); - for(unsigned int ix=0;ix<3;++ix) { - out[ ix] = meMomenta()[ix+2]; - tout[ix] = mePartonData()[ix+2]; - } - if ( !lastCuts().passCuts(tout, out, mePartonData()[0], mePartonData()[1]) ) - return false; - // jacobian - jacobian((pq/sHat())*Constants::pi*jacobian()/8./sqr(Constants::pi)*q2/mz); - return true; -} - -double MEqq2ZPrime2ZGamma2ffGamma::me2() const { - InvEnergy2 output(ZERO); - // construct spinors for the leptons - vector lm; - vector lp; - SpinorBarWaveFunction lmout(meMomenta()[3],mePartonData()[3],outgoing); - SpinorWaveFunction lpout(meMomenta()[4],mePartonData()[4],outgoing); - for(unsigned int ix=0;ix<2;++ix) { - lmout.reset(ix);lm.push_back(lmout); - lpout.reset(ix);lp.push_back(lpout); - } - vector fin; - vector ain; - vector gout; - SpinorWaveFunction qin (meMomenta()[0],mePartonData()[0],incoming); - SpinorBarWaveFunction qbin(meMomenta()[1],mePartonData()[1],incoming); - VectorWaveFunction glout(meMomenta()[2],mePartonData()[2],outgoing); - for(unsigned int ix=0;ix<2;++ix) { - qin.reset(ix) ; fin.push_back(qin); - qbin.reset(ix) ; ain.push_back(qbin); - glout.reset(2*ix); gout.push_back(glout); - } - output=qqbarME(fin,ain,gout,lm,lp); - return output*sHat(); -} - -CrossSection MEqq2ZPrime2ZGamma2ffGamma::dSigHatDR() const { - return me2()*jacobian()/(16.0*sqr(Constants::pi)*sHat())*sqr(hbarc); -} - -unsigned int MEqq2ZPrime2ZGamma2ffGamma::orderInAlphaS() const { - return 0; -} - -unsigned int MEqq2ZPrime2ZGamma2ffGamma::orderInAlphaEW() const { - return 4; -} - -Selector -MEqq2ZPrime2ZGamma2ffGamma::diagrams(const DiagramVector & diags) const { - Selector sel; - for ( DiagramIndex i = 0; i < diags.size(); ++i ) sel.insert(1., i); - return sel; -} - -Selector -MEqq2ZPrime2ZGamma2ffGamma::colourGeometries(tcDiagPtr diag) const { - static const ColourLines c1=ColourLines("1 -2"); - static const ColourLines c2=ColourLines("1 -2, 6 -7"); - Selector sel; - if(mePartonData()[3]->coloured()) sel.insert(1.0,&c2); - else sel.insert(1.0,&c1); - return sel; -} - -void MEqq2ZPrime2ZGamma2ffGamma::persistentOutput(PersistentOStream & os) const { - os << _theFFZVertex << _theFFZPrimeVertex << _theGammaZPrimeZVertex - << _z0 << _zPrime << _maxflavour; -} - -void MEqq2ZPrime2ZGamma2ffGamma::persistentInput(PersistentIStream & is, int) { - is >> _theFFZVertex >> _theFFZPrimeVertex >> _theGammaZPrimeZVertex - >> _z0 >> _zPrime >> _maxflavour; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigMEqq2ZPrime2ZGamma2ffGamma("RadiativeZPrime::MEqq2ZPrime2ZGamma2ffGamma", "RadiativeZPrime.so"); - -void MEqq2ZPrime2ZGamma2ffGamma::Init() { - - static ClassDocumentation documentation - ("There is no documentation for the MEqq2ZPrime2ZGamma2ffGamma class"); - - static Parameter interfaceMaxFlavour - ("MaxFlavour", - "The heaviest incoming quark flavour this matrix element is allowed to handle", - &MEqq2ZPrime2ZGamma2ffGamma::_maxflavour, 5, 1, 6, - false, false, Interface::limited); - -} - -double MEqq2ZPrime2ZGamma2ffGamma:: -getCosTheta(double ctmin, double ctmax, const double r) { - double cth = 0.0; - double zmin = 0.5*(1.0 - ctmax); - double zmax = 0.5*(1.0 - ctmin); - if ( zmin <= 0.0 || zmax >= 1.0 ) { - jacobian((ctmax - ctmin)*jacobian()); - cth = ctmin + r*(ctmax-ctmin); - } else { - double A1 = (2.0*zmax - 1.0)/(zmax*(1.0-zmax)); - double A0 = (2.0*zmin - 1.0)/(zmin*(1.0-zmin)); - double A = r*(A1 - A0) + A0; - double z = A < 2.0? 2.0/(sqrt(sqr(A) + 4.0) + 2 - A): - 0.5*(A - 2.0 + sqrt(sqr(A) + 4.0))/A; - cth = 1.0 - 2.0*z; - jacobian((2.0*(A1 - A0)*sqr(z)*sqr(1.0 - z)/(sqr(z) + sqr(1.0 - z)))*jacobian()); - } - return cth; -} - -InvEnergy2 MEqq2ZPrime2ZGamma2ffGamma::qqbarME(vector & fin, - vector & ain, - vector & gout, - vector & lm, - vector & lp, - bool calc) const { - // scale - Energy2 mb2(scale()); - // if calculation spin corrections construct the me - if(calc) _me.reset(ProductionMatrixElement(PDT::Spin1Half,PDT::Spin1Half, - PDT::Spin1,PDT::Spin1Half, - PDT::Spin1Half)); - // some integers - unsigned int ihel1,ihel2,ohel1,ohel2,ohel3; - // compute the leptonic Z currents for speed - VectorWaveFunction bcurr[2][2]; - for(ohel2=0;ohel2<2;++ohel2) { - for(ohel3=0;ohel3<2;++ohel3) { - bcurr[ohel2][ohel3]= - _theFFZVertex->evaluate(_mz2,1,_z0,lp[ohel3],lm[ohel2]); - } - } - - // compute the matrix elements - double me=0.; - Complex diag; - VectorWaveFunction inter; - for(ihel1=0;ihel1<2;++ihel1) { - for(ihel2=0;ihel2<2;++ihel2) { - // intermediate for Z' - inter=_theFFZPrimeVertex->evaluate(mb2,1,_zPrime,fin[ihel1],ain[ihel2]); - for(ohel1=0;ohel1<2;++ohel1) { - for(ohel2=0;ohel2<2;++ohel2) { - for(ohel3=0;ohel3<2;++ohel3) { - diag = _theGammaZPrimeZVertex->evaluate(mb2,gout[ohel1],inter, - bcurr[ohel2][ohel3]); - me += norm(diag); - if(calc) _me(ihel1,ihel2,2*ohel1,ohel2,ohel3) = diag; - } - } - } - } - } - // results - // initial state spin and colour average - double colspin = 1./3./4.; - // and for Z decay products - if(mePartonData()[3]->coloured()) colspin *= 3.; - me *= colspin; - return me*UnitRemoval::InvE2; -} - -void MEqq2ZPrime2ZGamma2ffGamma::constructVertex(tSubProPtr sub) { -// // extract the particles in the hard process -// ParticleVector hard(5); -// // incoming -// hard[0]=sub->incoming().first; -// hard[1]=sub->incoming().second; -// if(hard[0]->id()<0) swap(hard[0],hard[1]); -// // outgoing -// for(unsigned int ix=0;ix<3;++ix) { -// unsigned int iloc; -// PPtr mother=sub->outgoing()[ix]->parents()[0]; -// if(mother&&(mother->id()==ParticleID::gamma||mother->id()==ParticleID::Z0)) { -// if(sub->outgoing()[ix]->id()>0) iloc=3; -// else iloc=4; -// } -// else iloc=2; -// hard[iloc]=sub->outgoing()[ix]; -// } -// // wavefunctions for the Z decay products -// vector lm; -// vector lp; -// SpinorBarWaveFunction(lm,hard[3],outgoing,true,true); -// SpinorWaveFunction (lp,hard[4],outgoing,true,true); -// vector fin; -// vector ain; -// vector gout; -// SpinorWaveFunction (fin ,hard[0],incoming,false,true); -// SpinorBarWaveFunction(ain ,hard[1],incoming,false,true); -// VectorWaveFunction (gout,hard[2],outgoing,true ,true,true); -// gout[1]=gout[2]; -// qqbarME(fin,ain,gout,lm,lp,true); -// // construct the vertex -// HardVertexPtr hardvertex=new_ptr(HardVertex()); -// // set the matrix element for the vertex -// hardvertex->ME(_me); -// // set the pointers and to and from the vertex -// for(unsigned int ix=0;ix<5;++ix) -// (hard[ix]->spinInfo())->productionVertex(hardvertex); -} diff --git a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma2ffGamma.h b/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma2ffGamma.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/MEqq2ZPrime2ZGamma2ffGamma.h +++ /dev/null @@ -1,270 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_MEqq2ZPrime2ZGamma2ffGamma_H -#define RADIATIVEZPRIME_MEqq2ZPrime2ZGamma2ffGamma_H -// -// This is the declaration of the MEqq2ZPrime2ZGamma2ffGamma class. -// - -#include "ThePEG/MatrixElement/MEBase.h" -#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" -#include "Herwig/MatrixElement/ProductionMatrixElement.h" -#include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" -#include "ThePEG/Helicity/Vertex/AbstractVVVVertex.fh" - -namespace RadiativeZPrime { - -using namespace ThePEG; -using namespace Herwig; - -/** - * The MEqq2ZPrime2ZGamma2ffGamma class simulates \f$q\bar{q}\to Z'\to Z\gamma\f$ - * including the decay of the Z boson. - * - * @see \ref MEqq2ZPrime2ZGamma2ffGammaInterfaces "The interfaces" - * defined for MEqq2ZPrime2ZGamma2ffGamma. - */ -class MEqq2ZPrime2ZGamma2ffGamma: public MEBase { - -public: - - /** @name Standard constructors and destructors. */ - //@{ - /** - * The default constructor. - */ - inline MEqq2ZPrime2ZGamma2ffGamma() :_maxflavour(5) {} - - /** @name Virtual functions required by the MEBase class. */ - //@{ - /** - * Return the order in \f$\alpha_S\f$ in which this matrix - * element is given. - */ - virtual unsigned int orderInAlphaS() const; - - /** - * Return the order in \f$\alpha_{EW}\f$ in which this matrix - * element is given. - */ - virtual unsigned int orderInAlphaEW() const; - - /** - * The matrix element for the kinematical configuration - * previously provided by the last call to setKinematics(), suitably - * scaled by sHat() to give a dimension-less number. - * @return the matrix element scaled with sHat() to give a - * dimensionless number. - */ - virtual double me2() const; - - /** - * Return the scale associated with the last set phase space point. - */ - virtual Energy2 scale() const; - - /** - * The number of internal degrees of freedom used in the matrix - * element. - */ - virtual int nDim() const; - - /** - * Generate internal degrees of freedom given nDim() uniform - * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space - * generator, the dSigHatDR should be a smooth function of these - * numbers, although this is not strictly necessary. - * @param r a pointer to the first of nDim() consecutive random numbers. - * @return true if the generation succeeded, otherwise false. - */ - virtual bool generateKinematics(const double * r); - - /** - * Return the matrix element squared differential in the variables - * given by the last call to generateKinematics(). - */ - virtual CrossSection dSigHatDR() const; - - /** - * Add all possible diagrams with the add() function. - */ - virtual void getDiagrams() const; - - /** - * Get diagram selector. With the information previously supplied with the - * setKinematics method, a derived class may optionally - * override this method to weight the given diagrams with their - * (although certainly not physical) relative probabilities. - * @param dv the diagrams to be weighted. - * @return a Selector relating the given diagrams to their weights. - */ - virtual Selector diagrams(const DiagramVector & dv) const; - - /** - * Return a Selector with possible colour geometries for the selected - * diagram weighted by their relative probabilities. - * @param diag the diagram chosen. - * @return the possible colour geometries weighted by their - * relative probabilities. - */ - virtual Selector - colourGeometries(tcDiagPtr diag) const; - - /** - * Construct the vertex of spin correlations. - */ - virtual void constructVertex(tSubProPtr); - //@} - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** - * Used internally by generateKinematics, after calculating the - * limits on cos(theta). - */ - double getCosTheta(double cthmin, double cthmax, const double r); - - /** - * Matrix elements for the different subprocesses - */ - //@{ - /** - * Matrix element for \f$q\bar{q}\to Z/\gamma g\f$. - * @param fin Spinors for incoming quark - * @param ain Spinors for incoming antiquark - * @param gout Polarization vectors for the outgoing photon - * @param lm Spinors for outgoing lepton - * @param lp Spinors for outgoing antilepton - * @param me Whether or not to calculate the matrix element for spin correlations - **/ - InvEnergy2 qqbarME(vector & fin, - vector & ain, - vector & gout, - vector & lm, vector & lp, - bool me=false) const; - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const {return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const {return new_ptr(*this);} - //@} - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object after the setup phase before saving an - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - MEqq2ZPrime2ZGamma2ffGamma & operator=(const MEqq2ZPrime2ZGamma2ffGamma &) = delete; - -private: - - /** - * Vertices for the helicity amplitude calculation - */ - //@{ - /** - * Pointer to the Z vertex - */ - AbstractFFVVertexPtr _theFFZVertex; - /** - * Pointer to the \f$Z'\f$ vertex - */ - AbstractFFVVertexPtr _theFFZPrimeVertex; - - /** - * Pointer to the \f$\gamma Z' Z vertex\f$ - */ - AbstractVVVVertexPtr _theGammaZPrimeZVertex; - //@} - - /** - * @name Pointers to the \f$Z^0\f$ and \f$Z'\f$ ParticleData objects - */ - //@{ - /** - * Pointer to the Z ParticleData object - */ - tcPDPtr _z0; - - /** - * Pointer to the \f$Z'\f$ ParticleData object - */ - tcPDPtr _zPrime; - //@} - - /** - * Switches to control the particles in the hard process - */ - //@{ - /** - * Allowed flavours for the incoming quarks - */ - unsigned int _maxflavour; - //@} - - /** - * Matrix element for spin correlations - */ - ProductionMatrixElement _me; - - /** - * Storage of the off-shell Z mass to avoid the need to recalculate - */ - Energy2 _mz2; - -}; - -} - -#endif /* RADIATIVEZPRIME_MEqq2ZPrime2ZGamma2ffGamma_H */ diff --git a/Contrib/RadiativeZPrime/MEqq2ZPrime2ff.cc b/Contrib/RadiativeZPrime/MEqq2ZPrime2ff.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/MEqq2ZPrime2ff.cc +++ /dev/null @@ -1,366 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the MEqq2ZPrime2ff class. -// - -#include "MEqq2ZPrime2ff.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Interface/Switch.h" -#include "ThePEG/Interface/Parameter.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" -#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" -#include "ThePEG/Handlers/StandardXComb.h" -#include "ThePEG/PDT/EnumParticles.h" -#include "ThePEG/MatrixElement/Tree2toNDiagram.h" -#include "ThePEG/Repository/EventGenerator.h" -#include "Herwig/MatrixElement/HardVertex.h" -#include "RadiativeZPrimeModel.h" - -using namespace RadiativeZPrime; - -MEqq2ZPrime2ff::MEqq2ZPrime2ff() : _maxflavour(5), _gammaZ(0), _process(0) { - massOption(vector(2,1)); -} - -void MEqq2ZPrime2ff::doinit() { - HwMEBase::doinit(); - _zPrime = getParticleData(32); - _z0 = getParticleData(ThePEG::ParticleID::Z0); - _gamma = getParticleData(ThePEG::ParticleID::gamma); - tcSMPtr sm = generator()->standardModel(); - tcRadiativeZPrimeModelPtr model = - dynamic_ptr_cast(generator()->standardModel()); - if(!model) throw Exception() << "Must be using the RadiativeZPrimeModel in " - << "MEqq2ZPrime2ff::doinit()" << Exception::abortnow; - _theFFZVertex = model->vertexFFZ(); - _theFFPVertex = model->vertexFFP(); - _theFFZPrimeVertex = model->vertexFFZPrime(); -} - -void MEqq2ZPrime2ff::getDiagrams() const { - // which intermediates to include - bool gamma = _gammaZ==0 || _gammaZ==1; - bool Z0 = _gammaZ==0 || _gammaZ==2; - bool Zprime = _gammaZ==0 || _gammaZ==3; - // loop over the processes we need - for(unsigned int ix=1;ix<17;++ix) { - // increment counter to switch between quarks and leptons - if(ix==7) ix+=4; - // is it a valid quark process - bool quark = ix<=6 && (_process==0 || _process==1 || _process-10==ix); - // is it a valid lepton process - bool lepton= ix>=11 && ix<=16 - && (_process==0 - || _process==2 - || (_process==3 && ix%2==1) - || (_process==4 && ix%2==0) - || (ix%2==0 && (ix-10)/2==_process-7) - || (ix%2==1 && (ix-9)/2 ==_process-4) - ); - // if not a valid process continue - if(!(quark||lepton)) continue; - tcPDPtr lm = getParticleData(long(ix)); - tcPDPtr lp = lm->CC(); - for(unsigned int i = 1; i <= _maxflavour; ++i) { - tcPDPtr q = getParticleData(long(i)); - tcPDPtr qb = q->CC(); - if(Z0) add(new_ptr((Tree2toNDiagram(2), q, qb, 1, _z0 , 3, lm, 3, lp, -1))); - if(gamma) add(new_ptr((Tree2toNDiagram(2), q, qb, 1, _gamma , 3, lm, 3, lp, -2))); - if(Zprime) add(new_ptr((Tree2toNDiagram(2), q, qb, 1, _zPrime, 3, lm, 3, lp, -3))); - } - } -} - -Energy2 MEqq2ZPrime2ff::scale() const { - return sHat(); -} - -double MEqq2ZPrime2ff::me2() const { - vector fin,aout; - vector ain,fout; - SpinorWaveFunction q(meMomenta()[0],mePartonData()[0],incoming); - SpinorBarWaveFunction qbar(meMomenta()[1],mePartonData()[1],incoming); - SpinorBarWaveFunction f(meMomenta()[2],mePartonData()[2],outgoing); - SpinorWaveFunction fbar(meMomenta()[3],mePartonData()[3],outgoing); - for(unsigned int ix=0;ix<2;++ix) { - q.reset(ix) ; fin.push_back(q); - qbar.reset(ix); ain.push_back(qbar); - f.reset(ix) ;fout.push_back(f); - fbar.reset(ix);aout.push_back(fbar); - } - return qqME(fin,ain,fout,aout,false); -} - -unsigned int MEqq2ZPrime2ff::orderInAlphaS() const { - return 0; -} - -unsigned int MEqq2ZPrime2ff::orderInAlphaEW() const { - return 2; -} - -Selector -MEqq2ZPrime2ff::diagrams(const DiagramVector & diags) const { - Selector sel; - for ( DiagramIndex i = 0; i < diags.size(); ++i ) { - if ( diags[i]->id() == -1 ) sel.insert(meInfo()[0], i); - else if ( diags[i]->id() == -2 ) sel.insert(meInfo()[1], i); - else if ( diags[i]->id() == -3 ) sel.insert(meInfo()[2], i); - } - return sel; -} - -Selector -MEqq2ZPrime2ff::colourGeometries(tcDiagPtr diag) const { - static const ColourLines c1("1 -2"); - static const ColourLines c2("1 -2,4 -5"); - Selector sel; - if(abs(mePartonData()[2]->id())<=6) sel.insert(1.0, &c2); - else sel.insert(1.0, &c1); - return sel; -} - - -void MEqq2ZPrime2ff::persistentOutput(PersistentOStream & os) const { - os << _theFFZPrimeVertex << _theFFZVertex << _theFFPVertex << _zPrime << _z0 - << _gamma << _maxflavour << _gammaZ << _process; -} - -void MEqq2ZPrime2ff::persistentInput(PersistentIStream & is, int) { - is >> _theFFZPrimeVertex >> _theFFZVertex >> _theFFPVertex >> _zPrime >> _z0 - >> _gamma >> _maxflavour >> _gammaZ >> _process; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigMEqq2ZPrime2ff("RadiativeZPrime::MEqq2ZPrime2ff", "RadiativeZPrime.so"); - -void MEqq2ZPrime2ff::Init() { - - static ClassDocumentation documentation - ("The MEqq2ZPrime2ff class provides the matrix elements for " - "q qbar -> f fbar in the RadiativeZPrimeModel including the option" - " of interference with the photon and Z"); - - static Parameter interfaceMaxFlavour - ("MaxFlavour", - "The heaviest incoming quark flavour this matrix element is allowed to handle", - &MEqq2ZPrime2ff::_maxflavour, 5, 1, 6, - false, false, Interface::limited); - - static Switch interfaceGammaZ - ("GammaZ", - "Which terms to include", - &MEqq2ZPrime2ff::_gammaZ, 3, false, false); - static SwitchOption interfaceGammaZAll - (interfaceGammaZ, - "All", - "Include both gamma, Z and Z' terms", - 0); - static SwitchOption interfaceGammaZGamma - (interfaceGammaZ, - "Gamma", - "Only include the photon", - 1); - static SwitchOption interfaceGammaZZ - (interfaceGammaZ, - "Z", - "Only include the Z", - 2); - static SwitchOption interfaceGammaZZPrime - (interfaceGammaZ, - "ZPrime", - "Only include the Z'", - 3); - - static Switch interfaceProcess - ("Process", - "Which process to included", - &MEqq2ZPrime2ff::_process, 0, false, false); - static SwitchOption interfaceProcessAll - (interfaceProcess, - "All", - "Include all SM fermions as outgoing particles", - 0); - static SwitchOption interfaceProcessQuarks - (interfaceProcess, - "Quarks", - "All include the quarks as outgoing particles", - 1); - static SwitchOption interfaceProcessLeptons - (interfaceProcess, - "Leptons", - "Only include the leptons as outgoing particles", - 2); - static SwitchOption interfaceProcessChargedLeptons - (interfaceProcess, - "ChargedLeptons", - "Only include the charged leptons as outgoing particles", - 3); - static SwitchOption interfaceProcessNeutrinos - (interfaceProcess, - "Neutrinos", - "Only include the neutrinos as outgoing particles", - 4); - static SwitchOption interfaceProcessElectron - (interfaceProcess, - "Electron", - "Only include e+e- as outgoing particles", - 5); - static SwitchOption interfaceProcessMuon - (interfaceProcess, - "Muon", - "Only include mu+mu- as outgoing particles", - 6); - static SwitchOption interfaceProcessTau - (interfaceProcess, - "Tau", - "Only include tau+tau- as outgoing particles", - 7); - static SwitchOption interfaceProcessNu_e - (interfaceProcess, - "Nu_e", - "Only include nu_e ne_ebar as outgoing particles", - 8); - static SwitchOption interfaceProcessnu_mu - (interfaceProcess, - "Nu_mu", - "Only include nu_mu nu_mubar as outgoing particles", - 9); - static SwitchOption interfaceProcessnu_tau - (interfaceProcess, - "Nu_tau", - "Only include nu_tau nu_taubar as outgoing particles", - 10); - static SwitchOption interfaceProcessDown - (interfaceProcess, - "Down", - "Only include d dbar as outgoing particles", - 11); - static SwitchOption interfaceProcessUp - (interfaceProcess, - "Up", - "Only include u ubar as outgoing particles", - 12); - static SwitchOption interfaceProcessStrange - (interfaceProcess, - "Strange", - "Only include s sbar as outgoing particles", - 13); - static SwitchOption interfaceProcessCharm - (interfaceProcess, - "Charm", - "Only include c cbar as outgoing particles", - 14); - static SwitchOption interfaceProcessBottom - (interfaceProcess, - "Bottom", - "Only include b bbar as outgoing particles", - 15); - static SwitchOption interfaceProcessTop - (interfaceProcess, - "Top", - "Only include t tbar as outgoing particles", - 16); - -} - -double MEqq2ZPrime2ff::qqME(vector & fin , - vector & ain , - vector & fout, - vector & aout, - bool calc) const { - // scale - Energy2 mb2(scale()); - // matrix element to be stored - ProductionMatrixElement menew(PDT::Spin1Half,PDT::Spin1Half, - PDT::Spin1Half,PDT::Spin1Half); - // which intermediates to include - bool gamma = _gammaZ==0 || _gammaZ==1; - bool Z0 = _gammaZ==0 || _gammaZ==2; - bool Zprime = _gammaZ==0 || _gammaZ==3; - // declare the variables we need - unsigned int ihel1,ihel2,ohel1,ohel2; - VectorWaveFunction inter[3]; - double me[4]={0.,0.,0.,0.}; - Complex diag[3]; - // sum over helicities to get the matrix element - for(ihel1=0;ihel1<2;++ihel1) { - for(ihel2=0;ihel2<2;++ihel2) { - // intermediate for Z - if(Z0) inter[0]=_theFFZVertex -> - evaluate(mb2,1,_z0 ,fin[ihel1],ain[ihel2]); - // intermediate for photon - if(gamma) inter[1]=_theFFPVertex -> - evaluate(mb2,1,_gamma ,fin[ihel1],ain[ihel2]); - // intermediate for Z' - if(Zprime) inter[2]=_theFFZPrimeVertex-> - evaluate(mb2,1,_zPrime,fin[ihel1],ain[ihel2]); - for(ohel1=0;ohel1<2;++ohel1) { - for(ohel2=0;ohel2<2;++ohel2) { - // first the Z exchange diagram - diag[0] = Z0 ? - _theFFZVertex->evaluate(mb2,aout[ohel2],fout[ohel1],inter[0]) : 0.; - // first the photon exchange diagram - diag[1] = gamma ? - _theFFPVertex->evaluate(mb2,aout[ohel2],fout[ohel1],inter[1]) : 0.; - // then the Z' diagram - diag[2] = Zprime ? - _theFFZPrimeVertex->evaluate(mb2,aout[ohel2],fout[ohel1],inter[2]) : 0.; - // add up squares of individual terms - for(unsigned int ix=0;ix<3;++ix) me[ix+1] = norm(diag[ix]); - // the full thing including interference - diag[0]+=diag[1]+diag[2]; - me[0] += norm(diag[0]); - if(calc) menew(ihel1,ihel2,ohel1,ohel2) = diag[0]; - } - } - } - } - // spin and colour factor - double colspin=1./12.; - if(abs(fout[0].id())<=6) colspin*=3.; - // results - // factor 12 from 4 helicity and 3 colour - for(int ix=0;ix<3;++ix) me[ix]*=colspin; - DVector save; - save.push_back(me[1]); - save.push_back(me[2]); - save.push_back(me[3]); - meInfo(save); - if(calc) _me.reset(menew); - return me[0]; -} - -void MEqq2ZPrime2ff::constructVertex(tSubProPtr sub) { - // extract the particles in the hard process - ParticleVector hard; - hard.push_back(sub->incoming().first); - hard.push_back(sub->incoming().second); - hard.push_back(sub->outgoing()[0]); - hard.push_back(sub->outgoing()[1]); - // order of particles - unsigned int order[4]={0,1,2,3}; - if(hard[0]->id()<0) swap(order[0],order[1]); - if(hard[2]->id()<0) swap(order[2],order[3]); - vector fin,aout; - vector ain,fout; - SpinorWaveFunction( fin ,hard[order[0]],incoming,false,true); - SpinorBarWaveFunction(ain ,hard[order[1]],incoming,false,true); - SpinorBarWaveFunction(fout,hard[order[2]],outgoing,true ,true); - SpinorWaveFunction( aout,hard[order[3]],outgoing,true ,true); - qqME(fin,ain,fout,aout,true); - // construct the vertex - HardVertexPtr hardvertex=new_ptr(HardVertex()); - // set the matrix element for the vertex - hardvertex->ME(_me); - // set the pointers and to and from the vertex - for(unsigned int ix=0;ix<4;++ix) - hard[order[ix]]->spinInfo()->productionVertex(hardvertex); -} diff --git a/Contrib/RadiativeZPrime/MEqq2ZPrime2ff.h b/Contrib/RadiativeZPrime/MEqq2ZPrime2ff.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/MEqq2ZPrime2ff.h +++ /dev/null @@ -1,243 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_MEqq2ZPrime2ff_H -#define RADIATIVEZPRIME_MEqq2ZPrime2ff_H -// -// This is the declaration of the MEqq2ZPrime2ff class. -// - -#include "Herwig/MatrixElement/HwMEBase.h" -#include "Herwig/MatrixElement/ProductionMatrixElement.h" -#include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" -#include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" -#include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh" - -namespace RadiativeZPrime { - -using namespace ThePEG; -using namespace Herwig; - -/** - * The MEqq2ZPrime2ff class implements the matrix element for - * \f$q\bar{q}\to Z'\to f \bar{f}\f$ - * - * @see \ref MEqq2ZPrime2ffInterfaces "The interfaces" - * defined for MEqq2ZPrime2ff. - */ -class MEqq2ZPrime2ff: public HwMEBase { - -public: - - /** - * The default constructor. - */ - MEqq2ZPrime2ff(); - - /** @name Virtual functions required by the MEBase class. */ - //@{ - /** - * Return the order in \f$\alpha_S\f$ in which this matrix - * element is given. - */ - virtual unsigned int orderInAlphaS() const; - - /** - * Return the order in \f$\alpha_{EW}\f$ in which this matrix - * element is given. - */ - virtual unsigned int orderInAlphaEW() const; - - /** - * The matrix element for the kinematical configuration - * previously provided by the last call to setKinematics(), suitably - * scaled by sHat() to give a dimension-less number. - * @return the matrix element scaled with sHat() to give a - * dimensionless number. - */ - virtual double me2() const; - - /** - * Return the scale associated with the last set phase space point. - */ - virtual Energy2 scale() const; - - /** - * Add all possible diagrams with the add() function. - */ - virtual void getDiagrams() const; - - /** - * Get diagram selector. With the information previously supplied with the - * setKinematics method, a derived class may optionally - * override this method to weight the given diagrams with their - * (although certainly not physical) relative probabilities. - * @param dv the diagrams to be weighted. - * @return a Selector relating the given diagrams to their weights. - */ - virtual Selector diagrams(const DiagramVector & dv) const; - - /** - * Return a Selector with possible colour geometries for the selected - * diagram weighted by their relative probabilities. - * @param diag the diagram chosen. - * @return the possible colour geometries weighted by their - * relative probabilities. - */ - virtual Selector - colourGeometries(tcDiagPtr diag) const; - - /** - * Construct the vertex of spin correlations. - */ - virtual void constructVertex(tSubProPtr); - //@} - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const {return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const {return new_ptr(*this);} - //@} - -protected: - - /** - * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$. - * @param fin Spinors for incoming quark - * @param ain Spinors for incoming antiquark - * @param fout Spinors for incoming quark - * @param aout Spinors for incoming antiquark - * @param me Whether or not to calculate the matrix element for spin correlations - */ - double qqME(vector & fin , - vector & ain , - vector & fout, - vector & aout, - bool me) const; - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object after the setup phase before saving an - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - MEqq2ZPrime2ff & operator=(const MEqq2ZPrime2ff &) = delete; - -private: - - /** - * Pointer to the vertices for the helicity calculations - */ - //@{ - /** - * Pointer to the \f$Z'\f$ vertex - */ - AbstractFFVVertexPtr _theFFZPrimeVertex; - - /** - * Pointer to the Z vertex - */ - AbstractFFVVertexPtr _theFFZVertex; - - /** - * Pointer to the photon vertex - */ - AbstractFFVVertexPtr _theFFPVertex; - //@} - - /** - * Pointers to the intermediate resonances - */ - //@{ - /** - * Pointer to the \f$Z'\f$ ParticleData object - */ - tcPDPtr _zPrime; - - /** - * Pointer to the Z ParticleData object - */ - tcPDPtr _z0; - - /** - * Pointer to the photon ParticleData object - */ - tcPDPtr _gamma; - //@} - - /** - * Switches to control the particles in the hard process - */ - //@{ - /** - * Allowed flavours for the incoming quarks - */ - unsigned int _maxflavour; - - /** - * Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one - */ - unsigned int _gammaZ; - - /** - * Which processes to include - */ - unsigned int _process; - //@} - - /** - * Matrix element for spin correlations - */ - ProductionMatrixElement _me; -}; - -} - -#endif /* RADIATIVEZPRIME_MEqq2ZPrime2ff_H */ diff --git a/Contrib/RadiativeZPrime/Makefile.in b/Contrib/RadiativeZPrime/Makefile.in deleted file mode 100644 --- a/Contrib/RadiativeZPrime/Makefile.in +++ /dev/null @@ -1,40 +0,0 @@ -# -*- Makefile -*- (for emacs) - -# -# This Makefile is intended for compiling Herwig++ plugins -# You can find plugins here: INSERT URL -# -# This Makefile received very little testing, -# any bug reports are very welcome! -# - -# location of include files -THEPEGINCLUDE = -GSLINCLUDE = -HERWIGINCLUDE = -LDFLAGS = -SHARED_FLAG = -INCLUDE = $(THEPEGINCLUDE) $(GSLINCLUDE) $(HERWIGINCLUDE) -# -# C++ flags -# -CXX = -CXXFLAGS = - -ALLCCFILES=$(shell echo *.cc) - -default : RadiativeZPrime.so - -%.o : %.cc %.h - $(CXX) -fPIC $(CPPFLAGS) $(INCLUDE) $(CXXFLAGS) -c -shared $< -o $@ - -RadiativeZPrime.so : AnomalousVVVVertex.o RadiativeZPrimeModel.o FFZPrimeVertex.o\ - GammaZPrimeZVertex.o MEqq2ZPrime2ff.o MEqq2ZPrime2ZGamma.o\ - MEqq2ZPrime2ZGamma2ffGamma.o SimpleZPrimeAnalysis.o - $(CXX) -fPIC $(CPPFLAGS) $(INCLUDE) $(CXXFLAGS) $(SHARED_FLAG) $(LDFLAGS) AnomalousVVVVertex.o \ - RadiativeZPrimeModel.o FFZPrimeVertex.o GammaZPrimeZVertex.o \ - MEqq2ZPrime2ZGamma2ffGamma.o MEqq2ZPrime2ZGamma.o MEqq2ZPrime2ff.o \ - SimpleZPrimeAnalysis.o -o RadiativeZPrime.so - -clean: - rm -f $(ALLCCFILES:.cc=.o) RadiativeZPrime.so diff --git a/Contrib/RadiativeZPrime/RadiativeZPrime.model b/Contrib/RadiativeZPrime/RadiativeZPrime.model deleted file mode 100644 --- a/Contrib/RadiativeZPrime/RadiativeZPrime.model +++ /dev/null @@ -1,72 +0,0 @@ -################################################## -# Common setup for Randall-Sundrum models -# -# This file does not contain anything that -# users need to touch. User settings are in -# LHC-RadiativeZPrime.in -# -################################################### -# -# Particle Data object for the Zprime -# -################################################### -cd /Herwig/Particles -create /ThePEG/ParticleData Z'0 -setup Z'0 32 Z'0 500.0 0.0 0.0 0.0 0 0 3 0 -defaultparticle Z'0 -################################################### -# -# Main directory and model object -# -################################################### -mkdir /Herwig/NewPhysics/RadiativeZPrime -cd /Herwig/NewPhysics/RadiativeZPrime -create RadiativeZPrime::RadiativeZPrimeModel Model RadiativeZPrime.so -# SM couplings -set Model:QCD/RunningAlphaS /Herwig/Couplings/NLOAlphaS -set Model:EW/RunningAlphaEM /Herwig/Couplings/AlphaEM -set Model:EW/CKM /Herwig/CKM -set Model:RunningMass /Herwig/RunningMass -################################################### -# -# Vertices -# -################################################### -# create vertices -mkdir /Herwig/Vertices/RadiativeZPrime -cd /Herwig/Vertices/RadiativeZPrime -create RadiativeZPrime::GammaZPrimeZVertex RZ_GammaZPrimeZVertex -create RadiativeZPrime::FFZPrimeVertex RZ_FFZPrimeVertex -cd /Herwig/NewPhysics/RadiativeZPrime -# SM vertices -set Model:Vertex/FFZ /Herwig/Vertices/FFZVertex -set Model:Vertex/FFW /Herwig/Vertices/FFWVertex -set Model:Vertex/FFH /Herwig/Vertices/FFHVertex -set Model:Vertex/FFG /Herwig/Vertices/FFGVertex -set Model:Vertex/FFP /Herwig/Vertices/FFPVertex -set Model:Vertex/GGG /Herwig/Vertices/GGGVertex -set Model:Vertex/GGGG /Herwig/Vertices/GGGGVertex -set Model:Vertex/WWH /Herwig/Vertices/WWHVertex -set Model:Vertex/WWW /Herwig/Vertices/WWWVertex -set Model:Vertex/WWWW /Herwig/Vertices/WWWWVertex -set Model:Vertex/HGG /Herwig/Vertices/HGGVertex -set Model:Vertex/HPP /Herwig/Vertices/HPPVertex -# Z' vertices -set Model:Vertex/FFZPrime /Herwig/Vertices/RadiativeZPrime/RZ_FFZPrimeVertex -set Model:Vertex/GammaZPrimeZ /Herwig/Vertices/RadiativeZPrime/RZ_GammaZPrimeZVertex -################################################### -# -# Setting to ensure spin correlations -# and generation of processes and decays -# -################################################### -cd /Herwig/NewPhysics -# Set up the model framework -set RadiativeZPrime/Model:ModelGenerator NewModel -################################################### -# -# Choose RadiativeZPrimeModel over SM -# -################################################### -cd /Herwig/Generators -set EventGenerator:StandardModelParameters /Herwig/NewPhysics/RadiativeZPrime/Model diff --git a/Contrib/RadiativeZPrime/RadiativeZPrimeModel.cc b/Contrib/RadiativeZPrime/RadiativeZPrimeModel.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/RadiativeZPrimeModel.cc +++ /dev/null @@ -1,132 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the RadiativeZPrimeModel class. -// - -#include "RadiativeZPrimeModel.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/Interface/Reference.h" -#include "ThePEG/Interface/Parameter.h" -#include "ThePEG/Interface/Switch.h" -#include "ThePEG/Interface/ClassDocumentation.h" -#include "ThePEG/Persistency/PersistentOStream.h" -#include "ThePEG/Persistency/PersistentIStream.h" - -using namespace RadiativeZPrime; - -void RadiativeZPrimeModel::persistentOutput(PersistentOStream & os) const { - os << _gZprime << _useZcouplings - << _vnu << _ve << _vu << _vd - << _anu << _ae << _au << _ad - << _ffZPrimeVertex << _gammaZPrimeZVertex; -} - -void RadiativeZPrimeModel::persistentInput(PersistentIStream & is, int) { - is >> _gZprime >> _useZcouplings - >> _vnu >> _ve >> _vu >> _vd - >> _anu >> _ae >> _au >> _ad - >> _ffZPrimeVertex >> _gammaZPrimeZVertex; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeClass -describeHerwigRadiativeZPrimeModel("RadiativeZPrime::RadiativeZPrimeModel", "RadiativeZPrime.so"); - -void RadiativeZPrimeModel::Init() { - - static ClassDocumentation documentation - ("The RadiativeZPrimeModel class"); - - static Switch interfaceUseZCouplings - ("UseZCouplings", - "Set the fermion couplings to the Z prime to be the same as for the Z", - &RadiativeZPrimeModel::_useZcouplings, true, false, false); - static SwitchOption interfaceUseZCouplingsYes - (interfaceUseZCouplings, - "Yes", - "Set Z' couplings to Z couplings", - true); - static SwitchOption interfaceUseZCouplingsNo - (interfaceUseZCouplings, - "No", - "Z' couplings are inputted", - false); - - static Parameter interfacegZPrime - ("gZPrime", - "The coupling of the Z'", - &RadiativeZPrimeModel::_gZprime, 1.0, 0.0, 10.0, - false, false, Interface::limited); - - static Parameter interfaceZPrimeVnu - ("Zprimev_nu", - "The vector coupling between a neutrino and a Z'. ", - &RadiativeZPrimeModel::_vnu, 1.0, 0, 0, - false, false, Interface::nolimits); - - static Parameter interfaceZPrimeVe - ("Zprimev_e", - "The vector coupling between a charged lepton and a Z'. ", - &RadiativeZPrimeModel::_ve, -0.072, 0.0, 0.0, false, false, false); - - static Parameter interfaceZPrimeVu - ("Zprimev_u", - "The vector coupling between an up-type quark and a Z'. ", - &RadiativeZPrimeModel::_vu, 0.3813, 0.0, 0.0, false, false, false); - - static Parameter interfaceZPrimeVd - ("Zprimev_d", - "The vector coupling between a down-type quark and a Z'. ", - &RadiativeZPrimeModel::_vd, -0.6907, 0.0, 0.0, false, false, false); - - static Parameter interfaceZPrimeAnu - ("Zprimea_nu", - "The axial coupling between a neutrino and a Z'. ", - &RadiativeZPrimeModel::_anu, 1.0, 0.0, 0.0, false, false, false); - - static Parameter interfaceZPrimeAe - ("Zprimea_e", - "The axial coupling between a charged lepton and a Z'. ", - &RadiativeZPrimeModel::_ae, -1.0, 0.0, 0.0, false, false, false); - - static Parameter interfaceZPrimeAu - ("Zprimea_u", - "The axial coupling between an up-type quark and a Z'. ", - &RadiativeZPrimeModel::_au, 1.0, 0.0, 0.0, false, false, false); - - static Parameter interfaceZPrimeAd - ("Zprimea_d", - "The axial coupling between a down-type quark and a Z'. ", - &RadiativeZPrimeModel::_ad, -1.0, 0.0, 0.0, false, false, false); - - static Reference - interfaceVertexFFZ - ("Vertex/FFZPrime", - "Reference to the Standard Model FFZ Vertex", - &RadiativeZPrimeModel::_ffZPrimeVertex, false, false, true, false); - - static Reference - interfaceVertexGammaZPrimeZ - ("Vertex/GammaZPrimeZ", - "Reference to the gamma-Z'-Z vertex", - &RadiativeZPrimeModel::_gammaZPrimeZVertex, false, false, true, false, false); - -} - -void RadiativeZPrimeModel::doinit() { - if(_useZcouplings) { - _vnu = vnu(); - _ve = ve() ; - _vu = vu() ; - _vd = vd() ; - _anu = anu(); - _ae = ae() ; - _au = au() ; - _ad = ad() ; - } - StandardModel::doinit(); - addVertex(_ffZPrimeVertex); - addVertex(_gammaZPrimeZVertex); -} diff --git a/Contrib/RadiativeZPrime/RadiativeZPrimeModel.h b/Contrib/RadiativeZPrime/RadiativeZPrimeModel.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/RadiativeZPrimeModel.h +++ /dev/null @@ -1,226 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_RadiativeZPrimeModel_H -#define RADIATIVEZPRIME_RadiativeZPrimeModel_H -// -// This is the declaration of the RadiativeZPrimeModel class. -// - -#include "Herwig/Models/StandardModel/StandardModel.h" - -namespace RadiativeZPrime { - -using namespace ThePEG; - -/** - * The RadiativeZPrimeModel class is the main class for the radiative - * \f$Z'\f$ model of hep-ph/0501154. - * - * @see \ref RadiativeZPrimeModelInterfaces "The interfaces" - * defined for RadiativeZPrimeModel. - */ -class RadiativeZPrimeModel: public Herwig::StandardModel { - -public: - - /** - * The default constructor. - */ - inline RadiativeZPrimeModel() : - _gZprime(1.), _useZcouplings(true), - _vnu(1.0), _ve(-0.072), _vu(0.3813), _vd(-0.6907), - _anu(1.0), _ae(-1.0), _au(1.0), _ad(-1.0) {} - - /** - * The coupling of the \f$Z'\f$ - */ - inline double gZprime() const {return _gZprime;} - - /** - * The vector neutrino-\f$Z^0\f$ coupling. - */ - inline double zPrimevnu() const {return _vnu;} - - /** - * The vector charged lepton-\f$Z^0\f$ coupling. - */ - inline double zPrimeve() const {return _ve;} - - /** - * The vector up-type-\f$Z^0\f$ coupling. - */ - inline double zPrimevu() const {return _vu;} - - /** - * The vector down-type-\f$Z^0\f$ coupling. - */ - inline double zPrimevd() const {return _vd;} - - /** - * The axial neutrino-\f$Z^0\f$ coupling. - */ - inline double zPrimeanu() const {return _anu;} - - /** - * The axial charged lepton-\f$Z^0\f$ coupling. - */ - inline double zPrimeae() const {return _ae;} - - /** - * The axial up-type-\f$Z^0\f$ coupling. - */ - inline double zPrimeau() const {return _au;} - - /** - * The axial down-type-\f$Z^0\f$ coupling. - */ - inline double zPrimead() const {return _ad;} - - /** - * The \f$f\bar{f}Z'\f$ vertex - */ - inline AbstractFFVVertexPtr vertexFFZPrime() const {return _ffZPrimeVertex;} - - /** - * The \f$\gamma Z'Z\f$ vertex - */ - inline AbstractVVVVertexPtr vertexGammaZPrimeZ() const {return _gammaZPrimeZVertex;} - -public: - - /** @name Functions used by the persistent I/O system. */ - //@{ - /** - * Function used to write out object persistently. - * @param os the persistent output stream written to. - */ - void persistentOutput(PersistentOStream & os) const; - - /** - * Function used to read in object persistently. - * @param is the persistent input stream read from. - * @param version the version number of the object when written. - */ - void persistentInput(PersistentIStream & is, int version); - //@} - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const {return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const {return new_ptr(*this);} - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - RadiativeZPrimeModel & operator=(const RadiativeZPrimeModel &) = delete; - - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object after the setup phase before saving an - * EventGenerator to disk. - * @throws InitException if object could not be initialized properly. - */ - virtual void doinit(); - //@} - -private: - - /** - * The free coupling \f$g_{Z'}\f$ - */ - double _gZprime; - - /** - * Switch to control the setting of the \f$Z'\f$ couplings to fermions - */ - bool _useZcouplings; - - /** - * Vector coupling between a fundamental fermion and \f$Z'\f$. - */ - double _vnu; - - /** - * Vector coupling between a fundamental fermion and \f$Z'\f$. - */ - double _ve; - - /** - * Vector coupling between a fundamental fermion and \f$Z'\f$. - */ - double _vu; - - /** - * Vector coupling between a fundamental fermion and \f$Z'\f$. - */ - double _vd; - - /** - * Axial coupling between a fundamental fermions and \f$Z'\f$. - */ - double _anu; - - /** - * Axial coupling between a fundamental fermions and \f$Z'\f$. - */ - double _ae; - - /** - * Axial coupling between a fundamental fermions and \f$Z'\f$. - */ - double _au; - - /** - * Axial coupling between a fundamental fermions and \f$Z'\f$. - */ - double _ad; - - /** - * The \f$f\bar{f}\f$ vertex - */ - AbstractFFVVertexPtr _ffZPrimeVertex; - - /** - * The \f$\gamma Z'Z\f$ vertex - */ - AbstractVVVVertexPtr _gammaZPrimeZVertex; - -}; - -} - -namespace ThePEG { - -ThePEG_DECLARE_POINTERS(RadiativeZPrime::RadiativeZPrimeModel, - RadiativeZPrimeModelPtr); - -} - - -#endif /* RADIATIVEZPRIME_RadiativeZPrimeModel_H */ diff --git a/Contrib/RadiativeZPrime/SimpleZPrimeAnalysis.cc b/Contrib/RadiativeZPrime/SimpleZPrimeAnalysis.cc deleted file mode 100644 --- a/Contrib/RadiativeZPrime/SimpleZPrimeAnalysis.cc +++ /dev/null @@ -1,101 +0,0 @@ -// -*- C++ -*- -// -// This is the implementation of the non-inlined, non-templated member -// functions of the SimpleZPrimeAnalysis class. -// - -#include "SimpleZPrimeAnalysis.h" -#include "ThePEG/Utilities/DescribeClass.h" -#include "ThePEG/PDT/EnumParticles.h" -#include "ThePEG/EventRecord/Event.h" -#include "ThePEG/Repository/EventGenerator.h" -#include "ThePEG/Interface/ClassDocumentation.h" - -using namespace RadiativeZPrime; -using Herwig::Histogram; - -void SimpleZPrimeAnalysis::analyze(tEventPtr event, long ieve, int loop, int state) { - AnalysisHandler::analyze(event, ieve, loop, state); - // Rotate to CMS, extract final state particles and call analyze(particles). - tPVector particles=event->getFinalState(); - PPtr ep,em,gamma; - for(unsigned int ix=0;ixid()==ParticleID::eminus) em = particles[ix]; - else if(particles[ix]->id()==ParticleID::eplus) ep = particles[ix]; - if(particles[ix]->id()==ParticleID::gamma) gamma = particles[ix]; - } - if(!ep||!em||!gamma) return; - Lorentz5Momentum pz=ep->momentum()+em->momentum(); - *_ptZ += pz.perp()/GeV; - *_rapZ += pz.rapidity(); - *_phiZ += pz.phi()+Constants::pi; - *_ptgamma += gamma->momentum().perp()/GeV; - *_rapgamma += gamma->momentum().rapidity(); - *_phigamma += gamma->momentum().phi()+Constants::pi; - *_ptep += ep->momentum().perp()/GeV; - *_rapep += ep->momentum().rapidity(); - *_phiep += ep->momentum().phi()+Constants::pi; - *_ptem += em->momentum().perp()/GeV; - *_rapem += em->momentum().rapidity(); - *_phiem += em->momentum().phi()+Constants::pi; - *_masspair += (pz+gamma->momentum()).m()/GeV; - *_massZ += pz.m()/GeV; - *_massgammaep += (ep->momentum()+gamma->momentum()).m()/GeV; - *_massgammaem += (em->momentum()+gamma->momentum()).m()/GeV; -} - -// The following static variable is needed for the type -// description system in ThePEG. -DescribeNoPIOClass -describeHerwigSimpleZPrimeAnalysis("RadiativeZPrime::SimpleZPrimeAnalysis", "RadiativeZPrime.so"); - -void SimpleZPrimeAnalysis::Init() { - - static ClassDocumentation documentation - ("There is no documentation for the SimpleZPrimeAnalysis class"); - -} - -void SimpleZPrimeAnalysis::dofinish() { - AnalysisHandler::dofinish(); - string fname = generator()->filename() + string("-") + name() + string(".top"); - ofstream outfile(fname.c_str()); - using namespace Herwig::HistogramOptions; - _ptZ ->topdrawOutput(outfile,Frame,"BLACK","Z pt"); - _rapZ ->topdrawOutput(outfile,Frame,"BLACK","Z rapidity"); - _phiZ ->topdrawOutput(outfile,Frame,"BLACK","Z azimuth"); - _ptgamma ->topdrawOutput(outfile,Frame,"BLACK","Photon pt"); - _rapgamma ->topdrawOutput(outfile,Frame,"BLACK","Photon rapidity"); - _phigamma ->topdrawOutput(outfile,Frame,"BLACK","Photon azimuth"); - _ptep ->topdrawOutput(outfile,Frame,"BLACK","e+ pt"); - _rapep ->topdrawOutput(outfile,Frame,"BLACK","e+ rapidity"); - _phiep ->topdrawOutput(outfile,Frame,"BLACK","e+ azimuth"); - _ptem ->topdrawOutput(outfile,Frame,"BLACK","e- pt"); - _rapem ->topdrawOutput(outfile,Frame,"BLACK","e- rapidity"); - _phiem ->topdrawOutput(outfile,Frame,"BLACK","e- azimuth"); - _masspair ->topdrawOutput(outfile,Frame,"BLACK","Mass of Z+gamma"); - _massZ ->topdrawOutput(outfile,Frame,"BLACK","Mass of Z"); - _massgammaep ->topdrawOutput(outfile,Frame,"BLACK","Mass of e+gamma"); - _massgammaem ->topdrawOutput(outfile,Frame,"BLACK","Mass of e-gamma"); -} - -void SimpleZPrimeAnalysis::doinitrun() { - AnalysisHandler::doinitrun(); - _ptZ = new_ptr(Histogram( 0.,1000.,100)); - _rapZ = new_ptr(Histogram(-10., 10.,100)); - _phiZ = new_ptr(Histogram(0.,Constants::twopi,100)); - _ptgamma = new_ptr(Histogram( 0.,1000.,100)); - _rapgamma = new_ptr(Histogram(-10., 10.,100)); - _phigamma = new_ptr(Histogram(0.,Constants::twopi,100)); - _ptep = new_ptr(Histogram( 0.,1000.,100)); - _rapep = new_ptr(Histogram(-10., 10.,100)); - _phiep = new_ptr(Histogram(0.,Constants::twopi,100)); - _ptem = new_ptr(Histogram( 0.,1000.,100)); - _rapem = new_ptr(Histogram(-10., 10.,100)); - _phiem = new_ptr(Histogram(0.,Constants::twopi,100)); - _masspair = new_ptr(Histogram(0.,1000.,100)); - _massZ = new_ptr(Histogram(70.,100.,100)); - _massgammaep = new_ptr(Histogram(0.,1000.,100)); - _massgammaem = new_ptr(Histogram(0.,1000.,100)); -} - diff --git a/Contrib/RadiativeZPrime/SimpleZPrimeAnalysis.h b/Contrib/RadiativeZPrime/SimpleZPrimeAnalysis.h deleted file mode 100644 --- a/Contrib/RadiativeZPrime/SimpleZPrimeAnalysis.h +++ /dev/null @@ -1,186 +0,0 @@ -// -*- C++ -*- -#ifndef RADIATIVEZPRIME_SimpleZPrimeAnalysis_H -#define RADIATIVEZPRIME_SimpleZPrimeAnalysis_H -// -// This is the declaration of the SimpleZPrimeAnalysis class. -// - -#include "ThePEG/Handlers/AnalysisHandler.h" -#include "Herwig/Utilities/Histogram.h" - -namespace RadiativeZPrime { - -using namespace ThePEG; -using Herwig::HistogramPtr; - -/** - * Here is the documentation of the SimpleZPrimeAnalysis class. - * - * @see \ref SimpleZPrimeAnalysisInterfaces "The interfaces" - * defined for SimpleZPrimeAnalysis. - */ -class SimpleZPrimeAnalysis: public AnalysisHandler { - -public: - - /** @name Virtual functions required by the AnalysisHandler class. */ - //@{ - /** - * Analyze a given Event. Note that a fully generated event - * may be presented several times, if it has been manipulated in - * between. The default version of this function will call transform - * to make a lorentz transformation of the whole event, then extract - * all final state particles and call analyze(tPVector) of this - * analysis object and those of all associated analysis objects. The - * default version will not, however, do anything on events which - * have not been fully generated, or have been manipulated in any - * way. - * @param event pointer to the Event to be analyzed. - * @param ieve the event number. - * @param loop the number of times this event has been presented. - * If negative the event is now fully generated. - * @param state a number different from zero if the event has been - * manipulated in some way since it was last presented. - */ - virtual void analyze(tEventPtr event, long ieve, int loop, int state); - //@} - -public: - - /** - * The standard Init function used to initialize the interfaces. - * Called exactly once for each class by the class description system - * before the main function starts or - * when this class is dynamically loaded. - */ - static void Init(); - -protected: - - /** @name Clone Methods. */ - //@{ - /** - * Make a simple clone of this object. - * @return a pointer to the new object. - */ - inline virtual IBPtr clone() const {return new_ptr(*this);} - - /** Make a clone of this object, possibly modifying the cloned object - * to make it sane. - * @return a pointer to the new object. - */ - inline virtual IBPtr fullclone() const {return new_ptr(*this);} - //@} - -protected: - - /** @name Standard Interfaced functions. */ - //@{ - /** - * Initialize this object. Called in the run phase just before - * a run begins. - */ - virtual void doinitrun(); - - /** - * Finalize this object. Called in the run phase just after a - * run has ended. Used eg. to write out statistics. - */ - virtual void dofinish(); - //@} - -private: - - /** - * The assignment operator is private and must never be called. - * In fact, it should not even be implemented. - */ - SimpleZPrimeAnalysis & operator=(const SimpleZPrimeAnalysis &) = delete; - -private: - - /** - * Histogram for the Z \f$p_T\f$ - */ - HistogramPtr _ptZ; - - /** - * Histogram for the Z rapidity - */ - HistogramPtr _rapZ; - - /** - * Histogram for the Z azimuth - */ - HistogramPtr _phiZ; - - /** - * Histogram for the photon \f$p_T\f$ - */ - HistogramPtr _ptgamma; - - /** - * Histogram for the photon rapidity - */ - HistogramPtr _rapgamma; - - /** - * Histogram for the photon azimuth - */ - HistogramPtr _phigamma; - - /** - * Histogram for the \f$e^+\f$ \f$p_T\f$ - */ - HistogramPtr _ptep; - - /** - * Histogram for the \f$e^+\f$ rapidity - */ - HistogramPtr _rapep; - - /** - * Histogram for the \f$e^+\f$ azimuth - */ - HistogramPtr _phiep; - - /** - * Histogram for the \f$e^-\f$ \f$p_T\f$ - */ - HistogramPtr _ptem; - - /** - * Histogram for the \f$e^-\f$ rapidity - */ - HistogramPtr _rapem; - - /** - * Histogram for the \f$e^-\f$ azimuth - */ - HistogramPtr _phiem; - - /** - * Histogram for the mass of the photon and Z - */ - HistogramPtr _masspair; - - /** - * Histgram for the mass of the Z - */ - HistogramPtr _massZ; - - /** - * Histogram for the mass of the photon and \f$e^+\f$ - */ - HistogramPtr _massgammaep; - - /** - * Histogram for the mass of the photon and \f$e^-\f$ - */ - HistogramPtr _massgammaem; - -}; - -} - -#endif /* RADIATIVEZPRIME_SimpleZPrimeAnalysis_H */