Skip to content

Commit a9b4dbf

Browse files
committed
GPU QA: In order to run resolution QA with external input, we must provide some means to configure the propagator with bz etc.
1 parent 7735708 commit a9b4dbf

6 files changed

Lines changed: 39 additions & 19 deletions

File tree

Detectors/TPC/qc/src/Tracking.cxx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
#include "TPCQC/Tracking.h"
2929
#include "GPUO2InterfaceQA.h"
3030
#include "GPUO2InterfaceConfiguration.h"
31+
#include "DetectorsCommonDataFormats/NameConf.h"
32+
#include "DataFormatsParameters/GRPObject.h"
3133

3234
ClassImp(o2::tpc::qc::Tracking);
3335

@@ -37,15 +39,23 @@ using namespace o2::gpu;
3739
Tracking::Tracking() = default;
3840
Tracking::~Tracking() = default;
3941

40-
static constexpr int QAMODE = 7;
42+
static constexpr int QAMODE = 7; // Efficiency (1) | Res (2) | Pull (3), others are not supported from external input!
4143

4244
//______________________________________________________________________________
4345
void Tracking::initialize(outputModes outputMode, bool postprocessOnly)
4446
{
4547
mOutputMode = outputMode;
4648
mQAConfig = std::make_unique<GPUO2InterfaceConfiguration>();
49+
const auto grp = o2::parameters::GRPObject::loadFrom(o2::base::NameConf::getGRPFileName());
50+
if (grp) {
51+
mQAConfig->configEvent.solenoidBz = 5.00668f * grp->getL3Current() / 30000.;
52+
mQAConfig->configEvent.continuousMaxTimeBin = grp->isDetContinuousReadOut(o2::detectors::DetID::TPC) ? -1 : 0;
53+
} else {
54+
throw std::runtime_error("Failed to initialize run parameters from GRP");
55+
}
56+
mQAConfig->ReadConfigurableParam();
4757
mQAConfig->configQA.shipToQCAsCanvas = mOutputMode == outputLayout;
48-
mQA = std::make_unique<GPUO2InterfaceQA>(&mQAConfig->configQA);
58+
mQA = std::make_unique<GPUO2InterfaceQA>(mQAConfig.get());
4959
if (!postprocessOnly) {
5060
mQA->initializeForProcessing(QAMODE);
5161
}

Detectors/TPC/workflow/src/CATrackerSpec.cxx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ DataProcessorSpec getCATrackerSpec(CompletionPolicyData* policyData, ca::Config
104104
std::unique_ptr<TPCFastTransform> fastTransform;
105105
std::unique_ptr<TPCdEdxCalibrationSplines> dEdxSplines;
106106
std::unique_ptr<TPCPadGainCalib> tpcPadGainCalib;
107-
std::unique_ptr<GPUSettingsQA> qaConfig;
107+
std::unique_ptr<GPUO2InterfaceConfiguration> config;
108108
int qaTaskMask = 0;
109109
std::unique_ptr<GPUO2InterfaceQA> qa;
110110
std::vector<int> clusterOutputIds;
@@ -121,7 +121,8 @@ DataProcessorSpec getCATrackerSpec(CompletionPolicyData* policyData, ca::Config
121121
processAttributes->tpcSectorMask |= (1ul << s);
122122
}
123123
auto initFunction = [processAttributes, specconfig](InitContext& ic) {
124-
GPUO2InterfaceConfiguration config;
124+
processAttributes->config.reset(new GPUO2InterfaceConfiguration);
125+
GPUO2InterfaceConfiguration& config = *processAttributes->config.get();
125126
GPUSettingsO2 confParam;
126127
{
127128
auto& parser = processAttributes->parser;
@@ -259,8 +260,7 @@ DataProcessorSpec getCATrackerSpec(CompletionPolicyData* policyData, ca::Config
259260
throw std::invalid_argument("GPUCATracking initialization failed");
260261
}
261262
if (specconfig.outputQA) {
262-
processAttributes->qaConfig.reset(new GPUSettingsQA(config.configQA));
263-
processAttributes->qa = std::make_unique<GPUO2InterfaceQA>(processAttributes->qaConfig.get());
263+
processAttributes->qa = std::make_unique<GPUO2InterfaceQA>(processAttributes->config.get());
264264
}
265265
timer.Stop();
266266
timer.Reset();

GPU/GPUTracking/Interface/GPUO2InterfaceQA.cxx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@
1111
/// \file GPUO2InterfaceQA.cxx
1212
/// \author David Rohr
1313

14+
#include "GPUParam.h"
1415
#include "GPUQA.h"
16+
#include "GPUO2InterfaceConfiguration.h"
1517
#include "GPUO2InterfaceQA.h"
1618

1719
using namespace o2::gpu;
1820
using namespace o2::tpc;
1921

20-
GPUO2InterfaceQA::GPUO2InterfaceQA(const GPUSettingsQA* config) : mQA(new GPUQA(nullptr, config))
22+
GPUO2InterfaceQA::GPUO2InterfaceQA(const GPUO2InterfaceConfiguration* config)
2123
{
24+
mParam.reset(new GPUParam);
25+
mParam->SetDefaults(&config->configEvent, &config->configReconstruction, &config->configProcessing, nullptr);
26+
mQA.reset(new GPUQA(nullptr, &config->configQA, mParam.get()));
2227
}
2328

2429
GPUO2InterfaceQA::~GPUO2InterfaceQA() = default;

GPU/GPUTracking/Interface/GPUO2InterfaceQA.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,12 @@ struct ClusterNativeAccess;
4646
namespace o2::gpu
4747
{
4848
class GPUQA;
49-
class GPUSettingsQA;
49+
class GPUParam;
50+
class GPUO2InterfaceConfiguration;
5051
class GPUO2InterfaceQA
5152
{
5253
public:
53-
GPUO2InterfaceQA(const GPUSettingsQA* config = nullptr);
54+
GPUO2InterfaceQA(const GPUO2InterfaceConfiguration* config = nullptr);
5455
~GPUO2InterfaceQA();
5556

5657
int initializeForProcessing(int tasks); // only needed for processing, not for postprocessing
@@ -67,6 +68,7 @@ class GPUO2InterfaceQA
6768

6869
private:
6970
std::unique_ptr<GPUQA> mQA;
71+
std::unique_ptr<GPUParam> mParam;
7072
};
7173
} // namespace o2::gpu
7274

GPU/GPUTracking/Standalone/qa/GPUQA.cxx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ void GPUQA::clearGarbagageCollector()
324324
std::apply([](auto&&... args) { ((args.clear()), ...); }, mGarbageCollector->v);
325325
}
326326

327-
GPUQA::GPUQA(GPUChainTracking* chain, const GPUSettingsQA* config) : mTracking(chain), mConfig(config ? *config : GPUQA_GetConfig(chain)), mGarbageCollector(std::make_unique<GPUQAGarbageCollection>())
327+
GPUQA::GPUQA(GPUChainTracking* chain, const GPUSettingsQA* config, const GPUParam* param) : mTracking(chain), mConfig(config ? *config : GPUQA_GetConfig(chain)), mParam(param ? *param : chain->GetParam()), mGarbageCollector(std::make_unique<GPUQAGarbageCollection>())
328328
{
329329
static int initColorsInitialized = initColors();
330330
(void)initColorsInitialized;
@@ -756,9 +756,9 @@ void GPUQA::RunQA(bool matchOnly, const std::vector<o2::tpc::TrackTPC>* tracksEx
756756
mcLabelBuffer[mNEvents - 1].resize(mTracking->mIOPtrs.nMergedTracks);
757757
}
758758

759-
bool mcAvail = mcPresent();
759+
bool mcAvail = mcPresent() || tracksExtMC;
760760

761-
if (mcAvail && mTracking->GetParam().rec.NonConsecutiveIDs) {
761+
if (mcAvail && !tracksExtMC && mTracking->GetParam().rec.NonConsecutiveIDs) {
762762
GPUError("QA incompatible to non-consecutive MC labels");
763763
return;
764764
}
@@ -1088,8 +1088,8 @@ void GPUQA::RunQA(bool matchOnly, const std::vector<o2::tpc::TrackTPC>* tracksEx
10881088
GPUTPCGMPropagator prop;
10891089
prop.SetMaxSinPhi(.999);
10901090
prop.SetMaterialTPC();
1091-
prop.SetPolynomialField(&mTracking->GetParam().polynomialField);
1092-
prop.SetToyMCEventsFlag(mTracking->GetParam().par.ToyMCEventsFlag);
1091+
prop.SetPolynomialField(&mParam.polynomialField);
1092+
prop.SetToyMCEventsFlag(mParam.par.ToyMCEventsFlag);
10931093

10941094
for (unsigned int i = 0; i < mTrackMCLabels.size(); i++) {
10951095
if (mConfig.writeMCLabels) {
@@ -1188,11 +1188,11 @@ void GPUQA::RunQA(bool matchOnly, const std::vector<o2::tpc::TrackTPC>* tracksEx
11881188
}
11891189

11901190
auto getdz = [this, &param, &mc1, &side]() {
1191-
if (!mTracking->GetParam().par.continuousMaxTimeBin) {
1191+
if (!mParam.par.continuousMaxTimeBin) {
11921192
return param.Z() - mc1.z;
11931193
}
11941194
#ifdef GPUCA_TPC_GEOMETRY_O2
1195-
if (!mTracking->GetParam().par.earlyTpcTransform) {
1195+
if (!mParam.par.earlyTpcTransform) {
11961196
float shift = side == 2 ? 0 : mTracking->GetTPCTransform()->convDeltaTimeToDeltaZinTimeFrame(side * GPUChainTracking::NSLICES / 2, param.GetTZOffset() - mc1.t0);
11971197
return param.GetZ() + shift - mc1.z;
11981198
}
@@ -2263,8 +2263,9 @@ int GPUQA::DrawQAHistograms(TObjArray* qcout)
22632263
}
22642264
if (!mConfig.inputHistogramsOnly && mcAvail) {
22652265
TH1D* e = hist;
2266-
e->GetEntries();
2267-
e->Fit("gaus", "sQ");
2266+
if (e && e->GetEntries()) {
2267+
e->Fit("gaus", "sQ");
2268+
}
22682269
}
22692270

22702271
float tmpMax = 0;

GPU/GPUTracking/Standalone/qa/GPUQA.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,15 @@ struct AliHLTTPCClusterMCLabel;
8383
namespace GPUCA_NAMESPACE::gpu
8484
{
8585
class GPUChainTracking;
86+
class GPUParam;
8687
struct GPUTPCMCInfo;
8788
struct GPUQAGarbageCollection;
8889

8990
class GPUQA
9091
{
9192
public:
9293
GPUQA();
93-
GPUQA(GPUChainTracking* chain, const GPUSettingsQA* config = nullptr);
94+
GPUQA(GPUChainTracking* chain, const GPUSettingsQA* config = nullptr, const GPUParam* param = nullptr);
9495
~GPUQA();
9596

9697
int InitQA(int tasks = -1);
@@ -206,6 +207,7 @@ class GPUQA
206207

207208
GPUChainTracking* mTracking;
208209
const GPUSettingsQA& mConfig;
210+
const GPUParam& mParam;
209211

210212
const char* str_perf_figure_1 = "ALICE Performance 2018/03/20";
211213
// const char* str_perf_figure_2 = "2015, MC pp, #sqrt{s} = 5.02 TeV";

0 commit comments

Comments
 (0)