Skip to content

Commit 09bde55

Browse files
authored
[PWGCF] Store different MFT track type info into LRTables (#16493)
1 parent 946353b commit 09bde55

3 files changed

Lines changed: 66 additions & 43 deletions

File tree

PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ DECLARE_SOA_COLUMN(DcaZ, dcaZ, float);
159159
DECLARE_SOA_COLUMN(Pt, pt, float);
160160
DECLARE_SOA_COLUMN(Eta, eta, float);
161161
DECLARE_SOA_COLUMN(Phi, phi, float);
162+
DECLARE_SOA_COLUMN(IsCA, isCA, bool);
163+
DECLARE_SOA_COLUMN(IsReassigned, isReassigned, bool);
162164

163165
enum TrackPid {
164166
kSpCharge,
@@ -226,7 +228,9 @@ DECLARE_SOA_TABLE(LRMftTracks, "AOD", "LRMFTTRACK",
226228
lrcorrtrktable::Phi,
227229
fwdtrack::NClusters,
228230
fwdtrack::BestDCAXY,
229-
fwdtrack::BestDCAZ);
231+
fwdtrack::BestDCAZ,
232+
lrcorrtrktable::IsCA,
233+
lrcorrtrktable::IsReassigned);
230234
using LRMftTrack = LRMftTracks::iterator;
231235

232236
DECLARE_SOA_TABLE(UpcLRMidTracks, "AOD", "UPCLRMIDTRACK",
@@ -281,7 +285,9 @@ DECLARE_SOA_TABLE(UpcLRMftTracks, "AOD", "UPCLRMFTTRACK",
281285
lrcorrtrktable::Phi,
282286
fwdtrack::NClusters,
283287
fwdtrack::BestDCAXY,
284-
fwdtrack::BestDCAZ);
288+
fwdtrack::BestDCAZ,
289+
lrcorrtrktable::IsCA,
290+
lrcorrtrktable::IsReassigned);
285291
using UpcLRMftTrack = UpcLRMftTracks::iterator;
286292
} // namespace o2::aod
287293

PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ using namespace o2::constants::math;
8383
auto static constexpr CintZero = 0;
8484
auto static constexpr KminFt0cCell = 96;
8585
auto static constexpr TotFt0Channels = 208;
86-
AxisSpec axisEvent{15, 0.5, 15.5, "#Event", "EventAxis"};
86+
AxisSpec axisEvent{20, 0.5, 20.5, "#Event", "EventAxis"};
8787
AxisSpec axisTrackSel{10, 0.5, 10.5, "#Track", "TrackAxis"};
8888
auto static constexpr KminCharge = 3.0f;
8989
static constexpr std::string_view species[] = {"Pi", "Ka", "Pr"};
@@ -112,7 +112,9 @@ struct LongrangeMaker {
112112
Configurable<bool> isApplyBestCollIndex{"isApplyBestCollIndex", true, "bestCollIndex"};
113113
Configurable<bool> isrejectFlangeEvent{"isrejectFlangeEvent", false, "At least one channel with -350 TDC < time < -450 TDC"};
114114
Configurable<bool> isApplyNoCollInTimeRangeStandard{"isApplyNoCollInTimeRangeStandard", false, "Enable NoCollInTimeRangeStandard cut"};
115+
Configurable<bool> isApplyNoCollInTimeRangeStrict{"isApplyNoCollInTimeRangeStrict", false, "Enable NoCollInTimeRangeStrict cut"};
115116
Configurable<bool> isApplyNoCollInRofStandard{"isApplyNoCollInRofStandard", false, "Enable NoCollInRofStandard cut"};
117+
Configurable<bool> isApplyNoCollInRofStrict{"isApplyNoCollInRofStrict", false, "Enable NoCollInRofStrict cut"};
116118
Configurable<bool> isApplyNoHighMultCollInPrevRof{"isApplyNoHighMultCollInPrevRof", false, "Enable NoHighMultCollInPrevRof cut"};
117119
Configurable<bool> isApplyCentFT0C{"isApplyCentFT0C", false, "Centrality based on FT0C"};
118120
Configurable<bool> isApplyCentFV0A{"isApplyCentFV0A", false, "Centrality based on FV0A"};
@@ -142,6 +144,7 @@ struct LongrangeMaker {
142144
struct : ConfigurableGroup {
143145
Configurable<bool> cfgUseChi2Cut{"cfgUseChi2Cut", false, "Use condition on MFT track: chi2/Nclusters"};
144146
Configurable<bool> cfgRequireCA{"cfgRequireCA", false, "Use Cellular Automaton track-finding algorithm"};
147+
Configurable<bool> cfgRequireLTF{"cfgRequireLTF", false, "Use LTF track-finding algorithm"};
145148
Configurable<bool> useMftPtCut{"useMftPtCut", true, "Choose to apply MFT track pT cut"};
146149
Configurable<int> cfgMftCluster{"cfgMftCluster", 5, "cut on MFT Cluster"};
147150
Configurable<float> cfgMftEtaMax{"cfgMftEtaMax", -2.4f, "Maximum MFT eta cut"};
@@ -251,11 +254,13 @@ struct LongrangeMaker {
251254
x->SetBinLabel(6, "ApplyGoodZvtxFT0vsPV");
252255
x->SetBinLabel(7, "ApplyGoodITSLayersAll");
253256
x->SetBinLabel(8, "ApplyExtraCorrCut");
254-
x->SetBinLabel(9, "ApplyNoCollInTimeRangeStandard");
255-
x->SetBinLabel(10, "ApplyNoCollInRofStandard");
256-
x->SetBinLabel(11, "ApplyNoHighMultCollInPrevRof");
257-
x->SetBinLabel(12, "ApplyOccupancySelection");
258-
x->SetBinLabel(13, "reject flange event");
257+
x->SetBinLabel(9, "ApplyNoCollInRofStandard");
258+
x->SetBinLabel(10, "ApplyNoCollInRofStrict");
259+
x->SetBinLabel(11, "ApplyNoCollInTimeRangeStandard");
260+
x->SetBinLabel(12, "ApplyNoCollInTimeRangeStrict");
261+
x->SetBinLabel(13, "ApplyNoHighMultCollInPrevRof");
262+
x->SetBinLabel(14, "ApplyOccupancySelection");
263+
x->SetBinLabel(15, "reject flange event");
259264
histos.add("hSelectionResult", "hSelectionResult", kTH1I, {{5, -0.5, 4.5}});
260265

261266
histos.add("hMftTrkSel", "hMftTrkSel", kTH1D, {axisTrackSel}, false);
@@ -277,9 +282,6 @@ struct LongrangeMaker {
277282
xMftBestTrk->SetBinLabel(4, "DCAxy selection");
278283
xMftBestTrk->SetBinLabel(5, "DCAz selection");
279284

280-
histos.add("ReassignedMFTtrackAmbDegree", "ReassignedMFTtrackAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree});
281-
histos.add("AssignedMFTtrackAmbDegree", "AssignedMFTtrackAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree});
282-
283285
histos.add("FT0A_Amp", "FT0A_Amp", kTH1D, {cfgAxis.axisAmplitude});
284286
histos.add("FT0A_Amp_gaincorrected", "FT0A_Amp_gaincorrected", kTH1D, {cfgAxis.axisAmplitude});
285287
histos.add("FT0A_Channel_vs_Amp", "FT0A_Channel_vs_Amp", kTH2D, {cfgAxis.axisChannel, cfgAxis.axisAmplitude});
@@ -427,7 +429,7 @@ struct LongrangeMaker {
427429
return;
428430
}
429431
}
430-
histos.fill(HIST("EventHist"), 13);
432+
histos.fill(HIST("EventHist"), 15);
431433
for (std::size_t iCh = 0; iCh < ft0.channelA().size(); iCh++) {
432434
auto chanelid = ft0.channelA()[iCh];
433435
float ampl = ft0.amplitudeA()[iCh];
@@ -483,12 +485,6 @@ struct LongrangeMaker {
483485
continue;
484486
}
485487
auto phi = itrack.phi();
486-
if (itrack.collisionId() != reassoMftTrack.bestCollisionId()) {
487-
histos.fill(HIST("ReassignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree());
488-
}
489-
if (itrack.collisionId() == reassoMftTrack.bestCollisionId()) {
490-
histos.fill(HIST("AssignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree());
491-
}
492488
o2::math_utils::bringTo02Pi(phi);
493489
lrmfttracks(lrcollision.lastIndex(),
494490
reassoMftTrack.ambDegree(),
@@ -497,7 +493,9 @@ struct LongrangeMaker {
497493
phi,
498494
itrack.nClusters(),
499495
reassoMftTrack.bestDCAXY(),
500-
reassoMftTrack.bestDCAZ());
496+
reassoMftTrack.bestDCAZ(),
497+
itrack.isCA(),
498+
itrack.collisionId() != reassoMftTrack.bestCollisionId());
501499
}
502500

503501
// v0 loop
@@ -664,20 +662,16 @@ struct LongrangeMaker {
664662
}
665663
auto phi = itrack.phi();
666664
o2::math_utils::bringTo02Pi(phi);
667-
if (itrack.collisionId() != reassoMftTrack.bestCollisionId()) {
668-
histos.fill(HIST("ReassignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree());
669-
}
670-
if (itrack.collisionId() == reassoMftTrack.bestCollisionId()) {
671-
histos.fill(HIST("AssignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree());
672-
}
673665
upclrmfttracks(upclrcollision.lastIndex(),
674666
reassoMftTrack.ambDegree(),
675667
itrack.pt(),
676668
itrack.eta(),
677669
phi,
678670
itrack.nClusters(),
679671
reassoMftTrack.bestDCAXY(),
680-
reassoMftTrack.bestDCAZ());
672+
reassoMftTrack.bestDCAZ(),
673+
itrack.isCA(),
674+
itrack.collisionId() != reassoMftTrack.bestCollisionId());
681675
}
682676

683677
// v0 loop
@@ -869,20 +863,16 @@ struct LongrangeMaker {
869863
}
870864
auto phi = itrack.phi();
871865
o2::math_utils::bringTo02Pi(phi);
872-
if (itrack.collisionId() != reassoMftTrack.bestCollisionId()) {
873-
histos.fill(HIST("ReassignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree());
874-
}
875-
if (itrack.collisionId() == reassoMftTrack.bestCollisionId()) {
876-
histos.fill(HIST("AssignedMFTtrackAmbDegree"), reassoMftTrack.ambDegree());
877-
}
878866
lrmfttracks(lrcollision.lastIndex(),
879867
reassoMftTrack.ambDegree(),
880868
itrack.pt(),
881869
itrack.eta(),
882870
phi,
883871
itrack.nClusters(),
884872
reassoMftTrack.bestDCAXY(),
885-
reassoMftTrack.bestDCAZ());
873+
reassoMftTrack.bestDCAZ(),
874+
itrack.isCA(),
875+
itrack.collisionId() != reassoMftTrack.bestCollisionId());
886876
}
887877

888878
for (const auto& particle : mcparticles) {
@@ -1034,6 +1024,12 @@ struct LongrangeMaker {
10341024
if (!isMftTrackSelected(track)) {
10351025
continue;
10361026
}
1027+
if (cfgmfttrksel.cfgRequireCA && !track.isCA()) {
1028+
continue;
1029+
}
1030+
if (cfgmfttrksel.cfgRequireLTF && track.isCA()) {
1031+
continue;
1032+
}
10371033
if (!track.has_mcParticle())
10381034
continue;
10391035
auto particle = track.mcParticle();
@@ -1096,22 +1092,30 @@ struct LongrangeMaker {
10961092
return false;
10971093
}
10981094
histos.fill(HIST("EventHist"), 8);
1099-
if (cfgevtsel.isApplyNoCollInTimeRangeStandard && !col.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
1095+
if (cfgevtsel.isApplyNoCollInRofStandard && !col.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
11001096
return false;
11011097
}
11021098
histos.fill(HIST("EventHist"), 9);
1103-
if (cfgevtsel.isApplyNoCollInRofStandard && !col.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
1099+
if (cfgevtsel.isApplyNoCollInRofStrict && !col.selection_bit(o2::aod::evsel::kNoCollInRofStrict)) {
11041100
return false;
11051101
}
11061102
histos.fill(HIST("EventHist"), 10);
1107-
if (cfgevtsel.isApplyNoHighMultCollInPrevRof && !col.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
1103+
if (cfgevtsel.isApplyNoCollInTimeRangeStandard && !col.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
11081104
return false;
11091105
}
11101106
histos.fill(HIST("EventHist"), 11);
1111-
if (cfgevtsel.isApplyOccuSelection && (col.trackOccupancyInTimeRange() > cfgevtsel.cfgOccuCut)) {
1107+
if (cfgevtsel.isApplyNoCollInTimeRangeStrict && !col.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStrict)) {
11121108
return false;
11131109
}
11141110
histos.fill(HIST("EventHist"), 12);
1111+
if (cfgevtsel.isApplyNoHighMultCollInPrevRof && !col.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
1112+
return false;
1113+
}
1114+
histos.fill(HIST("EventHist"), 13);
1115+
if (cfgevtsel.isApplyOccuSelection && (col.trackOccupancyInTimeRange() > cfgevtsel.cfgOccuCut)) {
1116+
return false;
1117+
}
1118+
histos.fill(HIST("EventHist"), 14);
11151119
return true;
11161120
}
11171121

@@ -1247,9 +1251,6 @@ struct LongrangeMaker {
12471251
if constexpr (fillHis) {
12481252
histos.fill(HIST("hMftTrkSel"), 5);
12491253
}
1250-
if (cfgmfttrksel.cfgRequireCA && !track.isCA()) {
1251-
return false;
1252-
}
12531254
if constexpr (fillHis) {
12541255
histos.fill(HIST("hMftTrkSel"), 6);
12551256
}

PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ struct LongrangecorrDerived {
7676
Configurable<float> cfgMftDcaz{"cfgMftDcaz", 2.0f, "cut on DCA z for MFT tracks"};
7777
Configurable<bool> cfgRejectAmbTrk{"cfgRejectAmbTrk", false, "Condition to reject Ambiguous tracks"};
7878
Configurable<bool> cfgRejectNonAmbTrk{"cfgRejectNonAmbTrk", false, "Condition to reject Non-Ambiguous tracks"};
79+
Configurable<bool> cfgRequireCA{"cfgRequireCA", false, "Use Cellular Automaton track-finding algorithm"};
80+
Configurable<bool> cfgRequireLTF{"cfgRequireLTF", false, "Use LTF track-finding algorithm"};
7981
} cfgSel;
8082

8183
struct : ConfigurableGroup {
@@ -203,10 +205,12 @@ struct LongrangecorrDerived {
203205
histos.add("TPCChi2NCl", "TPCChi2NCl", kTH1D, {cfgAxis.axisTPCChi2NCl});
204206
histos.add("TPCdcaZ", "TPCdcaZ", kTH1D, {cfgAxis.axisTPCdcaZ});
205207

206-
histos.add("MFTAmbDegree", "MFTAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree});
207208
histos.add("MFTNClusters", "MFTNClusters", kTH1D, {cfgAxis.axisMFTNClusters});
208209
histos.add("MFTbestDCAXY", "MFTbestDCAXY", kTH1D, {cfgAxis.axisMFTbestDCAXY});
209210
histos.add("MFTbestDCAZ", "MFTbestDCAZ", kTH1D, {cfgAxis.axisMFTbestDCAZ});
211+
212+
histos.add("ReassignedMFTtrackAmbDegree", "ReassignedMFTtrackAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree});
213+
histos.add("AssignedMFTtrackAmbDegree", "AssignedMFTtrackAmbDegree", kTH1D, {cfgAxis.axisMFTAmbDegree});
210214
}
211215

212216
template <typename TTrack>
@@ -233,6 +237,10 @@ struct LongrangecorrDerived {
233237
return false;
234238
if (cfgSel.cfgRejectNonAmbTrk && track.ambDegree() == 1)
235239
return false;
240+
if (cfgSel.cfgRequireCA && !track.isCA())
241+
return false;
242+
if (cfgSel.cfgRequireLTF && track.isCA())
243+
return false;
236244
return true;
237245
} else {
238246
return true;
@@ -274,7 +282,11 @@ struct LongrangecorrDerived {
274282
histos.fill(HIST("MFTNClusters"), track.nClusters());
275283
histos.fill(HIST("MFTbestDCAXY"), track.bestDCAXY());
276284
histos.fill(HIST("MFTbestDCAZ"), track.bestDCAZ());
277-
histos.fill(HIST("MFTAmbDegree"), track.ambDegree());
285+
if (track.isReassigned()) {
286+
histos.fill(HIST("ReassignedMFTtrackAmbDegree"), track.ambDegree());
287+
} else {
288+
histos.fill(HIST("AssignedMFTtrackAmbDegree"), track.ambDegree());
289+
}
278290
}
279291
}
280292

@@ -292,7 +304,11 @@ struct LongrangecorrDerived {
292304
histos.fill(HIST("MFTNClusters"), track.nClusters());
293305
histos.fill(HIST("MFTbestDCAXY"), track.bestDCAXY());
294306
histos.fill(HIST("MFTbestDCAZ"), track.bestDCAZ());
295-
histos.fill(HIST("MFTAmbDegree"), track.ambDegree());
307+
if (track.isReassigned()) {
308+
histos.fill(HIST("ReassignedMFTtrackAmbDegree"), track.ambDegree());
309+
} else {
310+
histos.fill(HIST("AssignedMFTtrackAmbDegree"), track.ambDegree());
311+
}
296312
}
297313
}
298314

0 commit comments

Comments
 (0)