Skip to content

Commit 3227a46

Browse files
authored
[PWGCF] Add configurable track dcaZ selection, condition to reject flange events and remove is_detected usage (#16013)
1 parent 1e184be commit 3227a46

2 files changed

Lines changed: 35 additions & 34 deletions

File tree

PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
#include "PWGCF/Core/CorrelationContainer.h"
1919
#include "PWGCF/TwoParticleCorrelations/DataModel/LongRangeDerived.h"
20-
//
2120
#include "PWGLF/DataModel/LFStrangenessTables.h"
2221
#include "PWGMM/Mult/DataModel/bestCollisionTable.h"
2322
#include "PWGUD/Core/SGCutParHolder.h"
@@ -62,6 +61,7 @@
6261

6362
#include <algorithm>
6463
#include <array>
64+
#include <bitset>
6565
#include <chrono>
6666
#include <cmath>
6767
#include <cstdint>
@@ -120,6 +120,7 @@ struct LongrangeMaker {
120120
Configurable<int> cfgOccuCut{"cfgOccuCut", 1000, "Occupancy selection"};
121121
Configurable<float> cfgVtxCut{"cfgVtxCut", 10.0f, "vertex Z selection"};
122122
Configurable<bool> isApplyBestCollIndex{"isApplyBestCollIndex", true, "bestCollIndex"};
123+
Configurable<bool> isrejectFlangeEvent{"isrejectFlangeEvent", false, "At least one channel with -350 TDC < time < -450 TDC"};
123124
} cfgevtsel;
124125

125126
struct : ConfigurableGroup {
@@ -130,6 +131,7 @@ struct LongrangeMaker {
130131
Configurable<float> minNCrossedRowsTPC{"minNCrossedRowsTPC", 70.f, "cut on minimum number of TPC crossed rows"};
131132
Configurable<float> minTPCNClsFound{"minTPCNClsFound", 50.f, "cut on minimum value of TPC found clusters"};
132133
Configurable<float> maxDcaZ{"maxDcaZ", 2.f, "cut on maximum abs value of DCA z"};
134+
Configurable<float> maxDcaXY{"maxDcaXY", 1.f, "cut on maximum abs value of DCA xy"};
133135
Configurable<float> maxChi2PerClusterTPC{"maxChi2PerClusterTPC", 4.f, "cut on maximum value of TPC chi2 per cluster"};
134136
} cfgtrksel;
135137

@@ -151,7 +153,7 @@ struct LongrangeMaker {
151153
Configurable<float> cfigFt0cEtaMin{"cfigFt0cEtaMin", -3.3f, "Minimum FT0C eta cut"};
152154
Configurable<int> cfigVerbosity{"cfigVerbosity", 0, "print statement"};
153155
Configurable<bool> useGainCalib{"useGainCalib", true, "use gain calibration"};
154-
Configurable<std::string> ConfGainPath{"ConfGainPath", "Analysis/EventPlane/GainEq/FT0", "Path to gain calibration"};
156+
Configurable<std::string> confGainPath{"confGainPath", "Analysis/EventPlane/GainEq/FT0", "Path to gain calibration"};
155157
} cfgfittrksel;
156158

157159
struct : ConfigurableGroup {
@@ -241,6 +243,7 @@ struct LongrangeMaker {
241243
x->SetBinLabel(10, "ApplyNoCollInRofStandard");
242244
x->SetBinLabel(11, "ApplyNoHighMultCollInPrevRof");
243245
x->SetBinLabel(12, "ApplyOccupancySelection");
246+
x->SetBinLabel(13, "reject flange event");
244247
histos.add("hSelectionResult", "hSelectionResult", kTH1I, {{5, -0.5, 4.5}});
245248

246249
AxisSpec axisVtx = {vtxHistBin, "Vertex", "VtxAxis"};
@@ -270,6 +273,7 @@ struct LongrangeMaker {
270273
myTrackFilter.SetMinNCrossedRowsTPC(cfgtrksel.minNCrossedRowsTPC);
271274
myTrackFilter.SetMinNClustersTPC(cfgtrksel.minTPCNClsFound);
272275
myTrackFilter.SetMaxDcaZ(cfgtrksel.maxDcaZ);
276+
myTrackFilter.SetMaxDcaXYPtDep([scale = cfgtrksel.maxDcaXY.value](float pt) { return scale * (0.0105f + 0.0350f / std::pow(pt, 1.1f)); });
273277
myTrackFilter.SetMaxChi2PerClusterTPC(cfgtrksel.maxChi2PerClusterTPC);
274278
myTrackFilter.print();
275279

@@ -309,7 +313,7 @@ struct LongrangeMaker {
309313
Filter fTracksEta = nabs(aod::track::eta) < cfgtrksel.cfgEtaCut;
310314
Filter fTracksPt = (aod::track::pt > cfgtrksel.cfgPtCutMin) && (aod::track::pt < cfgtrksel.cfgPtCutMax);
311315

312-
using CollTable = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFV0As, aod::CentFT0Ms>;
316+
using CollTable = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFV0As, aod::CentFT0Ms, aod::FITExtraMults>;
313317
using TrksTable = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTOFbeta, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr>>;
314318
using MftTrkTable = aod::MFTTracks;
315319
using BCs = soa::Join<aod::BCsWithTimestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
@@ -329,7 +333,7 @@ struct LongrangeMaker {
329333
ft0gainvalues.clear();
330334
ft0gainvalues = {};
331335
if (cfgfittrksel.useGainCalib) {
332-
const auto ft0GainObj = ccdb->getForTimeStamp<std::vector<float>>(cfgfittrksel.ConfGainPath, bc.timestamp());
336+
const auto ft0GainObj = ccdb->getForTimeStamp<std::vector<float>>(cfgfittrksel.confGainPath, bc.timestamp());
333337
if (!ft0GainObj) {
334338
for (auto i{0u}; i < TotFt0Channels; i++) {
335339
ft0gainvalues.push_back(1.);
@@ -604,7 +608,7 @@ struct LongrangeMaker {
604608
ft0gainvalues.clear();
605609
ft0gainvalues = {};
606610
if (cfgfittrksel.useGainCalib) {
607-
const auto ft0GainObj = ccdb->getForTimeStamp<std::vector<float>>(cfgfittrksel.ConfGainPath, bc.timestamp());
611+
const auto ft0GainObj = ccdb->getForTimeStamp<std::vector<float>>(cfgfittrksel.confGainPath, bc.timestamp());
608612
if (!ft0GainObj) {
609613
for (auto i{0u}; i < TotFt0Channels; i++) {
610614
ft0gainvalues.push_back(1.);
@@ -911,6 +915,16 @@ struct LongrangeMaker {
911915
return false;
912916
}
913917
histos.fill(HIST("EventHist"), 12);
918+
if (cfgevtsel.isrejectFlangeEvent) {
919+
if constexpr (requires { col.ft0TriggerMask(); }) {
920+
constexpr int IsFlangeEventId = 7;
921+
std::bitset<8> ft0TriggerMask = col.ft0TriggerMask();
922+
if (ft0TriggerMask[IsFlangeEventId]) {
923+
return false;
924+
}
925+
}
926+
}
927+
histos.fill(HIST("EventHist"), 13);
914928
return true;
915929
}
916930

PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ struct LongrangecorrDerived {
185185
void fillCollQA(TCollision const& col)
186186
{
187187
histos.fill(HIST("hMultiplicity"), col.multiplicity());
188-
if constexpr (std::experimental::is_detected<HasCent, TCollision>::value) {
188+
if constexpr (requires { col.centrality(); }) {
189189
histos.fill(HIST("hCentrality"), col.centrality());
190190
}
191191
histos.fill(HIST("hVertexZ"), col.posZ());
@@ -197,15 +197,15 @@ struct LongrangecorrDerived {
197197
histos.fill(HIST("Trig_etavsphi"), track.phi(), track.eta());
198198
histos.fill(HIST("Trig_eta"), track.eta());
199199
histos.fill(HIST("Trig_phi"), track.phi());
200-
if constexpr (std::experimental::is_detected<HasFt0, TTrack>::value) {
200+
if constexpr (requires { track.channelID(); }) {
201201
histos.fill(HIST("Trig_amp"), track.amplitude());
202202
histos.fill(HIST("Channel_vs_Trig_amp"), track.channelID(), track.amplitude());
203203
histos.fill(HIST("Trig_amp_gaincorrected"), track.gainAmplitude());
204204
histos.fill(HIST("Channel_vs_Trig_amp_gaincorrected"), track.channelID(), track.gainAmplitude());
205205
} else {
206206
histos.fill(HIST("Trig_pt"), track.pt());
207207
}
208-
if constexpr (std::experimental::is_detected<HasInvMass, TTrack>::value) {
208+
if constexpr (requires { track.invMass(); }) {
209209
histos.fill(HIST("Trig_invMass"), track.invMass());
210210
}
211211
}
@@ -216,7 +216,7 @@ struct LongrangecorrDerived {
216216
histos.fill(HIST("Assoc_etavsphi"), track.phi(), track.eta());
217217
histos.fill(HIST("Assoc_eta"), track.eta());
218218
histos.fill(HIST("Assoc_phi"), track.phi());
219-
if constexpr (std::experimental::is_detected<HasFt0, TTrack>::value) {
219+
if constexpr (requires { track.channelID(); }) {
220220
histos.fill(HIST("Assoc_amp"), track.amplitude());
221221
histos.fill(HIST("Channel_vs_Assoc_amp"), track.channelID(), track.amplitude());
222222
histos.fill(HIST("Assoc_amp_gaincorrected"), track.gainAmplitude());
@@ -244,52 +244,39 @@ struct LongrangecorrDerived {
244244
return true;
245245
}
246246

247-
template <class T>
248-
using HasTpcTrack = decltype(std::declval<T&>().trackType());
249-
template <class T>
250-
using HasV0Track = decltype(std::declval<T&>().v0Type());
251-
template <class T>
252-
using HasInvMass = decltype(std::declval<T&>().invMass());
253-
template <class T>
254-
using HasUpc = decltype(std::declval<T&>().gapSide());
255-
template <class T>
256-
using HasFt0 = decltype(std::declval<T&>().channelID());
257-
template <class T>
258-
using HasCent = decltype(std::declval<T&>().centrality());
259-
260247
template <CorrelationContainer::CFStep step, typename TTarget, typename TTriggers, typename TAssocs>
261248
void fillCorrHist(TTarget target, TTriggers const& triggers, TAssocs const& assocs, bool mixing, float vz, float multiplicity, float eventWeight)
262249
{
263250
for (auto const& triggerTrack : triggers) {
264251
auto trigAmpl = 1.0f;
265-
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
252+
if constexpr (requires { triggerTrack.channelID(); }) {
266253
if (useGainCorr)
267254
trigAmpl = triggerTrack.gainAmplitude();
268255
else
269256
trigAmpl = triggerTrack.amplitude();
270257
} else {
271258
trigAmpl = 1.0;
272259
}
273-
if constexpr (std::experimental::is_detected<HasTpcTrack, typename TTriggers::iterator>::value) {
260+
if constexpr (requires { triggerTrack.trackType(); }) {
274261
if (cfgPidMask != 0 && (cfgPidMask & (1u << static_cast<uint32_t>(triggerTrack.trackType()))) == 0u)
275262
continue;
276-
} else if constexpr (std::experimental::is_detected<HasV0Track, typename TTriggers::iterator>::value) {
263+
} else if constexpr (requires { triggerTrack.v0Type(); }) {
277264
if (cfgV0Mask != 0 && (cfgV0Mask & (1u << static_cast<uint32_t>(triggerTrack.v0Type()))) == 0u)
278265
continue;
279266
}
280267
if (!mixing) {
281268
fillTrigTrackQA(triggerTrack);
282-
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
269+
if constexpr (requires { triggerTrack.channelID(); }) {
283270
histos.fill(HIST("Trig_hist"), vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl);
284-
} else if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
271+
} else if constexpr (requires { triggerTrack.v0Type(); }) {
285272
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl);
286273
} else {
287274
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl);
288275
}
289276
}
290277
for (auto const& assoTrack : assocs) {
291278
auto assoAmpl = 1.0f;
292-
if constexpr (std::experimental::is_detected<HasFt0, typename TAssocs::iterator>::value) {
279+
if constexpr (requires { assoTrack.v0Type(); }) {
293280
if (useGainCorr)
294281
assoAmpl = assoTrack.gainAmplitude();
295282
else
@@ -305,9 +292,9 @@ struct LongrangecorrDerived {
305292
} else {
306293
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl);
307294
}
308-
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
295+
if constexpr (requires { triggerTrack.channelID(); }) {
309296
target->getPairHist()->Fill(step, vz, multiplicity, 1.0, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl);
310-
} else if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
297+
} else if constexpr (requires { triggerTrack.invMass(); }) {
311298
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl);
312299
} else {
313300
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl);
@@ -324,7 +311,7 @@ struct LongrangecorrDerived {
324311
}
325312
fillCollQA(col);
326313
auto multiplicity = 1.0f;
327-
if constexpr (std::experimental::is_detected<HasCent, TCollision>::value) {
314+
if constexpr (requires { col.centrality(); }) {
328315
if (isUseCentEst)
329316
multiplicity = col.centrality();
330317
else
@@ -339,15 +326,15 @@ struct LongrangecorrDerived {
339326
void processMixed(TCollision const& cols, TrackTypes&&... tracks)
340327
{
341328
auto getMultiplicity = [this](auto& col) {
342-
if constexpr (std::experimental::is_detected<HasUpc, TCollision>::value) {
329+
if constexpr (requires { col.gapSide(); }) {
343330
if (!isUpcEventSelected<false>(col)) {
344331
return -1.0f;
345332
}
346333
} else {
347334
(void)this;
348335
}
349336
auto multiplicity = 1.0f;
350-
if constexpr (std::experimental::is_detected<HasCent, TCollision>::value) {
337+
if constexpr (requires { col.centrality(); }) {
351338
if (isUseCentEst)
352339
multiplicity = col.centrality();
353340
else
@@ -365,7 +352,7 @@ struct LongrangecorrDerived {
365352
Pair<TCollision, TupleAtrack, TupleBtrack, MixedBinning> pairs{binningOnVtxAndMult, cfgNmixedevent, -1, cols, tracksTuple, &cache};
366353
for (auto it = pairs.begin(); it != pairs.end(); it++) {
367354
auto& [col1, tracks1, col2, tracks2] = *it;
368-
if constexpr (std::experimental::is_detected<HasUpc, TCollision>::value) {
355+
if constexpr (requires { col1.gapSide(); } || requires { col2.gapSide(); }) {
369356
if (!isUpcEventSelected<false>(col1) || !isUpcEventSelected<false>(col2)) {
370357
continue;
371358
}

0 commit comments

Comments
 (0)