PYTHIA  8.312
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  // Set projectile particle.
218  void setIDA(int idA);
219 
220  // Use a genetic algorithm to fit the parameters.
221  bool evolve(int nGenerations, double eCM);
222 
223  // Get the number of free parameters for the model.
224  int nParms() const { return parmSave.size(); }
225 
226  // Set the parameters of this model.
227  void setParm(const vector<double>& parmIn) {
228  for (size_t i = 0; i < parmSave.size(); ++i)
229  parmSave[i] = parmIn[i];
230  }
231 
232  // Get the current parameters of this model.
233  vector<double> getParm() const { return parmSave; }
234 
235  // Get the minimum allowed parameter values for this model.
236  virtual vector<double> minParm() const = 0;
237 
238  // Get the default parameter values for this model.
239  virtual vector<double> defParm() const = 0;
240 
241  // Get the maximum allowed parameter values for this model.
242  virtual vector<double> maxParm() const = 0;
243 
244  // Take two nuclei and produce the corresponding subcollisions. The states
245  // of the nucleons may be changed if fluctuations are allowed by the model.
246  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) = 0;
247 
248  // Calculate the cross sections for the given set of parameters.
249  virtual SigEst getSig() const = 0;
250 
251 private:
252 
253  // The nucleon-nucleon cross sections targets for this model
254  // (tot, nd, dd, sdp, sdt, cd, el, bslope) and the required precision.
255  vector<double> sigTarg, sigErr;
256 
257  // Generate parameters based on run settings and the evolutionary algorithm.
258  bool genParms();
259 
260  // Save/load parameter configuration from disk.
261  bool saveParms(string fileName) const;
262  bool loadParms(string fileName);
263 
264 protected:
265 
266  // Saved parameters.
267  vector<double> parmSave;
268 
269  // The parameters stearing the fitting of internal parameters to
270  // the different nucleon-nucleon cross sections.
271  int NInt, NPop;
272  double sigFuzz;
273  double impactFudge;
274  bool fitPrint;
275 
276  // The estimated average impact parameter distance (in femtometer)
277  // for absorptive collisions.
278  double avNDb;
279 
280  // Info from the controlling HeavyIons object.
282  NucleusModel* targPtr;
283  SigmaTotal* sigTotPtr;
284  Settings* settingsPtr;
285  Info* infoPtr;
286  Rndm* rndmPtr;
287  Logger* loggerPtr;
288 
289  // For variable energies.
290  int idASave, idBSave;
291  bool doVarECM, doVarBeams;
292  double eMin, eMax, eSave;
293  int eCMPts;
294 
295  // The list of particles that have been fitted.
296  vector<int> idAList;
297 
298  // A vector of interpolators for the current particle. Each entry
299  // corresponds to one parameter, each interpolator is over the energy range.
300  vector<LogInterpolator> *subCollParms;
301 
302  // Mapping id -> interpolator, one entry for each particle.
303  map<int, vector<LogInterpolator>> subCollParmsMap;
304 
305 };
306 
307 //==========================================================================
308 
309 // The most naive sub-collision model, assuming static nucleons and
310 // an absorptive cross section equal to the total inelastic. No
311 // fluctuations, meaning no diffraction.
312 
314 
315 public:
316 
317  // The default constructor simply lists the nucleon-nucleon cross sections.
319 
320  // Virtual destructor.
321  virtual ~BlackSubCollisionModel() override {}
322 
323  // Get the minimum and maximum allowed parameter values for this model.
324  vector<double> minParm() const override { return vector<double>(); }
325  vector<double> defParm() const override { return vector<double>(); }
326  vector<double> maxParm() const override { return vector<double>(); }
327 
328  // Get cross sections used by this model.
329  virtual SigEst getSig() const override {
330  SigEst s;
331  s.sig[0] = sigTot();
332  s.sig[1] = sigND();
333  s.sig[6] = s.sig[0] - s.sig[1];
334  s.sig[7] = bSlope();
335  return s;
336  }
337 
338  // Take two nuclei and return the corresponding sub-collisions.
339  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) override;
340 
341 };
342 
343 //==========================================================================
344 
345 // A very simple sub-collision model, assuming static nucleons and
346 // just assuring that the individual nucleon-nucleon cross sections
347 // are preserved.
348 
350 
351 public:
352 
353  // The default constructor simply lists the nucleon-nucleon cross sections.
355 
356  // Virtual destructor.
357  virtual ~NaiveSubCollisionModel() override {}
358 
359  // Get the minimum and maximum allowed parameter values for this model.
360  vector<double> minParm() const override { return vector<double>(); }
361  vector<double> defParm() const override { return vector<double>(); }
362  vector<double> maxParm() const override { return vector<double>(); }
363 
364  // Get cross sections used by this model.
365  virtual SigEst getSig() const override {
366  SigEst s;
367  s.sig[0] = sigTot();
368  s.sig[1] = sigND();
369  s.sig[3] = sigSDEP();
370  s.sig[4] = sigSDET();
371  s.sig[2] = sigDDE();
372  s.sig[6] = sigEl();
373  s.sig[7] = bSlope();
374  return s;
375  }
376 
377  // Take two nuclei and return the corresponding sub-collisions.
378  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) override;
379 
380 };
381 
382 //==========================================================================
383 
384 // A base class for sub-collision models where each nucleon has a
385 // fluctuating "radius". The base model has two parameters, sigd and alpha,
386 // which are used for opacity calculations. Subclasses may have additional
387 // parameters to describe the radius distributions of that specific model.
388 
390 
391 public:
392 
393  // The default constructor simply lists the nucleon-nucleon cross sections.
394  FluctuatingSubCollisionModel(int nParmIn, int modein)
395  : SubCollisionModel(nParmIn + 2),
396  sigd(parmSave[nParmIn]), alpha(parmSave[nParmIn + 1]),
397  opacityMode(modein) {}
398 
399  // Virtual destructor.
400  virtual ~FluctuatingSubCollisionModel() override {}
401 
402  // Take two nuclei and pick specific states for each nucleon,
403  // then get the corresponding sub-collisions.
404  virtual SubCollisionSet getCollisions(Nucleus& proj, Nucleus& targ) override;
405 
406  // Calculate the cross sections for the given set of parameters.
407  virtual SigEst getSig() const override;
408 
409 protected:
410 
411  // Pick a radius for the nucleon, depending on the specific model.
412  virtual double pickRadiusProj() const = 0;
413  virtual double pickRadiusTarg() const = 0;
414 
415 private:
416 
417  // Saturation scale of the nucleus.
418  double& sigd;
419 
420  // Power of the saturation scale
421  double& alpha;
422 
423  // Optional mode for opacity.
424  int opacityMode;
425 
426  // The opacity of the collision at a given sigma.
427  double opacity(double sig) const {
428  sig /= sigd;
429  if ( opacityMode == 1 ) sig = 1.0/sig;
430  return sig > numeric_limits<double>::epsilon() ?
431  pow(-expm1(-1.0/sig), alpha) : 1.0;
432  }
433 
434  // Return the elastic amplitude for a projectile and target state
435  // and the impact parameter between the corresponding nucleons.
436  double Tpt(const Nucleon::State & p,
437  const Nucleon::State & t, double b) const {
438  double sig = M_PI*pow2(p[0] + t[0]);
439  double grey = opacity(sig);
440  return sig/grey > b*b*2.0*M_PI? grey: 0.0;
441  }
442 
443 };
444 
445 //==========================================================================
446 
447 // A sub-collision model where each nucleon has a fluctuating
448 // "radius" according to a Strikman-inspired distribution.
449 
451 
452 public:
453 
454  // The default constructor simply lists the nucleon-nucleon cross sections.
456  : FluctuatingSubCollisionModel(1, modeIn), k0(parmSave[0]) {}
457 
458  // Virtual destructor.
459  virtual ~DoubleStrikmanSubCollisionModel() override {}
460 
461  // Get the minimum and maximum allowed parameter values for this model.
462  vector<double> minParm() const override { return { 0.01, 1.0, 0.0 }; }
463  vector<double> defParm() const override { return { 2.15, 17.24, 0.33 }; }
464  vector<double> maxParm() const override { return { 60.00, 60.0, 20.0 }; }
465 
466 protected:
467 
468  double pickRadiusProj() const override { return rndmPtr->gamma(k0, r0()); }
469  double pickRadiusTarg() const override { return rndmPtr->gamma(k0, r0()); }
470 
471 private:
472 
473  // The power in the Gamma distribution.
474  double& k0;
475 
476  // Return the average radius deduced from other parameters and
477  // the total cross section.
478  double r0() const {
479  return sqrt(sigTot() / (M_PI * (2.0 * k0 + 4.0 * k0 * k0)));
480  }
481 
482 };
483 
484 //==========================================================================
485 
486 // ImpactParameterGenerator is able to generate a specific impact
487 // parameter together with a weight such that aweighted average over
488 // any quantity X(b) corresponds to the infinite integral over d^2b
489 // X(b). This base class gives a Gaussian profile, d^2b exp(-b^2/2w^2).
490 
492 
493 public:
494 
495  // The default constructor takes a general width (in femtometers) as
496  // argument.
498  : widthSave(0.0), collPtr(0), projPtr(0), targPtr(0),
499  settingsPtr(0), rndmPtr(0) {}
500 
501  // Virtual destructor.
503 
504  // Virtual init method.
505  virtual bool init();
506  void initPtr(Info & infoIn, SubCollisionModel & collIn,
507  NucleusModel & projIn, NucleusModel & targIn);
508 
509  // Return a new impact parameter and set the corresponding weight provided.
510  virtual Vec4 generate(double & weight) const;
511 
512  // Set the width (in femtometers).
513  void width(double widthIn) { widthSave = widthIn; }
514 
515  // Get the width.
516  double width() const { return widthSave; }
517 
518  // Update width based on the associated subcollision and nucleus models.
519  void updateWidth();
520 
521 private:
522 
523  // The width of a distribution.
524  double widthSave;
525 
526 protected:
527 
528  // Pointers from the controlling HeavyIons object.
530  SubCollisionModel* collPtr;
531  NucleusModel* projPtr;
532  NucleusModel* targPtr;
533  Settings* settingsPtr;
534  Rndm* rndmPtr;
535  Logger* loggerPtr;
536 
537 };
538 
539 //==========================================================================
540 
541 // A sub-collision model where each nucleon fluctuates independently
542 // according to a log-normal distribution. Nucleons in the projectile and
543 // target may fluctuate according to different parameters, which is relevant
544 // e.g. for hadron-ion collisions with generic hadron species.
545 
547 
548 public:
549 
550  // The default constructor simply lists the nucleon-nucleon cross sections.
552  : FluctuatingSubCollisionModel(4, modeIn),
553  kProj(parmSave[0]), kTarg(parmSave[1]),
554  rProj(parmSave[2]), rTarg(parmSave[3]) {}
555 
556  // Virtual destructor.
558 
559  //virtual SigEst getSig() const override;
560 
561  // Get the minimum and maximum allowed parameter values for this model.
562  vector<double> minParm() const override {
563  return { 0.01, 0.01, 0.10, 0.10, 1.00, 0.00 }; }
564  vector<double> defParm() const override {
565  return { 1.00, 1.00, 0.54, 0.54, 17.24, 0.33 }; }
566  vector<double> maxParm() const override {
567  return { 2.00, 2.00, 4.00, 4.00, 20.00, 2.00 }; }
568 
569 protected:
570 
571  double pickRadiusProj() const override { return pickRadius(kProj, rProj); }
572  double pickRadiusTarg() const override { return pickRadius(kTarg, rTarg); }
573 
574 private:
575 
576  // The standard deviation of each log-normal distribution.
577  double& kProj;
578  double& kTarg;
579 
580  // The mean radius of each nucleon.
581  double& rProj;
582  double& rTarg;
583 
584  double pickRadius(double k0, double r0) const {
585  double logSig = log(M_PI * pow2(r0)) + k0 * rndmPtr->gauss();
586  return sqrt(exp(logSig) / M_PI);
587  }
588 };
589 
590 //==========================================================================
591 
592 } // end namespace Pythia8
593 
594 #endif // Pythia8_HISubCollisionModel_H
vector< int > idAList
The list of particles that have been fitted.
Definition: HISubCollisionModel.h:296
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:325
Definition: HISubCollisionModel.h:450
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:464
int nParms() const
Get the number of free parameters for the model.
Definition: HISubCollisionModel.h:224
vector< double > defParm() const override
Get the default parameter values for this model.
Definition: HISubCollisionModel.h:564
FluctuatingSubCollisionModel(int nParmIn, int modein)
The default constructor simply lists the nucleon-nucleon cross sections.
Definition: HISubCollisionModel.h:394
virtual ~FluctuatingSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:400
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:349
double avNDb
Definition: HISubCollisionModel.h:278
virtual ~BlackSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:321
vector< double > getParm() const
Get the current parameters of this model.
Definition: HISubCollisionModel.h:233
double bSlope() const
The target elastic b-slope parameter.
Definition: HISubCollisionModel.h:203
Info * infoPtr
Pointers from the controlling HeavyIons object.
Definition: HISubCollisionModel.h:529
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:326
void width(double widthIn)
Set the width (in femtometers).
Definition: HISubCollisionModel.h:513
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:551
int NInt
Definition: HISubCollisionModel.h:271
double bp
Definition: HISubCollisionModel.h:73
vector< double > State
The state of a nucleon is a general vector of doubles.
Definition: HINucleusModel.h:41
map< int, vector< LogInterpolator > > subCollParmsMap
Mapping id -> interpolator, one entry for each particle.
Definition: HISubCollisionModel.h:303
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:318
virtual SigEst getSig() const override
Get cross sections used by this model.
Definition: HISubCollisionModel.h:329
vector< double > parmSave
Saved parameters.
Definition: HISubCollisionModel.h:267
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:566
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:491
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:281
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:386
double width() const
Get the width.
Definition: HISubCollisionModel.h:516
vector< double > defParm() const override
Get the default parameter values for this model.
Definition: HISubCollisionModel.h:361
vector< double > dsig2
The estimated error (squared)
Definition: HISubCollisionModel.h:131
Definition: HISubCollisionModel.h:313
virtual ~ImpactParameterGenerator()
Virtual destructor.
Definition: HISubCollisionModel.h:502
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:459
virtual SigEst getSig() const override
Get cross sections used by this model.
Definition: HISubCollisionModel.h:365
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
vector< LogInterpolator > * subCollParms
Definition: HISubCollisionModel.h:300
This is an elastic scattering.
Definition: HISubCollisionModel.h:38
void setParm(const vector< double > &parmIn)
Set the parameters of this model.
Definition: HISubCollisionModel.h:227
virtual ~NaiveSubCollisionModel() override
Virtual destructor.
Definition: HISubCollisionModel.h:357
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:455
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:463
double sigEl() const
The target elastic cross section.
Definition: HISubCollisionModel.h:182
Definition: HISubCollisionModel.h:546
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:571
vector< double > minParm() const override
Get the minimum and maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:360
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:389
virtual ~LogNormalSubCollisionModel()
Virtual destructor.
Definition: HISubCollisionModel.h:557
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:290
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:562
vector< double > maxParm() const override
Get the maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:362
vector< double > minParm() const override
Get the minimum and maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:324
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:468
Definition: Basics.h:32
vector< double > minParm() const override
Get the minimum and maximum allowed parameter values for this model.
Definition: HISubCollisionModel.h:462
ImpactParameterGenerator()
Definition: HISubCollisionModel.h:497
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:354
The projectile is diffractively excited.
Definition: HISubCollisionModel.h:39