49 std::map<int, double> mapLayerWeigthedX;
50 std::map<int, double> mapLayerWeigthedY;
51 std::map<int, double> mapLayerZ1;
52 std::map<int, double> mapLayerZ2;
53 std::map<int, double> mapLayerSumWeigthsX;
54 std::map<int, double> mapLayerSumWeigthsY;
59 energy += hit->GetEnergyForCluster(
_index);
60 int layer = hit->GetLayerNumber();
63 if (mapLayerWeigthedX.count(layer)==0) {
64 mapLayerWeigthedX[layer] = 0.;
65 mapLayerSumWeigthsX[layer] = 0.;
67 mapLayerWeigthedX[layer] += hit->GetX()*hit->GetEnergyForCluster(
_index);
68 mapLayerSumWeigthsX[layer] += hit->GetEnergyForCluster(
_index);
69 mapLayerZ1[layer] = hit->GetZ();
72 if (mapLayerWeigthedY.count(layer)==0) {
73 mapLayerWeigthedY[layer] = 0.;
74 mapLayerSumWeigthsY[layer] = 0.;
76 mapLayerWeigthedY[layer] += hit->GetY()*hit->GetEnergyForCluster(
_index);
77 mapLayerSumWeigthsY[layer] += hit->GetEnergyForCluster(
_index);
78 mapLayerZ2[layer] = hit->GetZ();
85 auto const& firstElementX = mapLayerWeigthedX.begin();
86 int minLayerX = firstElementX->first;
87 double minX = firstElementX->second/mapLayerSumWeigthsX[minLayerX];
88 double minZ1 = mapLayerZ1[minLayerX];
90 auto const& firstElementY = mapLayerWeigthedY.begin();
91 int minLayerY = firstElementY->first;
92 double minY = firstElementY->second/mapLayerSumWeigthsY[minLayerY];
93 double minZ2 = mapLayerZ1[minLayerY];
95 double minZ = (minZ1+minZ2)/2.;
99 auto const& lastElementX = mapLayerWeigthedX.rbegin();
100 int maxLayerX = lastElementX->first;
101 double maxX = lastElementX->second/mapLayerSumWeigthsX[maxLayerX];
102 double maxZ1 = mapLayerZ1[maxLayerX];
104 auto const& lastElementY = mapLayerWeigthedY.rbegin();
105 int maxLayerY = lastElementY->first;
106 double maxY = lastElementY->second/mapLayerSumWeigthsY[maxLayerY];
107 double maxZ2 = mapLayerZ1[maxLayerY];
109 double maxZ = (maxZ1+maxZ2)/2.;
116 double eta = direction.Eta();
117 double phi = direction.Phi();
189 const auto n = x.size();
190 const auto s_x = std::accumulate(x.begin(), x.end(), 0.);
191 const auto s_y = std::accumulate(y.begin(), y.end(), 0.);
192 const auto s_xx = std::inner_product(x.begin(), x.end(), x.begin(), 0.);
193 const auto s_xy = std::inner_product(x.begin(), x.end(), y.begin(), 0.);
197 result.slope = (n * s_xy - s_x * s_y) / (n * s_xx - s_x * s_x);
198 result.intercept = (s_x * s_x * s_y - s_xy * s_x) / (n * s_xx - s_x * s_x);
200 std::cout<<
"--- LinearRegression ---" <<std::endl;
201 std::cout<<
"--------- slope = " << result.slope <<std::endl;
202 std::cout<<
"--------- intercept = " << result.intercept <<std::endl;