herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
ShowerApproximation.h
1// -*- C++ -*-
2//
3// ShowerApproximation.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4// Copyright (C) 2002-2019 The Herwig Collaboration
5//
6// Herwig is licenced under version 3 of the GPL, see COPYING for details.
7// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8//
9#ifndef Herwig_ShowerApproximation_H
10#define Herwig_ShowerApproximation_H
11//
12// This is the declaration of the ShowerApproximation class.
13//
14
15#include "ThePEG/Handlers/HandlerBase.h"
16#include "ThePEG/Handlers/StandardXComb.h"
17#include "Herwig/MatrixElement/Matchbox/Dipoles/SubtractionDipole.fh"
18#include "Herwig/MatrixElement/Matchbox/Utility/ColourBasis.h"
19#include "Herwig/MatrixElement/Matchbox/Phasespace/TildeKinematics.fh"
20#include "Herwig/MatrixElement/Matchbox/Phasespace/InvertedTildeKinematics.fh"
21#include "HardScaleProfile.h"
22
23namespace Herwig {
24
25using namespace ThePEG;
26
36
37public:
38
43
44public:
45
50 virtual bool needsSplittingGenerator() const { return false; }
51
56 virtual bool hasHEvents() const { return true; }
57
62 virtual bool needsTildeXCombs() const { return false; }
63
68 virtual bool needsTruncatedShower() const { return false; }
69
75 virtual Ptr<TildeKinematics>::tptr showerTildeKinematics() const;
76
82 virtual Ptr<InvertedTildeKinematics>::tptr showerInvertedTildeKinematics() const;
83
84public:
85
89 void setBornXComb(tStdXCombPtr xc) { theBornXComb = xc; }
90
94 tStdXCombPtr bornXComb() const { return theBornXComb; }
95
99 tcStdXCombPtr bornCXComb() const { return theBornXComb; }
100
104 void setRealXComb(tStdXCombPtr xc) { theRealXComb = xc; }
105
109 tStdXCombPtr realXComb() const { return theRealXComb; }
110
114 tcStdXCombPtr realCXComb() const { return theRealXComb; }
115
119 void setTildeXCombs(const vector<StdXCombPtr>& xc) { theTildeXCombs = xc; }
120
124 const vector<StdXCombPtr>& tildeXCombs() const { return theTildeXCombs; }
125
129 void setDipole(Ptr<SubtractionDipole>::tptr);
130
134 Ptr<SubtractionDipole>::tptr dipole() const;
135
139 virtual bool hasSpinCorrelations() const { return false; }
140
141public:
142
147 bool belowCutoff() const { return theBelowCutoff; }
148
154
159
163 Energy ffPtCut() const { return theFFPtCut; }
164
168 Energy fiPtCut() const { return theFIPtCut; }
169
173 Energy iiPtCut() const { return theIIPtCut; }
174
178 Energy safeCut() const { return theSafeCut;}
179
183 Energy ffScreeningScale() const { return theFFScreeningScale; }
184
188 Energy fiScreeningScale() const { return theFIScreeningScale; }
189
193 Energy iiScreeningScale() const { return theIIScreeningScale; }
194
198 virtual Energy2 showerEmissionScale() const;
199
205 }
206
210 Energy2 showerFactorizationScale() const {
212 }
213
218
222 Energy2 bornFactorizationScale() const;
223
228
232 Energy2 realFactorizationScale() const;
233
238
239 bornScale = 0,
245 showerScale = 2
248 };
249
255
261
267
273
279
285
289 double scaleWeight(int rScale, int bScale, int eScale) const;
290
294 double subtractionScaleWeight() const {
298 }
299
303 double splittingScaleWeight() const {
307 }
308
309public:
310
316
322
326 Ptr<HardScaleProfile>::tptr profileScales() const { return theHardScaleProfile; }
327
331 void profileScales(Ptr<HardScaleProfile>::ptr prof) { theHardScaleProfile = prof; }
332
336 bool hardScaleIsMuF() const { return maxPtIsMuF; }
337
341 void hardScaleIsMuF(bool yes) { maxPtIsMuF = yes; }
342
346 double hardScaleFactor() const { return theHardScaleFactor; }
347
351 void hardScaleFactor(double f) { theHardScaleFactor = f; }
352
357
362
367
372
376 virtual void checkCutoff();
377
383 virtual void getShowerVariables();
384
390 virtual CrossSection dSigHatDR() const = 0;
391
398 virtual double me2() const = 0;
399
403 double bornPDFWeight(Energy2 muF) const;
404
408 double realPDFWeight(Energy2 muF) const;
409
410protected:
411
416 virtual bool isInShowerPhasespace() const;
417
423 virtual bool isAboveCutoff() const;
424
428 virtual Energy hardScale() const;
429
433 void useOpenZ(bool yes) { theOpenZ = yes; }
434
439 bool openZ() const { return theOpenZ; }
440
441public:
442
446 virtual double channelWeight(int emitter, int emission,
447 int spectator, int bemitter) const;
448
452 virtual double channelWeight() const;
453
454public:
455
463
469 void persistentInput(PersistentIStream & is, int version);
471
478 static void Init();
479
480
481protected:
482
490 virtual void doinit();
492
493
494// If needed, insert declarations of virtual function defined in the
495// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
496
497public:
498
503 Ptr<ColourBasis>::tptr largeNBasis() const { return theLargeNBasis; }
504
505protected:
506
511 Ptr<ColourBasis>::ptr theLargeNBasis;
512
517
522
523private:
524
528 tStdXCombPtr theBornXComb;
529
533 tStdXCombPtr theRealXComb;
534
538 vector<StdXCombPtr> theTildeXCombs;
539
543 Ptr<SubtractionDipole>::tptr theDipole;
544
550
555
561
566
572
577
583
588
594
599
604
609
615
621
627
633
639
645
650
655
660
664 Ptr<HardScaleProfile>::ptr theHardScaleProfile;
665
670
671private:
672
678
679};
680
681}
682
683#endif /* Herwig_ShowerApproximation_H */
ShowerApproximation describes the shower emission to be used in NLO matching.
ScaleChoices
Enumerate possible scale choices.
@ realScale
Use the born scales.
@ showerScale
Use the real scales.
tcStdXCombPtr bornCXComb() const
Return the XComb object describing the Born process.
virtual bool isAboveCutoff() const
Return true, if the shower emission leading from the given Born to the given real emission process wo...
Energy iiPtCut() const
Return the pt cut to be applied for initial-initial dipoles.
virtual bool isInShowerPhasespace() const
Return true, if the shower was able to generate an emission leading from the given Born to the given ...
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
bool theRestrictPhasespace
True, if the phase space restrictions of the dipole shower should be applied.
int theEmissionScaleInSplitting
The scale choice in the emission contribution to be used in the splitting.
tStdXCombPtr realXComb() const
Return the XComb object describing the real emission process.
Energy2 realRenormalizationScale() const
Return the real emission renormalization scale.
virtual bool needsTildeXCombs() const
Return true, if this shower approximation will require tilde XCombs for the real phase space point ge...
virtual double channelWeight(int emitter, int emission, int spectator, int bemitter) const
Generate a weight for the given dipole channel.
int bornScaleInSplitting() const
Return the scale choice in the born cross section to be used in the splitting.
bool maxPtIsMuF
True if maximum pt should be deduced from the factorization scale.
Energy theRenormalizationScaleFreeze
A freezing value for the renormalization scale.
double theFactorizationScaleFactor
The scale factor for the factorization scale.
const vector< StdXCombPtr > & tildeXCombs() const
Return the tilde xcomb objects associated to the real xcomb.
Ptr< HardScaleProfile >::ptr theHardScaleProfile
The profile scales.
Energy safeCut() const
Return the pt cut to be applied for initial-initial dipoles.
int theBornScaleInSplitting
The scale choice in the born cross section to be used in the splitting.
Energy theFFScreeningScale
An optional screening scale for final-final dipoles; see DipoleSplittingKernel.
int realEmissionScaleInSplitting() const
Return the scale choice in the real emission cross section to be used in the splitting.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
int theRealEmissionScaleInSubtraction
The scale choice in the real emission cross section to be used in the matching subtraction.
double subtractionScaleWeight() const
Return the scale weight for the matching subtraction.
double factorizationScaleFactor() const
Get the factorization scale factor.
Energy ffPtCut() const
Return the pt cut to be applied for final-final dipoles.
void wasBelowCutoff()
Indicate that one of the recently encountered configutations was below the infrared cutoff.
ShowerApproximation & operator=(const ShowerApproximation &)=delete
The assignment operator is private and must never be called.
Energy theFactorizationScaleFreeze
A freezing value for the factorization scale.
virtual bool needsSplittingGenerator() const
Return true, if this shower approximation will require a splitting generator.
void useOpenZ(bool yes)
Use the maximum available phase space for the momentum fraction.
Energy ffScreeningScale() const
Return the screening scale to be applied for final-final dipoles.
vector< StdXCombPtr > theTildeXCombs
The tilde xcomb objects associated to the real xcomb.
bool restrictPhasespace() const
Return true, if the phase space restrictions of the dipole shower should be applied.
int theRealEmissionScaleInSplitting
The scale choice in the real emission cross section to be used in the splitting.
tStdXCombPtr theBornXComb
The XComb object describing the Born process.
void setTildeXCombs(const vector< StdXCombPtr > &xc)
Set the tilde xcomb objects associated to the real xcomb.
void hardScaleIsMuF(bool yes)
Indicate that maximum pt should be deduced from the factorization scale.
tStdXCombPtr theRealXComb
The XComb object describing the real emission process.
Energy fiScreeningScale() const
Return the screening scale to be applied for final-initial dipoles.
Energy theIIScreeningScale
An optional screening scale for initial-initial dipoles; see DipoleSplittingKernel.
bool theBelowCutoff
True if one of the recently encountered configutations was below the infrared cutoff.
tStdXCombPtr bornXComb() const
Return the XComb object describing the Born process.
void renormalizationScaleFactor(double f)
Set the renormalization scale factor.
Ptr< ColourBasis >::tptr largeNBasis() const
A large-N colour basis to be used when reproducing the shower kernels.
int emissionScaleInSplitting() const
Return the scale choice in the emission contribution to be used in the splitting.
double hardScaleFactor() const
Return the scale factor for the hard scale.
void hardScaleFactor(double f)
Set the scale factor for the hard scale.
bool theOpenZ
Use the maximum available phase space for the momentum fraction.
double theExtrapolationX
The x value from which on we extrapolate PDFs for numerically stable ratios.
double renormalizationScaleFactor() const
Get the renormalization scale factor.
virtual bool needsTruncatedShower() const
Return true, if this shower approximation will require a truncated parton shower.
Energy theSafeCut
The cut to be applied as an enhanced shower cutoff.
double scaleWeight(int rScale, int bScale, int eScale) const
Return the scale weight.
Energy2 realFactorizationScale() const
Return the real emission factorization scale.
int realEmissionScaleInSubtraction() const
Return the scale choice in the real emission cross section to be used in the matching subtraction.
ShowerApproximation()
The default constructor.
virtual double channelWeight() const
Generate a normalized weight taking into account all channels.
void setLargeNBasis()
Set the large-N basis.
void factorizationScaleFactor(double f)
Set the factorization scale factor.
virtual Ptr< TildeKinematics >::tptr showerTildeKinematics() const
Return the tilde kinematics object returning the shower kinematics parametrization if different from ...
virtual double me2() const =0
Return the shower approximation splitting kernel for the given pair of Born and real emission configu...
void resetBelowCutoff()
Reset the below cutoff flag.
bool openZ() const
Return true if the maximum available phase space should be used for the momentum fraction.
Ptr< ColourBasis >::ptr theLargeNBasis
A large-N colour basis to be used when reproducing the shower kernels.
bool hardScaleIsMuF() const
Return true if maximum pt should be deduced from the factorization scale.
Ptr< SubtractionDipole >::tptr dipole() const
Return the dipole in charge for the emission.
Energy fiPtCut() const
Return the pt cut to be applied for final-initial dipoles.
virtual void getShowerVariables()
Determine all kinematic variables which are not provided by the dipole kinematics; store all shower v...
int theBornScaleInSubtraction
The scale choice in the born cross section to be used in the matching subtraction.
Energy2 showerRenormalizationScale() const
Return the shower renormalization scale.
Energy2 bornRenormalizationScale() const
Return the Born renormalization scale.
void profileScales(Ptr< HardScaleProfile >::ptr prof)
Set profile scales.
Energy2 bornFactorizationScale() const
Return the Born factorization scale.
void setDipole(Ptr< SubtractionDipole >::tptr)
Set the dipole in charge for the emission.
int emissionScaleInSubtraction() const
Return the scale choice in the emission contribution to be used in the matching subtraction.
virtual CrossSection dSigHatDR() const =0
Return the shower approximation to the real emission cross section for the given pair of Born and rea...
int theEmissionScaleInSubtraction
The scale choice in the emission contribution to be used in the matching subtraction.
Energy theFIScreeningScale
An optional screening scale for final-initial dipoles; see DipoleSplittingKernel.
tcStdXCombPtr realCXComb() const
Return the XComb object describing the real emission process.
virtual Ptr< InvertedTildeKinematics >::tptr showerInvertedTildeKinematics() const
Return the tilde kinematics object returning the shower kinematics parametrization if different from ...
void setBornXComb(tStdXCombPtr xc)
Set the XComb object describing the Born process.
Energy2 showerFactorizationScale() const
Return the shower factorization scale.
Ptr< HardScaleProfile >::tptr profileScales() const
Return profile scales.
void setRealXComb(tStdXCombPtr xc)
Set the XComb object describing the real emission process.
bool belowCutoff() const
Return true if one of the recently encountered configutations was below the infrared cutoff.
double realPDFWeight(Energy2 muF) const
Return the real emission PDF weight.
double bornPDFWeight(Energy2 muF) const
Return the Born PDF weight.
void restrictPhasespace(bool yes)
Indicate that the phase space restrictions of the dipole shower should be applied.
Energy theFFPtCut
The pt cut to be applied for final-final dipoles.
static void Init()
The standard Init function used to initialize the interfaces.
Energy theFIPtCut
The pt cut to be applied for final-initial dipoles.
virtual Energy hardScale() const
Return the relevant hard scale.
virtual bool hasSpinCorrelations() const
Return true, if this matching is capable of spin correlations.
virtual void checkCutoff()
Determine if the configuration is below or above the cutoff.
Energy theIIPtCut
The pt cut to be applied for initial-initial dipoles.
Ptr< SubtractionDipole >::tptr theDipole
The dipole in charge for the emission.
virtual bool hasHEvents() const
Return true, if this shower approximation will require H events.
Energy iiScreeningScale() const
Return the screening scale to be applied for initial-initial dipoles.
int bornScaleInSubtraction() const
Return the scale choice in the born cross section to be used in the matching subtraction.
virtual Energy2 showerEmissionScale() const
Return the shower renormalization scale.
double theRenormalizationScaleFactor
The scale factor for the renormalization scale.
double splittingScaleWeight() const
Return the scale weight for the splitting.
double theHardScaleFactor
The scale factor for the hard scale.
-*- C++ -*-
constexpr auto sqr(const T &x) -> decltype(x *x)