17 Stat() : tot(0), nopd(0), jnopd(0), fnopd(0), inopd(0), ijnopd(0), ifnopd(0), dtot(0) {
18 for (
int i = 0;
i < 5; ++
i)
22 std::atomic<long long> tot;
23 std::atomic<long long> nopd;
24 std::atomic<long long> jnopd;
25 std::atomic<long long> fnopd;
26 std::atomic<long long> inopd;
27 std::atomic<long long> ijnopd;
28 std::atomic<long long> ifnopd;
30 std::atomic<unsigned long long> dtot;
31 std::atomic<unsigned long long> idmm[5];
36 double n = 1.e-3 / double(dtot);
37 std::cout <<
"KF " << tot * 1.e-9 <<
"G " << mm <<
" " << dmm[0] <<
'/' << dmm[1] <<
'/' << dmm[2] <<
'/'
38 << dmm[3] <<
'/' << dmm[4] <<
'\n'
39 << dtot <<
' ' << idmm[0] <<
'/' << idmm[1] <<
'/' << idmm[2] <<
'/' << idmm[3] <<
'/' << idmm[4]
43 << fnopd <<
" " << inopd <<
" " << ijnopd <<
" " << ifnopd << std::endl;
50 return m(0, 0) < 0 ||
m(1, 1) < 0 ||
m(2, 2) < 0 ||
m(3, 3) < 0 ||
m(4, 4) < 0;
57 template <
unsigned int D>
63 using ROOT::Math::SMatrixNoInit;
74 SMatDD
V(SMatrixNoInit{}), VMeas(SMatrixNoInit{});
77 holder.template setup<D>(&
r, &
V, &
pf, &rMeas, &VMeas,
x,
C);
88 Mat5D K =
C *
pf.project(
R);
89 pf.projectAndSubtractFrom(M, K);
100 ROOT::Math::AssignSym::Evaluate(fse, M *
C);
107 ROOT::Math::AssignSym::Evaluate(fse2, M *
C);
113 auto n1 = isNopd(fse);
114 auto n2 = isNopd(fse2);
123 auto dda =
dd.Array();
124 auto fsa = fse.Array();
126 for (
int i = 0;
i < 15; ++
i)
128 auto mm = *std::max_element(ddd, ddd + 15);
130 if (
stat.ok && !(n1 || n2)) {
132 for (
int i = 0;
i < 5; ++
i) {
135 stat.idmm[
i] += (
unsigned long long)(1000. * dmm * dmm);
171 edm::LogError(
"KFUpdator") <<
" could not invert martix:\n" << (
V + VMeas);
180 return lupdate<1>(tsos, aRecHit);
182 return lupdate<2>(tsos, aRecHit);
184 return lupdate<3>(tsos, aRecHit);
186 return lupdate<4>(tsos, aRecHit);
188 return lupdate<5>(tsos, aRecHit);
190 throw cms::Exception(
"Rec hit of invalid dimension (not 1,2,3,4,5)")
191 <<
"The value was " << aRecHit.
dimension() <<
", type is " <<
typeid(aRecHit).
name() <<
"\n";