= Description of model API = Here we describe the aplication interface of classes that form the `libElegent` library. == Constants == The class `Constants` encapsulates physics and mathematical constants (e.g. proton mass, Euler’s constants) as well as process description (e.g. pp or app mode, centre-of-mass energy). The constants are set up by the static `Init` method which creates an instance of the class referenced by the global pointer `cnts`. == Hadronic models == All models of hadronic interactions are implemented as classes inheriting from the `Model` class. If the model exists in several variants or versions, or if its amplitude can be calculated in several modes, the user can make the choice via the `Configure` method. Afterwards, the `Init` method shall be used to initialize model parameters and perform (potentially) time-expensive initialisations (e.g. pre-sampling). The scattering amplitude (in t-space) and profile function (amplitude in b-space) can be caluculated by `Amp(t)` and `Prf(b)` methods respectively. For details (normalisation etc.) see the journal publication linked from the [[https://elegent.hepforge.org/|home page]]. == Coulomb and Coulomb-interference == The code related to the Coulomb amplitude and the Coulomb-hadronic interference is grouped in the `CoulombInterference` class. The choice of the [[FormFactors|form factor parametrisation]] is made by `ffType` data member (possibilities are given by the `FFType` enum). The methods `FF_e(t)`, `FF_m(t)` and `FF_sq(t)` return the electric, magnetic and square of the effective form factor. The amplitude due to Coulomb, hadronic or both interactions can be obtained from the `Amp(t)` method. The type of the amplitude is chosen via the `mode` data member (choices given by the `CIMode` enum). == Generator class == The `Generator` class implements a Monte-Carlo generator of elastic nucleon-nucleon scattering events according to a given cumulative distribution function (can be built by `ElegentTDistributionSampler` program). The constructor takes these parameters: {{{ Generator(file, path, t_min, t_max, verbosity) }}} where `file` refers to a ROOT file with the cumulative distribution function. `path` gives the path of the distribution within the file. `t_min` and `t_max` can be used to constrain the t-range of the generated events. `verbosity` sets the verbosity level. After creation of a `Generator` instance, its `Init` method shall be called to load and prepare all necessary data. Finally, a random event in HepMC format can be generated as follows: {{{ GenEvent* gEv = new GenEvent(); gEv->set_event_number(...); generator.Generate(gEv); }}}