herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
SubtractionDipole.h
1 // -*- C++ -*-
2 //
3 // SubtractionDipole.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2019 The Herwig Collaboration
5 //
6 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef HERWIG_SubtractionDipole_H
10 #define HERWIG_SubtractionDipole_H
11 //
12 // This is the declaration of the SubtractionDipole class.
13 //
14 
15 #include "Herwig/MatrixElement/Matchbox/Dipoles/SubtractionDipole.fh"
16 #include "Herwig/MatrixElement/Matchbox/Phasespace/TildeKinematics.fh"
17 #include "Herwig/MatrixElement/Matchbox/Phasespace/InvertedTildeKinematics.fh"
18 
19 #include "ThePEG/MatrixElement/MEBase.h"
20 #include "ThePEG/Handlers/StandardXComb.h"
21 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h"
22 #include "Herwig/MatrixElement/Matchbox/Matching/ShowerApproximation.h"
23 #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.fh"
24 
25 namespace Herwig {
26 
27 using namespace ThePEG;
28 
38  public MEBase, public LastMatchboxXCombInfo {
39 
40 public:
41 
48 
52  virtual ~SubtractionDipole();
54 
55 public:
56 
60  Ptr<MatchboxFactory>::tptr factory() const;
61 
64 
69  struct MergeInfo {
70 
74  int emitter;
75 
79  Ptr<Tree2toNDiagram>::ptr diagram;
80 
84  map<int,int> mergeLegs;
85 
86  };
87 
92  virtual bool canHandleEmitter(const cPDVector& partons, int emitter) const = 0;
93 
98  virtual bool canHandleSplitting(const cPDVector& partons, int emitter, int emission) const = 0;
99 
104  virtual bool canHandleSpectator(const cPDVector& partons, int spectator) const = 0;
105 
110  virtual bool canHandle(const cPDVector& partons,
111  int emitter, int emission, int spectator) const = 0;
112 
117  virtual bool isSymmetric() const { return false; }
118 
123  virtual bool apply() const { return theApply; }
124 
128  void clearBookkeeping();
129 
133  void setupBookkeeping(const map<Ptr<DiagramBase>::ptr,MergeInfo>& mergeInfo,bool slim);
134 
139  void subtractionBookkeeping();
140 
146  void splittingBookkeeping();
147 
152  virtual StdXCombPtr makeXComb(Energy newMaxEnergy, const cPDPair & inc,
153  tEHPtr newEventHandler,tSubHdlPtr newSubProcessHandler,
154  tPExtrPtr newExtractor, tCascHdlPtr newCKKW,
155  const PBPair & newPartonBins, tCutsPtr newCuts,
156  const DiagramVector & newDiagrams, bool mir,
157  const PartonPairVec& allPBins,
158  tStdXCombPtr newHead = tStdXCombPtr(),
159  tMEPtr newME = tMEPtr());
160 
165  virtual StdXCombPtr makeXComb(tStdXCombPtr newHead,
166  const PBPair & newPartonBins,
167  const DiagramVector & newDiagrams,
168  tMEPtr newME = tMEPtr());
169 
174  StdXCombPtr makeBornXComb(tStdXCombPtr realXC);
175 
180  vector<StdXCombPtr> makeRealXCombs(tStdXCombPtr bornXC);
181 
185  bool empty() const { return theSplittingMap.empty()&&theMergingMap.empty(); }
186 
191  int realEmitter() const { return theRealEmitter; }
192 
197  void realEmitter(int id) { theRealEmitter = id; }
198 
203  int realEmission() const { return theRealEmission; }
204 
209  void realEmission(int id) { theRealEmission = id; }
210 
215  int realSpectator() const { return theRealSpectator; }
216 
221  void realSpectator(int id) { theRealSpectator = id; }
222 
227  int bornEmitter() const { return theBornEmitter; }
228 
233  void bornEmitter(int id) { theBornEmitter = id; }
234 
239  int bornSpectator() const { return theBornSpectator; }
240 
245  void bornSpectator(int id) { theBornSpectator = id; }
246 
250  typedef pair<pair<cPDVector,int>,pair<int,int> > RealEmissionKey;
251 
255  static RealEmissionKey realEmissionKey(const cPDVector& proc,
256  int em, int emm, int sp) {
257  return make_pair(make_pair(proc,emm),make_pair(em,sp));
258  }
259 
263  static const cPDVector& process(const RealEmissionKey& key) {
264  return key.first.first;
265  }
266 
270  static int emission(const RealEmissionKey& key) {
271  return key.first.second;
272  }
273 
277  static int emitter(const RealEmissionKey& key) {
278  return key.second.first;
279  }
280 
284  static int spectator(const RealEmissionKey& key) {
285  return key.second.second;
286  }
287 
291  typedef pair<cPDVector,pair<int,int> > UnderlyingBornKey;
292 
296  static UnderlyingBornKey underlyingBornKey(const cPDVector& proc,
297  int em, int sp) {
298  return make_pair(proc,make_pair(em,sp));
299  }
300 
304  static const cPDVector& process(const UnderlyingBornKey& key) {
305  return key.first;
306  }
307 
311  static int emitter(const UnderlyingBornKey& key) {
312  return key.second.first;
313  }
314 
318  static int spectator(const UnderlyingBornKey& key) {
319  return key.second.second;
320  }
321 
326  typedef pair<RealEmissionKey,map<int,int> > RealEmissionInfo;
327 
332  typedef pair<UnderlyingBornKey,map<int,int> > UnderlyingBornInfo;
333 
337  const map<RealEmissionKey,UnderlyingBornInfo>& mergingMap() const { return theMergingMap; }
338 
342  const multimap<UnderlyingBornKey,RealEmissionInfo>& splittingMap() const { return theSplittingMap; }
343 
348  const DiagramVector& underlyingBornDiagrams(const cPDVector& real) const;
349 
353  tcDiagPtr underlyingBornDiagram(tcDiagPtr realDiag) const;
354 
359  const DiagramVector& realEmissionDiagrams(const cPDVector& born) const;
360 
364  tcDiagPtr realEmissionDiagram(tcDiagPtr bornDiag) const;
365 
369  virtual void getDiagrams() const;
370 
378  virtual bool noMirror () const { return true; }
379 
386  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
387 
393  colourGeometries(tcDiagPtr diag) const;
394 
400  virtual const ColourLines &
401  selectColourGeometry(tcDiagPtr diag) const;
402 
407  virtual unsigned int orderInAlphaS() const { return realEmissionME()->orderInAlphaS(); }
408 
413  virtual unsigned int orderInAlphaEW() const { return underlyingBornME()->orderInAlphaEW(); }
414 
416 
419 
424  virtual void setXComb(tStdXCombPtr xc);
425 
433  virtual void setKinematics();
434 
443  virtual bool generateKinematics(const double * r);
444 
449  virtual int nDim() const;
450 
455  virtual bool wantCMS () const { return realEmissionME()->wantCMS(); }
456 
461  virtual void clearKinematics();
462 
467  virtual bool ignoreCuts() const { return theIgnoreCuts; }
468 
472  void doIgnoreCuts(bool is = true) { theIgnoreCuts = is; }
473 
475 
478 
482  Ptr<TildeKinematics>::tcptr tildeKinematics() const { return theTildeKinematics; }
483 
487  void tildeKinematics(Ptr<TildeKinematics>::tptr);
488 
495  virtual bool generateTildeKinematics();
496 
500  Ptr<InvertedTildeKinematics>::tcptr invertedTildeKinematics() const { return theInvertedTildeKinematics; }
501 
505  void invertedTildeKinematics(Ptr<InvertedTildeKinematics>::tptr);
506 
514  virtual int nDimRadiation() const;
515 
524  virtual bool generateRadiationKinematics(const double *);
525 
529  void ptCut(Energy cut);
530 
534  Energy lastDipoleScale() const {
535  return splitting() ? theLastSplittingScale : theLastSubtractionScale;
536  }
537 
541  Energy lastPt() const {
542  return splitting() ? theLastSplittingPt : theLastSubtractionPt;
543  }
544 
548  double lastZ() const {
549  return splitting() ? theLastSplittingZ : theLastSubtractionZ;
550  }
551 
555  bool splitting() const { return theSplitting; }
556 
560  void doSplitting() { theSplitting = true; }
561 
565  void doSubtraction() { theSplitting = false; }
566 
570  const vector<double>& subtractionParameters() const { return theSubtractionParameters; }
571 
575  vector<double>& subtractionParameters() { return theSubtractionParameters; }
576 
580  Energy showerHardScale() const { return theShowerHardScale; }
581 
585  void showerHardScale(Energy s) { theShowerHardScale = s; }
586 
590  Energy showerScale() const { return theShowerScale; }
591 
595  void showerScale(Energy s) { theShowerScale = s; }
596 
600  const vector<double>& showerParameters() const { return theShowerParameters; }
601 
605  vector<double>& showerParameters() { return theShowerParameters; }
606 
610  bool isInShowerPhasespace() const { return theIsInShowerPhasespace; }
611 
615  void isInShowerPhasespace(bool yes) { theIsInShowerPhasespace = yes; }
616 
620  bool isAboveCutoff() const { return theIsAboveCutoff; }
621 
625  void isAboveCutoff(bool yes) { theIsAboveCutoff = yes; }
626 
628 
631 
635  bool realEmissionScales() const { return theRealEmissionScales; }
636 
640  void doRealEmissionScales(bool on = true) { theRealEmissionScales = on; }
641 
646  virtual Energy2 scale() const {
647  return realEmissionScales() ?
648  realEmissionME()->scale() :
649  underlyingBornME()->scale();
650  }
651 
657  virtual double alphaS() const {
658  return realEmissionScales() ?
659  realEmissionME()->alphaS() :
660  underlyingBornME()->alphaS();
661  }
662 
668  virtual double alphaEM() const {
669  return realEmissionScales() ?
670  realEmissionME()->alphaEM() :
671  underlyingBornME()->alphaEM();
672  }
673 
678  virtual bool havePDFWeight1() const { return realEmissionME()->havePDFWeight1(); }
679 
684  virtual bool havePDFWeight2() const { return realEmissionME()->havePDFWeight2(); }
685 
694  virtual int samplingZ() const {return 4;}
696 
699 
703  Ptr<MatchboxMEBase>::tcptr realEmissionME() const {
704  return theRealEmissionME;
705  }
706 
710  Ptr<MatchboxMEBase>::tptr realEmissionME() {
711  return theRealEmissionME;
712  }
713 
717  void realEmissionME(Ptr<MatchboxMEBase>::tptr me) { theRealEmissionME = me; }
718 
722  Ptr<MatchboxMEBase>::tcptr underlyingBornME() const {
723  return theUnderlyingBornME;
724  }
725 
729  Ptr<MatchboxMEBase>::tptr underlyingBornME() {
730  return theUnderlyingBornME;
731  }
732 
736  void underlyingBornME(Ptr<MatchboxMEBase>::tptr me) { theUnderlyingBornME = me; }
737 
741  void partnerDipoles(const vector<Ptr<SubtractionDipole>::tptr>& p) {
742  thePartners = p;
743  }
744 
748  const vector<Ptr<SubtractionDipole>::tptr>& partnerDipoles() const {
749  return thePartners;
750  }
751 
755  virtual double me2Avg(double ccme2) const = 0;
756 
761  virtual CrossSection dSigHatDR(Energy2 factorizationScale) const;
762 
767  virtual CrossSection dSigHatDR() const { return dSigHatDR(ZERO); }
768 
769 
771  CrossSection prefactor(Energy2 factorizationScale)const;
772 
777  CrossSection ps(Energy2 factorizationScale,Ptr<ColourBasis>::tptr largeNBasis) const;
778 
783  CrossSection dip(Energy2 factorizationScale) const;
784 
785 
786 
791  pair<CrossSection,CrossSection> dipandPs(Energy2 factorizationScale,Ptr<ColourBasis>::tptr largeNBasis) const;
792 
794 
797 
801  void showerApproximation(Ptr<ShowerApproximation>::tptr app) {
802  theShowerApproximation = app;
803  }
804 
808  Ptr<ShowerApproximation>::tptr showerApproximation() const { return theShowerApproximation; }
809 
813  void doRealShowerSubtraction() { theRealShowerSubtraction = true; }
814 
818  bool realShowerSubtraction() const { return theRealShowerSubtraction; }
819 
823  void doVirtualShowerSubtraction() { theVirtualShowerSubtraction = true; }
824 
828  bool virtualShowerSubtraction() const { return theVirtualShowerSubtraction; }
829 
833  void doLoopSimSubtraction() { theLoopSimSubtraction = true; }
834 
838  bool loopSimSubtraction() const { return theLoopSimSubtraction; }
839 
841 
844 
850  virtual void flushCaches();
851 
855  void doTestSubtraction() { theSubtractionTest = true; }
856 
860  bool testSubtraction() const { return theSubtractionTest; }
861 
865  bool verbose() const { return realEmissionME()->verbose() || underlyingBornME()->verbose(); }
866 
870  void print(ostream&) const;
871 
875  virtual void printLastEvent(ostream&) const;
876 
881  void logGenerateTildeKinematics() const;
882 
887  void logGenerateRadiationKinematics(const double * r) const;
888 
893  void logME2() const;
894 
899  void logDSigHatDR(double effectiveJac) const;
900 
902 
905 
909  void addReweight(Ptr<MatchboxReweightBase>::ptr rw) { theReweights.push_back(rw); }
910 
914  const vector<Ptr<MatchboxReweightBase>::ptr>& reweights() const { return theReweights; }
915 
919  vector<Ptr<MatchboxReweightBase>::ptr>& reweights() { return theReweights; }
920 
922 
925 
929  Ptr<SubtractionDipole>::ptr cloneMe() const {
930  return dynamic_ptr_cast<Ptr<SubtractionDipole>::ptr>(clone());
931  }
932 
937  void cloneDependencies(const std::string& prefix = "", bool slim=false);
938 
940 
943 
947  virtual void constructVertex(tSubProPtr sub);
948 
952  virtual void constructVertex(tSubProPtr sub, const ColourLines* cl);
953 
961  virtual void generateSubCollision(SubProcess & sub);
962 
968  double alpha() const;
969 
970  /*
971  * True if phase space point is above the alpha cut for this dipole.
972  */
973 
974  bool aboveAlpha() const;
975 
977 
978 public:
979 
986  void persistentOutput(PersistentOStream & os) const;
987 
993  void persistentInput(PersistentIStream & is, int version);
995 
1002  static void Init();
1003 
1004 protected:
1005 
1008 
1014  virtual void doinit();
1015 
1020  virtual void doinitrun();
1022 
1023 private:
1024 
1029 
1033  bool theApply;
1034 
1039 
1044 
1048  Ptr<MatchboxMEBase>::ptr theRealEmissionME;
1049 
1053  Ptr<MatchboxMEBase>::ptr theUnderlyingBornME;
1054 
1058  vector<Ptr<SubtractionDipole>::tptr> thePartners;
1059 
1063  Ptr<TildeKinematics>::ptr theTildeKinematics;
1064 
1068  Ptr<InvertedTildeKinematics>::ptr theInvertedTildeKinematics;
1069 
1074  vector<Ptr<MatchboxReweightBase>::ptr> theReweights;
1075 
1081 
1087 
1093 
1098 
1103  map<RealEmissionKey,UnderlyingBornInfo> theMergingMap;
1104 
1109  multimap<UnderlyingBornKey,RealEmissionInfo> theSplittingMap;
1110 
1114  map<cPDVector,pair<int,int> > theIndexMap;
1115 
1119  map<cPDVector,DiagramVector> theUnderlyingBornDiagrams;
1120 
1124  map<cPDVector,DiagramVector> theRealEmissionDiagrams;
1125 
1129  map<tcDiagPtr,tcDiagPtr> theBornToRealDiagrams;
1130 
1134  map<tcDiagPtr,tcDiagPtr> theRealToBornDiagrams;
1135 
1139  RealEmissionKey lastRealEmissionKey;
1140 
1144  UnderlyingBornKey lastUnderlyingBornKey;
1145 
1149  multimap<UnderlyingBornKey,RealEmissionInfo>::const_iterator lastRealEmissionInfo;
1150 
1156 
1162 
1167 
1172 
1177 
1182 
1187 
1192 
1196  Ptr<ShowerApproximation>::ptr theShowerApproximation;
1197 
1202 
1207 
1212 
1217 
1222 
1227 
1231  vector<double> theShowerParameters;
1232 
1237 
1242 
1243 private:
1244 
1249  SubtractionDipole & operator=(const SubtractionDipole &) = delete;
1250 
1251 };
1252 
1253 }
1254 
1255 #endif /* HERWIG_SubtractionDipole_H */
virtual bool noMirror() const
Return true, if this matrix element does not want to make use of mirroring processes; in this case al...
virtual bool ignoreCuts() const
If this is a dependent matrix element in a ME group, return true, if cuts should be ignored...
int theBornEmitter
The emitter as referred to by the underlying Born matrix element.
pair< cPDVector, pair< int, int > > UnderlyingBornKey
Define the underlying Born key type.
Ptr< MatchboxMEBase >::tcptr realEmissionME() const
Return the real emission matrix element.
Energy theLastSubtractionScale
The last scale as generated from the tilde mapping.
int theBornSpectator
The spectator as referred to by the underlying Born matrix element.
multimap< UnderlyingBornKey, RealEmissionInfo > theSplittingMap
Map underlying Born diagrams and tilde emitter/spectator to real emission diagram containing the spli...
void realEmissionME(Ptr< MatchboxMEBase >::tptr me)
Set the real emission matrix element.
static int emission(const RealEmissionKey &key)
Return the emission id of a real emission key.
void doTestSubtraction()
Indicate that the subtraction is being tested.
int realEmission() const
Return the emission as referred to by the real emission matrix element.
Ptr< SubtractionDipole >::ptr cloneMe() const
Clone this dipole.
map< tcDiagPtr, tcDiagPtr > theRealToBornDiagrams
Map real emission diagrams to underlying Born diagrams.
bool loopSimSubtraction() const
Return true, if the loopsim matched virtual contribution should be subtracted.
Ptr< MatchboxMEBase >::tptr underlyingBornME()
Return the underlying Born matrix element.
multimap< UnderlyingBornKey, RealEmissionInfo >::const_iterator lastRealEmissionInfo
The last real emission info encountered.
bool splitting() const
Return true, if this dipole acts in splitting mode.
bool isAboveCutoff() const
Return true, if this configuration is above the shower infrared cutoff.
int theRealSpectator
The spectator as referred to by the real emission matrix element.
bool empty() const
Return true, if bookkeeping did not find a non-trivial setup.
bool verbose() const
Return true, if verbose.
Ptr< MatchboxMEBase >::tcptr underlyingBornME() const
Return the underlying Born matrix element.
void doVirtualShowerSubtraction()
Indicate that the shower virtual contribution should be subtracted.
bool theIgnoreCuts
True if cuts should be ignored.
Ptr< InvertedTildeKinematics >::ptr theInvertedTildeKinematics
The InvertedTildeKinematics to be used.
void doLoopSimSubtraction()
Indicate that the loopsim matched virtual contribution should be subtracted.
bool theVirtualShowerSubtraction
True, if the shower virtual contribution should be subtracted.
Energy theLastSubtractionPt
The last pt as generated from the tilde mapping.
int bornSpectator() const
Return the spectator as referred to by the underlying Born process.
Energy theShowerHardScale
Return the shower hard scale encountered.
Ptr< ShowerApproximation >::ptr theShowerApproximation
The shower approximation.
void realEmission(int id)
Set the emission as referred to by the real emission matrix element.
void partnerDipoles(const vector< Ptr< SubtractionDipole >::tptr > &p)
Set the dipoles which have been found along with this dipole.
vector< Ptr< SubtractionDipole >::tptr > thePartners
The dipoles which have been found along with this dipole.
int theRealEmission
The emission as referred to by the real emission matrix element.
static int emitter(const UnderlyingBornKey &key)
Return the emitter id of a underlying Born key.
vector< double > & subtractionParameters()
Access the subtraction parameters.
const vector< Ptr< SubtractionDipole >::tptr > & partnerDipoles() const
Return the dipoles which have been found along with this dipole.
pair< RealEmissionKey, map< int, int > > RealEmissionInfo
Define real emission key and index dictionary for partons not involved in the given dipole...
Ptr< ShowerApproximation >::tptr showerApproximation() const
Return the shower approximation.
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Ptr< TildeKinematics >::ptr theTildeKinematics
The TildeKinematics to be used.
UnderlyingBornKey lastUnderlyingBornKey
The last underlying Born key encountered.
bool theRealEmissionScales
True, if scales should be calculated from real emission kinematics.
virtual bool wantCMS() const
Return true, if this matrix element expects the incoming partons in their center-of-mass system...
virtual int samplingZ() const
How to sample the z-distribution.
void showerHardScale(Energy s)
Set the shower hard scale encountered.
Energy theLastSplittingScale
The last scale as generated from the splitting mapping.
void doSubtraction()
Switch off splitting mode for this dipole.
Energy lastPt() const
Return the relevant pt.
bool realEmissionScales() const
Return true, if scales should be calculated from real emission kinematics.
bool theRealShowerSubtraction
True, if the shower real emission contribution should be subtracted.
void doSplitting()
Switch on splitting mode for this dipole.
void doRealShowerSubtraction()
Indicate that the shower real emission contribution should be subtracted.
bool realShowerSubtraction() const
Return true, if the shower real emission contribution should be subtracted.
virtual double alphaS() const
Return the value of associated with the phase space point provided by the last call to setKinematics...
vector< Ptr< MatchboxReweightBase >::ptr > theReweights
A vector of reweight objects the sum of which should be applied to reweight this dipole.
bool virtualShowerSubtraction() const
Return true, if the shower virtual contribution should be subtracted.
void addReweight(Ptr< MatchboxReweightBase >::ptr rw)
Insert a reweight object.
virtual bool apply() const
If this is a dependent matrix element in a ME group, return true, if it applies to the process set in...
bool theLoopSimSubtraction
True, if the loopsim matched virtual contribution should be subtracted.
ThePEG::Ptr< EventHandler >::transient_pointer tEHPtr
double theLastSubtractionZ
The last z as generated from the tilde mapping.
static RealEmissionKey realEmissionKey(const cPDVector &proc, int em, int emm, int sp)
Create a real emission key.
RealEmissionKey lastRealEmissionKey
The last real emission key encountered.
virtual bool isSymmetric() const
Return true, if this dipole is symmetric with respect to emitter and emission.
void realEmitter(int id)
Set the emitter as referred to by the real emission matrix element.
virtual double alphaEM() const
Return the value of associated with the phase space point provided by the last call to setKinematics...
bool theSplitting
Wether or not this dipole acts in splitting mode.
static int spectator(const UnderlyingBornKey &key)
Return the spectator id of a underlying Born key.
ThePEG::Ptr< CascadeHandler >::transient_pointer tCascHdlPtr
Ptr< MatchboxMEBase >::ptr theRealEmissionME
The real emission matrix element to be considered.
Provide easy access to MatchboxXComb XComb extensions.
virtual bool havePDFWeight1() const
Return true, if this matrix element provides the PDF weight for the first incoming parton itself...
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
int realSpectator() const
Return the spectator as referred to by the real emission matrix element.
void underlyingBornME(Ptr< MatchboxMEBase >::tptr me)
Set the underlying Born matrix element.
Ptr< TildeKinematics >::tcptr tildeKinematics() const
Return the TildeKinematics object used.
Energy theLastSplittingPt
The last pt as generated from the splitting mapping.
Ptr< MatchboxMEBase >::ptr theUnderlyingBornME
The underlying Born matrix element.
map< tcDiagPtr, tcDiagPtr > theBornToRealDiagrams
Map underlying Born diagrams to real emission diagrams.
Ptr< Tree2toNDiagram >::ptr diagram
The Born diagram.
void realSpectator(int id)
Set the spectator as referred to by the real emission matrix element.
bool theIsAboveCutoff
True, if this configuration is above the shower infrared cutoff.
void bornEmitter(int id)
Set the emitter as referred to by the underlying Born process.
vector< double > theShowerParameters
The shower splitting variables encountered.
virtual Energy2 scale() const
Return the scale associated with the phase space point provided by the last call to setKinematics()...
const multimap< UnderlyingBornKey, RealEmissionInfo > & splittingMap() const
Return the splitting map.
void showerScale(Energy s)
Set the shower evolution scale encountered.
ThePEG::Ptr< SubProcess >::transient_pointer tSubProPtr
pair< UnderlyingBornKey, map< int, int > > UnderlyingBornInfo
Define underlying Born key and index dictionary for partons not involved in the given dipole...
void bornSpectator(int id)
Set the spectator as referred to by the underlying Born process.
static const cPDVector & process(const UnderlyingBornKey &key)
Return the diagram of a underlying Born key.
Energy lastDipoleScale() const
Return the relevant dipole scale.
vector< cPDPtr > cPDVector
virtual CrossSection dSigHatDR() const
Return the matrix element squared differential in the variables given by the last call to generateKin...
map< RealEmissionKey, UnderlyingBornInfo > theMergingMap
Map real emission diagrams to underlying Born diagrams and tilde emitter/spectator.
double theLastSplittingZ
The last z as generated from the splitting mapping.
Ptr< MatchboxMEBase >::tptr realEmissionME()
Return the real emission matrix element.
int realEmitter() const
Return the emitter as referred to by the real emission matrix element.
void doIgnoreCuts(bool is=true)
Indicate that cuts should be ignored.
void isAboveCutoff(bool yes)
Indicate whether this configuration is above the shower infrared cutoff.
static int spectator(const RealEmissionKey &key)
Return the spectator id of a real emission key.
double lastZ() const
Return the relevant momentum fractions.
map< cPDVector, pair< int, int > > theIndexMap
Map underlying Born diagrams to emitter/spectator pairs.
SubtractionDipole represents a dipole subtraction term in the formalism of Catani and Seymour...
void isInShowerPhasespace(bool yes)
Indicate whether this configuration is in the shower phase space.
int theRealEmitter
The emitter as referred to by the real emission matrix element.
static UnderlyingBornKey underlyingBornKey(const cPDVector &proc, int em, int sp)
Create a underlying Born key.
A helpre struct to communicate diagram merging and remapping information.
bool theIsInShowerPhasespace
True, if this configuration is in the shower phase space.
map< cPDVector, DiagramVector > theUnderlyingBornDiagrams
Map real emission processes to Born diagrams.
static int emitter(const RealEmissionKey &key)
Return the emitter id of a real emission key.
vector< DiagPtr > DiagramVector
const map< RealEmissionKey, UnderlyingBornInfo > & mergingMap() const
Return the merging map.
-*- C++ -*-
Energy showerHardScale() const
Return the shower hard scale encountered.
vector< Ptr< MatchboxReweightBase >::ptr > & reweights()
Access the reweight objects.
vector< double > & showerParameters()
Access the shower splitting variables encountered.
const vector< double > & subtractionParameters() const
Return the subtraction parameters.
const vector< Ptr< MatchboxReweightBase >::ptr > & reweights() const
Return the reweight objects.
Ptr< InvertedTildeKinematics >::tcptr invertedTildeKinematics() const
Return the InvertedTildeKinematics object used.
void doRealEmissionScales(bool on=true)
Switch on or off that scales should be calculated from real emission kinematics.
pair< cPDPtr, cPDPtr > cPDPair
Energy showerScale() const
Return the shower evolution scale encountered.
bool isInShowerPhasespace() const
Return true, if this configuration is in the shower phase space.
int bornEmitter() const
Return the emitter as referred to by the underlying Born process.
const vector< double > & showerParameters() const
Return the shower splitting variables encountered.
virtual bool havePDFWeight2() const
Return true, if this matrix element provides the PDF weight for the second incoming parton itself...
static const cPDVector & process(const RealEmissionKey &key)
Return the diagram of a real emission key.
vector< double > theSubtractionParameters
The subtraction parameters.
map< int, int > mergeLegs
The merging map.
constexpr ZeroUnit ZERO
bool testSubtraction() const
Return true, if the subtraction is being tested.
Energy theShowerScale
The shower evolution scale encountered.
pair< pair< cPDVector, int >, pair< int, int > > RealEmissionKey
Define the real emission key type.
void showerApproximation(Ptr< ShowerApproximation >::tptr app)
Set the shower approximation.
bool theSubtractionTest
True, if the subtraction is being tested.
bool theApply
True, if should apply to process in the xcomb.
ThePEG::Ptr< PartonExtractor >::transient_pointer tPExtrPtr
map< cPDVector, DiagramVector > theRealEmissionDiagrams
Map Born processes to real emission diagrams.