File indexing completed on 2026-08-06 09:38:23
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef ThePEG_XComb_H
0010 #define ThePEG_XComb_H
0011
0012
0013 #include "ThePEG/Config/ThePEG.h"
0014 #include "ThePEG/PDF/PartonExtractor.fh"
0015 #include "ThePEG/PDF/PartonBin.h"
0016 #include "ThePEG/PDF/PartonBinInstance.h"
0017 #include "ThePEG/Utilities/AnyReference.h"
0018 #include "ThePEG/Utilities/VSelector.h"
0019 #include "ThePEG/Utilities/ClassDescription.h"
0020 #include "ThePEG/Utilities/Maths.h"
0021 #include "ThePEG/EventRecord/Particle.h"
0022 #include "ThePEG/Handlers/EventHandler.fh"
0023 #include "ThePEG/Cuts/Cuts.fh"
0024
0025 namespace ThePEG {
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 class XComb: public Base {
0044
0045 public:
0046
0047
0048
0049
0050
0051
0052 XComb(Energy newMaxEnergy, const cPDPair & inc,
0053 tEHPtr newEventHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW,
0054 const PBPair & newPartonBins, tCutsPtr newCuts);
0055
0056
0057
0058
0059 XComb();
0060
0061
0062
0063
0064 virtual ~XComb();
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074 const EventHandler & eventHandler() const { return *theEventHandler; }
0075
0076
0077
0078
0079 tEHPtr eventHandlerPtr() const { return theEventHandler; }
0080
0081
0082
0083
0084 tPExtrPtr pExtractor() const { return thePartonExtractor; }
0085
0086
0087
0088
0089 tCutsPtr cuts() const { return theCuts; }
0090
0091
0092
0093
0094
0095 tCascHdlPtr CKKWHandler() const { return theCKKW; }
0096
0097
0098
0099
0100
0101
0102
0103 const cPDPair & particles() const { return theParticles; }
0104
0105
0106
0107
0108 const cPDPair & partons() const { return thePartons; }
0109
0110
0111
0112
0113 const PBPair & partonBins() const { return thePartonBins; }
0114
0115
0116
0117
0118 Energy maxEnergy() const { return theMaxEnergy; }
0119
0120
0121
0122
0123
0124
0125
0126 bool empty() const { return !theEventHandler; }
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 virtual void clean();
0137
0138
0139
0140
0141 void setPartonBinInstances(PBIPair pbis, Energy2 scale);
0142
0143
0144
0145
0146 void prepare(const PPair &);
0147
0148
0149
0150
0151 const PPair & lastParticles() const { return theLastParticles; }
0152
0153
0154
0155
0156 const PPair & lastPartons() const { return theLastPartons; }
0157
0158
0159
0160
0161 void lastPartons(PPair pp) { theLastPartons = pp; }
0162
0163
0164
0165
0166
0167 tSubProPtr subProcess() const { return theSub; }
0168
0169
0170
0171
0172
0173 void subProcess(tSubProPtr);
0174
0175
0176 typedef map<cPPtr,PBIPtr> PartonBinInstanceMap;
0177
0178
0179
0180
0181 PartonBinInstanceMap& partonBinInstanceMap() { return thePartonBinInstanceMap; }
0182
0183
0184
0185
0186 const PartonBinInstanceMap& partonBinInstanceMap() const { return thePartonBinInstanceMap; }
0187
0188
0189
0190
0191 const PBIPair & partonBinInstances() const { return thePartonBinInstances; }
0192
0193
0194
0195
0196 PBIPair & partonBinInstances() { return thePartonBinInstances; }
0197
0198
0199
0200
0201
0202 tPBIPtr partonBinInstance(tcPPtr) const;
0203
0204
0205
0206
0207 Energy2 lastS() const { return theLastS; }
0208
0209
0210
0211
0212
0213 void lastS(Energy2 s) { theLastS = s; }
0214
0215
0216
0217
0218 Energy2 lastSHat() const { return theLastSHat; }
0219
0220
0221
0222
0223
0224 void lastSHat(Energy2 sh) { theLastSHat = sh; }
0225
0226
0227
0228
0229 double lastTau() const { return lastSHat()/lastS(); }
0230
0231
0232
0233
0234 double lastY() const { return theLastY; }
0235
0236
0237
0238
0239 void lastY(double y) { theLastY = y; }
0240
0241
0242
0243
0244
0245 double lastP1() const { return theLastP1P2.first; }
0246
0247
0248
0249
0250
0251 double lastP2() const { return theLastP1P2.second; }
0252
0253
0254
0255
0256
0257 void lastP1P2(pair<double,double> pp) { theLastP1P2 = pp; }
0258
0259
0260
0261
0262
0263 double lastL1() const { return theLastL1L2.first; }
0264
0265
0266
0267
0268
0269 double lastL2() const { return theLastL1L2.second; }
0270
0271
0272
0273
0274
0275 void lastL1L2(pair<double,double>);
0276
0277
0278
0279
0280
0281 double lastX1() const { return theLastX1X2.first; }
0282
0283
0284
0285
0286
0287 double lastX2() const { return theLastX1X2.second; }
0288
0289
0290
0291
0292
0293 void lastX1X2(pair<double,double>);
0294
0295
0296
0297
0298
0299 double lastE1() const { return theLastE1E2.first; }
0300
0301
0302
0303
0304
0305 double lastE2() const { return theLastE1E2.second; }
0306
0307
0308
0309
0310
0311 void lastE1E2(pair<double,double>);
0312
0313
0314
0315
0316 Energy2 lastScale() const { return theLastScale; }
0317
0318
0319
0320
0321 void lastScale(Energy2 Q2) { theLastScale = Q2; }
0322
0323
0324
0325
0326 Energy2 lastCentralScale() const {
0327 return
0328 theLastCentralScale != ZERO ?
0329 theLastCentralScale :
0330 lastScale();
0331 }
0332
0333
0334
0335
0336 void lastCentralScale(Energy2 Q2) { theLastCentralScale = Q2; }
0337
0338
0339
0340
0341 Energy2 lastShowerScale() const {
0342 return
0343 theLastShowerScale != ZERO ?
0344 theLastShowerScale :
0345 lastCentralScale();
0346 }
0347
0348
0349
0350
0351 void lastShowerScale(Energy2 Q2) { theLastShowerScale = Q2; }
0352
0353
0354
0355
0356
0357 double lastAlphaS() const { return theLastAlphaS; }
0358
0359
0360
0361
0362 void lastAlphaS(double a) { theLastAlphaS = a; }
0363
0364
0365
0366
0367
0368 double lastAlphaEM() const { return theLastAlphaEM; }
0369
0370
0371
0372
0373 void lastAlphaEM(double a) { theLastAlphaEM = a; }
0374
0375
0376 public:
0377
0378
0379
0380
0381 bool hasMeta(int id) const {
0382 return theMeta.find(id) != theMeta.end();
0383 }
0384
0385
0386
0387
0388 template<class T>
0389 void meta(int id, T& ref) {
0390 theMeta[id] = AnyReference(ref);
0391 }
0392
0393
0394
0395
0396 void eraseMeta(int id) {
0397 theMeta.erase(id);
0398 }
0399
0400
0401
0402
0403 template<class T>
0404 T& meta(int id) const {
0405 return theMeta.find(id)->second.cast<T>();
0406 }
0407
0408
0409
0410
0411 void setPartonBinInfo();
0412
0413
0414
0415
0416 void createPartonBinInstances();
0417
0418
0419
0420
0421 void lastParticles(const PPair & p) { theLastParticles = p; }
0422
0423
0424
0425
0426 void resetPartonBinInstances(const PBIPair & newBins) { thePartonBinInstances = newBins; }
0427
0428 public:
0429
0430
0431
0432
0433
0434
0435
0436 void persistentOutput(PersistentOStream & os) const;
0437
0438
0439
0440
0441
0442
0443 void persistentInput(PersistentIStream & is, int version);
0444
0445
0446
0447
0448
0449 static void Init();
0450
0451 private:
0452
0453
0454
0455
0456 tEHPtr theEventHandler;
0457
0458
0459
0460
0461 tPExtrPtr thePartonExtractor;
0462
0463
0464
0465
0466 tCascHdlPtr theCKKW;
0467
0468
0469
0470
0471 tCutsPtr theCuts;
0472
0473
0474
0475
0476 cPDPair theParticles;
0477
0478
0479
0480
0481 cPDPair thePartons;
0482
0483
0484
0485
0486 PartonBinInstanceMap thePartonBinInstanceMap;
0487
0488
0489
0490
0491 PBPair thePartonBins;
0492
0493
0494
0495
0496 PBPair theParticleBins;
0497
0498
0499
0500
0501 PBIPair thePartonBinInstances;
0502
0503
0504
0505
0506 PPair theLastParticles;
0507
0508
0509
0510
0511 PPair theLastPartons;
0512
0513
0514
0515
0516 Energy2 theLastS;
0517
0518
0519
0520
0521 Energy2 theLastSHat;
0522
0523
0524
0525
0526 double theLastY;
0527
0528
0529
0530
0531 DPair theLastP1P2;
0532
0533
0534
0535
0536
0537 DPair theLastL1L2;
0538
0539
0540
0541
0542
0543 DPair theLastX1X2;
0544
0545
0546
0547
0548
0549 DPair theLastE1E2;
0550
0551
0552
0553
0554 Energy2 theLastScale;
0555
0556
0557
0558
0559 Energy2 theLastCentralScale;
0560
0561
0562
0563
0564 Energy2 theLastShowerScale;
0565
0566
0567
0568
0569 double theLastAlphaS;
0570
0571
0572
0573
0574 double theLastAlphaEM;
0575
0576
0577
0578
0579 Energy theMaxEnergy;
0580
0581
0582
0583
0584
0585
0586 DVector theMEInfo;
0587
0588
0589
0590
0591
0592 SubProPtr theSub;
0593
0594
0595
0596
0597 map<int,AnyReference> theMeta;
0598
0599 private:
0600
0601
0602
0603
0604 static ClassDescription<XComb> initXComb;
0605
0606
0607
0608
0609 XComb & operator=(const XComb &) = delete;
0610
0611 };
0612
0613
0614
0615
0616
0617
0618
0619 template <>
0620 struct BaseClassTrait<XComb,1>: public ClassTraitsType {
0621
0622 typedef Base NthBase;
0623 };
0624
0625
0626
0627
0628
0629 template <>
0630 struct ClassTraits<XComb>:
0631 public ClassTraitsBase<XComb> {
0632
0633 static string className() { return "ThePEG::XComb"; }
0634 };
0635
0636
0637
0638 }
0639
0640 #endif