herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.2.1
MatrixElement
Matchbox
Utility
ColourBasis.h
1
// -*- C++ -*-
2
//
3
// ColourBasis.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_ColourBasis_H
10
#define HERWIG_ColourBasis_H
11
//
12
// This is the declaration of the ColourBasis class.
13
//
14
15
#include "ThePEG/Handlers/HandlerBase.h"
16
17
#include "ThePEG/MatrixElement/Tree2toNDiagram.h"
18
#include "ThePEG/MatrixElement/MEBase.h"
19
20
#include "Herwig/MatrixElement/Matchbox/Utility/MatchboxXComb.h"
21
#include "Herwig/MatrixElement/Matchbox/MatchboxFactory.fh"
22
23
#include <iterator>
24
#include <tuple>
25
26
namespace
Herwig
{
27
28
using
std::iterator_traits;
29
using
std::distance;
30
31
using namespace
ThePEG
;
32
33
using
boost::numeric::ublas::matrix;
34
using
boost::numeric::ublas::symmetric_matrix;
35
using
boost::numeric::ublas::compressed_matrix;
36
using
boost::numeric::ublas::upper;
37
46
class
ColourBasis
:
public
HandlerBase
{
47
48
public
:
49
55
ColourBasis
();
56
60
virtual
~
ColourBasis
();
62
63
public
:
64
68
Ptr<MatchboxFactory>::tptr factory()
const
;
69
73
Ptr<ColourBasis>::ptr
cloneMe
()
const
{
74
return
dynamic_ptr_cast<Ptr<ColourBasis>::ptr>(clone());
75
}
76
80
virtual
void
clear();
81
86
size_t
prepare(
const
cPDVector
&,
bool
);
87
91
size_t
prepare(
const
MEBase::DiagramVector
&,
bool
);
92
96
const
map<cPDVector,map<size_t,size_t> >&
indexMap
()
const
{
return
theIndexMap; }
97
103
virtual
map<size_t,vector<vector<size_t> > >
basisList
(
const
vector<PDT::Colour>&)
const
{
104
return
map<size_t,vector<vector<size_t> > >();
105
}
106
114
const
string
& orderingString(
const
cPDVector
& sub,
115
const
map<size_t,size_t>& colourToAmplitude,
116
size_t
tensorId);
117
125
const
set<vector<size_t> >& ordering(
const
cPDVector
& sub,
126
const
map<size_t,size_t>& colourToAmplitude,
127
size_t
tensorId,
size_t
shift = 0);
128
133
double
me2(
const
cPDVector
&,
const
map<vector<int>,
CVector
>&)
const
;
134
139
double
interference(
const
cPDVector
&,
140
const
map<vector<int>,
CVector
>&,
141
const
map<vector<int>,
CVector
>&)
const
;
142
147
double
colourCorrelatedME2(
const
pair<size_t,size_t>&,
148
const
cPDVector
&,
149
const
map<vector<int>,
CVector
>&)
const
;
150
155
Complex
interference(
const
cPDVector
&,
156
const
CVector
&,
const
CVector
&)
const
;
157
162
Complex
colourCorrelatedInterference(
const
pair<size_t,size_t>&,
163
const
cPDVector
&,
164
const
CVector
&,
const
CVector
&)
const
;
165
170
double
me2(
const
cPDVector
&,
const
matrix<Complex>&)
const
;
171
176
double
colourCorrelatedME2(
const
pair<size_t,size_t>&,
177
const
cPDVector
&,
178
const
matrix<Complex>&)
const
;
179
183
const
symmetric_matrix<double,upper>& scalarProducts(
const
cPDVector
&)
const
;
184
188
const
symmetric_matrix<double,upper>& correlator(
const
cPDVector
&,
189
const
pair<size_t,size_t>&)
const
;
190
195
virtual
bool
haveColourFlows
()
const
{
return
false
; }
196
201
Selector<const ColourLines *>
colourGeometries(tcDiagPtr diag,
202
const
map<vector<int>,
CVector
>& amps);
203
207
size_t
tensorIdFromFlow(tcDiagPtr diag,
const
ColourLines
* cl);
208
212
struct
matchRep
{
213
PDT::Colour
m;
214
matchRep
(
PDT::Colour
n)
215
: m(n) {}
216
bool
operator()(
PDT::Colour
c)
const
{
217
return
c == m;
218
}
219
};
220
224
virtual
bool
largeN
()
const
{
return
theLargeN; }
225
229
void
doLargeN
(
bool
yes =
true
) { theLargeN = yes; }
230
234
vector<PDT::Colour> projectColour(
const
cPDVector
&)
const
;
235
241
virtual
vector<PDT::Colour> normalOrder(
const
vector<PDT::Colour>&)
const
;
242
247
vector<PDT::Colour> normalOrderMap(
const
cPDVector
& sub);
248
252
const
vector<PDT::Colour>& normalOrderedLegs(
const
cPDVector
& sub)
const
;
253
260
const
std::tuple<vector<PDT::Colour>,vector<PDT::Colour>,
261
size_t,size_t,size_t,map<size_t,size_t> >&
262
normalOrderEmissionMap(
const
cPDVector
& subFrom,
263
const
cPDVector
& subTo,
264
size_t
ij,
size_t
i,
size_t
j,
265
const
map<size_t,size_t>& emissionMap);
266
271
const
pair<compressed_matrix<double>,vector<pair<size_t,size_t> > >&
272
charge(
const
cPDVector
& subFrom,
273
const
cPDVector
& subTo,
274
size_t
ij,
size_t
i,
size_t
j,
275
const
map<size_t,size_t>& emissionMap);
276
280
string
file(
const
vector<PDT::Colour>&)
const
;
281
285
void
chargeProduct(
const
compressed_matrix<double>& ti,
286
const
vector<pair<size_t,size_t> >& tiNonZero,
287
const
symmetric_matrix<double,upper>& X,
288
const
compressed_matrix<double>& tj,
289
const
vector<pair<size_t,size_t> >& tjNonZero,
290
symmetric_matrix<double,upper>& result)
const
;
291
295
void
chargeProductAdd(
const
compressed_matrix<double>& ti,
296
const
vector<pair<size_t,size_t> >& tiNonZero,
297
const
matrix<Complex>& X,
298
const
compressed_matrix<double>& tj,
299
const
vector<pair<size_t,size_t> >& tjNonZero,
300
matrix<Complex>& result,
301
double
factor = 1.)
const
;
302
303
public
:
304
308
static
list<pair<int,bool> > colouredPath(pair<int,bool> a, pair<int,bool> b,
309
Ptr<Tree2toNDiagram>::tcptr);
310
314
static
list<list<list<pair<int,bool> > > > colourFlows(Ptr<Tree2toNDiagram>::tcptr);
315
320
static
string
cfstring(
const
list<list<pair<int,bool> > >&);
321
326
virtual
map<size_t,size_t>
indexChange
(
const
vector<PDT::Colour>&,
327
const
size_t
,
328
const
map<size_t,size_t>&)
const
{
329
map<size_t,size_t> aMap;
330
return
aMap;
331
}
332
333
334
protected
:
335
340
virtual
size_t
prepareBasis(
const
vector<PDT::Colour>&) = 0;
341
346
virtual
double
scalarProduct(
size_t
a,
size_t
b,
347
const
vector<PDT::Colour>& abBasis)
const
= 0;
348
356
virtual
double
tMatrixElement(
size_t
i,
size_t
a,
size_t
b,
357
const
vector<PDT::Colour>& aBasis,
358
const
vector<PDT::Colour>& bBasis,
359
size_t
k,
size_t
l,
360
const
map<size_t,size_t>& dict)
const
= 0;
361
366
virtual
bool
colourConnected(
const
cPDVector
&,
367
const
vector<PDT::Colour>&,
368
const
pair<int,bool>&,
369
const
pair<int,bool>&,
370
size_t
)
const
;
371
376
virtual
bool
colourConnected
(
const
vector<PDT::Colour>&,
377
int
,
int
,
size_t
)
const
{
378
return
false
;
379
}
380
384
vector<string> makeFlows(Ptr<Tree2toNDiagram>::tcptr,
size_t
)
const
;
385
389
map<Ptr<Tree2toNDiagram>::tcptr,vector<ColourLines*> >&
390
colourLineMap();
391
395
void
updateColourLines(Ptr<Tree2toNDiagram>::tcptr);
396
397
398
public
:
399
406
void
persistentOutput(
PersistentOStream
& os)
const
;
407
413
void
persistentInput(
PersistentIStream
& is,
int
version);
415
422
static
void
Init();
423
424
425
// If needed, insert declarations of virtual function defined in the
426
// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
427
428
429
protected
:
430
438
virtual
void
doinit();
439
444
virtual
void
doinitrun();
445
450
virtual
void
dofinish();
452
453
private
:
454
455
typedef
map<vector<PDT::Colour>,symmetric_matrix<double,upper> >
456
ScalarProductMap;
457
458
typedef
map<vector<PDT::Colour>,map<pair<size_t,size_t>,symmetric_matrix<double,upper> > >
459
CorrelatorMap;
460
461
typedef
map<std::tuple<vector<PDT::Colour>,vector<PDT::Colour>,
462
size_t,size_t,size_t,map<size_t,size_t> >,
463
pair<compressed_matrix<double>,vector<pair<size_t,size_t> > > > TSMap;
464
468
bool
theLargeN
;
469
473
map<cPDVector,vector<PDT::Colour> >
theNormalOrderedLegs
;
474
479
map<cPDVector,map<size_t,size_t> >
theIndexMap
;
480
484
map<std::tuple<
cPDVector
,cPDVector,
485
size_t,size_t,size_t,map<size_t,size_t> >,
486
std::tuple<vector<PDT::Colour>,vector<PDT::Colour>,
487
size_t,size_t,size_t,map<size_t,size_t> > >
488
theEmissionMaps
;
489
494
ScalarProductMap
theScalarProducts
;
495
501
CorrelatorMap
theCorrelators
;
502
506
TSMap
theCharges
;
507
511
map<Ptr<Tree2toNDiagram>::tcptr,vector<string> >
theFlowMap
;
512
516
map<Ptr<Tree2toNDiagram>::tcptr,vector<ColourLines*> >
theColourLineMap
;
517
521
map<cPDVector,map<size_t,string> >
theOrderingStringIdentifiers
;
522
526
map<cPDVector,map<size_t,set<vector<size_t> > > >
theOrderingIdentifiers
;
527
531
void
writeBasis(
const
string
& prefix =
""
)
const
;
532
536
void
readBasis();
537
541
bool
readBasis(
const
vector<PDT::Colour>&);
542
546
virtual
void
readBasisDetails
(
const
vector<PDT::Colour>&) {}
547
551
void
write(
const
symmetric_matrix<double,upper>&, ostream&)
const
;
552
556
void
read(symmetric_matrix<double,upper>&, istream&);
557
561
void
write(
const
compressed_matrix<double>&, ostream&,
562
const
vector<pair<size_t,size_t> >&)
const
;
563
567
void
read(compressed_matrix<double>&, istream&,
568
vector<pair<size_t,size_t> >&);
569
574
bool
didRead
;
575
580
mutable
bool
didWrite
;
581
585
matrix<double>
tmp
;
586
590
string
theSearchPath
;
591
596
ColourBasis
& operator=(
const
ColourBasis
&) =
delete
;
597
598
};
599
600
}
601
602
#endif
/* HERWIG_ColourBasis_H */
Herwig::ColourBasis::theCorrelators
CorrelatorMap theCorrelators
The correlator matrices T_i T_j -> T_i^ S_{n+1} T_j with T_i = <c_{n+1,a}|T_i|c_{n,b}> indexed by the `n' basis normal ordered legs and indices i,j.
Definition:
ColourBasis.h:501
Herwig::ColourBasis::didWrite
bool didWrite
True, if an attempt to write out basis information has been completed.
Definition:
ColourBasis.h:580
ThePEG::PersistentIStream
Herwig::ColourBasis::theOrderingIdentifiers
map< cPDVector, map< size_t, set< vector< size_t > > > > theOrderingIdentifiers
Store ordering identifiers.
Definition:
ColourBasis.h:526
Herwig::ColourBasis::theIndexMap
map< cPDVector, map< size_t, size_t > > theIndexMap
Index mappings to normal order from given leg assignments, indexed by the original leg assignment...
Definition:
ColourBasis.h:479
ThePEG::Complex
std::complex< double > Complex
Herwig::ColourBasis::cloneMe
Ptr< ColourBasis >::ptr cloneMe() const
Clone this colour basis.
Definition:
ColourBasis.h:73
Herwig::ColourBasis::theFlowMap
map< Ptr< Tree2toNDiagram >::tcptr, vector< string > > theFlowMap
Map diagrams to colour flows indexed by basis tensor.
Definition:
ColourBasis.h:511
ThePEG::PDT::Colour
Colour
ThePEG::PersistentOStream
Herwig::ColourBasis::matchRep
Match colour representation.
Definition:
ColourBasis.h:212
Herwig::ColourBasis::theCharges
TSMap theCharges
Colour charge or quark splitting matrix representations.
Definition:
ColourBasis.h:506
Herwig::ColourBasis::didRead
bool didRead
True, if an attempt to read in basis information has been completed.
Definition:
ColourBasis.h:574
ThePEG
Herwig::ColourBasis::indexMap
const map< cPDVector, map< size_t, size_t > > & indexMap() const
Return the index map.
Definition:
ColourBasis.h:96
Herwig::ColourBasis::theSearchPath
string theSearchPath
The search path.
Definition:
ColourBasis.h:590
Herwig::ColourBasis::indexChange
virtual map< size_t, size_t > indexChange(const vector< PDT::Colour > &, const size_t, const map< size_t, size_t > &) const
Returns a map of how the order of the vectors of a colour basis are changed when the indices are chan...
Definition:
ColourBasis.h:326
Herwig::ColourBasis::theColourLineMap
map< Ptr< Tree2toNDiagram >::tcptr, vector< ColourLines * > > theColourLineMap
Map diagrams to colour line objects.
Definition:
ColourBasis.h:516
Herwig::ColourBasis::theNormalOrderedLegs
map< cPDVector, vector< PDT::Colour > > theNormalOrderedLegs
Map external legs to normal ordered versions.
Definition:
ColourBasis.h:473
Herwig::ColourBasis::readBasisDetails
virtual void readBasisDetails(const vector< PDT::Colour > &)
Gather any implementation dependend details when reading a basis.
Definition:
ColourBasis.h:546
Herwig::ColourBasis::tmp
matrix< double > tmp
Temporary storage.
Definition:
ColourBasis.h:585
Herwig::ColourBasis::theEmissionMaps
map< std::tuple< cPDVector, cPDVector, size_t, size_t, size_t, map< size_t, size_t > >, std::tuple< vector< PDT::Colour >, vector< PDT::Colour >, size_t, size_t, size_t, map< size_t, size_t > > > theEmissionMaps
Translations of emission maps.
Definition:
ColourBasis.h:488
Herwig::ColourBasis::doLargeN
void doLargeN(bool yes=true)
Switch to large n.
Definition:
ColourBasis.h:229
Herwig::ColourBasis::theLargeN
bool theLargeN
True, if this basis is running in large-N mode.
Definition:
ColourBasis.h:468
Herwig::ColourBasis::theOrderingStringIdentifiers
map< cPDVector, map< size_t, string > > theOrderingStringIdentifiers
Store ordering identifiers.
Definition:
ColourBasis.h:521
Herwig::ColourBasis::basisList
virtual map< size_t, vector< vector< size_t > > > basisList(const vector< PDT::Colour > &) const
Return a map of basis tensor indices to vectors identifying a certain ordering corresponding to the g...
Definition:
ColourBasis.h:103
ThePEG::cPDVector
vector< cPDPtr > cPDVector
ThePEG::HandlerBase
Herwig::ColourBasis::haveColourFlows
virtual bool haveColourFlows() const
Return true, if the colour basis is capable of assigning colour flows.
Definition:
ColourBasis.h:195
Herwig::ColourBasis::colourConnected
virtual bool colourConnected(const vector< PDT::Colour > &, int, int, size_t) const
Return true, if a large-N colour connection exists for the given external legs and basis tensor...
Definition:
ColourBasis.h:376
ThePEG::Selector
ThePEG::MEBase::DiagramVector
vector< DiagPtr > DiagramVector
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
Herwig::ColourBasis
ColourBasis is an interface to a colour basis implementation.
Definition:
ColourBasis.h:46
ThePEG::ColourLines
Herwig::CVector
boost::numeric::ublas::vector< Complex > CVector
Define complex vector from boost::uBLAS.
Definition:
DensityOperator.h:27
Herwig::ColourBasis::largeN
virtual bool largeN() const
Return true, if this basis is running in large-N mode.
Definition:
ColourBasis.h:224
Herwig::ColourBasis::theScalarProducts
ScalarProductMap theScalarProducts
The scalar product matrix S_n = <c_{n,a}|c_{n,b}> , indexed by normal ordered leg assignments...
Definition:
ColourBasis.h:494
Generated on Sat Apr 11 2020 14:50:29 for Herwig by
1.8.13