Version: SMASH-3.4
pauliblocking.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2015,2017-2018,2020,2022
4  * SMASH Team
5  *
6  * GNU General Public License (GPLv3 or later)
7  *
8  */
9 
10 #ifndef SRC_INCLUDE_SMASH_PAULIBLOCKING_H_
11 #define SRC_INCLUDE_SMASH_PAULIBLOCKING_H_
12 
13 #include <vector>
14 
15 #include "configuration.h"
16 #include "experimentparameters.h"
17 #include "forwarddeclarations.h"
18 #include "particles.h"
19 #include "pdgcode.h"
20 #include "threevector.h"
21 
22 namespace smash {
23 
24 /**
25  * A class that stores parameters needed for Pauli blocking,
26  * tabulates necessary integrals and computes phase-space
27  * density. Pauli blocking is the way to go from the classical
28  * Boltzmann equation to the quantum one, effectively reducing
29  * cross-sections by \f$1 - f(r,p) \f$ factors, where
30  * \f$f(r,p)\f$ is a phase-space density at coordinate
31  * and momentum of a final-state fermion. Effective reduction
32  * of cross-section is done via random rejection of reaction
33  * with probability \f$ 1 - f\f$. More details can be found in
34  * \iref{Gaitanos:2010fd}, section III B. Our implementation
35  * mainly follows this article (and therefore GiBUU, see
36  * http://gibuu.hepforge.org).
37  */
38 class PauliBlocker {
39  public:
40  /**
41  * PauliBlocker constructor. Gets parameters from configuration and
42  * experiment. Tabulates necessary integrals.
43 
44  * \param[in] conf Configurations from config.yaml.
45  * \param[in] parameters Parameters given by Experiment.
46  * \return The constructed object.
47  */
48  PauliBlocker(Configuration conf, const ExperimentParameters &parameters);
49 
50  /// Destructor
51  ~PauliBlocker();
52 
53  /**
54  * Calculate phase-space density of a particle species at the point (r,p).
55  *
56  * \param[in] r Position vector of the particle.
57  * \param[in] p Momentum vector of the particle.
58  * \param[in] ensembles Current list of particles in all ensembles.
59  * \param[in] pdg PDG number of species for which density to be calculated.
60  * \param[in] disregard Do not count particles that should be disregarded.
61  * This is intended to avoid counting incoming
62  * particles when the phase-space density for outgoing
63  * ones is estimated.
64  * \return Phase-space density
65  */
66  double phasespace_dens(const ThreeVector &r, const ThreeVector &p,
67  const std::vector<Particles> &ensembles,
68  const PdgCode pdg,
69  const ParticleList &disregard) const;
70 
71  private:
72  /// Tabulate integrals for weights
73  void init_weights();
74 
75  /// Analytical calculation of weights
77 
78  /// Standard deviation of the gaussian used for smearing
79  double sig_;
80 
81  /// Radius, after which gaussians (used for averaging) are cut, fm
82  double rc_;
83 
84  /// Radius of averaging in coordinate space, fm
85  double rr_;
86 
87  /// Radius of averaging in momentum space, GeV
88  double rp_;
89 
90  /// Testparticles number
91  int ntest_;
92 
93  /// Number of ensembles
95 
96  /// Weights: tabulated results of numerical integration
97  std::array<double, 30> weights_;
98 };
99 } // namespace smash
100 
101 #endif // SRC_INCLUDE_SMASH_PAULIBLOCKING_H_
Interface to the SMASH configuration files.
A class that stores parameters needed for Pauli blocking, tabulates necessary integrals and computes ...
Definition: pauliblocking.h:38
void init_weights_analytical()
Analytical calculation of weights.
double rr_
Radius of averaging in coordinate space, fm.
Definition: pauliblocking.h:85
int n_ensembles_
Number of ensembles.
Definition: pauliblocking.h:94
double sig_
Standard deviation of the gaussian used for smearing.
Definition: pauliblocking.h:79
~PauliBlocker()
Destructor.
int ntest_
Testparticles number.
Definition: pauliblocking.h:91
double rc_
Radius, after which gaussians (used for averaging) are cut, fm.
Definition: pauliblocking.h:82
double phasespace_dens(const ThreeVector &r, const ThreeVector &p, const std::vector< Particles > &ensembles, const PdgCode pdg, const ParticleList &disregard) const
Calculate phase-space density of a particle species at the point (r,p).
PauliBlocker(Configuration conf, const ExperimentParameters &parameters)
PauliBlocker constructor.
double rp_
Radius of averaging in momentum space, GeV.
Definition: pauliblocking.h:88
void init_weights()
Tabulate integrals for weights.
std::array< double, 30 > weights_
Weights: tabulated results of numerical integration.
Definition: pauliblocking.h:97
PdgCode stores a Particle Data Group Particle Numbering Scheme particle type number.
Definition: pdgcode.h:108
The ThreeVector class represents a physical three-vector with the components .
Definition: threevector.h:31
constexpr int p
Proton.
Definition: action.h:24
Helper structure for Experiment.