Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:27

0001 // -*- C++ -*-
0002 #ifndef Herwig_QTildeShowerHandler_H
0003 #define Herwig_QTildeShowerHandler_H
0004 //
0005 // This is the declaration of the QTildeShowerHandler class.
0006 //
0007 
0008 #include "QTildeShowerHandler.fh"
0009 #include "Herwig/Shower/ShowerHandler.h"
0010 #include "Herwig/Shower/QTilde/SplittingFunctions/SplittingGenerator.h"
0011 #include "Herwig/Shower/QTilde/Base/ShowerTree.h"
0012 #include "Herwig/Shower/QTilde/Base/ShowerProgenitor.fh"
0013 #include "Herwig/Shower/QTilde/Base/HardTree.h"
0014 #include "Herwig/Shower/QTilde/Base/Branching.h"
0015 #include "Herwig/Shower/QTilde/Base/ShowerVeto.h"
0016 #include "Herwig/Shower/QTilde/Base/FullShowerVeto.h"
0017 #include "Herwig/Shower/QTilde/Kinematics/KinematicsReconstructor.fh"
0018 #include "Herwig/Shower/QTilde/Base/PartnerFinder.fh"
0019 #include "Herwig/Shower/QTilde/SplittingFunctions/SudakovFormFactor.fh"
0020 #include "Herwig/MatrixElement/HwMEBase.h"
0021 #include "Herwig/Decay/HwDecayerBase.h"
0022 #include "Herwig/MatrixElement/Matchbox/Matching/ShowerApproximation.h"
0023 #include "Herwig/Shower/RealEmissionProcess.h"
0024 #include "Herwig/Utilities/Statistic.h"
0025 
0026 namespace Herwig {
0027 
0028 using namespace ThePEG;
0029 
0030 /**
0031  * The QTildeShowerHandler class.
0032  *
0033  * @see \ref QTildeShowerHandlerInterfaces "The interfaces"
0034  * defined for QTildeShowerHandler.
0035  */
0036 class QTildeShowerHandler: public ShowerHandler {
0037 
0038 public:
0039   
0040   /**
0041    *  Pointer to an XComb object
0042    */
0043   typedef Ptr<XComb>::pointer XCPtr;
0044 
0045 public:
0046 
0047   /**
0048    * The default constructor.
0049    */
0050   QTildeShowerHandler();
0051 
0052 public:
0053 
0054   /**
0055    * At the end of the Showering, transform ShowerParticle objects
0056    * into ThePEG particles and fill the event record with them.
0057    * Notice that the parent/child relationships and the 
0058    * transformation from ShowerColourLine objects into ThePEG
0059    * ColourLine ones must be properly handled.
0060    */
0061   void fillEventRecord();
0062   
0063   /**
0064    * Return the relevant hard scale to be used in the profile scales
0065    */
0066   virtual Energy hardScale() const {
0067     return muPt;
0068   }
0069 
0070   /**
0071    * Hook to allow vetoing of event after showering hard sub-process
0072    * as in e.g. MLM merging.
0073    */
0074   virtual bool showerHardProcessVeto() const { return false; }
0075   
0076   /**
0077    *  Generate hard emissions for CKKW etc
0078    */
0079   virtual HardTreePtr generateCKKW(ShowerTreePtr tree) const;
0080 
0081   /**
0082    *  Members to perform the shower
0083    */
0084   //@{
0085   /**
0086    * Perform the shower of the hard process
0087    */
0088   virtual void showerHardProcess(ShowerTreePtr,XCPtr);
0089 
0090   /**
0091    * Perform the shower of a decay
0092    */
0093   virtual void showerDecay(ShowerTreePtr);
0094   //@}
0095 
0096   /**
0097    *  Access to the flags and shower variables
0098    */
0099   //@{
0100 
0101   /**
0102    *  Get the SplittingGenerator
0103    */
0104   tSplittingGeneratorPtr splittingGenerator() const { return _splittingGenerator; }
0105 
0106   /**
0107    * Mode for hard emissions
0108    */
0109   int hardEmission() const {return _hardEmission;}
0110   //@}
0111 
0112   /**
0113    *  Connect the Hard and Shower trees
0114    */
0115   virtual void connectTrees(ShowerTreePtr showerTree, HardTreePtr hardTree, bool hard );
0116 
0117   /**
0118    *   Access to switches for spin correlations
0119    */
0120   //@{
0121   /**
0122    *  Soft correlations
0123    */
0124   unsigned int softCorrelations() const {
0125     return _softOpt;
0126   }
0127 
0128   /**
0129    *  Any correlations
0130    */
0131   virtual bool correlations() const {
0132     return spinCorrelations()!=0||_softOpt!=0;
0133   }
0134   //@}
0135 
0136 public:
0137   /**
0138    *  Access methods to access the objects
0139    */
0140   //@{
0141   /**
0142    *  Access to the KinematicsReconstructor object
0143    */
0144   tKinematicsReconstructorPtr kinematicsReconstructor() const { return _reconstructor; }
0145 
0146   /**
0147    *  Access to the PartnerFinder object
0148    */
0149   tPartnerFinderPtr partnerFinder() const { return _partnerfinder; }
0150 
0151   //@}
0152 
0153 protected:
0154 
0155   /**
0156    *   Perform the shower
0157    */
0158   void doShowering(bool hard,XCPtr);
0159 
0160   /**
0161    *  Generate the hard matrix element correction
0162    */
0163   virtual RealEmissionProcessPtr hardMatrixElementCorrection(bool);
0164 
0165   /**
0166    *  Generate the hardest emission
0167    */
0168   virtual void hardestEmission(bool hard);
0169 
0170   /**
0171    *  Set up for applying a matrix element correction
0172    */
0173   void setupMECorrection(RealEmissionProcessPtr real);
0174 
0175   /**
0176    * Extract the particles to be showered, set the evolution scales
0177    * and apply the hard matrix element correction
0178    * @param hard Whether this is a hard process or decay
0179    * @return The particles to be showered
0180    */
0181   virtual vector<ShowerProgenitorPtr> setupShower(bool hard);
0182 
0183   /**
0184    *  set the colour partners
0185    */
0186   virtual void setEvolutionPartners(bool hard,ShowerInteraction,
0187                     bool clear);
0188 
0189   /**
0190    *  Methods to perform the evolution of an individual particle, including
0191    *  recursive calling on the products
0192    */
0193   //@{
0194   /**
0195    * It does the forward evolution of the time-like input particle
0196    * (and recursively for all its radiation products).
0197    * accepting only emissions which conforms to the showerVariables
0198    * and soft matrix element correction.
0199    * If at least one emission has occurred then the method returns true.
0200    * @param particle The particle to be showered
0201    */
0202   virtual bool timeLikeShower(tShowerParticlePtr particle, ShowerInteraction,
0203                   Branching fb, bool first);
0204 
0205   /**
0206    * It does the backward evolution of the space-like input particle 
0207    * (and recursively for all its time-like radiation products).
0208    * accepting only emissions which conforms to the showerVariables.
0209    * If at least one emission has occurred then the method returns true
0210    * @param particle The particle to be showered
0211    * @param beam The beam particle
0212    */
0213   virtual bool spaceLikeShower(tShowerParticlePtr particle,PPtr beam,
0214                    ShowerInteraction); 
0215 
0216   /**
0217    * If does the forward evolution of the input on-shell particle
0218    * involved in a decay 
0219    * (and recursively for all its time-like radiation products).
0220    * accepting only emissions which conforms to the showerVariables.
0221    * @param particle    The particle to be showered
0222    * @param maxscale    The maximum scale for the shower.
0223    * @param minimumMass The minimum mass of the final-state system
0224    */
0225   virtual bool 
0226   spaceLikeDecayShower(tShowerParticlePtr particle,
0227                const ShowerParticle::EvolutionScales & maxScales,
0228                Energy minimumMass,ShowerInteraction,
0229                Branching fb);
0230 
0231   /**
0232    * Truncated shower from a time-like particle
0233    */
0234   virtual bool truncatedTimeLikeShower(tShowerParticlePtr particle,
0235                        HardBranchingPtr branch,
0236                        ShowerInteraction type,
0237                        Branching fb, bool first);
0238  
0239   /**
0240    * Truncated shower from a space-like particle
0241    */
0242   virtual bool truncatedSpaceLikeShower(tShowerParticlePtr particle,PPtr beam,
0243                     HardBranchingPtr branch,
0244                     ShowerInteraction type);
0245 
0246   /**
0247    * Truncated shower from a time-like particle
0248    */
0249   virtual bool truncatedSpaceLikeDecayShower(tShowerParticlePtr particle,
0250                          const ShowerParticle::EvolutionScales & maxScales,
0251                          Energy minimumMass, HardBranchingPtr branch,
0252                          ShowerInteraction type, Branching fb);
0253   //@}
0254 
0255   /**
0256    *  Switches for matrix element corrections
0257    */
0258   //@{
0259   /**
0260    * Any ME correction?   
0261    */
0262   bool MECOn() const { 
0263     return _hardEmission == 1;
0264   }
0265 
0266   /**
0267    * Any hard ME correction? 
0268    */
0269   bool hardMEC() const {
0270     return _hardEmission == 1 && (_meCorrMode == 1 || _meCorrMode == 2);
0271   }
0272 
0273   /**
0274    * Any soft ME correction? 
0275    */
0276   bool softMEC() const {
0277     return _hardEmission == 1 && (_meCorrMode == 1 || _meCorrMode > 2);
0278   }
0279   //@}
0280 
0281   /**
0282    * Is the truncated shower on?
0283    */
0284   bool isTruncatedShowerON() const {return _trunc_Mode;}
0285 
0286   /**
0287    *  Switch for intrinsic pT
0288    */
0289   //@{
0290   /**
0291    * Any intrinsic pT?
0292    */
0293   bool ipTon() const {
0294     return _iptrms != ZERO || ( _beta == 1.0 && _gamma != ZERO && _iptmax !=ZERO );
0295   }
0296    //@}  
0297 
0298   /**@name Additional shower vetoes */
0299   //@{
0300   /**
0301    * Insert a veto.
0302    */
0303   void addVeto (ShowerVetoPtr v) { _vetoes.push_back(v); }
0304 
0305   /**
0306    * Remove a veto.
0307    */
0308   void removeVeto (ShowerVetoPtr v) { 
0309     vector<ShowerVetoPtr>::iterator vit = find(_vetoes.begin(),_vetoes.end(),v);
0310     if (vit != _vetoes.end())
0311       _vetoes.erase(vit);
0312   }
0313 
0314   //@}
0315 
0316   /**
0317    *  Switches for vetoing hard emissions
0318    */
0319   //@{
0320   /**
0321    * Returns true if the hard veto read-in is to be applied to only
0322    * the primary collision and false otherwise.
0323    */
0324   bool hardVetoReadOption() const {return _hardVetoReadOption;}
0325   //@}
0326 
0327   /**
0328    *  Enhancement factors for radiation needed to generate the soft matrix
0329    *  element correction.
0330    */
0331   //@{
0332   /**
0333    *  Access the enhancement factor for initial-state radiation
0334    */
0335   double initialStateRadiationEnhancementFactor() const { return _initialenhance; }
0336 
0337   /**
0338    *  Access the enhancement factor for final-state radiation
0339    */
0340   double finalStateRadiationEnhancementFactor() const { return _finalenhance; }
0341 
0342   /**
0343    *  Set the enhancement factor for initial-state radiation
0344    */
0345   void initialStateRadiationEnhancementFactor(double in) { _initialenhance=in; }
0346 
0347   /**
0348    *  Set the enhancement factor for final-state radiation
0349    */
0350   void finalStateRadiationEnhancementFactor(double in) { _finalenhance=in; }
0351   //@}
0352 
0353   /**
0354    *  Access to set/get the HardTree currently beinging showered
0355    */
0356   //@{
0357   /**
0358    *  The HardTree currently being showered
0359    */
0360   tHardTreePtr hardTree() {return _hardtree;}
0361 
0362   /**
0363    *  The HardTree currently being showered
0364    */
0365   void hardTree(tHardTreePtr in) {_hardtree = in;}
0366   //@}
0367 
0368   /**
0369    * Access/set the beam particle for the current initial-state shower
0370    */
0371   //@{
0372   /**
0373    *  Get the beam particle data
0374    */
0375   Ptr<BeamParticleData>::const_pointer beamParticle() const { return _beam; }
0376 
0377   /**
0378    *  Set the beam particle data
0379    */
0380   void setBeamParticle(Ptr<BeamParticleData>::const_pointer in) { _beam=in; }
0381   //@}
0382 
0383   /**
0384    * Set/Get the current tree being evolver for inheriting classes
0385    */
0386   //@{
0387   /**
0388    * Get the tree
0389    */
0390   tShowerTreePtr currentTree() { return _currenttree; }
0391 
0392   /**
0393    * Set the tree
0394    */
0395   void currentTree(tShowerTreePtr tree) { _currenttree=tree; }
0396 
0397   //@}
0398 
0399   /**
0400    *  Access the maximum number of attempts to generate the shower
0401    */
0402   unsigned int maximumTries() const { return _maxtry; }
0403 
0404   /**
0405    * Set/Get the ShowerProgenitor for the current shower
0406    */
0407   //@{
0408   /**
0409    *  Access the progenitor
0410    */
0411   ShowerProgenitorPtr progenitor() { return _progenitor; }
0412 
0413   /**
0414    *  Set the progenitor
0415    */
0416   void progenitor(ShowerProgenitorPtr in) { _progenitor=in; }
0417   //@}
0418 
0419   /**
0420    *  Calculate the intrinsic \f$p_T\f$.
0421    */
0422   virtual void generateIntrinsicpT(vector<ShowerProgenitorPtr>);
0423 
0424   /**
0425    *  Access to the intrinsic \f$p_T\f$ for inheriting classes
0426    */
0427   map<tShowerProgenitorPtr,pair<Energy,double> > & intrinsicpT() { return _intrinsic; }
0428 
0429   /**
0430    *  find the maximally allowed pt acc to the hard process. 
0431    */
0432   void setupMaximumScales(const vector<ShowerProgenitorPtr> &,XCPtr);
0433 
0434   /**
0435    *  find the relevant hard scales for profile scales. 
0436    */
0437   void setupHardScales(const vector<ShowerProgenitorPtr> &,XCPtr);
0438 
0439   /**
0440    *  Convert the HardTree into an extra shower emission 
0441    */
0442   void convertHardTree(bool hard,ShowerInteraction type);
0443 
0444 protected:
0445 
0446   /**
0447    * Find the parton extracted from the incoming particle after ISR
0448    */
0449   PPtr findFirstParton(tPPtr seed) const;
0450 
0451   /**
0452    * Fix Remnant connections after ISR
0453    */
0454   tPPair remakeRemnant(tPPair oldp); 
0455 
0456 protected:
0457 
0458   /**
0459    *  Start the shower of a timelike particle
0460    */
0461   virtual bool startTimeLikeShower(ShowerInteraction);
0462 
0463   /**
0464    *  Update of the time-like stuff
0465    */
0466   void updateHistory(tShowerParticlePtr particle);
0467 
0468   /**
0469    *  Start the shower of a spacelike particle
0470    */
0471   virtual bool startSpaceLikeShower(PPtr,ShowerInteraction);
0472 
0473   /**
0474    *  Start the shower of a spacelike particle
0475    */
0476   virtual bool 
0477   startSpaceLikeDecayShower(const ShowerParticle::EvolutionScales & maxScales,
0478                 Energy minimumMass,ShowerInteraction);
0479 
0480   /**
0481    * Select the branching for the next time-like emission
0482    */
0483   Branching selectTimeLikeBranching(tShowerParticlePtr particle,
0484                     ShowerInteraction type,
0485                     HardBranchingPtr branch);
0486 
0487   /**
0488    * Select the branching for the next space-like emission in a decay
0489    */
0490   Branching selectSpaceLikeDecayBranching(tShowerParticlePtr particle,
0491                       const ShowerParticle::EvolutionScales & maxScales,
0492                       Energy minmass,ShowerInteraction type,
0493                       HardBranchingPtr branch);
0494   /**
0495    *  Create the timelike child of a branching
0496    */
0497   ShowerParticleVector createTimeLikeChildren(tShowerParticlePtr particle,
0498                           IdList ids);
0499 
0500   /**
0501    *  Vetos for the timelike shower
0502    */
0503   virtual bool timeLikeVetoed(const Branching &,ShowerParticlePtr);
0504 
0505   /**
0506    *  Vetos for the spacelike shower
0507    */
0508   virtual bool spaceLikeVetoed(const Branching &,ShowerParticlePtr);
0509 
0510   /**
0511    *  Vetos for the spacelike shower
0512    */
0513   virtual bool spaceLikeDecayVetoed(const Branching &,ShowerParticlePtr);
0514 
0515   /**
0516    *  Only generate the hard emission, for testing only.
0517    */
0518   bool hardOnly() const {return _limitEmissions==3;}
0519 
0520   /**
0521    *  Check the flags
0522    */
0523   void checkFlags();
0524 
0525   /**
0526    *
0527    */
0528   void addFSRUsingDecayPOWHEG(HardTreePtr ISRTree);
0529 
0530 public:
0531 
0532   /** @name Functions used by the persistent I/O system. */
0533   //@{
0534   /**
0535    * Function used to write out object persistently.
0536    * @param os the persistent output stream written to.
0537    */
0538   void persistentOutput(PersistentOStream & os) const;
0539 
0540   /**
0541    * Function used to read in object persistently.
0542    * @param is the persistent input stream read from.
0543    * @param version the version number of the object when written.
0544    */
0545   void persistentInput(PersistentIStream & is, int version);
0546   //@}
0547 
0548   /**
0549    * The standard Init function used to initialize the interfaces.
0550    * Called exactly once for each class by the class description system
0551    * before the main function starts or
0552    * when this class is dynamically loaded.
0553    */
0554   static void Init();
0555 
0556 protected:
0557 
0558   /**
0559    * The main method which manages the showering of a subprocess.
0560    */
0561   virtual tPPair cascade(tSubProPtr sub, XCPtr xcomb);
0562 
0563   /**
0564    *  Decay a ShowerTree
0565    */
0566   void decay(ShowerTreePtr tree, ShowerDecayMap & decay);
0567 
0568 protected:
0569 
0570   /** @name Clone Methods. */
0571   //@{
0572   /**
0573    * Make a simple clone of this object.
0574    * @return a pointer to the new object.
0575    */
0576   virtual IBPtr clone() const;
0577 
0578   /** Make a clone of this object, possibly modifying the cloned object
0579    * to make it sane.
0580    * @return a pointer to the new object.
0581    */
0582   virtual IBPtr fullclone() const;
0583   //@}
0584 
0585 protected:
0586 
0587   /**
0588    * Initialize this object after the setup phase before saving an
0589    * EventGenerator to disk.
0590    * @throws InitException if object could not be initialized properly.
0591    */
0592   virtual void doinit();
0593 
0594   /**
0595    * Initialize this object. Called in the run phase just before
0596    * a run begins.
0597    */
0598   virtual void doinitrun();
0599   //@}
0600 
0601 private:
0602 
0603   /**
0604    * The assignment operator is private and must never be called.
0605    * In fact, it should not even be implemented.
0606    */
0607   QTildeShowerHandler & operator=(const QTildeShowerHandler &) = delete;
0608 
0609 private:
0610 
0611 
0612   /**
0613    *  Stuff from the ShowerHandler
0614    */
0615   //@{
0616 
0617   /**
0618    *  The ShowerTree for the hard process
0619    */
0620   ShowerTreePtr hard_;
0621 
0622   /**
0623    *  The ShowerTree for the decays
0624    */
0625   ShowerDecayMap decay_;
0626 
0627   /**
0628    *  The ShowerTrees for which the initial shower 
0629    */
0630   vector<ShowerTreePtr> done_;
0631   //@}
0632 
0633 private :
0634 
0635   /**
0636    * Pointer to the splitting generator
0637    */
0638   SplittingGeneratorPtr _splittingGenerator;
0639 
0640   /**
0641    *  Maximum number of tries to generate the shower of a particular tree
0642    */
0643   unsigned int _maxtry;
0644 
0645   /**
0646    * Matrix element correction switch
0647    */
0648   unsigned int _meCorrMode;
0649 
0650   /**
0651    *  Control of the reconstruction option
0652    */
0653   unsigned int _evolutionScheme;
0654 
0655   /**
0656    * If hard veto pT scale is being read-in this determines
0657    * whether the read-in value is applied to primary and 
0658    * secondary (MPI) scatters or just the primary one, with
0659    * the usual computation of the veto being performed for
0660    * the secondary (MPI) scatters.
0661    */
0662   bool _hardVetoReadOption; 
0663 
0664   /**
0665    * rms intrinsic pT of Gaussian distribution
0666    */
0667   Energy _iptrms;
0668 
0669    /**
0670    * Proportion of inverse quadratic intrinsic pT distribution
0671    */
0672   double _beta;
0673 
0674   /**
0675    * Parameter for inverse quadratic: 2*Beta*Gamma/(sqr(Gamma)+sqr(intrinsicpT))
0676    */
0677   Energy _gamma;
0678 
0679   /**
0680    * Upper bound on intrinsic pT for inverse quadratic
0681    */
0682   Energy _iptmax;
0683 
0684   /**
0685    *  Limit the number of emissions for testing
0686    */
0687   unsigned int _limitEmissions;
0688   
0689   /**
0690    *  The progenitor of the current shower
0691    */
0692   ShowerProgenitorPtr _progenitor;
0693 
0694   /**
0695    *  Matrix element
0696    */
0697   HwMEBasePtr _hardme;
0698 
0699   /**
0700    *  Decayer
0701    */
0702   HwDecayerBasePtr _decayme;
0703 
0704   /**
0705    * The ShowerTree currently being showered
0706    */
0707   ShowerTreePtr _currenttree;
0708 
0709   /**
0710    *  The HardTree currently being showered
0711    */
0712   HardTreePtr _hardtree;
0713 
0714   /**
0715    *  Radiation enhancement factors for use with the veto algorithm
0716    *  if needed by the soft matrix element correction 
0717    */
0718   //@{
0719   /**
0720    *  Enhancement factor for initial-state radiation
0721    */
0722   double _initialenhance;
0723 
0724   /**
0725    *  Enhancement factor for final-state radiation
0726    */
0727   double _finalenhance;
0728   //@}
0729 
0730   /**
0731    *  The beam particle data for the current initial-state shower
0732    */
0733   Ptr<BeamParticleData>::const_pointer _beam;
0734 
0735   /**
0736    *  Storage of the intrinsic \f$p_t\f$ of the particles
0737    */
0738   map<tShowerProgenitorPtr,pair<Energy,double> > _intrinsic;
0739 
0740   /**
0741    * Vetoes
0742    */
0743   vector<ShowerVetoPtr> _vetoes;
0744 
0745   /**
0746    *  Full Shower Vetoes
0747    */
0748   vector<FullShowerVetoPtr> _fullShowerVetoes;
0749 
0750   /**
0751    *  Number of iterations for reweighting
0752    */
0753   unsigned int _nReWeight;
0754 
0755   /**
0756    *  Whether or not we are reweighting
0757    */
0758   bool _reWeight;
0759 
0760   /**
0761    *  number of IS emissions
0762    */
0763   unsigned int _nis;
0764 
0765   /**
0766    *  Number of FS emissions
0767    */
0768   unsigned int _nfs;
0769 
0770   /**
0771    *  The option for wqhich interactions to use
0772    */
0773   ShowerInteraction interaction_;
0774 
0775   /**
0776    *  Truncated shower switch
0777    */
0778   bool _trunc_Mode;
0779 
0780   /**
0781    *  Mode for the hard emissions
0782    */
0783   int _hardEmission;
0784 
0785   /**
0786    *  Option for the kernal for soft correlations
0787    */
0788   unsigned int _softOpt;
0789 
0790   /**
0791    *  Option for hard radiation in POWHEG events
0792    */
0793   bool _hardPOWHEG;
0794 
0795   /**
0796    * True if no warnings about incorrect hard emission
0797    * mode setting have been issued yet
0798    */
0799   static bool _hardEmissionWarn;
0800 
0801   /**
0802    * True if no warnings about missing truncated shower 
0803    * have been issued yet
0804    */
0805   static bool _missingTruncWarn;
0806 
0807   /**
0808    * The relevant hard scale to be used in the profile scales
0809    */
0810   Energy muPt;
0811 
0812 private:
0813   /**
0814    *  Pointer to the various objects
0815    */
0816   //@{
0817   /**
0818    *  Pointer to the KinematicsReconstructor object
0819    */
0820   KinematicsReconstructorPtr _reconstructor;
0821 
0822   /**
0823    *  Pointer to the PartnerFinder object
0824    */
0825   PartnerFinderPtr _partnerfinder;
0826 
0827   //@}
0828 
0829 };
0830 
0831 }
0832 
0833 #endif /* HERWIG_QTildeShowerHandler_H */