Skip to content
Open
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
5a0026b
resorted MC
miedema-11 Oct 23, 2025
c88abbd
modify process switch
miedema-11 Dec 1, 2025
43f7419
decrease log output
miedema-11 Dec 5, 2025
fba50da
decrease more log
miedema-11 Dec 8, 2025
b31d538
Merge branch 'master' into master
miedema-11 Dec 9, 2025
a85669d
add default cut
miedema-11 Jan 17, 2026
1d80ce7
Merge branch 'master' of github.com:miedema-11/O2Physics
miedema-11 Jan 17, 2026
01bc036
Merge branch 'master' into master
miedema-11 Jan 19, 2026
94b3040
remove tpc cluster
miedema-11 Jan 25, 2026
c8eddc1
Merge branch 'master' of github.com:miedema-11/O2Physics
miedema-11 Jan 25, 2026
b30fcfd
Merge branch 'master' into master
miedema-11 Jan 25, 2026
de81db0
Remove unused variable pt2 from flowCorrelationsUpc.cxx
miedema-11 Jan 26, 2026
b5f637d
fix gapside selection
miedema-11 Feb 14, 2026
62553da
Merge branch 'master' into master
miedema-11 Feb 15, 2026
8f12dfc
fix htrackcount issue
miedema-11 Feb 17, 2026
3ba4626
Merge branch 'master' of github.com:miedema-11/O2Physics
miedema-11 Feb 17, 2026
8a8c6d4
Merge branch 'master' into master
miedema-11 Feb 17, 2026
53a6db3
Merge branch 'master' of github.com:miedema-11/O2Physics
miedema-11 Feb 21, 2026
eaae55b
refix htrackcount error
miedema-11 Feb 21, 2026
3134dd3
add Nch_vs_zVtx
miedema-11 Feb 25, 2026
26f2740
Merge branch 'master' of github.com:miedema-11/O2Physics
miedema-11 Feb 25, 2026
bac658d
Merge branch 'master' of github.com:miedema-11/O2Physics
miedema-11 Feb 25, 2026
d0c22bc
filtered table
miedema-11 Mar 3, 2026
0130ce5
filtered truegapside
miedema-11 Mar 3, 2026
0445012
filter Nch
miedema-11 Mar 4, 2026
b6a8437
simplified filter
miedema-11 Mar 11, 2026
0130c1e
Merge branch 'master' into master
miedema-11 Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 60 additions & 30 deletions PWGUD/Tasks/flowCorrelationsUpc.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ using namespace o2::framework::expressions;

struct CalcNchUpc {
O2_DEFINE_CONFIGURABLE(cfgZVtxCut, float, 10.0f, "Accepted z-vertex range")
O2_DEFINE_CONFIGURABLE(cfgPtCutMin, float, 0.2f, "minimum accepted track pT")
O2_DEFINE_CONFIGURABLE(cfgPtCutMin, float, 0.1f, "minimum accepted track pT")
O2_DEFINE_CONFIGURABLE(cfgPtCutMax, float, 10.0f, "maximum accepted track pT")
O2_DEFINE_CONFIGURABLE(cfgEtaCut, float, 0.8f, "Eta cut")
O2_DEFINE_CONFIGURABLE(cfgEtaCut, float, 0.9f, "Eta cut")
O2_DEFINE_CONFIGURABLE(cfgMinMixEventNum, int, 5, "Minimum number of events to mix")

// Added UPC Cuts
Expand All @@ -89,18 +89,25 @@ struct CalcNchUpc {
{
AxisSpec axisNch = {100, 0, 100};
AxisSpec axisVrtx = {10, -10, 10};
AxisSpec axisgap = {12, -6, 6};
// AxisSpec axisgap = {12, -6, 6};
// std::vector<AxisSpec> trueGapBins = {-2, -1, 0, 1, 2, 3};
// AxisSpec axisgap = {trueGapBins, "true gap side"};

std::vector<double> binEdges = {-1.5, -0.5, 0.5, 1.5, 2.5, 3.5};
AxisSpec axisgap = {binEdges, "true gap side"};
registry.add("truegap", "truegap", {HistType::kTH1D, {axisgap}});

registry.add("Ncharge", "N_{charge}", {HistType::kTH1D, {axisNch}});
registry.add("zVtx_all", "zVtx_all", {HistType::kTH1D, {axisVrtx}});
registry.add("Nch_vs_zVtx", "Nch vs zVtx", {HistType::kTH2D, {axisVrtx, axisNch}});
registry.add("truegap", "truegap", {HistType::kTH1D, {axisgap}});
// registry.add("truegap", "truegap", {HistType::kTH1D, {axisgap}});
}

void process(UDCollisionsFull::iterator const& collision, UdTracksFull const& tracks)
{
multiplicityNch(tracks.size());
truegapside(sgSelector.trueGap(collision, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC));
// LOG(info) << "truegapside=" << sgSelector.trueGap(collision, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
registry.fill(HIST("Ncharge"), tracks.size());
registry.fill(HIST("truegap"), sgSelector.trueGap(collision, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC));
registry.fill(HIST("zVtx_all"), collision.posZ());
Expand All @@ -113,7 +120,7 @@ struct FlowCorrelationsUpc {
O2_DEFINE_CONFIGURABLE(cfgIfVertex, bool, false, "choose vertex or not")
O2_DEFINE_CONFIGURABLE(cfgPtCutMin, float, 0.1f, "minimum accepted track pT")
O2_DEFINE_CONFIGURABLE(cfgPtCutMax, float, 10.0f, "maximum accepted track pT")
O2_DEFINE_CONFIGURABLE(cfgEtaCut, float, 0.8f, "Eta cut")
O2_DEFINE_CONFIGURABLE(cfgEtaCut, float, 0.9f, "Eta cut")
O2_DEFINE_CONFIGURABLE(cfgMinMixEventNum, int, 5, "Minimum number of events to mix")
O2_DEFINE_CONFIGURABLE(cfgMinMult, int, 0, "Minimum multiplicity for collision")
O2_DEFINE_CONFIGURABLE(cfgMaxMult, int, 10, "Maximum multiplicity for collision")
Expand All @@ -124,7 +131,7 @@ struct FlowCorrelationsUpc {
O2_DEFINE_CONFIGURABLE(cfgRadiusLow, float, 0.8, "Low radius for merging cut")
O2_DEFINE_CONFIGURABLE(cfgRadiusHigh, float, 2.5, "High radius for merging cut")
O2_DEFINE_CONFIGURABLE(cfgIsGoodItsLayers, bool, false, "whether choose itslayers")
O2_DEFINE_CONFIGURABLE(cfgGapSide, int, 0, "0: gapside A;1:C")
O2_DEFINE_CONFIGURABLE(cfgGapSide, int, 1, "0: gapside A;1:C")
O2_DEFINE_CONFIGURABLE(cfgGapSideMerge, bool, false, "whether merge A and C side together")
O2_DEFINE_CONFIGURABLE(cfgDcaxy, bool, true, "choose dcaxy")
O2_DEFINE_CONFIGURABLE(cfgDcaz, bool, false, "choose dcaz")
Expand Down Expand Up @@ -161,14 +168,22 @@ struct FlowCorrelationsUpc {

// make the filters and cuts.
Filter trackFilter = (aod::udtrack::isPVContributor == true);
Filter collisionFilter = (((cfgGapSideMerge == true && (aod::udcollision::gapSide == (uint8_t)1 || aod::udcollision::gapSide == (uint8_t)0)) || aod::udcollision::gapSide == (uint8_t)cfgGapSide) && (cfgIfVertex == false || aod::collision::posZ < cfgZVtxCut) && (aod::udcollision::occupancyInTime > 0 && aod::udcollision::occupancyInTime < cfgCutOccupancyHigh) && ((cfgGapSideMerge == true && (aod::flowcorrupc::truegapside == 0 || aod::flowcorrupc::truegapside == 1)) || aod::flowcorrupc::truegapside == cfgGapSide) && (aod::flowcorrupc::multiplicity > cfgMinMult) && (aod::flowcorrupc::multiplicity < cfgMaxMult));
Filter collisionFilter = (aod::udcollision::gapSide == (uint8_t)cfgGapSide && (cfgIfVertex == false || aod::collision::posZ < cfgZVtxCut) && (aod::udcollision::occupancyInTime > 0 && aod::udcollision::occupancyInTime < cfgCutOccupancyHigh) && aod::flowcorrupc::truegapside == 1 && (aod::flowcorrupc::multiplicity > cfgMinMult) && (aod::flowcorrupc::multiplicity < cfgMaxMult));
// Filter collisionFilter = (((cfgGapSideMerge == true && (aod::udcollision::gapSide == (uint8_t)1 || aod::udcollision::gapSide == (uint8_t)0)) || aod::udcollision::gapSide == (uint8_t)cfgGapSide) && (cfgIfVertex == false || aod::collision::posZ < cfgZVtxCut) && (aod::udcollision::occupancyInTime > 0 && aod::udcollision::occupancyInTime < cfgCutOccupancyHigh) && ((cfgGapSideMerge == true && (aod::flowcorrupc::truegapside == 0 || aod::flowcorrupc::truegapside == 1)) || aod::flowcorrupc::truegapside == cfgGapSide) && (aod::flowcorrupc::multiplicity > cfgMinMult) && (aod::flowcorrupc::multiplicity < cfgMaxMult));
// Filter trackFilter = (aod::udtrack::isPVContributor == true);
// Filter collisionFilter = ((aod::flowcorrupc::multiplicity > cfgMinMult) && (aod::flowcorrupc::multiplicity < cfgMaxMult) && (aod::udcollision::gapSide == (uint8_t) 1) && (aod::flowcorrupc::truegapside == 1) && (aod::udcollision::occupancyInTime > 0 && aod::udcollision::occupancyInTime < cfgCutOccupancyHigh));
// Filter collisionFilter = (nabs(aod::collision::posZ) < cfgZVtxCut) && (aod::flowcorrupc::multiplicity) > cfgMinMult && (aod::flowcorrupc::multiplicity) < cfgMaxMult && (aod::evsel::sel8) == true;
// Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t) true));

using UdTracks = soa::Filtered<soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksPID>>;
using UdTracksFull = soa::Filtered<soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA>>;

using UDCollisionsFull = soa::Filtered<soa::Join<aod::UDCollisions, aod::SGCollisions, aod::UDCollisionsSels, aod::UDZdcsReduced, aod::Multiplicity, aod::Truegapside, aod::UDCollisionSelExtras>>;

// using UdTracks = soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksPID>;
// using UdTracksFull = soa::Join<aod::UDTracks, aod::UDTracksPID, aod::UDTracksExtra, aod::UDTracksFlags, aod::UDTracksDCA>;
// using UDCollisionsFull = soa::Join<aod::UDCollisions, aod::SGCollisions, aod::UDCollisionsSels, aod::UDZdcsReduced, aod::Multiplicity, aod::Truegapside, aod::UDCollisionSelExtra>;

// Define the outputs
OutputObj<CorrelationContainer> same{Form("sameEvent_%i_%i", static_cast<int>(cfgMinMult), static_cast<int>(cfgMaxMult))};
OutputObj<CorrelationContainer> mixed{Form("mixedEvent_%i_%i", static_cast<int>(cfgMinMult), static_cast<int>(cfgMaxMult))};
Expand All @@ -177,6 +192,8 @@ struct FlowCorrelationsUpc {

void init(InitContext&)
{
LOG(info) << "cfgGapSide = " << cfgGapSide;
LOG(info) << "cfgGapSide value type: " << typeid(cfgGapSide).name();
LOGF(info, "Starting init");
// Make histograms to check the distributions after cuts
registry.add("deltaEta_deltaPhi_same", "", {HistType::kTH2D, {axisDeltaPhi, axisDeltaEta}}); // check to see the delta eta and delta phi distribution
Expand All @@ -190,7 +207,11 @@ struct FlowCorrelationsUpc {

registry.add("Trig_hist", "", {HistType::kTHnSparseF, {{axisSample, axisVertex, axisPtTrigger}}});

registry.add("eventcount", "bin", {HistType::kTH1F, {{10, 0, 10, "bin"}}}); // histogram to see how many events are in the same and mixed event
registry.add("eventcount_same", "bin", {HistType::kTH1F, {{10, 0, 10, "bin"}}}); // histogram to see how many events are in the same and mixed event
registry.add("eventcount_mixed", "bin", {HistType::kTH1F, {{10, 0, 10, "bin"}}}); // histogram to see how many events are in the same and mixed event

registry.add("trackcount_same", "bin", {HistType::kTH1F, {{10, 0, 10, "bin"}}}); // histogram to see how many tracks are in the same and mixed event
registry.add("trackcount_mixed", "bin", {HistType::kTH1F, {{10, 0, 10, "bin"}}}); // histogram to see how many tracks are in the same and mixed event

std::vector<AxisSpec> corrAxis = {{axisSample, "Sample"},
{axisVertex, "z-vtx (cm)"},
Expand Down Expand Up @@ -352,23 +373,26 @@ struct FlowCorrelationsUpc {

void processSame(UDCollisionsFull::iterator const& collision, UdTracksFull const& tracks)
{
LOG(info) << "Event passed filter: truegapside=" << collision.truegapside();
// if (tracks.size() < cfgMinMult || tracks.size() > cfgMaxMult) {
// return;
// }
// if (cfgIsGoodItsLayers && collision.trs() == 0) {
// registry.fill(HIST("eventcount_same"), 0.5);
// if(collision.gapSide() !=0){
// return;
// }

registry.fill(HIST("eventcount_same"), 1.5);
// if (cfgGapSideMerge) {
// int gapSide = collision.gapSide();
// if (gapSide != 0 && gapSide != 1) {
// return;
// }
// int trueGapSide = sgSelector.trueGap(collision, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
// int gapSide1 = trueGapSide;
// if (gapSide1 != 0 && gapSide1 != 1) {
// return;
// }
// int trueGapSide = sgSelector.trueGap(collision, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
// int gapSide1 = trueGapSide;
// if (gapSide1 != 0) {
// return;
// }
registry.fill(HIST("eventcount_same"), 2.5);
// }
// if (!cfgGapSideMerge) {
// int trueGapSide = sgSelector.trueGap(collision, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
Expand All @@ -385,9 +409,10 @@ struct FlowCorrelationsUpc {
// if (cfgEvSelOccupancy && (occupancy < cfgCutOccupancyLow || occupancy > cfgCutOccupancyHigh)) {
// return;
// }
registry.fill(HIST("eventcount_same"), 3.5);
int runIndex = collision.runNumber();

registry.fill(HIST("eventcount"), SameEvent); // because its same event i put it in the 1 bin
// registry.fill(HIST("eventcount"), SameEvent); // because its same event i put it in the 1 bin
registry.fill(HIST("Nch_vs_zVtx"), collision.posZ(), tracks.size());
fillYield(collision, tracks);
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(tracks, tracks, collision.posZ(), SameEvent, runIndex); // fill the SE histogram and Sparse
Expand All @@ -408,14 +433,18 @@ struct FlowCorrelationsUpc {
Pair<UDCollisionsFull, UdTracksFull, UdTracksFull, MixedBinning> pairs{binningOnVtxAndMult, cfgMinMixEventNum, -1, collisions, tracksTuple, &cache}; // -1 is the number of the bin to skip

for (auto const& [collision1, tracks1, collision2, tracks2] : pairs) {
registry.fill(HIST("eventcount"), MixedEvent); // fill the mixed event in the 3 bin
// registry.fill(HIST("eventcount"), MixedEvent); // fill the mixed event in the 3 bin
// if (tracks1.size() < cfgMinMult || tracks1.size() > cfgMaxMult || tracks2.size() < cfgMinMult || tracks2.size() > cfgMaxMult) {
// continue;
// }
// registry.fill(HIST("eventcount"), 4.5);
registry.fill(HIST("eventcount_same"), 4.5);
// if (cfgIsGoodItsLayers && (collision1.trs() == 0 || collision2.trs() == 0)) {
// continue;
// }
// if(collision1.gapSide() != 0 || collision2.gapSide() != 0){
// continue;
// }
registry.fill(HIST("eventcount_same"), 5.5);
// registry.fill(HIST("eventcount"), 5.5);
// if (cfgGapSideMerge) {
// int gapSide = collision1.gapSide();
Expand All @@ -429,22 +458,23 @@ struct FlowCorrelationsUpc {
// }
// }
// if (!cfgGapSideMerge) {
// int trueGapSide = sgSelector.trueGap(collision1, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
// int gapSide1 = trueGapSide;
// if (gapSide1 != cfgGapSide) {
// continue;
// }
// int trueGapSide = sgSelector.trueGap(collision1, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
// int gapSide1 = trueGapSide;
// if (gapSide1 != 0) {
// continue;
// }
// }
// if (cfgGapSideMerge) {
// int gapSide = collision2.gapSide();
// if (gapSide != 0 && gapSide != 1) {
// continue;
// }
// int trueGapSide = sgSelector.trueGap(collision2, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
// int gapSide2 = trueGapSide;
// if (gapSide2 != 0 && gapSide2 != 1) {
// continue;
// }
// trueGapSide = sgSelector.trueGap(collision2, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
// int gapSide2 = trueGapSide;
// if (gapSide2 != 0) {
// continue;
// }
registry.fill(HIST("eventcount_same"), 6.5);
// }
// if (!cfgGapSideMerge) {
// int trueGapSide = sgSelector.trueGap(collision2, cfgCutFV0, cfgCutFT0A, cfgCutFT0C, cfgCutZDC);
Expand All @@ -453,7 +483,7 @@ struct FlowCorrelationsUpc {
// continue;
// }
// }
registry.fill(HIST("eventcount"), 6.5);
// registry.fill(HIST("eventcount"), 6.5);
// float vtxz = collision1.posZ();
// if (cfgIfVertex && abs(vtxz) > cfgZVtxCut) {
// continue;
Expand All @@ -470,7 +500,7 @@ struct FlowCorrelationsUpc {
// if (cfgEvSelOccupancy && (occupancy < cfgCutOccupancyLow || occupancy > cfgCutOccupancyHigh)) {
// continue;
// }
registry.fill(HIST("eventcount"), MixedFinal);
registry.fill(HIST("eventcount_same"), 7.5);
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(tracks1, tracks2, collision1.posZ(), MixedEvent, collision1.runNumber()); // fill the ME histogram and Sparse
}
}
Expand Down
Loading