@@ -682,12 +682,22 @@ struct hadronnucleicorrelation {
682682 template <int ME, typename Type>
683683 void mixTracks (Type const & tracks1, Type const & tracks2, bool isIdentical, bool dorapidity)
684684 { // last value: 0 -- SE; 1 -- ME
685+ int i = 0 ;
685686 for (auto const & it1 : tracks1) {
687+ int j = 0 ;
686688 for (auto const & it2 : tracks2) {
687689
688690 Pair->SetPair (it1, it2);
689691 Pair->SetIdentical (isIdentical);
690692
693+ if (isIdentical) {
694+ if (j <= i)
695+ continue ;
696+
697+ if (it1->globalIndex () == it1->globalIndex ())
698+ continue ;
699+ }
700+
691701 // if Identical (pp and antip-antip)
692702 if (isIdentical && Pair->IsClosePair (deta, dphi, radiusTPC)) {
693703 QA.fill (HIST (" QA/hdetadphistar" ), Pair->GetPhiStarDiff (radiusTPC), Pair->GetEtaDiff ());
@@ -770,7 +780,9 @@ struct hadronnucleicorrelation {
770780
771781 Pair->ResetPair ();
772782
783+ j++;
773784 } // tracks 2
785+ i++;
774786 } // tracks 1
775787 }
776788
@@ -823,7 +835,9 @@ struct hadronnucleicorrelation {
823835 template <int ME, typename Type>
824836 void mixMCParticlesIdentical (Type const & particles1, Type const & particles2, bool ismatter, bool dorapidity)
825837 {
838+ int i = 0 ;
826839 for (auto const & it1 : particles1) {
840+ int j = 0 ;
827841 for (auto const & it2 : particles2) {
828842 // Calculate Delta-eta Delta-phi (gen)
829843 float deltaEtaGen = it1->eta () - it2->eta ();
@@ -833,6 +847,11 @@ struct hadronnucleicorrelation {
833847 deltaEtaGen = deltaRapGen;
834848 }
835849
850+ if (j <= i)
851+ continue ;
852+ if (it1->globalIndex () == it1->globalIndex ())
853+ continue ;
854+
836855 if (!ME && std::abs (deltaPhiGen) < 0.0001 && std::abs (deltaEtaGen) < 0.0001 ) {
837856 continue ;
838857 }
@@ -854,7 +873,9 @@ struct hadronnucleicorrelation {
854873 }
855874 }
856875 }
876+ j++;
857877 }
878+ i++;
858879 }
859880 }
860881
@@ -954,7 +975,8 @@ struct hadronnucleicorrelation {
954975 if (isAntiDe) {
955976 selectedtracks_antid[track.singleCollSelId ()].push_back (std::make_shared<decltype (track)>(track));
956977 if (mode == 0 || mode == 2 ) {
957- registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_antideuteron->Interpolate (track.pt (), track.eta ()));
978+ if (docorrection)
979+ registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_antideuteron->Interpolate (track.pt (), track.eta ()));
958980 }
959981
960982 if (doQA) {
@@ -968,7 +990,8 @@ struct hadronnucleicorrelation {
968990 selectedtracks_d[track.singleCollSelId ()].push_back (std::make_shared<decltype (track)>(track));
969991
970992 if (mode == 1 || mode == 3 ) {
971- registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_deuteron->Interpolate (track.pt (), track.eta ()));
993+ if (docorrection)
994+ registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_deuteron->Interpolate (track.pt (), track.eta ()));
972995 }
973996
974997 if (doQA) {
@@ -984,7 +1007,8 @@ struct hadronnucleicorrelation {
9841007 selectedtracks_p[track.singleCollSelId ()].push_back (std::make_shared<decltype (track)>(track));
9851008
9861009 if (mode == 6 || mode == 7 ) {
987- registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_proton->Interpolate (track.pt (), track.eta ()));
1010+ if (docorrection)
1011+ registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_proton->Interpolate (track.pt (), track.eta ()));
9881012 }
9891013
9901014 if (doQA) {
@@ -997,7 +1021,8 @@ struct hadronnucleicorrelation {
9971021 selectedtracks_antip[track.singleCollSelId ()].push_back (std::make_shared<decltype (track)>(track));
9981022
9991023 if (mode == 4 || mode == 5 ) {
1000- registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_antiproton->Interpolate (track.pt (), track.eta ()));
1024+ if (docorrection)
1025+ registry.fill (HIST (" hNtrig_total" ), track.pt (), hEffpTEta_antiproton->Interpolate (track.pt (), track.eta ()));
10011026 }
10021027
10031028 if (doQA) {
@@ -1049,6 +1074,54 @@ struct hadronnucleicorrelation {
10491074
10501075 Pair->SetMagField1 (collision.magField ());
10511076 Pair->SetMagField2 (collision.magField ());
1077+
1078+ if (mode == 0 &&
1079+ selectedtracks_antid.find (collision.globalIndex ()) != selectedtracks_antid.end () &&
1080+ selectedtracks_antip.find (collision.globalIndex ()) != selectedtracks_antip.end ()) {
1081+ mixTracks<0 >(selectedtracks_antid[collision.globalIndex ()], selectedtracks_antip[collision.globalIndex ()], 0 , dorapidity); // mixing SE
1082+ }
1083+
1084+ if (mode == 1 &&
1085+ selectedtracks_d.find (collision.globalIndex ()) != selectedtracks_d.end () &&
1086+ selectedtracks_p.find (collision.globalIndex ()) != selectedtracks_p.end ()) {
1087+ mixTracks<0 >(selectedtracks_d[collision.globalIndex ()], selectedtracks_p[collision.globalIndex ()], 0 , dorapidity); // mixing SE
1088+ }
1089+
1090+ if (mode == 2 &&
1091+ selectedtracks_antid.find (collision.globalIndex ()) != selectedtracks_antid.end () &&
1092+ selectedtracks_p.find (collision.globalIndex ()) != selectedtracks_p.end ()) {
1093+ mixTracks<0 >(selectedtracks_antid[collision.globalIndex ()], selectedtracks_p[collision.globalIndex ()], 0 , dorapidity); // mixing SE
1094+ }
1095+
1096+ if (mode == 3 &&
1097+ selectedtracks_d.find (collision.globalIndex ()) != selectedtracks_d.end () &&
1098+ selectedtracks_antip.find (collision.globalIndex ()) != selectedtracks_antip.end ()) {
1099+ mixTracks<0 >(selectedtracks_d[collision.globalIndex ()], selectedtracks_antip[collision.globalIndex ()], 0 , dorapidity); // mixing SE
1100+ }
1101+
1102+ if (mode == 4 &&
1103+ selectedtracks_antip.find (collision.globalIndex ()) != selectedtracks_antip.end () &&
1104+ selectedtracks_p.find (collision.globalIndex ()) != selectedtracks_p.end ()) {
1105+ mixTracks<0 >(selectedtracks_antip[collision.globalIndex ()], selectedtracks_p[collision.globalIndex ()], 0 , dorapidity); // mixing SE
1106+ }
1107+
1108+ if (mode == 5 &&
1109+ selectedtracks_antip.find (collision.globalIndex ()) != selectedtracks_antip.end () &&
1110+ selectedtracks_antip.find (collision.globalIndex ()) != selectedtracks_antip.end ()) {
1111+ mixTracks<0 >(selectedtracks_antip[collision.globalIndex ()], selectedtracks_antip[collision.globalIndex ()], 1 , dorapidity); // mixing SE
1112+ }
1113+
1114+ if (mode == 6 &&
1115+ selectedtracks_p.find (collision.globalIndex ()) != selectedtracks_p.end () &&
1116+ selectedtracks_p.find (collision.globalIndex ()) != selectedtracks_p.end ()) {
1117+ mixTracks<0 >(selectedtracks_p[collision.globalIndex ()], selectedtracks_p[collision.globalIndex ()], 1 , dorapidity); // mixing SE
1118+ }
1119+
1120+ if (mode == 7 &&
1121+ selectedtracks_p.find (collision.globalIndex ()) != selectedtracks_p.end () &&
1122+ selectedtracks_antip.find (collision.globalIndex ()) != selectedtracks_antip.end ()) {
1123+ mixTracks<0 >(selectedtracks_p[collision.globalIndex ()], selectedtracks_antip[collision.globalIndex ()], 0 , dorapidity); // mixing SE
1124+ }
10521125 }
10531126
10541127 if (mode == 0 && !mixbins_antid.empty ()) {
@@ -1062,9 +1135,9 @@ struct hadronnucleicorrelation {
10621135
10631136 auto col1 = value[indx1];
10641137
1065- if (selectedtracks_antip.find (col1->index ()) != selectedtracks_antip.end ()) {
1138+ /* if (selectedtracks_antip.find(col1->index()) != selectedtracks_antip.end()) {
10661139 mixTracks<0>(selectedtracks_antid[col1->index()], selectedtracks_antip[col1->index()], 0, dorapidity); // mixing SE
1067- }
1140+ }*/
10681141
10691142 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
10701143
@@ -1093,9 +1166,9 @@ struct hadronnucleicorrelation {
10931166
10941167 auto col1 = value[indx1];
10951168
1096- if (selectedtracks_p.find (col1->index ()) != selectedtracks_p.end ()) {
1169+ /* if (selectedtracks_p.find(col1->index()) != selectedtracks_p.end()) {
10971170 mixTracks<0>(selectedtracks_d[col1->index()], selectedtracks_p[col1->index()], 0, dorapidity); // mixing SE
1098- }
1171+ }*/
10991172
11001173 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
11011174
@@ -1124,9 +1197,9 @@ struct hadronnucleicorrelation {
11241197
11251198 auto col1 = value[indx1];
11261199
1127- if (selectedtracks_p.find (col1->index ()) != selectedtracks_p.end ()) {
1200+ /* if (selectedtracks_p.find(col1->index()) != selectedtracks_p.end()) {
11281201 mixTracks<0>(selectedtracks_antid[col1->index()], selectedtracks_p[col1->index()], 0, dorapidity); // mixing SE
1129- }
1202+ }*/
11301203
11311204 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
11321205
@@ -1155,9 +1228,9 @@ struct hadronnucleicorrelation {
11551228
11561229 auto col1 = value[indx1];
11571230
1158- if (selectedtracks_antip.find (col1->index ()) != selectedtracks_antip.end ()) {
1231+ /* if (selectedtracks_antip.find(col1->index()) != selectedtracks_antip.end()) {
11591232 mixTracks<0>(selectedtracks_d[col1->index()], selectedtracks_antip[col1->index()], 0, dorapidity); // mixing SE
1160- }
1233+ }*/
11611234
11621235 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
11631236
@@ -1186,9 +1259,9 @@ struct hadronnucleicorrelation {
11861259
11871260 auto col1 = value[indx1];
11881261
1189- if (selectedtracks_p.find (col1->index ()) != selectedtracks_p.end ()) {
1262+ /* if (selectedtracks_p.find(col1->index()) != selectedtracks_p.end()) {
11901263 mixTracks<0>(selectedtracks_antip[col1->index()], selectedtracks_p[col1->index()], 0, dorapidity); // mixing SE
1191- }
1264+ }*/
11921265
11931266 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
11941267
@@ -1217,9 +1290,9 @@ struct hadronnucleicorrelation {
12171290
12181291 auto col1 = value[indx1];
12191292
1220- if (selectedtracks_antip.find (col1->index ()) != selectedtracks_antip.end ()) {
1293+ /* if (selectedtracks_antip.find(col1->index()) != selectedtracks_antip.end()) {
12211294 mixTracks<0>(selectedtracks_antip[col1->index()], selectedtracks_antip[col1->index()], 1, dorapidity); // mixing SE
1222- }
1295+ }*/
12231296
12241297 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
12251298
@@ -1248,9 +1321,9 @@ struct hadronnucleicorrelation {
12481321
12491322 auto col1 = value[indx1];
12501323
1251- if (selectedtracks_p.find (col1->index ()) != selectedtracks_p.end ()) {
1324+ /* if (selectedtracks_p.find(col1->index()) != selectedtracks_p.end()) {
12521325 mixTracks<0>(selectedtracks_p[col1->index()], selectedtracks_p[col1->index()], 1, dorapidity); // mixing SE
1253- }
1326+ }*/
12541327
12551328 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
12561329
@@ -1279,9 +1352,9 @@ struct hadronnucleicorrelation {
12791352
12801353 auto col1 = value[indx1];
12811354
1282- if (selectedtracks_antip.find (col1->index ()) != selectedtracks_antip.end ()) {
1355+ /* if (selectedtracks_antip.find(col1->index()) != selectedtracks_antip.end()) {
12831356 mixTracks<0>(selectedtracks_p[col1->index()], selectedtracks_antip[col1->index()], 0, dorapidity); // mixing SE
1284- }
1357+ }*/
12851358
12861359 for (int indx2 = 0 ; indx2 < EvPerBin; indx2++) { // nested loop for all the combinations of collisions in a chosen mult/vertex bin
12871360
0 commit comments