herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
MergingFactory.h
1  //
5  //
8  //
9 #ifndef HERWIG_MergingFactory_H
10 #define HERWIG_MergingFactory_H
11  //
13  //
14 
15 #include "MergingFactory.fh"
16 #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.h"
17 #include "Node.fh"
18 #include "Merger.h"
19 #include "ThePEG/Persistency/PersistentOStream.h"
20 #include "ThePEG/Persistency/PersistentIStream.h"
21 namespace Herwig {
22 
23  using namespace ThePEG;
24 
36  public:
38  void productionMode();
40  virtual void setup();
42  void fillMEsMap();
44  void prepare_BV(int i);
46  void prepare_R(int i);
48  void pushB(MatchboxMEBasePtr, int);
49  //push the virtual contributions to the ME vector.
50  void pushV(MatchboxMEBasePtr, int);
52  void pushR(MatchboxMEBasePtr, int);
54  void orderOLPs();
57  int onlymulti()const {
58  return theonlymulti==-1?-1:(theonlymulti+int(processMap.find(0)->second.size()));
59  }
61  MergerPtr MH() {return theMergingHelper;}
63  int M() const {return theM-1;}
65  int N() const {return theN;}
68  const map<int, vector<MatchboxMEBasePtr> >& pureMEsMap() const {
69  return thePureMEsMap;
70  }
73  map<int, vector<MatchboxMEBasePtr> >& pureMEsMap() {
74  return thePureMEsMap;
75  }
76  //Parse a process description
77  virtual vector<string> parseProcess(string);
78  // fill the virtuals vector (these are IPK-operators)
79  void getVirtuals(MatchboxMEBasePtr nlo, bool clone );
80  // In the merged setup we only produce single phase space points.
81  bool subProcessGroups() const { return false;}
82  // Cut on non-QCD observables.
83  Ptr<Cuts>::ptr nonQCDCuts(){return theNonQCDCuts;}
84 
85  public:
86 
93  void persistentOutput(PersistentOStream & os) const;
94 
100  void persistentInput(PersistentIStream & is, int);
102 
103  static void Init();
104 
105  protected:
106 
114  virtual void doinit();
115 
117 
118  protected:
119 
126  virtual IBPtr clone() const;
127 
133  virtual IBPtr fullclone() const;
135 
136  private:
137 
139  bool unitarized = true;
141  bool ransetup = false;
144  int theonlymulti = -1;
146  int theM = -1;
148  int theN = -1;
150  map< int, vector<string> > processMap;
151  //The matrix elements: int = number of additional jets
152  map< int, vector<MatchboxMEBasePtr> > thePureMEsMap;
154  MergerPtr theMergingHelper;
156  Ptr<Cuts>::ptr theNonQCDCuts;
157 
162  int theChunk=0;
165  int theChunkPart=0;
166 
167 
172  MergingFactory & operator=(const MergingFactory &) = delete;
173 
174 
175  };
176 
177 }
178 
179 #endif /* HERWIG_MergingFactory_H */
map< int, vector< string > > processMap
map for processes.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
Ptr< Cuts >::ptr theNonQCDCuts
Cut on non-QCD modified observables.
MergingFactory automatically sets up a NLO QCD merging.
bool subProcessGroups() const
Return true, if SubProcessGroups should be setup from this MEGroup.
int onlymulti() const
Debugging: push only multiplicities to the ME vector in range of specified mulltiplicity.
MergerPtr theMergingHelper
the merging helper
MatchboxFactory automatically sets up a NLO QCD calculation carried out in dipole subtraction...
map< int, vector< MatchboxMEBasePtr > > & pureMEsMap()
Access the Map of matrix elements to be considered (the Key is the number of additional jets) ...
int M() const
maximal NLO mulitplicity: 0=NLO corrections to the productio process.
-*- C++ -*-
const map< int, vector< MatchboxMEBasePtr > > & pureMEsMap() const
Return the Map of matrix elements to be considered (the Key is the number of additional jets) ...
int N() const
leg size of highest multiplicity.
MergerPtr MH()
pointer to the merging helper.