File indexing completed on 2026-08-06 09:24:01
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef HERWIG_VVVDecayer_H
0010 #define HERWIG_VVVDecayer_H
0011
0012
0013
0014
0015 #include "GeneralTwoBodyDecayer.h"
0016 #include "ThePEG/Repository/EventGenerator.h"
0017 #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
0018 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
0019
0020 namespace Herwig {
0021 using namespace ThePEG;
0022 using Helicity::VVVVertexPtr;
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 class VVVDecayer: public GeneralTwoBodyDecayer {
0034
0035 public:
0036
0037
0038
0039
0040 VVVDecayer() {}
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053 double me2(const int ichan,const Particle & part,
0054 const tPDVector & outgoing,
0055 const vector<Lorentz5Momentum> & momenta,
0056 MEOption meopt) const;
0057
0058
0059
0060
0061 virtual void constructSpinInfo(const Particle & part,
0062 ParticleVector outgoing) const;
0063
0064
0065
0066
0067
0068
0069
0070 virtual Energy partialWidth(PMPair inpart, PMPair outa,
0071 PMPair outb) const;
0072
0073
0074
0075
0076 virtual void setDecayInfo(PDPtr incoming, PDPair outgoing,
0077 vector<VertexBasePtr>,
0078 map<ShowerInteraction,VertexBasePtr> &,
0079 const vector<map<ShowerInteraction,VertexBasePtr> > &,
0080 map<ShowerInteraction,VertexBasePtr>);
0081
0082
0083
0084
0085 virtual POWHEGType hasPOWHEGCorrection() {
0086 POWHEGType output = FSR;
0087 for(auto vertex : vertex_) {
0088 if(vertex->orderInAllCouplings()!=1) {
0089 output = No;
0090 break;
0091 }
0092 }
0093 return output;
0094 }
0095
0096
0097
0098
0099 virtual double threeBodyME(const int , const Particle & inpart,
0100 const ParticleVector & decay,
0101 ShowerInteraction inter, MEOption meopt);
0102
0103
0104 public:
0105
0106
0107
0108
0109
0110
0111
0112 void persistentOutput(PersistentOStream & os) const;
0113
0114
0115
0116
0117
0118
0119 void persistentInput(PersistentIStream & is, int version);
0120
0121
0122
0123
0124
0125
0126
0127
0128 static void Init();
0129
0130 protected:
0131
0132
0133
0134
0135
0136
0137
0138 virtual IBPtr clone() const;
0139
0140
0141
0142
0143
0144 virtual IBPtr fullclone() const;
0145
0146
0147 protected:
0148
0149
0150
0151
0152 void identifyVertices(const Particle & inpart, const ParticleVector & decay,
0153 AbstractVVVVertexPtr & outgoingVertex1,
0154 AbstractVVVVertexPtr & outgoingVertex2,
0155 ShowerInteraction inter);
0156
0157 private:
0158
0159
0160
0161
0162
0163 VVVDecayer & operator=(const VVVDecayer &) = delete;
0164
0165 private:
0166
0167
0168
0169
0170 vector<AbstractVVVVertexPtr> vertex_;
0171
0172
0173
0174
0175 vector<VVVVertexPtr> perturbativeVertex_;
0176
0177
0178
0179
0180 map<ShowerInteraction,AbstractVVVVertexPtr> incomingVertex_;
0181
0182
0183
0184
0185 map<ShowerInteraction,AbstractVVVVertexPtr> outgoingVertex1_;
0186
0187
0188
0189
0190 map<ShowerInteraction,AbstractVVVVertexPtr> outgoingVertex2_;
0191
0192
0193
0194
0195 map<ShowerInteraction,AbstractVVVVVertexPtr> fourPointVertex_;
0196
0197
0198
0199
0200 mutable RhoDMatrix rho_;
0201
0202
0203
0204
0205 mutable vector<Helicity::VectorWaveFunction> vectors_[3];
0206
0207 private:
0208
0209
0210
0211
0212
0213
0214
0215
0216 mutable RhoDMatrix rho3_;
0217
0218
0219
0220
0221 mutable vector<Helicity::VectorWaveFunction> vector3_;
0222
0223
0224
0225
0226 mutable vector<Helicity::VectorWaveFunction> vectors3_[2];
0227
0228
0229
0230
0231 mutable vector<Helicity::VectorWaveFunction> gluon_;
0232
0233 };
0234
0235 }
0236
0237 #endif