diff --git a/MatrixElement/BlobMEBase.cc b/MatrixElement/BlobMEBase.cc new file mode 100644 --- /dev/null +++ b/MatrixElement/BlobMEBase.cc @@ -0,0 +1,79 @@ +// -*- C++ -*- +// +// This is the implementation of the non-inlined, non-templated member +// functions of the BlobMEBase class. +// + +#include "BlobMEBase.h" +#include "ThePEG/Interface/ClassDocumentation.h" +#include "ThePEG/EventRecord/Particle.h" +#include "ThePEG/Repository/UseRandom.h" +#include "ThePEG/Repository/EventGenerator.h" +#include "ThePEG/Utilities/DescribeClass.h" + +using namespace ThePEG; + +BlobMEBase::BlobMEBase() {} + +BlobMEBase::~BlobMEBase() {} + + +#include "ThePEG/PDT/EnumParticles.h" +#include "ThePEG/MatrixElement/BlobDiagram.h" + +void BlobMEBase::getDiagrams() const { + map<tcPDPair,tcPDVector> proc = processes(); + int id = 1; + for ( auto it = proc.begin(); it != proc.end(); ++it, ++id ) { + BlobDiagram diag(id,it->first.first,it->first.second); + for ( auto pit = it->second.begin(); pit != it->second.end(); ++pit ) + diag.operator,(*pit); + add(new_ptr(diag)); + } +} + +Selector<MEBase::DiagramIndex> +BlobMEBase::diagrams(const DiagramVector & diags) const { + assert(diags.size()==1); + Selector<DiagramIndex> sel; + sel.insert(1.0, 0); + return sel; +} + +Selector<const ColourLines *> +BlobMEBase::colourGeometries(tcDiagPtr) const { + map<size_t,size_t> connections = + colourConnections(); + ostringstream clines; + for ( auto it = connections.begin(); it != connections.end(); ++it ) { + int cid = it->first+1; int acid = -(it->second+1); + if ( it->first < 2 ) cid = -cid; + if ( it->second < 2 ) acid = -acid; + clines << cid << " " << acid; + auto nit = it; ++nit; + if ( nit != connections.end() ) + clines << ","; + } + theColourLines.reset(clines.str()); + Selector<const ColourLines *> sel; + sel.insert(1.0,&theColourLines); + return sel; +} + +CrossSection BlobMEBase::dSigHatDR() const { + if ( !lastXCombPtr()->willPassCuts() ) + return ZERO; + return + (sqr(hbarc)/(2.*lastSHat())) * + jacobian() * me2(); +} + +AbstractNoPIOClassDescription<BlobMEBase> BlobMEBase::initBlobMEBase; + +void BlobMEBase::Init() { + + static ClassDocumentation<BlobMEBase> documentation + ("BlobMEBase is the base class for matrix elements producing blobs."); + +} + diff --git a/MatrixElement/BlobMEBase.h b/MatrixElement/BlobMEBase.h new file mode 100644 --- /dev/null +++ b/MatrixElement/BlobMEBase.h @@ -0,0 +1,153 @@ +// -*- C++ -*- +#ifndef ThePEG_BlobMEBase_H +#define ThePEG_BlobMEBase_H +// +// This is the declaration of the BlobMEBase class. +// + +#include "ThePEG/MatrixElement/MEBase.h" + +namespace ThePEG { + +/** + * Here is the documentation of the BlobMEBase class. + * + * @see \ref BlobMEBaseInterfaces "The interfaces" + * defined for BlobMEBase. + */ +class BlobMEBase: public MEBase { + +public: + + /** @name Standard constructors and destructors. */ + //@{ + /** + * The default constructor. + */ + BlobMEBase(); + + /** + * The destructor. + */ + virtual ~BlobMEBase(); + //@} + +public: + + /** @name Virtual functions required by the MEBase class. */ + //@{ + /** + * 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<DiagramIndex> 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<const ColourLines *> + colourGeometries(tcDiagPtr diag) const; + + /** + * Return the matrix element squared differential in the variables + * given by the last call to generateKinematics(). + */ + virtual CrossSection dSigHatDR() const; + //@} + + /** + * Return the possible processes this matrix element will be able to handle, + * as a map incoming to outgoing; it is assumed that the number of outgoing + * partons does not vary. + */ + virtual map<tcPDPair,tcPDVector> processes() const = 0; + + /** + * Return the colour connections for the process as pairs of id's of + * external legs connecting colour to anticolour; id's of incoming partons + * (0 and 1) have the meaning of colour and anti-colour eversed (crossed to + * the final state). + */ + virtual map<size_t,size_t> colourConnections() const = 0; + +public: + + /** + * Describe an abstract base class without persistent data. + */ + static AbstractNoPIOClassDescription<BlobMEBase> initBlobMEBase; + + /** + * 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(); + + +// If needed, insert declarations of virtual function defined in the +// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). + + +private: + + /** + * The assignment operator is private and must never be called. + * In fact, it should not even be implemented. + */ + BlobMEBase & operator=(const BlobMEBase &); + + /** + * The colour lines object used as a proxy to connect colours in + * BlobDiagram::construct + */ + mutable ColourLines theColourLines; + +}; + +} + +namespace ThePEG { + +/** @cond TRAITSPECIALIZATIONS */ + +/** + * This template specialization informs ThePEG about the base class of + * BlobMEBase. + */ +template <> +struct BaseClassTrait<BlobMEBase,1>: public ClassTraitsType { + /** Typedef of the base class of BlobMEBase. */ + typedef MEBase NthBase; +}; + +/** + * This template specialization informs ThePEG about the name of the + * BlobMEBase class. + */ +template <> +struct ClassTraits<BlobMEBase>: public ClassTraitsBase<BlobMEBase> { + /** Return the class name. */ + static string className() { return "ThePEG::BlobMEBase"; } +}; + +/** @endcond */ + +} + + +#endif /* ThePEG_BlobMEBase_H */ diff --git a/MatrixElement/Makefile.am b/MatrixElement/Makefile.am --- a/MatrixElement/Makefile.am +++ b/MatrixElement/Makefile.am @@ -1,48 +1,48 @@ mySOURCES = Amplitude.cc ColourLines.cc DiagramBase.cc Tree2toNDiagram.cc BlobDiagram.cc \ - MEBase.cc MEGroup.cc ReweightBase.cc ME2to2Base.cc ME2to2QCD.cc + MEBase.cc BlobMEBase.cc MEGroup.cc ReweightBase.cc ME2to2Base.cc ME2to2QCD.cc myQCDSOURCES = DOCFILES = Amplitude.h ColourLines.h DiagramBase.h Tree2toNDiagram.h BlobDiagram.h MEBase.h \ - MEGroup.h ReweightBase.h ME2to2Base.h ME2to2QCD.h + BlobMEBase.h MEGroup.h ReweightBase.h ME2to2Base.h ME2to2QCD.h INCLUDEFILES = $(DOCFILES) ColourLines.xh \ DiagramBase.xh DiagramBase.fh \ Tree2toNDiagram.xh MEBase.fh MEGroup.fh noinst_LTLIBRARIES = libThePEGME.la pkglib_LTLIBRARIES = MEQCD.la MEee2gZ2qq.la MENCDIS.la \ ReweightConstant.la ReweightMinPT.la libThePEGME_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed MEQCD_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MEQCD_la_SOURCES = MEGG2GG.cc MEQG2QG.cc MEQQ2QQ3.cc MEQq2Qq4.cc MEGG2QQ.cc \ MEQQ2GG.cc MEQQ2qq2.cc MEqq2qq1.cc MEGG2GG.h MEQG2QG.h \ MEQQ2QQ3.h MEQq2Qq4.h MEGG2QQ.h MEQQ2GG.h MEQQ2qq2.h \ MEqq2qq1.h # Version info should be updated if any interface or persistent I/O # function is changed MEee2gZ2qq_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MEee2gZ2qq_la_SOURCES = MEee2gZ2qq.cc MEee2gZ2qq.h # Version info should be updated if any interface or persistent I/O # function is changed ReweightConstant_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ReweightConstant_la_SOURCES = ReweightConstant.cc ReweightConstant.h # Version info should be updated if any interface or persistent I/O # function is changed ReweightMinPT_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ReweightMinPT_la_SOURCES = ReweightMinPT.cc ReweightMinPT.h # Version info should be updated if any interface or persistent I/O # function is changed MENCDIS_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MENCDIS_la_SOURCES = MENCDIS.cc MENCDIS.h include $(top_srcdir)/Config/Makefile.aminclude