Skip to content

Commit 3d7f6af

Browse files
ddobrigkalibuild
andauthored
[PWGLF] Improved treatment of photons in strangeness builder (AliceO2Group#10654)
Co-authored-by: ALICE Builder <[email protected]>
1 parent af80273 commit 3d7f6af

File tree

3 files changed

+226
-82
lines changed

3 files changed

+226
-82
lines changed

PWGLF/TableProducer/Strangeness/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ o2physics_add_dpl_workflow(strangederivedbuilder
108108

109109
o2physics_add_dpl_workflow(strangenessbuilder
110110
SOURCES strangenessbuilder.cxx
111-
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DCAFitter KFParticle::KFParticle
111+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DCAFitter KFParticle::KFParticle O2Physics::TPCDriftManager
112112
COMPONENT_NAME Analysis)
113113

114114
o2physics_add_dpl_workflow(v0-selector

PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include "CCDB/BasicCCDBManager.h"
4747
#include "DataFormatsParameters/GRPObject.h"
4848
#include "DataFormatsParameters/GRPMagField.h"
49+
#include "Common/Core/TPCVDriftManager.h"
4950

5051
using namespace o2;
5152
using namespace o2::framework;
@@ -278,6 +279,7 @@ struct StrangenessBuilder {
278279
struct : ConfigurableGroup {
279280
std::string prefix = "v0BuilderOpts";
280281
Configurable<bool> generatePhotonCandidates{"generatePhotonCandidates", false, "generate gamma conversion candidates (V0s using TPC-only tracks)"};
282+
Configurable<bool> moveTPCOnlyTracks{"moveTPCOnlyTracks", true, "if dealing with TPC-only tracks, move them according to TPC drift / time info"};
281283

282284
// baseline conditionals of V0 building
283285
Configurable<int> minCrossedRows{"minCrossedRows", 50, "minimum TPC crossed rows for daughter tracks"};
@@ -341,6 +343,9 @@ struct StrangenessBuilder {
341343
int mRunNumber;
342344
o2::base::MatLayerCylSet* lut = nullptr;
343345

346+
// for handling TPC-only tracks (photons)
347+
o2::aod::common::TPCVDriftManager mVDriftMgr;
348+
344349
// for tagging V0s used in cascades
345350
std::vector<o2::pwglf::v0candidate> v0sFromCascades; // Vector of v0 candidates used in cascades
346351
std::vector<int> v0Map; // index to relate V0s -> v0sFromCascades
@@ -625,6 +630,12 @@ struct StrangenessBuilder {
625630
// mmark this run as configured
626631
mRunNumber = bc.runNumber();
627632

633+
if (v0BuilderOpts.generatePhotonCandidates.value && v0BuilderOpts.moveTPCOnlyTracks.value) {
634+
// initialize only if needed, avoid unnecessary CCDB calls
635+
mVDriftMgr.init(&ccdb->instance());
636+
mVDriftMgr.update(timestamp);
637+
}
638+
628639
return true;
629640
}
630641

@@ -1098,7 +1109,7 @@ struct StrangenessBuilder {
10981109
}
10991110

11001111
//__________________________________________________
1101-
template <typename TCollisions, typename TTracks, typename TV0s, typename TMCParticles>
1112+
template <class TBCs, typename TCollisions, typename TTracks, typename TV0s, typename TMCParticles>
11021113
void buildV0s(TCollisions const& collisions, TV0s const& v0s, TTracks const& tracks, TMCParticles const& mcParticles)
11031114
{
11041115
// prepare MC containers (not necessarily used)
@@ -1134,7 +1145,38 @@ struct StrangenessBuilder {
11341145
}
11351146
auto const& posTrack = tracks.rawIteratorAt(v0.posTrackId);
11361147
auto const& negTrack = tracks.rawIteratorAt(v0.negTrackId);
1137-
if (!straHelper.buildV0Candidate(v0.collisionId, pvX, pvY, pvZ, posTrack, negTrack, v0.isCollinearV0, mEnabledTables[kV0Covs])) {
1148+
1149+
auto posTrackPar = getTrackParCov(posTrack);
1150+
auto negTrackPar = getTrackParCov(negTrack);
1151+
1152+
// handle TPC-only tracks properly (photon conversions)
1153+
if (v0BuilderOpts.moveTPCOnlyTracks) {
1154+
bool isPosTPCOnly = (posTrack.hasTPC() && !posTrack.hasITS() && !posTrack.hasTRD() && !posTrack.hasTOF());
1155+
if (isPosTPCOnly) {
1156+
// Nota bene: positive is TPC-only -> this entire V0 merits treatment as photon candidate
1157+
posTrackPar.setPID(o2::track::PID::Electron);
1158+
negTrackPar.setPID(o2::track::PID::Electron);
1159+
1160+
auto const& collision = collisions.rawIteratorAt(v0.collisionId);
1161+
if (!mVDriftMgr.moveTPCTrack<TBCs, TCollisions>(collision, posTrack, posTrackPar)) {
1162+
return;
1163+
}
1164+
}
1165+
1166+
bool isNegTPCOnly = (negTrack.hasTPC() && !negTrack.hasITS() && !negTrack.hasTRD() && !negTrack.hasTOF());
1167+
if (isNegTPCOnly) {
1168+
// Nota bene: negative is TPC-only -> this entire V0 merits treatment as photon candidate
1169+
posTrackPar.setPID(o2::track::PID::Electron);
1170+
negTrackPar.setPID(o2::track::PID::Electron);
1171+
1172+
auto const& collision = collisions.rawIteratorAt(v0.collisionId);
1173+
if (!mVDriftMgr.moveTPCTrack<TBCs, TCollisions>(collision, negTrack, negTrackPar)) {
1174+
return;
1175+
}
1176+
}
1177+
}
1178+
1179+
if (!straHelper.buildV0Candidate(v0.collisionId, pvX, pvY, pvZ, posTrack, negTrack, posTrackPar, negTrackPar, v0.isCollinearV0, mEnabledTables[kV0Covs])) {
11381180
products.v0dataLink(-1, -1);
11391181
continue;
11401182
}
@@ -2107,7 +2149,7 @@ struct StrangenessBuilder {
21072149
markV0sUsedInCascades(v0List, cascadeList, trackedCascades);
21082150

21092151
// build V0s
2110-
buildV0s(collisions, v0List, tracks, mcParticles);
2152+
buildV0s<TBCs>(collisions, v0List, tracks, mcParticles);
21112153

21122154
// build cascades
21132155
buildCascades(collisions, cascadeList, tracks, mcParticles);
@@ -2121,22 +2163,22 @@ struct StrangenessBuilder {
21212163
populateCascadeInterlinks();
21222164
}
21232165

2124-
void processRealData(aod::Collisions const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, aod::TrackedCascades const& trackedCascades, FullTracksExtIU const& tracks, aod::BCsWithTimestamps const& bcs)
2166+
void processRealData(soa::Join<aod::Collisions, aod::EvSels> const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, aod::TrackedCascades const& trackedCascades, FullTracksExtIU const& tracks, aod::BCsWithTimestamps const& bcs)
21252167
{
21262168
dataProcess(collisions, static_cast<TObject*>(nullptr), v0s, cascades, trackedCascades, tracks, bcs, static_cast<TObject*>(nullptr));
21272169
}
21282170

2129-
void processRealDataRun2(aod::Collisions const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, FullTracksExt const& tracks, aod::BCsWithTimestamps const& bcs)
2171+
void processRealDataRun2(soa::Join<aod::Collisions, aod::EvSels> const& collisions, aod::V0s const& v0s, aod::Cascades const& cascades, FullTracksExt const& tracks, aod::BCsWithTimestamps const& bcs)
21302172
{
21312173
dataProcess(collisions, static_cast<TObject*>(nullptr), v0s, cascades, static_cast<TObject*>(nullptr), tracks, bcs, static_cast<TObject*>(nullptr));
21322174
}
21332175

2134-
void processMonteCarlo(soa::Join<aod::Collisions, aod::McCollisionLabels> const& collisions, aod::McCollisions const& mccollisions, aod::V0s const& v0s, aod::Cascades const& cascades, aod::TrackedCascades const& trackedCascades, FullTracksExtLabeledIU const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const& mcParticles)
2176+
void processMonteCarlo(soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const& collisions, aod::McCollisions const& mccollisions, aod::V0s const& v0s, aod::Cascades const& cascades, aod::TrackedCascades const& trackedCascades, FullTracksExtLabeledIU const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const& mcParticles)
21352177
{
21362178
dataProcess(collisions, mccollisions, v0s, cascades, trackedCascades, tracks, bcs, mcParticles);
21372179
}
21382180

2139-
void processMonteCarloRun2(soa::Join<aod::Collisions, aod::McCollisionLabels> const& collisions, aod::McCollisions const& mccollisions, aod::V0s const& v0s, aod::Cascades const& cascades, FullTracksExtLabeled const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const& mcParticles)
2181+
void processMonteCarloRun2(soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels> const& collisions, aod::McCollisions const& mccollisions, aod::V0s const& v0s, aod::Cascades const& cascades, FullTracksExtLabeled const& tracks, aod::BCsWithTimestamps const& bcs, aod::McParticles const& mcParticles)
21402182
{
21412183
dataProcess(collisions, mccollisions, v0s, cascades, static_cast<TObject*>(nullptr), tracks, bcs, mcParticles);
21422184
}

0 commit comments

Comments
 (0)