File indexing completed on 2025-02-22 09:55:28
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Common.hpp"
0012
0013 #include <vector>
0014
0015 namespace ActsFatras::detail {
0016
0017
0018 struct NuclearInteractionParameters {
0019 using CumulativeDistribution =
0020 std::pair<std::vector<float>, std::vector<uint32_t>>;
0021 using Distributions = std::vector<CumulativeDistribution>;
0022 using PdgMap =
0023 std::vector<std::pair<int, std::vector<std::pair<int, float>>>>;
0024
0025
0026
0027 struct ParametersWithFixedMultiplicity {
0028 ParametersWithFixedMultiplicity() = default;
0029
0030 ParametersWithFixedMultiplicity(
0031 Distributions& momenta, Acts::ActsDynamicVector& eValMom,
0032 Acts::ActsDynamicVector& eVecMom, Acts::ActsDynamicVector& meanMom,
0033 Distributions& invariantMasses, Acts::ActsDynamicVector& eValIM,
0034 Acts::ActsDynamicVector& eVecIM, Acts::ActsDynamicVector& meanIM)
0035 : validParametrisation(true),
0036 momentumDistributions(momenta),
0037 eigenvaluesMomentum(eValMom),
0038 meanMomentum(meanMom),
0039 invariantMassDistributions(invariantMasses),
0040 eigenvaluesInvariantMass(eValIM),
0041 meanInvariantMass(meanIM) {
0042 const unsigned int sizeMom = eigenvaluesMomentum.size();
0043 eigenvectorsMomentum.resize(sizeMom, sizeMom);
0044 for (unsigned int i = 0; i < sizeMom; i++) {
0045 for (unsigned int j = 0; j < sizeMom; j++) {
0046 eigenvectorsMomentum(i, j) = eVecMom[i * sizeMom + j];
0047 }
0048 }
0049
0050 const unsigned int sizeInvMass = eigenvaluesInvariantMass.size();
0051 eigenvectorsInvariantMass.resize(sizeInvMass, sizeInvMass);
0052 for (unsigned int i = 0; i < sizeInvMass; i++) {
0053 for (unsigned int j = 0; j < sizeInvMass; j++) {
0054 eigenvectorsInvariantMass(i, j) = eVecIM[i * sizeInvMass + j];
0055 }
0056 }
0057 }
0058
0059 bool validParametrisation = false;
0060
0061
0062
0063 Distributions momentumDistributions;
0064
0065 Acts::ActsDynamicVector eigenvaluesMomentum;
0066
0067 Acts::ActsDynamicMatrix eigenvectorsMomentum;
0068
0069 Acts::ActsDynamicVector meanMomentum;
0070
0071
0072
0073 Distributions invariantMassDistributions;
0074
0075 Acts::ActsDynamicVector eigenvaluesInvariantMass;
0076
0077 Acts::ActsDynamicMatrix eigenvectorsInvariantMass;
0078
0079 Acts::ActsDynamicVector meanInvariantMass;
0080 };
0081
0082
0083 float momentum = 0;
0084
0085 float softInteractionProbability = 0;
0086
0087 PdgMap pdgMap;
0088
0089 CumulativeDistribution nuclearInteractionProbability;
0090
0091 CumulativeDistribution softMultiplicity;
0092
0093 CumulativeDistribution hardMultiplicity;
0094
0095 std::vector<ParametersWithFixedMultiplicity> softKinematicParameters;
0096
0097 std::vector<ParametersWithFixedMultiplicity> hardKinematicParameters;
0098 };
0099
0100
0101 using NuclearInteractionParametrisation =
0102 std::vector<std::pair<float, NuclearInteractionParameters>>;
0103
0104 using MultiParticleNuclearInteractionParametrisation =
0105 std::vector<std::pair<int, NuclearInteractionParametrisation>>;
0106 }