77 int i, nLayers, innermostLayer, nHits;
80 int* layerHitsBKLM, *layerHitsEKLM;
83 std::vector<KLMHit2d*> klmHit2ds, klmClusterHits;
84 std::vector<KLMHit2d*>::iterator it, it0, it2;
86 layerHitsBKLM =
new int[nLayersBKLM];
87 layerHitsEKLM =
new int[nLayersEKLM];
90 for (i = 0; i < nHits; i++) {
96 sort(klmHit2ds.begin(), klmHit2ds.end(), compareDistance);
98 while (klmHit2ds.size() > 0) {
99 klmClusterHits.clear();
100 it = klmHit2ds.begin();
101 klmClusterHits.push_back(*it);
102 it = klmHit2ds.erase(it);
103 while (it != klmHit2ds.end()) {
104 it2 = klmClusterHits.begin();
107 while (it2 != klmClusterHits.end()) {
108 if (ROOT::Math::VectorUtil::Angle(
109 (*it)->getPosition(), (*it2)->getPosition()) <
111 klmClusterHits.push_back(*it);
112 it = klmHit2ds.erase(it);
119 if (ROOT::Math::VectorUtil::Angle(
120 (*it)->getPosition(), (*it2)->getPosition()) <
122 klmClusterHits.push_back(*it);
123 it = klmHit2ds.erase(it);
131 ROOT::Math::XYZVector clusterPosition{0, 0, 0};
132 for (i = 0; i < nLayersBKLM; i++)
133 layerHitsBKLM[i] = 0;
134 for (i = 0; i < nLayersEKLM; i++)
135 layerHitsEKLM[i] = 0;
137 it0 = klmClusterHits.begin();
139 for (it = klmClusterHits.begin(); it != klmClusterHits.end(); ++it) {
140 if (((*it)->getSubdetector() == (*it0)->getSubdetector() &&
141 (*it)->getLayer() == (*it0)->getLayer()) ||
143 clusterPosition = clusterPosition + (*it)->getPosition();
146 if (minTime < 0 || (*it)->getTime() < minTime)
147 minTime = (*it)->getTime();
149 layerHitsBKLM[(*it)->getLayer() - 1]++;
151 layerHitsEKLM[(*it)->getLayer() - 1]++;
153 clusterPosition = clusterPosition * (1.0 / nHits);
157 for (i = 0; i < nLayersBKLM; i++) {
158 if (layerHitsBKLM[i] > 0) {
160 if (innermostLayer < 0)
161 innermostLayer = i + 1;
164 for (i = 0; i < nLayersEKLM; i++) {
165 if (layerHitsEKLM[i] > 0) {
167 if (innermostLayer < 0)
168 innermostLayer = i + 1;
177 p = klmClusterHits.size() * 0.215;
187 clusterPosition.X(), clusterPosition.Y(), clusterPosition.Z(), minTime, nLayers,
189 for (it = klmClusterHits.begin(); it != klmClusterHits.end(); ++it)
192 delete[] layerHitsBKLM;
193 delete[] layerHitsEKLM;
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.