@@ -129,6 +129,8 @@ std::array<float, 3> kDCAzResolutionParams[static_cast<int>(Species::kAllSpecies
129129 {0.0021 , 1.1122 , 0.0021 } // Pr
130130};
131131
132+ std::array<float , 2 > kHePidTrkParams = {0.1593 , -0.0445 };
133+
132134} // namespace
133135
134136struct He3HadCandidate {
@@ -310,16 +312,20 @@ struct he3HadronFemto {
310312 {" He3/h2dEdxHe3candidates" , " dEdx distribution; #it{p} (GeV/#it{c}); dE/dx (a.u.)" , {HistType::kTH2F , {{200 , -5 .0f , 5 .0f }, {100 , 0 .0f , 2000 .0f }}}},
311313 {" He3/h2NsigmaHe3TPC" , " NsigmaHe3 TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(^{3}He)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
312314 {" He3/h2NsigmaHe3TPC_preselection" , " NsigmaHe3 TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(^{3}He)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
313- {" He3/h2NSigmaHe3ITS_preselection" , " NsigmaHe3 ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} ^{3}He" , {HistType::kTH2F , {{50 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
314315 {" He3/h2NSigmaHe3ITS" , " NsigmaHe3 ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} ^{3}He" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
316+ {" He3/h2NSigmaHe3ITS_preselection" , " NsigmaHe3 ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} ^{3}He" , {HistType::kTH2F , {{50 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
315317
316318 {" Had/hNClsHadITS" , " had;N_{ITS} Cluster" , {HistType::kTH1F , {{20 , -10 .0f , 10 .0f }}}},
317319 {" Had/hChi2NClHadITS" , " had;Chi2_{ITS} Ncluster" , {HistType::kTH1F , {{100 , 0 , 100 .0f }}}},
318320 {" Had/hHadronPt" , " had; #it{p}_{T} (GeV/#it{c})" , {HistType::kTH1F , {{120 , -3 .0f , 3 .0f }}}},
319321 {" Had/h2NsigmaHadronTPC" , " NsigmaHadron TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
320- {" Had/h2NsigmaHadronTPC_preselection" , " NsigmaHe3 TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
322+ {" Had/h2NsigmaHadronTPC_preselection" , " NsigmaHadron TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
323+ {" Had/h2NsigmaHadronTPC_mcBackground" , " NsigmaHadron TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
324+ {" Had/h2NsigmaHadronTPC_mcSignal" , " NsigmaHadron TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
321325 {" Had/h2NsigmaHadronTOF" , " NsigmaHadron TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
322326 {" Had/h2NsigmaHadronTOF_preselection" , " NsigmaHadron TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
327+ {" Had/h2NsigmaHadronTOF_mcBackground" , " NsigmaHadron TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
328+ {" Had/h2NsigmaHadronTOF_mcSignal" , " NsigmaHadron TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(had)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
323329 },
324330 OutputObjHandlingPolicy::AnalysisObject,
325331 false ,
@@ -468,6 +474,15 @@ struct he3HadronFemto {
468474 return true ;
469475 }
470476
477+ template <typename Ttrack>
478+ float correctPtHe3TrackedAsTriton (const Ttrack& candidate)
479+ {
480+ if (candidate.pt () < 2.5 && candidate.pidForTracking () == o2::track::PID::Triton)
481+ return candidate.pt () * 2 . * (1 . - kHePidTrkParams [0 ] - kHePidTrkParams [1 ] * candidate.pt () * 2 .);
482+
483+ return candidate.pt () * 2 .;
484+ }
485+
471486 float computeNsigmaDCA (const float pt, const float dca, const int iSpecies, const char * dcaType = " xy" )
472487 {
473488
@@ -1330,6 +1345,65 @@ struct he3HadronFemto {
13301345 }
13311346 }
13321347
1348+ if (!selectTrack (track, Species::kHe3 ) || !selectDcaNsigmaCut (track, Species::kHe3 ))
1349+ continue ;
1350+
1351+ const float ptHe3Corrected = correctPtHe3TrackedAsTriton (track);
1352+
1353+ mQaRegistry .fill (HIST (" He3/hHe3Pt" ), ptHe3Corrected);
1354+ mQaRegistry .fill (HIST (" He3/hDCAxyHe3" ), track.dcaXY ());
1355+ mQaRegistry .fill (HIST (" He3/hDCAzHe3" ), track.dcaZ ());
1356+
1357+ bool heliumPID = track.pidForTracking () == o2::track::PID::Helium3 || track.pidForTracking () == o2::track::PID::Alpha;
1358+ float correctedTPCinnerParam = (heliumPID && settingCompensatePIDinTracking) ? track.tpcInnerParam () / 2 .f : track.tpcInnerParam ();
1359+ if (correctedTPCinnerParam < settingCutRigidityMinHe3) {
1360+ continue ;
1361+ }
1362+
1363+ const float nSigmaHe3 = computeNSigmaHe3 (track);
1364+ mQaRegistry .fill (HIST (" He3/h2NsigmaHe3TPC_preselection" ), track.sign () * ptHe3Corrected, nSigmaHe3);
1365+ }
1366+ }
1367+ PROCESS_SWITCH (he3HadronFemto, processPurity, " Process for purity studies" , false );
1368+
1369+ void processPurityMc (const CollisionsFullMC::iterator& collision, const TrackCandidatesMC& tracks, const aod::BCsWithTimestamps& bcs, const aod::McParticles& /* mcParticles*/ , const aod::McTrackLabels& /* mcTrackLabels*/ )
1370+ {
1371+ if (!selectCollision</* isMC*/ false >(collision, bcs))
1372+ return ;
1373+
1374+ for (const auto & track : tracks) {
1375+
1376+ if (!track.has_mcParticle ())
1377+ continue ;
1378+ const auto & particle = track.mcParticle_as <aod::McParticles>();
1379+
1380+ if (!selectTrack (track, Species::kHad ))
1381+ continue ;
1382+
1383+ if (selectDcaNsigmaCut (track, Species::kHad )) {
1384+ mQaRegistry .fill (HIST (" Had/hHadronPt" ), track.pt ());
1385+
1386+ const float tpcNSigmaHad = computeTPCNSigmaHadron (track);
1387+ mQaRegistry .fill (HIST (" Had/h2NsigmaHadronTPC_preselection" ), track.sign () * track.tpcInnerParam (), tpcNSigmaHad);
1388+
1389+ if (std::abs (particle.pdgCode ()) != settingHadPDGCode) {
1390+ mQaRegistry .fill (HIST (" Had/h2NsigmaHadronTPC_mcBackground" ), track.sign () * track.tpcInnerParam (), tpcNSigmaHad);
1391+ } else {
1392+ mQaRegistry .fill (HIST (" Had/h2NsigmaHadronTPC_mcSignal" ), track.sign () * track.tpcInnerParam (), tpcNSigmaHad);
1393+ }
1394+
1395+ if (track.hasTOF ()) {
1396+ const float tofNSigmaHad = computeTOFNSigmaHadron (track);
1397+ mQaRegistry .fill (HIST (" Had/h2NsigmaHadronTOF_preselection" ), track.sign () * track.pt (), tofNSigmaHad);
1398+
1399+ if (std::abs (particle.pdgCode ()) != settingHadPDGCode) {
1400+ mQaRegistry .fill (HIST (" Had/h2NsigmaHadronTOF_mcBackground" ), track.sign () * track.tpcInnerParam (), tofNSigmaHad);
1401+ } else {
1402+ mQaRegistry .fill (HIST (" Had/h2NsigmaHadronTOF_mcSignal" ), track.sign () * track.tpcInnerParam (), tofNSigmaHad);
1403+ }
1404+ }
1405+ }
1406+
13331407 if (!selectTrack (track, Species::kHe3 ) || !selectDcaNsigmaCut (track, Species::kHe3 ))
13341408 continue ;
13351409
@@ -1347,7 +1421,7 @@ struct he3HadronFemto {
13471421 mQaRegistry .fill (HIST (" He3/h2NsigmaHe3TPC_preselection" ), track.sign () * 2 * track.pt (), nSigmaHe3);
13481422 }
13491423 }
1350- PROCESS_SWITCH (he3HadronFemto, processPurity , " Process for purity studies" , false );
1424+ PROCESS_SWITCH (he3HadronFemto, processPurityMc , " Process for purity studies mc " , false );
13511425};
13521426
13531427WorkflowSpec defineDataProcessing (const ConfigContext& cfgc)
0 commit comments