Skip to content

Commit 0104e93

Browse files
committed
improving correlation analysis
1 parent 385beee commit 0104e93

File tree

1 file changed

+99
-43
lines changed

1 file changed

+99
-43
lines changed

PWGUD/Tasks/upcPhotonuclearAnalysisJMG.cxx

Lines changed: 99 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,21 @@ namespace tree
4747
DECLARE_SOA_COLUMN(PtSideA, ptSideA, std::vector<float>);
4848
DECLARE_SOA_COLUMN(RapSideA, rapSideA, std::vector<float>);
4949
DECLARE_SOA_COLUMN(PhiSideA, phiSideA, std::vector<float>);
50+
DECLARE_SOA_COLUMN(TPCSignalSideA, tpcSignalSideA, std::vector<float>);
51+
DECLARE_SOA_COLUMN(TOFSignalSideA, tofSignalSideA, std::vector<float>);
52+
DECLARE_SOA_COLUMN(TPCNSigmaPiSideA, tpcNSigmaPiSideA, std::vector<float>);
53+
DECLARE_SOA_COLUMN(TOFNSigmaPiSideA, tofNSigmaPiSideA, std::vector<float>);
54+
DECLARE_SOA_COLUMN(TPCNSigmaKaSideA, tpcNSigmaKaSideA, std::vector<float>);
55+
DECLARE_SOA_COLUMN(TOFNSigmaKaSideA, tofNSigmaKaSideA, std::vector<float>);
5056
DECLARE_SOA_COLUMN(PtSideC, ptSideC, std::vector<float>);
5157
DECLARE_SOA_COLUMN(RapSideC, rapSideC, std::vector<float>);
5258
DECLARE_SOA_COLUMN(PhiSideC, phiSideC, std::vector<float>);
59+
DECLARE_SOA_COLUMN(TPCSignalSideC, tpcSignalSideC, std::vector<float>);
60+
DECLARE_SOA_COLUMN(TOFSignalSideC, tofSignalSideC, std::vector<float>);
61+
DECLARE_SOA_COLUMN(TPCNSigmaPiSideC, tpcNSigmaPiSideC, std::vector<float>);
62+
DECLARE_SOA_COLUMN(TOFNSigmaPiSideC, tofNSigmaPiSideC, std::vector<float>);
63+
DECLARE_SOA_COLUMN(TPCNSigmaKaSideC, tpcNSigmaKaSideC, std::vector<float>);
64+
DECLARE_SOA_COLUMN(TOFNSigmaKaSideC, tofNSigmaKaSideC, std::vector<float>);
5365
DECLARE_SOA_COLUMN(NchSideA, nchSideA, int);
5466
DECLARE_SOA_COLUMN(MultiplicitySideA, multiplicitySideA, int);
5567
DECLARE_SOA_COLUMN(NchSideC, nchSideC, int);
@@ -59,9 +71,21 @@ DECLARE_SOA_TABLE(TREE, "AOD", "Tree",
5971
tree::PtSideA,
6072
tree::RapSideA,
6173
tree::PhiSideA,
74+
tree::TPCSignalSideA,
75+
tree::TOFSignalSideA,
76+
tree::TPCNSigmaPiSideA,
77+
tree::TOFNSigmaPiSideA,
78+
tree::TPCNSigmaKaSideA,
79+
tree::TOFNSigmaKaSideA,
6280
tree::PtSideC,
6381
tree::RapSideC,
6482
tree::PhiSideC,
83+
tree::TPCSignalSideC,
84+
tree::TOFSignalSideC,
85+
tree::TPCNSigmaPiSideC,
86+
tree::TOFNSigmaPiSideC,
87+
tree::TPCNSigmaKaSideC,
88+
tree::TOFNSigmaKaSideC,
6589
tree::NchSideA,
6690
tree::MultiplicitySideA,
6791
tree::NchSideC,
@@ -127,11 +151,13 @@ struct upcPhotonuclearAnalysisJMG {
127151
Filter collisionZNTimeFilter = nabs(aod::udzdc::timeZNA) < myTimeZNACut && nabs(aod::udzdc::timeZNC) < myTimeZNCCut;
128152

129153
using FullSGUDCollision = soa::Filtered<soa::Join<aod::UDCollisions, aod::UDCollisionsSels, aod::SGCollisions, aod::UDZdcsReduced>>;
130-
using FullUDTracks = soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksDCA, aod::UDTracksFlags>;
154+
using FullUDTracks = soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksPID, aod::UDTracksDCA, aod::UDTracksFlags>;
131155

132156
// Output definitions
133-
OutputObj<CorrelationContainer> same{"sameEvent"};
134-
OutputObj<CorrelationContainer> mixed{"mixedEvent"};
157+
OutputObj<CorrelationContainer> sameGapSideA{"sameEventGapSideA"};
158+
OutputObj<CorrelationContainer> mixedGapSideA{"mixedEventGapSideA"};
159+
OutputObj<CorrelationContainer> sameGapSideC{"sameEventGapSideC"};
160+
OutputObj<CorrelationContainer> mixedGapSideC{"mixedEventGapSideC"};
135161

136162
UPCPairCuts mPairCuts;
137163
bool doPairCuts = false;
@@ -175,6 +201,7 @@ struct upcPhotonuclearAnalysisJMG {
175201
histos.add("Tracks/SGsideA/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi});
176202
histos.add("Tracks/SGsideA/hTrackEta", "#it{#eta} distribution; #it{#eta}; counts", kTH1F, {axisEta});
177203
histos.add("Tracks/SGsideA/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal});
204+
histos.add("Tracks/SGsideA/hTrackTOFSignnalP", "#it{TOF signal vs p}; #it{p*charge}; #it{TOF signal}", kTH2F, {axisP, axisTPCSignal});
178205
histos.add("Tracks/SGsideA/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls});
179206
histos.add("Tracks/SGsideA/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls});
180207
histos.add("Tracks/SGsideA/hTrackNClsCrossedRowsOverNClsFindable", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin});
@@ -205,6 +232,7 @@ struct upcPhotonuclearAnalysisJMG {
205232
histos.add("Tracks/SGsideC/hTrackPhi", "#it{#phi} distribution; #it{#phi}; counts", kTH1F, {axisPhi});
206233
histos.add("Tracks/SGsideC/hTrackEta", "#it{#eta} distribution; #it{#eta}; counts", kTH1F, {axisEta});
207234
histos.add("Tracks/SGsideC/hTrackTPCSignnalP", "#it{TPC dE/dx vs p}; #it{p*charge}; #it{TPC dE/dx}", kTH2F, {axisP, axisTPCSignal});
235+
histos.add("Tracks/SGsideC/hTrackTOFSignnalP", "#it{TOF signal vs p}; #it{p*charge}; #it{TOF signal}", kTH2F, {axisP, axisTPCSignal});
208236
histos.add("Tracks/SGsideC/hTrackITSNCls", "#it{N Clusters ITS} distribution; #it{N Clusters ITS}; counts", kTH1F, {axisNCls});
209237
histos.add("Tracks/SGsideC/hTrackITSChi2NCls", "#it{N Clusters Chi2 ITS} distribution; #it{N Clusters Chi2 ITS}; counts", kTH1F, {axisChi2NCls});
210238
histos.add("Tracks/SGsideC/hTrackNClsCrossedRowsOverNClsFindable", "#it{NClsCrossedRows/FindableNCls} distribution in TPC; #it{NClsCrossedRows/FindableNCls}; counts", kTH1F, {axisTPCNClsCrossedRowsMin});
@@ -240,12 +268,14 @@ struct upcPhotonuclearAnalysisJMG {
240268
{axisEtaEfficiency, "#eta"},
241269
{axisPtEfficiency, "p_{T} (GeV/c)"},
242270
{axisVertexEfficiency, "z-vtx (cm)"}};
243-
same.setObject(new CorrelationContainer("sameEvent", "sameEvent", corrAxis, effAxis, {}));
244-
mixed.setObject(new CorrelationContainer("mixedEvent", "mixedEvent", corrAxis, effAxis, {}));
271+
sameGapSideA.setObject(new CorrelationContainer("sameEventGapSideA", "sameEventGapSideA", corrAxis, effAxis, {}));
272+
mixedGapSideA.setObject(new CorrelationContainer("mixedEventGapSideA", "mixedEventGapSideA", corrAxis, effAxis, {}));
273+
sameGapSideC.setObject(new CorrelationContainer("sameEventGapSideC", "sameEventGapSideC", corrAxis, effAxis, {}));
274+
mixedGapSideC.setObject(new CorrelationContainer("mixedEventGapSideC", "mixedEventGapSideC", corrAxis, effAxis, {}));
245275
}
246276

247-
std::vector<double> vtxBinsEdges{VARIABLE_WIDTH, -10.0f, -7.0f, -5.0f, -2.0f, 0.0f, 2.0f, 5.0f, 7.0f, 10.0f};
248-
std::vector<double> multBinsEdges{VARIABLE_WIDTH, 0.0f, 50.0f, 400.0f};
277+
std::vector<double> vtxBinsEdges{VARIABLE_WIDTH, -10.0f, -5.0f, 0.0f, 5.0f, 10.0f};
278+
// std::vector<double> multBinsEdges{VARIABLE_WIDTH, 0.0f, 50.0f, 400.0f};
249279
SliceCache cache;
250280

251281
// Binning only on PosZ without multiplicity
@@ -396,8 +426,8 @@ struct upcPhotonuclearAnalysisJMG {
396426
int sgSide = reconstructedCollision.gapSide();
397427
int nTracksCharged = 0;
398428
float sumPt = 0;
399-
std::vector<float> vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA;
400-
std::vector<float> vTrackPtSideC, vTrackEtaSideC, vTrackPhiSideC;
429+
std::vector<float> vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA, vTrackTPCSignalSideA, vTrackTOFSignalSideA, vTrackTPCNSigmaPiSideA, vTrackTOFNSigmaPiSideA, vTrackTPCNSigmaKaSideA, vTrackTOFNSigmaKaSideA;
430+
std::vector<float> vTrackPtSideC, vTrackEtaSideC, vTrackPhiSideC, vTrackTPCSignalSideC, vTrackTOFSignalSideC, vTrackTPCNSigmaPiSideC, vTrackTOFNSigmaPiSideC, vTrackTPCNSigmaKaSideC, vTrackTOFNSigmaKaSideC;
401431
int nTracksChargedSideA(-222), nTracksChargedSideC(-222);
402432
int multiplicitySideA(-222), multiplicitySideC(-222);
403433

@@ -427,9 +457,16 @@ struct upcPhotonuclearAnalysisJMG {
427457
histos.fill(HIST("Tracks/SGsideA/hTrackPhi"), phi(track.px(), track.py()));
428458
histos.fill(HIST("Tracks/SGsideA/hTrackEta"), eta(track.px(), track.py(), track.pz()));
429459
histos.fill(HIST("Tracks/SGsideA/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal());
460+
histos.fill(HIST("Tracks/SGsideA/hTrackTOFSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tofSignal());
430461
vTrackPtSideA.push_back(track.pt());
431462
vTrackEtaSideA.push_back(eta(track.px(), track.py(), track.pz()));
432463
vTrackPhiSideA.push_back(phi(track.px(), track.py()));
464+
vTrackTPCSignalSideA.push_back(track.tpcSignal());
465+
vTrackTOFSignalSideA.push_back(track.tofSignal());
466+
vTrackTPCNSigmaPiSideA.push_back(track.tpcNSigmaPi());
467+
vTrackTOFNSigmaPiSideA.push_back(track.tofNSigmaPi());
468+
vTrackTPCNSigmaKaSideA.push_back(track.tpcNSigmaKa());
469+
vTrackTOFNSigmaKaSideA.push_back(track.tofNSigmaKa());
433470

434471
histos.fill(HIST("Tracks/SGsideA/hTrackITSNCls"), track.itsNCls());
435472
histos.fill(HIST("Tracks/SGsideA/hTrackITSChi2NCls"), track.itsChi2NCl());
@@ -476,9 +513,16 @@ struct upcPhotonuclearAnalysisJMG {
476513
histos.fill(HIST("Tracks/SGsideC/hTrackPhi"), phi(track.px(), track.py()));
477514
histos.fill(HIST("Tracks/SGsideC/hTrackEta"), eta(track.px(), track.py(), track.pz()));
478515
histos.fill(HIST("Tracks/SGsideC/hTrackTPCSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tpcSignal());
516+
histos.fill(HIST("Tracks/SGsideC/hTrackTOFSignnalP"), momentum(track.px(), track.py(), track.pz()) * track.sign(), track.tofSignal());
479517
vTrackPtSideC.push_back(track.pt());
480518
vTrackEtaSideC.push_back(eta(track.px(), track.py(), track.pz()));
481519
vTrackPhiSideC.push_back(phi(track.px(), track.py()));
520+
vTrackTPCSignalSideC.push_back(track.tpcSignal());
521+
vTrackTOFSignalSideC.push_back(track.tofSignal());
522+
vTrackTPCNSigmaPiSideC.push_back(track.tpcNSigmaPi());
523+
vTrackTOFNSigmaPiSideC.push_back(track.tofNSigmaPi());
524+
vTrackTPCNSigmaKaSideC.push_back(track.tpcNSigmaKa());
525+
vTrackTOFNSigmaKaSideC.push_back(track.tofNSigmaKa());
482526

483527
histos.fill(HIST("Tracks/SGsideC/hTrackITSNCls"), track.itsNCls());
484528
histos.fill(HIST("Tracks/SGsideC/hTrackITSChi2NCls"), track.itsChi2NCl());
@@ -504,80 +548,92 @@ struct upcPhotonuclearAnalysisJMG {
504548
return;
505549
break;
506550
}
507-
tree(vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA, vTrackPtSideC, vTrackEtaSideC, vTrackPhiSideC, nTracksChargedSideA, multiplicitySideA, nTracksChargedSideC, multiplicitySideC);
551+
tree(vTrackPtSideA, vTrackEtaSideA, vTrackPhiSideA, vTrackTPCSignalSideA, vTrackTOFSignalSideA, vTrackTPCNSigmaPiSideA, vTrackTOFNSigmaPiSideA, vTrackTPCNSigmaKaSideA, vTrackTOFNSigmaKaSideA, vTrackPtSideC, vTrackEtaSideC, vTrackPhiSideC, vTrackTPCSignalSideA, vTrackTOFSignalSideA, vTrackTPCNSigmaPiSideA, vTrackTOFNSigmaPiSideA, vTrackTPCNSigmaKaSideA, vTrackTOFNSigmaKaSideA, nTracksChargedSideA, multiplicitySideA, nTracksChargedSideC, multiplicitySideC);
508552
// nTracksChargedSideA = nTracksChargedSideC = multiplicitySideA = multiplicitySideC = 0;
509553
}
510554
PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSG, "Process in UD tables", true);
511555

512556
void processSame(FullSGUDCollision::iterator const& reconstructedCollision, FullUDTracks const& reconstructedTracks)
513557
{
514558
int sgSide = reconstructedCollision.gapSide();
559+
float multiplicity = 0;
515560

516-
float multiplicity = reconstructedTracks.size();
517561
switch (sgSide) {
518562
case 0: // gap for side A
519563
if (isCollisionCutSG(reconstructedCollision, 0) == false) {
520564
return;
521565
}
522-
if (fillCollisionUD(same, multiplicity) == false) {
566+
multiplicity = reconstructedTracks.size();
567+
if (fillCollisionUD(sameGapSideA, multiplicity) == false) {
523568
return;
524569
}
525-
LOGF(info, "Filling same events");
570+
LOGF(info, "Filling sameGapSideA events");
526571
histos.fill(HIST("eventcount"), -2);
527572
fillQAUD(reconstructedTracks);
528-
fillCorrelationsUD(same, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ());
573+
fillCorrelationsUD(sameGapSideA, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ());
529574
break;
530575
case 1: // gap for side C
531-
// if (isCollisionCutSG(reconstructedCollision, 1) == false) {
532-
// return;
533-
// }
576+
if (isCollisionCutSG(reconstructedCollision, 1) == false) {
577+
return;
578+
}
579+
multiplicity = reconstructedTracks.size();
580+
if (fillCollisionUD(sameGapSideC, multiplicity) == false) {
581+
return;
582+
}
583+
LOGF(info, "Filling sameGapSideC events");
584+
fillCorrelationsUD(sameGapSideC, reconstructedTracks, reconstructedTracks, multiplicity, reconstructedCollision.posZ());
534585
break;
535586
default:
536587
return;
537588
break;
538589
}
539590
}
540591

541-
PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSame, "Process same event", true);
592+
PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processSame, "Process sameGapSideA event", true);
542593

543594
void processMixed(FullSGUDCollision::iterator const& reconstructedCollision)
544595
{
545-
int sgSide = reconstructedCollision.gapSide();
546-
// int sgSide = 0;
547596

548597
for (auto& [collision1, tracks1, collision2, tracks2] : pairs) {
549598
if (collision1.size() == 0 || collision2.size() == 0) {
550599
LOGF(info, "One or both collisions are empty.");
551600
continue;
552601
}
553-
float multiplicity = tracks1.size();
554-
LOGF(info, "Filling mixed events");
555-
switch (sgSide) {
556-
case 0: // gap for side A
557-
if (isCollisionCutSG(reconstructedCollision, 0) == false) {
558-
return;
559-
}
560-
if (fillCollisionUD(mixed, multiplicity) == false) {
561-
return;
562-
}
563-
// LOGF(info, ">>> Bin of collision: ", bindingOnVtx.getBin({collision1.posZ()}));
564-
// histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ(), collision1.totalFT0AmplitudeC()}));
565-
histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()}));
566-
fillCorrelationsUD(mixed, tracks1, tracks2, multiplicity, collision1.posZ());
567-
break;
568-
case 1: // gap for side C
569-
// if (isCollisionCutSG(reconstructedCollision, 1) == false) {
570-
// return;
571-
// }
572-
break;
573-
default:
602+
603+
float multiplicity = 0;
604+
if (collision1.gapSide() == 0 && collision2.gapSide() == 0) { // gap on side A
605+
if (isCollisionCutSG(collision1, 0) == false && isCollisionCutSG(collision2, 0) == false) {
606+
continue;
607+
}
608+
LOGF(info, "In the pairs loop, gap side A");
609+
multiplicity = tracks1.size();
610+
if (fillCollisionUD(mixedGapSideA, multiplicity) == false) {
611+
return;
612+
}
613+
histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()}));
614+
fillCorrelationsUD(mixedGapSideA, tracks1, tracks2, multiplicity, collision1.posZ());
615+
LOGF(info, "Filling mixedGapSideA events, Gap for side A");
616+
}
617+
618+
if (collision1.gapSide() == 1 && collision2.gapSide() == 1) { // gap on side C
619+
if (isCollisionCutSG(collision1, 1) == false && isCollisionCutSG(collision2, 1) == false) {
620+
continue;
621+
}
622+
LOGF(info, "In the pairs loop, gap side C");
623+
multiplicity = tracks1.size();
624+
if (fillCollisionUD(mixedGapSideC, multiplicity) == false) {
574625
return;
575-
break;
626+
}
627+
histos.fill(HIST("eventcount"), bindingOnVtx.getBin({collision1.posZ()}));
628+
fillCorrelationsUD(mixedGapSideC, tracks1, tracks2, multiplicity, collision1.posZ());
629+
LOGF(info, "Filling mixedGapSideC events, Gap for side C");
630+
} else {
631+
continue;
576632
}
577633
}
578634
}
579635

580-
PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processMixed, "Process mixed events", true);
636+
PROCESS_SWITCH(upcPhotonuclearAnalysisJMG, processMixed, "Process mixedGapSideA events", true);
581637
};
582638

583639
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)