Skip to content

Commit a6125f0

Browse files
2 parents c7415c9 + 73d9faf commit a6125f0

File tree

11 files changed

+491
-196
lines changed

11 files changed

+491
-196
lines changed

Common/Core/TableHelper.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,15 +86,7 @@ bool getTaskOptionValue(o2::framework::InitContext& initContext, const std::stri
8686
if (option.name == optName) {
8787
value = option.defaultValue.get<ValueType>();
8888
if (verbose) {
89-
if constexpr (std::is_same_v<ValueType, o2::framework::LabeledArray<float>>) {
90-
LOG(info) << " Found option '" << optName << "' a o2::framework::LabeledArray<float>";
91-
LOG(info) << " Values: ";
92-
for (uint32_t r = 0; r < value.rows(); r++) {
93-
for (uint32_t c = 0; r < value.cols(); c++) {
94-
LOG(info) << " r " << r << " c " << c << value.get(r, c);
95-
}
96-
}
97-
} else {
89+
if constexpr (!std::is_same_v<ValueType, o2::framework::LabeledArray<float>>) {
9890
LOG(info) << " Found option '" << optName << "' with value '" << value << "'";
9991
}
10092
found = true;

DPG/Tasks/AOTEvent/detectorOccupancyQa.cxx

Lines changed: 178 additions & 116 deletions
Large diffs are not rendered by default.

DPG/Tasks/AOTEvent/eventSelectionQa.cxx

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,13 +346,16 @@ struct EventSelectionQaTask {
346346
histos.add("occupancyQA/hOccupancyByFT0CvsByTracks", "", kTH2D, {{150, 0, 15000}, {150, 0, 150000}});
347347

348348
// 3D histograms: nGlobalTracks with cls567 as y-axis, V0A as x-axis:
349-
const AxisSpec axisNtracksPV{160, -0.5, 4000 - 0.5, "n ITS PV tracks"};
350-
const AxisSpec axisNtracksPVTPC{120, -0.5, 3000 - 0.5, "n ITS-TPC PV tracks"};
349+
const AxisSpec axisNtracksPV{200, -0.5, 5000 - 0.5, "n ITS PV tracks"};
350+
const AxisSpec axisNtracksPVTPC{160, -0.5, 4000 - 0.5, "n ITS-TPC PV tracks"};
351351
const AxisSpec axisNtracksTPConly{160, -0.5, 8000 - 0.5, "n TPC-only tracks"};
352352
const AxisSpec axisMultV0AForOccup{20, 0., static_cast<float>(200000), "mult V0A"};
353353
const AxisSpec axisOccupancyTracks{150, 0., 15000, "occupancy (n ITS tracks weighted)"};
354354
histos.add("occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPV, axisOccupancyTracks});
355355
histos.add("occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
356+
histos.add("occupancyQA/hNumTracksPVTPCLooseCuts_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
357+
histos.add("occupancyQA/hNumTracksITS_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPV, axisOccupancyTracks});
358+
histos.add("occupancyQA/hNumTracksITSTPC_vs_V0A_vs_occupancy", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
356359
histos.add("occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy_NarrowDeltaTimeCut", "", kTH3F, {axisMultV0AForOccup, axisNtracksPV, axisOccupancyTracks});
357360
histos.add("occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy_NarrowDeltaTimeCut", "", kTH3F, {axisMultV0AForOccup, axisNtracksPVTPC, axisOccupancyTracks});
358361
// requested by TPC experts: nTPConly tracks vs occupancy
@@ -1119,6 +1122,11 @@ struct EventSelectionQaTask {
11191122
// int nTPConlyWithDeDxCut = 0;
11201123
int nTPConlyNoITS = 0;
11211124
int nContributorsAfterEtaTPCCuts = 0;
1125+
int nContributorsAfterEtaTPCLooseCuts = 0;
1126+
1127+
int nTracksITS = 0;
1128+
int nTracksITSTPC = 0;
1129+
11221130
bool isTVX = col.selection_bit(kIsTriggerTVX);
11231131
for (const auto& track : tracksGrouped) {
11241132
int trackBcDiff = bcDiff + track.trackTime() / o2::constants::lhc::LHCBunchSpacingNS;
@@ -1131,6 +1139,14 @@ struct EventSelectionQaTask {
11311139
nTPConlyNoITS++;
11321140
}
11331141

1142+
if (std::fabs(track.eta()) < 0.8 && track.pt() > 0.2) {
1143+
if (track.hasITS()) {
1144+
nTracksITS++;
1145+
if (track.hasTPC())
1146+
nTracksITSTPC++;
1147+
}
1148+
}
1149+
11341150
if (!track.isPVContributor())
11351151
continue;
11361152

@@ -1140,6 +1156,9 @@ struct EventSelectionQaTask {
11401156
// high-quality contributors for ROF border QA and occupancy study
11411157
if (std::fabs(track.eta()) < 0.8 && track.pt() > 0.2 && track.itsNCls() >= 5) {
11421158
nPV++;
1159+
if (track.hasTPC()) {
1160+
nContributorsAfterEtaTPCLooseCuts++;
1161+
}
11431162
if (track.tpcNClsFound() > 70 && track.tpcNClsCrossedRows() > 80 && track.itsChi2NCl() < 36 && track.tpcChi2NCl() < 4) {
11441163
nContributorsAfterEtaTPCCuts++;
11451164
// ROF border QA
@@ -1173,6 +1192,9 @@ struct EventSelectionQaTask {
11731192
histos.fill(HIST("occupancyQA/hOccupancyByFT0CvsByTracks"), occupancyByTracks, occupancyByFT0C);
11741193
histos.fill(HIST("occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy"), multV0A, nPV, occupancyByTracks);
11751194
histos.fill(HIST("occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy"), multV0A, nContributorsAfterEtaTPCCuts, occupancyByTracks);
1195+
histos.fill(HIST("occupancyQA/hNumTracksPVTPCLooseCuts_vs_V0A_vs_occupancy"), multV0A, nContributorsAfterEtaTPCLooseCuts, occupancyByTracks);
1196+
histos.fill(HIST("occupancyQA/hNumTracksITS_vs_V0A_vs_occupancy"), multV0A, nTracksITS, occupancyByTracks);
1197+
histos.fill(HIST("occupancyQA/hNumTracksITSTPC_vs_V0A_vs_occupancy"), multV0A, nTracksITSTPC, occupancyByTracks);
11761198
if (col.selection_bit(kNoCollInTimeRangeNarrow)) {
11771199
histos.fill(HIST("occupancyQA/hNumTracksPV_vs_V0A_vs_occupancy_NarrowDeltaTimeCut"), multV0A, nPV, occupancyByTracks);
11781200
histos.fill(HIST("occupancyQA/hNumTracksPVTPC_vs_V0A_vs_occupancy_NarrowDeltaTimeCut"), multV0A, nContributorsAfterEtaTPCCuts, occupancyByTracks);

DPG/Tasks/ITS/filterTracks.cxx

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,22 @@ DECLARE_SOA_COLUMN(MainBeautyAncestorPt, mainBeautyAncestorPt, float); //! origi
7070
DECLARE_SOA_COLUMN(MainBeautyAncestorY, mainBeautyAncestorY, float); //! original index in MCParticle tree of main mother: needed when chekcing if particles come from same mother
7171
DECLARE_SOA_COLUMN(MaxEtaDaughter, maxEtaDaughter, float); //! max (abs) eta of daughter particles, needed to reproduce acceptance cut
7272
} // namespace filterTracks
73+
DECLARE_SOA_TABLE(FilterColl, "AOD", "FILTERCOLL",
74+
o2::aod::collision::BCId,
75+
o2::aod::collision::PosX,
76+
o2::aod::collision::PosY,
77+
o2::aod::collision::PosZ,
78+
o2::aod::collision::CovXX,
79+
o2::aod::collision::CovXY,
80+
o2::aod::collision::CovYY,
81+
o2::aod::collision::CovXZ,
82+
o2::aod::collision::CovYZ,
83+
o2::aod::collision::CovZZ,
84+
o2::aod::collision::Flags,
85+
o2::aod::collision::Chi2,
86+
o2::aod::collision::NumContrib,
87+
o2::aod::collision::CollisionTime,
88+
o2::aod::collision::CollisionTimeRes);
7389
DECLARE_SOA_TABLE(FilterTrack, "AOD", "FILTERTRACK",
7490
o2::aod::track::CollisionId,
7591
aod::filterTracks::IsInsideBeamPipe,
@@ -128,6 +144,7 @@ struct FilterTracks {
128144
Produces<aod::FiltTracExtDet> filteredTracksTableExtraDet;
129145
Produces<aod::FilterTrackMC> filteredTracksMC;
130146
Produces<aod::GenParticles> selectedGenParticles;
147+
Produces<aod::FilterColl> filterCollTable;
131148

132149
// Configurable<int> dummy{"dummy", 0, "dummy"};
133150
Configurable<float> minTrackPt{"minTrackPt", 0.25, "min track pt"};
@@ -137,14 +154,15 @@ struct FilterTracks {
137154
Configurable<float> trackPtWeightMidPt{"trackPtWeightMidPt", 0.10f, "trackPtWeightMidPt"};
138155

139156
Filter trackFilter = requireGlobalTrackWoDCAInFilter() && aod::track::pt > minTrackPt&& nabs(aod::track::dcaXY) < trackDcaXyMax;
157+
using CollisionsWithEvSel = soa::Join<aod::Collisions, aod::EvSels>;
140158
using TracksWithSelAndDca = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa, aod::pidTPCFullPr, aod::pidTOFFullPr>;
141159
using TracksWithSelAndDcaMc = soa::Join<TracksWithSelAndDca, aod::McTrackLabels>;
142-
Partition<soa::Filtered<TracksWithSelAndDca>> lowPtTracks = aod::track::pt < 2.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightLowPt * 2.f);
143-
Partition<soa::Filtered<TracksWithSelAndDca>> midPtTracks = aod::track::pt > 2.f && aod::track::pt < 5.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightMidPt * 2.f);
160+
Partition<soa::Filtered<TracksWithSelAndDca>> lowPtTracks = aod::track::pt < 2.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightLowPt.node() * 2.f);
161+
Partition<soa::Filtered<TracksWithSelAndDca>> midPtTracks = aod::track::pt > 2.f && aod::track::pt < 5.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightMidPt.node() * 2.f);
144162
Partition<soa::Filtered<TracksWithSelAndDca>> highPtTracks = aod::track::pt > 5.f;
145163

146-
Partition<soa::Filtered<TracksWithSelAndDcaMc>> lowPtTracksMC = aod::track::pt < 2.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightLowPt * 2.f);
147-
Partition<soa::Filtered<TracksWithSelAndDcaMc>> midPtTracksMC = aod::track::pt > 2.f && aod::track::pt < 5.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightMidPt * 2.f);
164+
Partition<soa::Filtered<TracksWithSelAndDcaMc>> lowPtTracksMC = aod::track::pt < 2.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightLowPt.node() * 2.f);
165+
Partition<soa::Filtered<TracksWithSelAndDcaMc>> midPtTracksMC = aod::track::pt > 2.f && aod::track::pt < 5.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightMidPt.node() * 2.f);
148166
Partition<soa::Filtered<TracksWithSelAndDcaMc>> highPtTracksMC = aod::track::pt > 5.f;
149167

150168
std::array<int, 3> pdgSignalParticleArray = {310, 421, 4122}; // K0s, D0 and Lc
@@ -255,6 +273,11 @@ struct FilterTracks {
255273
}
256274
}
257275
PROCESS_SWITCH(FilterTracks, processData, "process data", true);
276+
void processCollisions(CollisionsWithEvSel::iterator const& collision)
277+
{
278+
filterCollTable(collision.bcId(), collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ(), collision.flags(), collision.chi2(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
279+
}
280+
PROCESS_SWITCH(FilterTracks, processCollisions, "process collisions", true);
258281

259282
void processMC(soa::Filtered<TracksWithSelAndDcaMc> const& tracks, aod::McParticles const& mcParticles)
260283
{

PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ class FemtoUniverseDetaDphiStar
169169
}
170170
auto deta = part1.eta() - part2.eta();
171171
auto dphiAvg = averagePhiStar(part1, part2, 0);
172-
auto dphi = averagePhiStarFrac(part1, part2);
173172
if (ChosenEventType == femto_universe_container::EventType::same) {
174173
histdetadpisame[0][0]->Fill(deta, dphiAvg);
175174
} else if (ChosenEventType == femto_universe_container::EventType::mixed) {
@@ -178,8 +177,7 @@ class FemtoUniverseDetaDphiStar
178177
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
179178
}
180179

181-
// if (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMax, 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMax, 2) < 1.) {
182-
if (dphi > 0.02) {
180+
if (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMax, 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMax, 2) < 1.) {
183181
return true;
184182
} else {
185183
if (ChosenEventType == femto_universe_container::EventType::same) {
@@ -412,6 +410,64 @@ class FemtoUniverseDetaDphiStar
412410
}
413411
}
414412

413+
/// Check if pair is close or not
414+
template <typename Part>
415+
bool isClosePairFrac(Part const& part1, Part const& part2, float lmagfield, uint8_t ChosenEventType, bool IsDphiAvgOrDist, float DistMax, float FracMax)
416+
{
417+
magfield = lmagfield;
418+
419+
if constexpr (kPartOneType == o2::aod::femtouniverseparticle::ParticleType::kTrack && kPartTwoType == o2::aod::femtouniverseparticle::ParticleType::kTrack) {
420+
/// Track-Track combination
421+
// check if provided particles are in agreement with the class instantiation
422+
if (part1.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack || part2.partType() != o2::aod::femtouniverseparticle::ParticleType::kTrack) {
423+
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar instantiation! Please provide kTrack,kTrack candidates.";
424+
return false;
425+
}
426+
auto deta = part1.eta() - part2.eta();
427+
auto dphiAvg = averagePhiStar(part1, part2, 0);
428+
auto distfrac = averagePhiStarFrac(part1, part2, DistMax);
429+
if (ChosenEventType == femto_universe_container::EventType::same) {
430+
histdetadpisame[0][0]->Fill(deta, dphiAvg);
431+
} else if (ChosenEventType == femto_universe_container::EventType::mixed) {
432+
histdetadpimixed[0][0]->Fill(deta, dphiAvg);
433+
} else {
434+
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
435+
}
436+
437+
if (IsDphiAvgOrDist) {
438+
if (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMax, 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMax, 2) < 1.) {
439+
return true;
440+
} else {
441+
if (ChosenEventType == femto_universe_container::EventType::same) {
442+
histdetadpisame[0][1]->Fill(deta, dphiAvg);
443+
} else if (ChosenEventType == femto_universe_container::EventType::mixed) {
444+
histdetadpimixed[0][1]->Fill(deta, dphiAvg);
445+
} else {
446+
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
447+
}
448+
return false;
449+
}
450+
} else {
451+
if (distfrac > FracMax) {
452+
return true;
453+
} else {
454+
if (ChosenEventType == femto_universe_container::EventType::same) {
455+
histdetadpisame[0][1]->Fill(deta, dphiAvg);
456+
} else if (ChosenEventType == femto_universe_container::EventType::mixed) {
457+
histdetadpimixed[0][1]->Fill(deta, dphiAvg);
458+
} else {
459+
LOG(fatal) << "FemtoUniverseDetaDphiStar: passed arguments don't agree with FemtoUniverseDetaDphiStar's type of events! Please provide same or mixed.";
460+
}
461+
return false;
462+
}
463+
}
464+
465+
} else {
466+
LOG(fatal) << "FemtoUniversePairCleaner: Combination of objects not defined - quitting!";
467+
return false;
468+
}
469+
}
470+
415471
/// Check if pair is close or not
416472
template <typename Part>
417473
void ClosePairqLCMS(Part const& part1, Part const& part2, float lmagfield, uint8_t ChosenEventType, double qlcms) // add typename Parts and variable parts for adding MClabels
@@ -558,7 +614,7 @@ class FemtoUniverseDetaDphiStar
558614

559615
/// Calculate average phi
560616
template <typename T1, typename T2>
561-
float averagePhiStarFrac(const T1& part1, const T2& part2)
617+
float averagePhiStarFrac(const T1& part1, const T2& part2, float maxdist)
562618
{
563619
std::vector<float> tmpVec1;
564620
std::vector<float> tmpVec2;
@@ -579,7 +635,7 @@ class FemtoUniverseDetaDphiStar
579635
}
580636
dphi = TVector2::Phi_mpi_pi(dphi);
581637
distance = 2 * TMath::Sin(TMath::Abs(dphi) * 0.5) * TmpRadiiTPC[i];
582-
if (distance < 10.0) {
638+
if (distance < maxdist) {
583639
badpoints++;
584640
}
585641
}

0 commit comments

Comments
 (0)