Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // LightClusterDecayer.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef HERWIG_LightClusterDecayer_H
0010 #define HERWIG_LightClusterDecayer_H
0011 
0012 #include <ThePEG/Interface/Interfaced.h>
0013 #include "CluHadConfig.h"
0014 #include "HadronSelector.h"
0015 #include "LightClusterDecayer.fh"
0016 
0017 
0018 namespace Herwig {
0019 
0020 
0021 using namespace ThePEG;
0022 
0023 /** \ingroup Hadronization
0024  *  \class LightClusterDecayer
0025  *  \brief This class performs the decay of light clusters into a single hadron.
0026  *  \author Philip Stephens
0027  *  \author Alberto Ribon
0028  *
0029  *  This is the class that performs the decay of light clusters into 
0030  *  only one hadron. The major difficulty is that a kinematical reshuffling
0031  *  is necessary, between the cluster under consideration and its
0032  *  "neighbouring" clusters, to conserve energy-momentum in one-body decay.
0033  *  Notice that, differently from what happens in Fortran Herwig,
0034  *  light (that is below the threshold for the production of the lightest 
0035  *  pair of hadrons with the proper flavours) fission products, produced 
0036  *  by the fission of heavy clusters in ClusterFissioner 
0037  *  have been already "decayed" into single hadron (the lightest one 
0038  *  with proper flavour) by the same latter class, without require 
0039  *  any reshuffling. Therefore the light clusters that are treated in 
0040  *  this LightClusterDecayer class are produced directly 
0041  *  (originally) by the ClusterFinder. 
0042  *  
0043  *  Notice:
0044  *  - The choice of the candidate cluster with whom to reshuffle momentum 
0045  *    is based on the minimal space-time distance from the light cluster.
0046  *  - An alternate choice of what is considered a "neighbour" could be
0047  *    implemented but was not considered for Herwig.
0048  *
0049  *  @see HadronSelector 
0050  * @see \ref LightClusterDecayerInterfaces "The interfaces"
0051  * defined for LightClusterDecayer.
0052  */ 
0053 class LightClusterDecayer: public Interfaced {
0054 
0055 public:
0056 
0057   /** @name Standard constructors and destructors. */
0058   //@{
0059   /**
0060    * Default constructor.
0061    */
0062   LightClusterDecayer() {}
0063   //@}
0064 
0065   /**
0066    * This method does the decay of light hadron in one hadron.
0067    *
0068    * This method requires a kinematical reshuffling for energy-momentum 
0069    * conservation. This is done explicitly by the (private) method 
0070    * reshuffling().
0071    */
0072   bool decay(ClusterVector & clusters, tPVector & finalhadrons);
0073 
0074 public:
0075 
0076   /** @name Functions used by the persistent I/O system. */
0077   //@{
0078   /**
0079    * Function used to write out object persistently.
0080    * @param os the persistent output stream written to.
0081    */
0082   void persistentOutput(PersistentOStream & os) const;
0083 
0084   /**
0085    * Function used to read in object persistently.
0086    * @param is the persistent input stream read from.
0087    * @param version the version number of the object when written.
0088    */
0089   void persistentInput(PersistentIStream & is, int version);
0090   //@}
0091 
0092   /**
0093    * Standard Init function used to initialize the interfaces.
0094    */
0095   static void Init();
0096 
0097 protected:
0098 
0099   /** @name Clone Methods. */
0100   //@{
0101   /**
0102    * Make a simple clone of this object.
0103    * @return a pointer to the new object.
0104    */
0105   virtual IBPtr clone() const;
0106 
0107   /** Make a clone of this object, possibly modifying the cloned object
0108    * to make it sane.
0109    * @return a pointer to the new object.
0110    */
0111   virtual IBPtr fullclone() const;
0112   //@}
0113 
0114 private:
0115 
0116   /**
0117    * Private and non-existent assignment operator.
0118    */
0119   LightClusterDecayer & operator=(const LightClusterDecayer &) = delete;
0120 
0121   /**
0122    * This (private) method, called by decay(), takes care of the kinematical
0123    * reshuffling necessary for energy-momentum conservation.
0124    */
0125   bool reshuffling( const tcPDPtr, tClusterPtr, tClusterPtr,
0126             tClusterVector &, tPVector & finalhadrons) 
0127    ; 
0128   
0129   /**
0130    *  This (private) method, called by decay(), performs reshuffling in the 
0131    * special case of a semileptonic partonic b/c decay 
0132    * @param hadron The hadron to be produced
0133    * @param cluster The cluster to be reshuffled
0134    * @param finalhadrons The vector of outgoing hadrons
0135    */
0136   bool partonicReshuffle(const tcPDPtr hadron,const PPtr cluster,
0137              tPVector & finalhadrons);
0138 
0139   /**
0140    * A pointer to a Herwig::HadronSelector object used for producing hadrons.
0141    */
0142   Ptr<HadronSelector>::pointer _hadronSelector;
0143 };
0144 
0145 }
0146 
0147 #endif /* HERWIG_LightClusterDecayer_H */