KNOHadronization.h
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*!
3 
4 \class genie::KNOHadronization
5 
6 \brief A KNO-based hadronization model.
7 
8  Is a concrete implementation of the EventRecordVisitorI interface.
9 
10 \author The main authors of this model are:
11 
12  - Costas Andreopoulos <costas.andreopoulos \at stfc.ac.uk>
13  University of Liverpool & STFC Rutherford Appleton Lab
14 
15  - Hugh Gallagher <gallag@minos.phy.tufts.edu>
16  Tufts University
17 
18  - Tinjun Yang <tjyang@stanford.edu>
19  Stanford University
20 
21  This is an improved version of the legacy neugen3 KNO-based model.
22  Giles Barr, Geoff Pearce, and Hugh Gallagher were listed as authors
23  of the original neugen3 model.
24 
25  Strange baryon production was implemented by Keith Hofmann and
26  Hugh Gallagher (Tufts)
27 
28  Production of etas was added by Ji Liu (W&M)
29 
30  Changes required to implement the GENIE Boosted Dark Matter module
31  were installed by Josh Berger (Univ. of Wisconsin)
32 
33 \created August 17, 2004
34 
35 \cpright Copyright (c) 2003-2019, The GENIE Collaboration
36  For the full text of the license visit http://copyright.genie-mc.org
37  or see $GENIE/LICENSE
38 */
39 //____________________________________________________________________________
40 
41 #ifndef _KNO_HADRONIZATION_H_
42 #define _KNO_HADRONIZATION_H_
43 
44 #include <TGenPhaseSpace.h>
45 
46 #include "Physics/Decay/Decayer.h"
48 
49 
50 class TF1;
51 
52 namespace genie {
53 
54 class Decayer;
55 //class Spline;
56 
58 
59 public:
60 
62  KNOHadronization(string config);
63  virtual ~KNOHadronization();
64 
65  // Implement the EventRecordVisitorI interface
66  void ProcessEventRecord(GHepRecord * event) const;
67 
68  // Overload the Algorithm::Configure() methods to load private data
69  // members from configuration options
70  virtual void Configure(const Registry & config);
71  virtual void Configure(string config);
72 
73  friend class KNOTunedQPMDISPXSec ;
74 
75 private:
76 
77  void LoadConfig (void);
78  void Initialize (void) const;
79  TClonesArray * Hadronize (const Interaction* ) const;
80  double Weight (void) const;
81  PDGCodeList * SelectParticles (const Interaction*) const;
82  TH1D * MultiplicityProb (const Interaction*, Option_t* opt = "") const;
83  bool AssertValidity (const Interaction * i) const;
84  PDGCodeList * GenerateHadronCodes (int mult, int maxQ, double W) const;
85  int GenerateBaryonPdgCode (int mult, int maxQ, double W) const;
86  int HadronShowerCharge (const Interaction * ) const;
87  double KNO (int nu, int nuc, double z) const;
88  double AverageChMult (int nu, int nuc, double W) const;
89  void HandleDecays (TClonesArray * particle_list) const;
90  double ReWeightPt2 (const PDGCodeList & pdgcv) const;
91  double MaxMult (const Interaction * i) const;
92  TH1D * CreateMultProbHist (double maxmult) const;
93  void ApplyRijk (const Interaction * i, bool norm, TH1D * mp) const;
94  double Wmin (void) const;
95 
96  TClonesArray* DecayMethod1 (double W, const PDGCodeList & pdgv, bool reweight_decays) const;
97  TClonesArray* DecayMethod2 (double W, const PDGCodeList & pdgv, bool reweight_decays) const;
98  TClonesArray* DecayBackToBack (double W, const PDGCodeList & pdgv) const;
99 
100  bool PhaseSpaceDecay(
101  TClonesArray & pl, TLorentzVector & pd,
102  const PDGCodeList & pdgv, int offset=0, bool reweight=false) const;
103 
104  mutable TGenPhaseSpace fPhaseSpaceGenerator; ///< a phase space generator
105  mutable double fWeight; ///< weight for generated event
106 
107  // Configuration parameters
108  // Note: additional configuration parameters common to all hadronizers
109  // (Wcut,Rijk,...) are declared one layer down in the inheritance tree
110 
111  bool fForceNeuGenLimit; ///< force upper hadronic multiplicity to NeuGEN limit
112 //bool fUseLegacyKNOSpline; ///< use legacy spline instead of Levy
113  bool fUseIsotropic2BDecays;///< force isotropic, non-reweighted 2-body decays for consistency with neugen/daikon
114  bool fUseBaryonXfPt2Param; ///< Generate baryon xF,pT2 from experimental parameterization?
115  bool fReWeightDecays; ///< Reweight phase space decays?
116  bool fForceDecays; ///< force decays of unstable hadrons produced?
117  bool fForceMinMult; ///< force minimum multiplicity if (at low W) generated less?
118  bool fGenerateWeighted; ///< generate weighted events?
119  double fPhSpRwA; ///< parameter for phase space decay reweighting
120  double fPpi0; ///< {pi0 pi0 } production probability
121  double fPpic; ///< {pi+ pi- } production probability
122  double fPKc; ///< {K+ K- } production probability
123  double fPK0; ///< {K0 K0bar} production probability
124  double fPpi0eta; ///< {Pi0 eta} production probability
125  double fPeta; ///< {eta eta} production probability
126  double fAvp; ///< offset in average charged hadron multiplicity = f(W) relation for vp
127  double fAvn; ///< offset in average charged hadron multiplicity = f(W) relation for vn
128  double fAvbp; ///< offset in average charged hadron multiplicity = f(W) relation for vbp
129  double fAvbn; ///< offset in average charged hadron multiplicity = f(W) relation for vbn
130  double fBvp; ///< slope in average charged hadron multiplicity = f(W) relation for vp
131  double fBvn; ///< slope in average charged hadron multiplicity = f(W) relation for vn
132  double fBvbp; ///< slope in average charged hadron multiplicity = f(W) relation for vbp
133  double fBvbn; ///< slope in average charged hadron multiplicity = f(W) relation for vbn
134  double fAhyperon; ///< parameter controlling strange baryon production probability via associated production (P=a+b*lnW^2)
135  double fBhyperon; ///< see above
136  double fCvp; ///< Levy function parameter for vp
137  double fCvn; ///< Levy function parameter for vn
138  double fCvbp; ///< Levy function parameter for vbp
139  double fCvbn; ///< Levy function parameter for vbn
140  TF1 * fBaryonXFpdf; ///< baryon xF PDF
141  TF1 * fBaryonPT2pdf; ///< baryon pT^2 PDF
142 
143  // nuegen parameters
144  double fWcut; ///< Rijk applied for W<Wcut (see DIS/RES join scheme)
145  double fRvpCCm2; ///< Rijk: vp, CC, multiplicity = 2
146  double fRvpCCm3; ///< Rijk: vp, CC, multiplicity = 3
147  double fRvpNCm2; ///< Rijk: vp, NC, multiplicity = 2
148  double fRvpNCm3; ///< Rijk: vp, NC, multiplicity = 3
149  double fRvnCCm2; ///< Rijk: vn, CC, multiplicity = 2
150  double fRvnCCm3; ///< Rijk: vn, CC, multiplicity = 3
151  double fRvnNCm2; ///< Rijk: vn, NC, multiplicity = 2
152  double fRvnNCm3; ///< Rijk: vn, NC, multiplicity = 3
153  double fRvbpCCm2; ///< Rijk: vbp, CC, multiplicity = 2
154  double fRvbpCCm3; ///< Rijk: vbp, CC, multiplicity = 3
155  double fRvbpNCm2; ///< Rijk: vbp, NC, multiplicity = 2
156  double fRvbpNCm3; ///< Rijk: vbp, NC, multiplicity = 3
157  double fRvbnCCm2; ///< Rijk: vbn, CC, multiplicity = 2
158  double fRvbnCCm3; ///< Rijk: vbn, CC, multiplicity = 3
159  double fRvbnNCm2; ///< Rijk: vbn, NC, multiplicity = 2
160  double fRvbnNCm3; ///< Rijk: vbn, NC, multiplicity = 3
161 
162 };
163 
164 } // genie namespace
165 
166 #endif // _KNO_HADRONIZATION_H_
double fRvnCCm2
Rijk: vn, CC, multiplicity = 2.
double fPpi0eta
{Pi0 eta} production probability
THE MAIN GENIE PROJECT NAMESPACE
Definition: AlgCmp.h:26
double ReWeightPt2(const PDGCodeList &pdgcv) const
double fRvbnNCm2
Rijk: vbn, NC, multiplicity = 2.
double fRvbnCCm2
Rijk: vbn, CC, multiplicity = 2.
double fWcut
Rijk applied for W<Wcut (see DIS/RES join scheme)
int HadronShowerCharge(const Interaction *) const
Defines the EventRecordVisitorI interface. Concrete implementations of this interface use the &#39;Visito...
double fAvn
offset in average charged hadron multiplicity = f(W) relation for vn
opt
Definition: train.py:196
double fPeta
{eta eta} production probability
TClonesArray * Hadronize(const Interaction *) const
double fCvp
Levy function parameter for vp.
double fCvbp
Levy function parameter for vbp.
double fRvnNCm2
Rijk: vn, NC, multiplicity = 2.
bool fReWeightDecays
Reweight phase space decays?
TF1 * fBaryonPT2pdf
baryon pT^2 PDF
TClonesArray * DecayMethod2(double W, const PDGCodeList &pdgv, bool reweight_decays) const
PDGCodeList * SelectParticles(const Interaction *) const
TH1D * CreateMultProbHist(double maxmult) const
double fRvbpCCm3
Rijk: vbp, CC, multiplicity = 3.
double fPpi0
{pi0 pi0 } production probability
double fPK0
{K0 K0bar} production probability
double fRvbpNCm2
Rijk: vbp, NC, multiplicity = 2.
A list of PDG codes.
Definition: PDGCodeList.h:33
void HandleDecays(TClonesArray *particle_list) const
bool fForceNeuGenLimit
force upper hadronic multiplicity to NeuGEN limit
double MaxMult(const Interaction *i) const
double fRvpCCm2
Rijk: vp, CC, multiplicity = 2.
bool PhaseSpaceDecay(TClonesArray &pl, TLorentzVector &pd, const PDGCodeList &pdgv, int offset=0, bool reweight=false) const
double fRvbnCCm3
Rijk: vbn, CC, multiplicity = 3.
Summary information for an interaction.
Definition: Interaction.h:55
int GenerateBaryonPdgCode(int mult, int maxQ, double W) const
bool fForceDecays
force decays of unstable hadrons produced?
double fRvbpCCm2
Rijk: vbp, CC, multiplicity = 2.
double fBvbp
slope in average charged hadron multiplicity = f(W) relation for vbp
void ProcessEventRecord(GHepRecord *event) const
PDGCodeList * GenerateHadronCodes(int mult, int maxQ, double W) const
double fAvp
offset in average charged hadron multiplicity = f(W) relation for vp
double fCvbn
Levy function parameter for vbn.
static Config * config
Definition: config.cpp:1054
Computes DIS differential cross sections. Is a concrete implementation of the XSecAlgorithmI interfac...
double fBhyperon
see above
double z
double KNO(int nu, int nuc, double z) const
bool fGenerateWeighted
generate weighted events?
double fAvbn
offset in average charged hadron multiplicity = f(W) relation for vbn
TH1D * MultiplicityProb(const Interaction *, Option_t *opt="") const
bool AssertValidity(const Interaction *i) const
double fPKc
{K+ K- } production probability
double Wmin(void) const
double fWeight
weight for generated event
A KNO-based hadronization model.
TClonesArray * DecayBackToBack(double W, const PDGCodeList &pdgv) const
double fRvbnNCm3
Rijk: vbn, NC, multiplicity = 3.
void Initialize(void) const
double fRvbpNCm3
Rijk: vbp, NC, multiplicity = 3.
auto norm(Vector const &v)
Return norm of the specified vector.
double fCvn
Levy function parameter for vn.
TGenPhaseSpace fPhaseSpaceGenerator
a phase space generator
double fPhSpRwA
parameter for phase space decay reweighting
bool fUseIsotropic2BDecays
force isotropic, non-reweighted 2-body decays for consistency with neugen/daikon
double fBvn
slope in average charged hadron multiplicity = f(W) relation for vn
double fBvp
slope in average charged hadron multiplicity = f(W) relation for vp
double fAhyperon
parameter controlling strange baryon production probability via associated production (P=a+b*lnW^2) ...
double Weight(void) const
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:66
double fRvpNCm3
Rijk: vp, NC, multiplicity = 3.
double AverageChMult(int nu, int nuc, double W) const
double fBvbn
slope in average charged hadron multiplicity = f(W) relation for vbn
bool fUseBaryonXfPt2Param
Generate baryon xF,pT2 from experimental parameterization?
TClonesArray * DecayMethod1(double W, const PDGCodeList &pdgv, bool reweight_decays) const
double fRvnCCm3
Rijk: vn, CC, multiplicity = 3.
double fRvnNCm3
Rijk: vn, NC, multiplicity = 3.
bool fForceMinMult
force minimum multiplicity if (at low W) generated less?
double fRvpCCm3
Rijk: vp, CC, multiplicity = 3.
double fPpic
{pi+ pi- } production probability
GENIE&#39;s GHEP MC event record.
Definition: GHepRecord.h:46
virtual void Configure(const Registry &config)
Event finding and building.
void ApplyRijk(const Interaction *i, bool norm, TH1D *mp) const
TF1 * fBaryonXFpdf
baryon xF PDF
double fRvpNCm2
Rijk: vp, NC, multiplicity = 2.
double fAvbp
offset in average charged hadron multiplicity = f(W) relation for vbp