herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
ClusterFissioner.h
1 // -*- C++ -*-
2 //
3 // ClusterFissioner.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_ClusterFissioner_H
10 #define HERWIG_ClusterFissioner_H
11 
12 #include <ThePEG/Interface/Interfaced.h>
13 #include "CluHadConfig.h"
14 #include "HadronSelector.h"
15 #include "ClusterFissioner.fh"
16 
17 namespace Herwig {
18 using namespace ThePEG;
19 
20  //class Cluster; // forward declaration
21 
72 
73 public:
74 
81 
83 
101  tPVector fission(ClusterVector & clusters, bool softUEisOn);
102 
103 public:
104 
111  void persistentOutput(PersistentOStream & os) const;
112 
118  void persistentInput(PersistentIStream & is, int version);
120 
124  static void Init();
125 
126 protected:
127 
134  virtual IBPtr clone() const;
135 
140  virtual IBPtr fullclone() const;
142 
143 private:
144 
148  ClusterFissioner & operator=(const ClusterFissioner &) = delete;
149 
169  void cut(stack<ClusterPtr> &,
170  ClusterVector&, tPVector & finalhadrons, bool softUEisOn);
171 
172 public:
173 
177  typedef pair<PPtr,PPtr> PPair;
178 
182  typedef pair<PPair,PPair> cutType;
183 
200  virtual cutType cutTwo(ClusterPtr &, tPVector & finalhadrons, bool softUEisOn);
201 
205  virtual cutType cutThree(ClusterPtr &, tPVector & finalhadrons, bool softUEisOn);
207 public:
208 
215  PPair produceHadron(tcPDPtr hadron, tPPtr newPtr, const Lorentz5Momentum &a,
216  const LorentzPoint &b) const;
217 protected:
218 
227  PPair produceCluster(tPPtr ptrQ, tPPtr newPtr, const Lorentz5Momentum &a,
228  const LorentzPoint &b, const Lorentz5Momentum &c,
229  const Lorentz5Momentum &d, const bool rem,
230  tPPtr spect=tPPtr(), bool remSpect=false) const;
231 
237  void drawNewFlavour(PPtr& newPtrPos,PPtr& newPtrNeg) const;
238 
245  void drawNewFlavourEnhanced(PPtr& newPtrPos,PPtr& newPtrNeg, Energy2 mass2) const;
246 
247 
274  Energy drawChildMass(const Energy M, const Energy m1, const Energy m2,
275  const Energy m, const double exp, const bool soft) const;
276 
280  void calculateKinematics(const Lorentz5Momentum &pClu,
281  const Lorentz5Momentum &p0Q1,
282  const bool toHadron1, const bool toHadron2,
283  Lorentz5Momentum &pClu1, Lorentz5Momentum &pClu2,
284  Lorentz5Momentum &pQ1, Lorentz5Momentum &pQb,
285  Lorentz5Momentum &pQ2, Lorentz5Momentum &pQ2b) const;
286 
294  void calculatePositions(const Lorentz5Momentum &pClu,
295  const LorentzPoint & positionClu,
296  const Lorentz5Momentum & pClu1,
297  const Lorentz5Momentum & pClu2,
298  LorentzPoint & positionClu1,
299  LorentzPoint & positionClu2 ) const;
300 
301 
302 
306  Energy2 clustermass(const ClusterPtr & cluster);
307 
308 protected:
309 
315  HadronSelectorPtr hadronsSelector() const {return _hadronsSelector;}
316 
320  Energy btClM() const {return _btClM;}
321 
325  double pSplitLight() const {return _pSplitLight;}
326 
330  double pSplitBottom() const {return _pSplitBottom;}
331 
335  double pSplitCharm() const {return _pSplitCharm;}
336 
340  double pSplitExotic() const {return _pSplitExotic;}
342 
343 private:
344 
348  bool isHeavy(tcClusterPtr );
349 
353  HadronSelectorPtr _hadronsSelector;
354 
360  Energy _clMaxLight;
361  Energy _clMaxBottom;
362  Energy _clMaxCharm;
363  Energy _clMaxExotic;
365 
369  double _clPowLight;
370  double _clPowBottom;
371  double _clPowCharm;
372  double _clPowExotic;
374 
378  double _pSplitLight;
379  double _pSplitBottom;
380  double _pSplitCharm;
381  double _pSplitExotic;
382 
383 
384  // weights for alternaive cluster fission
385  double _fissionPwtUquark;
386  double _fissionPwtDquark;
387  double _fissionPwtSquark;
388 
393 
395 
399  Energy _btClM;
400 
404  int _iopRem;
405 
409  Tension _kappa;
410 
416 
420  Energy _m0Fission;
421 
427 
432  const double _maxScale = 20.;
433 
434 
435 };
436 
437 }
438 
439 #endif /* HERWIG_ClusterFissioner_H */
ThePEG::Ptr< Particle >::pointer PPtr
double pSplitCharm() const
Cluster splitting paramater for charm quarks.
int _fissionCluster
Flag used to determine between normal cluster fission and alternative cluster fission.
Energy btClM() const
Access to soft-cluster parameter.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
double pSplitBottom() const
Cluster splitting paramater for bottom quarks.
vector< ClusterPtr > ClusterVector
This file contains the typedef declarations used in Hadronization.
Definition: CluHadConfig.h:38
HadronSelectorPtr _hadronsSelector
A pointer to a Herwig::HadronSelector object for generating hadrons.
pair< PPair, PPair > cutType
Definition for use in the cut function.
ThePEG::Ptr< ParticleData >::transient_const_pointer tcPDPtr
ThePEG::Ptr< Particle >::transient_pointer tPPtr
Energy _m0Fission
Parameter that governs the strangeness enhancement scaling.
int _massMeasure
Flag that switches between mass measures used in strangeness enhancement: cluster mass...
Energy _btClM
Parameter used (2/b) for the beam cluster mass generation.
-*- C++ -*-
Tension _kappa
The string constant.
HadronSelectorPtr hadronsSelector() const
Access to the hadron selector.
This class handles clusters which are too heavy.
vector< tPPtr > tPVector
pair< PPtr, PPtr > PPair
Definition for easy passing of two particles.
double pSplitExotic() const
Cluster splitting paramater for exotic particles.
double pSplitLight() const
Cluster splitting paramater for light quarks.
int _enhanceSProb
Flag that switches between no strangeness enhancement, scaling enhancement, and exponential enhanceme...
int _iopRem
Flag used to determine what distributions to use for the cluster masses.