84 {
85 float e(0), x(0), y(0), z(0), xx(0), yy(0), zz(0), n(0);
86 float w = 1;
87 float sumw = 0;
88 std::vector<float> raw_xvals{};
89 std::vector<float> raw_yvals{};
90 std::vector<float> raw_zvals{};
91 std::vector<float> raw_evals{};
92
94 if (h->getEnergy() < minHitEnergy_) continue;
95 if (logEnergyWeight) w = log(h->getEnergy() - log(minHitEnergy_));
96 e += h->getEnergy();
97 x += w * h->getXPos();
98 y += w * h->getYPos();
99 z += w * h->getZPos();
100 xx += w * h->getXPos() * h->getXPos();
101 yy += w * h->getYPos() * h->getYPos();
102 zz += w * h->getZPos() * h->getZPos();
103 n += 1;
104 sumw += w;
105 raw_xvals.push_back(h->getXPos());
106 raw_yvals.push_back(h->getYPos());
107 raw_zvals.push_back(h->getZPos());
108 raw_evals.push_back(h->getEnergy());
109 }
110 x /= sumw;
111 y /= sumw;
112 z /= sumw;
113 xx /= sumw;
114 yy /= sumw;
115 zz /= sumw;
116 xx = sqrt(xx - x * x);
117 yy = sqrt(yy - y * y);
118 zz = sqrt(zz - z * z);
122 cl->setRMSXYZ(xx, yy, zz);
123 cl->setHitValsX(raw_xvals);
124 cl->setHitValsY(raw_yvals);
125 cl->setHitValsZ(raw_zvals);
126 cl->setHitValsE(raw_evals);
127
128 if (raw_xvals.size() > 2) {
129
130 std::vector<float> sortedZ = raw_zvals;
131 std::sort(sortedZ.begin(), sortedZ.end());
132 if (sortedZ[sortedZ.size() - 1] - sortedZ[0] > 1e3) {
133 for (int i = 0; i < raw_xvals.size(); i++) {
134 raw_xvals[i] = raw_xvals[i] - x;
135 raw_yvals[i] = raw_yvals[i] - y;
136 raw_zvals[i] = raw_zvals[i] - z;
137 }
138
139 TGraph gxz(raw_zvals.size(), raw_zvals.data(), raw_xvals.data());
140 auto r_xz = gxz.Fit("pol1", "SQ");
141 cl->setDXDZ(r_xz->Value(1));
142 cl->setEDXDZ(r_xz->ParError(1));
143
144 TGraph gyz(raw_zvals.size(), raw_zvals.data(), raw_yvals.data());
145 auto r_yz = gyz.Fit("pol1", "SQ");
146 cl->setDYDZ(r_yz->Value(1));
147 cl->setEDYDZ(r_yz->ParError(1));
148 }
149 }
150 return;
151}
void setNHits(int nHits)
Sets total number of hits in the cluster.
void setEnergy(double energy)
Sets total energy for the cluster.
void setCentroidXYZ(double x, double y, double z)
Sets the three coordinates of the cluster centroid.
Represents a reconstructed hit in a calorimeter cell within the detector.