PYTHIA  8.311
HISubCollisionModel.h
1 // HISubCollisionModel.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2024 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // This file contains the definition of the ImpactParmeterGenerator,
7 // SubCollision, and SubCollisionModel classes, as well as a set of
8 // subclasses of SubCollisionModel.
9 //
10 // ImpactParameterGenerator: distributes nuclei in impact parameter space.
11 // SubCollision: a collision between a projectile and a target Nucleon.
12 // SubCollisionModel: Models the collision probabilities of nucleons.
13 // BlackSubCollisionModel: A very simple SubCollisionModel.
14 // NaiveSubCollisionModel: A very simple SubCollisionModel.
15 // DoubleStrikmanSubCollisionModel: A more advanced SubCollisionModel.
16 
17 #ifndef Pythia8_HISubCollisionModel_H
18 #define Pythia8_HISubCollisionModel_H
19 
20 #include "Pythia8/Pythia.h"
21 #include "Pythia8/HINucleusModel.h"
22 
23 namespace Pythia8 {
24 
25 //==========================================================================
26 
27 // SubCollision represents a possible collision between a projectile
28 // and a target nucleon.
29 
30 class SubCollision {
31 
32 public:
33 
34  // This defines the type of a binary nucleon collison.
36  NONE, // This is not a collision.
37  ELASTIC, // This is an elastic scattering
38  SDEP, // The projectile is diffractively excited.
39  SDET, // The target is diffractively excited.
40  DDE, // Both projectile and target are diffractively excited.
41  CDE, // Both excited but with central diffraction.
42  ABS // This is an absorptive (non-diffractive) collision.
43  };
44 
45  // Constructor with configuration.
46  SubCollision(Nucleon & projIn, Nucleon & targIn,
47  double bIn, double bpIn, CollisionType typeIn)
48  : proj(&projIn), targ(&targIn), b(bIn), bp(bpIn), type(typeIn) {}
49 
50  // Default constructor.
52  : proj(0), targ(0), b(0.0), bp(0.0), type(NONE) {}
53 
54  // Used to order sub-collisions in a set.
55  bool operator< (const SubCollision& s) const { return b < s.b; }
56 
57  // Return 0 if neither proj or target are neutrons, 1 if target is
58  // neutron, 2 if projectile is neutron, and 3 if both are neutrons.
59  int nucleons() const {return ( abs(targ->id()) == 2112? 1: 0 ) +
60  ( abs(proj->id()) == 2112? 2: 0 );}
61 
62  // The projectile nucleon.
64 
65  // The target nucleon.
67 
68  // The impact parameter distance between the nucleons in femtometer.
69  double b;
70 
71  // The impact parameter distance between the nucleons scaled like
72  // in Pythia to have unit average for non-diffractive collisions.
73  double bp;
74 
75  // The type of collision.
77 
78 };
79 
80 //==========================================================================
81 
82 // The SubCollisionSet gives a set of subcollisions between two nuclei.
83 
85 
86 public:
87 
88  // Default constructor.
89  SubCollisionSet() = default;
90 
91  // Constructor with subcollisions.
92  SubCollisionSet(multiset<SubCollision> subCollisionsIn, double TIn)
93  : subCollisionsSave(subCollisionsIn), TSave(TIn) {}
94 
95  // Reset the subcollisions.
96  bool empty() const { return subCollisionsSave.empty(); }
97 
98  // The summed elastic amplitude.
99  double T() const { return TSave; }
100 
101  // Iterators over the subcollisions.
102  multiset<SubCollision>::const_iterator begin() const {
103  return subCollisionsSave.begin(); }
104  multiset<SubCollision>::const_iterator end() const {
105  return subCollisionsSave.end(); }
106 
107 private:
108 
109  // Saved subcollisions.
110  multiset<SubCollision> subCollisionsSave;
111  double TSave;
112 
113 };
114 
115 //==========================================================================
116 
117 // The SubCollisionModel is is able to model the collision between two
118 // nucleons to tell which type of collision has occurred. The model
119 // may manipulate the corresponding state of the nucleons.
120 
122 
123 public:
124 
125  // Internal class to report cross section estimates.
126  struct SigEst {
127  // The cross sections (tot, nd, dd, sdp, sdt, cd, el, bslope).
128  vector<double> sig;
129 
130  // The estimated error (squared)
131  vector<double> dsig2;
132 
133  // Which cross sections were actually fitted
134  vector<bool> fsig;
135 
136  // The estimate of the average (and squared error) impact
137  // parameter for inelastic non-diffractive collisions.
138  double avNDb, davNDb2;
139 
140  // Constructor for zeros.
141  SigEst(): sig(8, 0.0), dsig2(8, 0.0), fsig(8, false),
142  avNDb(0.0), davNDb2(0.0) {}
143 
144  };
145 
146  // The default constructor is empty.
147  SubCollisionModel(int nParm): sigTarg(8, 0.0), sigErr(8, 0.05),
148  parmSave(nParm),
149  NInt(100000), NPop(20), sigFuzz(0.2), impactFudge(1),
150  fitPrint(true), avNDb(1.0*femtometer),
151  projPtr(), targPtr(), sigTotPtr(), settingsPtr(), infoPtr(), rndmPtr() {}
152 
153  // Virtual destructor.
154  virtual ~SubCollisionModel() {}
155 
156  // Create a new SubCollisionModel of the given model.
157  static shared_ptr<SubCollisionModel> create(int model);
158 
159  // Virtual init method.
160  virtual bool init(int idAIn, int idBIn, double eCMIn);
161 
162  // Initialize the pointers.
163  void initPtr(NucleusModel & projIn, NucleusModel & targIn,
164  SigmaTotal & sigTotIn, Settings & settingsIn,
165  Info & infoIn, Rndm & rndmIn) {
166  projPtr = &projIn;
167  targPtr = &targIn;
168  sigTotPtr = &sigTotIn;
169  settingsPtr = &settingsIn;
170  infoPtr = &infoIn;
171  rndmPtr = &rndmIn;
172  loggerPtr = infoIn.loggerPtr;
173  }
174 
175  // Access the nucleon-nucleon cross sections assumed
176  // for this model.
177 
178  // The target total nucleon-nucleon cross section.
179  double sigTot() const { return sigTarg[0]; }
180 
181  // The target elastic cross section.
182  double sigEl() const { return sigTarg[6]; }
183 
184  // The target central diffractive excitation cross section.
185  double sigCDE() const { return sigTarg[5]; }
186 
187  // The target single diffractive excitation cross section (both sides).
188  double sigSDE() const { return sigTarg[3] + sigTarg[4]; }
189 
190  // The target single diffractive excitation cross section (projectile).
191  double sigSDEP() const { return sigTarg[3]; }
192 
193  // The target single diffractive excitation cross section (target).
194  double sigSDET() const { return sigTarg[4]; }
195 
196  // The target double diffractive excitation cross section.
197  double sigDDE() const { return sigTarg[2]; }
198 
199  // The target non-diffractive (absorptive) cross section.
200  double sigND() const { return sigTarg[1]; }
201 
202  // The target elastic b-slope parameter.
203  double bSlope() const { return sigTarg[7]; }
204 
205  // Return the average non-diffractive impact parameter.
206  double avNDB() const { return avNDb; }
207 
208  // Update internally stored cross sections.
209  void updateSig();
210 
211  // Calculate the Chi2 for the given cross section estimates.
212  double Chi2(const SigEst & sigs, int npar) const;
213 
214  // Set beam kinematics.
215  void setKinematics(double eCMIn);
216 
217  // Use a genetic algorithm to fit the parameters.
218  bool evolve(int nGenerations, double eCM);
219 
220  // Get the number of free parameters for the model.
221  int nParms() const { return parmSave.size(); }
222 
223  // Set the parameters of this model.
224  void setParm(const vector<double>& parmIn) {
225  for (size_t i = 0; i < parmSave.size(); ++i)
226  parmSave[i] = parmIn[i];
227  }
228 
229  // Get the current parameters of this model.
230  vector<double> getParm() const { return parmSave; }
231 
232  // Get the minimum allowed parameter values for this model.
233  virtual vector<double> minParm() const = 0;
234 
235  // Get the default parameter values for this model.
236  virtual vector<double> defParm() const = 0;
237 
238  // Get the maximum allowed parameter values for this model.
239  virtual vector<double> maxParm() const = 0;
240 
241  // Take two nuclei and produce the corresponding subcollisions. The states
242  // of the nucleons may be changed if fluctuations are allowed by the model.
243  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) = 0;
244 
245  // Calculate the cross sections for the given set of parameters.
246  virtual SigEst getSig() const = 0;
247 
248 private:
249 
250  // The nucleon-nucleon cross sections targets for this model
251  // (tot, nd, dd, sdp, sdt, cd, el, bslope) and the required precision.
252  vector<double> sigTarg, sigErr;
253 
254  // Generate parameters based on run settings and the evolutionary algorithm.
255  bool genParms();
256 
257  // Save/load parameter configuration from disk.
258  bool saveParms(string fileName) const;
259  bool loadParms(string fileName);
260 
261 protected:
262 
263  // Saved parameters.
264  vector<double> parmSave;
265 
266  // The parameters stearing the fitting of internal parameters to
267  // the different nucleon-nucleon cross sections.
268  int NInt, NPop;
269  double sigFuzz;
270  double impactFudge;
271  bool fitPrint;
272 
273  // The estimated average impact parameter distance (in femtometer)
274  // for absorptive collisions.
275  double avNDb;
276 
277  // Info from the controlling HeavyIons object.
279  NucleusModel* targPtr;
280  SigmaTotal* sigTotPtr;
281  Settings* settingsPtr;
282  Info* infoPtr;
283  Rndm* rndmPtr;
284  Logger* loggerPtr;
285 
286  // For variable energies.
287  int idASave, idBSave;
288  bool doVarECM;
289  double eMin{}, eMax{};
290  int eCMPts;
291  vector<LogInterpolator> subCollParms;
292 
293 };
294 
295 //==========================================================================
296 
297 // The most naive sub-collision model, assuming static nucleons and
298 // an absorptive cross section equal to the total inelastic. No
299 // fluctuations, meaning no diffraction.
300 
302 
303 public:
304 
305  // The default constructor simply lists the nucleon-nucleon cross sections.
307 
308  // Virtual destructor.
309  virtual ~BlackSubCollisionModel() override {}
310 
311  // Get the minimum and maximum allowed parameter values for this model.
312  vector<double> minParm() const override { return vector<double>(); }
313  vector<double> defParm() const override { return vector<double>(); }
314  vector<double> maxParm() const override { return vector<double>(); }
315 
316  // Get cross sections used by this model.
317  virtual SigEst getSig() const override {
318  SigEst s;
319  s.sig[0] = sigTot();
320  s.sig[1] = sigND();
321  s.sig[6] = s.sig[0] - s.sig[1];
322  s.sig[7] = bSlope();
323  return s;
324  }
325 
326  // Take two nuclei and return the corresponding sub-collisions.
327  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) override;
328 
329 };
330 
331 //==========================================================================
332 
333 // A very simple sub-collision model, assuming static nucleons and
334 // just assuring that the individual nucleon-nucleon cross sections
335 // are preserved.
336 
338 
339 public:
340 
341  // The default constructor simply lists the nucleon-nucleon cross sections.
343 
344  // Virtual destructor.
345  virtual ~NaiveSubCollisionModel() override {}
346 
347  // Get the minimum and maximum allowed parameter values for this model.
348  vector<double> minParm() const override { return vector<double>(); }
349  vector<double> defParm() const override { return vector<double>(); }
350  vector<double> maxParm() const override { return vector<double>(); }
351 
352  // Get cross sections used by this model.
353  virtual SigEst getSig() const override {
354  SigEst s;
355  s.sig[0] = sigTot();
356  s.sig[1] = sigND();
357  s.sig[3] = sigSDEP();
358  s.sig[4] = sigSDET();
359  s.sig[2] = sigDDE();
360  s.sig[6] = sigEl();
361  s.sig[7] = bSlope();
362  return s;
363  }
364 
365  // Take two nuclei and return the corresponding sub-collisions.
366  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) override;
367 
368 };
369 
370 //==========================================================================
371 
372 // A base class for sub-collision models where each nucleon has a
373 // fluctuating "radius". The base model has two parameters, sigd and alpha,
374 // which are used for opacity calculations. Subclasses may have additional
375 // parameters to describe the radius distributions of that specific model.
376 
378 
379 public:
380 
381  // The default constructor simply lists the nucleon-nucleon cross sections.
382  FluctuatingSubCollisionModel(int nParmIn, int modein)
383  : SubCollisionModel(nParmIn + 2),
384  sigd(parmSave[nParmIn]), alpha(parmSave[nParmIn + 1]),
385  opacityMode(modein) {}
386 
387  // Virtual destructor.
388  virtual ~FluctuatingSubCollisionModel() override {}
389 
390  // Take two nuclei and pick specific states for each nucleon,
391  // then get the corresponding sub-collisions.
392  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) override;
393 
394  // Calculate the cross sections for the given set of parameters.
395  virtual SigEst getSig() const override;
396 
397 protected:
398 
399  // Pick a radius for the nucleon, depending on the specific model.
400  virtual double pickRadiusProj() const = 0;
401  virtual double pickRadiusTarg() const = 0;
402 
403 private:
404 
405  // Saturation scale of the nucleus.
406  double& sigd;
407 
408  // Power of the saturation scale
409  double& alpha;
410 
411  // Optional mode for opacity.
412  int opacityMode;
413 
414  // The opacity of the collision at a given sigma.
415  double opacity(double sig) const {
416  sig /= sigd;
417  if ( opacityMode == 1 ) sig = 1.0/sig;
418  return sig > numeric_limits<double>::epsilon() ?
419  pow(-expm1(-1.0/sig), alpha) : 1.0;
420  }
421 
422  // Return the elastic amplitude for a projectile and target state
423  // and the impact parameter between the corresponding nucleons.
424  double Tpt(const Nucleon::State & p,
425  const Nucleon::State & t, double b) const {
426  double sig = M_PI*pow2(p[0] + t[0]);
427  double grey = opacity(sig);
428  return sig/grey > b*b*2.0*M_PI? grey: 0.0;
429  }
430 
431 };
432 
433 //==========================================================================
434 
435 // A sub-collision model where each nucleon has a fluctuating
436 // "radius" according to a Strikman-inspired distribution.
437 
439 
440 public:
441 
442  // The default constructor simply lists the nucleon-nucleon cross sections.
444  : FluctuatingSubCollisionModel(1, modeIn), k0(parmSave[0]) {}
445 
446  // Virtual destructor.
447  virtual ~DoubleStrikmanSubCollisionModel() override {}
448 
449  // Get the minimum and maximum allowed parameter values for this model.
450  vector<double> minParm() const override { return { 0.01, 1.0, 0.0 }; }
451  vector<double> defParm() const override { return { 2.15, 17.24, 0.33 }; }
452  vector<double> maxParm() const override { return { 60.00, 60.0, 20.0 }; }
453 
454 protected:
455 
456  double pickRadiusProj() const override { return rndmPtr->gamma(k0, r0()); }
457  double pickRadiusTarg() const override { return rndmPtr->gamma(k0, r0()); }
458 
459 private:
460 
461  // The power in the Gamma distribution.
462  double& k0;
463 
464  // Return the average radius deduced from other parameters and
465  // the total cross section.
466  double r0() const {
467  return sqrt(sigTot() / (M_PI * (2.0 * k0 + 4.0 * k0 * k0)));
468  }
469 
470 };
471 
472 //==========================================================================
473 
474 // ImpactParameterGenerator is able to generate a specific impact
475 // parameter together with a weight such that aweighted average over
476 // any quantity X(b) corresponds to the infinite integral over d^2b
477 // X(b). This base class gives a Gaussian profile, d^2b exp(-b^2/2w^2).
478 
480 
481 public:
482 
483  // The default constructor takes a general width (in femtometers) as
484  // argument.
486  : widthSave(0.0), collPtr(0), projPtr(0), targPtr(0),
487  settingsPtr(0), rndmPtr(0) {}
488 
489  // Virtual destructor.
491 
492  // Virtual init method.
493  virtual bool init();
494  void initPtr(Info & infoIn, SubCollisionModel & collIn,
495  NucleusModel & projIn, NucleusModel & targIn);
496 
497  // Return a new impact parameter and set the corresponding weight provided.
498  virtual Vec4 generate(double & weight) const;
499 
500  // Set the width (in femtometers).
501  void width(double widthIn) { widthSave = widthIn; }
502 
503  // Get the width.
504  double width() const { return widthSave; }
505 
506  // Update width based on the associated subcollision and nucleus models.
507  void updateWidth();
508 
509 private:
510 
511  // The width of a distribution.
512  double widthSave;
513 
514 protected:
515 
516  // Pointers from the controlling HeavyIons object.
518  SubCollisionModel* collPtr;
519  NucleusModel* projPtr;
520  NucleusModel* targPtr;
521  Settings* settingsPtr;
522  Rndm* rndmPtr;
523  Logger* loggerPtr;
524 
525 };
526 
527 //==========================================================================
528 
529 // A sub-collision model where each nucleon fluctuates independently
530 // according to a log-normal distribution. Nucleons in the projectile and
531 // target may fluctuate according to different parameters, which is relevant
532 // e.g. for hadron-ion collisions with generic hadron species.
533 
535 
536 public:
537 
538  // The default constructor simply lists the nucleon-nucleon cross sections.
540  : FluctuatingSubCollisionModel(4, modeIn),
541  kProj(parmSave[0]), kTarg(parmSave[1]),
542  rProj(parmSave[2]), rTarg(parmSave[3]) {}
543 
544  // Virtual destructor.
546 
547  //virtual SigEst getSig() const override;
548 
549  // Get the minimum and maximum allowed parameter values for this model.
550  vector<double> minParm() const override {
551  return { 0.01, 0.01, 0.10, 0.10, 1.00, 0.00 }; }
552  vector<double> defParm() const override {
553  return { 1.00, 1.00, 0.54, 0.54, 17.24, 0.33 }; }
554  vector<double> maxParm() const override {
555  return { 2.00, 2.00, 4.00, 4.00, 20.00, 2.00 }; }
556 
557 protected:
558 
559  double pickRadiusProj() const override { return pickRadius(kProj, rProj); }
560  double pickRadiusTarg() const override { return pickRadius(kTarg, rTarg); }
561 
562 private:
563 
564  // The standard deviation of each log-normal distribution.
565  double& kProj;
566  double& kTarg;
567 
568  // The mean radius of each nucleon.
569  double& rProj;
570  double& rTarg;
571 
572  double pickRadius(double k0, double r0) const {
573  double logSig = log(M_PI * pow2(r0)) + k0 * rndmPtr->gauss();
574  return sqrt(exp(logSig) / M_PI);
575  }
576 };
577 
578 //==========================================================================
579 
580 } // end namespace Pythia8
581 
582 #endif // Pythia8_HISubCollisionModel_H
constexpr double pow2(const double &x)
Powers of small integers - for balance speed/code clarity.
Definition: PythiaStdlib.h:182
CollisionType type
The type of collision.
Definition: HISubCollisionModel.h:76
vector< double > defParm() const override
Get the default parameter values for this model.
Definition: HISubCollisionModel.h:313
Definition: HISubCollisionModel.h:438
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:452
int nParms() const
Get the number of free parameters for the model.
Definition: HISubCollisionModel.h:221
vector< double > defParm() const override
Get the default parameter values for this model.
Definition: HISubCollisionModel.h:552
FluctuatingSubCollisionModel(int nParmIn, int modein)
The default constructor simply lists the nucleon-nucleon cross sections.
Definition: HISubCollisionModel.h:382
virtual ~FluctuatingSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:388
Definition: Info.h:45
double sigSDE() const
The target single diffractive excitation cross section (both sides).
Definition: HISubCollisionModel.h:188
SigEst()
Constructor for zeros.
Definition: HISubCollisionModel.h:141
Nucleon * targ
The target nucleon.
Definition: HISubCollisionModel.h:66
Definition: HINucleusModel.h:152
Logger * loggerPtr
Pointer to the logger.
Definition: Info.h:86
Definition: HISubCollisionModel.h:337
double avNDb
Definition: HISubCollisionModel.h:275
virtual ~BlackSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:309
vector< double > getParm() const
Get the current parameters of this model.
Definition: HISubCollisionModel.h:230
double bSlope() const
The target elastic b-slope parameter.
Definition: HISubCollisionModel.h:203
Info * infoPtr
Pointers from the controlling HeavyIons object.
Definition: HISubCollisionModel.h:517
Definition: SigmaTotal.h:141
void initPtr(NucleusModel &projIn, NucleusModel &targIn, SigmaTotal &sigTotIn, Settings &settingsIn, Info &infoIn, Rndm &rndmIn)
Initialize the pointers.
Definition: HISubCollisionModel.h:163
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:314
void width(double widthIn)
Set the width (in femtometers).
Definition: HISubCollisionModel.h:501
Both excited but with central diffraction.
Definition: HISubCollisionModel.h:42
LogNormalSubCollisionModel(int modeIn=0)
The default constructor simply lists the nucleon-nucleon cross sections.
Definition: HISubCollisionModel.h:539
int NInt
Definition: HISubCollisionModel.h:268
double bp
Definition: HISubCollisionModel.h:73
vector< double > State
The state of a nucleon is a general vector of doubles.
Definition: HINucleusModel.h:41
SubCollisionSet(multiset< SubCollision > subCollisionsIn, double TIn)
Constructor with subcollisions.
Definition: HISubCollisionModel.h:92
double sigND() const
The target non-diffractive (absorptive) cross section.
Definition: HISubCollisionModel.h:200
BlackSubCollisionModel()
The default constructor simply lists the nucleon-nucleon cross sections.
Definition: HISubCollisionModel.h:306
virtual SigEst getSig() const override
Get cross sections used by this model.
Definition: HISubCollisionModel.h:317
vector< double > parmSave
Saved parameters.
Definition: HISubCollisionModel.h:264
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:554
double avNDb
Definition: HISubCollisionModel.h:138
double sigCDE() const
The target central diffractive excitation cross section.
Definition: HISubCollisionModel.h:185
Definition: HINucleusModel.h:28
Definition: HINucleusModel.h:187
Definition: HISubCollisionModel.h:479
Definition: Logger.h:23
multiset< SubCollision >::const_iterator begin() const
Iterators over the subcollisions.
Definition: HISubCollisionModel.h:102
double avNDB() const
Return the average non-diffractive impact parameter.
Definition: HISubCollisionModel.h:206
The SubCollisionSet gives a set of subcollisions between two nuclei.
Definition: HISubCollisionModel.h:84
NucleusModel * projPtr
Info from the controlling HeavyIons object.
Definition: HISubCollisionModel.h:278
The target is diffractively excited.
Definition: HISubCollisionModel.h:40
vector< bool > fsig
Which cross sections were actually fitted.
Definition: HISubCollisionModel.h:134
Definition: Basics.h:385
double width() const
Get the width.
Definition: HISubCollisionModel.h:504
vector< double > defParm() const override
Get the default parameter values for this model.
Definition: HISubCollisionModel.h:349
vector< double > dsig2
The estimated error (squared)
Definition: HISubCollisionModel.h:131
Definition: HISubCollisionModel.h:301
virtual ~ImpactParameterGenerator()
Virtual destructor.
Definition: HISubCollisionModel.h:490
bool empty() const
Reset the subcollisions.
Definition: HISubCollisionModel.h:96
Definition: HISubCollisionModel.h:121
double sigDDE() const
The target double diffractive excitation cross section.
Definition: HISubCollisionModel.h:197
virtual ~DoubleStrikmanSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:447
virtual SigEst getSig() const override
Get cross sections used by this model.
Definition: HISubCollisionModel.h:353
SubCollision()
Default constructor.
Definition: HISubCollisionModel.h:51
SubCollision(Nucleon &projIn, Nucleon &targIn, double bIn, double bpIn, CollisionType typeIn)
Constructor with configuration.
Definition: HISubCollisionModel.h:46
This is an elastic scattering.
Definition: HISubCollisionModel.h:38
void setParm(const vector< double > &parmIn)
Set the parameters of this model.
Definition: HISubCollisionModel.h:224
virtual ~NaiveSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:345
Definition: HISubCollisionModel.h:30
Internal class to report cross section estimates.
Definition: HISubCollisionModel.h:126
int id() const
Accessor functions:
Definition: HINucleusModel.h:52
DoubleStrikmanSubCollisionModel(int modeIn=0)
The default constructor simply lists the nucleon-nucleon cross sections.
Definition: HISubCollisionModel.h:443
int nucleons() const
Definition: HISubCollisionModel.h:59
Both projectile and target are diffractively excited.
Definition: HISubCollisionModel.h:41
virtual ~SubCollisionModel()
Virtual destructor.
Definition: HISubCollisionModel.h:154
vector< double > defParm() const override
Get the default parameter values for this model.
Definition: HISubCollisionModel.h:451
double sigEl() const
The target elastic cross section.
Definition: HISubCollisionModel.h:182
Definition: HISubCollisionModel.h:534
double T() const
The summed elastic amplitude.
Definition: HISubCollisionModel.h:99
CollisionType
This defines the type of a binary nucleon collison.
Definition: HISubCollisionModel.h:35
double pickRadiusProj() const override
Pick a radius for the nucleon, depending on the specific model.
Definition: HISubCollisionModel.h:559
vector< double > minParm() const override
Get the minimum and maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:348
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
double sigSDET() const
The target single diffractive excitation cross section (target).
Definition: HISubCollisionModel.h:194
Definition: HISubCollisionModel.h:377
virtual ~LogNormalSubCollisionModel()
Virtual destructor.
Definition: HISubCollisionModel.h:545
SubCollisionModel(int nParm)
The default constructor is empty.
Definition: HISubCollisionModel.h:147
double sigTot() const
The target total nucleon-nucleon cross section.
Definition: HISubCollisionModel.h:179
bool operator<(const SubCollision &s) const
Used to order sub-collisions in a set.
Definition: HISubCollisionModel.h:55
int idASave
For variable energies.
Definition: HISubCollisionModel.h:287
const double femtometer
Lengths.
Definition: HIBasics.h:31
double sigSDEP() const
The target single diffractive excitation cross section (projectile).
Definition: HISubCollisionModel.h:191
Nucleon * proj
The projectile nucleon.
Definition: HISubCollisionModel.h:63
This is not a collision.
Definition: HISubCollisionModel.h:37
vector< double > minParm() const override
virtual SigEst getSig() const override;
Definition: HISubCollisionModel.h:550
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:350
vector< double > minParm() const override
Get the minimum and maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:312
vector< double > sig
The cross sections (tot, nd, dd, sdp, sdt, cd, el, bslope).
Definition: HISubCollisionModel.h:128
double pickRadiusProj() const override
Pick a radius for the nucleon, depending on the specific model.
Definition: HISubCollisionModel.h:456
Definition: Basics.h:32
vector< double > minParm() const override
Get the minimum and maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:450
ImpactParameterGenerator()
Definition: HISubCollisionModel.h:485
Definition: Settings.h:195
double b
The impact parameter distance between the nucleons in femtometer.
Definition: HISubCollisionModel.h:69
NaiveSubCollisionModel()
The default constructor simply lists the nucleon-nucleon cross sections.
Definition: HISubCollisionModel.h:342
The projectile is diffractively excited.
Definition: HISubCollisionModel.h:39