Skip to content

Commit 1cff141

Browse files
committed
TPC: Improve TPC cluster counting tool and add afterglow counting
1 parent cf3cb51 commit 1cff141

1 file changed

Lines changed: 60 additions & 26 deletions

File tree

GPU/GPUTracking/Standalone/tools/GPUExtractPbPbCollision.h

Lines changed: 60 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,39 +12,42 @@
1212
/// \file GPUExtractPbPbCollision.h
1313
/// \author David Rohr
1414

15-
static void GPUExtractPbPbCollision()
15+
static void GPUExtractPbPbCollision(GPUParam& param, GPUTrackingInOutPointers& ioPtrs)
1616
{
17-
std::vector<unsigned int> counts(param().par.continuousMaxTimeBin + 1);
18-
std::vector<unsigned int> sums(param().par.continuousMaxTimeBin + 1);
19-
std::vector<unsigned int> countsTracks(param().par.continuousMaxTimeBin + 1);
20-
std::vector<unsigned int> sumsTracks(param().par.continuousMaxTimeBin + 1);
17+
std::vector<unsigned int> counts(param.par.continuousMaxTimeBin + 1);
18+
std::vector<unsigned int> sums(param.par.continuousMaxTimeBin + 1);
19+
std::vector<unsigned int> countsTracks(param.par.continuousMaxTimeBin + 1);
20+
std::vector<unsigned int> sumsTracks(param.par.continuousMaxTimeBin + 1);
21+
std::vector<bool> mask(param.par.continuousMaxTimeBin + 1);
2122
const int driftlength = 520;
22-
for (unsigned int i = 0; i < mIOPtrs.clustersNative->nClustersTotal; i++) {
23-
int time = mIOPtrs.clustersNative->clustersLinear[i].getTime();
24-
if (time < 0 || time > param().par.continuousMaxTimeBin) {
25-
fprintf(stderr, "Invalid time %d > %d\n", time, param().par.continuousMaxTimeBin);
23+
const bool checkAfterGlow = true;
24+
const int afterGlowLength = checkAfterGlow ? 8000 : 0;
25+
for (unsigned int i = 0; i < ioPtrs.clustersNative->nClustersTotal; i++) {
26+
int time = ioPtrs.clustersNative->clustersLinear[i].getTime();
27+
if (time < 0 || time > param.par.continuousMaxTimeBin) {
28+
fprintf(stderr, "Invalid time %d > %d\n", time, param.par.continuousMaxTimeBin);
2629
throw std::runtime_error("Invalid Time");
2730
}
2831
counts[time]++;
2932
}
30-
for (unsigned int i = 0; i < mIOPtrs.nMergedTracks; i++) {
31-
if (mIOPtrs.mergedTracks[i].NClusters() < 40) {
33+
for (unsigned int i = 0; i < ioPtrs.nMergedTracks; i++) {
34+
if (ioPtrs.mergedTracks[i].NClusters() < 40) {
3235
continue;
3336
}
34-
int time = mIOPtrs.mergedTracks[i].GetParam().GetTZOffset();
35-
if (time < 0 || time > param().par.continuousMaxTimeBin) {
37+
int time = ioPtrs.mergedTracks[i].GetParam().GetTZOffset();
38+
if (time < 0 || time > param.par.continuousMaxTimeBin) {
3639
continue;
3740
}
3841
countsTracks[time]++;
3942
}
4043
int first = 0, last = 0;
41-
for (int i = driftlength; i < param().par.continuousMaxTimeBin; i++) {
44+
for (int i = driftlength; i < param.par.continuousMaxTimeBin; i++) {
4245
if (counts[i]) {
4346
first = i;
4447
break;
4548
}
4649
}
47-
for (int i = param().par.continuousMaxTimeBin + 1 - driftlength; i > 0; i--) {
50+
for (int i = param.par.continuousMaxTimeBin + 1 - driftlength; i > 0; i--) {
4851
if (counts[i - 1]) {
4952
last = i;
5053
break;
@@ -70,25 +73,56 @@ static void GPUExtractPbPbCollision()
7073
}
7174
avg /= (last - first - driftlength);
7275
printf("BASELINE Min %d Avg %d\n", min, (int)avg);
76+
/*for (int i = first; i < last - driftlength; i++) {
77+
printf("STAT %d: %u %u (trks %u)\n", i, sums[i], counts[i], sumsTracks[i]);
78+
}*/
7379
bool found = false;
7480
do {
7581
found = false;
7682
unsigned int max = 0, maxpos = 0;
77-
for (int i = first; i < last - driftlength; i++) {
78-
if (sums[i] > 10 * min && sums[i] > avg && sumsTracks[i] > 3 && sums[i] > max) {
79-
max = sums[i];
80-
maxpos = i;
81-
found = true;
83+
for (int i = first; i < last - driftlength - afterGlowLength; i++) {
84+
if (sums[i] > 10 * min && sums[i] > avg && sumsTracks[i] > 3) {
85+
bool noColInAfterGlow = true;
86+
if (checkAfterGlow) {
87+
for (int ii = i + driftlength; ii < i + driftlength + afterGlowLength; ii++) {
88+
if (sums[ii] > 10 * min && sums[ii] > avg && sumsTracks[ii] > 3) {
89+
noColInAfterGlow = false;
90+
}
91+
}
92+
}
93+
if (noColInAfterGlow && sums[i] > max) {
94+
max = sums[i];
95+
maxpos = i;
96+
found = true;
97+
}
8298
}
8399
}
84100
if (found) {
85-
printf("MAX %d: %u (Tracks %u)\n", maxpos, max, sumsTracks[maxpos]);
86-
for (int i = std::max<int>(first, maxpos - driftlength); i < std::min<int>(last, maxpos + driftlength); i++) {
101+
unsigned int glow = 0;
102+
unsigned int glowcount = 0;
103+
if (checkAfterGlow) {
104+
int glowstart = maxpos + driftlength;
105+
int glowend = std::min<int>(last, maxpos + driftlength + afterGlowLength);
106+
for (int i = glowstart; i < glowend; i++) {
107+
glowcount++;
108+
glow += counts[i];
109+
}
110+
// printf("AFTERGLOW RANGE %d %d\n", glowstart, glowend);
111+
}
112+
printf("MAX %d: %u (Tracks %u) Glow %d (%d)\n", maxpos, max, sumsTracks[maxpos], glow, glowcount);
113+
for (int i = std::max<int>(first, maxpos - driftlength); i < std::min<int>(last, maxpos + driftlength + afterGlowLength); i++) {
87114
sums[i] = 0;
115+
mask[i] = true;
88116
}
89117
}
90-
} while (found);
91-
/*for (int i = first; i < last - driftlength; i++) {
92-
printf("STAT %d: %u (trks %u)\n", i, sums[i], sumsTracks[i]);
93-
}*/
118+
} while (found && !checkAfterGlow);
119+
unsigned int noise = 0;
120+
unsigned int noisecount = 0;
121+
for (int i = first; i < last; i++) {
122+
if (!mask[i]) {
123+
noise += counts[i];
124+
noisecount++;
125+
}
126+
}
127+
printf("AVERAGE NOISE: %d\n", noise / noisecount);
94128
}

0 commit comments

Comments
 (0)