Skip to content

Commit 0d679f8

Browse files
committed
[Common] Update integration test to recent AO2D content
1 parent 52366c1 commit 0d679f8

File tree

1 file changed

+196
-13
lines changed

1 file changed

+196
-13
lines changed

Common/Tasks/integrationTest.cxx

Lines changed: 196 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,31 +51,53 @@ struct integrationTest {
5151
Configurable<bool> do2DNTrackCorr{"do2DNTrackCorr", true, "Do 2D Ntrack correlation plots"};
5252

5353
Configurable<bool> doBasicQA{"doBasicQA", true, "Do basic QA"};
54+
Configurable<bool> checkThinning{"checkThinning", true, "Check thinning-related quantities (retaining of TPC-only tracks)"};
5455
ConfigurableAxis axisHasDetector{"axisHasDetector", {16, -0.5f, 15.5f}, ""};
5556
ConfigurableAxis axisEta{"axisEta", {200, -2.0f, 2.0f}, ""};
5657
ConfigurableAxis axisPhi{"axisPhi", {200, 0.0f, +2 * TMath::Pi()}, ""};
5758
ConfigurableAxis axisNclu{"axisNclu", {10, -0.5f, 9.5f}, ""};
5859
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "pt axis for analysis"};
5960

61+
enum kTrackType { kTrackUsedV0 = 0,
62+
kTrackUsedCascade,
63+
kTrackUsedDecay3Body,
64+
kTrackUsedTrackedV0,
65+
kTrackUsedTrackedCascade,
66+
kTrackUsedQA};
67+
6068
enum kTable { kBC = 0,
69+
kBCFlag,
6170
kCollision,
71+
kOrigin,
6272
kTrack,
6373
kTrackCov,
6474
kTrackExtra,
6575
kMftTrack,
76+
kMftTrackCov,
6677
kFwdTrack,
6778
kFwdTrackCov,
79+
kFwdTrackCl,
6880
kAmbiguousTrack,
6981
kAmbiguousMftTrack,
7082
kAmbiguousFwdTrack,
83+
kTracked3Body,
84+
kTrackedCascade,
85+
kTrackedV0,
86+
kTrackQA,
7187
kV0,
7288
kCascade,
89+
kDecay3Body,
7390
kCalo,
7491
kCaloTrigger,
92+
kCpvCluster,
7593
kFDD,
94+
kFDDExtra,
7695
kFT0,
77-
kV0A,
96+
kFT0Extra,
97+
kFV0A,
98+
kFV0AExtra,
7899
kZDC,
100+
kHMPID,
79101
kMcCollision,
80102
kMcCollisionLabel,
81103
kMcParticle,
@@ -91,24 +113,38 @@ struct integrationTest {
91113
TString lTableNames[] =
92114
{
93115
"bc",
116+
"bcflag",
94117
"collision",
118+
"origin",
95119
"track_iu",
96120
"trackcov_iu",
97121
"trackextra",
98122
"mfttrack",
123+
"mfttrackcov",
99124
"fwdtrack",
100125
"fwdtrackcov",
126+
"fwdtrkcl",
101127
"ambiguoustrack",
102128
"ambiguousmfttrack",
103129
"ambiguousfwdtrack",
130+
"tracked3body",
131+
"trackedcascade",
132+
"trackedv0",
133+
"trackqa",
104134
"v0",
105135
"cascade",
136+
"decay3body",
106137
"calo",
107-
"calotrigger"
138+
"calotrigger",
139+
"cpvcluster",
108140
"fdd",
141+
"fddextra",
109142
"ft0",
143+
"ft0extra",
110144
"fv0a",
145+
"fv0aextra",
111146
"zdc",
147+
"hmpid",
112148
"mccollision",
113149
"mccollisionlabel",
114150
"mcparticle",
@@ -118,7 +154,7 @@ struct integrationTest {
118154
"Total count",
119155
"" // empty (last)
120156
};
121-
const AxisSpec axisTables{30, 0.0f, 30.0f, ""};
157+
const AxisSpec axisTables{40, 0.0f, 40.0f, ""};
122158
const AxisSpec axisTracks{nBinsTracks, -0.5f, MaxNTrack - 0.5f, "N_{tracks}"};
123159
const AxisSpec axisCollisions{nBinsCollisions, -0.5f, nBinsCollisions - 0.5f, "N_{collisions}"};
124160
// Label correctly to avoid confusion
@@ -171,6 +207,32 @@ struct integrationTest {
171207
histos.add<TH1>("hNCluAll", "hNCluAll", HistType::kTH1D, {axisNclu});
172208
histos.add<TH1>("hNCluNoTPCOnly", "hNCluNoTPCOnly", HistType::kTH1D, {axisNclu});
173209
}
210+
if (checkThinning) {
211+
auto hThinningQA = histos.add<TH2>("hThinningQA", "hThinningQA", HistType::kTH2D, {{64, -0.5f, 63.5f}, {2, -0.5f, 1.5f}});
212+
213+
TString kTrackTypeNames[] =
214+
{
215+
"V",
216+
"tV",
217+
"3b",
218+
"C",
219+
"tC",
220+
"QA"
221+
};
222+
223+
// construct labels to make this plot easier to understand
224+
for(uint8_t i=0; i<64; i++){
225+
TString trackTypeString = "";
226+
for(uint8_t j=0; j<kTrackUsedQA+1; j++){
227+
if( ((i) & (1<<(j))) ){
228+
trackTypeString.Append(Form("%s ", kTrackTypeNames[j].Data()));
229+
}
230+
}
231+
hThinningQA->GetXaxis()->SetBinLabel(i+1, trackTypeString.Data());
232+
}
233+
hThinningQA->GetYaxis()->SetBinLabel(0, "Not TPConly");
234+
hThinningQA->GetYaxis()->SetBinLabel(1, "TPConly");
235+
}
174236
}
175237
//*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
176238
// Standard sizes (uncorrelated)
@@ -193,42 +255,163 @@ struct integrationTest {
193255
aod::FDDs const& fdds,
194256
aod::FT0s const& ft0s,
195257
aod::FV0As const& fv0as,
258+
aod::Zdcs const& zdcs)
259+
{
260+
histos.fill(HIST("hTableSizes"), static_cast<float>(kBC) + 0.5f, bcs.size());
261+
histos.fill(HIST("hTableSizes"), static_cast<float>(kCollision) + 0.5f, collisions.size());
262+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrack) + 0.5f, tracks.size());
263+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackCov) + 0.5f, trackcovs.size());
264+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackExtra) + 0.5f, trackextras.size());
265+
histos.fill(HIST("hTableSizes"), static_cast<float>(kMftTrack) + 0.5f, mfttracks.size());
266+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFwdTrack) + 0.5f, fwdtracks.size());
267+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFwdTrackCov) + 0.5f, fwdtrackcovs.size());
268+
histos.fill(HIST("hTableSizes"), static_cast<float>(kAmbiguousTrack) + 0.5f, ambitracks.size());
269+
histos.fill(HIST("hTableSizes"), static_cast<float>(kAmbiguousMftTrack) + 0.5f, ambimfttracks.size());
270+
histos.fill(HIST("hTableSizes"), static_cast<float>(kAmbiguousFwdTrack) + 0.5f, ambifwdtracks.size());
271+
histos.fill(HIST("hTableSizes"), static_cast<float>(kV0) + 0.5f, v0s.size());
272+
histos.fill(HIST("hTableSizes"), static_cast<float>(kCascade) + 0.5f, cascades.size());
273+
histos.fill(HIST("hTableSizes"), static_cast<float>(kCalo) + 0.5f, calos.size());
274+
histos.fill(HIST("hTableSizes"), static_cast<float>(kCaloTrigger) + 0.5f, calotriggers.size());
275+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFDD) + 0.5f, fdds.size());
276+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFT0) + 0.5f, ft0s.size());
277+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFV0A) + 0.5f, fv0as.size());
278+
histos.fill(HIST("hTableSizes"), static_cast<float>(kZDC) + 0.5f, zdcs.size());
279+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFrameCounter) + 0.5f);
280+
}
281+
PROCESS_SWITCH(integrationTest, processDataModel, "Check data model", true);
282+
283+
//*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
284+
// Revised tables for newer data
285+
// Warning: will not work for legacy AO2Ds
286+
void processDataModel2026(
287+
aod::BCs const& bcs,
288+
aod::BCFlags const& bcflags,
289+
aod::Collisions const& collisions,
290+
aod::Origins const& origins,
291+
aod::TracksIU const& tracks,
292+
aod::TracksCovIU const& trackcovs,
293+
aod::TracksExtra const& trackextras,
294+
aod::MFTTracks const& mfttracks,
295+
aod::MFTTracksCov const& mfttrackcovs,
296+
aod::FwdTracks const& fwdtracks,
297+
aod::FwdTracksCov const& fwdtrackcovs,
298+
aod::FwdTrkCls const& fwdtrkcls,
299+
aod::AmbiguousTracks const& ambitracks,
300+
aod::AmbiguousMFTTracks const& ambimfttracks,
301+
aod::AmbiguousFwdTracks const& ambifwdtracks,
302+
aod::Tracked3Bodys const& tracked3bodys,
303+
aod::TrackedCascades const& trackedcascades,
304+
aod::TrackedV0s const& trackedv0s,
305+
aod::TracksQAVersion const& tracksQA, // does not comply with normal iterator naming
306+
aod::V0s const& v0s,
307+
aod::Cascades const& cascades,
308+
aod::Decay3Bodys const& decay3bodys,
309+
aod::Calos const& calos,
310+
aod::CaloTriggers const& calotriggers,
311+
aod::CPVClusters const& cpvclusters,
312+
aod::FDDs const& fdds,
313+
aod::FDDsExtra const& fddsextra,
314+
aod::FT0s const& ft0s,
315+
aod::FT0sExtra const& ft0sextra,
316+
aod::FV0As const& fv0as,
317+
aod::FV0AsExtra const& fv0asextra,
196318
aod::Zdcs const& zdcs,
197-
aod::McCollisions const& mccollisions,
198-
aod::McCollisionLabels const& mccollisionlabels,
199-
aod::McParticles const& mcparticles,
200-
aod::McTrackLabels const& mctracklabels,
201-
aod::McMFTTrackLabels const& mcmfttracklabels,
202-
aod::McFwdTrackLabels const& mcfwdtracklabels)
319+
aod::HMPIDs const& hmpids)
203320
{
204321
histos.fill(HIST("hTableSizes"), static_cast<float>(kBC) + 0.5f, bcs.size());
322+
histos.fill(HIST("hTableSizes"), static_cast<float>(kBCFlag) + 0.5f, bcflags.size());
205323
histos.fill(HIST("hTableSizes"), static_cast<float>(kCollision) + 0.5f, collisions.size());
324+
histos.fill(HIST("hTableSizes"), static_cast<float>(kOrigin) + 0.5f, origins.size());
206325
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrack) + 0.5f, tracks.size());
207326
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackCov) + 0.5f, trackcovs.size());
208327
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackExtra) + 0.5f, trackextras.size());
209328
histos.fill(HIST("hTableSizes"), static_cast<float>(kMftTrack) + 0.5f, mfttracks.size());
329+
histos.fill(HIST("hTableSizes"), static_cast<float>(kMftTrackCov) + 0.5f, mfttrackcovs.size());
210330
histos.fill(HIST("hTableSizes"), static_cast<float>(kFwdTrack) + 0.5f, fwdtracks.size());
211331
histos.fill(HIST("hTableSizes"), static_cast<float>(kFwdTrackCov) + 0.5f, fwdtrackcovs.size());
332+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFwdTrackCl) + 0.5f, fwdtrkcls.size());
212333
histos.fill(HIST("hTableSizes"), static_cast<float>(kAmbiguousTrack) + 0.5f, ambitracks.size());
213334
histos.fill(HIST("hTableSizes"), static_cast<float>(kAmbiguousMftTrack) + 0.5f, ambimfttracks.size());
214335
histos.fill(HIST("hTableSizes"), static_cast<float>(kAmbiguousFwdTrack) + 0.5f, ambifwdtracks.size());
336+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTracked3Body) + 0.5f, tracked3bodys.size());
337+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackedCascade) + 0.5f, trackedcascades.size());
338+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackedV0) + 0.5f, trackedv0s.size());
339+
histos.fill(HIST("hTableSizes"), static_cast<float>(kTrackQA) + 0.5f, tracksQA.size());
215340
histos.fill(HIST("hTableSizes"), static_cast<float>(kV0) + 0.5f, v0s.size());
216341
histos.fill(HIST("hTableSizes"), static_cast<float>(kCascade) + 0.5f, cascades.size());
342+
histos.fill(HIST("hTableSizes"), static_cast<float>(kDecay3Body) + 0.5f, decay3bodys.size());
217343
histos.fill(HIST("hTableSizes"), static_cast<float>(kCalo) + 0.5f, calos.size());
218344
histos.fill(HIST("hTableSizes"), static_cast<float>(kCaloTrigger) + 0.5f, calotriggers.size());
345+
histos.fill(HIST("hTableSizes"), static_cast<float>(kCpvCluster) + 0.5f, cpvclusters.size());
219346
histos.fill(HIST("hTableSizes"), static_cast<float>(kFDD) + 0.5f, fdds.size());
347+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFDDExtra) + 0.5f, fddsextra.size());
220348
histos.fill(HIST("hTableSizes"), static_cast<float>(kFT0) + 0.5f, ft0s.size());
221-
histos.fill(HIST("hTableSizes"), static_cast<float>(kV0A) + 0.5f, fv0as.size());
349+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFT0Extra) + 0.5f, ft0sextra.size());
350+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFV0A) + 0.5f, fv0as.size());
351+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFV0AExtra) + 0.5f, fv0asextra.size());
222352
histos.fill(HIST("hTableSizes"), static_cast<float>(kZDC) + 0.5f, zdcs.size());
353+
histos.fill(HIST("hTableSizes"), static_cast<float>(kHMPID) + 0.5f, hmpids.size());
354+
histos.fill(HIST("hTableSizes"), static_cast<float>(kFrameCounter) + 0.5f);
355+
356+
if (checkThinning) {
357+
// perform checks regarding thinning
358+
std::vector<uint8_t> trackBits(tracks.size(), 0);
359+
360+
if(tracks.size() != trackextras.size()){
361+
LOGF(fatal, "Check thinning requested and Tracks.size() != TracksExtra.size(). Very bad. Quitting...");
362+
}
363+
364+
// mark tracks that are used by each kind of composite object
365+
for (const auto& v0 : v0s) {
366+
trackBits[v0.negTrackId()] = trackBits[v0.negTrackId()] | (1 << kTrackUsedV0);
367+
trackBits[v0.posTrackId()] = trackBits[v0.posTrackId()] | (1 << kTrackUsedV0);
368+
}
369+
for (const auto& cascade : cascades) {
370+
auto v0 = cascade.v0(); // simple de-ref, no table joining
371+
trackBits[v0.negTrackId()] = trackBits[v0.negTrackId()] | (1 << kTrackUsedCascade);
372+
trackBits[v0.posTrackId()] = trackBits[v0.posTrackId()] | (1 << kTrackUsedCascade);
373+
trackBits[cascade.bachelorId()] = trackBits[cascade.bachelorId()] | (1 << kTrackUsedCascade);
374+
}
375+
for (const auto& trackedv0 : trackedv0s) {
376+
auto v0 = trackedv0.v0(); // simple de-ref, no table joining
377+
trackBits[v0.negTrackId()] = trackBits[v0.negTrackId()] | (1 << kTrackUsedTrackedV0);
378+
trackBits[v0.posTrackId()] = trackBits[v0.posTrackId()] | (1 << kTrackUsedTrackedV0);
379+
}
380+
for (const auto& trackedcascade : trackedcascades) {
381+
auto cascade = trackedcascade.cascade(); // simple de-ref, no table joining
382+
auto v0 = cascade.v0(); // simple de-ref, no table joining
383+
trackBits[v0.negTrackId()] = trackBits[v0.negTrackId()] | (1 << kTrackUsedTrackedCascade);
384+
trackBits[v0.posTrackId()] = trackBits[v0.posTrackId()] | (1 << kTrackUsedTrackedCascade);
385+
trackBits[cascade.bachelorId()] = trackBits[cascade.bachelorId()] | (1 << kTrackUsedTrackedCascade);
386+
}
387+
for (const auto& trackQA : tracksQA) {
388+
trackBits[trackQA.trackId()] = trackBits[trackQA.trackId()] | (1 << kTrackUsedQA);
389+
}
390+
for (uint32_t iTrack = 0; iTrack < trackextras.size(); iTrack++) {
391+
auto track = trackextras.rawIteratorAt(iTrack);
392+
bool isTPConly = track.hasTPC() && !track.hasTOF() && !track.hasTRD() && !track.hasITS();
393+
histos.fill(HIST("hThinningQA"), static_cast<float>(trackBits[iTrack]), static_cast<float>(isTPConly));
394+
}
395+
}
396+
}
397+
PROCESS_SWITCH(integrationTest, processDataModel2026, "Check data model, 2026 version", false);
398+
399+
void processDataModelMC(
400+
aod::McCollisions const& mccollisions,
401+
aod::McCollisionLabels const& mccollisionlabels,
402+
aod::McParticles const& mcparticles,
403+
aod::McTrackLabels const& mctracklabels,
404+
aod::McMFTTrackLabels const& mcmfttracklabels,
405+
aod::McFwdTrackLabels const& mcfwdtracklabels)
406+
{
223407
histos.fill(HIST("hTableSizes"), static_cast<float>(kMcCollision) + 0.5f, mccollisions.size());
224408
histos.fill(HIST("hTableSizes"), static_cast<float>(kMcCollisionLabel) + 0.5f, mccollisionlabels.size());
225409
histos.fill(HIST("hTableSizes"), static_cast<float>(kMcParticle) + 0.5f, mcparticles.size());
226410
histos.fill(HIST("hTableSizes"), static_cast<float>(kMcTrackLabel) + 0.5f, mctracklabels.size());
227411
histos.fill(HIST("hTableSizes"), static_cast<float>(kMcMftTrackLabel) + 0.5f, mcmfttracklabels.size());
228412
histos.fill(HIST("hTableSizes"), static_cast<float>(kMcFwdTrackLabel) + 0.5f, mcfwdtracklabels.size());
229-
histos.fill(HIST("hTableSizes"), static_cast<float>(kFrameCounter) + 0.5f);
230413
}
231-
PROCESS_SWITCH(integrationTest, processDataModel, "Check data model", true);
414+
PROCESS_SWITCH(integrationTest, processDataModelMC, "Check data model for MC tables", false);
232415

233416
void processBCs(aod::BC const&, aod::Collisions const& collisions)
234417
{
@@ -239,7 +422,7 @@ struct integrationTest {
239422
void processCollisions(aod::Collision const&, FullTracksIU const& tracks, aod::V0s const& v0s, aod::Cascades const& cascades)
240423
{
241424
Int_t lHasITS = 0, lHasTPC = 0, lHasTRD = 0, lHasTOF = 0, lNotTPCOnly = 0;
242-
for (auto& track : tracks) {
425+
for (const auto& track : tracks) {
243426
// TPC only bool
244427
bool isTPConly = track.hasTPC() && !track.hasTOF() && !track.hasTRD() && !track.hasITS();
245428
histos.fill(HIST("hPt"), track.pt());

0 commit comments

Comments
 (0)