Skip to content

Commit bd5bbe8

Browse files
authored
Update studyPnch.cxx
1 parent b11906d commit bd5bbe8

File tree

1 file changed

+187
-10
lines changed

1 file changed

+187
-10
lines changed

PWGLF/Tasks/GlobalEventProperties/studyPnch.cxx

Lines changed: 187 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,6 @@ using ColMCRecTable = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Co
5757
using TrackMCRecTable = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>;
5858
using FilTrackMCRecTable = soa::Filtered<TrackMCRecTable>;
5959

60-
enum {
61-
kTrackTypebegin = 0,
62-
kGlobalplusITS = 1,
63-
kGlobalonly,
64-
kITSonly,
65-
kTrackTypeend
66-
};
67-
6860
enum {
6961
kGenpTbegin = 0,
7062
kNoGenpTVar = 1,
@@ -89,7 +81,6 @@ AxisSpec axisEvent{10, 0.5, 10.5, "#Event", "EventAxis"};
8981
AxisSpec axisVtxZ{40, -20, 20, "Vertex Z", "VzAxis"};
9082
AxisSpec axisEta{40, -2, 2, "#eta", "EtaAxis"};
9183
AxisSpec axisPhi{629, 0, o2::constants::math::TwoPI, "#phi"};
92-
AxisSpec axisTrackType = {kTrackTypeend - 1, +kTrackTypebegin + 0.5, +kTrackTypeend - 0.5, "", "TrackTypeAxis"};
9384
AxisSpec axisGenPtVary = {kGenpTend - 1, +kGenpTbegin + 0.5, +kGenpTend - 0.5, "", "GenpTVaryAxis"};
9485
auto static constexpr kMinCharge = 3.f;
9586
auto static constexpr kMinpTcut = 0.1f;
@@ -114,5 +105,191 @@ struct StudyPnch {
114105
ConfigurableAxis ft0cMultHistBin{"ft0cMultHistBin", {501, -0.5, 500.5}, ""};
115106
ConfigurableAxis ptHistBin{"ptHistBin", {200, 0., 20.}, ""};
116107

108+
Configurable<bool> isApplyTFcut{"isApplyTFcut", true, "Enable TimeFrameBorder cut"};
109+
Configurable<bool> isApplyITSROcut{"isApplyITSROcut", true, "Enable ITS ReadOutFrameBorder cut"};
117110
Configurable<bool> isApplySameBunchPileup{"isApplySameBunchPileup", true, "Enable SameBunchPileup cut"};
118-
};
111+
Configurable<bool> isApplyInelgt0{"isApplyInelgt0", false, "Enable INEL > 0 condition"};
112+
Configurable<bool> isApplyExtraPhiCut{"isApplyExtraPhiCut", false, "Enable extra phi cut"};
113+
114+
void init(InitContext const&)
115+
{
116+
AxisSpec axisMult = {multHistBin, "Mult", "MultAxis"};
117+
AxisSpec axisPV = {pvHistBin, "PV", "PVAxis"};
118+
AxisSpec axisFv0aMult = {fv0aMultHistBin, "fv0a", "FV0AMultAxis"};
119+
AxisSpec axisFt0aMult = {ft0aMultHistBin, "ft0a", "FT0AMultAxis"};
120+
AxisSpec axisFt0cMult = {ft0cMultHistBin, "ft0c", "FT0CMultAxis"};
121+
AxisSpec axisPt = {ptHistBin, "pT", "pTAxis"};
122+
123+
histos.add("EventHist", "EventHist", kTH1D, {axisEvent}, false);
124+
histos.add("VtxZHist", "VtxZHist", kTH1D, {axisVtxZ}, false);
125+
126+
auto hstat = histos.get<TH1>(HIST("EventHist"));
127+
auto* x = hstat->GetXaxis();
128+
x->SetBinLabel(1, "All events");
129+
x->SetBinLabel(2, "kIsTriggerTVX");
130+
x->SetBinLabel(3, "kNoTimeFrameBorder");
131+
x->SetBinLabel(4, "kNoITSROFrameBorder");
132+
x->SetBinLabel(5, "kNoSameBunchPileup"); // reject collisions in case of pileup with another collision in the same foundBC
133+
x->SetBinLabel(6, "INEL > 0");
134+
x->SetBinLabel(7, "|vz| < 10");
135+
136+
if (doprocessData || doprocessCorrelation || doprocessMonteCarlo) {
137+
histos.add("PhiVsEtaHist", "PhiVsEtaHist", kTH2F, {axisPhi, axisEta}, false);
138+
}
139+
if (doprocessData) {
140+
histos.add("hMultiplicityData", "hMultiplicityData", kTH1F, {axisMult}, true);
141+
}
142+
if (doprocessCorrelation) {
143+
histos.add("GlobalMult_vs_FT0A", "GlobalMult_vs_FT0A", kTH2F, {axisMult, axisFt0aMult}, true);
144+
histos.add("GlobalMult_vs_FT0C", "GlobalMult_vs_FT0C", kTH2F, {axisMult, axisFt0cMult}, true);
145+
histos.add("GlobalMult_vs_FV0A", "GlobalMult_vs_FV0A", kTH2F, {axisMult, axisFv0aMult}, true);
146+
histos.add("NPVtracks_vs_FT0C", "NPVtracks_vs_FT0C", kTH2F, {axisPV, axisFt0cMult}, true);
147+
histos.add("NPVtracks_vs_GlobalMult", "NPVtracks_vs_GlobalMult", kTH2F, {axisPV, axisMult}, true);
148+
}
149+
if (doprocessMonteCarlo) {
150+
histos.add("hMultiplicityMCrec", "hMultiplicityMCrec", kTH1F, {axisMult}, true);
151+
}
152+
if (doprocessEvtLossSigLossMC) {
153+
histos.add("MCEventHist", "MCEventHist", kTH1F, {axisEvent}, false);
154+
auto hstat = histos.get<TH1>(HIST("MCEventHist"));
155+
auto* x = hstat->GetXaxis();
156+
x->SetBinLabel(1, "All MC events");
157+
x->SetBinLabel(2, "MC events with atleast one reco event");
158+
}
159+
}
160+
161+
template <typename CheckCol>
162+
bool isEventSelected(CheckCol const& col)
163+
{
164+
histos.fill(HIST("EventHist"), 1);
165+
if (!col.selection_bit(o2::aod::evsel::kIsTriggerTVX)) {
166+
return false;
167+
}
168+
histos.fill(HIST("EventHist"), 2);
169+
if (isApplyTFcut && !col.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) {
170+
return false;
171+
}
172+
histos.fill(HIST("EventHist"), 3);
173+
if (isApplyITSROcut && !col.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) {
174+
return false;
175+
}
176+
histos.fill(HIST("EventHist"), 4);
177+
if (isApplySameBunchPileup && !col.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) {
178+
return false;
179+
}
180+
histos.fill(HIST("EventHist"), 5);
181+
if (isApplyInelgt0 && !col.isInelGt0()) {
182+
return false;
183+
}
184+
histos.fill(HIST("EventHist"), 6);
185+
if (std::abs(col.posZ()) >= vtxRange) {
186+
return;
187+
}
188+
histos.fill(HIST("EventHist"), 7);
189+
histos.fill(HIST("VtxZHist"), col.posZ());
190+
}
191+
192+
template <typename CheckTrack>
193+
bool isTrackSelected(CheckTrack const& track)
194+
{
195+
if (std::abs(track.eta()) >= etaRange) {
196+
return false;
197+
}
198+
if (isApplyExtraPhiCut && ((track.phi() > extraphicut1 && track.phi() < extraphicut2) || track.phi() <= extraphicut3 || track.phi() >= extraphicut4)) {
199+
return false;
200+
}
201+
return true;
202+
}
203+
204+
template <typename CheckGenTrack>
205+
bool isGenTrackSelected(CheckGenTrack const& track)
206+
{
207+
if (!track.isPhysicalPrimary()) {
208+
return false;
209+
}
210+
if (!track.producedByGenerator()) {
211+
return false;
212+
}
213+
auto pdgTrack = pdg->GetParticle(track.pdgCode());
214+
if (pdgTrack == nullptr) {
215+
return false;
216+
}
217+
if (std::abs(pdgTrack->Charge()) < kMinCharge) {
218+
return false;
219+
}
220+
if (std::abs(track.eta()) >= etaRange) {
221+
return false;
222+
}
223+
if (isApplyExtraPhiCut && ((track.phi() > extraphicut1 && track.phi() < extraphicut2) || track.phi() <= extraphicut3 || track.phi() >= extraphicut4)) {
224+
return false;
225+
}
226+
return true;
227+
}
228+
229+
template <typename countTrk>
230+
int countNTracks(countTrk const& tracks)
231+
{
232+
auto nTrk = 0;
233+
for (const auto& track : tracks) {
234+
if (!isTrackSelected(track)) {
235+
continue;
236+
}
237+
histos.fill(HIST("PhiVsEtaHist"), track.phi(), track.eta());
238+
nTrk++;
239+
}
240+
return nTrk;
241+
}
242+
243+
template <typename countTrk>
244+
int countGenTracks(countTrk const& tracks)
245+
{
246+
auto nTrk = 0;
247+
for (const auto& track : tracks) {
248+
if (!isTrackSelected(track)) {
249+
continue;
250+
}
251+
histos.fill(HIST("PhiVsEtaHist"), track.phi(), track.eta());
252+
nTrk++;
253+
}
254+
return nTrk;
255+
}
256+
257+
Filter fTrackSelectionITS = ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) &&
258+
ncheckbit(aod::track::trackCutFlag, TrackSelectionIts);
259+
Filter fTrackSelectionTPC = ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC),
260+
ncheckbit(aod::track::trackCutFlag, TrackSelectionTpc), true);
261+
Filter fTrackSelectionDCA = ifnode(dcaZ.node() > 0.f, nabs(aod::track::dcaZ) <= dcaZ && ncheckbit(aod::track::trackCutFlag, TrackSelectionDcaxyOnly),
262+
ncheckbit(aod::track::trackCutFlag, TrackSelectionDca));
263+
264+
void processData(CollisionDataTable::iterator const& cols, FilTrackDataTable const& tracks)
265+
{
266+
if (!isEventSelected(cols)) {
267+
return;
268+
}
269+
auto mult = countNTracks(tracks);
270+
histos.fill(HIST("hMultiplicityData"), mult);
271+
}
272+
273+
void processCorrelation(CollisionDataTable::iterator const& cols, FilTrackDataTable const& tracks)
274+
{
275+
if (!isEventSelected(cols)) {
276+
return;
277+
}
278+
auto mult = countNTracks(tracks);
279+
histos.fill(HIST("GlobalMult_vs_FT0A"), nchTracks, cols.multFT0A());
280+
histos.fill(HIST("GlobalMult_vs_FT0C"), nchTracks, cols.multFT0C());
281+
histos.fill(HIST("GlobalMult_vs_FV0A"), nchTracks, cols.multFV0A());
282+
histos.fill(HIST("NPVtracks_vs_FT0C"), cols.multNTracksPV(), cols.multFT0C());
283+
histos.fill(HIST("NPVtracks_vs_GlobalMult"), cols.multNTracksPV(), nchTracks);
284+
}
285+
286+
void processMonteCarlo(CollisionMCTrueTable::iterator const&, CollisionMCRecTable const& RecCols, TrackMCTrueTable const& GenParticles, FilTrackMCRecTable const& RecTracks)
287+
{
288+
for (const auto& RecCol : RecCols) {
289+
if (!isEventSelected(RecCol)) {
290+
continue;
291+
}
292+
auto recTracksPart = RecTracks.sliceBy(perCollision, RecCol.globalIndex());
293+
auto mult = countNTracks(recTracksPart);
294+
histos.fill(HIST("hMultiplicityMCrec"), mult);
295+
}

0 commit comments

Comments
 (0)