2828#include " Framework/ASoAHelpers.h"
2929#include " ReconstructionDataFormats/Track.h"
3030#include " Common/DataModel/TrackSelectionTables.h"
31+ #include " Common/Core/TrackSelection.h"
3132#include " Common/DataModel/Centrality.h"
3233#include " Common/DataModel/Multiplicity.h"
3334#include " Common/Core/RecoDecay.h"
@@ -57,7 +58,7 @@ using namespace o2::framework::expressions;
5758
5859using Track = o2::track::TrackParCov;
5960using TracksFullIU = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCEl, aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr, aod::pidTPCDe, aod::pidTOFDe, aod::TOFSignal, aod::TOFEvTime>;
60- using TracksFullIUMc = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCEl, aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr, aod::pidTPCDe, aod::pidTOFDe, aod::TOFSignal, aod::TOFEvTime, aod::McTrackLabels>;
61+ using TracksFullIUMc = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod:: TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::pidTPCEl, aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr, aod::pidTPCDe, aod::pidTOFDe, aod::TOFSignal, aod::TOFEvTime, aod::McTrackLabels>;
6162using CollisionsCustom = soa::Join<aod::Collisions, aod::EvSels>;
6263
6364namespace BetheBloch
@@ -626,12 +627,13 @@ struct LfTreeCreatorClusterStudies {
626627 m_hAnalysis.get <TH1>(HIST (" v0_type" ))->GetXaxis ()->SetBinLabel (i + 1 , V0Type_labels[i].c_str ());
627628 }
628629
629- bool fillV0Cand (const std::array<float , 3 >& PV, const aod::V0s::iterator& v0, CandidateV0& candV0)
630+ template <typename Track>
631+ bool fillV0Cand (const std::array<float , 3 >& PV, const aod::V0s::iterator& v0, CandidateV0& candV0, const Track&)
630632 {
631633 m_hAnalysis.fill (HIST (" v0_selections" ), V0Selections::kV0NoCut );
632634
633- auto posTrack = v0.posTrack_as <TracksFullIU >();
634- auto negTrack = v0.negTrack_as <TracksFullIU >();
635+ auto posTrack = v0.posTrack_as <Track >();
636+ auto negTrack = v0.negTrack_as <Track >();
635637 if (!qualitySelectionV0Daughter (posTrack) || !qualitySelectionV0Daughter (negTrack)) {
636638 return false ;
637639 }
@@ -908,12 +910,13 @@ struct LfTreeCreatorClusterStudies {
908910 m_hAnalysis.fill (HIST (" isPositive" ), false );
909911 }
910912
911- bool fillKCand (const std::array<float , 3 >& PV, const aod::Cascades::iterator& cascade, CandidateK& candK)
913+ template <typename Track>
914+ bool fillKCand (const std::array<float , 3 >& PV, const aod::Cascades::iterator& cascade, CandidateK& candK, const Track&)
912915 {
913916 m_hAnalysis.fill (HIST (" casc_selections" ), CascSelections::kCascNoCut );
914917
915918 auto v0Track = cascade.template v0_as <aod::V0s>();
916- auto bachelorTrack = cascade.template bachelor_as <TracksFullIU >();
919+ auto bachelorTrack = cascade.template bachelor_as <Track >();
917920
918921 auto itv0 = std::find_if (m_v0TrackParCovs.begin (), m_v0TrackParCovs.end (), [&](const V0TrackParCov& v0) { return v0.globalIndex == v0Track.globalIndex (); });
919922 if (itv0 == m_v0TrackParCovs.end ()) {
@@ -1109,6 +1112,7 @@ struct LfTreeCreatorClusterStudies {
11091112 return ;
11101113 }
11111114 auto mcParticle = track.mcParticle ();
1115+
11121116 m_hAnalysis.fill (HIST (" de_selections" ), DeSelections::kDeNoCut );
11131117 if (track.itsNCls () < desetting_nClsIts) {
11141118 return ;
@@ -1178,7 +1182,6 @@ struct LfTreeCreatorClusterStudies {
11781182 if (track.hasTOF () && (tofMass < he3setting_tofmasslow || tofMass > he3setting_tofmasshigh)) {
11791183 return ;
11801184 }
1181-
11821185 uint8_t partID = PartID::he;
11831186 bool heliumPID = track.pidForTracking () == o2::track::PID::Helium3 || track.pidForTracking () == o2::track::PID::Alpha;
11841187 float correctedTPCinnerParam = (heliumPID && he3setting_compensatePIDinTracking) ? track.tpcInnerParam () / 2 .f : track.tpcInnerParam ();
@@ -1238,7 +1241,6 @@ struct LfTreeCreatorClusterStudies {
12381241 if (track.hasTOF () && (tofMass < he3setting_tofmasslow || tofMass > he3setting_tofmasshigh)) {
12391242 return ;
12401243 }
1241-
12421244 uint8_t partID = PartID::he;
12431245 bool heliumPID = track.pidForTracking () == o2::track::PID::Helium3 || track.pidForTracking () == o2::track::PID::Alpha;
12441246 float correctedTPCinnerParam = (heliumPID && he3setting_compensatePIDinTracking) ? track.tpcInnerParam () / 2 .f : track.tpcInnerParam ();
@@ -1302,14 +1304,14 @@ struct LfTreeCreatorClusterStudies {
13021304 m_v0TrackParCovs.clear ();
13031305 for (auto & v0 : v0Table_thisCollision) {
13041306 CandidateV0 candV0;
1305- if (fillV0Cand (PV, v0, candV0))
1307+ if (fillV0Cand (PV, v0, candV0, tracks ))
13061308 fillV0Table (candV0);
13071309 }
13081310 }
13091311 if (setting_fillK && setting_fillV0) { // the v0 loops are needed for the Ks
13101312 for (auto & cascade : cascTable_thisCollision) {
13111313 CandidateK candK;
1312- if (fillKCand (PV, cascade, candK))
1314+ if (fillKCand (PV, cascade, candK, tracks ))
13131315 fillKTable (candK);
13141316 }
13151317 }
@@ -1344,7 +1346,7 @@ struct LfTreeCreatorClusterStudies {
13441346 }
13451347 PROCESS_SWITCH (LfTreeCreatorClusterStudies, processDataNuclei, " process Data Nuclei" , false );
13461348
1347- void processMcV0Casc (CollisionsCustom const & collisions, TracksFullIUMc const & tracks, aod::V0s const & v0s, aod::Cascades const & cascades, aod::BCsWithTimestamps const &)
1349+ void processMcV0Casc (CollisionsCustom const & collisions, TracksFullIUMc const & tracks, aod::V0s const & v0s, aod::Cascades const & cascades, aod::BCsWithTimestamps const &, aod::McParticles const & )
13481350 {
13491351 for (const auto & collision : collisions) {
13501352 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
@@ -1372,22 +1374,28 @@ struct LfTreeCreatorClusterStudies {
13721374 m_v0TrackParCovs.clear ();
13731375 for (auto & v0 : v0Table_thisCollision) {
13741376 CandidateV0 candV0;
1375- if (fillV0Cand (PV, v0, candV0) && fillV0CandMc (v0, candV0))
1376- fillV0TableMc (candV0);
1377+ if (fillV0Cand (PV, v0, candV0, tracks)) {
1378+ if (fillV0CandMc (v0, candV0)) {
1379+ fillV0TableMc (candV0);
1380+ }
1381+ }
13771382 }
13781383 }
13791384 if (setting_fillK && setting_fillV0) { // the v0 loops are needed for the Ks
13801385 for (auto & cascade : cascTable_thisCollision) {
13811386 CandidateK candK;
1382- if (fillKCand (PV, cascade, candK) && fillKCandMc (cascade, candK))
1383- fillKTableMc (candK);
1387+ if (fillKCand (PV, cascade, candK, tracks)) {
1388+ if (fillKCandMc (cascade, candK)) {
1389+ fillKTableMc (candK);
1390+ }
1391+ }
13841392 }
13851393 }
13861394 }
13871395 }
13881396 PROCESS_SWITCH (LfTreeCreatorClusterStudies, processMcV0Casc, " process Mc V0 and cascade" , false );
13891397
1390- void processMcNuclei (CollisionsCustom const & collisions, TracksFullIUMc const & tracks)
1398+ void processMcNuclei (CollisionsCustom const & collisions, TracksFullIUMc const & tracks, aod::BCs const &, aod::McParticles const & )
13911399 {
13921400 for (const auto & collision : collisions) {
13931401 m_collisionCounter++;
@@ -1405,10 +1413,12 @@ struct LfTreeCreatorClusterStudies {
14051413 TrackTable_thisCollision.bindExternalIndices (&tracks);
14061414
14071415 for (auto track : TrackTable_thisCollision) {
1408- if (setting_fillDe)
1416+ if (setting_fillDe) {
14091417 fillDeTableMc (track);
1410- if (setting_fillHe3)
1418+ }
1419+ if (setting_fillHe3) {
14111420 fillHe3TableMc (track);
1421+ }
14121422 }
14131423 }
14141424 }
0 commit comments