Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:27

0001 // -*- C++ -*-
0002 #ifndef ThePEG_BlobMEBase_H
0003 #define ThePEG_BlobMEBase_H
0004 //
0005 // This is the declaration of the BlobMEBase class.
0006 //
0007 
0008 #include "ThePEG/MatrixElement/MEBase.h"
0009 
0010 namespace ThePEG {
0011 
0012 /**
0013  * Here is the documentation of the BlobMEBase class.
0014  *
0015  * @see \ref BlobMEBaseInterfaces "The interfaces"
0016  * defined for BlobMEBase.
0017  */
0018 class BlobMEBase: public MEBase {
0019 
0020 public:
0021 
0022   /** @name Standard constructors and destructors. */
0023   //@{
0024   /**
0025    * The default constructor.
0026    */
0027   BlobMEBase();
0028 
0029   /**
0030    * The destructor.
0031    */
0032   virtual ~BlobMEBase();
0033   //@}
0034 
0035 public:
0036 
0037   /**
0038    * Helper struct to represent colour connections.
0039    */
0040   struct ColourConnection {
0041 
0042     /**
0043      * The members of the colour connection
0044      */
0045     vector<int> members;
0046 
0047     /**
0048      * Add a leg's colour to the connection
0049      */
0050     void addColour(int leg) {
0051       members.push_back(leg+1);
0052     }
0053 
0054     /**
0055      * Add a leg's anti-colour to the connection
0056      */
0057     void addAntiColour(int leg) {
0058       members.push_back(-leg-1);
0059     }
0060 
0061     /**
0062      * Write out the connection to the colour lines string
0063      */
0064     string write(size_t& sourceCount, bool sink) const;
0065 
0066   };
0067 
0068   /** @name Virtual functions required by the MEBase class. */
0069   //@{
0070   /**
0071    * Add all possible diagrams with the add() function.
0072    */
0073   virtual void getDiagrams() const;
0074 
0075   /**
0076    * Get diagram selector. With the information previously supplied with the
0077    * setKinematics method, a derived class may optionally
0078    * override this method to weight the given diagrams with their
0079    * (although certainly not physical) relative probabilities.
0080    * @param dv the diagrams to be weighted.
0081    * @return a Selector relating the given diagrams to their weights.
0082    */
0083   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
0084 
0085   /**
0086    * Return a Selector with possible colour geometries for the selected
0087    * diagram weighted by their relative probabilities.
0088    * @param diag the diagram chosen.
0089    * @return the possible colour geometries weighted by their
0090    * relative probabilities.
0091    */
0092   virtual Selector<const ColourLines *>
0093   colourGeometries(tcDiagPtr diag) const;
0094 
0095   /**
0096    * Return the matrix element squared differential in the variables
0097    * given by the last call to generateKinematics().
0098    */
0099   virtual CrossSection dSigHatDR() const;
0100   //@}
0101 
0102   /**
0103    * Return the possible processes this matrix element will be able to handle,
0104    * as a map incoming to outgoing; it is assumed that the number of outgoing
0105    * partons does not vary.
0106    */
0107   virtual multimap<tcPDPair,tcPDVector> processes() const = 0;
0108 
0109   /**
0110    * Return the colour connections for the process.
0111    */
0112   virtual list<ColourConnection> colourConnections() const = 0;
0113 
0114 public:
0115 
0116   /**
0117    * Describe an abstract base class without persistent data.
0118    */
0119   static AbstractNoPIOClassDescription<BlobMEBase> initBlobMEBase;
0120 
0121   /**
0122    * The standard Init function used to initialize the interfaces.
0123    * Called exactly once for each class by the class description system
0124    * before the main function starts or
0125    * when this class is dynamically loaded.
0126    */
0127   static void Init();
0128 
0129 
0130 // If needed, insert declarations of virtual function defined in the
0131 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
0132 
0133 
0134 private:
0135 
0136   /**
0137    * The assignment operator is private and must never be called.
0138    * In fact, it should not even be implemented.
0139    */
0140   BlobMEBase & operator=(const BlobMEBase &) = delete;
0141 
0142   /**
0143    * The colour lines object used as a proxy to connect colours in
0144    * BlobDiagram::construct
0145    */
0146   mutable ColourLines theColourLines;
0147 
0148 };
0149 
0150 }
0151 
0152 namespace ThePEG {
0153 
0154 /** @cond TRAITSPECIALIZATIONS */
0155 
0156 /**
0157  * This template specialization informs ThePEG about the base class of
0158  * BlobMEBase.
0159  */
0160 template <>
0161 struct BaseClassTrait<BlobMEBase,1>: public ClassTraitsType {
0162   /** Typedef of the base class of BlobMEBase. */
0163   typedef MEBase NthBase;
0164 };
0165 
0166 /**
0167  * This template specialization informs ThePEG about the name of the
0168  * BlobMEBase class.
0169  */
0170 template <>
0171 struct ClassTraits<BlobMEBase>: public ClassTraitsBase<BlobMEBase> {
0172   /** Return the class name. */
0173   static string className() { return "ThePEG::BlobMEBase"; }
0174 };
0175 
0176 /** @endcond */
0177 
0178 }
0179 
0180 
0181 #endif /* ThePEG_BlobMEBase_H */