File indexing completed on 2026-08-06 09:24:19
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef HERWIG_StandardModel_H
0010 #define HERWIG_StandardModel_H
0011
0012
0013
0014 #include "ThePEG/StandardModel/StandardModelBase.h"
0015 #include "Herwig/Models/StandardModel/RunningMassBase.h"
0016 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
0017 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
0018 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
0019 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
0020 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
0021 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
0022 #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
0023 #include "ThePEG/Helicity/Vertex/AbstractSSSSVertex.h"
0024 #include "Herwig/Models/General/ModelGenerator.fh"
0025 #include "StandardModel.fh"
0026
0027 namespace Herwig {
0028 using namespace ThePEG;
0029 using namespace ThePEG::Helicity;
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 class StandardModel: public StandardModelBase {
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049 typedef Ptr<Herwig::RunningMassBase>::pointer runPtr;
0050
0051
0052
0053
0054 typedef Ptr<Herwig::RunningMassBase>::transient_pointer trunPtr;
0055
0056
0057 public:
0058
0059
0060
0061
0062
0063
0064 StandardModel();
0065
0066
0067
0068
0069 StandardModel(const StandardModel &);
0070
0071
0072
0073
0074 virtual ~StandardModel();
0075
0076
0077 public:
0078
0079
0080
0081
0082
0083
0084
0085 void persistentOutput(PersistentOStream & os) const;
0086
0087
0088
0089
0090
0091
0092 void persistentInput(PersistentIStream & is, int version);
0093
0094
0095
0096
0097
0098 static void Init();
0099
0100 protected:
0101
0102
0103
0104 virtual bool registerDefaultVertices() const { return true; }
0105
0106 public:
0107
0108
0109
0110
0111
0112
0113
0114
0115 double lnu() const {
0116 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()+anu());
0117 }
0118
0119
0120
0121
0122 double le() const {
0123 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()+ae());
0124 }
0125
0126
0127
0128
0129 double lu() const {
0130 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()+au());
0131 }
0132
0133
0134
0135
0136 double ld() const {
0137 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()+ad());
0138 }
0139
0140
0141
0142
0143 double rnu() const {
0144 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()-anu());
0145 }
0146
0147
0148
0149
0150 double re() const {
0151 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()-ae());
0152 }
0153
0154
0155
0156
0157 double ru() const {
0158 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()-au());
0159 }
0160
0161
0162
0163
0164 double rd() const {
0165 return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()-ad());
0166 }
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176 virtual tAbstractFFVVertexPtr vertexFFZ() const {
0177 return FFZVertex_;
0178 }
0179
0180
0181
0182
0183 virtual tAbstractFFVVertexPtr vertexFFP() const {
0184 return FFPVertex_;
0185 }
0186
0187
0188
0189
0190 virtual tAbstractFFVVertexPtr vertexFFG() const {
0191 return FFGVertex_;
0192 }
0193
0194
0195
0196
0197 virtual tAbstractFFVVertexPtr vertexFFW() const {
0198 return FFWVertex_;
0199 }
0200
0201
0202
0203
0204 virtual tAbstractFFSVertexPtr vertexFFH() const {
0205 return FFHVertex_;
0206 }
0207
0208
0209
0210
0211 virtual tAbstractVVVVertexPtr vertexGGG() const {
0212 return GGGVertex_;
0213 }
0214
0215
0216
0217
0218 virtual tAbstractVVVVertexPtr vertexWWW() const {
0219 return WWWVertex_;
0220 }
0221
0222
0223
0224
0225 virtual tAbstractVVSVertexPtr vertexWWH() const {
0226 return WWHVertex_;
0227 }
0228
0229
0230
0231
0232 virtual tAbstractVVVVVertexPtr vertexWWWW() const {
0233 return WWWWVertex_;
0234 }
0235
0236
0237
0238
0239 virtual tAbstractVVVVVertexPtr vertexGGGG() const {
0240 return GGGGVertex_;
0241 }
0242
0243
0244
0245
0246 virtual tAbstractVVSVertexPtr vertexHGG() const {
0247 return HGGVertex_;
0248 }
0249
0250
0251
0252
0253 virtual tAbstractVVSVertexPtr vertexHPP() const {
0254 return HPPVertex_;
0255 }
0256
0257
0258
0259
0260 virtual tAbstractSSSVertexPtr vertexHHH() const {
0261 return HHHVertex_;
0262 }
0263
0264
0265
0266
0267 virtual tAbstractVVSSVertexPtr vertexWWHH() const {
0268 return WWHHVertex_;
0269 }
0270
0271
0272
0273
0274 unsigned int numberOfVertices() const {
0275 return vertexList_.size() + extraVertices_.size();
0276 }
0277
0278
0279
0280
0281 tVertexBasePtr vertex(size_t ix) const {
0282 const size_t S = vertexList_.size();
0283 if ( ix < S )
0284 return vertexList_[ix];
0285 else
0286 return extraVertices_[ix - S];
0287 }
0288
0289
0290
0291
0292
0293
0294
0295 Energy mass(Energy2 scale,tcPDPtr part) const {
0296 return runningMass_->value(scale,part);
0297 }
0298
0299
0300
0301
0302 trunPtr massPtr() const {
0303 return runningMass_;
0304 }
0305
0306
0307
0308
0309 const map<string,pair<unsigned int,int> > & couplings() const {
0310 return couplings_;
0311 }
0312
0313 protected:
0314
0315
0316
0317
0318
0319
0320
0321 virtual IBPtr clone() const;
0322
0323
0324
0325
0326
0327 virtual IBPtr fullclone() const;
0328
0329
0330 protected:
0331
0332
0333
0334
0335
0336
0337 virtual void doinit();
0338
0339
0340 protected:
0341
0342
0343
0344
0345 void addVertex(VertexBasePtr in) {
0346 if ( in )
0347 vertexList_.push_back(in);
0348 }
0349
0350
0351
0352
0353
0354 void resetMass(long id, Energy mass,tPDPtr particle=tPDPtr());
0355
0356 protected:
0357
0358
0359
0360
0361 void setCouplings(string name,pair<unsigned int,int> vals) {
0362 couplings_[name] = vals;
0363 }
0364
0365 private:
0366
0367
0368
0369
0370 StandardModel & operator=(const StandardModel &) = delete;
0371
0372 private:
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382 AbstractFFVVertexPtr FFZVertex_;
0383
0384
0385
0386
0387 AbstractFFVVertexPtr FFPVertex_;
0388
0389
0390
0391
0392 AbstractFFVVertexPtr FFGVertex_;
0393
0394
0395
0396
0397 AbstractFFVVertexPtr FFWVertex_;
0398
0399
0400
0401
0402 AbstractFFSVertexPtr FFHVertex_;
0403
0404
0405
0406
0407 AbstractVVSVertexPtr WWHVertex_;
0408
0409
0410
0411
0412 AbstractVVVVertexPtr GGGVertex_;
0413
0414
0415
0416
0417 AbstractVVVVertexPtr WWWVertex_;
0418
0419
0420
0421
0422 AbstractVVVVVertexPtr GGGGVertex_;
0423
0424
0425
0426
0427 AbstractVVVVVertexPtr WWWWVertex_;
0428
0429
0430
0431
0432 AbstractVVSVertexPtr HGGVertex_;
0433
0434
0435
0436
0437 AbstractVVSVertexPtr HPPVertex_;
0438
0439
0440
0441
0442 AbstractSSSVertexPtr HHHVertex_;
0443
0444
0445
0446
0447 AbstractVVSSVertexPtr WWHHVertex_;
0448
0449
0450
0451
0452 vector<VertexBasePtr> vertexList_;
0453
0454
0455
0456
0457 vector<VertexBasePtr> extraVertices_;
0458
0459
0460
0461
0462
0463 runPtr runningMass_;
0464
0465
0466
0467
0468 ModelGeneratorPtr modelGenerator_;
0469
0470
0471
0472
0473 map<string,pair<unsigned int,int> > couplings_;
0474 };
0475
0476 }
0477
0478 #endif