herwig is hosted by Hepforge, IPPP Durham
Herwig  7.1.5
ClusterFissioner.h
1 // -*- C++ -*-
2 //
3 // ClusterFissioner.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2017 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 
82 
100  tPVector fission(ClusterVector & clusters, bool softUEisOn);
101 
102 public:
103 
110  void persistentOutput(PersistentOStream & os) const;
111 
117  void persistentInput(PersistentIStream & is, int version);
119 
123  static void Init();
124 
125 protected:
126 
133  virtual IBPtr clone() const;
134 
139  virtual IBPtr fullclone() const;
141 
142 private:
143 
147  ClusterFissioner & operator=(const ClusterFissioner &) = delete;
148 
168  void cut(stack<ClusterPtr> &,
169  ClusterVector&, tPVector & finalhadrons, bool softUEisOn);
170 
171 public:
172 
176  typedef pair<PPtr,PPtr> PPair;
177 
181  typedef pair<PPair,PPair> cutType;
182 
199  virtual cutType cutTwo(ClusterPtr &, tPVector & finalhadrons, bool softUEisOn);
200 
204  virtual cutType cutThree(ClusterPtr &, tPVector & finalhadrons, bool softUEisOn);
206 public:
207 
214  PPair produceHadron(tcPDPtr hadron, tPPtr newPtr, const Lorentz5Momentum &a,
215  const LorentzPoint &b) const;
216 protected:
217 
226  PPair produceCluster(tPPtr ptrQ, tPPtr newPtr, const Lorentz5Momentum &a,
227  const LorentzPoint &b, const Lorentz5Momentum &c,
228  const Lorentz5Momentum &d, const bool rem,
229  tPPtr spect=tPPtr(), bool remSpect=false) const;
230 
236  void drawNewFlavour(PPtr& newPtrPos,PPtr& newPtrNeg) const;
237 
264  Energy drawChildMass(const Energy M, const Energy m1, const Energy m2,
265  const Energy m, const double exp, const bool soft) const;
266 
270  void calculateKinematics(const Lorentz5Momentum &pClu,
271  const Lorentz5Momentum &p0Q1,
272  const bool toHadron1, const bool toHadron2,
273  Lorentz5Momentum &pClu1, Lorentz5Momentum &pClu2,
274  Lorentz5Momentum &pQ1, Lorentz5Momentum &pQb,
275  Lorentz5Momentum &pQ2, Lorentz5Momentum &pQ2b) const;
276 
284  void calculatePositions(const Lorentz5Momentum &pClu,
285  const LorentzPoint & positionClu,
286  const Lorentz5Momentum & pClu1,
287  const Lorentz5Momentum & pClu2,
288  LorentzPoint & positionClu1,
289  LorentzPoint & positionClu2 ) const;
290 
291 protected:
292 
298  HadronSelectorPtr hadronsSelector() const {return _hadronsSelector;}
299 
303  Energy btClM() const {return _btClM;}
304 
308  double pSplitLight() const {return _pSplitLight;}
309 
313  double pSplitBottom() const {return _pSplitBottom;}
314 
318  double pSplitCharm() const {return _pSplitCharm;}
319 
323  double pSplitExotic() const {return _pSplitExotic;}
325 
326 private:
327 
331  bool isHeavy(tcClusterPtr );
332 
336  HadronSelectorPtr _hadronsSelector;
337 
343  Energy _clMaxLight;
344  Energy _clMaxBottom;
345  Energy _clMaxCharm;
346  Energy _clMaxExotic;
348 
352  double _clPowLight;
353  double _clPowBottom;
354  double _clPowCharm;
355  double _clPowExotic;
357 
361  double _pSplitLight;
362  double _pSplitBottom;
363  double _pSplitCharm;
364  double _pSplitExotic;
366 
370  Energy _btClM;
371 
375  int _iopRem;
376 
380  Tension _kappa;
381 
382 };
383 
384 }
385 
386 #endif /* HERWIG_ClusterFissioner_H */
ThePEG::Ptr< Particle >::pointer PPtr
double pSplitCharm() const
Cluster splitting paramater for charm quarks.
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 _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 _iopRem
Flag used to determine what distributions to use for the cluster masses.