Skip to content

Commit 636d58f

Browse files
authored
Custom deltaBC, foundFV0 and bug fixes (#350)
* Custom deltaBC, foundFV0 and bug fixes * foundFT0/FV0 index type changed to int32_t
1 parent 9b9e99c commit 636d58f

2 files changed

Lines changed: 37 additions & 52 deletions

File tree

Common/DataModel/EventSelection.h

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -72,36 +72,6 @@ enum EventSelectionFlags {
7272
kNsel
7373
};
7474

75-
// In a struct to avoid warnings if that is not used in all executables which include this file
76-
struct EventSelectionLabels {
77-
static constexpr const char* labels[kNsel] = {
78-
"kIsBBV0A",
79-
"kIsBBV0C",
80-
"kIsBBFDA",
81-
"kIsBBFDC",
82-
"kNoBGV0A",
83-
"kNoBGV0C",
84-
"kNoBGFDA",
85-
"kNoBGFDC",
86-
"kIsBBT0A",
87-
"kIsBBT0C",
88-
"kIsBBZNA",
89-
"kIsBBZNC",
90-
"kNoBGZNA",
91-
"kNoBGZNC",
92-
"kNoV0MOnVsOfPileup",
93-
"kNoSPDOnVsOfPileup",
94-
"kNoV0Casymmetry",
95-
"kIsGoodTimeRange",
96-
"kNoIncompleteDAQ",
97-
"kNoTPCLaserWarmUp",
98-
"kNoTPCHVdip",
99-
"kNoPileupFromSPD",
100-
"kNoV0PFPileup",
101-
"kNoSPDClsVsTklBG",
102-
"kNoV0C012vsTklBG"};
103-
};
104-
10575
// collision-joinable event selection decisions
10676
namespace evsel
10777
{
@@ -122,21 +92,22 @@ DECLARE_SOA_COLUMN(SpdClusters, spdClusters, uint32_t); //! Number of SPD cluste
12292
DECLARE_SOA_COLUMN(NTracklets, nTracklets, int); //! Tracklet multiplicity
12393
DECLARE_SOA_COLUMN(Sel7, sel7, bool); //! Event selection decision based on V0A & V0C
12494
DECLARE_SOA_COLUMN(Sel8, sel8, bool); //! Event selection decision based on TVX
125-
DECLARE_SOA_COLUMN(FoundFT0, foundFT0, int64_t); //! FT0 entry index in FT0s table (-1 if doesn't exist)
95+
DECLARE_SOA_COLUMN(FoundFT0, foundFT0, int32_t); //! FT0 entry index in FT0s table (-1 if doesn't exist)
96+
DECLARE_SOA_COLUMN(FoundFV0, foundFV0, int32_t); //! FV0 entry index in FV0A table (-1 if doesn't exist)
12697
} // namespace evsel
12798
DECLARE_SOA_TABLE(EvSels, "AOD", "EVSEL", //!
12899
evsel::Alias, evsel::Selection,
129100
evsel::BBV0A, evsel::BBV0C, evsel::BGV0A, evsel::BGV0C,
130101
evsel::BBFDA, evsel::BBFDC, evsel::BGFDA, evsel::BGFDC,
131102
evsel::MultRingV0A, evsel::MultRingV0C, evsel::SpdClusters, evsel::NTracklets,
132-
evsel::Sel7, evsel::Sel8, evsel::FoundFT0);
103+
evsel::Sel7, evsel::Sel8, evsel::FoundFT0, evsel::FoundFV0);
133104
using EvSel = EvSels::iterator;
134105

135106
DECLARE_SOA_TABLE(BcSels, "AOD", "BCSEL", //!
136107
evsel::Alias, evsel::Selection,
137108
evsel::BBV0A, evsel::BBV0C, evsel::BGV0A, evsel::BGV0C,
138109
evsel::BBFDA, evsel::BBFDC, evsel::BGFDA, evsel::BGFDC,
139-
evsel::MultRingV0A, evsel::MultRingV0C, evsel::SpdClusters, evsel::FoundFT0);
110+
evsel::MultRingV0A, evsel::MultRingV0C, evsel::SpdClusters, evsel::FoundFT0, evsel::FoundFV0);
140111
using BcSel = BcSels::iterator;
141112
} // namespace o2::aod
142113

Common/TableProducer/eventSelection.cxx

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -207,13 +207,14 @@ struct BcSelectionTask {
207207
selection[kNoPileupFromSPD] = (eventCuts & 1 << aod::kIsPileupFromSPD) == 0;
208208
selection[kNoV0PFPileup] = (eventCuts & 1 << aod::kIsV0PFPileup) == 0;
209209

210-
int64_t foundFT0 = bc.has_ft0() ? bc.ft0().globalIndex() : -1;
210+
int32_t foundFT0 = bc.has_ft0() ? bc.ft0().globalIndex() : -1;
211+
int32_t foundFV0 = bc.has_fv0a() ? bc.fv0a().globalIndex() : -1;
211212

212213
// Fill bc selection columns
213214
bcsel(alias, selection,
214215
bbV0A, bbV0C, bgV0A, bgV0C,
215216
bbFDA, bbFDC, bgFDA, bgFDC,
216-
multRingV0A, multRingV0C, spdClusters, foundFT0);
217+
multRingV0A, multRingV0C, spdClusters, foundFT0, foundFV0);
217218
}
218219
}
219220
PROCESS_SWITCH(BcSelectionTask, processRun2, "Process Run2 event selection", true);
@@ -275,13 +276,14 @@ struct BcSelectionTask {
275276

276277
uint32_t spdClusters = 0;
277278

278-
int64_t foundFT0 = bc.has_ft0() ? bc.ft0().globalIndex() : -1;
279+
int32_t foundFT0 = bc.has_ft0() ? bc.ft0().globalIndex() : -1;
280+
int32_t foundFV0 = bc.has_fv0a() ? bc.fv0a().globalIndex() : -1;
279281
LOGP(debug, "foundFT0={}\n", foundFT0);
280282
// Fill bc selection columns
281283
bcsel(alias, selection,
282284
bbV0A, bbV0C, bgV0A, bgV0C,
283285
bbFDA, bbFDC, bgFDA, bgFDC,
284-
multRingV0A, multRingV0C, spdClusters, foundFT0);
286+
multRingV0A, multRingV0C, spdClusters, foundFT0, foundFV0);
285287
}
286288
}
287289
PROCESS_SWITCH(BcSelectionTask, processRun3, "Process Run3 event selection", false);
@@ -291,6 +293,7 @@ struct EventSelectionTask {
291293
Produces<aod::EvSels> evsel;
292294
Configurable<std::string> syst{"syst", "PbPb", "pp, pPb, Pbp, PbPb, XeXe"}; // TODO determine from AOD metadata or from CCDB
293295
Configurable<int> muonSelection{"muonSelection", 0, "0 - barrel, 1 - muon selection with pileup cuts, 2 - muon selection without pileup cuts"};
296+
Configurable<int> customDeltaBC{"customDeltaBC", 300, "custom BC delta for FIT-collision matching"};
294297
Configurable<bool> isMC{"isMC", 0, "0 - data, 1 - MC"};
295298
Partition<aod::Tracks> tracklets = (aod::track::trackType == static_cast<uint8_t>(o2::aod::track::TrackTypeEnum::Run2Tracklet));
296299
EvSelParameters par;
@@ -365,7 +368,8 @@ struct EventSelectionTask {
365368
void processRun2(aod::Collision const& col, BCsWithBcSels const& bcs, aod::Tracks const& tracks)
366369
{
367370
auto bc = col.bc_as<BCsWithBcSels>();
368-
int64_t foundFT0 = bc.foundFT0();
371+
int32_t foundFT0 = bc.foundFT0();
372+
int32_t foundFV0 = bc.foundFV0();
369373

370374
// copy alias decisions from bcsel table
371375
int32_t alias[kNaliases];
@@ -421,45 +425,55 @@ struct EventSelectionTask {
421425
bbV0A, bbV0C, bgV0A, bgV0C,
422426
bbFDA, bbFDC, bgFDA, bgFDC,
423427
multRingV0A, multRingV0C, spdClusters, nTkl, sel7, sel8,
424-
foundFT0);
428+
foundFT0, foundFV0);
425429
}
426430
PROCESS_SWITCH(EventSelectionTask, processRun2, "Process Run2 event selection", true);
427431

428432
void processRun3(aod::Collision const& col, BCsWithBcSels const& bcs)
429433
{
430434
auto bc = col.bc_as<BCsWithBcSels>();
431-
int64_t foundFT0 = bc.foundFT0();
435+
uint64_t apprBC = bc.globalBC();
436+
int64_t meanBC = apprBC - std::lround(col.collisionTime() / o2::constants::lhc::LHCBunchSpacingNS);
437+
int64_t deltaBC = std::ceil(col.collisionTimeRes() / o2::constants::lhc::LHCBunchSpacingNS * 4);
438+
// use custom delta
439+
if (customDeltaBC > 0) {
440+
deltaBC = customDeltaBC;
441+
}
432442

443+
int32_t foundFT0 = bc.foundFT0();
433444
if (foundFT0 < 0) { // search in +/-4 sigma around meanBC
434-
int64_t apprBC = bc.globalBC();
435-
int64_t meanBC = apprBC - std::lround(col.collisionTime() / o2::constants::lhc::LHCBunchSpacingNS);
436-
int64_t deltaBC = std::ceil(col.collisionTimeRes() / o2::constants::lhc::LHCBunchSpacingNS * 4);
437445
// search forward
438446
int forwardMoveCount = 0;
439447
int64_t forwardBcDist = deltaBC + 1;
440-
for (; bc != bcs.end() && apprBC - meanBC <= deltaBC; ++bc, ++forwardMoveCount) {
448+
for (; bc != bcs.end() && int64_t(bc.globalBC()) <= meanBC + deltaBC; ++bc, ++forwardMoveCount) {
441449
if (bc.foundFT0() >= 0) {
442-
forwardBcDist = apprBC - meanBC;
450+
forwardBcDist = bc.globalBC() - meanBC;
443451
break;
444452
}
445453
}
446454
bc.moveByIndex(-forwardMoveCount);
447455
// search backward
448456
int backwardMoveCount = 0;
449457
int64_t backwardBcDist = deltaBC + 1;
450-
for (; bc != bcs.begin() && apprBC - meanBC >= -deltaBC; --bc, --backwardMoveCount) {
458+
for (; int64_t(bc.globalBC()) >= meanBC - deltaBC; --bc, ++backwardMoveCount) {
451459
if (bc.foundFT0() >= 0) {
452-
backwardBcDist = meanBC - apprBC;
460+
backwardBcDist = meanBC - bc.globalBC();
461+
break;
462+
}
463+
if (bc == bcs.begin()) {
453464
break;
454465
}
455466
}
456467
if (forwardBcDist > deltaBC && backwardBcDist > deltaBC) {
457-
bc.moveByIndex(-backwardMoveCount); // return to nominal bc if neighbouring ft0 is not found
468+
bc.moveByIndex(backwardMoveCount); // return to nominal bc if neighbouring ft0 is not found
458469
} else if (forwardBcDist < backwardBcDist) {
459-
bc.moveByIndex(-backwardMoveCount + forwardMoveCount); // move forward
460-
}
470+
bc.moveByIndex(backwardMoveCount + forwardMoveCount); // move forward
471+
} // else keep backward bc
461472
}
462-
LOGP(debug, "{}", bc.foundFT0());
473+
foundFT0 = bc.foundFT0();
474+
475+
int32_t foundFV0 = bc.foundFV0();
476+
LOGP(debug, "foundFT0 = {}", foundFT0);
463477

464478
// copy alias decisions from bcsel table
465479
int32_t alias[kNaliases];
@@ -508,7 +522,7 @@ struct EventSelectionTask {
508522
bbV0A, bbV0C, bgV0A, bgV0C,
509523
bbFDA, bbFDC, bgFDA, bgFDC,
510524
multRingV0A, multRingV0C, spdClusters, nTkl, sel7, sel8,
511-
foundFT0);
525+
foundFT0, foundFV0);
512526
}
513527
PROCESS_SWITCH(EventSelectionTask, processRun3, "Process Run3 event selection", false);
514528
};

0 commit comments

Comments
 (0)