Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:15

0001 // -*- C++ -*-
0002 //
0003 // ProcessData.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef Herwig_ProcessData_H
0010 #define Herwig_ProcessData_H
0011 //
0012 // This is the declaration of the ProcessData class.
0013 //
0014 
0015 #include "ThePEG/Handlers/HandlerBase.h"
0016 #include "ThePEG/MatrixElement/Tree2toNDiagram.h"
0017 #include "ThePEG/Handlers/StandardXComb.h"
0018 #include "Herwig/PDT/GenericMassGenerator.h"
0019 #include "Herwig/MatrixElement/Matchbox/Utility/ProcessData.fh"
0020 
0021 namespace Herwig {
0022 
0023 using namespace ThePEG;
0024 
0025 /**
0026  * \ingroup Matchbox
0027  * \author Simon Platzer
0028  *
0029  * \brief Provide storage for process data
0030  *
0031  * @see \ref ProcessDataInterfaces "The interfaces"
0032  * defined for ProcessData.
0033  */
0034 class ProcessData: public HandlerBase {
0035 
0036 public:
0037 
0038   /** @name Standard constructors and destructors. */
0039   //@{
0040   /**
0041    * The default constructor.
0042    */
0043   ProcessData();
0044 
0045   /**
0046    * The destructor.
0047    */
0048   virtual ~ProcessData();
0049   //@}
0050 
0051 public:
0052 
0053   /**
0054    * Access diagrams contributing to a given subprocess
0055    */
0056   map<PDVector,vector<Ptr<Tree2toNDiagram>::ptr> >& diagramMap() { return theDiagramMap; }
0057 
0058   /**
0059    * Return diagrams contributing to a given subprocess
0060    */
0061   const map<PDVector,vector<Ptr<Tree2toNDiagram>::ptr> >& diagramMap() const { return theDiagramMap; }
0062 
0063   /**
0064    * Access colour flows contributing to a given diagram
0065    */
0066   map<Ptr<Tree2toNDiagram>::tcptr,vector<ColourLines*> >& colourFlowMap() { return theColourFlowMap; }
0067 
0068   /**
0069    * Return colour flows contributing to a given diagram
0070    */
0071   const map<Ptr<Tree2toNDiagram>::tcptr,vector<ColourLines*> >& colourFlowMap() const { return theColourFlowMap; }
0072 
0073   /**
0074    * Access the mass generators to be used for the given particles
0075    */
0076   map<cPDPtr,tGenericMassGeneratorPtr>& massGenerators() { return theMassGenerators; }
0077 
0078   /**
0079    * Return the mass generators to be used for the given particles
0080    */
0081   const map<cPDPtr,tGenericMassGeneratorPtr>& massGenerators() const { return theMassGenerators; }
0082 
0083   /**
0084    * Return the mass generator (or NULL)
0085    */
0086   tGenericMassGeneratorPtr massGenerator(cPDPtr);
0087 
0088   /**
0089    * Fill the mass generators for the given process
0090    */
0091   void fillMassGenerators(const PDVector&);
0092 
0093 public:
0094 
0095   /** @name Functions used by the persistent I/O system. */
0096   //@{
0097   /**
0098    * Function used to write out object persistently.
0099    * @param os the persistent output stream written to.
0100    */
0101   void persistentOutput(PersistentOStream & os) const;
0102 
0103   /**
0104    * Function used to read in object persistently.
0105    * @param is the persistent input stream read from.
0106    * @param version the version number of the object when written.
0107    */
0108   void persistentInput(PersistentIStream & is, int version);
0109   //@}
0110 
0111   /**
0112    * The standard Init function used to initialize the interfaces.
0113    * Called exactly once for each class by the class description system
0114    * before the main function starts or
0115    * when this class is dynamically loaded.
0116    */
0117   static void Init();
0118 
0119 protected:
0120 
0121   /** @name Clone Methods. */
0122   //@{
0123   /**
0124    * Make a simple clone of this object.
0125    * @return a pointer to the new object.
0126    */
0127   virtual IBPtr clone() const;
0128 
0129   /** Make a clone of this object, possibly modifying the cloned object
0130    * to make it sane.
0131    * @return a pointer to the new object.
0132    */
0133   virtual IBPtr fullclone() const;
0134   //@}
0135 
0136 
0137 // If needed, insert declarations of virtual function defined in the
0138 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0139 
0140 private:
0141 
0142   /**
0143    * The diagrams contributing to a subprocess
0144    */
0145   map<PDVector,vector<Ptr<Tree2toNDiagram>::ptr> > theDiagramMap;
0146 
0147   /**
0148    * Colour flows contributing to a given diagram
0149    */
0150   map<Ptr<Tree2toNDiagram>::tcptr,vector<ColourLines*> > theColourFlowMap;
0151 
0152   /**
0153    * The mass generators to be used for the given particles
0154    */
0155   map<cPDPtr,tGenericMassGeneratorPtr> theMassGenerators;
0156 
0157 private:
0158 
0159   /**
0160    * The assignment operator is private and must never be called.
0161    * In fact, it should not even be implemented.
0162    */
0163   ProcessData & operator=(const ProcessData &) = delete;
0164 
0165 };
0166 
0167 }
0168 
0169 #endif /* Herwig_ProcessData_H */