@@ -161,13 +161,12 @@ struct FemtoUniversePairTaskTrackV0Helicity {
161161
162162 // / Histogram output
163163 HistogramRegistry qaRegistry{" TrackQA" , {}, OutputObjHandlingPolicy::AnalysisObject};
164+ HistogramRegistry thetaRegistry{" ThetaQA" , {}, OutputObjHandlingPolicy::AnalysisObject};
164165 HistogramRegistry resultRegistry{" Correlations" , {}, OutputObjHandlingPolicy::AnalysisObject};
165166 HistogramRegistry registryMCtruth{" MCtruthHistos" , {}, OutputObjHandlingPolicy::AnalysisObject, false , true };
166167 HistogramRegistry registryMCreco{" MCrecoHistos" , {}, OutputObjHandlingPolicy::AnalysisObject, false , true };
167168 HistogramRegistry mixQaRegistry{" mixQaRegistry" , {}, OutputObjHandlingPolicy::AnalysisObject};
168169
169- HistogramRegistry thetaRegistry{" ThetaQA" , {}, OutputObjHandlingPolicy::AnalysisObject};
170-
171170 std::unique_ptr<TFile> plocalEffFile;
172171 std::unique_ptr<TH1> plocalEffp1;
173172 std::unique_ptr<TH1> plocalEffp2;
@@ -236,6 +235,15 @@ struct FemtoUniversePairTaskTrackV0Helicity {
236235 posChildV0Type2.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true , " posChildV0Type2" );
237236 negChildV0Type2.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true , " negChildV0Type2" );
238237
238+ // Helicity angle
239+ thetaRegistry.add (" Theta/hTheta" , " ; p (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
240+ thetaRegistry.add (" Theta/PositiveChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
241+ thetaRegistry.add (" Theta/PositiveChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
242+ thetaRegistry.add (" Theta/PositiveChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
243+ thetaRegistry.add (" Theta/NegativeChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
244+ thetaRegistry.add (" Theta/NegativeChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
245+ thetaRegistry.add (" Theta/NegativeChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
246+
239247 mixQaRegistry.add (" MixingQA/hMECollisionBins" , " ;bin;Entries" , kTH1F , {{120 , -0.5 , 119.5 }});
240248
241249 // MC truth
@@ -256,6 +264,14 @@ struct FemtoUniversePairTaskTrackV0Helicity {
256264 registryMCtruth.add (" minus/MCtruthPiPt" , " MC truth pions;#it{p}_{T} (GeV/c)" , {HistType::kTH1F , {{500 , 0 , 5 }}});
257265 registryMCtruth.add (" minus/MCtruthPrPt" , " MC truth protons;#it{p}_{T} (GeV/c)" , {HistType::kTH1F , {{500 , 0 , 5 }}});
258266
267+ registryMCtruth.add (" ThetaMCTruth/hTheta" , " ; p (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
268+ registryMCtruth.add (" ThetaMCTruth/PositiveChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
269+ registryMCtruth.add (" ThetaMCTruth/PositiveChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
270+ registryMCtruth.add (" ThetaMCTruth/PositiveChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
271+ registryMCtruth.add (" ThetaMCTruth/NegativeChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
272+ registryMCtruth.add (" ThetaMCTruth/NegativeChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
273+ registryMCtruth.add (" ThetaMCTruth/NegativeChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
274+
259275 // MC reco
260276 registryMCreco.add (" plus/MCrecoLambda" , " MC reco Lambdas;#it{p}_{T} (GeV/c); #eta" , {HistType::kTH2F , {{500 , 0 , 5 }, {400 , -1.0 , 1.0 }}});
261277 registryMCreco.add (" plus/MCrecoLambdaChildPr" , " MC reco Lambdas;#it{p}_{T} (GeV/c); #eta" , {HistType::kTH2F , {{500 , 0 , 5 }, {400 , -1.0 , 1.0 }}});
@@ -278,15 +294,6 @@ struct FemtoUniversePairTaskTrackV0Helicity {
278294 registryMCreco.add (" minus/MCrecoPiPt" , " MC reco pions;#it{p}_{T} (GeV/c)" , {HistType::kTH1F , {{500 , 0 , 5 }}});
279295 registryMCreco.add (" minus/MCrecoPrPt" , " MC reco protons;#it{p}_{T} (GeV/c)" , {HistType::kTH1F , {{500 , 0 , 5 }}});
280296
281- // Helicity angle
282- thetaRegistry.add (" Theta/hTheta" , " ; p (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
283- thetaRegistry.add (" Theta/PositiveChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
284- thetaRegistry.add (" Theta/PositiveChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
285- thetaRegistry.add (" Theta/PositiveChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
286- thetaRegistry.add (" Theta/NegativeChild/hThetaPt" , " ; p_{T} (GeV/#it{c}); cos(#theta)" , kTH2F , {{100 , 0 , 10 }, {110 , -1.1 , 1.1 }});
287- thetaRegistry.add (" Theta/NegativeChild/hThetaEta" , " ; #eta; cos(#theta)" , kTH2F , {{100 , -1 , 1 }, {110 , -1.1 , 1.1 }});
288- thetaRegistry.add (" Theta/NegativeChild/hThetaPhi" , " ; #phi; cos(#theta)" , kTH2F , {{100 , -1 , 7 }, {110 , -1.1 , 1.1 }});
289-
290297 sameEventCont.init (&resultRegistry, confkstarBins, confMultBins, confkTBins, confmTBins, confMultBins3D, confmTBins3D, confEtaBins, confPhiBins, confIsMC, confUse3D);
291298 sameEventCont.setPDGCodes (confTrkPDGCodePartOne, confV0PDGCodePartTwo);
292299 mixedEventCont.init (&resultRegistry, confkstarBins, confMultBins, confkTBins, confmTBins, confMultBins3D, confmTBins3D, confEtaBins, confPhiBins, confIsMC, confUse3D);
@@ -869,6 +876,23 @@ struct FemtoUniversePairTaskTrackV0Helicity {
869876 registryMCtruth.fill (HIST (" minus/MCtruthPr" ), part.pt (), part.eta ());
870877 registryMCtruth.fill (HIST (" minus/MCtruthPrPt" ), part.pt ());
871878 }
879+
880+ // Helicity angle
881+ const auto & posChild = parts.iteratorAt (part.index () - 2 );
882+ const auto & negChild = parts.iteratorAt (part.index () - 1 );
883+
884+ auto posChildMass = pdg->Mass (confPDGCodePosChild);
885+ auto negChildMass = pdg->Mass (confPDGCodeNegChild);
886+ auto posChildBoosted = FemtoUniverseMath::boostPRF<decltype (posChild)>(posChild, posChildMass, negChild, negChildMass);
887+ auto cosineTheta = (posChildBoosted.Px () * part.px () + posChildBoosted.Py () * part.py () + posChildBoosted.Pz () * part.pz ()) / (posChildBoosted.P () * part.p ());
888+
889+ registryMCtruth.fill (HIST (" ThetaMCTruth/hTheta" ), part.p (), cosineTheta);
890+ registryMCtruth.fill (HIST (" ThetaMCTruth/PositiveChild/hThetaPt" ), posChild.pt (), cosineTheta);
891+ registryMCtruth.fill (HIST (" ThetaMCTruth/PositiveChild/hThetaEta" ), posChild.eta (), cosineTheta);
892+ registryMCtruth.fill (HIST (" ThetaMCTruth/PositiveChild/hThetaPhi" ), posChild.phi (), cosineTheta);
893+ registryMCtruth.fill (HIST (" ThetaMCTruth/NegativeChild/hThetaPt" ), negChild.pt (), cosineTheta);
894+ registryMCtruth.fill (HIST (" ThetaMCTruth/NegativeChild/hThetaEta" ), negChild.eta (), cosineTheta);
895+ registryMCtruth.fill (HIST (" ThetaMCTruth/NegativeChild/hThetaPhi" ), negChild.phi (), cosineTheta);
872896 }
873897 }
874898
0 commit comments