Skip to content

Commit 38a9d91

Browse files
committed
Fill alternative TPC dedx according to new dEdxClusterRejectionFlagMaskAlt opt.
The old TrackTPC::getdEdx() is unchanged, the new info can be accessed as TrackTPC::getdEdxAlt()
1 parent 839dfe2 commit 38a9d91

File tree

6 files changed

+40
-19
lines changed

6 files changed

+40
-19
lines changed

DataFormats/Detectors/TPC/include/DataFormatsTPC/TrackTPC.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ class TrackTPC : public o2::track::TrackParCov
128128
GPUd() const dEdxInfo& getdEdx() const { return mdEdx; }
129129
GPUd() void setdEdx(const dEdxInfo& v) { mdEdx = v; }
130130

131+
GPUd() const dEdxInfo& getdEdxAlt() const { return mdEdxAlt; }
132+
GPUd() void setdEdxAlt(const dEdxInfo& v) { mdEdxAlt = v; }
133+
131134
private:
132135
float mTime0 = 0.f; ///< Assumed time of the vertex that created the track in TPC time bins, 0 for triggered data
133136
float mDeltaTFwd = 0; ///< max possible increment to mTime0
@@ -136,9 +139,10 @@ class TrackTPC : public o2::track::TrackParCov
136139
float mChi2 = 0.f; // Chi2 of the track
137140
o2::track::TrackParCov mOuterParam; // Track parameters at outer end of TPC.
138141
dEdxInfo mdEdx; // dEdx Information
142+
dEdxInfo mdEdxAlt; // dEdx alternative Information
139143
ClusRef mClustersReference; // reference to externale cluster indices
140144

141-
ClassDefNV(TrackTPC, 4);
145+
ClassDefNV(TrackTPC, 5);
142146
};
143147

144148
} // namespace tpc

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ AddOptionRTC(enablePID, int8_t, 1, "", 0, "Enable PID response")
158158
AddOptionRTC(PID_useNsigma, int8_t, 1, "", 0, "Use nSigma instead of absolute distance in PID response")
159159
AddOptionRTC(adddEdxSubThresholdClusters, int8_t, 1, "", 0, "Add sub threshold clusters in TPC dEdx computation")
160160
AddOptionRTC(dEdxClusterRejectionFlagMask, int8_t, o2::gpu::GPUTPCGMMergedTrackHit::flagEdge, "", 0, "OR mask of TPC flags that will reject the cluster in dEdx")
161+
AddOptionRTC(dEdxClusterRejectionFlagMaskAlt, int8_t, o2::gpu::GPUTPCGMMergedTrackHit::flagEdge, "", 0, "OR mask of TPC flags that will reject the cluster in alternative dEdx")
161162
AddOptionRTC(rejectEdgeClustersInSeeding, int8_t, 0, "", 0, "Reject edge clusters based on uncorrected track Y during seeding")
162163
AddOptionRTC(rejectEdgeClustersInTrackFit, int8_t, 0, "", 0, "Reject edge clusters based on uncorrected track Y during track fit")
163164
AddOptionArray(PID_remap, int8_t, 9, (0, 1, 2, 3, 4, 5, 6, 7, 8), "", 0, "Remap Ipid to PID_reamp[Ipid] (no remap if<0)") // BUG: CUDA cannot yet hand AddOptionArrayRTC

GPU/GPUTracking/Merger/GPUTPCGMMerger.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ void* GPUTPCGMMerger::SetPointersOutput(void* mem)
299299
computePointerWithAlignment(mem, mOutputTracks, mNMaxTracks);
300300
if (mRec->GetParam().dodEdxDownscaled) {
301301
computePointerWithAlignment(mem, mOutputTracksdEdx, mNMaxTracks);
302+
computePointerWithAlignment(mem, mOutputTracksdEdxAlt, mNMaxTracks);
302303
}
303304
computePointerWithAlignment(mem, mClusters, mNMaxOutputTrackClusters);
304305
if (mRec->GetParam().par.earlyTpcTransform) {

GPU/GPUTracking/Merger/GPUTPCGMMerger.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ class GPUTPCGMMerger : public GPUProcessor
108108
GPUhdi() GPUTPCGMMergedTrack* OutputTracks() { return mOutputTracks; }
109109
GPUhdi() const GPUdEdxInfo* OutputTracksdEdx() const { return mOutputTracksdEdx; }
110110
GPUhdi() GPUdEdxInfo* OutputTracksdEdx() { return mOutputTracksdEdx; }
111+
GPUhdi() const GPUdEdxInfo* OutputTracksdEdxAlt() const { return mOutputTracksdEdxAlt; }
112+
GPUhdi() GPUdEdxInfo* OutputTracksdEdxAlt() { return mOutputTracksdEdxAlt; }
111113
GPUhdi() uint32_t NClusters() const { return mNClusters; }
112114
GPUhdi() uint32_t NMaxClusters() const { return mNMaxClusters; }
113115
GPUhdi() uint32_t NMaxTracks() const { return mNMaxTracks; }
@@ -261,6 +263,7 @@ class GPUTPCGMMerger : public GPUProcessor
261263
int32_t mNClusters = 0; // Total number of incoming clusters (from sector tracks)
262264
GPUTPCGMMergedTrack* mOutputTracks = nullptr; //* array of output merged tracks
263265
GPUdEdxInfo* mOutputTracksdEdx = nullptr; //* dEdx information
266+
GPUdEdxInfo* mOutputTracksdEdxAlt = nullptr; //* dEdx alternative information
264267
GPUTPCGMSectorTrack* mSectorTrackInfos = nullptr; //* additional information for sector tracks
265268
int32_t* mSectorTrackInfoIndex = nullptr;
266269
GPUTPCGMMergedTrackHit* mClusters = nullptr;

GPU/GPUTracking/Merger/GPUTPCGMO2Output.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ GPUdii() void GPUTPCGMO2Output::Thread<GPUTPCGMO2Output::output>(int32_t nBlocks
114114
constexpr float MinDelta = 0.1f;
115115
const GPUTPCGMMergedTrack* tracks = merger.OutputTracks();
116116
GPUdEdxInfo* tracksdEdx = merger.OutputTracksdEdx();
117+
GPUdEdxInfo* tracksdEdxAlt = merger.OutputTracksdEdxAlt();
117118
const int32_t nTracks = merger.NOutputTracksTPCO2();
118119
const GPUTPCGMMergedTrackHit* trackClusters = merger.Clusters();
119120
constexpr uint8_t flagsReject = getFlagsReject();
@@ -146,6 +147,7 @@ GPUdii() void GPUTPCGMO2Output::Thread<GPUTPCGMO2Output::output>(int32_t nBlocks
146147
auto& outerPar = tracks[i].OuterParam();
147148
if (merger.Param().par.dodEdx && merger.Param().dodEdxDownscaled) {
148149
oTrack.setdEdx(tracksdEdx[i]);
150+
oTrack.setdEdxAlt(tracksdEdxAlt[i]);
149151
}
150152

151153
auto snpOut = outerPar.P[2];

GPU/GPUTracking/Merger/GPUTPCGMTrackParam.cxx

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
6060

6161
const GPUParam& GPUrestrict() param = merger->Param();
6262

63-
GPUdEdx dEdx;
63+
GPUdEdx dEdx, dEdxAlt;
6464
GPUTPCGMPropagator prop;
6565
gputpcgmmergertypes::InterpolationErrors interpolation;
6666
prop.SetMaterialTPC();
@@ -220,6 +220,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
220220
dodEdx = AttachClustersPropagate(merger, cluster.sector, lastRow, cluster.row, iTrk, cluster.leg == clusters[maxN - 1].leg, prop, inFlyDirection, GPUCA_MAX_SIN_PHI, dodEdx);
221221
if (dodEdx) {
222222
dEdx.fillSubThreshold(lastRow - wayDirection);
223+
dEdxAlt.fillSubThreshold(lastRow - wayDirection);
223224
}
224225
}
225226

@@ -366,25 +367,33 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
366367
CADEBUG(printf("Reinit linearization\n"));
367368
prop.SetTrack(this, prop.GetAlpha());
368369
}
369-
if (param.par.dodEdx && param.dodEdxDownscaled && iWay == nWays - 1 && cluster.leg == clusters[maxN - 1].leg && (clusterState & param.rec.tpc.dEdxClusterRejectionFlagMask) == 0) { // TODO: Costimize flag to remove, and option to remove double-clusters
370-
float qtot = 0, qmax = 0, pad = 0, relTime = 0;
371-
const int32_t clusterCount = (ihit - ihitMergeFirst) * wayDirection + 1;
372-
for (int32_t iTmp = ihitMergeFirst; iTmp != ihit + wayDirection; iTmp += wayDirection) {
373-
if (merger->GetConstantMem()->ioPtrs.clustersNative == nullptr) {
374-
qtot += clustersXYZ[ihit].amp;
375-
} else {
376-
const ClusterNative& cl = merger->GetConstantMem()->ioPtrs.clustersNative->clustersLinear[cluster.num];
377-
qtot += cl.qTot;
378-
qmax = CAMath::Max<float>(qmax, cl.qMax);
379-
pad += cl.getPad();
380-
relTime += cl.getTime();
370+
if (param.par.dodEdx && param.dodEdxDownscaled && iWay == nWays - 1 && cluster.leg == clusters[maxN - 1].leg) { // TODO: Costimize flag to remove, and option to remove double-clusters
371+
bool acc = (clusterState & param.rec.tpc.dEdxClusterRejectionFlagMask) == 0, accAlt = (clusterState & param.rec.tpc.dEdxClusterRejectionFlagMaskAlt) == 0;
372+
if (acc || accAlt) {
373+
float qtot = 0, qmax = 0, pad = 0, relTime = 0;
374+
const int32_t clusterCount = (ihit - ihitMergeFirst) * wayDirection + 1;
375+
for (int32_t iTmp = ihitMergeFirst; iTmp != ihit + wayDirection; iTmp += wayDirection) {
376+
if (merger->GetConstantMem()->ioPtrs.clustersNative == nullptr) {
377+
qtot += clustersXYZ[ihit].amp;
378+
} else {
379+
const ClusterNative& cl = merger->GetConstantMem()->ioPtrs.clustersNative->clustersLinear[cluster.num];
380+
qtot += cl.qTot;
381+
qmax = CAMath::Max<float>(qmax, cl.qMax);
382+
pad += cl.getPad();
383+
relTime += cl.getTime();
384+
}
385+
}
386+
qtot /= clusterCount; // TODO: Weighted Average
387+
pad /= clusterCount;
388+
relTime /= clusterCount;
389+
relTime = relTime - CAMath::Round(relTime);
390+
if (acc) {
391+
dEdx.fillCluster(qtot, qmax, cluster.row, cluster.sector, mP[2], mP[3], merger->GetConstantMem()->calibObjects, zz, pad, relTime);
392+
}
393+
if (accAlt) {
394+
dEdxAlt.fillCluster(qtot, qmax, cluster.row, cluster.sector, mP[2], mP[3], merger->GetConstantMem()->calibObjects, zz, pad, relTime);
381395
}
382396
}
383-
qtot /= clusterCount; // TODO: Weighted Average
384-
pad /= clusterCount;
385-
relTime /= clusterCount;
386-
relTime = relTime - CAMath::Round(relTime);
387-
dEdx.fillCluster(qtot, qmax, cluster.row, cluster.sector, mP[2], mP[3], merger->GetConstantMem()->calibObjects, zz, pad, relTime);
388397
}
389398
} else if (retVal >= GPUTPCGMPropagator::updateErrorClusterRejected) { // cluster far away form the track
390399
if (allowModification) {
@@ -419,6 +428,7 @@ GPUd() bool GPUTPCGMTrackParam::Fit(GPUTPCGMMerger* GPUrestrict() merger, int32_
419428

420429
if (param.par.dodEdx && param.dodEdxDownscaled) {
421430
dEdx.computedEdx(merger->OutputTracksdEdx()[iTrk], param);
431+
dEdxAlt.computedEdx(merger->OutputTracksdEdxAlt()[iTrk], param);
422432
}
423433
Alpha = prop.GetAlpha();
424434
MoveToReference(prop, param, Alpha);

0 commit comments

Comments
 (0)