Skip to content

Commit b22d4cf

Browse files
authored
Merge branch 'AliceO2Group:master' into NetChargeFluctuations3
2 parents 8f84864 + 7fc4117 commit b22d4cf

7 files changed

Lines changed: 249 additions & 5 deletions

File tree

PWGCF/EbyEFluctuations/Tasks/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,9 @@ o2physics_add_dpl_workflow(strongly-intensive-corr
8888
SOURCES stronglyIntensiveCorr.cxx
8989
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::PWGCFCore
9090
COMPONENT_NAME Analysis)
91+
92+
o2physics_add_dpl_workflow(mult-and-pt-fluctuations
93+
SOURCES multAndPtFluctuations.cxx
94+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::PWGCFCore
95+
COMPONENT_NAME Analysis)
96+
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
/// \file multAndPtFluctuations.cxx
13+
/// \brief Calculate multiplicity and transverse momentum fluctuations using strongly intensive observables
14+
/// \author Omama Rubza
15+
#include "Common/CCDB/EventSelectionParams.h"
16+
#include "Common/DataModel/Centrality.h"
17+
#include "Common/DataModel/EventSelection.h"
18+
#include "Common/DataModel/TrackSelectionTables.h"
19+
20+
#include <Framework/AnalysisDataModel.h>
21+
#include <Framework/AnalysisTask.h>
22+
#include <Framework/Configurable.h>
23+
#include <Framework/HistogramRegistry.h>
24+
#include <Framework/HistogramSpec.h>
25+
#include <Framework/InitContext.h>
26+
#include <Framework/OutputObjHeader.h>
27+
#include <Framework/runDataProcessing.h>
28+
29+
#include <cmath>
30+
#include <vector>
31+
32+
using namespace o2;
33+
using namespace o2::framework;
34+
using namespace o2::aod;
35+
using namespace o2::framework::expressions;
36+
37+
struct MultAndPtFluctuations {
38+
39+
// ------ Histogram binning
40+
41+
Configurable<int> nBinsPt{"nBinsPt", 100, "pT bins"};
42+
Configurable<int> ndcaXY{"ndcaXY", 100, "DCAxy bins"};
43+
Configurable<int> ndcaZ{"ndcaZ", 100, "DCAz bins"};
44+
Configurable<int> nCentBins{"nCentBins", 100, "Number of centrality bins"};
45+
46+
// ------ Event Cuts
47+
Configurable<float> vtxZcut{"vtxZcut", 10.0f, "vertex Z"};
48+
Configurable<bool> cfgNoSameBunchPileup{"cfgNoSameBunchPileup", true, "kNoSameBunchPileup"};
49+
Configurable<bool> cfgEvSelUseGoodZvtxFT0vsPV{"cfgEvSelUseGoodZvtxFT0vsPV", true, "Good Zvtx FT0 vs PV"};
50+
Configurable<bool> cfgUseGoodITSLayerAllCut{"cfgUseGoodITSLayerAllCut", true, "Good ITS Layers"};
51+
52+
// ----- Centrality estimator
53+
Configurable<bool> cFT0M{"cFT0M", false, "FT0M centrality"}; // for pp
54+
Configurable<bool> cFT0C{"cFT0C", true, "Use FT0C centrality"};
55+
56+
// ------ Track cuts
57+
Configurable<float> ptMinCut{"ptMinCut", 0.2f, "Minimum pT"};
58+
Configurable<float> ptMaxCut{"ptMaxCut", 5.0f, "Maximum pT"};
59+
Configurable<float> etaCut{"etaCut", 0.8f, "Maximum |eta|"};
60+
Configurable<int> itsNClsCut{"itsNClsCut", 4, "Minimum ITS clusters"};
61+
Configurable<float> tpcCrossCut{"tpcCrossCut", 70.0f, "TPC crossed rows"};
62+
Configurable<float> crossedRowsOverFindableCut{"crossedRowsOverFindableCut", 0.8f, "TPC crossed rows over findable"};
63+
Configurable<float> dcaZCut{"dcaZCut", 2.0f, "Maximum DCAz"};
64+
Configurable<float> dcaXYCut{"dcaXYCut", 0.2f, "Maximum DCAxy"};
65+
Configurable<float> tpcChiCut{"tpcChiCut", 4.0f, "TPC chi2/NCls"};
66+
Configurable<float> itsChiCut{"itsChiCut", 36.0f, "ITS chi2/NCls"};
67+
Configurable<bool> requireITS{"requireITS", true, "Require ITS hit"};
68+
Configurable<bool> requireTPC{"requireTPC", true, "Require TPC hit"};
69+
Configurable<bool> requireInnerITS{"requireInnerITS", true, "At least one hit in ITS layers 0,1,2"};
70+
71+
//----- Histogram Registry
72+
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
73+
void init(InitContext const&)
74+
{
75+
const AxisSpec axisEta{30, -1.5, +1.5, "#eta"};
76+
const AxisSpec axisPt{nBinsPt, 0.15, 10.0, "p_{T}"};
77+
const AxisSpec axisVtxz{80, -20, 20, "V_{Z} (cm)"};
78+
const AxisSpec axisPhi{40, -1, 7, "#phi"};
79+
const AxisSpec axisdcaXY{ndcaXY, -0.3, 0.3, "DCAxy"};
80+
const AxisSpec axisdcaZ{ndcaZ, -3.0, 3.0, "DCAz"};
81+
const AxisSpec axisNch{500, 0, 500, "Nch"};
82+
const AxisSpec axisCent{nCentBins, 0.0, 100.0, "Centrality (%)"}; // ------------- centrality bins
83+
histos.add("QA/BeforeCut/VtxZ", "Vertex Z", kTH1F, {axisVtxz});
84+
histos.add("QA/AfterCut/VtxZ", "Vertex Z", kTH1F, {axisVtxz});
85+
histos.add("QA/BeforeCut/Cent", "Centrality", kTH1F, {axisCent});
86+
histos.add("QA/AfterCut/Cent", "Centrality", kTH1F, {axisCent});
87+
histos.add("QA/BeforeCut/Eta", "Eta", kTH1F, {axisEta});
88+
histos.add("QA/AfterCut/Eta", "Eta", kTH1F, {axisEta});
89+
histos.add("QA/BeforeCut/Pt", "Pt", kTH1F, {axisPt});
90+
histos.add("QA/AfterCut/Pt", "Pt", kTH1F, {axisPt});
91+
histos.add("QA/BeforeCut/Phi", "Phi", kTH1F, {axisPhi});
92+
histos.add("QA/AfterCut/Phi", "Phi", kTH1F, {axisPhi});
93+
histos.add("QA/BeforeCut/DcaXY", "DCAxy", kTH1F, {axisdcaXY});
94+
histos.add("QA/AfterCut/DcaXY", "DCAxy", kTH1F, {axisdcaXY});
95+
histos.add("QA/BeforeCut/DcaZ", "DCAz", kTH1F, {axisdcaZ});
96+
histos.add("QA/AfterCut/DcaZ", "DCAz", kTH1F, {axisdcaZ});
97+
histos.add("hNch", "Nch", kTH1F, {axisNch});
98+
histos.add("h2_DcaZ", "DCA_{Z}", kTH2D, {{axisPt}, {axisdcaZ}});
99+
histos.add("h2_DcaXY", "DCA_{XY}", kTH2D, {{axisPt}, {axisdcaXY}});
100+
histos.add("hEventCounter", "Number of events vs centrality", kTH1F, {axisCent});
101+
histos.add("p_a", "<A> vs centrality", kTProfile, {axisCent});
102+
histos.add("p_b", "<B> vs centrality", kTProfile, {axisCent});
103+
histos.add("p_a2", "<A^{2}> vs centrality", kTProfile, {axisCent});
104+
histos.add("p_b2", "<B^{2}> vs centrality", kTProfile, {axisCent});
105+
histos.add("p_ab", "<AB> vs centrality", kTProfile, {axisCent});
106+
histos.add("p_asumb", "<A+B> vs centrality", kTProfile, {axisCent});
107+
}
108+
109+
//---------- Filters
110+
Filter ptFilter = (aod::track::pt > ptMinCut) && (aod::track::pt < ptMaxCut);
111+
Filter etaFilter = nabs(aod::track::eta) < etaCut;
112+
Filter posZFilter = nabs(aod::collision::posZ) < vtxZcut;
113+
114+
using MyColsData = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>;
115+
using MyTracksData = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA>;
116+
using MyFilteredTracksData = soa::Filtered<MyTracksData>;
117+
118+
void process(MyColsData::iterator const& col, MyFilteredTracksData const& tracks)
119+
{
120+
histos.fill(HIST("QA/BeforeCut/VtxZ"), col.posZ());
121+
float cent = -1.0f;
122+
if (cFT0M) {
123+
cent = col.centFT0M();
124+
}
125+
if (cFT0C) {
126+
cent = col.centFT0C();
127+
// if (!track.isGlobalTrack()) continue;
128+
}
129+
if (cent < 0) {
130+
return;
131+
}
132+
133+
histos.fill(HIST("QA/BeforeCut/Cent"), cent);
134+
if (!col.sel8()) {
135+
return;
136+
}
137+
if (std::abs(col.posZ()) > vtxZcut) {
138+
return;
139+
}
140+
if (cfgNoSameBunchPileup && !col.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) {
141+
return;
142+
}
143+
if (cfgEvSelUseGoodZvtxFT0vsPV && !col.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) {
144+
return;
145+
}
146+
if (cfgUseGoodITSLayerAllCut && !col.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) {
147+
return;
148+
}
149+
150+
histos.fill(HIST("hEventCounter"), cent);
151+
histos.fill(HIST("QA/AfterCut/VtxZ"), col.posZ());
152+
histos.fill(HIST("QA/AfterCut/Cent"), cent);
153+
154+
double a = 0.0;
155+
double b = 0.0;
156+
157+
// if (!track.isGlobalTrack()) continue;
158+
for (const auto& track : tracks) {
159+
160+
histos.fill(HIST("QA/BeforeCut/Eta"), track.eta());
161+
histos.fill(HIST("QA/BeforeCut/Pt"), track.pt());
162+
histos.fill(HIST("QA/BeforeCut/Phi"), track.phi());
163+
histos.fill(HIST("QA/BeforeCut/DcaXY"), track.dcaXY());
164+
histos.fill(HIST("QA/BeforeCut/DcaZ"), track.dcaZ());
165+
166+
// Track quality cuts
167+
168+
if (requireITS && !track.hasITS()) {
169+
continue;
170+
}
171+
if (requireTPC && !track.hasTPC()) {
172+
continue;
173+
}
174+
if (track.itsNCls() < itsNClsCut) {
175+
continue;
176+
}
177+
if (track.tpcNClsCrossedRows() < tpcCrossCut) {
178+
continue;
179+
}
180+
if (track.tpcCrossedRowsOverFindableCls() < crossedRowsOverFindableCut) {
181+
continue;
182+
}
183+
if (std::abs(track.dcaZ()) > dcaZCut) {
184+
continue;
185+
}
186+
if (std::abs(track.dcaXY()) > dcaXYCut) {
187+
continue;
188+
}
189+
if (track.tpcChi2NCl() > tpcChiCut) {
190+
continue;
191+
}
192+
if (track.itsChi2NCl() > itsChiCut) {
193+
continue;
194+
}
195+
if (std::abs(track.eta()) > etaCut) {
196+
continue;
197+
}
198+
if (requireInnerITS) {
199+
auto itsMap = track.itsClusterMap();
200+
if (((itsMap & (1 << 0)) == 0) &&
201+
((itsMap & (1 << 1)) == 0) &&
202+
((itsMap & (1 << 2)) == 0)) {
203+
continue;
204+
}
205+
}
206+
207+
// After cuts QA
208+
histos.fill(HIST("QA/AfterCut/Eta"), track.eta());
209+
histos.fill(HIST("QA/AfterCut/Pt"), track.pt());
210+
histos.fill(HIST("QA/AfterCut/Phi"), track.phi());
211+
histos.fill(HIST("QA/AfterCut/DcaXY"), track.dcaXY());
212+
histos.fill(HIST("QA/AfterCut/DcaZ"), track.dcaZ());
213+
histos.fill(HIST("h2_DcaZ"), track.pt(), track.dcaZ());
214+
histos.fill(HIST("h2_DcaXY"), track.pt(), track.dcaXY());
215+
a++; // A-nch, B =pt
216+
b += track.pt();
217+
}
218+
219+
// ---- Fill TProfiles (once per event)
220+
histos.fill(HIST("p_a"), cent, a);
221+
histos.fill(HIST("p_b"), cent, b);
222+
histos.fill(HIST("p_a2"), cent, a * a);
223+
histos.fill(HIST("p_b2"), cent, b * b);
224+
histos.fill(HIST("p_ab"), cent, a * b);
225+
histos.fill(HIST("p_asumb"), cent, a + b);
226+
}
227+
};
228+
229+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
230+
{
231+
return WorkflowSpec{adaptAnalysisTask<MultAndPtFluctuations>(cfgc)};
232+
}

PWGDQ/Core/MixingLibrary.cxx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,14 @@ void o2::aod::dqmixing::SetUpMixing(MixingHandler* mh, const char* mixingVarible
7777
std::vector<float> fCentFT0CLimsHashing = {0.0f, 2.5f, 5.0f, 7.5f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f};
7878
mh->AddMixingVariable(VarManager::kCentFT0C, fCentFT0CLimsHashing);
7979
}
80+
if (nameStr == "CentralityFT0C7") {
81+
std::vector<float> fCentFT0CLimsHashing = {0.0f, 5.0f, 10.0f, 15.0f, 20.0f, 25.0f, 30.0f, 35.0f, 40.0f, 60.0f, 90.0f};
82+
mh->AddMixingVariable(VarManager::kCentFT0C, fCentFT0CLimsHashing);
83+
}
84+
if (nameStr == "CentralityFT0C8") {
85+
std::vector<float> fCentFT0CLimsHashing = {0.0f, 10.0f, 20.0f, 30.0f, 40.0f, 60.0f, 90.0f};
86+
mh->AddMixingVariable(VarManager::kCentFT0C, fCentFT0CLimsHashing);
87+
}
8088
if (nameStr == "Mult1") {
8189
std::vector<float> fMultLimsHashing = {0.0f, 10.0f, 20.0f, 40.0f, 60.0f, 80.0f, 100.0f, 120.0f, 160.0f, 350.0f};
8290
mh->AddMixingVariable(VarManager::kVtxNcontrib, fMultLimsHashing);
@@ -240,7 +248,7 @@ void o2::aod::dqmixing::SetUpMixingFromJSON(MixingHandler* mh, const char* json)
240248
const auto& lims = obj["LimsHashing"];
241249
std::vector<float> limits;
242250
limits.reserve(lims.Size());
243-
for (auto& v : lims.GetArray()) {
251+
for (const auto& v : lims.GetArray()) {
244252
limits.push_back(v.GetFloat());
245253
}
246254

PWGEM/Dilepton/TableProducer/filterEoI.cxx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
#include "Common/Core/TableHelper.h"
2121

22-
#include <Framework/ASoAHelpers.h>
2322
#include <Framework/AnalysisDataModel.h>
2423
#include <Framework/AnalysisHelpers.h>
2524
#include <Framework/AnalysisTask.h>
@@ -29,7 +28,6 @@
2928
#include <Framework/InitContext.h>
3029
#include <Framework/runDataProcessing.h>
3130

32-
#include <Math/Vector4D.h>
3331
#include <TH1.h>
3432

3533
#include <cstdint>

PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
#include <cstdint>
4949
#include <map>
5050
#include <string>
51-
#include <string_view>
5251
#include <tuple>
5352
#include <unordered_map>
5453
#include <utility>

PWGEM/Dilepton/Tasks/testPV.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <CCDB/BasicCCDBManager.h>
2121
#include <Framework/AnalysisDataModel.h>
22+
#include <Framework/AnalysisHelpers.h>
2223
#include <Framework/AnalysisTask.h>
2324
#include <Framework/Configurable.h>
2425
#include <Framework/HistogramRegistry.h>
@@ -28,6 +29,7 @@
2829

2930
#include <TH1.h>
3031

32+
#include <cstdint>
3133
#include <string>
3234

3335
struct testPV {

PWGEM/PhotonMeson/Tasks/pcmQC.cxx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@
7373
#include <string>
7474
#include <string_view>
7575
#include <unordered_map>
76-
#include <unordered_set>
7776
#include <vector>
7877

7978
using namespace o2;

0 commit comments

Comments
 (0)