|
19 | 19 | #include "Common/DataModel/PIDResponse.h" |
20 | 20 | #include "Common/DataModel/Centrality.h" |
21 | 21 | #include "Common/DataModel/EventSelection.h" |
| 22 | +#include "Common/DataModel/CollisionAssociationTables.h" |
22 | 23 | #include "Framework/AnalysisTask.h" |
23 | 24 | #include "Framework/ASoAHelpers.h" |
24 | 25 | #include "Framework/runDataProcessing.h" |
@@ -152,8 +153,8 @@ enum TrackLabels { |
152 | 153 | kPassV0KinCuts, |
153 | 154 | kPassV0TopoSel, |
154 | 155 | kAllSelPassed, |
155 | | - kNotPrimaryLambda, |
156 | | - kNotSecondaryLambda, |
| 156 | + kPrimaryLambda, |
| 157 | + kSecondaryLambda, |
157 | 158 | kLambdaDauNotMcParticle, |
158 | 159 | kLambdaNotPrPiMinus, |
159 | 160 | kAntiLambdaNotAntiPrPiPlus, |
@@ -242,14 +243,15 @@ struct LambdaTableProducer { |
242 | 243 | Configurable<bool> cIsGoodITSLayers{"cIsGoodITSLayers", false, "Good ITS Layers All"}; |
243 | 244 |
|
244 | 245 | // Tracks |
245 | | - Configurable<float> cTrackMinPt{"cTrackMinPt", 0.16, "p_{T} minimum"}; |
246 | | - Configurable<float> cTrackMaxPt{"cTrackMaxPt", 999.0, "p_{T} minimum"}; |
| 246 | + Configurable<float> cTrackMinPt{"cTrackMinPt", 0.15, "p_{T} minimum"}; |
| 247 | + Configurable<float> cTrackMaxPt{"cTrackMaxPt", 999.0, "p_{T} maximum"}; |
247 | 248 | Configurable<float> cTrackEtaCut{"cTrackEtaCut", 0.8, "Pseudorapidity cut"}; |
248 | | - Configurable<int> cMinTpcCrossedRows{"cMinTpcCrossedRows", 80, "TPC Min Crossed Rows"}; |
| 249 | + Configurable<int> cMinTpcCrossedRows{"cMinTpcCrossedRows", 70, "TPC Min Crossed Rows"}; |
249 | 250 | Configurable<float> cMinTpcCROverCls{"cMinTpcCROverCls", 0.8, "Tpc Min Crossed Rows Over Findable Clusters"}; |
250 | 251 | Configurable<float> cMaxTpcSharedClusters{"cMaxTpcSharedClusters", 0.4, "Tpc Max Shared Clusters"}; |
251 | 252 | Configurable<float> cMaxChi2Tpc{"cMaxChi2Tpc", 4, "Max Chi2 Tpc"}; |
252 | | - Configurable<double> cTpcNsigmaCut{"cTpcNsigmaCut", 5.0, "TPC NSigma Selection Cut"}; |
| 253 | + Configurable<double> cTpcNsigmaCut{"cTpcNsigmaCut", 3.0, "TPC NSigma Selection Cut"}; |
| 254 | + Configurable<bool> cRemoveAmbiguousTracks{"cRemoveAmbiguousTracks", false, "Remove Ambiguous Tracks"}; |
253 | 255 |
|
254 | 256 | // V0s |
255 | 257 | Configurable<double> cMinDcaProtonToPV{"cMinDcaProtonToPV", 0.02, "Minimum Proton DCAr to PV"}; |
@@ -436,8 +438,8 @@ struct LambdaTableProducer { |
436 | 438 | histos.get<TH1>(HIST("McGen/h1f_collisions_info"))->GetXaxis()->SetBinLabel(CollisionLabels::kTotCol, "kTotCol"); |
437 | 439 | histos.get<TH1>(HIST("McGen/h1f_collisions_info"))->GetXaxis()->SetBinLabel(CollisionLabels::kPassSelCol, "kPassSelCol"); |
438 | 440 | histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kTracksBeforeHasMcParticle, "kTracksBeforeHasMcParticle"); |
439 | | - histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kNotPrimaryLambda, "kNotPrimaryLambda"); |
440 | | - histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kNotSecondaryLambda, "kNotSecondaryLambda"); |
| 441 | + histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kPrimaryLambda, "kPrimaryLambda"); |
| 442 | + histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kSecondaryLambda, "kSecondaryLambda"); |
441 | 443 | histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kLambdaDauNotMcParticle, "kLambdaDauNotMcParticle"); |
442 | 444 | histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kLambdaNotPrPiMinus, "kLambdaNotPrPiMinus"); |
443 | 445 | histos.get<TH1>(HIST("Tracks/h1f_tracks_info"))->GetXaxis()->SetBinLabel(TrackLabels::kAntiLambdaNotAntiPrPiPlus, "kAntiLambdaNotAntiPrPiPlus"); |
@@ -736,19 +738,43 @@ struct LambdaTableProducer { |
736 | 738 | return true; |
737 | 739 | } |
738 | 740 |
|
| 741 | + template <typename V, typename T> |
| 742 | + bool hasAmbiguousDaughters(V const& v0, T const&) |
| 743 | + { |
| 744 | + auto posTrack = v0.template posTrack_as<T>(); |
| 745 | + auto negTrack = v0.template negTrack_as<T>(); |
| 746 | + |
| 747 | + auto posTrackCompCols = posTrack.compatibleCollIds(); |
| 748 | + auto negTrackCompCols = negTrack.compatibleCollIds(); |
| 749 | + |
| 750 | + // Check if daughter tracks belongs to more than one collision (Ambiguous Tracks) |
| 751 | + if (posTrackCompCols.size() > 1 || negTrackCompCols.size() > 1) { |
| 752 | + return true; |
| 753 | + } |
| 754 | + |
| 755 | + // Check if compatible collision index matches the track collision index |
| 756 | + if (((posTrackCompCols.size() != 0) && (posTrackCompCols[0] != posTrack.collisionId())) || |
| 757 | + ((negTrackCompCols.size() != 0) && (negTrackCompCols[0] != negTrack.collisionId()))) { |
| 758 | + return true; |
| 759 | + } |
| 760 | + |
| 761 | + // Pass as not ambiguous |
| 762 | + return false; |
| 763 | + } |
| 764 | + |
739 | 765 | template <typename V> |
740 | 766 | PrmScdType isPrimaryV0(V const& v0) |
741 | 767 | { |
742 | 768 | auto mcpart = v0.template mcParticle_as<aod::McParticles>(); |
743 | 769 |
|
744 | 770 | // check for secondary lambda |
745 | 771 | if (!mcpart.isPhysicalPrimary()) { |
746 | | - histos.fill(HIST("Tracks/h1f_tracks_info"), kNotPrimaryLambda); |
| 772 | + histos.fill(HIST("Tracks/h1f_tracks_info"), kSecondaryLambda); |
747 | 773 | bSecondaryLambdaFlag = true; |
748 | 774 | return kSecondary; |
749 | 775 | } |
750 | 776 |
|
751 | | - histos.fill(HIST("Tracks/h1f_tracks_info"), kNotSecondaryLambda); |
| 777 | + histos.fill(HIST("Tracks/h1f_tracks_info"), kPrimaryLambda); |
752 | 778 | return kPrimary; |
753 | 779 | } |
754 | 780 |
|
@@ -977,6 +1003,11 @@ struct LambdaTableProducer { |
977 | 1003 | // we have v0 as lambda |
978 | 1004 | histos.fill(HIST("Tracks/h1f_tracks_info"), kAllSelPassed); |
979 | 1005 |
|
| 1006 | + // Remove lambda with ambiguous daughters |
| 1007 | + if (cRemoveAmbiguousTracks && hasAmbiguousDaughters(v0, tracks)) { |
| 1008 | + continue; |
| 1009 | + } |
| 1010 | + |
980 | 1011 | // Get Lambda mass and kinematic variables |
981 | 1012 | mass = (v0Type == kLambda) ? v0.mLambda() : v0.mAntiLambda(); |
982 | 1013 | pt = v0.pt(); |
@@ -1172,7 +1203,7 @@ struct LambdaTableProducer { |
1172 | 1203 |
|
1173 | 1204 | using CollisionsRun3 = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>; |
1174 | 1205 | using CollisionsRun2 = soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>; |
1175 | | - using Tracks = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA, aod::pidTPCPi, aod::pidTPCPr>; |
| 1206 | + using Tracks = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA, aod::pidTPCPi, aod::pidTPCPr, aod::TrackCompColls>; |
1176 | 1207 | using McV0Tracks = soa::Join<aod::V0Datas, aod::McV0Labels>; |
1177 | 1208 | using TracksMC = soa::Join<Tracks, aod::McTrackLabels>; |
1178 | 1209 |
|
|
0 commit comments