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