15 for (
int n = 0;
n <
NN; ++
n) {
16 for (
int i = 0;
i < 6; ++
i) {
20 for (
int j = 0;
j < 6; ++
j) {
22 for (
int k = 0;
k < 6; ++
k)
31 for (
int n = 0;
n <
NN; ++
n) {
32 for (
int i = 0;
i < 6; ++
i) {
36 for (
int j = 0;
j < 6; ++
j) {
38 for (
int k = 0;
k < 6; ++
k)
49 for (
int n = 0;
n <
NN; ++
n) {
50 for (
int i = 0;
i < 6; ++
i) {
51 for (
int j = 0;
j < 6; ++
j) {
53 for (
int k = 0;
k < 6; ++
k)
63 for (
int n = 0;
n <
NN; ++
n) {
64 for (
int i = 0;
i < 6; ++
i) {
65 for (
int j = 0;
j < 6; ++
j) {
67 for (
int k = 0;
k < 6; ++
k)
85 for (
int n = 0;
n <
NN; ++
n) {
88 float radL = hitsRl.constAt(
n, 0, 0);
91 const float theta = outPar.constAt(
n, 5, 0);
93 const float ipt = outPar.constAt(
n, 3, 0);
94 const float pt = 1.f / ipt;
95 const float ipt2 = ipt * ipt;
98 const float p2 =
p *
p;
101 const float beta2 =
p2 / (
p2 + mpi2);
106 pt *
std::sin(outPar.constAt(
n, 4, 0)) * plNrm.constAt(
n, 1, 0) + pz * plNrm.constAt(
n, 2, 0));
107 radL = radL * invCos;
115 const float thetaMSC = 0.0136f * (1.f + 0.038f *
std::log(radL)) / (
beta *
p);
116 const float thetaMSC2 = thetaMSC * thetaMSC * radL;
118 outErr.At(
n, 3, 3) += thetaMSC2 * pz * pz * ipt2 * ipt2;
119 outErr.At(
n, 3, 5) -= thetaMSC2 * pz * ipt2;
120 outErr.At(
n, 4, 4) += thetaMSC2 *
p2 * ipt2;
121 outErr.At(
n, 5, 5) += thetaMSC2;
123 outErr.At(
n, 4, 4) += thetaMSC2;
124 outErr.At(
n, 5, 5) += thetaMSC2;
133 const float gamma2 = (
p2 + mpi2) / mpi2;
136 const float wmax = 2.f *
me * beta2 * gamma2 / (1.f + 2.f *
gamma *
me / mpi +
me *
me / (mpi * mpi));
141 ? (2.f * (hitsXi.constAt(
n, 0, 0) * invCos *
142 (0.5f *
std::log(2.
f *
me * beta2 * gamma2 *
wmax / (
I *
I)) - beta2 - deltahalf) / beta2))
146 const float dP = propSign.constAt(
n, 0, 0) *
dEdx /
beta;
149 outErr.At(
n, 3, 3) += dP * dP / (
p2 *
pt *
pt);
Matriplex::Matriplex< float, LL, LL, NN > MPlexLL
Matriplex::Matriplex< float, HH, 1, NN > MPlexHV
Sin< T >::type sin(const T &t)
void applyMaterialEffects(const MPlexQF &hitsRl, const MPlexQF &hitsXi, const MPlexQF &propSign, const MPlexHV &plNrm, MPlexLS &outErr, MPlexLV &outPar, const int N_proc)
Matriplex::Matriplex< float, LL, 1, NN > MPlexLV
constexpr Matriplex::idx_t NN
Cos< T >::type cos(const T &t)
void MultHelixPropFull(const MPlexLL &A, const MPlexLS &B, MPlexLL &C)
Abs< T >::type abs(const T &t)
const std::complex< double > I
Matriplex::Matriplex< float, 1, 1, NN > MPlexQF
void MultHelixPropTranspFull(const MPlexLL &A, const MPlexLL &B, MPlexLS &C)
Matriplex::MatriplexSym< float, LL, NN > MPlexLS
__host__ __device__ V V wmax