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