Skip to content

Commit 0128250

Browse files
authored
[PWGLF] UPC timing QA/cuts in derived UPC analysis and clean up cascade QA/postprocessing in pp (#15585)
1 parent 550437c commit 0128250

File tree

3 files changed

+280
-90
lines changed

3 files changed

+280
-90
lines changed

PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx

Lines changed: 57 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
#include <TPDGCode.h>
3535

3636
#include <algorithm>
37+
#include <cmath>
3738
#include <string>
39+
#include <utility>
3840
#include <vector>
3941

4042
using namespace o2;
@@ -122,14 +124,49 @@ struct Cascqaanalysis {
122124
SliceCache cache;
123125

124126
// Random number generator for event scaling
125-
TRandom2* fRand = new TRandom2();
127+
TRandom2 fRand;
126128

127129
// Struct to select on event type
128130
typedef struct CollisionIndexAndType {
129131
int64_t index;
130132
uint8_t typeFlag;
131133
} CollisionIndexAndType;
132134

135+
template <typename TTrack>
136+
static int countITSHits(TTrack const& track)
137+
{
138+
int nHits = 0;
139+
for (unsigned int i = 0; i < 7; ++i) {
140+
if (track.itsClusterMap() & (1 << i)) {
141+
++nHits;
142+
}
143+
}
144+
return nHits;
145+
}
146+
147+
template <typename TCollision>
148+
static uint8_t buildRecoEventFlags(TCollision const& collision)
149+
{
150+
uint8_t evFlag = o2::aod::mycascades::EvFlags::EvINEL;
151+
if (collision.isInelGt0()) {
152+
evFlag |= o2::aod::mycascades::EvFlags::EvINELgt0;
153+
}
154+
if (collision.isInelGt1()) {
155+
evFlag |= o2::aod::mycascades::EvFlags::EvINELgt1;
156+
}
157+
return evFlag;
158+
}
159+
160+
template <typename TCascade, typename TCollision>
161+
static std::pair<float, float> computeCascadeCtau(TCascade const& casc, TCollision const& collision)
162+
{
163+
const float decayLength = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ());
164+
const float totalMomentum = std::hypot(casc.px(), casc.py(), casc.pz());
165+
const float invMomentum = 1.f / (totalMomentum + 1.e-13f);
166+
return {o2::constants::physics::MassXiMinus * decayLength * invMomentum,
167+
o2::constants::physics::MassOmegaMinus * decayLength * invMomentum};
168+
}
169+
133170
void init(InitContext const&)
134171
{
135172
TString hCandidateCounterLabels[4] = {"All candidates", "passed topo cuts", "has associated MC particle", "associated with Xi(Omega)"};
@@ -210,17 +247,13 @@ struct Cascqaanalysis {
210247
auto bachelor = cascCand.template bachelor_as<TCascTracksTo>();
211248

212249
// Basic set of selections
213-
if (cascCand.cascradius() > cascradius &&
214-
cascCand.v0radius() > v0radius &&
215-
cascCand.casccosPA(pvx, pvy, pvz) > casccospa &&
216-
cascCand.v0cosPA(pvx, pvy, pvz) > v0cospa &&
217-
std::fabs(posdau.eta()) < etadau &&
218-
std::fabs(negdau.eta()) < etadau &&
219-
std::fabs(bachelor.eta()) < etadau) {
220-
return true;
221-
} else {
222-
return false;
223-
}
250+
return cascCand.cascradius() > cascradius &&
251+
cascCand.v0radius() > v0radius &&
252+
cascCand.casccosPA(pvx, pvy, pvz) > casccospa &&
253+
cascCand.v0cosPA(pvx, pvy, pvz) > v0cospa &&
254+
std::fabs(posdau.eta()) < etadau &&
255+
std::fabs(negdau.eta()) < etadau &&
256+
std::fabs(bachelor.eta()) < etadau;
224257
}
225258

226259
template <typename TMcParticles>
@@ -419,39 +452,16 @@ struct Cascqaanalysis {
419452
registry.fill(HIST("hCandidateCounter"), 1.5); // passed topo cuts
420453
nCandSel++;
421454
// Fill table
422-
if (fRand->Rndm() < lEventScale) {
455+
if (fRand.Rndm() < lEventScale) {
423456
auto posdau = casc.posTrack_as<DauTracks>();
424457
auto negdau = casc.negTrack_as<DauTracks>();
425458
auto bachelor = casc.bachelor_as<DauTracks>();
426459

427-
// ITS N hits
428-
int posITSNhits = 0, negITSNhits = 0, bachITSNhits = 0;
429-
for (unsigned int i = 0; i < 7; i++) {
430-
if (posdau.itsClusterMap() & (1 << i)) {
431-
posITSNhits++;
432-
}
433-
if (negdau.itsClusterMap() & (1 << i)) {
434-
negITSNhits++;
435-
}
436-
if (bachelor.itsClusterMap() & (1 << i)) {
437-
bachITSNhits++;
438-
}
439-
}
440-
441-
uint8_t evFlag = 0;
442-
evFlag |= o2::aod::mycascades::EvFlags::EvINEL;
443-
if (collision.multNTracksPVeta1() > 0) {
444-
evFlag |= o2::aod::mycascades::EvFlags::EvINELgt0;
445-
}
446-
if (collision.multNTracksPVeta1() > 1) {
447-
evFlag |= o2::aod::mycascades::EvFlags::EvINELgt1;
448-
}
449-
450-
// c x tau
451-
float cascpos = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ());
452-
float cascptotmom = std::hypot(casc.px(), casc.py(), casc.pz());
453-
float ctauXi = o2::constants::physics::MassXiMinus * cascpos / (cascptotmom + 1e-13);
454-
float ctauOmega = o2::constants::physics::MassOmegaMinus * cascpos / (cascptotmom + 1e-13);
460+
const int posITSNhits = countITSHits(posdau);
461+
const int negITSNhits = countITSHits(negdau);
462+
const int bachITSNhits = countITSHits(bachelor);
463+
const uint8_t evFlag = buildRecoEventFlags(collision);
464+
const auto [ctauXi, ctauOmega] = computeCascadeCtau(casc, collision);
455465

456466
mycascades(collision.posZ(),
457467
collision.centFT0M(), collision.centFV0A(),
@@ -563,41 +573,17 @@ struct Cascqaanalysis {
563573
genY = cascmc.y();
564574
}
565575
}
566-
if (fRand->Rndm() < lEventScale) {
576+
if (fRand.Rndm() < lEventScale) {
567577
// Fill table
568578
auto posdau = casc.posTrack_as<DauTracks>();
569579
auto negdau = casc.negTrack_as<DauTracks>();
570580
auto bachelor = casc.bachelor_as<DauTracks>();
571581

572-
// ITS N hits
573-
int posITSNhits = 0, negITSNhits = 0, bachITSNhits = 0;
574-
for (unsigned int i = 0; i < 7; i++) {
575-
if (posdau.itsClusterMap() & (1 << i)) {
576-
posITSNhits++;
577-
}
578-
if (negdau.itsClusterMap() & (1 << i)) {
579-
negITSNhits++;
580-
}
581-
if (bachelor.itsClusterMap() & (1 << i)) {
582-
bachITSNhits++;
583-
}
584-
}
585-
586-
// Event type flag
587-
uint8_t evFlag = 0;
588-
evFlag |= o2::aod::mycascades::EvFlags::EvINEL;
589-
if (collision.multNTracksPVeta1() > 0) {
590-
evFlag |= o2::aod::mycascades::EvFlags::EvINELgt0;
591-
}
592-
if (collision.multNTracksPVeta1() > 1) {
593-
evFlag |= o2::aod::mycascades::EvFlags::EvINELgt1;
594-
}
595-
596-
// c x tau
597-
float cascpos = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ());
598-
float cascptotmom = std::hypot(casc.px(), casc.py(), casc.pz());
599-
float ctauXi = o2::constants::physics::MassXiMinus * cascpos / (cascptotmom + 1e-13);
600-
float ctauOmega = o2::constants::physics::MassOmegaMinus * cascpos / (cascptotmom + 1e-13);
582+
const int posITSNhits = countITSHits(posdau);
583+
const int negITSNhits = countITSHits(negdau);
584+
const int bachITSNhits = countITSHits(bachelor);
585+
const uint8_t evFlag = buildRecoEventFlags(collision);
586+
const auto [ctauXi, ctauOmega] = computeCascadeCtau(casc, collision);
601587

602588
mycascades(collision.posZ(),
603589
mcCollision.centFT0M(), 0, // mcCollision.centFV0A() to be added

PWGLF/Tasks/Strangeness/cascpostprocessing.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ struct cascpostprocessing {
243243
bool isCorrectlyRec = 0;
244244

245245
for (auto& candidate : mycascades) {
246+
isCandidate = false;
247+
isCorrectlyRec = false;
246248

247249
switch (evSelFlag) {
248250
case 1: {

0 commit comments

Comments
 (0)