Skip to content

Commit 72def59

Browse files
authored
[PWGLF] f0980pbpbanalysis.cxx: adding ITS PID (#18486)
1 parent 3531bdd commit 72def59

1 file changed

Lines changed: 84 additions & 54 deletions

File tree

‎PWGLF/Tasks/Resonances/f0980pbpbanalysis.cxx‎

Lines changed: 84 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "Common/DataModel/Centrality.h"
1818
#include "Common/DataModel/EventSelection.h"
1919
#include "Common/DataModel/Multiplicity.h"
20+
#include "Common/DataModel/PIDResponseITS.h"
2021
#include "Common/DataModel/PIDResponseTOF.h"
2122
#include "Common/DataModel/PIDResponseTPC.h"
2223
#include "Common/DataModel/Qvectors.h"
@@ -38,6 +39,7 @@
3839
#include <Framework/OutputObjHeader.h>
3940
#include <Framework/SliceCache.h>
4041
#include <Framework/runDataProcessing.h>
42+
#include <ReconstructionDataFormats/PID.h>
4143

4244
#include <Math/Vector4D.h> // IWYU pragma: keep (do not replace with Math/Vector4Dfwd.h)
4345
#include <Math/Vector4Dfwd.h>
@@ -68,8 +70,9 @@ struct F0980pbpbanalysis {
6870
{},
6971
OutputObjHandlingPolicy::AnalysisObject};
7072

71-
Service<o2::ccdb::BasicCCDBManager> ccdb;
73+
Service<o2::ccdb::BasicCCDBManager> ccdb{};
7274
o2::ccdb::CcdbApi ccdbApi;
75+
o2::aod::ITSResponse itsResponse;
7376

7477
Configurable<std::string> cfgURL{"cfgURL", "http://alice-ccdb.cern.ch", "Address of the CCDB to browse"};
7578
Configurable<int64_t> ccdbNoLaterThan{"ccdbNoLaterThan", std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(), "Latest acceptable timestamp of creation for the object"};
@@ -130,6 +133,8 @@ struct F0980pbpbanalysis {
130133
Configurable<double> cfgPIDMaxTPCnSigmaPion{"cfgPIDMaxTPCnSigmaPion", 5.0, "TPC nSigma cut for Pion"}; // TPC
131134
Configurable<double> cfgPIDMaxTPCnSigmaPionS{"cfgPIDMaxTPCnSigmaPionS", 3.0, "TPC nSigma cut for Pion as a standalone"};
132135
Configurable<double> cfgPIDMaxTiednSigmaPion{"cfgPIDMaxTiednSigmaPion", 3.0, "Combined nSigma cut for Pion"};
136+
Configurable<bool> cfgPIDITSFlag{"cfgPIDITSFlag", true, "PID ITS flag"};
137+
Configurable<double> cfgPIDMaxITSnSigmaPion{"cfgPIDMaxITSnSigmaPion", 3.0, "ITS nSigma selection"};
133138
} PIDConfig;
134139

135140
// Flow Configurables
@@ -198,27 +203,27 @@ struct F0980pbpbanalysis {
198203
int nmode = FlowConfig.cfgQvecNMods;
199204
static constexpr double QvecAmpMin = 1e-4;
200205

201-
int detId;
202-
int refAId;
203-
int refBId;
206+
int detId = 0;
207+
int refAId = 4;
208+
int refBId = 5;
204209

205-
int qVecDetInd;
206-
int qVecRefAInd;
207-
int qVecRefBInd;
210+
int qVecDetInd = 0;
211+
int qVecRefAInd = 0;
212+
int qVecRefBInd = 0;
208213

209-
double eventPlaneDet;
210-
double eventPlaneRefA;
211-
double eventPlaneRefB;
214+
double eventPlaneDet = 0.;
215+
double eventPlaneRefA = 0.;
216+
double eventPlaneRefB = 0.;
212217

213-
float centrality;
218+
float centrality = 1.;
214219

215-
double angle;
216-
double relPhi;
217-
double relPhiRot;
218-
double relPhiMix;
220+
double angle = -1.;
221+
double relPhi = -1.;
222+
double relPhiRot = -1.;
223+
double relPhiMix = -1.;
219224

220225
// double massPi = o2::constants::physics::MassPionCharged;
221-
double massPtl;
226+
double massPtl = 0.;
222227

223228
int nTotalEvents = 0;
224229

@@ -231,6 +236,7 @@ struct F0980pbpbanalysis {
231236
PIDRun3 = 0,
232237
PIDRun2 = 1,
233238
PIDTest = 2,
239+
PIDAddITS = 3,
234240
};
235241

236242
enum PtlList {
@@ -262,19 +268,23 @@ struct F0980pbpbanalysis {
262268
{
263269
if (name.value == "FT0C") {
264270
return 0;
265-
} else if (name.value == "FT0A") {
271+
}
272+
if (name.value == "FT0A") {
266273
return 1;
267-
} else if (name.value == "FT0M") {
274+
}
275+
if (name.value == "FT0M") {
268276
return 2;
269-
} else if (name.value == "FV0A") {
277+
}
278+
if (name.value == "FV0A") {
270279
return 3;
271-
} else if (name.value == "TPCpos") {
280+
}
281+
if (name.value == "TPCpos") {
272282
return 4;
273-
} else if (name.value == "TPCneg") {
283+
}
284+
if (name.value == "TPCneg") {
274285
return 5;
275-
} else {
276-
return 0;
277286
}
287+
return 0;
278288
}
279289

280290
template <typename objType>
@@ -372,45 +382,45 @@ struct F0980pbpbanalysis {
372382
if (std::abs(collision.posZ()) > EventConfig.cfgEventCutVertex) {
373383
return 0;
374384
}
375-
if (QAConfig.cfgQAEventFlowCut && QA)
385+
if (QAConfig.cfgQAEventFlowCut && QA) {
376386
histos.fill(HIST("EventQA/hnEvents"), 1); // Vertex cut
377-
387+
}
378388
if (!collision.sel8()) {
379389
return 0;
380390
}
381-
if (QAConfig.cfgQAEventFlowCut && QA)
391+
if (QAConfig.cfgQAEventFlowCut && QA) {
382392
histos.fill(HIST("EventQA/hnEvents"), 2); // sel8 cut
383-
393+
}
384394
if (EventConfig.cfgEventGoodZvtxSel && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) {
385395
return 0;
386396
}
387-
if (QAConfig.cfgQAEventFlowCut && QA)
397+
if (QAConfig.cfgQAEventFlowCut && QA) {
388398
histos.fill(HIST("EventQA/hnEvents"), 3); // Good Zvtx cut
389-
399+
}
390400
if (EventConfig.cfgEventNSamePileupSel && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) {
391401
return 0;
392402
}
393-
if (QAConfig.cfgQAEventFlowCut && QA)
403+
if (QAConfig.cfgQAEventFlowCut && QA) {
394404
histos.fill(HIST("EventQA/hnEvents"), 4); // Same bunch pileup cut
395-
405+
}
396406
if (EventConfig.cfgEventNCollinTRSel && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
397407
return 0;
398408
}
399-
if (QAConfig.cfgQAEventFlowCut && QA)
409+
if (QAConfig.cfgQAEventFlowCut && QA) {
400410
histos.fill(HIST("EventQA/hnEvents"), 5); // Collision time range standard cut
401-
411+
}
402412
if (EventConfig.cfgEventQvecSel && (collision.qvecAmp()[detId] < QvecAmpMin || collision.qvecAmp()[refAId] < QvecAmpMin || collision.qvecAmp()[refBId] < QvecAmpMin)) {
403413
return 0;
404414
}
405-
if (QAConfig.cfgQAEventFlowCut && QA)
415+
if (QAConfig.cfgQAEventFlowCut && QA) {
406416
histos.fill(HIST("EventQA/hnEvents"), 6); // Qvector cut
407-
417+
}
408418
if (EventConfig.cfgEventOccupancySel && (collision.trackOccupancyInTimeRange() > EventConfig.cfgEventOccupancyMax || collision.trackOccupancyInTimeRange() < EventConfig.cfgEventOccupancyMin)) {
409419
return 0;
410420
}
411-
if (QAConfig.cfgQAEventFlowCut && QA)
421+
if (QAConfig.cfgQAEventFlowCut && QA) {
412422
histos.fill(HIST("EventQA/hnEvents"), 7); // Occupancy cut
413-
423+
}
414424
if (EventConfig.cfgEventCentMax < centrality) {
415425
return 0;
416426
}
@@ -423,9 +433,9 @@ struct F0980pbpbanalysis {
423433
return 0;
424434
}
425435
*/
426-
if (QAConfig.cfgQAEventFlowCut && QA)
436+
if (QAConfig.cfgQAEventFlowCut && QA) {
427437
histos.fill(HIST("EventQA/hnEvents"), 8); // Centrality cut
428-
438+
}
429439
if (EventConfig.cfgEventPVSel && std::abs(collision.posZ()) > EventConfig.cfgEventPV) {
430440
return 0;
431441
}
@@ -440,27 +450,31 @@ struct F0980pbpbanalysis {
440450
template <typename TrackType>
441451
bool trackSelected(const TrackType& track, const bool QA)
442452
{
443-
if (QAConfig.cfgQATrackCut && QA)
453+
if (QAConfig.cfgQATrackCut && QA) {
444454
fillQA(false, track, 3);
445-
if (QAConfig.cfgQATrackFlowCut && QA)
455+
}
456+
if (QAConfig.cfgQATrackFlowCut && QA) {
446457
histos.fill(HIST("TrackQA/hnTracks"), 0); // All passed
447458
//
448459
// Kinematic
460+
}
449461
if (std::abs(track.pt()) < TrackConfig.cfgTrackPtMin) {
450462
return 0;
451463
}
452464
if (std::abs(track.eta()) > TrackConfig.cfgTrackEtaMax) {
453465
return 0;
454466
}
455-
if (QAConfig.cfgQATrackFlowCut && QA)
467+
if (QAConfig.cfgQATrackFlowCut && QA) {
456468
histos.fill(HIST("TrackQA/hnTracks"), 1); // Kinematic
457469
// Primary Vertex(PV) Contributing to the PV fit
470+
}
458471
if (TrackConfig.cfgTrackIsPVContributor && !track.isPVContributor()) {
459472
return 0;
460473
}
461-
if (QAConfig.cfgQATrackFlowCut && QA)
474+
if (QAConfig.cfgQATrackFlowCut && QA) {
462475
histos.fill(HIST("TrackQA/hnTracks"), 2); // PV Contributor
463476
// Global Track without DCA
477+
}
464478
if (TrackConfig.cfgTrackIsGlobalWoDCATrack && !track.isGlobalTrackWoDCA()) {
465479
return 0;
466480
}
@@ -476,9 +490,10 @@ struct F0980pbpbanalysis {
476490
if (TrackConfig.cfgTrackITSChi2 > 0 && track.itsChi2NCl() > TrackConfig.cfgTrackITSChi2) {
477491
return 0;
478492
}
479-
if (QAConfig.cfgQATrackFlowCut && QA)
493+
if (QAConfig.cfgQATrackFlowCut && QA) {
480494
histos.fill(HIST("TrackQA/hnTracks"), 4); // GlobalWoDCATrack
481495
// DCA cuts
496+
}
482497
if (TrackConfig.cfgTrackDCArDepPTSel) {
483498
if (std::abs(track.dcaXY()) > (TrackConfig.cfgTrackDCArDepPTP0 + (TrackConfig.cfgTrackDCArDepPTExp / track.pt()))) {
484499
return 0;
@@ -571,6 +586,16 @@ struct F0980pbpbanalysis {
571586
return 0;
572587
}
573588
}
589+
} else if (cfgListPID == PIDList::PIDAddITS) {
590+
if (!track.hasTOF()) {
591+
return 0;
592+
}
593+
if ((getTpcNSigma(track) * getTpcNSigma(track) + getTofNSigma(track) * getTofNSigma(track)) > (PIDConfig.cfgPIDMaxTiednSigmaPion * PIDConfig.cfgPIDMaxTiednSigmaPion)) {
594+
return 0;
595+
}
596+
if (!PIDConfig.cfgPIDITSFlag || std::abs(itsResponse.nSigmaITS<o2::track::PID::Pion>(track)) > PIDConfig.cfgPIDMaxITSnSigmaPion) {
597+
return 0;
598+
}
574599
}
575600
if (QAConfig.cfgQATrackFlowCut && QA) {
576601
histos.fill(HIST("TrackQA/hnTracks"), 8); // PID
@@ -582,15 +607,22 @@ struct F0980pbpbanalysis {
582607
template <typename TrackType1, typename TrackType2>
583608
bool pairAngleSelection(const TrackType1& track1, const TrackType2& track2)
584609
{
585-
double pt1, pt2, pz1, pz2, p1, p2, angle;
610+
double pt1 = 0.;
611+
double pt2 = 0.;
612+
double pz1 = 0.;
613+
double pz2 = 0.;
614+
double p1 = 0.;
615+
double p2 = 0.;
616+
double angle12 = 0.;
617+
586618
pt1 = track1.pt();
587619
pt2 = track2.pt();
588620
pz1 = track1.pz();
589621
pz2 = track2.pz();
590622
p1 = track1.p();
591623
p2 = track2.p();
592-
angle = std::acos((pt1 * pt2 + pz1 * pz2) / (p1 * p2));
593-
if (PhiTestConfig.cfgPhiDeepAngleSel && angle < PhiTestConfig.cfgPhiDeepAngle) {
624+
angle12 = std::acos((pt1 * pt2 + pz1 * pz2) / (p1 * p2));
625+
if (PhiTestConfig.cfgPhiDeepAngleSel && angle12 < PhiTestConfig.cfgPhiDeepAngle) {
594626
return 0;
595627
}
596628
return 1;
@@ -601,19 +633,17 @@ struct F0980pbpbanalysis {
601633
{
602634
if (cfgListPtl == PtlList::PtlPion) {
603635
return track.tpcNSigmaPi();
604-
} else {
605-
return track.tpcNSigmaKa();
606636
}
637+
return track.tpcNSigmaKa();
607638
}
608639

609640
template <typename TrackType>
610641
float getTofNSigma(const TrackType& track)
611642
{
612643
if (cfgListPtl == PtlList::PtlPion) {
613644
return track.tofNSigmaPi();
614-
} else {
615-
return track.tofNSigmaKa();
616645
}
646+
return track.tofNSigmaKa();
617647
}
618648

619649
template <bool IsMC, typename CollisionType, typename TracksType>
@@ -634,9 +664,9 @@ struct F0980pbpbanalysis {
634664
if (!trackSelected(trk1, true)) {
635665
continue;
636666
}
637-
if (QAConfig.cfgQATrackCut)
667+
if (QAConfig.cfgQATrackCut) {
638668
fillQA(true, trk1, 3);
639-
669+
}
640670
if (!selectionPID(trk1, true)) {
641671
continue;
642672
}
@@ -721,7 +751,7 @@ struct F0980pbpbanalysis {
721751
if (c1.bcId() == c2.bcId()) {
722752
continue;
723753
}
724-
double eventPlaneDet = std::atan2(c1.qvecIm()[qVecDetInd], c1.qvecRe()[qVecDetInd]) / static_cast<float>(nmode);
754+
eventPlaneDet = std::atan2(c1.qvecIm()[qVecDetInd], c1.qvecRe()[qVecDetInd]) / static_cast<float>(nmode);
725755

726756
for (const auto& trk1 : t1) {
727757
if (!trackSelected(trk1, false)) {

0 commit comments

Comments
 (0)