Skip to content

Commit fd38da0

Browse files
author
Prottay Das
committed
corrected the indexing error in mixed phi process
1 parent 9775a2d commit fd38da0

1 file changed

Lines changed: 58 additions & 12 deletions

File tree

PWGCF/TableProducer/filter2Prong.cxx

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@
1919
#include "PWGHF/DataModel/TrackIndexSkimmingTables.h"
2020
#include "PWGLF/DataModel/LFStrangenessTables.h"
2121

22-
#include "Common/CCDB/EventSelectionParams.h"
2322
#include "Common/Core/RecoDecay.h"
24-
#include "Common/DataModel/EventSelection.h"
2523
#include "Common/DataModel/PIDResponseITS.h"
2624
#include "Common/DataModel/PIDResponseTOF.h"
2725
#include "Common/DataModel/PIDResponseTPC.h"
@@ -31,10 +29,7 @@
3129
#include <Framework/AnalysisDataModel.h>
3230
#include <Framework/AnalysisHelpers.h>
3331
#include <Framework/AnalysisTask.h>
34-
#include <Framework/BinningPolicy.h>
3532
#include <Framework/Configurable.h>
36-
#include <Framework/GroupedCombinations.h>
37-
#include <Framework/HistogramSpec.h>
3833
#include <Framework/InitContext.h>
3934
#include <Framework/runDataProcessing.h>
4035
#include <ReconstructionDataFormats/PID.h>
@@ -49,7 +44,6 @@
4944
#include <algorithm>
5045
#include <array>
5146
#include <cstddef>
52-
#include <cstdint>
5347
#include <experimental/type_traits>
5448
#include <iterator>
5549
#include <memory>
@@ -71,6 +65,7 @@ enum LambdaPid { kLambda = 0,
7165
struct Filter2Prong {
7266
SliceCache cache;
7367
Preslice<aod::CFTrackRefs> perCollisionCFTrackRefs = aod::track::collisionId;
68+
Preslice<aod::CFCollRefs> perCollisionCFCollRefs = aod::track::collisionId;
7469

7570
O2_DEFINE_CONFIGURABLE(cfgVerbosity, int, 0, "Verbosity level (0 = major, 1 = per collision)")
7671
O2_DEFINE_CONFIGURABLE(cfgYMax, float, -1.0f, "Maximum candidate rapidity")
@@ -806,8 +801,23 @@ struct Filter2Prong {
806801
PROCESS_SWITCH(Filter2Prong, processDataPhiV0, "Process data Phi and V0 candidates with invariant mass method", false);
807802

808803
using DerivedCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities>;
809-
void processDataPhiMixed(DerivedCollisions const& collisions, Filter2Prong::PIDTrack const& /*tracksP*/, aod::CFTrackRefs const& cftracks)
804+
void processDataPhiMixed(DerivedCollisions const& collisions, Filter2Prong::PIDTrack const& /*tracksP*/, aod::CFCollRefs const& cfcollrefs, aod::CFTrackRefs const& cftracks)
810805
{
806+
struct MixedPhiCandidate {
807+
int64_t cfCollisionId;
808+
int64_t cfTrackProng0Id;
809+
int64_t cfTrackProng1Id;
810+
float pt;
811+
float eta;
812+
float phi;
813+
float invMass;
814+
uint8_t decay;
815+
};
816+
817+
if (cfcollrefs.size() <= 0 || cftracks.size() <= 0) {
818+
return;
819+
}
820+
811821
auto getMultiplicity = [](auto const& col) {
812822
return col.multiplicity();
813823
};
@@ -819,11 +829,23 @@ struct Filter2Prong {
819829
using TB = std::tuple_element<std::tuple_size_v<decltype(tracksTuple)> - 1, decltype(tracksTuple)>::type;
820830
Pair<DerivedCollisions, TA, TB, BinningTypeDerived> pairs{configurableBinningDerived, cfgNoMixedEvents, -1, collisions, tracksTuple, &cache}; // -1 is the number of the bin to skip
821831

832+
std::unordered_map<int64_t, int64_t> collToCF;
833+
collToCF.reserve(cfcollrefs.size());
834+
for (const auto& cfcollref : cfcollrefs) {
835+
collToCF.emplace(cfcollref.collisionId(), cfcollref.globalIndex());
836+
}
837+
838+
std::vector<MixedPhiCandidate> mixedPhiCandidates;
822839
o2::aod::ITSResponse itsResponse;
823840

824841
for (auto it = pairs.begin(); it != pairs.end(); it++) {
825842
auto& [collision1, tracks1, collision2, tracks2] = *it;
826843

844+
auto cfColl1 = collToCF.find(collision1.globalIndex());
845+
if (cfColl1 == collToCF.end() || collToCF.find(collision2.globalIndex()) == collToCF.end()) {
846+
continue;
847+
}
848+
827849
if (!(collision1.sel8() &&
828850
collision1.selection_bit(aod::evsel::kNoSameBunchPileup) &&
829851
collision1.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV) &&
@@ -890,16 +912,40 @@ struct Filter2Prong {
890912
}
891913

892914
float phi = RecoDecay::constrainAngle(s.Phi(), 0.0f);
893-
894-
output2ProngTracks(collision1.globalIndex(),
895-
cftrack1.globalIndex(), cftrack2.globalIndex(),
896-
s.pt(), s.eta(), phi, s.M(),
897-
aod::cf2prongtrack::PhiToKKPID3Mixed);
915+
mixedPhiCandidates.push_back({cfColl1->second,
916+
cftrack1.globalIndex(),
917+
cftrack2.globalIndex(),
918+
s.pt(),
919+
s.eta(),
920+
phi,
921+
s.M(),
922+
aod::cf2prongtrack::PhiToKKPID3Mixed});
898923
}
899924
}
900925
}
901926
}
902927
}
928+
929+
std::sort(mixedPhiCandidates.begin(), mixedPhiCandidates.end(), [](const auto& lhs, const auto& rhs) {
930+
if (lhs.cfCollisionId != rhs.cfCollisionId) {
931+
return lhs.cfCollisionId < rhs.cfCollisionId;
932+
}
933+
if (lhs.cfTrackProng0Id != rhs.cfTrackProng0Id) {
934+
return lhs.cfTrackProng0Id < rhs.cfTrackProng0Id;
935+
}
936+
return lhs.cfTrackProng1Id < rhs.cfTrackProng1Id;
937+
});
938+
939+
for (const auto& candidate : mixedPhiCandidates) {
940+
output2ProngTracks(candidate.cfCollisionId,
941+
candidate.cfTrackProng0Id,
942+
candidate.cfTrackProng1Id,
943+
candidate.pt,
944+
candidate.eta,
945+
candidate.phi,
946+
candidate.invMass,
947+
candidate.decay);
948+
}
903949
}
904950

905951
PROCESS_SWITCH(Filter2Prong, processDataPhiMixed, "Process mixed-event phi candidates using O2 framework", false);

0 commit comments

Comments
 (0)