|
18 | 18 | #include "PWGLF/DataModel/LFStrangenessTables.h" |
19 | 19 |
|
20 | 20 | #include "Common/CCDB/EventSelectionParams.h" |
| 21 | +#include "Common/Core/TrackSelection.h" |
| 22 | +#include "Common/Core/TrackSelectionDefaults.h" |
21 | 23 | #include "Common/DataModel/Centrality.h" |
22 | 24 | #include "Common/DataModel/EventSelection.h" |
23 | 25 | #include "Common/DataModel/McCollisionExtra.h" |
@@ -127,8 +129,7 @@ static constexpr TrackSelectionFlags::flagtype TrackSelectionTpc = |
127 | 129 | TrackSelectionFlags::kTPCNCls | |
128 | 130 | TrackSelectionFlags::kTPCCrossedRowsOverNCls | |
129 | 131 | TrackSelectionFlags::kTPCChi2NDF; |
130 | | -static constexpr TrackSelectionFlags::flagtype TrackSelectionDca = |
131 | | - TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy; |
| 132 | +// static constexpr TrackSelectionFlags::flagtype TrackSelectionDca = TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy; |
132 | 133 | static constexpr TrackSelectionFlags::flagtype TrackSelectionDcaxyOnly = |
133 | 134 | TrackSelectionFlags::kDCAxy; |
134 | 135 |
|
@@ -159,7 +160,7 @@ struct HeavyionMultiplicity { |
159 | 160 |
|
160 | 161 | Configurable<float> etaRange{"etaRange", 1.0f, "Eta range to consider"}; |
161 | 162 | Configurable<float> vtxRange{"vtxRange", 10.0f, "Vertex Z range to consider"}; |
162 | | - Configurable<float> dcaZ{"dcaZ", 0.2f, "Custom DCA Z cut (ignored if negative)"}; |
| 163 | + Configurable<float> dcaZ{"dcaZ", 0.2f, "Custom DCA Z cut"}; |
163 | 164 | Configurable<float> v0radiusK0SCut{"v0radiusK0SCut", 1.2f, "K0S RadiusCut"}; |
164 | 165 | Configurable<float> dcapostopvK0SCut{"dcapostopvK0SCut", 0.05f, "K0S dcapostopvCut"}; |
165 | 166 | Configurable<float> dcanegtopvK0SCut{"dcanegtopvK0SCut", 0.05f, "K0S dcanegtopvCut"}; |
@@ -218,6 +219,14 @@ struct HeavyionMultiplicity { |
218 | 219 | Configurable<bool> selectCollidingBCs{"selectCollidingBCs", true, "BC analysis: select colliding BCs"}; |
219 | 220 | Configurable<bool> selectTVX{"selectTVX", true, "BC analysis: select TVX"}; |
220 | 221 | Configurable<bool> selectFV0OrA{"selectFV0OrA", true, "BC analysis: select FV0OrA"}; |
| 222 | + Configurable<bool> isApplyDCAstandardcuts{"isApplyDCAstandardcuts", true, "Apply DCA standard run 2 cuts"}; |
| 223 | + Configurable<bool> isApplyDCAcustomcuts{"isApplyDCAcustomcuts", false, "Apply DCA custom cuts"}; |
| 224 | + Configurable<float> cDcazP0{"cDcazP0", 1.0f, "dcaz parameter0"}; |
| 225 | + Configurable<float> cDcazP1{"cDcazP1", 1.0f, "dcaz parameter1"}; |
| 226 | + Configurable<float> cDcazP2{"cDcazP2", 1.0f, "dcaz parameter2"}; |
| 227 | + Configurable<float> cDcaxyP0{"cDcaxyP0", 1.0f, "dcaxy parameter0"}; |
| 228 | + Configurable<float> cDcaxyP1{"cDcaxyP1", 1.0f, "dcaxy parameter1"}; |
| 229 | + Configurable<float> cDcaxyP2{"cDcaxyP2", 1.0f, "dcaxy parameter2"}; |
221 | 230 |
|
222 | 231 | void init(InitContext const&) |
223 | 232 | { |
@@ -250,6 +259,18 @@ struct HeavyionMultiplicity { |
250 | 259 | x->SetBinLabel(9, "ApplyNoHighMultCollInPrevRof"); |
251 | 260 | x->SetBinLabel(10, "INEL > 0"); |
252 | 261 |
|
| 262 | + if (doprocessDCAvsptData) { |
| 263 | + histos.add("hdcaxyvspt", "dca to pv in the xy plane", kTH2D, {dcaAxis, axisPt}, false); |
| 264 | + histos.add("hdcazvspt", "dca to pv in the z axis", kTH2D, {dcaAxis, axisPt}, false); |
| 265 | + } |
| 266 | + |
| 267 | + if (doprocessDCAvsptMC) { |
| 268 | + histos.add("hdcaxyvsptMC", "dca to pv in the xy plane MC", kTH2D, {dcaAxis, axisPt}, false); |
| 269 | + histos.add("hdcazvsptMC", "dca to pv in the z axis MC", kTH2D, {dcaAxis, axisPt}, false); |
| 270 | + histos.add("hdcaxyvsptMCprimary", "dca to pv in the xy plane MC primary particles", kTH2D, {dcaAxis, axisPt}, false); |
| 271 | + histos.add("hdcazvsptMCprimary", "dca to pv in the z axis MC primary particles", kTH2D, {dcaAxis, axisPt}, false); |
| 272 | + } |
| 273 | + |
253 | 274 | if (doprocessData) { |
254 | 275 | histos.add("hdcaxy", "dca to pv in the xy plane", kTH1D, {dcaAxis}, false); |
255 | 276 | histos.add("hdcaz", "dca to pv in the z axis", kTH1D, {dcaAxis}, false); |
@@ -484,6 +505,12 @@ struct HeavyionMultiplicity { |
484 | 505 | template <typename CheckTrack> |
485 | 506 | bool isTrackSelected(CheckTrack const& track) |
486 | 507 | { |
| 508 | + if (isApplyDCAcustomcuts) { |
| 509 | + if (std::abs(track.dcaXY()) > cDcaxyP0 + cDcaxyP1 / pow(track.pt(), cDcaxyP2)) |
| 510 | + return false; |
| 511 | + if (std::abs(track.dcaZ()) > cDcazP0 + cDcazP1 / pow(track.pt(), cDcazP2)) |
| 512 | + return false; |
| 513 | + } |
487 | 514 | if (std::abs(track.eta()) >= etaRange) { |
488 | 515 | return false; |
489 | 516 | } |
@@ -522,8 +549,57 @@ struct HeavyionMultiplicity { |
522 | 549 | ncheckbit(aod::track::trackCutFlag, TrackSelectionIts) && |
523 | 550 | ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC), |
524 | 551 | ncheckbit(aod::track::trackCutFlag, TrackSelectionTpc), true) && |
525 | | - ifnode(dcaZ.node() > 0.f, nabs(aod::track::dcaZ) <= dcaZ && ncheckbit(aod::track::trackCutFlag, TrackSelectionDcaxyOnly), |
526 | | - ncheckbit(aod::track::trackCutFlag, TrackSelectionDca)); |
| 552 | + ifnode(isApplyDCAstandardcuts.node(), nabs(aod::track::dcaZ) <= dcaZ && ncheckbit(aod::track::trackCutFlag, TrackSelectionDcaxyOnly), true); |
| 553 | + |
| 554 | + void processDCAvsptData(CollisionDataTable::iterator const& cols, FilTrackDataTable const& tracks) |
| 555 | + { |
| 556 | + if (!isEventSelected(cols)) { |
| 557 | + return; |
| 558 | + } |
| 559 | + |
| 560 | + for (const auto& track : tracks) { |
| 561 | + |
| 562 | + if (!isTrackSelected(track)) |
| 563 | + continue; |
| 564 | + |
| 565 | + histos.fill(HIST("hdcaxyvspt"), track.dcaXY(), track.pt()); |
| 566 | + histos.fill(HIST("hdcazvspt"), track.dcaZ(), track.pt()); |
| 567 | + } |
| 568 | + } |
| 569 | + |
| 570 | + void processDCAvsptMC(soa::Join<CollisionMCTrueTable, aod::McCollsExtra>::iterator const& mcCollision, CollisionMCRecTable const& RecCols, TrackMCTrueTable const&, FilTrackMCRecTable const& RecTracks) |
| 571 | + { |
| 572 | + |
| 573 | + for (const auto& RecCol : RecCols) { |
| 574 | + if (!isEventSelected(RecCol)) { |
| 575 | + continue; |
| 576 | + } |
| 577 | + if (RecCol.globalIndex() != mcCollision.bestCollisionIndex()) { |
| 578 | + continue; |
| 579 | + } |
| 580 | + |
| 581 | + auto recTracksPart = RecTracks.sliceBy(perCollision, RecCol.globalIndex()); |
| 582 | + |
| 583 | + for (const auto& Rectrack : recTracksPart) { |
| 584 | + |
| 585 | + if (!isTrackSelected(Rectrack)) |
| 586 | + continue; |
| 587 | + |
| 588 | + if (!Rectrack.has_mcParticle()) |
| 589 | + continue; |
| 590 | + |
| 591 | + histos.fill(HIST("hdcaxyvsptMC"), Rectrack.dcaXY(), Rectrack.pt()); |
| 592 | + histos.fill(HIST("hdcazvsptMC"), Rectrack.dcaZ(), Rectrack.pt()); |
| 593 | + |
| 594 | + auto mcpart = Rectrack.mcParticle(); |
| 595 | + |
| 596 | + if (!isGenTrackSelected(mcpart)) { |
| 597 | + histos.fill(HIST("hdcaxyvsptMCprimary"), Rectrack.dcaXY(), Rectrack.pt()); |
| 598 | + histos.fill(HIST("hdcazvsptMCprimary"), Rectrack.dcaZ(), Rectrack.pt()); |
| 599 | + } |
| 600 | + } |
| 601 | + } |
| 602 | + } |
527 | 603 |
|
528 | 604 | void processData(CollisionDataTable::iterator const& cols, FilTrackDataTable const& tracks) |
529 | 605 | { |
@@ -1033,6 +1109,8 @@ struct HeavyionMultiplicity { |
1033 | 1109 | histos.fill(HIST("BcCentFT0MHist"), multbc.centFT0M()); |
1034 | 1110 | } |
1035 | 1111 |
|
| 1112 | + PROCESS_SWITCH(HeavyionMultiplicity, processDCAvsptData, "process DCA data", false); |
| 1113 | + PROCESS_SWITCH(HeavyionMultiplicity, processDCAvsptMC, "process DCA MC", false); |
1036 | 1114 | PROCESS_SWITCH(HeavyionMultiplicity, processData, "process data CentFT0C", false); |
1037 | 1115 | PROCESS_SWITCH(HeavyionMultiplicity, processCorrelation, "do correlation study in data", false); |
1038 | 1116 | PROCESS_SWITCH(HeavyionMultiplicity, processMonteCarlo, "process MC CentFT0C", false); |
|
0 commit comments