Skip to content

Commit edff28d

Browse files
committed
Add flag for eventconsistency, add pt-dep dcaxy to eff task
1 parent bae4e7c commit edff28d

File tree

2 files changed

+102
-24
lines changed

2 files changed

+102
-24
lines changed

PWGCF/Flow/Tasks/flowPtEfficiency.cxx

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,32 @@
1414
/// \since Jun/08/2023
1515
/// \brief a task to calculate the pt efficiency
1616

17-
#include <CCDB/BasicCCDBManager.h>
18-
#include <vector>
19-
#include <string>
20-
#include "Framework/runDataProcessing.h"
21-
#include "Framework/AnalysisTask.h"
22-
#include "Framework/ASoAHelpers.h"
23-
#include "Framework/RunningWorkflowInfo.h"
24-
#include "Framework/HistogramRegistry.h"
17+
#include "FlowContainer.h"
18+
#include "GFW.h"
19+
#include "GFWCumulant.h"
20+
#include "GFWPowerArray.h"
21+
#include "GFWWeights.h"
2522

2623
#include "Common/Core/RecoDecay.h"
27-
#include "Common/DataModel/EventSelection.h"
2824
#include "Common/Core/TrackSelection.h"
2925
#include "Common/Core/TrackSelectionDefaults.h"
26+
#include "Common/DataModel/EventSelection.h"
3027
#include "Common/DataModel/TrackSelectionTables.h"
3128

32-
#include "GFWPowerArray.h"
33-
#include "GFW.h"
34-
#include "GFWCumulant.h"
35-
#include "GFWWeights.h"
36-
#include "FlowContainer.h"
29+
#include "Framework/ASoAHelpers.h"
30+
#include "Framework/AnalysisTask.h"
31+
#include "Framework/HistogramRegistry.h"
32+
#include "Framework/RunningWorkflowInfo.h"
33+
#include "Framework/runDataProcessing.h"
34+
#include <CCDB/BasicCCDBManager.h>
35+
36+
#include <TF1.h>
37+
#include <TPDGCode.h>
3738
#include <TProfile.h>
3839
#include <TRandom3.h>
39-
#include <TPDGCode.h>
40+
41+
#include <string>
42+
#include <vector>
4043

4144
using namespace o2;
4245
using namespace o2::framework;
@@ -57,6 +60,8 @@ struct FlowPtEfficiency {
5760
O2_DEFINE_CONFIGURABLE(cfgCutITSclu, float, 5.0f, "minimum ITS clusters")
5861
O2_DEFINE_CONFIGURABLE(cfgCutTPCcrossedrows, float, 70.0f, "minimum TPC crossed rows")
5962
O2_DEFINE_CONFIGURABLE(cfgCutDCAxy, float, 0.2f, "DCAxy cut for tracks")
63+
O2_DEFINE_CONFIGURABLE(cfgDCAxyNSigma, float, 7, "Cut on number of sigma deviations from expected DCA in the transverse direction");
64+
O2_DEFINE_CONFIGURABLE(cfgDCAxyFunction, std::string, "(0.0015+0.005/(x^1.1))", "Functional form of pt-dependent DCAxy cut");
6065
O2_DEFINE_CONFIGURABLE(cfgCutDCAz, float, 2.0f, "DCAz cut for tracks")
6166
O2_DEFINE_CONFIGURABLE(cfgCutDCAxyppPass3Enabled, bool, false, "switch of ppPass3 DCAxy pt dependent cut")
6267
O2_DEFINE_CONFIGURABLE(cfgCutDCAzPtDepEnabled, bool, false, "switch of DCAz pt dependent cut")
@@ -128,6 +133,7 @@ struct FlowPtEfficiency {
128133
std::vector<GFW::CorrConfig> corrconfigsTruth;
129134
std::vector<GFW::CorrConfig> corrconfigsReco;
130135
TRandom3* fRndm = new TRandom3(0);
136+
TF1* fDCAxyPtDep = nullptr;
131137

132138
bool isStable(int pdg)
133139
{
@@ -230,7 +236,14 @@ struct FlowPtEfficiency {
230236
if (cfgCutDCAxyppPass3Enabled) {
231237
myTrackSel.SetMaxDcaXYPtDep([](float pt) { return 0.004f + 0.013f / pt; });
232238
} else {
233-
myTrackSel.SetMaxDcaXY(cfgCutDCAxy);
239+
if (cfgCutDCAxy != 0) {
240+
myTrackSel.SetMaxDcaXY(cfgCutDCAxy);
241+
} else {
242+
fDCAxyPtDep = new TF1("ptDepDCAxy", Form("[0]*%s", cfgDCAxyFunction->c_str()), 0.001, 100);
243+
fDCAxyPtDep->SetParameter(0, cfgDCAxyNSigma);
244+
LOGF(info, "DCAxy pt-dependence function: %s", Form("%g*%s", static_cast<double>(cfgDCAxyNSigma), cfgDCAxyFunction->c_str()));
245+
myTrackSel.SetMaxDcaXYPtDep([fDCAxyPtDep = this->fDCAxyPtDep](float pt) { return fDCAxyPtDep->Eval(pt); });
246+
}
234247
}
235248
myTrackSel.SetMinNClustersTPC(cfgCutTPCclu);
236249
myTrackSel.SetMinNCrossedRowsTPC(cfgCutTPCcrossedrows);

PWGCF/GenericFramework/Tasks/flowGfwLightIons.cxx

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ struct FlowGfwLightIons {
123123
O2_DEFINE_CONFIGURABLE(cfgFixedMultMin, int, 1, "Minimum for fixed nch range");
124124
O2_DEFINE_CONFIGURABLE(cfgFixedMultMax, int, 3000, "Maximum for fixed nch range");
125125
O2_DEFINE_CONFIGURABLE(cfgUseMultiplicityFlowWeights, bool, true, "Enable or disable the use of multiplicity-based event weighting");
126+
O2_DEFINE_CONFIGURABLE(cfgConsistentEventFlag, int, 0, "Flag to select consistent events - 0: off, 1: v2{2} gap calculable, 2: v2{4} full calculable, 4: v2{4} gap calculable, 8: v2{4} 3sub calculable");
126127
O2_DEFINE_CONFIGURABLE(cfgUseDensityDependentCorrection, bool, false, "Use density dependent efficiency correction based on Run 2 measurements");
127128
Configurable<std::vector<double>> cfgTrackDensityP0{"cfgTrackDensityP0", std::vector<double>{0.7217476707, 0.7384792571, 0.7542625668, 0.7640680200, 0.7701951667, 0.7755299053, 0.7805901710, 0.7849446786, 0.7957356586, 0.8113039262, 0.8211968966, 0.8280558878, 0.8329342135}, "parameter 0 for track density efficiency correction"};
128129
Configurable<std::vector<double>> cfgTrackDensityP1{"cfgTrackDensityP1", std::vector<double>{-2.169488e-05, -2.191913e-05, -2.295484e-05, -2.556538e-05, -2.754463e-05, -2.816832e-05, -2.846502e-05, -2.843857e-05, -2.705974e-05, -2.477018e-05, -2.321730e-05, -2.203315e-05, -2.109474e-05}, "parameter 1 for track density efficiency correction"};
@@ -183,7 +184,6 @@ struct FlowGfwLightIons {
183184
kCentNGlobal,
184185
kCentMFT
185186
};
186-
187187
enum EventSelFlags {
188188
kFilteredEvent = 1,
189189
kSel8,
@@ -226,6 +226,12 @@ struct FlowGfwLightIons {
226226
DensityCorr() : psi2Est(0.), psi3Est(0.), psi4Est(0.), v2(0.), v3(0.), v4(0.), density(0) {}
227227
};
228228

229+
// region indices for consistency flag
230+
int posRegionIndex = -1;
231+
int negRegionIndex = -1;
232+
int fullRegionIndex = -1;
233+
int midRegionIndex = -1;
234+
229235
// Event selection cuts - Alex
230236
TF1* fMultPVCutLow = nullptr;
231237
TF1* fMultPVCutHigh = nullptr;
@@ -276,7 +282,6 @@ struct FlowGfwLightIons {
276282
cfgGFWBinning->Print();
277283
o2::analysis::gfw::multGlobalCorrCutPars = cfgMultGlobalCutPars;
278284
o2::analysis::gfw::multPVCorrCutPars = cfgMultPVCutPars;
279-
280285
o2::analysis::gfw::firstRunsOfFill = cfgFirstRunsOfFill;
281286
if (cfgTimeDependent && !std::is_sorted(o2::analysis::gfw::firstRunsOfFill.begin(), o2::analysis::gfw::firstRunsOfFill.end())) {
282287
std::sort(o2::analysis::gfw::firstRunsOfFill.begin(), o2::analysis::gfw::firstRunsOfFill.end());
@@ -458,7 +463,6 @@ struct FlowGfwLightIons {
458463
fPtDepDCAxy = new TF1("ptDepDCAxy", Form("[0]*%s", cfgDCAxy->c_str()), 0.001, 100);
459464
fPtDepDCAxy->SetParameter(0, cfgDCAxyNSigma);
460465
LOGF(info, "DCAxy pt-dependence function: %s", Form("[0]*%s", cfgDCAxy->c_str()));
461-
462466
if (cfgUseAdditionalEventCut) {
463467
fMultPVCutLow = new TF1("fMultPVCutLow", cfgMultCorrLowCutFunction->c_str(), 0, 100);
464468
fMultPVCutLow->SetParameters(&(o2::analysis::gfw::multPVCorrCutPars[0]));
@@ -487,6 +491,32 @@ struct FlowGfwLightIons {
487491
funcV4 = new TF1("funcV4", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 100);
488492
funcV4->SetParameters(0.008845, 0.000259668, -3.24435e-06, 4.54837e-08, -6.01825e-10);
489493
}
494+
if (cfgConsistentEventFlag) {
495+
posRegionIndex = [&]() {
496+
auto begin = cfgRegions->GetNames().begin();
497+
auto end = cfgRegions->GetNames().end();
498+
auto it = std::find(begin, end, "refP");
499+
return (it != end) ? std::distance(begin, it) : -1;
500+
}();
501+
negRegionIndex = [&]() {
502+
auto begin = cfgRegions->GetNames().begin();
503+
auto end = cfgRegions->GetNames().end();
504+
auto it = std::find(begin, end, "refN");
505+
return (it != end) ? std::distance(begin, it) : -1;
506+
}();
507+
fullRegionIndex = [&]() {
508+
auto begin = cfgRegions->GetNames().begin();
509+
auto end = cfgRegions->GetNames().end();
510+
auto it = std::find(begin, end, "refFull");
511+
return (it != end) ? std::distance(begin, it) : -1;
512+
}();
513+
midRegionIndex = [&]() {
514+
auto begin = cfgRegions->GetNames().begin();
515+
auto end = cfgRegions->GetNames().end();
516+
auto it = std::find(begin, end, "refMid");
517+
return (it != end) ? std::distance(begin, it) : -1;
518+
}();
519+
}
490520
}
491521

492522
static constexpr std::string_view FillTimeName[] = {"before/", "after/"};
@@ -757,6 +787,13 @@ struct FlowGfwLightIons {
757787
double time;
758788
};
759789

790+
struct AcceptedTracks {
791+
int nPos;
792+
int nNeg;
793+
int nFull;
794+
int nMid;
795+
};
796+
760797
template <DataType dt, typename TCollision, typename TTracks>
761798
void processCollision(TCollision collision, TTracks tracks, const XAxis& xaxis, const int& run)
762799
{
@@ -819,9 +856,21 @@ struct FlowGfwLightIons {
819856
densitycorrections.v4 = v4;
820857
densitycorrections.density = tracks.size();
821858
}
822-
859+
AcceptedTracks acceptedTracks{0, 0, 0, 0};
823860
for (const auto& track : tracks) {
824-
processTrack(track, vtxz, xaxis.multiplicity, run, densitycorrections);
861+
processTrack(track, vtxz, xaxis.multiplicity, run, densitycorrections, acceptedTracks);
862+
if (cfgConsistentEventFlag & 1)
863+
if (!acceptedTracks.nPos || !acceptedTracks.nNeg)
864+
return;
865+
if (cfgConsistentEventFlag & 2)
866+
if (acceptedTracks.nFull < 4)
867+
return;
868+
if (cfgConsistentEventFlag & 4)
869+
if (acceptedTracks.nPos < 2 || acceptedTracks.nNeg < 2)
870+
return;
871+
if (cfgConsistentEventFlag & 8)
872+
if (acceptedTracks.nPos < 2 || acceptedTracks.nMid < 2 || acceptedTracks.nNeg < 2)
873+
return;
825874
}
826875
if (!cfgFillWeights)
827876
fillOutputContainers<dt>((cfgTimeDependent) ? xaxis.time : (cfgUseNch) ? xaxis.multiplicity
@@ -845,7 +894,20 @@ struct FlowGfwLightIons {
845894
}
846895

847896
template <typename TTrack>
848-
inline void processTrack(TTrack const& track, const float& vtxz, const int& multiplicity, const int& run, DensityCorr densitycorrections)
897+
void fillAcceptedTracks(TTrack track, AcceptedTracks& acceptedTracks)
898+
{
899+
if (posRegionIndex >= 0 && track.eta() > o2::analysis::gfw::regions.GetEtaMin()[posRegionIndex] && track.eta() < o2::analysis::gfw::regions.GetEtaMax()[posRegionIndex])
900+
++acceptedTracks.nPos;
901+
if (negRegionIndex >= 0 && track.eta() > o2::analysis::gfw::regions.GetEtaMin()[negRegionIndex] && track.eta() < o2::analysis::gfw::regions.GetEtaMax()[negRegionIndex])
902+
++acceptedTracks.nNeg;
903+
if (fullRegionIndex >= 0 && track.eta() > o2::analysis::gfw::regions.GetEtaMin()[fullRegionIndex] && track.eta() < o2::analysis::gfw::regions.GetEtaMax()[fullRegionIndex])
904+
++acceptedTracks.nFull;
905+
if (midRegionIndex >= 0 && track.eta() > o2::analysis::gfw::regions.GetEtaMin()[midRegionIndex] && track.eta() < o2::analysis::gfw::regions.GetEtaMax()[midRegionIndex])
906+
++acceptedTracks.nMid;
907+
}
908+
909+
template <typename TTrack>
910+
inline void processTrack(TTrack const& track, const float& vtxz, const int& multiplicity, const int& run, DensityCorr densitycorrections, AcceptedTracks& acceptedTracks)
849911
{
850912
if constexpr (framework::has_type_v<aod::mctracklabel::McParticleId, typename TTrack::all_columns>) {
851913
if (track.mcParticleId() < 0 || !(track.has_mcParticle()))
@@ -868,6 +930,7 @@ struct FlowGfwLightIons {
868930
} else {
869931
fillPtSums<kReco>(track);
870932
fillGFW<kReco>(track, vtxz, densitycorrections);
933+
fillAcceptedTracks(track, acceptedTracks);
871934
}
872935

873936
if (cfgFillQA) {
@@ -885,7 +948,7 @@ struct FlowGfwLightIons {
885948

886949
fillPtSums<kGen>(track);
887950
fillGFW<kGen>(track, vtxz, densitycorrections);
888-
951+
fillAcceptedTracks(track, acceptedTracks);
889952
if (cfgFillQA) {
890953
fillTrackQA<kGen, kAfter>(track, vtxz);
891954
registry.fill(HIST("MCGen/trackQA/nch_pt"), multiplicity, track.pt());
@@ -903,6 +966,7 @@ struct FlowGfwLightIons {
903966
} else {
904967
fillPtSums<kReco>(track);
905968
fillGFW<kReco>(track, vtxz, densitycorrections);
969+
fillAcceptedTracks(track, acceptedTracks);
906970
}
907971
if (cfgFillQA) {
908972
fillTrackQA<kReco, kAfter>(track, vtxz);
@@ -914,6 +978,7 @@ struct FlowGfwLightIons {
914978
}
915979
}
916980
}
981+
return;
917982
}
918983

919984
template <DataType dt, typename TTrack>
@@ -954,7 +1019,7 @@ struct FlowGfwLightIons {
9541019
double weff = (dt == kGen) ? 1. : getEfficiency(track);
9551020
if (weff < 0)
9561021
return;
957-
if (std::abs(track.eta()) < cfgEtaPtPt) {
1022+
if (std::abs(track.eta()) < cfgEtaPtPt && track.pt() > o2::analysis::gfw::ptreflow && track.pt() < o2::analysis::gfw::ptrefup) {
9581023
(dt == kGen) ? fFCptgen->fill(1., track.pt()) : fFCpt->fill(weff, track.pt());
9591024
}
9601025
}

0 commit comments

Comments
 (0)