File indexing completed on 2026-08-06 09:24:23
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef HERWIG_DipoleSplittingInfo_H
0010 #define HERWIG_DipoleSplittingInfo_H
0011
0012
0013
0014
0015 #include "ThePEG/PDF/PDF.h"
0016 #include "ThePEG/PDT/ParticleData.h"
0017
0018 #include "Herwig/Shower/Dipole/Kinematics/DipoleSplittingKinematics.h"
0019 #include "Herwig/Shower/Dipole/Kernels/DipoleSplittingKernel.h"
0020
0021 namespace Herwig {
0022
0023 using namespace ThePEG;
0024
0025 class DipoleSplittingKinematics;
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 class DipoleIndex {
0036
0037 public:
0038
0039
0040
0041
0042 DipoleIndex();
0043
0044
0045
0046
0047 DipoleIndex(tcPDPtr newEmitter, tcPDPtr newSpectator,
0048 const PDF& newEmitterPDF = PDF(), const PDF& newSpectatorPDF = PDF(),
0049 const bool decayingEmitter = false, const bool decayingSpectator = false,
0050 const bool offShellEmitter = false, const bool offShellSpectator = false);
0051
0052 public:
0053
0054
0055
0056
0057 bool operator ==(const DipoleIndex& x) const;
0058
0059
0060
0061
0062 bool operator <(const DipoleIndex& x) const;
0063
0064
0065
0066
0067 void swap();
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079 pair<DipoleIndex,DipoleIndex> split(tcPDPtr) const;
0080
0081 public:
0082
0083
0084
0085
0086 tcPDPtr emitterData() const { return theEmitterData; }
0087
0088
0089
0090
0091 bool initialStateEmitter() const { return theInitialStateEmitter; }
0092
0093
0094
0095
0096 bool incomingDecayEmitter() const { return theIncomingDecayEmitter; }
0097
0098
0099
0100
0101 bool offShellEmitter() const { return theOffShellEmitter; }
0102
0103
0104
0105
0106
0107 const PDF& emitterPDF() const { return theEmitterPDF; }
0108
0109
0110
0111
0112 tcPDPtr spectatorData() const { return theSpectatorData; }
0113
0114
0115
0116
0117 bool initialStateSpectator() const { return theInitialStateSpectator; }
0118
0119
0120
0121
0122 bool incomingDecaySpectator() const { return theIncomingDecaySpectator; }
0123
0124
0125
0126
0127 bool offShellSpectator() const { return theOffShellSpectator; }
0128
0129
0130
0131
0132
0133 const PDF& spectatorPDF() const { return theSpectatorPDF; }
0134
0135 public:
0136
0137
0138
0139
0140 void print(ostream&) const;
0141
0142 private:
0143
0144
0145
0146
0147 tcPDPtr theEmitterData;
0148
0149
0150
0151
0152 bool theInitialStateEmitter;
0153
0154
0155
0156
0157 bool theIncomingDecayEmitter;
0158
0159
0160
0161
0162 bool theOffShellEmitter;
0163
0164
0165
0166
0167 PDF theEmitterPDF;
0168
0169
0170
0171
0172 tcPDPtr theSpectatorData;
0173
0174
0175
0176
0177 bool theInitialStateSpectator;
0178
0179
0180
0181
0182 bool theIncomingDecaySpectator;
0183
0184
0185
0186
0187 bool theOffShellSpectator;
0188
0189
0190
0191
0192 PDF theSpectatorPDF;
0193
0194 };
0195
0196 inline ostream& operator << (ostream& os, const DipoleIndex& di) {
0197 di.print(os);
0198 return os;
0199 }
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209 class DipoleSplittingInfo {
0210
0211 public:
0212
0213
0214
0215
0216 DipoleSplittingInfo();
0217
0218
0219
0220
0221 virtual ~DipoleSplittingInfo() {}
0222
0223
0224
0225
0226
0227 DipoleSplittingInfo(DipoleIndex ind,pair<bool,bool> conf,double emitX,
0228 double spectX,tPPtr emit,tPPtr spect){
0229 theIndex=ind;
0230 theConfiguration=conf;
0231 theEmitterX=emitX;
0232 theSpectatorX=spectX;
0233 theEmitter=emit;
0234 theSpectator=spect;
0235 }
0236
0237
0238 public:
0239
0240
0241
0242
0243 void fill(const DipoleSplittingInfo&);
0244
0245 public:
0246
0247
0248
0249
0250 const DipoleIndex& index() const { return theIndex; }
0251
0252
0253
0254
0255
0256
0257 const pair<bool,bool>& configuration() const { return theConfiguration; }
0258
0259
0260
0261
0262 const pair<bool,bool>& spectatorConfiguration() const { return theSpectatorConfiguration; }
0263
0264
0265
0266
0267
0268 tcPDPtr emitterData() const { return theEmitterData; }
0269
0270
0271
0272
0273
0274 tcPDPtr emissionData() const { return theEmissionData; }
0275
0276
0277
0278
0279
0280 tcPDPtr spectatorData() const { return theSpectatorData; }
0281
0282
0283
0284
0285 double emitterX() const { return theEmitterX; }
0286
0287
0288
0289
0290 double spectatorX() const { return theSpectatorX; }
0291
0292 public:
0293
0294
0295
0296
0297
0298 Ptr<DipoleSplittingKinematics>::tptr splittingKinematics() const { return theSplittingKinematics; }
0299
0300
0301
0302
0303
0304 Ptr<DipoleSplittingKernel>::tptr splittingKernel() const { return theSplittingKernel;}
0305
0306
0307
0308
0309 Energy scale() const { return theScale; }
0310
0311
0312
0313
0314
0315 bool isDecayProc() const { return theIsDecayProc; }
0316
0317
0318
0319
0320
0321 Energy recoilMass() const { return theRecoilMass; }
0322
0323
0324
0325
0326
0327 Energy spectatorMass() const { return theSpectatorMass; }
0328
0329
0330
0331
0332
0333 Energy emitterMass() const { return theEmitterMass; }
0334
0335
0336
0337
0338
0339 Energy hardPt() const { return theHardPt; }
0340
0341
0342
0343
0344 Energy lastPt() const { return theLastPt; }
0345
0346
0347
0348
0349 double lastZ() const { return theLastZ; }
0350
0351
0352
0353
0354 double lastPhi() const { return theLastPhi; }
0355
0356
0357
0358
0359
0360 double lastEmitterZ() const { return theLastEmitterZ; }
0361
0362
0363
0364
0365
0366 double lastSpectatorZ() const { return theLastSpectatorZ; }
0367
0368
0369
0370
0371
0372
0373 const vector<double>& lastSplittingParameters() const { return theLastSplittingParameters; }
0374
0375
0376
0377
0378
0379 bool stoppedEvolving() const { return theStoppedEvolving; }
0380
0381 public:
0382
0383
0384
0385
0386 void index(const DipoleIndex& ind) { theIndex = ind; }
0387
0388
0389
0390
0391 void splittingKinematics(Ptr<DipoleSplittingKinematics>::tptr newSplittingKinematics) {
0392 theSplittingKinematics = newSplittingKinematics;
0393 }
0394
0395
0396
0397
0398 void splittingKernel( Ptr<DipoleSplittingKernel>::tptr newSplittingKernel){
0399 theSplittingKernel = newSplittingKernel;
0400 }
0401
0402
0403
0404
0405
0406 void emitterData(tcPDPtr p) { theEmitterData = p; }
0407
0408
0409
0410
0411
0412 void emissionData(tcPDPtr p) { theEmissionData = p; }
0413
0414
0415
0416
0417
0418 void spectatorData(tcPDPtr p) { theSpectatorData = p; }
0419
0420
0421
0422
0423 void scale(Energy s) { theScale = s; }
0424
0425
0426
0427
0428
0429 void isDecayProc(bool isDecayProc) { theIsDecayProc = isDecayProc; }
0430
0431
0432
0433
0434
0435 void recoilMass(Energy mass) { theRecoilMass = mass; }
0436
0437
0438
0439
0440
0441 void spectatorMass(Energy mass){ theSpectatorMass = mass; }
0442
0443
0444
0445
0446
0447 void emitterMass(Energy mass){ theEmitterMass = mass; }
0448
0449
0450
0451
0452 void emitterX(double x) { theEmitterX = x; }
0453
0454
0455
0456
0457 void spectatorX(double x) { theSpectatorX = x; }
0458
0459
0460
0461
0462
0463 void hardPt(Energy p) { theHardPt = p; }
0464
0465
0466
0467
0468 void lastPt(Energy p) { theLastPt = p; }
0469
0470
0471
0472
0473 void lastZ(double z) { theLastZ = z; }
0474
0475
0476
0477
0478 void lastPhi(double p) { theLastPhi = p; }
0479
0480
0481
0482
0483
0484 void lastEmitterZ(double z) { theLastEmitterZ = z; }
0485
0486
0487
0488
0489
0490 void lastSpectatorZ(double z) { theLastSpectatorZ = z; }
0491
0492
0493
0494
0495 double lastValue() const { return theLastValue; }
0496
0497
0498
0499
0500 void lastValue(double v) { theLastValue = v; }
0501
0502
0503
0504
0505 void setCalcFixedExpansion(bool c){theCalcFixedExpansion=c;}
0506
0507
0508
0509
0510 bool calcFixedExpansion()const{ return theCalcFixedExpansion;}
0511
0512
0513
0514
0515 Energy fixedScale() const{return theFixedScale;}
0516
0517
0518
0519
0520 void fixedScale(Energy fix){ theFixedScale=fix;}
0521
0522
0523
0524
0525 void lastSplittingParameters(const vector<double>& p) { theLastSplittingParameters = p; }
0526
0527
0528
0529
0530 vector<double>& splittingParameters() { return theLastSplittingParameters; }
0531
0532
0533
0534
0535
0536 void didStopEvolving() { theStoppedEvolving = true; }
0537
0538
0539
0540
0541
0542 void continuesEvolving() { theStoppedEvolving = false; }
0543
0544
0545
0546
0547 void configuration(const pair<bool,bool>& newConfig) { theConfiguration = newConfig; }
0548
0549
0550
0551
0552 void spectatorConfiguration(const pair<bool,bool>& conf) { theSpectatorConfiguration = conf; }
0553
0554 public:
0555
0556
0557
0558
0559 void emitter(tPPtr newEmitter) { theEmitter = newEmitter; }
0560
0561
0562
0563
0564 void spectator(tPPtr newSpectator) { theSpectator = newSpectator; }
0565
0566
0567
0568
0569 void splitEmitter(tPPtr newEmitter) { theSplitEmitter = newEmitter; }
0570
0571
0572
0573
0574 void splitSpectator(tPPtr newSpectator) { theSplitSpectator = newSpectator; }
0575
0576
0577
0578
0579 void emission(tPPtr newEmission) { theEmission = newEmission; }
0580
0581
0582
0583
0584 tPPtr emitter() const { return theEmitter; }
0585
0586
0587
0588
0589 tPPtr spectator() const { return theSpectator; }
0590
0591
0592
0593
0594 tPPtr splitEmitter() const { return theSplitEmitter; }
0595
0596
0597
0598
0599 tPPtr splitSpectator() const { return theSplitSpectator; }
0600
0601
0602
0603
0604 tPPtr emission() const { return theEmission; }
0605
0606 public:
0607
0608
0609
0610
0611 void print(ostream&) const;
0612
0613 private:
0614
0615
0616
0617
0618
0619 DipoleIndex theIndex;
0620
0621
0622
0623
0624
0625
0626 pair<bool,bool> theConfiguration;
0627
0628
0629
0630
0631 pair<bool,bool> theSpectatorConfiguration;
0632
0633
0634
0635
0636
0637 tcPDPtr theEmitterData;
0638
0639
0640
0641
0642
0643 tcPDPtr theEmissionData;
0644
0645
0646
0647
0648
0649 tcPDPtr theSpectatorData;
0650
0651
0652
0653
0654
0655 Ptr<DipoleSplittingKinematics>::tptr theSplittingKinematics;
0656
0657
0658
0659
0660
0661 Ptr<DipoleSplittingKernel>::tptr theSplittingKernel;
0662
0663
0664
0665
0666 Energy theScale;
0667
0668
0669
0670
0671 bool theIsDecayProc;
0672
0673
0674
0675
0676
0677 Energy theRecoilMass;
0678
0679
0680
0681
0682
0683 Energy theEmitterMass;
0684
0685
0686
0687
0688
0689 Energy theSpectatorMass;
0690
0691
0692
0693
0694 double theEmitterX;
0695
0696
0697
0698
0699 double theSpectatorX;
0700
0701
0702
0703
0704
0705 Energy theHardPt;
0706
0707
0708
0709
0710 Energy theLastPt;
0711
0712
0713
0714
0715 double theLastZ;
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725
0726
0727
0728 double theLastPhi;
0729
0730
0731
0732
0733
0734 double theLastEmitterZ;
0735
0736
0737
0738
0739
0740 double theLastSpectatorZ;
0741
0742
0743
0744
0745 double theLastValue;
0746
0747
0748
0749
0750
0751
0752 vector<double> theLastSplittingParameters;
0753
0754
0755
0756
0757
0758 bool theStoppedEvolving;
0759
0760
0761
0762
0763 PPtr theEmitter;
0764
0765
0766
0767
0768 PPtr theSpectator;
0769
0770
0771
0772
0773 PPtr theSplitEmitter;
0774
0775
0776
0777
0778 PPtr theSplitSpectator;
0779
0780
0781
0782
0783 PPtr theEmission;
0784
0785
0786
0787
0788
0789 bool theCalcFixedExpansion;
0790
0791
0792
0793
0794 Energy theFixedScale;
0795
0796
0797
0798 };
0799
0800 inline ostream& operator << (ostream& os, const DipoleSplittingInfo& di) {
0801 di.print(os);
0802 return os;
0803 }
0804
0805 }
0806
0807 #endif