Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F19244113
VVSLoopVertex.cc
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
9 KB
Referenced Files
None
Subscribers
None
VVSLoopVertex.cc
View Options
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the VVSLoopVertex class.
//
#include
"VVSLoopVertex.h"
#include
"ThePEG/Interface/ClassDocumentation.h"
#include
"ThePEG/Persistency/PersistentOStream.h"
#include
"ThePEG/Persistency/PersistentIStream.h"
#include
"Herwig++/Looptools/clooptools.h"
using
namespace
Herwig
;
using
namespace
ThePEG
;
using
namespace
Looptools
;
void
VVSLoopVertex
::
persistentOutput
(
PersistentOStream
&
os
)
const
{
os
<<
ounit
(
masses
,
GeV
)
<<
type
<<
couplings
<<
theNpart
;
}
void
VVSLoopVertex
::
persistentInput
(
PersistentIStream
&
is
,
int
)
{
is
>>
iunit
(
masses
,
GeV
)
>>
type
>>
couplings
>>
theNpart
;
}
void
VVSLoopVertex
::
doinit
()
throw
(
InitException
)
{
Looptools
::
ffini
();
GeneralVVSVertex
::
doinit
();
}
void
VVSLoopVertex
::
dofinish
()
{
Looptools
::
ffexi
();
GeneralVVSVertex
::
dofinish
();
}
void
VVSLoopVertex
::
doinitrun
()
{
Looptools
::
ffini
();
GeneralVVSVertex
::
doinitrun
();
}
ClassDescription
<
VVSLoopVertex
>
VVSLoopVertex
::
initVVSLoopVertex
;
// Definition of the static class description member.
void
VVSLoopVertex
::
Init
()
{
static
ClassDocumentation
<
VVSLoopVertex
>
documentation
(
"The VVSLoopVertex class calculates the tensor integral"
" coefficients using Looptools."
);
}
void
VVSLoopVertex
::
setCoupling
(
Energy2
,
tcPDPtr
,
tcPDPtr
,
tcPDPtr
)
{
//Kinematic invariants
double
ps2
=
invariant
(
0
,
0
)
*
UnitRemoval
::
InvE2
;
double
pv1s
=
invariant
(
1
,
1
)
*
UnitRemoval
::
InvE2
;
double
pv2s
=
invariant
(
2
,
2
)
*
UnitRemoval
::
InvE2
;
Complex
a
(
0.
),
b
(
0.
),
c
(
0.
),
d
(
0.
),
e
(
0.
),
f
(
0.
);
for
(
unsigned
int
i
=
0
;
i
<
theNpart
;
++
i
)
{
double
lmass
=
masses
[
i
]
*
UnitRemoval
::
InvE
;
double
mls
=
sqr
(
lmass
);
Complex
lc
=
couplings
[
i
].
first
;
if
(
type
[
i
]
==
PDT
::
Spin1Half
)
{
Complex
C0
=
C0i
(
cc0
,
pv1s
,
pv2s
,
ps2
,
mls
,
mls
,
mls
);
long
theC
=
Cget
(
ps2
,
pv2s
,
pv1s
,
mls
,
mls
,
mls
);
Complex
C1
=
Cval
(
cc1
,
theC
);
Complex
C2
=
Cval
(
cc2
,
theC
);
Complex
C00
=
Cval
(
cc00
,
theC
);
Complex
C11
=
Cval
(
cc11
,
theC
);
Complex
C12
=
Cval
(
cc12
,
theC
);
Complex
C22
=
Cval
(
cc22
,
theC
);
Complex
lpr
=
lc
+
couplings
[
i
].
second
;
a
+=
2.
*
lpr
*
lmass
*
(
-
2.
*
B0
(
ps2
,
mls
,
mls
)
+
C0
*
(
pv1s
+
pv2s
-
ps2
)
+
8.
*
C00
);
b
+=
8.
*
lpr
*
lmass
*
(
C0
+
3.
*
C1
+
3.
*
C2
+
2.
*
(
C11
+
2.
*
C12
+
C22
));
c
+=
4.
*
lpr
*
lmass
*
(
C0
+
2.
*
(
2.
*
C1
+
C2
+
2.
*
(
C11
+
C12
)));
d
+=
4.
*
lpr
*
lmass
*
(
C0
+
4.
*
(
C1
+
C11
+
C12
));
e
+=
8.
*
lpr
*
lmass
*
(
C1
+
2.
*
C11
);
f
+=
4.
*
(
lc
-
couplings
[
i
].
second
)
*
lmass
*
C0
;
}
else
if
(
type
[
i
]
==
PDT
::
Spin1
)
{
long
theC
=
Cget
(
ps2
,
pv2s
,
pv1s
,
mls
,
mls
,
mls
);
Complex
C1
=
Cval
(
cc1
,
theC
);
Complex
C2
=
Cval
(
cc2
,
theC
);
Complex
C00
=
Cval
(
cc00
,
theC
);
Complex
C11
=
Cval
(
cc11
,
theC
);
Complex
C12
=
Cval
(
cc12
,
theC
);
Complex
C22
=
Cval
(
cc22
,
theC
);
/**
* vector type can contain different types of particle
* and hence the coupling is different
* Here left is used for the coupling of the ith
* type rather than creating another
* vector to hold them.
*/
double
pv12
=
pv1s
*
pv2s
;
Complex
C0A
(
C0
(
pv1s
,
pv2s
,
ps2
,
mls
,
mls
,
mls
)),
A0A
(
A0
(
mls
)),
B0A
(
B0
(
ps2
,
mls
,
mls
)),
B1A
(
B1
(
ps2
,
mls
,
mls
)),
B11A
(
B11
(
ps2
,
mls
,
mls
)),
B0B
(
B0
(
pv1s
,
mls
,
mls
)),
B00B
(
B00
(
pv1s
,
mls
,
mls
)),
B1B
(
B1
(
pv1s
,
mls
,
mls
)),
B11B
(
B11
(
pv1s
,
mls
,
mls
)),
B0C
(
B0
(
pv2s
,
mls
,
mls
)),
B00C
(
B00
(
pv2s
,
mls
,
mls
)),
B1C
(
B1
(
pv2s
,
mls
,
mls
)),
B11C
(
B11
(
pv2s
,
mls
,
mls
));
double
mls2
(
mls
*
mls
),
mls3
(
mls2
*
mls
);
// coefficient
a
+=
0.5
*
lc
*
(
B0A
*
(
2.
*
mls2
*
(
-
6.
*
mls
+
pv1s
+
pv2s
)
+
mls
*
(
-
2.
*
mls
+
pv1s
+
pv2s
)
*
ps2
)
+
2.
*
(
8.
*
mls3
*
C0A
*
pv1s
-
2.
*
mls2
*
C0A
*
(
pv1s
*
pv1s
)
+
2.
*
mls
*
B00B
*
pv2s
+
8.
*
mls3
*
C0A
*
pv2s
+
mls
*
B0B
*
pv12
+
mls
*
B0C
*
pv12
-
B00B
*
pv12
-
2.
*
mls2
*
C0A
*
(
pv2s
*
pv2s
)
+
B00C
*
pv1s
*
(
2.
*
mls
-
pv2s
)
-
mls
*
A0A
*
(
pv1s
+
pv2s
)
-
8.
*
mls3
*
C0A
*
ps2
+
2.
*
mls2
*
C0A
*
pv1s
*
ps2
+
2.
*
mls2
*
C0A
*
pv2s
*
ps2
-
mls
*
C0A
*
pv12
*
ps2
+
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C00
)
)
/
mls3
;
b
+=
-
0.25
*
lc
*
(
8.
*
mls
*
B0C
*
pv2s
-
4.
*
B11B
*
(
2.
*
mls
-
pv1s
)
*
pv2s
+
2.
*
B1B
*
(
2.
*
mls
-
pv1s
)
*
(
4.
*
mls
-
3.
*
pv2s
)
+
4.
*
B00C
*
(
2.
*
mls
-
pv2s
)
-
2.
*
A0A
*
(
2.
*
mls
+
pv2s
)
+
2.
*
B0B
*
(
4.
*
mls2
-
2.
*
mls
*
pv1s
+
pv12
)
-
2.
*
mls
*
B0A
*
(
pv2s
-
ps2
)
-
4.
*
mls
*
B11A
*
(
2.
*
mls
+
ps2
)
+
B1A
*
(
2.
*
mls
-
pv2s
)
*
(
2.
*
mls
+
ps2
)
-
B1A
*
(
6.
*
mls
-
pv2s
)
*
(
2.
*
mls
+
ps2
)
-
B0A
*
(
8.
*
mls2
+
(
2.
*
mls
-
pv2s
)
*
ps2
)
-
2.
*
C0A
*
(
2.
*
mls
*
(
12.
*
mls2
+
pv2s
*
(
pv1s
+
pv2s
)
-
2.
*
mls
*
(
pv1s
+
3.
*
pv2s
))
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
+
4.
*
mls
*
(
2.
*
mls
*
B0A
+
(
B1A
+
B11A
)
*
(
2.
*
mls
+
ps2
))
-
2.
*
(
2.
*
mls
*
(
36.
*
mls2
+
2.
*
pv12
+
(
pv2s
*
pv2s
)
-
6.
*
mls
*
(
pv1s
+
pv2s
))
+
(
12.
*
mls2
+
3.
*
pv12
-
2.
*
mls
*
(
3.
*
pv1s
+
4.
*
pv2s
))
*
ps2
)
*
C1
-
2.
*
(
2.
*
mls
*
(
36.
*
mls2
+
2.
*
pv12
+
(
pv2s
*
pv2s
)
-
6.
*
mls
*
(
pv1s
+
pv2s
))
+
(
12.
*
mls2
+
3.
*
pv12
-
2.
*
mls
*
(
3.
*
pv1s
+
4.
*
pv2s
))
*
ps2
)
*
C2
-
4.
*
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C11
-
8.
*
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C12
-
4.
*
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C22
)
/
mls3
;
c
+=
-
lc
*
(
-
12.
*
mls2
+
8.
*
mls
*
pv1s
-
(
pv1s
*
pv1s
)
+
48.
*
B00B
*
(
2.
*
mls
-
pv1s
)
+
24.
*
B00C
*
(
2.
*
mls
-
pv2s
)
-
6.
*
A0A
*
(
6.
*
mls
+
pv1s
-
2.
*
ps2
)
-
6.
*
B1B
*
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv1s
+
3.
*
pv2s
-
ps2
)
-
24.
*
mls
*
B11A
*
(
2.
*
mls
+
ps2
)
-
3.
*
B1A
*
(
4.
*
mls
-
pv1s
+
pv2s
-
ps2
)
*
(
2.
*
mls
+
ps2
)
-
3.
*
B1A
*
(
2.
*
mls
+
ps2
)
*
(
4.
*
mls
+
pv1s
-
pv2s
+
ps2
)
+
6.
*
B1C
*
(
2.
*
mls
-
pv2s
)
*
(
-
3.
*
pv1s
+
pv2s
+
ps2
)
+
12.
*
B11C
*
(
2.
*
mls
-
pv2s
)
*
(
-
pv1s
+
pv2s
+
ps2
)
+
6.
*
B11B
*
(
2.
*
mls
-
pv1s
)
*
(
3.
*
pv1s
-
2.
*
pv2s
+
2.
*
ps2
)
+
6.
*
B0C
*
(
2.
*
mls
*
pv1s
+
(
4.
*
mls
+
pv1s
)
*
pv2s
-
4.
*
mls
*
ps2
)
-
6.
*
B0B
*
(
2.
*
mls2
-
5.
*
mls
*
pv1s
-
(
2.
*
mls
+
pv1s
)
*
pv2s
+
4.
*
mls
*
ps2
)
-
3.
*
B0A
*
(
2.
*
mls
*
(
4.
*
mls
+
pv1s
+
2.
*
pv2s
)
-
(
4.
*
mls
+
pv1s
)
*
ps2
)
-
3.
*
B0A
*
(
2.
*
mls
*
(
4.
*
mls
+
2.
*
pv1s
+
pv2s
)
-
(
2.
*
mls
+
pv2s
)
*
ps2
+
(
ps2
*
ps2
))
-
6.
*
C0A
*
(
2.
*
mls
*
(
12.
*
mls2
-
(
pv1s
*
pv1s
)
+
pv12
+
(
pv2s
*
pv2s
)
-
6.
*
mls
*
(
pv1s
+
pv2s
))
+
(
12.
*
mls2
+
pv12
+
2.
*
mls
*
(
pv1s
-
pv2s
))
*
ps2
-
2.
*
mls
*
(
ps2
*
ps2
))
+
24.
*
mls
*
(
2.
*
mls
*
B0A
+
(
B1A
+
B11A
)
*
(
2.
*
mls
+
ps2
))
-
24.
*
(
mls
*
(
24.
*
mls2
-
(
pv1s
*
pv1s
)
+
2.
*
pv12
+
(
pv2s
*
pv2s
)
-
4.
*
mls
*
(
pv1s
+
pv2s
))
+
(
4.
*
mls2
+
pv12
-
mls
*
(
pv1s
+
3.
*
pv2s
))
*
ps2
)
*
C1
-
12.
*
(
24.
*
mls3
-
2.
*
mls
*
(
pv1s
*
pv1s
)
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
4.
*
mls2
-
2.
*
mls
*
pv2s
+
pv12
)
*
ps2
)
*
C2
-
24.
*
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C11
-
24.
*
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C12
+
72.
*
(
2.
*
mls
-
pv1s
)
*
(
-
0.125
*
mls
-
0.125
*
A0A
+
(
0.25
*
mls
*
B1B
)
+
(
0.125
*
pv1s
*
B11B
))
-
12.
*
(
-
2.
*
mls
+
pv1s
)
*
(
0.25
*
mls
-
0.25
*
A0A
-
(
0.5
*
mls
*
B1B
)
-
(
0.75
*
pv1s
*
B11B
))
)
/
24.
/
mls3
;
d
+=
-
lc
*
(
-
2.
*
mls2
*
B0A
-
2.
*
mls
*
C0A
*
(
8.
*
mls2
+
pv12
-
2.
*
mls
*
(
pv1s
+
pv2s
))
-
mls
*
B1A
*
(
2.
*
mls
+
ps2
)
-
mls
*
B11A
*
(
2.
*
mls
+
ps2
)
+
mls
*
(
2.
*
mls
*
B0A
+
(
B1A
+
B11A
)
*
(
2.
*
mls
+
ps2
))
-
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C1
-
2.
*
mls
*
pv12
*
C2
-
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C11
-
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C12
)
/
mls3
;
e
+=
-
0.25
*
lc
*
(
8.
*
mls
*
B0B
*
pv1s
+
4.
*
B00B
*
(
2
*
mls
-
pv1s
)
-
2.
*
A0A
*
(
2.
*
mls
+
pv1s
)
-
4.
*
B11C
*
pv1s
*
(
2.
*
mls
-
pv2s
)
+
2.
*
B1C
*
(
4.
*
mls
-
3.
*
pv1s
)
*
(
2.
*
mls
-
pv2s
)
+
2.
*
B0C
*
(
4.
*
mls2
-
2.
*
mls
*
pv2s
+
pv12
)
-
2.
*
mls
*
B0A
*
(
pv1s
-
ps2
)
+
4.
*
mls
*
C0A
*
pv1s
*
(
4.
*
mls
-
pv2s
-
ps2
)
-
4.
*
mls
*
B11A
*
(
2.
*
mls
+
ps2
)
+
B1A
*
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
+
ps2
)
-
B1A
*
(
6.
*
mls
-
pv1s
)
*
(
2.
*
mls
+
ps2
)
-
B0A
*
(
8.
*
mls2
+
(
2.
*
mls
-
pv1s
)
*
ps2
)
+
4.
*
mls
*
(
2.
*
mls
*
B0A
+
(
B1A
+
B11A
)
*
(
2.
*
mls
+
ps2
))
-
2
*
(
2.
*
mls
*
(
12.
*
mls2
-
pv1s
+
2.
*
pv12
-
2.
*
mls
*
(
pv1s
+
pv2s
))
+
(
4.
*
mls2
-
2.
*
mls
*
pv2s
+
pv12
)
*
ps2
)
*
C1
-
4.
*
(
24.
*
mls3
+
2.
*
mls
*
pv12
-
4.
*
mls2
*
(
pv1s
+
pv2s
)
+
(
2.
*
mls
-
pv1s
)
*
(
2.
*
mls
-
pv2s
)
*
ps2
)
*
C11
)
/
mls3
;
}
else
if
(
type
[
i
]
==
PDT
::
Spin0
)
{
long
theC
=
Cget
(
ps2
,
pv2s
,
pv1s
,
mls
,
mls
,
mls
);
Complex
C1
=
Cval
(
cc1
,
theC
);
Complex
C2
=
Cval
(
cc2
,
theC
);
Complex
C00
=
Cval
(
cc00
,
theC
);
Complex
C11
=
Cval
(
cc11
,
theC
);
Complex
C12
=
Cval
(
cc12
,
theC
);
Complex
C22
=
Cval
(
cc22
,
theC
);
Complex
Cz
=
C0
(
pv1s
,
pv2s
,
ps2
,
mls
,
mls
,
mls
);
/**
* vector type can contain different types of particle
* and hence the coupling is different
* Here left[i] is used for the coupling of the ith
* type rather than creating another
* vector to hold them.
*/
a
+=
lc
*
(
B0
(
ps2
,
mls
,
mls
)
-
4.
*
C00
);
b
+=
-
2.
*
lc
*
(
Cz
+
3.
*
C1
+
3.
*
C2
+
2.
*
(
C11
+
2.
*
C12
+
C22
));
c
+=
-
1.
*
lc
*
(
Cz
+
2.
*
(
2.
*
C1
+
C2
+
2.
*
(
C11
+
C12
)));
d
+=-
4.
*
lc
*
(
C1
+
C11
+
C12
);
e
+=-
2.
*
lc
*
(
C1
+
2.
*
C11
);
}
else
{
throw
Helicity
::
HelicityConsistencyError
()
<<
"SVVLoopVertex::setCoupling - Incorrect particle in SVV loop. "
<<
"Spin: "
<<
type
[
i
]
<<
Exception
::
warning
;
}
}
//Looptools defines integrals differently
double
fact
=
1
/
16.
/
Constants
::
pi
/
Constants
::
pi
;
a00
(
fact
*
a
);
a11
(
fact
*
b
);
a12
(
fact
*
c
);
a21
(
fact
*
d
);
a22
(
fact
*
e
);
aEp
(
fact
*
f
);
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Tue, Sep 30, 4:39 AM (13 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6564730
Default Alt Text
VVSLoopVertex.cc (9 KB)
Attached To
Mode
rHERWIGHG herwighg
Attached
Detach File
Event Timeline
Log In to Comment