herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
ConstituentReshuffler.h
1 // -*- C++ -*-
2 //
3 // ConstituentReshuffler.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_ConstituentReshuffler_H
10 #define HERWIG_ConstituentReshuffler_H
11 //
12 // This is the declaration of the ConstituentReshuffler class.
13 //
14 
15 #include "ThePEG/Handlers/HandlerBase.h"
16 #include "ThePEG/Utilities/Exception.h"
17 #include "Herwig/Shower/PerturbativeProcess.h"
18 
19 namespace Herwig {
20 
21 using namespace ThePEG;
22 
33 
34 public:
35 
42 
46  virtual ~ConstituentReshuffler();
48 
49 public:
50 
59  void reshuffle(PList& out,
60  PPair& in,
61  PList& intermediates,
62  const bool decay,
63  PList& decayPartons,
64  PList& decayRecoilers);
65 
74  void reshuffle(PList& out,
75  PPair& in,
76  PList& intermediates,
77  const bool decay=false) {
78 
79  PList decayPartons;
80  PList decayRecoilers;
81 
82  reshuffle(out,
83  in,
84  intermediates,
85  decay,
86  decayPartons,
87  decayRecoilers);
88  }
89 
90 
99  void hardProcDecayReshuffle(PList& decaying,
100  PList& eventOutgoing,
101  PList& eventHard,
102  PPair& eventIncoming,
103  PList& eventIntermediates) ;
104 
112  void decayReshuffle(PerturbativeProcessPtr& decayProc,
113  PList& eventOutgoing,
114  PList& eventHard,
115  PList& eventIntermediates) ;
116 
121  void updateEvent( PList& intermediates,
122  PList& eventIntermediates,
123  PList& out,
124  PList& eventOutgoing,
125  PList& eventHard,
126  PerturbativeProcessPtr decayProc = PerturbativeProcessPtr() ) ;
127 
128 
134  void updateSpinInfo( PPtr& oldPart,
135  PPtr& newPart ) ;
136 
137 protected:
138 
144 
145  ReshuffleEquation (Energy q,
146  PList::iterator m_begin,
147  PList::iterator m_end)
148  : w(q), p_begin(m_begin), p_end(m_end) {}
149 
150  typedef double ArgType;
151  typedef double ValType;
152 
153  static double aUnit();
154  static double vUnit();
155 
156  double operator() (double xi) const;
157 
158  Energy w;
159 
160  PList::iterator p_begin;
161  PList::iterator p_end;
162 
163  };
164 
171 
172  DecayReshuffleEquation (Energy q,
173  PList::iterator m_begin,
174  PList::iterator m_end,
175  PList::iterator n_begin,
176  PList::iterator n_end)
177  : w(q), p_begin(m_begin), p_end(m_end), r_begin(n_begin), r_end(n_end) {}
178 
179  typedef double ArgType;
180  typedef double ValType;
181 
182  static double aUnit();
183  static double vUnit();
184 
185  double operator() (double xi) const;
186 
187  Energy w;
188 
189  PList::iterator p_begin;
190  PList::iterator p_end;
191 
192  PList::iterator r_begin;
193  PList::iterator r_end;
194  };
195 
196 
197 
198 public:
199 
206  void persistentOutput(PersistentOStream & os) const;
207 
213  void persistentInput(PersistentIStream & is, int version);
215 
222  static void Init();
223 
224 protected:
225 
232  virtual IBPtr clone() const;
233 
238  virtual IBPtr fullclone() const;
240 
241 
242 // If needed, insert declarations of virtual function defined in the
243 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
244 
245 
246 private:
247 
253 
258  ConstituentReshuffler & operator=(const ConstituentReshuffler &) = delete;
259 
260 };
261 
262 }
263 
264 #include "ThePEG/Utilities/ClassTraits.h"
265 
266 namespace ThePEG {
267 
272 template <>
273 struct BaseClassTrait<Herwig::ConstituentReshuffler,1> {
275  typedef HandlerBase NthBase;
276 };
277 
280 template <>
281 struct ClassTraits<Herwig::ConstituentReshuffler>
282  : public ClassTraitsBase<Herwig::ConstituentReshuffler> {
284  static string className() { return "Herwig::ConstituentReshuffler"; }
292  static string library() { return "HwDipoleShower.so"; }
293 };
294 
297 }
298 
299 #endif /* HERWIG_ConstituentReshuffler_H */
ThePEG::Ptr< Particle >::pointer PPtr
void reshuffle(PList &out, PPair &in, PList &intermediates, const bool decay=false)
Reshuffle the outgoing partons to constituent masses.
static ClassDescription< ConstituentReshuffler > initConstituentReshuffler
The static object used to initialize the description of this class.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
The ConstituentReshuffler class implements reshuffling of partons on their nominal mass shell to thei...
The function object defining the equation to be solved in the case of separate recoilers TODO - refin...
pair< PPtr, PPtr > PPair
-*- C++ -*-
The function object defining the equation to be solved.
list< PPtr > PList