Skip to content

Commit cf0f781

Browse files
committed
fix
1 parent fde5173 commit cf0f781

1 file changed

Lines changed: 303 additions & 7 deletions

File tree

PWGLF/Tasks/Nuspex/hadronnucleicorrelation.cxx

Lines changed: 303 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ struct HadronNucleiCorrelation {
144144
ConfigurableAxis deltaPhiAxis = {"deltaPhiAxis", {46, -1 * o2::constants::math::PIHalf, 3 * o2::constants::math::PIHalf}, "#Delta#phi (rad)"};
145145

146146
using FilteredCollisions = soa::Filtered<aod::SingleCollSels>;
147+
using FilteredCollisionsExtra = soa::Filtered<aod::SingleCollSels, aod::SingleCollExtras>;
147148
using SimCollisions = soa::Filtered<aod::McCollisions>;
148149
using SimParticles = aod::McParticles;
149150
using FilteredTracks = soa::Filtered<soa::Join<aod::SingleTrackSels, aod::SingleTrkExtras, aod::SinglePIDEls, aod::SinglePIDPrs, aod::SinglePIDDes>>; // new tables (v3)
@@ -774,7 +775,198 @@ struct HadronNucleiCorrelation {
774775

775776
for (const auto& track : tracks) {
776777

777-
if (removeSameBunchPileup && !track.template singleCollSel_as<soa::Filtered<FilteredCollisions>>().isNoSameBunchPileup())
778+
if (track.tpcFractionSharedCls() > maxtpcSharedCls)
779+
continue;
780+
if (track.itsNCls() < minitsNCls)
781+
continue;
782+
783+
if (IsProton(track, +1))
784+
registry.fill(HIST("hPrDCAxy"), track.dcaXY(), track.pt());
785+
if (IsProton(track, -1))
786+
registry.fill(HIST("hAntiPrDCAxy"), track.dcaXY(), track.pt());
787+
if (IsDeuteron(track, +1))
788+
registry.fill(HIST("hDeDCAxy"), track.dcaXY(), track.pt());
789+
if (IsDeuteron(track, -1))
790+
registry.fill(HIST("hAntiDeDCAxy"), track.dcaXY(), track.pt());
791+
792+
if (!applyDCAcut(track))
793+
continue;
794+
795+
if (doQA) {
796+
QA.fill(HIST("QA/hTPCnClusters"), track.tpcNClsFound());
797+
QA.fill(HIST("QA/hTPCSharedClusters"), track.tpcFractionSharedCls());
798+
QA.fill(HIST("QA/hTPCchi2"), track.tpcChi2NCl());
799+
QA.fill(HIST("QA/hTPCcrossedRowsOverFindableCls"), track.tpcCrossedRowsOverFindableCls());
800+
QA.fill(HIST("QA/hITSchi2"), track.itsChi2NCl());
801+
QA.fill(HIST("QA/hDCAxy"), track.dcaXY(), track.pt());
802+
QA.fill(HIST("QA/hDCAz"), track.dcaZ(), track.pt());
803+
QA.fill(HIST("QA/TPCChi2VsPZ"), track.tpcInnerParam() / track.sign(), track.tpcChi2NCl());
804+
QA.fill(HIST("QA/hVtxZ_trk"), collision.posZ());
805+
QA.fill(HIST("QA/hnSigmaTPCVsPt_El"), track.pt() * track.sign(), track.tpcNSigmaEl());
806+
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr"), track.pt() * track.sign(), track.tpcNSigmaPr());
807+
QA.fill(HIST("QA/hnSigmaTPCVsPt_De"), track.pt() * track.sign(), track.tpcNSigmaDe());
808+
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr"), track.pt() * track.sign(), track.tofNSigmaPr());
809+
QA.fill(HIST("QA/hnSigmaTOFVsPt_De"), track.pt() * track.sign(), track.tofNSigmaDe());
810+
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr"), track.pt() * track.sign(), track.itsNSigmaPr());
811+
QA.fill(HIST("QA/hnSigmaITSVsPt_De"), track.pt() * track.sign(), track.itsNSigmaDe());
812+
QA.fill(HIST("QA/h2dTPCTOF_AntiPr"), track.tpcNSigmaPr(), track.tofNSigmaPr());
813+
QA.fill(HIST("QA/h2dTPCTOF_Pr"), track.tpcNSigmaPr(), track.tofNSigmaPr());
814+
815+
if (IsProton(track, -1)) {
816+
QA.fill(HIST("QA/hEtaAntiPr"), track.eta());
817+
QA.fill(HIST("QA/hPhiAntiPr"), track.phi());
818+
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tofNSigmaPr());
819+
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaPr());
820+
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.itsNSigmaPr());
821+
QA.fill(HIST("QA/h2dTPCTOF_AntiPr_AfterSel"), track.tpcNSigmaPr(), track.tofNSigmaPr());
822+
}
823+
if (IsProton(track, +1)) {
824+
QA.fill(HIST("QA/hEtaPr"), track.eta());
825+
QA.fill(HIST("QA/hPhiPr"), track.phi());
826+
QA.fill(HIST("QA/hnSigmaTOFVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tofNSigmaPr());
827+
QA.fill(HIST("QA/hnSigmaTPCVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaPr());
828+
QA.fill(HIST("QA/hnSigmaITSVsPt_Pr_AfterSel"), track.pt() * track.sign(), track.itsNSigmaPr());
829+
QA.fill(HIST("QA/h2dTPCTOF_Pr_AfterSel"), track.tpcNSigmaPr(), track.tofNSigmaPr());
830+
}
831+
if (IsDeuteron(track, -1)) {
832+
QA.fill(HIST("QA/hEtaAntiDe"), track.eta());
833+
QA.fill(HIST("QA/hPhiAntiDe"), track.phi());
834+
QA.fill(HIST("QA/hnSigmaTOFVsPt_De_AfterSel"), track.pt() * track.sign(), track.tofNSigmaDe());
835+
QA.fill(HIST("QA/hnSigmaTPCVsPt_De_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaDe());
836+
QA.fill(HIST("QA/hnSigmaITSVsPt_De_AfterSel"), track.pt() * track.sign(), track.itsNSigmaDe());
837+
}
838+
if (IsDeuteron(track, +1)) {
839+
QA.fill(HIST("QA/hEtaDe"), track.eta());
840+
QA.fill(HIST("QA/hPhiDe"), track.phi());
841+
QA.fill(HIST("QA/hnSigmaTOFVsPt_De_AfterSel"), track.pt() * track.sign(), track.tofNSigmaDe());
842+
QA.fill(HIST("QA/hnSigmaTPCVsPt_De_AfterSel"), track.pt() * track.sign(), track.tpcNSigmaDe());
843+
QA.fill(HIST("QA/hnSigmaITSVsPt_De_AfterSel"), track.pt() * track.sign(), track.itsNSigmaDe());
844+
}
845+
}
846+
}
847+
848+
Pair->SetMagField1(collision.magField());
849+
Pair->SetMagField2(collision.magField());
850+
851+
if (mode == kPbarPbar || mode == kPP) { // Identical particle combinations
852+
853+
for (const auto& [part0, part1] : combinations(CombinationsStrictlyUpperIndexPolicy(tracks, tracks))) {
854+
855+
if (part0.tpcFractionSharedCls() > maxtpcSharedCls)
856+
continue;
857+
if (part0.itsNCls() < minitsNCls)
858+
continue;
859+
if (part1.tpcFractionSharedCls() > maxtpcSharedCls)
860+
continue;
861+
if (part1.itsNCls() < minitsNCls)
862+
continue;
863+
864+
if (!applyDCAcut(part0))
865+
continue;
866+
if (!applyDCAcut(part1))
867+
continue;
868+
869+
// remove tracks outside pt bins
870+
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
871+
continue;
872+
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
873+
continue;
874+
875+
// mode 6
876+
if (mode == kPP) {
877+
if (!IsProton(part0, +1))
878+
continue;
879+
if (!IsProton(part1, +1))
880+
continue;
881+
}
882+
// mode 5
883+
if (mode == kPbarPbar) {
884+
if (!IsProton(part0, -1))
885+
continue;
886+
if (!IsProton(part1, -1))
887+
continue;
888+
}
889+
890+
fillHistograms(part0, part1, false, true);
891+
}
892+
893+
} else {
894+
895+
for (const auto& [part0, part1] : combinations(CombinationsFullIndexPolicy(tracks, tracks))) {
896+
897+
if (part0.tpcFractionSharedCls() > maxtpcSharedCls)
898+
continue;
899+
if (part0.itsNCls() < minitsNCls)
900+
continue;
901+
if (part1.tpcFractionSharedCls() > maxtpcSharedCls)
902+
continue;
903+
if (part1.itsNCls() < minitsNCls)
904+
continue;
905+
906+
if (!applyDCAcut(part0))
907+
continue;
908+
if (!applyDCAcut(part1))
909+
continue;
910+
911+
// remove tracks outside pt bins
912+
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
913+
continue;
914+
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
915+
continue;
916+
917+
// modes 0,1,2,3,4,7
918+
if (mode == kDbarPbar) {
919+
if (!IsDeuteron(part0, -1))
920+
continue;
921+
if (!IsProton(part1, -1))
922+
continue;
923+
}
924+
if (mode == kDP) {
925+
if (!IsDeuteron(part0, +1))
926+
continue;
927+
if (!IsProton(part1, +1))
928+
continue;
929+
}
930+
if (mode == kDbarP) {
931+
if (!IsDeuteron(part0, -1))
932+
continue;
933+
if (!IsProton(part1, +1))
934+
continue;
935+
}
936+
if (mode == kDPbar) {
937+
if (!IsDeuteron(part0, +1))
938+
continue;
939+
if (!IsProton(part1, -1))
940+
continue;
941+
}
942+
if (mode == kPbarP) {
943+
if (!IsProton(part0, -1))
944+
continue;
945+
if (!IsProton(part1, +1))
946+
continue;
947+
}
948+
if (mode == kPPbar) {
949+
if (!IsProton(part0, +1))
950+
continue;
951+
if (!IsProton(part1, -1))
952+
continue;
953+
}
954+
955+
fillHistograms(part0, part1, false, false);
956+
}
957+
}
958+
}
959+
PROCESS_SWITCH(HadronNucleiCorrelation, processSameEvent, "processSameEvent", true);
960+
961+
void processSameEventEvSel(FilteredCollisionsExtra::iterator const& collision, FilteredTracks const& tracks)
962+
{
963+
964+
registry.fill(HIST("hNEvents"), 0.5);
965+
registry.fill(HIST("hMult"), collision.mult());
966+
967+
for (const auto& track : tracks) {
968+
969+
if (removeSameBunchPileup && !track.template singleCollSel_as<soa::Filtered<FilteredCollisionsExtra>>().isNoSameBunchPileup())
778970
continue;
779971

780972
if (track.tpcFractionSharedCls() > maxtpcSharedCls)
@@ -854,7 +1046,7 @@ struct HadronNucleiCorrelation {
8541046

8551047
for (const auto& [part0, part1] : combinations(CombinationsStrictlyUpperIndexPolicy(tracks, tracks))) {
8561048

857-
if (removeSameBunchPileup && !part0.template singleCollSel_as<soa::Filtered<FilteredCollisions>>().isNoSameBunchPileup())
1049+
if (removeSameBunchPileup && !part0.template singleCollSel_as<soa::Filtered<FilteredCollisionsExtra>>().isNoSameBunchPileup())
8581050
continue;
8591051

8601052
if (part0.tpcFractionSharedCls() > maxtpcSharedCls)
@@ -899,7 +1091,7 @@ struct HadronNucleiCorrelation {
8991091

9001092
for (const auto& [part0, part1] : combinations(CombinationsFullIndexPolicy(tracks, tracks))) {
9011093

902-
if (removeSameBunchPileup && !part0.template singleCollSel_as<soa::Filtered<FilteredCollisions>>().isNoSameBunchPileup())
1094+
if (removeSameBunchPileup && !part0.template singleCollSel_as<soa::Filtered<FilteredCollisionsExtra>>().isNoSameBunchPileup())
9031095
continue;
9041096

9051097
if (part0.tpcFractionSharedCls() > maxtpcSharedCls)
@@ -964,7 +1156,7 @@ struct HadronNucleiCorrelation {
9641156
}
9651157
}
9661158
}
967-
PROCESS_SWITCH(HadronNucleiCorrelation, processSameEvent, "processSameEvent", true);
1159+
PROCESS_SWITCH(HadronNucleiCorrelation, processSameEventEvSel, "processSameEventEvSel", false);
9681160

9691161
void processMixedEvent(FilteredCollisions const& collisions, FilteredTracks const& tracks)
9701162
{
@@ -988,9 +1180,113 @@ struct HadronNucleiCorrelation {
9881180

9891181
for (const auto& [part0, part1] : combinations(CombinationsFullIndexPolicy(groupPartsOne, groupPartsTwo))) {
9901182

991-
if (removeSameBunchPileup && !part0.template singleCollSel_as<soa::Filtered<FilteredCollisions>>().isNoSameBunchPileup())
1183+
if (part0.tpcFractionSharedCls() > maxtpcSharedCls)
1184+
continue;
1185+
if (part0.itsNCls() < minitsNCls)
1186+
continue;
1187+
if (part1.tpcFractionSharedCls() > maxtpcSharedCls)
1188+
continue;
1189+
if (part1.itsNCls() < minitsNCls)
1190+
continue;
1191+
1192+
if (!applyDCAcut(part0))
1193+
continue;
1194+
if (!applyDCAcut(part1))
1195+
continue;
1196+
1197+
// remove tracks outside pt bins
1198+
if (part0.pt() < pTBins.value.at(0) || part0.pt() >= pTBins.value.at(nBinspT))
1199+
continue;
1200+
if (part1.pt() < pTBins.value.at(0) || part1.pt() >= pTBins.value.at(nBinspT))
1201+
continue;
1202+
1203+
//{"mode", 0, "0: antid-antip, 1: d-p, 2: antid-p, 3: d-antip, 4: antip-p, 5: antip-antip, 6: p-p, 7: p-antip"};
1204+
if (mode == kDbarPbar) {
1205+
if (!IsDeuteron(part0, -1))
1206+
continue;
1207+
if (!IsProton(part1, -1))
1208+
continue;
1209+
}
1210+
if (mode == kDP) {
1211+
if (!IsDeuteron(part0, +1))
1212+
continue;
1213+
if (!IsProton(part1, +1))
1214+
continue;
1215+
}
1216+
if (mode == kDbarP) {
1217+
if (!IsDeuteron(part0, -1))
1218+
continue;
1219+
if (!IsProton(part1, +1))
1220+
continue;
1221+
}
1222+
if (mode == kDPbar) {
1223+
if (!IsDeuteron(part0, +1))
1224+
continue;
1225+
if (!IsProton(part1, -1))
1226+
continue;
1227+
}
1228+
if (mode == kPbarP) {
1229+
if (!IsProton(part0, -1))
1230+
continue;
1231+
if (!IsProton(part1, +1))
1232+
continue;
1233+
}
1234+
if (mode == kPbarPbar) {
1235+
if (!IsProton(part0, -1))
1236+
continue;
1237+
if (!IsProton(part1, -1))
1238+
continue;
1239+
}
1240+
if (mode == kPP) {
1241+
if (!IsProton(part0, +1))
1242+
continue;
1243+
if (!IsProton(part1, +1))
1244+
continue;
1245+
}
1246+
if (mode == kPPbar) {
1247+
if (!IsProton(part0, +1))
1248+
continue;
1249+
if (!IsProton(part1, -1))
1250+
continue;
1251+
}
1252+
1253+
bool isIdentical = false;
1254+
if (mode == kPbarPbar || mode == kPP)
1255+
isIdentical = true;
1256+
1257+
fillHistograms(part0, part1, true, isIdentical);
1258+
}
1259+
}
1260+
}
1261+
PROCESS_SWITCH(HadronNucleiCorrelation, processMixedEvent, "processMixedEvent", true);
1262+
1263+
void processMixedEventEvSel(FilteredCollisionsExtra const& collisions, FilteredTracks const& tracks)
1264+
{
1265+
1266+
for (const auto& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, collisions, collisions)) {
1267+
1268+
// LOGF(info, "Mixed event collisions: (%d, %d) zvtx (%.1f, %.1f) mult (%d, %d)", collision1.globalIndex(), collision2.globalIndex(), collision1.posZ(), collision2.posZ(), collision1.mult(), collision2.mult());
1269+
1270+
auto groupPartsOne = tracks.sliceByCached(o2::aod::singletrackselector::singleCollSelId, collision1.globalIndex(), cache);
1271+
auto groupPartsTwo = tracks.sliceByCached(o2::aod::singletrackselector::singleCollSelId, collision2.globalIndex(), cache);
1272+
1273+
const auto& magFieldTesla1 = collision1.magField();
1274+
const auto& magFieldTesla2 = collision2.magField();
1275+
1276+
const float limit = 1e-4;
1277+
1278+
if (std::abs(magFieldTesla1 - magFieldTesla2) > limit) {
1279+
continue;
1280+
}
1281+
1282+
Pair->SetMagField1(magFieldTesla1);
1283+
Pair->SetMagField2(magFieldTesla2);
1284+
1285+
for (const auto& [part0, part1] : combinations(CombinationsFullIndexPolicy(groupPartsOne, groupPartsTwo))) {
1286+
1287+
if (removeSameBunchPileup && !part0.template singleCollSel_as<soa::Filtered<FilteredCollisionsExtra>>().isNoSameBunchPileup())
9921288
continue;
993-
if (removeSameBunchPileup && !part1.template singleCollSel_as<soa::Filtered<FilteredCollisions>>().isNoSameBunchPileup())
1289+
if (removeSameBunchPileup && !part1.template singleCollSel_as<soa::Filtered<FilteredCollisionsExtra>>().isNoSameBunchPileup())
9941290
continue;
9951291

9961292
if (part0.tpcFractionSharedCls() > maxtpcSharedCls)
@@ -1071,7 +1367,7 @@ struct HadronNucleiCorrelation {
10711367
}
10721368
}
10731369
}
1074-
PROCESS_SWITCH(HadronNucleiCorrelation, processMixedEvent, "processMixedEvent", true);
1370+
PROCESS_SWITCH(HadronNucleiCorrelation, processMixedEventEvSel, "processMixedEventEvSel", false);
10751371

10761372
void processMC(FilteredCollisions const&, FilteredTracksMC const& tracks)
10771373
{

0 commit comments

Comments
 (0)