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