Skip to content

Commit

Permalink
GPU TPC: Add option to apply timebin cut to CTF cluster decoding CPU-…
Browse files Browse the repository at this point in the history
…only version
  • Loading branch information
davidrohr committed Nov 25, 2024
1 parent e8abe52 commit 442b5c6
Show file tree
Hide file tree
Showing 11 changed files with 29 additions and 5 deletions.
2 changes: 2 additions & 0 deletions GPU/GPUTracking/Base/GPUParam.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ void GPUParam::SetDefaults(float solenoidBz)
par.toyMCEventsFlag = false;
par.continuousTracking = false;
continuousMaxTimeBin = 0;
tpcCutTimeBin = 0;
par.debugLevel = 0;
par.earlyTpcTransform = false;
}
Expand All @@ -132,6 +133,7 @@ void GPUParam::UpdateSettings(const GPUSettingsGRP* g, const GPUSettingsProcessi
par.toyMCEventsFlag = g->homemadeEvents;
par.continuousTracking = g->grpContinuousMaxTimeBin != 0;
continuousMaxTimeBin = g->grpContinuousMaxTimeBin == -1 ? GPUSettings::TPC_MAX_TF_TIME_BIN : g->grpContinuousMaxTimeBin;
tpcCutTimeBin = g->tpcCutTimeBin;
}
par.earlyTpcTransform = rec.tpc.forceEarlyTransform == -1 ? (!par.continuousTracking) : rec.tpc.forceEarlyTransform;
qptB5Scaler = CAMath::Abs(bzkG) > 0.1f ? CAMath::Abs(bzkG) / 5.006680f : 1.f; // Repeat here, since passing in g is optional
Expand Down
1 change: 1 addition & 0 deletions GPU/GPUTracking/Base/GPUParam.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ struct GPUParam_t {

int8_t dodEdxDownscaled;
int32_t continuousMaxTimeBin;
int32_t tpcCutTimeBin;

GPUTPCGeometry tpcGeometry; // TPC Geometry
GPUTPCGMPolynomialField polynomialField; // Polynomial approx. of magnetic field for TPC GM
Expand Down
3 changes: 3 additions & 0 deletions GPU/GPUTracking/DataTypes/GPUNewCalibValues.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,7 @@ void GPUNewCalibValues::updateFrom(const GPUNewCalibValues* from)
if (from->newContinuousMaxTimeBin) {
continuousMaxTimeBin = from->continuousMaxTimeBin;
}
if (from->newTPCTimeBinCut) {
tpcTimeBinCut = from->tpcTimeBinCut;
}
}
2 changes: 2 additions & 0 deletions GPU/GPUTracking/DataTypes/GPUNewCalibValues.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ namespace gpu
struct GPUNewCalibValues {
bool newSolenoidField = false;
bool newContinuousMaxTimeBin = false;
bool newTPCTimeBinCut = false;
float solenoidField = 0.f;
uint32_t continuousMaxTimeBin = 0;
int32_t tpcTimeBinCut = 0;

void updateFrom(const GPUNewCalibValues* from);
};
Expand Down
1 change: 1 addition & 0 deletions GPU/GPUTracking/DataTypes/GPUSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ struct GPUSettingsGRP {
int32_t grpContinuousMaxTimeBin = -2; // 0 for triggered events, -1 for automatic setting, -2 invalid default
int32_t needsClusterer = 0; // Set to true if the data requires the clusterizer
int32_t doCompClusterDecode = 0; // Set to true if the data contains compressed TPC clusters
int32_t tpcCutTimeBin = 0; // Cut TPC clusters and digits >= this cut
};

// Parameters of the current time frame
Expand Down
4 changes: 3 additions & 1 deletion GPU/GPUTracking/Global/GPUChainTracking.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,9 @@ int32_t GPUChainTracking::DoQueuedUpdates(int32_t stream, bool updateSlave)
if (mNewCalibValues->newContinuousMaxTimeBin) {
grp->grpContinuousMaxTimeBin = mNewCalibValues->continuousMaxTimeBin;
}
}
if (mNewCalibValues->newTPCTimeBinCut) {
grp->tpcCutTimeBin = mNewCalibValues->tpcTimeBinCut;
}
}
if (GetProcessingSettings().tpcDownscaledEdx != 0) {
p = &GetProcessingSettings();
Expand Down
4 changes: 2 additions & 2 deletions GPU/GPUTracking/Global/GPUChainTrackingCompression.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,8 @@ int32_t GPUChainTracking::RunTPCDecompression()
GPUError("Error decompressing clusters");
return 1;
}
if (GetProcessingSettings().tpcApplyCFCutsAtDecoding) {
RunTPCClusterFilter(mClusterNativeAccess.get(), allocatorFinal, true);
if (GetProcessingSettings().tpcApplyCFCutsAtDecoding || param().tpcCutTimeBin > 0) {
RunTPCClusterFilter(mClusterNativeAccess.get(), allocatorFinal, GetProcessingSettings().tpcApplyCFCutsAtDecoding);
}
decompressTimer.Stop();
mIOPtrs.clustersNative = mClusterNativeAccess.get();
Expand Down
3 changes: 3 additions & 0 deletions GPU/GPUTracking/Global/GPUChainTrackingDebugAndProfiling.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,9 @@ void GPUChainTracking::RunTPCClusterFilter(o2::tpc::ClusterNativeAccess* cluster
keep = keep && cl.qTot > param().rec.tpc.cfQTotCutoff && cl.qMax > param().rec.tpc.cfQMaxCutoff;
keep = keep && (!(cl.getFlags() & o2::tpc::ClusterNative::flagSingle) || ((cl.sigmaPadPacked || cl.qMax > param().rec.tpc.cfQMaxCutoffSinglePad) && (cl.sigmaTimePacked || cl.qMax > param().rec.tpc.cfQMaxCutoffSingleTime)));
}
if (param().tpcCutTimeBin > 0) {
keep = keep & cl.getTime() < param().tpcCutTimeBin;
}
keep = keep && (!GetProcessingSettings().tpcApplyDebugClusterFilter || clusterFilter.filter(iSector, iRow, cl));
if (iPhase && keep) {
outputBuffer[countTotal] = cl;
Expand Down
1 change: 1 addition & 0 deletions GPU/Workflow/include/GPUWorkflow/GPUWorkflowSpec.h
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ class GPURecoWorkflowSpec : public o2::framework::Task
bool mITSGeometryCreated = false;
bool mTRDGeometryCreated = false;
bool mPropagatorInstanceCreated = false;
int32_t mTPCCutAtTimeBin = -1;
};

} // end namespace gpu
Expand Down
9 changes: 7 additions & 2 deletions GPU/Workflow/src/GPUWorkflowSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1013,9 +1013,8 @@ void GPURecoWorkflowSpec::doCalibUpdates(o2::framework::ProcessingContext& pc, c
LOG(info) << "Updating solenoid field " << newCalibValues.solenoidField;
}
if (mAutoContinuousMaxTimeBin) {
mConfig->configGRP.grpContinuousMaxTimeBin = GPUO2InterfaceUtils::getTpcMaxTimeBinFromNHbf(mTFSettings->nHBFPerTF);
newCalibValues.newContinuousMaxTimeBin = true;
newCalibValues.continuousMaxTimeBin = mConfig->configGRP.grpContinuousMaxTimeBin;
newCalibValues.continuousMaxTimeBin = mConfig->configGRP.grpContinuousMaxTimeBin = GPUO2InterfaceUtils::getTpcMaxTimeBinFromNHbf(mTFSettings->nHBFPerTF);
LOG(info) << "Updating max time bin " << newCalibValues.continuousMaxTimeBin << " (" << mTFSettings->nHBFPerTF << " orbits)";
}

Expand Down Expand Up @@ -1050,6 +1049,11 @@ void GPURecoWorkflowSpec::doCalibUpdates(o2::framework::ProcessingContext& pc, c
if (mSpecConfig.runITSTracking) {
needCalibUpdate = fetchCalibsCCDBITS(pc) || needCalibUpdate;
}
if (mTPCCutAtTimeBin != mConfig->configGRP.tpcCutTimeBin) {
newCalibValues.newTPCTimeBinCut = true;
newCalibValues.tpcTimeBinCut = mConfig->configGRP.tpcCutTimeBin = mTPCCutAtTimeBin;
needCalibUpdate = true;
}
if (needCalibUpdate) {
LOG(info) << "Updating GPUReconstruction calibration objects";
mGPUReco->UpdateCalibration(newCalibObjects, newCalibValues);
Expand Down Expand Up @@ -1098,6 +1102,7 @@ Inputs GPURecoWorkflowSpec::inputs()
if (mSpecConfig.outputTracks || mSpecConfig.caClusterer) {
// calibration objects for TPC clusterization
inputs.emplace_back("tpcgain", gDataOriginTPC, "PADGAINFULL", 0, Lifetime::Condition, ccdbParamSpec(o2::tpc::CDBTypeMap.at(o2::tpc::CDBType::CalPadGainFull)));
inputs.emplace_back("tpcaltrosync", gDataOriginTPC, "ALTROSYNCSIGNAL", 0, Lifetime::Condition, ccdbParamSpec(o2::tpc::CDBTypeMap.at(o2::tpc::CDBType::AltroSyncSignal)));
}
if (mSpecConfig.outputTracks) {
// calibration objects for TPC tracking
Expand Down
4 changes: 4 additions & 0 deletions GPU/Workflow/src/GPUWorkflowTPC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,10 @@ bool GPURecoWorkflowSpec::fetchCalibsCCDBTPC<GPUCalibObjectsConst>(ProcessingCon
pc.inputs().get<o2::tpc::CalDet<float>*>("tpcgain");
}

if (mSpecConfig.outputTracks || mSpecConfig.caClusterer) {
mTPCCutAtTimeBin = pc.inputs().get<o2::tpc::CalDet<o2::tpc::AltroSyncSignal>*>("tpcaltrosync")->getTB2Cut(pc.services().get<o2::framework::TimingInfo>().tfCounter);
}

// these calibrations are only defined for the tracking
if (mSpecConfig.outputTracks) {
// update the calibration objects in case they changed in the CCDB
Expand Down

0 comments on commit 442b5c6

Please sign in to comment.