herwig is hosted by Hepforge, IPPP Durham
Herwig  7.1.5
MatchboxXCombData.h
1 // -*- C++ -*-
2 //
3 // MatchboxXCombData.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2017 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_MatchboxXCombData_H
10 #define Herwig_MatchboxXCombData_H
11 //
12 // This is the declaration of the MatchboxXCombData class.
13 //
14 
15 // work around a Boost 1.64 bug where ublas headers would fail otherwise
16 #include <boost/version.hpp>
17 #if (BOOST_VERSION / 100 >= 1064)
18 #include <boost/serialization/array_wrapper.hpp>
19 #endif
20 
21 #include <boost/numeric/ublas/matrix.hpp>
22 #include <boost/numeric/ublas/matrix_sparse.hpp>
23 #include <boost/numeric/ublas/symmetric.hpp>
24 #include <boost/numeric/ublas/vector.hpp>
25 
26 #include "ThePEG/MatrixElement/MEBase.h"
27 #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.fh"
28 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.fh"
29 #include "Herwig/MatrixElement/Matchbox/Dipoles/SubtractionDipole.fh"
30 #include "Herwig/Models/StandardModel/StandardModel.h"
31 
32 #include "ThePEG/Persistency/PersistentOStream.fh"
33 #include "ThePEG/Persistency/PersistentIStream.fh"
34 
35 namespace Herwig {
36 
37  using namespace ThePEG;
38 
45  typedef boost::numeric::ublas::vector<Complex> CVector;
46 
53  typedef map<vector<int>,CVector> AmplitudeMap;
54 
61  typedef map<vector<int>,CVector>::iterator AmplitudeIterator;
62 
69  typedef map<vector<int>,CVector>::const_iterator AmplitudeConstIterator;
70 
78 
79  public:
80 
86  explicit MatchboxXCombData(tMEPtr newME);
87 
92 
96  virtual ~MatchboxXCombData();
97 
99 
100  public:
101 
105  void flushCaches();
106 
107  public:
108 
112  Ptr<MatchboxFactory>::tcptr factory() const;
113 
117  Ptr<MatchboxMEBase>::tptr matchboxME() const;
118 
122  Ptr<SubtractionDipole>::tptr subtractionDipole() const;
123 
128  const vector<int>& crossingMap() const { return theCrossingMap; }
129 
134  vector<int>& crossingMap() { return theCrossingMap; }
135 
140  const map<size_t,size_t>& amplitudeToColourMap() const { return theAmplitudeToColourMap; }
141 
146  map<size_t,size_t>& amplitudeToColourMap() { return theAmplitudeToColourMap; }
147 
152  const map<size_t,size_t>& colourToAmplitudeMap() const { return theColourToAmplitudeMap; }
153 
158  map<size_t,size_t>& colourToAmplitudeMap() { return theColourToAmplitudeMap; }
159 
164  double crossingSign() const { return theCrossingSign; }
165 
170  void crossingSign(double c) { theCrossingSign = c; }
171 
175  Energy2 lastRenormalizationScale() const { return theLastRenormalizationScale; }
176 
180  void lastRenormalizationScale(Energy2 lrs) { theLastRenormalizationScale = lrs; }
181 
185  const cPDVector& amplitudePartonData() const { return theAmplitudePartonData; }
186 
190  cPDVector& amplitudePartonData() { return theAmplitudePartonData; }
191 
195  const vector<Lorentz5Momentum>& amplitudeMomenta() const { return theAmplitudeMomenta; }
196 
200  vector<Lorentz5Momentum>& amplitudeMomenta() { return theAmplitudeMomenta; }
201 
205  bool calculateTreeAmplitudes() const { return theCalculateTreeAmplitudes; }
206 
211  const map<vector<int>,CVector>& lastAmplitudes() const { return theLastAmplitudes; }
212 
216  void haveTreeAmplitudes(bool f = true) { theCalculateTreeAmplitudes = !f; }
217 
222  map<vector<int>,CVector>& lastAmplitudes() { return theLastAmplitudes; }
223 
228  const map<vector<int>,CVector>& lastLargeNAmplitudes() const { return theLastLargeNAmplitudes; }
229 
234  map<vector<int>,CVector>& lastLargeNAmplitudes() { return theLastLargeNAmplitudes; }
235 
239  bool calculateOneLoopAmplitudes() const { return theCalculateOneLoopAmplitudes; }
240 
245  const map<vector<int>,CVector>& lastOneLoopAmplitudes() const { return theLastOneLoopAmplitudes; }
246 
250  void haveOneLoopAmplitudes(bool f = true) { theCalculateOneLoopAmplitudes = !f; }
251 
256  map<vector<int>,CVector>& lastOneLoopAmplitudes() { return theLastOneLoopAmplitudes; }
257 
262  bool calculateTreeME2() const { return theCalculateTreeME2; }
263 
267  double lastTreeME2() const { return theLastTreeME2; }
268 
272  void lastTreeME2(double v) {
273  theLastTreeME2 = v; theCalculateTreeME2 = false;
274  }
275 
280  bool calculateLargeNME2() const { return theCalculateLargeNME2; }
281 
285  double lastLargeNME2() const { return theLastLargeNME2; }
286 
290  void lastLargeNME2(double v) {
291  theLastLargeNME2 = v; theCalculateLargeNME2 = false;
292  }
293 
298  bool calculateOneLoopInterference() const { return theCalculateOneLoopInterference; }
299 
303  double lastOneLoopInterference() const { return theLastOneLoopInterference; }
304 
308  void lastOneLoopInterference(double v) {
309  theLastOneLoopInterference = v; theCalculateOneLoopInterference = false;
310  }
311 
316  bool calculateOneLoopPoles() const { return theCalculateOneLoopPoles; }
317 
321  pair<double,double> lastOneLoopPoles() const { return theLastOneLoopPoles; }
322 
326  void lastOneLoopPoles(pair<double,double> v) {
327  theLastOneLoopPoles = v; theCalculateOneLoopPoles = false;
328  }
329 
334  bool calculateColourCorrelator(pair<int,int> ij) const {
335  if ( ij.first > ij.second )
336  swap(ij.first,ij.second);
337  map<pair<int,int>,bool>::const_iterator f =
338  theCalculateColourCorrelators.find(ij);
339  if ( f == theCalculateColourCorrelators.end() )
340  return true;
341  return f->second;
342  }
343 
347  double lastColourCorrelator(pair<int,int> ij) const {
348  if ( ij.first > ij.second )
349  swap(ij.first,ij.second);
350  map<pair<int,int>,double>::const_iterator v =
351  theColourCorrelators.find(ij);
352  if ( v == theColourCorrelators.end() )
353  return 0.;
354  return v->second;
355  }
356 
360  void lastColourCorrelator(pair<int,int> ij, double v) {
361  if ( ij.first > ij.second )
362  swap(ij.first,ij.second);
363  theColourCorrelators[ij] = v;
364  theCalculateColourCorrelators[ij] = false;
365  }
366 
371  bool calculateLargeNColourCorrelator(pair<int,int> ij) const {
372  if ( ij.first > ij.second )
373  swap(ij.first,ij.second);
374  map<pair<int,int>,bool>::const_iterator f =
375  theCalculateLargeNColourCorrelators.find(ij);
376  if ( f == theCalculateLargeNColourCorrelators.end() )
377  return true;
378  return f->second;
379  }
380 
384  double lastLargeNColourCorrelator(pair<int,int> ij) const {
385  if ( ij.first > ij.second )
386  swap(ij.first,ij.second);
387  map<pair<int,int>,double>::const_iterator v =
388  theLargeNColourCorrelators.find(ij);
389  if ( v == theLargeNColourCorrelators.end() )
390  return 0.;
391  return v->second;
392  }
393 
397  void lastLargeNColourCorrelator(pair<int,int> ij, double v) {
398  if ( ij.first > ij.second )
399  swap(ij.first,ij.second);
400  theLargeNColourCorrelators[ij] = v;
401  theCalculateLargeNColourCorrelators[ij] = false;
402  }
403 
408  bool calculateColourSpinCorrelator(const pair<int,int>& ij) const {
409  map<pair<int,int>,bool>::const_iterator f =
410  theCalculateColourSpinCorrelators.find(ij);
411  if ( f == theCalculateColourSpinCorrelators.end() )
412  return true;
413  return f->second;
414  }
415 
419  Complex lastColourSpinCorrelator(const pair<int,int>& ij) const {
420  map<pair<int,int>,Complex>::const_iterator v =
421  theColourSpinCorrelators.find(ij);
422  if ( v == theColourSpinCorrelators.end() )
423  return 0.;
424  return v->second;
425  }
426 
430  void lastColourSpinCorrelator(const pair<int,int>& ij, Complex v) {
431  theColourSpinCorrelators[ij] = v;
432  theCalculateColourSpinCorrelators[ij] = false;
433  }
434 
439  bool calculateSpinCorrelator(const pair<int,int>& ij) const {
440  map<pair<int,int>,bool>::const_iterator f =
441  theCalculateSpinCorrelators.find(ij);
442  if ( f == theCalculateSpinCorrelators.end() )
443  return true;
444  return f->second;
445  }
446 
450  Complex lastSpinCorrelator(const pair<int,int>& ij) const {
451  map<pair<int,int>,Complex>::const_iterator v =
452  theSpinCorrelators.find(ij);
453  if ( v == theSpinCorrelators.end() )
454  return 0.;
455  return v->second;
456  }
457 
461  void lastSpinCorrelator(const pair<int,int>& ij, Complex v) {
462  theSpinCorrelators[ij] = v;
463  theCalculateSpinCorrelators[ij] = false;
464  }
465 
469  unsigned int nLight() const { return theNLight; }
470 
474  void nLight(unsigned int n) { theNLight = n; }
475 
481  vector<long> nLightJetVec() const { return theNLightJetVec; }
482 
488  void nLightJetVec(long n) { theNLightJetVec.push_back(n); }
489 
495  vector<long> nHeavyJetVec() const { return theNHeavyJetVec; }
496 
502  void nHeavyJetVec(long n) { theNHeavyJetVec.push_back(n); }
503 
509  vector<long> nLightProtonVec() const { return theNLightProtonVec; }
510 
516  void nLightProtonVec(long n) { theNLightProtonVec.push_back(n); }
517 
521  size_t colourBasisDim() const { return theColourBasisDim; }
522 
526  void colourBasisDim(size_t d) { theColourBasisDim = d; }
527 
531  int nDimPhasespace() const { return theNDimPhasespace; }
532 
536  void nDimPhasespace(int d) { theNDimPhasespace = d; }
537 
541  int nDimAmplitude() const { return theNDimAmplitude; }
542 
546  void nDimAmplitude(int d) { theNDimAmplitude = d; }
547 
551  int nDimInsertions() const { return theNDimInsertions; }
552 
556  void nDimInsertions(int d) { theNDimInsertions = d; }
557 
561  const vector<double>& amplitudeRandomNumbers() const { return theAmplitudeRandomNumbers; }
562 
566  vector<double>& amplitudeRandomNumbers() { return theAmplitudeRandomNumbers; }
567 
571  const vector<double>& insertionRandomNumbers() const { return theInsertionRandomNumbers; }
572 
576  vector<double>& insertionRandomNumbers() { return theInsertionRandomNumbers; }
577 
581  const map<int,double>& diagramWeights() const { return theDiagramWeights; }
582 
586  map<int,double>& diagramWeights() { return theDiagramWeights; }
587 
591  const set<pair<size_t,size_t> >& singularLimits() const { return theSingularLimits; }
592 
596  set<pair<size_t,size_t> >& singularLimits() { return theSingularLimits; }
597 
601  const set<pair<size_t,size_t> >::const_iterator& lastSingularLimit() const { return theLastSingularLimit; }
602 
606  set<pair<size_t,size_t> >::const_iterator& lastSingularLimit() { return theLastSingularLimit; }
607 
611  void hwStandardModel(Ptr<StandardModel>::tcptr sm) { theStandardModel = sm; }
612 
616  Ptr<StandardModel>::tcptr hwStandardModel() const { return theStandardModel; }
617 
621  double symmetryFactor() const { return theSymmetryFactor; }
622 
626  void symmetryFactor(double f) { theSymmetryFactor = f; }
627 
631  const vector<int>& olpId() const { return theOLPId; }
632 
636  void olpId(int pType, int id) {
637  if ( theOLPId.empty() )
638  theOLPId.resize(4,0);
639  theOLPId[pType] = id;
640  }
641 
645  void olpId(const vector<int>& id) {
646  theOLPId = id;
647  }
648 
652  double* olpMomenta() { return theOLPMomenta; }
653 
657  void fillOLPMomenta(const vector<Lorentz5Momentum>& mm,
658  const cPDVector& mePartonData = cPDVector(),
659  const map<long,Energy>& reshuffleMap = map<long,Energy>());
660 
665 
666  ReshuffleEquation(Energy xq,
667  cPDVector::const_iterator xdBegin,
668  cPDVector::const_iterator xdEnd,
669  vector<Lorentz5Momentum>::const_iterator xmBegin,
670  const map<long,Energy>* xreshuffleMap)
671  : q(xq), dBegin(xdBegin), dEnd(xdEnd), mBegin(xmBegin),
672  reshuffleMap(xreshuffleMap) {}
673 
674  typedef double ArgType;
675  typedef double ValType;
676 
677  static double aUnit() { return 1.; }
678  static double vUnit() { return 1.; }
679 
680  double operator() (double xi) const;
681 
682  Energy q;
683  cPDVector::const_iterator dBegin;
684  cPDVector::const_iterator dEnd;
685  vector<Lorentz5Momentum>::const_iterator mBegin;
686  const map<long,Energy>* reshuffleMap;
687 
688  };
689 
693  void reshuffle(vector<Lorentz5Momentum>& momenta,
694  const cPDVector& mePartonData,
695  const map<long,Energy>& reshuffleMap) const;
696 
700  int externalId() const { return theExternalId; }
701 
705  void externalId(int id) { theExternalId = id; }
706 
710  bool initialized() const { return theInitialized; }
711 
715  void isInitialized(bool is = true) { theInitialized = is; }
716 
720  const vector<double*>& externalMomenta() const { return theExternalMomenta; }
721 
725  void fillExternalMomenta(const vector<Lorentz5Momentum>&);
726 
730  const map<vector<int>,vector < complex<double> > >& heljamp() const { return theHelJamp; }
731 
735  const map<vector<int>,vector < complex<double> > >& helLNjamp() const { return theLNHelJamp; }
736 
740  void pushheljamp(const vector<int>& hel, const complex<double>& jamp) { theHelJamp[hel].push_back(jamp); }
741 
745  void clearheljamp() { theHelJamp.clear(); }
746 
750  void pushhelLNjamp(const vector<int>& hel, const complex<double>& jamp) { theLNHelJamp[hel].push_back(jamp); }
751 
755  void clearhelLNjamp() { theLNHelJamp.clear(); }
756 
757  public:
758 
765  void persistentOutput(PersistentOStream & os) const;
766 
772  void persistentInput(PersistentIStream & is, int version);
773 
777  static void putCVector(PersistentOStream&, const CVector&);
778 
782  static void getCVector(PersistentIStream&, CVector&);
783 
787  static void putAmplitudeMap(PersistentOStream&, const map<vector<int>,CVector>&);
788 
792  static void getAmplitudeMap(PersistentIStream&, map<vector<int>,CVector>&);
794 
801  static void Init();
802 
803  private:
804 
809  MatchboxXCombData & operator=(const MatchboxXCombData &) = delete;
810 
811  private:
812 
816  Ptr<MatchboxFactory>::tcptr theFactory;
817 
821  Ptr<MatchboxMEBase>::tptr theMatchboxME;
822 
826  Ptr<SubtractionDipole>::tptr theSubtractionDipole;
827 
832  vector<int> theCrossingMap;
833 
838  map<size_t,size_t> theAmplitudeToColourMap;
839 
844  map<size_t,size_t> theColourToAmplitudeMap;
845 
851 
856 
861 
865  vector<Lorentz5Momentum> theAmplitudeMomenta;
866 
871 
876  map<vector<int>,CVector> theLastAmplitudes;
877 
882  map<vector<int>,CVector> theLastLargeNAmplitudes;
883 
888 
893  map<vector<int>,CVector> theLastOneLoopAmplitudes;
894 
900 
905 
911 
916 
922 
927 
933 
937  pair<double,double> theLastOneLoopPoles;
938 
943  map<pair<int,int>,bool> theCalculateColourCorrelators;
944 
948  map<pair<int,int>,double> theColourCorrelators;
949 
954  map<pair<int,int>,bool> theCalculateLargeNColourCorrelators;
955 
959  map<pair<int,int>,double> theLargeNColourCorrelators;
960 
965  map<pair<int,int>,bool> theCalculateColourSpinCorrelators;
966 
970  map<pair<int,int>,Complex> theColourSpinCorrelators;
971 
976  map<pair<int,int>,bool> theCalculateSpinCorrelators;
977 
981  map<pair<int,int>,Complex> theSpinCorrelators;
982 
986  static unsigned int theNLight;
987 
992  static vector<long> theNLightJetVec;
993 
998  static vector<long> theNHeavyJetVec;
999 
1004  static vector<long> theNLightProtonVec;
1005 
1010 
1015 
1020 
1025 
1030 
1035 
1039  map<int,double> theDiagramWeights;
1040 
1046  set<pair<size_t,size_t> > theSingularLimits;
1047 
1051  set<pair<size_t,size_t> >::const_iterator theLastSingularLimit;
1052 
1056  Ptr<StandardModel>::tcptr theStandardModel;
1057 
1062 
1066  vector<int> theOLPId;
1067 
1071  double* theOLPMomenta;
1072 
1077 
1082 
1087 
1091  vector<double*> theExternalMomenta;
1092 
1097 
1101  map<vector<int>,vector < complex<double> > > theHelJamp;
1102 
1106  map<vector<int>,vector < complex<double> > > theLNHelJamp;
1107 
1108  };
1109 
1110 }
1111 
1112 #endif /* Herwig_MatchboxXCombData_H */
const vector< Lorentz5Momentum > & amplitudeMomenta() const
The crossed momenta.
void olpId(int pType, int id)
Set the OLP process ids.
void lastLargeNME2(double v)
The last tree-level matrix element squared.
const map< vector< int >, CVector > & lastOneLoopAmplitudes() const
The one-loop amplitude values which have been contributing to the last call of prepareAmplitudes.
double lastLargeNColourCorrelator(pair< int, int > ij) const
The large-N colour correlated matrix element.
void externalId(int id)
Set a generic process id to communicate with external codes.
bool initialized() const
True if the process has been initialized.
size_t theColourBasisDim
The dimensionality of the colour basis for this process.
vector< Lorentz5Momentum > & amplitudeMomenta()
The crossed momenta.
bool theInitialized
True if the process has been initialized.
bool calculateLargeNME2() const
True, if the tree-level matrix element squared needs to be calculated.
map< vector< int >, vector< complex< double > > > theLNHelJamp
caching of different colour structures (MadGraph-Interface)
void hwStandardModel(Ptr< StandardModel >::tcptr sm)
Set the Herwig StandardModel object.
const map< size_t, size_t > & colourToAmplitudeMap() const
The colour crossing information as filled by the last call to fillCrossingMap()
map< vector< int >, CVector > AmplitudeMap
Define how amplitudes are stored.
void haveTreeAmplitudes(bool f=true)
True, if the the tree level amplitudes need to be calculated.
bool theCalculateOneLoopAmplitudes
True, if the the one-loop amplitudes need to be calculated.
int theNDimPhasespace
The number of degrees of freedom required by the phase space generator.
double lastTreeME2() const
The last tree-level matrix element squared.
vector< double * > theExternalMomenta
The external momenta.
vector< double > theInsertionRandomNumbers
Additional random numbers required by the insertion operator.
map< size_t, size_t > & amplitudeToColourMap()
The colour crossing information as filled by the last call to fillCrossingMap()
void lastOneLoopInterference(double v)
The last one-loop/tree-level interference.
double * theOLPMomenta
Return the olp momentum vector.
int nDimInsertions() const
Return the number of degrees of freedom required by the insertion operators.
std::complex< double > Complex
void nDimPhasespace(int d)
Set the number of degrees of freedom required by the phase space generator.
bool theCalculateTreeAmplitudes
True, if the the tree level amplitudes need to be calculated.
void lastSpinCorrelator(const pair< int, int > &ij, Complex v)
The spin correlated matrix element.
cPDVector theAmplitudePartonData
The amplitude parton data.
void pushheljamp(const vector< int > &hel, const complex< double > &jamp)
pushback the madgraph colour structures
void lastRenormalizationScale(Energy2 lrs)
The last renormalization scale.
vector< long > nLightJetVec() const
Return the vector that contains the PDG ids of the light flavours, which are contained in the jet par...
bool calculateColourCorrelator(pair< int, int > ij) const
True, if the indexed colour correlated matrix element needs to be calculated.
bool theCalculateOneLoopPoles
True, if the one-loop/tree-level interference.
void lastOneLoopPoles(pair< double, double > v)
The last one-loop/tree-level interference.
vector< Lorentz5Momentum > theAmplitudeMomenta
The ccrossed momenta.
void lastLargeNColourCorrelator(pair< int, int > ij, double v)
The large-N colour correlated matrix element.
map< int, double > & diagramWeights()
Access the diagram weights indexed by diagram id.
double symmetryFactor() const
Return the symmetry factor.
map< int, double > theDiagramWeights
The diagram weights indexed by diagram id.
static unsigned int theNLight
The number of light flavours to be considered for this process.
double lastColourCorrelator(pair< int, int > ij) const
The colour correlated matrix element.
vector< int > & crossingMap()
The crossing information as filled by the last call to fillCrossingMap()
map< vector< int >, CVector > & lastLargeNAmplitudes()
The leading N amplitude values which have been contributing to the last call of prepareAmplitudes.
Ptr< MatchboxMEBase >::tptr theMatchboxME
The matrix element.
void clearhelLNjamp()
clear the madgraph colour structures (large N)
map< vector< int >, CVector > theLastAmplitudes
The amplitude values which have been contributing to the last call of prepareAmplitudes.
Ptr< MatchboxFactory >::tcptr theFactory
The factory.
const vector< double > & insertionRandomNumbers() const
Get the additional random numbers required by the insertion operator.
bool calculateColourSpinCorrelator(const pair< int, int > &ij) const
True, if the indexed colour/spin correlated matrix element needs to be calculated.
bool calculateOneLoopPoles() const
True, if the one-loop/tree-level interference.
void lastColourCorrelator(pair< int, int > ij, double v)
The colour correlated matrix element.
boost::numeric::ublas::vector< Complex > CVector
Define complex vector from boost::uBLAS.
const vector< int > & olpId() const
Return the OLP process ids.
void symmetryFactor(double f)
Set the symmetry factor.
void haveOneLoopAmplitudes(bool f=true)
True, if the the one-loop amplitudes need to be calculated.
map< pair< int, int >, bool > theCalculateColourSpinCorrelators
True, if the indexed colour/spin correlated matrix element needs to be calculated.
double lastOneLoopInterference() const
The last one-loop/tree-level interference.
map< vector< int >, CVector > & lastOneLoopAmplitudes()
The one-loop amplitude values which have been contributing to the last call of prepareAmplitudes.
const vector< double > & amplitudeRandomNumbers() const
Get the additional random numbers required by the amplitude.
map< pair< int, int >, bool > theCalculateLargeNColourCorrelators
True, if the indexed large-N colour correlated matrix element needs to be calculated.
map< pair< int, int >, double > theColourCorrelators
The colour correlated matrix element.
const map< vector< int >, vector< complex< double > > > & helLNjamp() const
Caching for the external madgraph colour structures (large N)
bool filledExternalMomenta
True, if external momenta have been filled.
map< pair< int, int >, bool > theCalculateSpinCorrelators
True, if the indexed spin correlated matrix element needs to be calculated.
bool calculateSpinCorrelator(const pair< int, int > &ij) const
True, if the indexed spin correlated matrix element needs to be calculated.
vector< int > theOLPId
The OLP process id.
void clearheljamp()
clear the madgraph colour structures
bool calculateOneLoopInterference() const
True, if the one-loop/tree-level interference.
unsigned int nLight() const
Return the number of light flavours to be considered for this process.
Complex lastSpinCorrelator(const pair< int, int > &ij) const
The spin correlated matrix element.
static vector< long > theNLightProtonVec
Vector with the PDG ids of the light quark flavours, which are contained in the proton particle group...
void nLightJetVec(long n)
Set the elements of the vector that contains the PDG ids of the light flavours, which are contained i...
void nLight(unsigned int n)
Set the number of light flavours to be considered for this process.
void isInitialized(bool is=true)
True if the process has been initialized.
Complex lastColourSpinCorrelator(const pair< int, int > &ij) const
The colour/spin correlated matrix element.
static vector< long > theNLightJetVec
Vector with the PDG ids of the light quark flavours, which are contained in the jet particle group...
int nDimAmplitude() const
Return the number of degrees of freedom required by the amplitude.
map< vector< int >, vector< complex< double > > > theHelJamp
caching of different colour structures (MadGraph-Interface)
bool calculateOneLoopAmplitudes() const
True, if the the one-loop amplitudes need to be calculated.
const map< int, double > & diagramWeights() const
Return the diagram weights indexed by diagram id.
const set< pair< size_t, size_t > >::const_iterator & lastSingularLimit() const
Return the last matched singular limit.
Energy2 lastRenormalizationScale() const
The last renormalization scale.
double crossingSign() const
The crossing sign as filled by the last call to fillCrossingMap()
bool theCalculateOneLoopInterference
True, if the one-loop/tree-level interference.
double theSymmetryFactor
The symmetry factor.
Ptr< StandardModel >::tcptr theStandardModel
The Herwig StandardModel object.
map< pair< int, int >, bool > theCalculateColourCorrelators
True, if the indexed colour correlated matrix element needs to be calculated.
set< pair< size_t, size_t > > & singularLimits()
Access the singular limits.
const set< pair< size_t, size_t > > & singularLimits() const
Return the singular limits.
const cPDVector & amplitudePartonData() const
The amplitude parton data.
const map< vector< int >, CVector > & lastAmplitudes() const
The amplitude values which have been contributing to the last call of prepareAmplitudes.
int nDimPhasespace() const
Return the number of degrees of freedom required by the phase space generator.
Helper struct to define the reshuffling equation.
vector< int > theCrossingMap
The crossing information as filled by the last call to fillCrossingMap()
bool calculateTreeAmplitudes() const
True, if the the tree level amplitudes need to be calculated.
double * olpMomenta()
Return the olp momentum vector.
vector< double > & amplitudeRandomNumbers()
Access the additional random numbers required by the amplitude.
Matchbox extensions to StandardXComb.
void colourBasisDim(size_t d)
Set the dimensionality of the colour basis for this process.
vector< cPDPtr > cPDVector
map< vector< int >, CVector >::const_iterator AmplitudeConstIterator
Define amplitude const iterators.
void nHeavyJetVec(long n)
Set the elements of the vector that contains the PDG ids of the heavy flavours, which are contained i...
bool theCalculateLargeNME2
True, if the tree-level matrix element squared needs to be calculated.
vector< long > nLightProtonVec() const
Return the vector that contains the PDG ids of the light flavours, which are contained in the proton ...
void nDimInsertions(int d)
Set the number of degrees of freedom required by the insertion operators.
void crossingSign(double c)
The crossing sign as filled by the last call to fillCrossingMap()
double theCrossingSign
The crossing sign as filled by the last call to fillCrossingMap()
vector< double > & insertionRandomNumbers()
Access the additional random numbers required by the insertion operator.
vector< long > nHeavyJetVec() const
Return the vector that contains the PDG ids of the heavy flavours, which are contained in the jet par...
Energy2 theLastRenormalizationScale
The last renormalization scale.
map< pair< int, int >, Complex > theColourSpinCorrelators
The colour/spin correlated matrix element.
set< pair< size_t, size_t > >::const_iterator & lastSingularLimit()
Access the last matched singular limit.
const vector< double * > & externalMomenta() const
Return the external momentum vector.
Ptr< SubtractionDipole >::tptr theSubtractionDipole
The dipole.
double lastLargeNME2() const
The last tree-level matrix element squared.
set< pair< size_t, size_t > > theSingularLimits
If not empty, the entries here serve to limit phasespace generation to the corresponding collinear li...
int theNDimInsertions
The number of degrees of freedom required by the insertion operators.
int theExternalId
A generic process id to communicate with external codes.
void nDimAmplitude(int d)
Set the number of degrees of freedom required by the amplitude.
map< vector< int >, CVector > theLastOneLoopAmplitudes
The one-loop amplitude values which have been contributing to the last call of prepareAmplitudes.
-*- C++ -*-
const vector< int > & crossingMap() const
The crossing information as filled by the last call to fillCrossingMap()
set< pair< size_t, size_t > >::const_iterator theLastSingularLimit
The last matched singular limit.
map< size_t, size_t > & colourToAmplitudeMap()
The colour crossing information as filled by the last call to fillCrossingMap()
bool filledOLPMomenta
True, if olp momenta have been filled.
double theLastTreeME2
The last tree-level matrix element squared.
size_t colourBasisDim() const
Get the dimensionality of the colour basis for this process.
const map< size_t, size_t > & amplitudeToColourMap() const
The colour crossing information as filled by the last call to fillCrossingMap()
const map< vector< int >, vector< complex< double > > > & heljamp() const
Caching for the external madgraph colour structures.
static vector< long > theNHeavyJetVec
Vector with the PDG ids of the heavy quark flavours, which are contained in the jet particle group...
pair< double, double > theLastOneLoopPoles
The last one-loop/tree-level interference.
const map< vector< int >, CVector > & lastLargeNAmplitudes() const
The leading N amplitude values which have been contributing to the last call of prepareAmplitudes.
map< size_t, size_t > theColourToAmplitudeMap
The colour crossing information as filled by the last call to fillCrossingMap()
cPDVector & amplitudePartonData()
The amplitude parton data.
void lastColourSpinCorrelator(const pair< int, int > &ij, Complex v)
The colour/spin correlated matrix element.
bool calculateTreeME2() const
True, if the tree-level matrix element squared needs to be calculated.
map< pair< int, int >, Complex > theSpinCorrelators
The spin correlated matrix element.
void olpId(const vector< int > &id)
Set the OLP process ids.
map< vector< int >, CVector >::iterator AmplitudeIterator
Define amplitude iterators.
double theLastLargeNME2
The last tree-level matrix element squared.
vector< double > theAmplitudeRandomNumbers
Additional random numbers required by the amplitude.
Ptr< StandardModel >::tcptr hwStandardModel() const
Get the Herwig StandardModel object.
map< vector< int >, CVector > theLastLargeNAmplitudes
The leading N amplitude values which have been contributing to the last call of prepareAmplitudes.
map< vector< int >, CVector > & lastAmplitudes()
The amplitude values which have been contributing to the last call of prepareAmplitudes.
bool theCalculateTreeME2
True, if the tree-level matrix element squared needs to be calculated.
int externalId() const
Return a generic process id to communicate with external codes.
double theLastOneLoopInterference
The last one-loop/tree-level interference.
void lastTreeME2(double v)
The last tree-level matrix element squared.
pair< double, double > lastOneLoopPoles() const
The last one-loop/tree-level interference.
void pushhelLNjamp(const vector< int > &hel, const complex< double > &jamp)
pushback the madgraph colour structures (large N)
void nLightProtonVec(long n)
Set the elements of the vector that contains the PDG ids of the light flavours, which are contained i...
bool calculateLargeNColourCorrelator(pair< int, int > ij) const
True, if the indexed large-N colour correlated matrix element needs to be calculated.
int theNDimAmplitude
The number of degrees of freedom required by the amplitude.
map< size_t, size_t > theAmplitudeToColourMap
The colour crossing information as filled by the last call to fillCrossingMap()
map< pair< int, int >, double > theLargeNColourCorrelators
The large-N colour correlated matrix element.