herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
MatchboxXCombData.h
1// -*- C++ -*-
2//
3// MatchboxXCombData.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_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
35namespace 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
97
99
100 public:
101
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
176
181
186
191
195 const vector<Lorentz5Momentum>& amplitudeMomenta() const { return theAmplitudeMomenta; }
196
200 vector<Lorentz5Momentum>& amplitudeMomenta() { return theAmplitudeMomenta; }
201
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
235
240
245 const map<vector<int>,CVector>& lastOneLoopAmplitudes() const { return theLastOneLoopAmplitudes; }
246
251
257
262 bool calculateTreeME2() const { return theCalculateTreeME2; }
263
267 double lastTreeME2() const { return theLastTreeME2; }
268
272 void lastTreeME2(double v) {
274 }
275
281
285 double lastLargeNME2() const { return theLastLargeNME2; }
286
290 void lastLargeNME2(double v) {
292 }
293
299
304
308 void lastOneLoopInterference(double v) {
310 }
311
317
321 pair<double,double> lastOneLoopPoles() const { return theLastOneLoopPoles; }
322
326 void lastOneLoopPoles(pair<double,double> v) {
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 =
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);
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 =
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 =
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);
402 }
403
408 bool calculateColourSpinCorrelator(const pair<int,int>& ij) const {
409 map<pair<int,int>,bool>::const_iterator f =
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 =
422 if ( v == theColourSpinCorrelators.end() )
423 return 0.;
424 return v->second;
425 }
426
430 void lastColourSpinCorrelator(const pair<int,int>& ij, Complex v) {
433 }
434
439 bool calculateSpinCorrelator(const pair<int,int>& ij) const {
440 map<pair<int,int>,bool>::const_iterator f =
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
537
541 int nDimAmplitude() const { return theNDimAmplitude; }
542
546 void nDimAmplitude(int d) { theNDimAmplitude = d; }
547
551 int nDimInsertions() const { return theNDimInsertions; }
552
557
561 const vector<double>& amplitudeRandomNumbers() const { return theAmplitudeRandomNumbers; }
562
567
571 const vector<double>& insertionRandomNumbers() const { return theInsertionRandomNumbers; }
572
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
766
772 void persistentInput(PersistentIStream & is, int version);
773
777 static void putCVector(PersistentOStream&, const CVector&);
778
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
810
811 private:
812
816 Ptr<MatchboxMEBase>::tptr theMatchboxME;
817
821 Ptr<SubtractionDipole>::tptr theSubtractionDipole;
822
827 vector<int> theCrossingMap;
828
833 map<size_t,size_t> theAmplitudeToColourMap;
834
839 map<size_t,size_t> theColourToAmplitudeMap;
840
846
851
856
860 vector<Lorentz5Momentum> theAmplitudeMomenta;
861
866
871 map<vector<int>,CVector> theLastAmplitudes;
872
878
883
889
895
900
906
911
917
922
928
932 pair<double,double> theLastOneLoopPoles;
933
938 map<pair<int,int>,bool> theCalculateColourCorrelators;
939
943 map<pair<int,int>,double> theColourCorrelators;
944
949 map<pair<int,int>,bool> theCalculateLargeNColourCorrelators;
950
954 map<pair<int,int>,double> theLargeNColourCorrelators;
955
960 map<pair<int,int>,bool> theCalculateColourSpinCorrelators;
961
966
971 map<pair<int,int>,bool> theCalculateSpinCorrelators;
972
976 map<pair<int,int>,Complex> theSpinCorrelators;
977
981 static unsigned int theNLight;
982
987 static vector<long> theNLightJetVec;
988
993 static vector<long> theNHeavyJetVec;
994
999 static vector<long> theNLightProtonVec;
1000
1005
1010
1015
1020
1025
1030
1034 map<int,double> theDiagramWeights;
1035
1041 set<pair<size_t,size_t> > theSingularLimits;
1042
1046 set<pair<size_t,size_t> >::const_iterator theLastSingularLimit;
1047
1051 Ptr<StandardModel>::tcptr theStandardModel;
1052
1057
1061 vector<int> theOLPId;
1062
1067
1072
1077
1082
1086 vector<double*> theExternalMomenta;
1087
1092
1096 map<vector<int>,vector < complex<double> > > theHelJamp;
1097
1101 map<vector<int>,vector < complex<double> > > theLNHelJamp;
1102
1103 };
1104
1105}
1106
1107#endif /* Herwig_MatchboxXCombData_H */
Matchbox extensions to StandardXComb.
void isInitialized(bool is=true)
True if the process has been initialized.
Ptr< SubtractionDipole >::tptr theSubtractionDipole
The dipole.
bool theCalculateOneLoopAmplitudes
True, if the the one-loop amplitudes need to be calculated.
map< vector< int >, vector< complex< double > > > theLNHelJamp
caching of different colour structures (MadGraph-Interface)
const set< pair< size_t, size_t > >::const_iterator & lastSingularLimit() const
Return the last matched singular limit.
const cPDVector & amplitudePartonData() const
The amplitude parton data.
map< size_t, size_t > & amplitudeToColourMap()
The colour crossing information as filled by the last call to fillCrossingMap()
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.
pair< double, double > theLastOneLoopPoles
The last one-loop/tree-level interference.
static unsigned int theNLight
The number of light flavours to be considered for this process.
vector< Lorentz5Momentum > theAmplitudeMomenta
The ccrossed momenta.
void colourBasisDim(size_t d)
Set the dimensionality of the colour basis for this process.
map< vector< int >, CVector > theLastOneLoopAmplitudes
The one-loop amplitude values which have been contributing to the last call of prepareAmplitudes.
double theLastOneLoopInterference
The last one-loop/tree-level interference.
void flushCaches()
Reset all cache flags.
double theCrossingSign
The crossing sign as filled by the last call to fillCrossingMap()
int theNDimInsertions
The number of degrees of freedom required by the insertion operators.
map< pair< int, int >, Complex > theColourSpinCorrelators
The colour/spin correlated matrix element.
static void putCVector(PersistentOStream &, const CVector &)
Put a CVector to the persistent ostream.
double * theOLPMomenta
Return the olp momentum vector.
double symmetryFactor() const
Return the symmetry factor.
set< pair< size_t, size_t > >::const_iterator & lastSingularLimit()
Access the last matched singular limit.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
void nLight(unsigned int n)
Set the number of light flavours to be considered for this process.
int theExternalId
A generic process id to communicate with external codes.
map< vector< int >, CVector > theLastLargeNAmplitudes
The leading N amplitude values which have been contributing to the last call of prepareAmplitudes.
bool theCalculateTreeAmplitudes
True, if the the tree level amplitudes need to be calculated.
int externalId() const
Return a generic process id to communicate with external codes.
map< size_t, size_t > theAmplitudeToColourMap
The colour crossing information as filled by the last call to fillCrossingMap()
map< size_t, size_t > & colourToAmplitudeMap()
The colour crossing information as filled by the last call to fillCrossingMap()
const vector< double > & amplitudeRandomNumbers() const
Get the additional random numbers required by the amplitude.
size_t theColourBasisDim
The dimensionality of the colour basis for this process.
MatchboxXCombData & operator=(const MatchboxXCombData &)=delete
The assignment operator is private and must never be called.
map< pair< int, int >, bool > theCalculateColourCorrelators
True, if the indexed colour correlated matrix element needs to be calculated.
void lastOneLoopInterference(double v)
The last one-loop/tree-level interference.
map< pair< int, int >, double > theColourCorrelators
The colour correlated matrix element.
bool theCalculateLargeNME2
True, if the tree-level matrix element squared needs to be calculated.
MatchboxXCombData()
Default constructor.
bool calculateSpinCorrelator(const pair< int, int > &ij) const
True, if the indexed spin correlated matrix element needs to be calculated.
const map< size_t, size_t > & amplitudeToColourMap() const
The colour crossing information as filled by the last call to fillCrossingMap()
cPDVector & amplitudePartonData()
The amplitude parton data.
const vector< int > & olpId() const
Return the OLP process ids.
void lastOneLoopPoles(pair< double, double > v)
The last one-loop/tree-level interference.
set< pair< size_t, size_t > > & singularLimits()
Access the singular limits.
int nDimPhasespace() const
Return the number of degrees of freedom required by the phase space generator.
void pushhelLNjamp(const vector< int > &hel, const complex< double > &jamp)
pushback the madgraph colour structures (large N)
vector< int > theOLPId
The OLP process id.
Energy2 lastRenormalizationScale() const
The last renormalization scale.
void lastTreeME2(double v)
The last tree-level matrix element squared.
double lastLargeNME2() const
The last tree-level matrix element squared.
map< vector< int >, CVector > & lastOneLoopAmplitudes()
The one-loop amplitude values which have been contributing to the last call of prepareAmplitudes.
bool calculateColourCorrelator(pair< int, int > ij) const
True, if the indexed colour correlated matrix element needs to be calculated.
double lastColourCorrelator(pair< int, int > ij) const
The colour correlated matrix element.
set< pair< size_t, size_t > > theSingularLimits
If not empty, the entries here serve to limit phasespace generation to the corresponding collinear li...
const map< int, double > & diagramWeights() const
Return the diagram weights indexed by diagram id.
vector< double > theAmplitudeRandomNumbers
Additional random numbers required by the amplitude.
Ptr< StandardModel >::tcptr hwStandardModel() const
Get the Herwig StandardModel object.
void nLightProtonVec(long n)
Set the elements of the vector that contains the PDG ids of the light flavours, which are contained i...
map< pair< int, int >, bool > theCalculateLargeNColourCorrelators
True, if the indexed large-N colour correlated matrix element needs to be calculated.
bool calculateOneLoopInterference() const
True, if the one-loop/tree-level interference.
const map< vector< int >, CVector > & lastAmplitudes() const
The amplitude values which have been contributing to the last call of prepareAmplitudes.
Complex lastSpinCorrelator(const pair< int, int > &ij) const
The spin correlated matrix element.
double lastLargeNColourCorrelator(pair< int, int > ij) const
The large-N colour correlated matrix element.
map< pair< int, int >, bool > theCalculateColourSpinCorrelators
True, if the indexed colour/spin correlated matrix element needs to be calculated.
void hwStandardModel(Ptr< StandardModel >::tcptr sm)
Set the Herwig StandardModel object.
double crossingSign() const
The crossing sign as filled by the last call to fillCrossingMap()
size_t colourBasisDim() const
Get the dimensionality of the colour basis for this process.
void olpId(const vector< int > &id)
Set the OLP process ids.
vector< int > & crossingMap()
The crossing information as filled by the last call to fillCrossingMap()
Ptr< SubtractionDipole >::tptr subtractionDipole() const
Get the dipole; may return null.
bool calculateLargeNColourCorrelator(pair< int, int > ij) const
True, if the indexed large-N colour correlated matrix element needs to be calculated.
void clearhelLNjamp()
clear the madgraph colour structures (large N)
vector< Lorentz5Momentum > & amplitudeMomenta()
The crossed momenta.
const map< vector< int >, CVector > & lastOneLoopAmplitudes() const
The one-loop amplitude values which have been contributing to the last call of prepareAmplitudes.
vector< long > nHeavyJetVec() const
Return the vector that contains the PDG ids of the heavy flavours, which are contained in the jet par...
double theSymmetryFactor
The symmetry factor.
void nDimAmplitude(int d)
Set the number of degrees of freedom required by the amplitude.
double theLastLargeNME2
The last tree-level matrix element squared.
static vector< long > theNHeavyJetVec
Vector with the PDG ids of the heavy quark flavours, which are contained in the jet particle group.
bool calculateTreeAmplitudes() const
True, if the the tree level amplitudes need to be calculated.
bool calculateColourSpinCorrelator(const pair< int, int > &ij) const
True, if the indexed colour/spin correlated matrix element needs to be calculated.
Ptr< MatchboxMEBase >::tptr matchboxME() const
Get the matrix element; may return null.
vector< double > theInsertionRandomNumbers
Additional random numbers required by the insertion operator.
map< pair< int, int >, bool > theCalculateSpinCorrelators
True, if the indexed spin correlated matrix element needs to be calculated.
const set< pair< size_t, size_t > > & singularLimits() const
Return the singular limits.
cPDVector theAmplitudePartonData
The amplitude parton data.
bool calculateTreeME2() const
True, if the tree-level matrix element squared needs to be calculated.
map< pair< int, int >, double > theLargeNColourCorrelators
The large-N colour 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 lastColourCorrelator(pair< int, int > ij, double v)
The colour correlated matrix element.
void lastRenormalizationScale(Energy2 lrs)
The last renormalization scale.
bool theCalculateOneLoopPoles
True, if the one-loop/tree-level interference.
map< vector< int >, CVector > & lastAmplitudes()
The amplitude values which have been contributing to the last call of prepareAmplitudes.
vector< double > & insertionRandomNumbers()
Access the additional random numbers required by the insertion operator.
virtual ~MatchboxXCombData()
Destructor.
vector< int > theCrossingMap
The crossing information as filled by the last call to fillCrossingMap()
const vector< double * > & externalMomenta() const
Return the external momentum vector.
map< vector< int >, vector< complex< double > > > theHelJamp
caching of different colour structures (MadGraph-Interface)
void nLightJetVec(long n)
Set the elements of the vector that contains the PDG ids of the light flavours, which are contained i...
map< pair< int, int >, Complex > theSpinCorrelators
The spin correlated matrix element.
bool theCalculateTreeME2
True, if the tree-level matrix element squared needs to be calculated.
unsigned int nLight() const
Return the number of light flavours to be considered for this process.
bool initialized() const
True if the process has been initialized.
void nHeavyJetVec(long n)
Set the elements of the vector that contains the PDG ids of the heavy flavours, which are contained i...
double lastTreeME2() const
The last tree-level matrix element squared.
void lastLargeNColourCorrelator(pair< int, int > ij, double v)
The large-N colour correlated matrix element.
int theNDimAmplitude
The number of degrees of freedom required by the amplitude.
double theLastTreeME2
The last tree-level matrix element squared.
static void getCVector(PersistentIStream &, CVector &)
Get a CVector from the persistent istream.
bool filledOLPMomenta
True, if olp momenta have been filled.
pair< double, double > lastOneLoopPoles() const
The last one-loop/tree-level interference.
map< int, double > theDiagramWeights
The diagram weights indexed by diagram id.
bool theCalculateOneLoopInterference
True, if the one-loop/tree-level interference.
map< int, double > & diagramWeights()
Access the diagram weights indexed by diagram id.
void haveOneLoopAmplitudes(bool f=true)
True, if the the one-loop amplitudes need to be calculated.
void crossingSign(double c)
The crossing sign as filled by the last call to fillCrossingMap()
const map< vector< int >, CVector > & lastLargeNAmplitudes() const
The leading N amplitude values which have been contributing to the last call of prepareAmplitudes.
double lastOneLoopInterference() const
The last one-loop/tree-level interference.
double * olpMomenta()
Return the olp momentum vector.
void symmetryFactor(double f)
Set the symmetry factor.
int theNDimPhasespace
The number of degrees of freedom required by the phase space generator.
void reshuffle(vector< Lorentz5Momentum > &momenta, const cPDVector &mePartonData, const map< long, Energy > &reshuffleMap) const
Perform a reshuffling to the mass shells contained in the map.
bool theInitialized
True if the process has been initialized.
static void Init()
The standard Init function used to initialize the interfaces.
vector< long > nLightProtonVec() const
Return the vector that contains the PDG ids of the light flavours, which are contained in the proton ...
bool calculateOneLoopPoles() const
True, if the one-loop/tree-level interference.
void pushheljamp(const vector< int > &hel, const complex< double > &jamp)
pushback the madgraph colour structures
vector< long > nLightJetVec() const
Return the vector that contains the PDG ids of the light flavours, which are contained in the jet par...
void lastColourSpinCorrelator(const pair< int, int > &ij, Complex v)
The colour/spin correlated matrix element.
Ptr< MatchboxFactory >::tcptr factory() const
Get the factory.
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
void fillOLPMomenta(const vector< Lorentz5Momentum > &mm, const cPDVector &mePartonData=cPDVector(), const map< long, Energy > &reshuffleMap=map< long, Energy >())
Fill the olp momentum vector.
MatchboxXCombData(tMEPtr newME)
Standard constructor.
int nDimAmplitude() const
Return the number of degrees of freedom required by the amplitude.
vector< double * > theExternalMomenta
The external momenta.
static void getAmplitudeMap(PersistentIStream &, map< vector< int >, CVector > &)
Get an amplitude map from the persistent istream.
set< pair< size_t, size_t > >::const_iterator theLastSingularLimit
The last matched singular limit.
const vector< double > & insertionRandomNumbers() const
Get the additional random numbers required by the insertion operator.
map< vector< int >, CVector > theLastAmplitudes
The amplitude values which have been contributing to the last call of prepareAmplitudes.
int nDimInsertions() const
Return the number of degrees of freedom required by the insertion operators.
void haveTreeAmplitudes(bool f=true)
True, if the the tree level amplitudes need to be calculated.
void lastLargeNME2(double v)
The last tree-level matrix element squared.
map< vector< int >, CVector > & lastLargeNAmplitudes()
The leading N amplitude values which have been contributing to the last call of prepareAmplitudes.
const vector< Lorentz5Momentum > & amplitudeMomenta() const
The crossed momenta.
void clearheljamp()
clear the madgraph colour structures
bool calculateOneLoopAmplitudes() const
True, if the the one-loop amplitudes need to be calculated.
const map< size_t, size_t > & colourToAmplitudeMap() const
The colour crossing information as filled by the last call to fillCrossingMap()
const vector< int > & crossingMap() const
The crossing information as filled by the last call to fillCrossingMap()
void lastSpinCorrelator(const pair< int, int > &ij, Complex v)
The spin correlated matrix element.
void externalId(int id)
Set a generic process id to communicate with external codes.
void olpId(int pType, int id)
Set the OLP process ids.
Energy2 theLastRenormalizationScale
The last renormalization scale.
void fillExternalMomenta(const vector< Lorentz5Momentum > &)
Fill the external momentum vector.
Ptr< StandardModel >::tcptr theStandardModel
The Herwig StandardModel object.
const map< vector< int >, vector< complex< double > > > & heljamp() const
Caching for the external madgraph colour structures.
vector< double > & amplitudeRandomNumbers()
Access the additional random numbers required by the amplitude.
bool filledExternalMomenta
True, if external momenta have been filled.
Ptr< MatchboxMEBase >::tptr theMatchboxME
The matrix element.
bool calculateLargeNME2() const
True, if the tree-level matrix element squared needs to be calculated.
void nDimInsertions(int d)
Set the number of degrees of freedom required by the insertion operators.
static void putAmplitudeMap(PersistentOStream &, const map< vector< int >, CVector > &)
Put an amplitude map to the persistent ostream.
const map< vector< int >, vector< complex< double > > > & helLNjamp() const
Caching for the external madgraph colour structures (large N)
void nDimPhasespace(int d)
Set the number of degrees of freedom required by the phase space generator.
map< size_t, size_t > theColourToAmplitudeMap
The colour crossing information as filled by the last call to fillCrossingMap()
map< vector< int >, CVector >::iterator AmplitudeIterator
Define amplitude iterators.
map< vector< int >, CVector > AmplitudeMap
Define how amplitudes are stored.
map< vector< int >, CVector >::const_iterator AmplitudeConstIterator
Define amplitude const iterators.
boost::numeric::ublas::vector< Complex > CVector
Define complex vector from boost::uBLAS.
-*- C++ -*-
std::complex< double > Complex
vector< cPDPtr > cPDVector
Helper struct to define the reshuffling equation.