Skip to content

Commit 4f0f2d0

Browse files
committed
GPU TPC: Add option to apply timebin cut to CTF cluster decoding CPU-only version
1 parent 68477ac commit 4f0f2d0

File tree

11 files changed

+29
-4
lines changed

11 files changed

+29
-4
lines changed

GPU/GPUTracking/Base/GPUParam.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ void GPUParam::SetDefaults(float solenoidBz)
120120
par.toyMCEventsFlag = false;
121121
par.continuousTracking = false;
122122
continuousMaxTimeBin = 0;
123+
tpcCutTimeBin = 0;
123124
par.debugLevel = 0;
124125
par.earlyTpcTransform = false;
125126
}
@@ -132,6 +133,7 @@ void GPUParam::UpdateSettings(const GPUSettingsGRP* g, const GPUSettingsProcessi
132133
par.toyMCEventsFlag = g->homemadeEvents;
133134
par.continuousTracking = g->grpContinuousMaxTimeBin != 0;
134135
continuousMaxTimeBin = g->grpContinuousMaxTimeBin == -1 ? GPUSettings::TPC_MAX_TF_TIME_BIN : g->grpContinuousMaxTimeBin;
136+
tpcCutTimeBin = g->tpcCutTimeBin;
135137
}
136138
par.earlyTpcTransform = rec.tpc.forceEarlyTransform == -1 ? (!par.continuousTracking) : rec.tpc.forceEarlyTransform;
137139
qptB5Scaler = CAMath::Abs(bzkG) > 0.1f ? CAMath::Abs(bzkG) / 5.006680f : 1.f; // Repeat here, since passing in g is optional

GPU/GPUTracking/Base/GPUParam.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct GPUParam_t {
5959

6060
int8_t dodEdxDownscaled;
6161
int32_t continuousMaxTimeBin;
62+
int32_t tpcCutTimeBin;
6263

6364
GPUTPCGeometry tpcGeometry; // TPC Geometry
6465
GPUTPCGMPolynomialField polynomialField; // Polynomial approx. of magnetic field for TPC GM

GPU/GPUTracking/DataTypes/GPUNewCalibValues.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,7 @@ void GPUNewCalibValues::updateFrom(const GPUNewCalibValues* from)
2424
if (from->newContinuousMaxTimeBin) {
2525
continuousMaxTimeBin = from->continuousMaxTimeBin;
2626
}
27+
if (from->newTPCTimeBinCut) {
28+
tpcTimeBinCut = from->tpcTimeBinCut;
29+
}
2730
}

GPU/GPUTracking/DataTypes/GPUNewCalibValues.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ namespace gpu
2525
struct GPUNewCalibValues {
2626
bool newSolenoidField = false;
2727
bool newContinuousMaxTimeBin = false;
28+
bool newTPCTimeBinCut = false;
2829
float solenoidField = 0.f;
2930
uint32_t continuousMaxTimeBin = 0;
31+
int32_t tpcTimeBinCut = 0;
3032

3133
void updateFrom(const GPUNewCalibValues* from);
3234
};

GPU/GPUTracking/DataTypes/GPUSettings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ struct GPUSettingsGRP {
6060
int32_t grpContinuousMaxTimeBin = -2; // 0 for triggered events, -1 for automatic setting, -2 invalid default
6161
int32_t needsClusterer = 0; // Set to true if the data requires the clusterizer
6262
int32_t doCompClusterDecode = 0; // Set to true if the data contains compressed TPC clusters
63+
int32_t tpcCutTimeBin = 0; // Cut TPC clusters and digits >= this cut
6364
};
6465

6566
// Parameters of the current time frame

GPU/GPUTracking/Global/GPUChainTracking.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,9 @@ int32_t GPUChainTracking::DoQueuedUpdates(int32_t stream, bool updateSlave)
641641
if (mNewCalibValues->newContinuousMaxTimeBin) {
642642
grp->grpContinuousMaxTimeBin = mNewCalibValues->continuousMaxTimeBin;
643643
}
644+
if (mNewCalibValues->newTPCTimeBinCut) {
645+
grp->tpcCutTimeBin = mNewCalibValues->tpcTimeBinCut;
646+
}
644647
}
645648
}
646649
if (GetProcessingSettings().tpcDownscaledEdx != 0) {

GPU/GPUTracking/Global/GPUChainTrackingCompression.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ int32_t GPUChainTracking::RunTPCDecompression()
225225
GPUError("Error decompressing clusters");
226226
return 1;
227227
}
228-
if (GetProcessingSettings().tpcApplyCFCutsAtDecoding) {
229-
RunTPCClusterFilter(mClusterNativeAccess.get(), allocatorFinal, true);
228+
if (GetProcessingSettings().tpcApplyCFCutsAtDecoding || param().tpcCutTimeBin > 0) {
229+
RunTPCClusterFilter(mClusterNativeAccess.get(), allocatorFinal, GetProcessingSettings().tpcApplyCFCutsAtDecoding);
230230
}
231231
decompressTimer.Stop();
232232
mIOPtrs.clustersNative = mClusterNativeAccess.get();

GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,9 @@ void GPUChainTracking::RunTPCClusterFilter(o2::tpc::ClusterNativeAccess* cluster
315315
keep = keep && cl.qTot > param().rec.tpc.cfQTotCutoff && cl.qMax > param().rec.tpc.cfQMaxCutoff;
316316
keep = keep && (!(cl.getFlags() & o2::tpc::ClusterNative::flagSingle) || ((cl.sigmaPadPacked || cl.qMax > param().rec.tpc.cfQMaxCutoffSinglePad) && (cl.sigmaTimePacked || cl.qMax > param().rec.tpc.cfQMaxCutoffSingleTime)));
317317
}
318+
if (param().tpcCutTimeBin > 0) {
319+
keep = keep & cl.getTime() < param().tpcCutTimeBin;
320+
}
318321
keep = keep && (!GetProcessingSettings().tpcApplyDebugClusterFilter || clusterFilter.filter(iSector, iRow, cl));
319322
if (iPhase && keep) {
320323
outputBuffer[countTotal] = cl;

GPU/Workflow/include/GPUWorkflow/GPUWorkflowSpec.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ class GPURecoWorkflowSpec : public o2::framework::Task
233233
bool mITSGeometryCreated = false;
234234
bool mTRDGeometryCreated = false;
235235
bool mPropagatorInstanceCreated = false;
236+
int32_t mTPCCutAtTimeBin = -1;
236237
};
237238

238239
} // end namespace gpu

GPU/Workflow/src/GPUWorkflowSpec.cxx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,9 +1013,8 @@ void GPURecoWorkflowSpec::doCalibUpdates(o2::framework::ProcessingContext& pc, c
10131013
LOG(info) << "Updating solenoid field " << newCalibValues.solenoidField;
10141014
}
10151015
if (mAutoContinuousMaxTimeBin) {
1016-
mConfig->configGRP.grpContinuousMaxTimeBin = GPUO2InterfaceUtils::getTpcMaxTimeBinFromNHbf(mTFSettings->nHBFPerTF);
10171016
newCalibValues.newContinuousMaxTimeBin = true;
1018-
newCalibValues.continuousMaxTimeBin = mConfig->configGRP.grpContinuousMaxTimeBin;
1017+
newCalibValues.continuousMaxTimeBin = mConfig->configGRP.grpContinuousMaxTimeBin = GPUO2InterfaceUtils::getTpcMaxTimeBinFromNHbf(mTFSettings->nHBFPerTF);
10191018
LOG(info) << "Updating max time bin " << newCalibValues.continuousMaxTimeBin << " (" << mTFSettings->nHBFPerTF << " orbits)";
10201019
}
10211020

@@ -1050,6 +1049,11 @@ void GPURecoWorkflowSpec::doCalibUpdates(o2::framework::ProcessingContext& pc, c
10501049
if (mSpecConfig.runITSTracking) {
10511050
needCalibUpdate = fetchCalibsCCDBITS(pc) || needCalibUpdate;
10521051
}
1052+
if (mTPCCutAtTimeBin != mConfig->configGRP.tpcCutTimeBin) {
1053+
newCalibValues.newTPCTimeBinCut = true;
1054+
newCalibValues.tpcTimeBinCut = mConfig->configGRP.tpcCutTimeBin = mTPCCutAtTimeBin;
1055+
needCalibUpdate = true;
1056+
}
10531057
if (needCalibUpdate) {
10541058
LOG(info) << "Updating GPUReconstruction calibration objects";
10551059
mGPUReco->UpdateCalibration(newCalibObjects, newCalibValues);
@@ -1098,6 +1102,7 @@ Inputs GPURecoWorkflowSpec::inputs()
10981102
if (mSpecConfig.outputTracks || mSpecConfig.caClusterer) {
10991103
// calibration objects for TPC clusterization
11001104
inputs.emplace_back("tpcgain", gDataOriginTPC, "PADGAINFULL", 0, Lifetime::Condition, ccdbParamSpec(o2::tpc::CDBTypeMap.at(o2::tpc::CDBType::CalPadGainFull)));
1105+
inputs.emplace_back("tpcaltrosync", gDataOriginTPC, "ALTROSYNCSIGNAL", 0, Lifetime::Condition, ccdbParamSpec(o2::tpc::CDBTypeMap.at(o2::tpc::CDBType::AltroSyncSignal)));
11011106
}
11021107
if (mSpecConfig.outputTracks) {
11031108
// calibration objects for TPC tracking

0 commit comments

Comments
 (0)