2727#include < TTree.h>
2828#include < TFile.h>
2929#include < TMatrixD.h>
30+ #include " TProfile2D.h"
3031#include " PWGLF/DataModel/lambdaJetpolarization.h"
3132
3233#include < fastjet/ClusterSequence.hh>
@@ -59,7 +60,6 @@ struct LfMyV0s {
5960 Configurable<float > etaMin{" etaMin" , -0 .9f , " eta min" };
6061 Configurable<float > etaMax{" etaMax" , +0 .9f , " eta max" };
6162 Configurable<double > deltaEtaEdge{" deltaEtaEdge" , 0.00 , " eta gap from the edge" };
62- Configurable<double > minJetPt{" minJetPt" , 10.0 , " Minimum pt of the jet" };
6363 // track parameters
6464 Configurable<float > minITSnCls{" minITSnCls" , 4 .0f , " min number of ITS clusters" };
6565 Configurable<float > minTPCnClsFound{" minTPCnClsFound" , 80 .0f , " min number of found TPC clusters" };
@@ -113,6 +113,8 @@ struct LfMyV0s {
113113 Configurable<float > v0accLambda{" v0accLambda" , 0.075 , " V0 acc Lambda" };
114114 Configurable<bool > ifinitpasslambda{" ifinitpasslambda" , 1 , " ifinitpasslambda" };
115115 Configurable<bool > ifpasslambda{" passedLambdaSelection" , 0 , " passedLambdaSelection" };
116+ Configurable<float > paramArmenterosCut{" paramArmenterosCut" , 0.2 , " parameter Armenteros Cut" };
117+ Configurable<bool > doArmenterosCut{" doArmenterosCut" , 0 , " do Armenteros Cut" };
116118
117119 // Jet background subtraction
118120 JetBkgSubUtils backgroundSub;
@@ -131,6 +133,8 @@ struct LfMyV0s {
131133 const AxisSpec ptAxis{100 , 0 .0f , 10 .0f , " #it{p}_{T} (GeV/#it{c})" };
132134 const AxisSpec invMassLambdaAxis{200 , 1.09 , 1.14 , " m_{p#pi} (GeV/#it{c}^{2})" };
133135
136+ ConfigurableAxis TProfile2DaxisPt{" #it{p}_{T} (GeV/#it{c})" , {VARIABLE_WIDTH, 0.6 , 0.7 , 0.8 , 0.9 , 1.0 , 1.1 , 1.2 , 1.4 , 1.6 , 1.8 , 2.0 , 2.2 , 2.4 , 2.6 , 2.8 , 3.2 , 3.7 , 4.2 , 5 , 6 , 8 , 10 , 12 }, " pt axis for histograms" };
137+
134138 registry.add (" hMassLambda" , " hMassLambda" , {HistType::kTH1F , {{200 , 0 .9f , 1 .2f }}});
135139 registry.add (" V0pTInLab" , " V0pTInLab" , kTH1F , {axisPT});
136140 registry.add (" hMassVsPtLambda" , " hMassVsPtLambda" , {HistType::kTH2F , {{100 , 0 .0f , 10 .0f }, {200 , 1 .016f , 1 .216f }}});
@@ -245,6 +249,17 @@ struct LfMyV0s {
245249 registryData.add (" hLambdaPhiandSinPhi" , " hLambdaPhiandSinPhi" , kTH2F , {{200 , -TMath::Pi () / 2 , TMath::Pi () / 2 }, {200 , -1 , 1 }});
246250 registryData.add (" V0LambdaprotonPhi" , " V0LambdaprotonPhi" , {HistType::kTH1F , {{200 , -TMath::Pi () / 2 , TMath::Pi () / 2 }}});
247251
252+ registryData.add (" profileAntiLambda" , " Invariant Mass vs sin(phi)" , {HistType::kTProfile , {{200 , 0.9 , 1.2 }}});
253+ registryData.add (" hAntiLambdamassandSinPhi" , " hAntiLambdaPhiandSinPhi" , kTH2F , {{200 , -TMath::Pi () / 2 , TMath::Pi () / 2 }, {200 , -1 , 1 }});
254+
255+ registryData.add (" TProfile2DLambdaPtMassSinPhi" , " " , kTProfile2D , {invMassLambdaAxis, TProfile2DaxisPt});
256+ registryData.add (" TProfile2DAntiLambdaPtMassSinPhi" , " " , kTProfile2D , {invMassLambdaAxis, TProfile2DaxisPt});
257+ registryData.add (" TProfile2DLambdaPtMassSintheta" , " " , kTProfile2D , {invMassLambdaAxis, TProfile2DaxisPt});
258+ registryData.add (" TProfile2DAntiLambdaPtMassSintheta" , " " , kTProfile2D , {invMassLambdaAxis, TProfile2DaxisPt});
259+
260+ registryData.add (" TProfile2DLambdaPtMassCosSquareTheta" , " " , kTProfile2D , {invMassLambdaAxis, TProfile2DaxisPt});
261+ registryData.add (" TProfile2DAntiLambdaPtMassCosSquareTheta" , " " , kTProfile2D , {invMassLambdaAxis, TProfile2DaxisPt});
262+
248263 registryData.add (" hNEvents" , " hNEvents" , {HistType::kTH1I , {{10 , 0 .f , 10 .f }}});
249264 registryData.get <TH1>(HIST (" hNEvents" ))->GetXaxis ()->SetBinLabel (1 , " all" );
250265 registryData.get <TH1>(HIST (" hNEvents" ))->GetXaxis ()->SetBinLabel (2 , " sel8" );
@@ -655,6 +670,9 @@ struct LfMyV0s {
655670 if (TMath::Abs (v0.mLambda () - o2::constants::physics::MassLambda0) > v0accLambda) {
656671 return false ;
657672 }
673+ if (doArmenterosCut && v0.qtarm () > (paramArmenterosCut * std::abs (v0.alpha ())))
674+ return false ;
675+
658676 return true ;
659677 }
660678
@@ -723,6 +741,8 @@ struct LfMyV0s {
723741 if (TMath::Abs (v0.mAntiLambda () - o2::constants::physics::MassLambda0) > v0accLambda) {
724742 return false ;
725743 }
744+ if (doArmenterosCut && v0.qtarm () > (paramArmenterosCut * std::abs (v0.alpha ())))
745+ return false ;
726746 return true ;
727747 }
728748
@@ -890,6 +910,7 @@ struct LfMyV0s {
890910 registryData.fill (HIST (" number_of_events_vsmultiplicity" ), multiplicity);
891911 // v0 loop
892912 int V0Numbers = 0 ;
913+ int AntiV0Numbers = 0 ;
893914 for (const auto & v0 : fullV0s) {
894915 const auto & pos = v0.posTrack_as <StrHadronDaughterTracks>();
895916 const auto & neg = v0.negTrack_as <StrHadronDaughterTracks>();
@@ -899,6 +920,7 @@ struct LfMyV0s {
899920 registryData.fill (HIST (" LambdaPtMass" ), v0.pt (), v0.mLambda ());
900921 }
901922 if (passedAntiLambdaSelection (v0, pos, neg)) {
923+ AntiV0Numbers = AntiV0Numbers + 1 ;
902924 registryData.fill (HIST (" AntiLambdaPtMass" ), v0.pt (), v0.mAntiLambda ());
903925 }
904926 }
@@ -913,6 +935,7 @@ struct LfMyV0s {
913935 return ;
914936 }
915937 double protonsinPhiInJetV0frame = 0 ;
938+ double AntiprotonsinPhiInJetV0frame = 0 ;
916939 cout << maxJetpx << endl;
917940 for (const auto & candidate : fullV0s) {
918941 const auto & pos = candidate.posTrack_as <StrHadronDaughterTracks>();
@@ -982,7 +1005,7 @@ struct LfMyV0s {
9821005 double protonPinJetV0 = sqrt (protonInJetV0 (1 , 0 ) * protonInJetV0 (1 , 0 ) + protonInJetV0 (2 , 0 ) * protonInJetV0 (2 , 0 ) + protonInJetV0 (3 , 0 ) * protonInJetV0 (3 , 0 ));
9831006 double protonPtinJetV0 = sqrt (protonInJetV0 (1 , 0 ) * protonInJetV0 (1 , 0 ) + protonInJetV0 (2 , 0 ) * protonInJetV0 (2 , 0 ));
9841007
985- double protonCosThetainJetV0 = protonInV0 (3 , 0 ) / protonPinJetV0;
1008+ double protonCosThetainJetV0 = protonInJetV0 (3 , 0 ) / protonPinJetV0;
9861009 double protonSinThetainJetV0 = protonPtinJetV0 / protonPinJetV0;
9871010 double protonthetainJetV0 = TMath::ASin (protonSinThetainJetV0);
9881011 registryV0Data.fill (HIST (" hprotoncosthetainJetV0" ), protonCosThetainJetV0);
@@ -997,6 +1020,41 @@ struct LfMyV0s {
9971020 registryV0Data.fill (HIST (" AverageSinthetainJetV0" ), candidate.mLambda (), protonSinThetainJetV0);
9981021 registryV0Data.fill (HIST (" AverageCosSquarethetainJetV0" ), candidate.mLambda (), protonCosThetainJetV0 * protonCosThetainJetV0);
9991022 protonsinPhiInJetV0frame = protonsinPhiInJetV0frame + protonInJetV0 (2 , 0 ) / sqrt (protonInJetV0 (1 , 0 ) * protonInJetV0 (1 , 0 ) + protonInJetV0 (2 , 0 ) * protonInJetV0 (2 , 0 ));
1023+
1024+ registryData.fill (HIST (" TProfile2DLambdaPtMassSinPhi" ), candidate.mLambda (), candidate.pt (), protonInJetV0 (2 , 0 ) / sqrt (protonInJetV0 (1 , 0 ) * protonInJetV0 (1 , 0 ) + protonInJetV0 (2 , 0 ) * protonInJetV0 (2 , 0 )));
1025+ registryData.fill (HIST (" TProfile2DLambdaPtMassSintheta" ), candidate.mLambda (), candidate.pt (), protonSinThetainJetV0);
1026+ registryData.fill (HIST (" TProfile2DLambdaPtMassCosSquareTheta" ), candidate.mLambda (), candidate.pt (), protonCosThetainJetV0 * protonCosThetainJetV0);
1027+ }
1028+ if (passedAntiLambdaSelection (candidate, pos, neg)) {
1029+ double PAntiLambda = sqrt (candidate.px () * candidate.px () + candidate.py () * candidate.py () + candidate.pz () * candidate.pz ());
1030+ double EAntiLambda = sqrt (candidate.mAntiLambda () * candidate.mAntiLambda () + PAntiLambda * PAntiLambda);
1031+ double AntiprotonE = sqrt (massPr * massPr + neg.px () * neg.px () + neg.py () * neg.py () + neg.pz () * neg.pz ());
1032+ TMatrixD pLabAntiV0 (4 , 1 );
1033+ pLabAntiV0 (0 , 0 ) = EAntiLambda;
1034+ pLabAntiV0 (1 , 0 ) = candidate.px ();
1035+ pLabAntiV0 (2 , 0 ) = candidate.py ();
1036+ pLabAntiV0 (3 , 0 ) = candidate.pz ();
1037+
1038+ TMatrixD AntilambdaInJet (4 , 1 );
1039+ AntilambdaInJet = MyTMatrixTranslationToJet (maxJetpx, maxJetpy, maxJetpz, candidate.px (), candidate.py (), candidate.pz ()) * pLabAntiV0;
1040+
1041+ TMatrixD pLabAntiproton (4 , 1 );
1042+ pLabAntiproton (0 , 0 ) = AntiprotonE;
1043+ pLabAntiproton (1 , 0 ) = neg.px ();
1044+ pLabAntiproton (2 , 0 ) = neg.py ();
1045+ pLabAntiproton (3 , 0 ) = neg.pz ();
1046+ TMatrixD AntiprotonInJetV0 (4 , 1 );
1047+ AntiprotonInJetV0 = LorentzTransInV0frame (EAntiLambda, AntilambdaInJet (1 , 0 ), AntilambdaInJet (2 , 0 ), AntilambdaInJet (3 , 0 )) * MyTMatrixTranslationToJet (maxJetpx, maxJetpy, maxJetpz, candidate.px (), candidate.py (), candidate.pz ()) * pLabAntiproton;
1048+ AntiprotonsinPhiInJetV0frame = AntiprotonsinPhiInJetV0frame + AntiprotonInJetV0 (2 , 0 ) / sqrt (AntiprotonInJetV0 (1 , 0 ) * AntiprotonInJetV0 (1 , 0 ) + AntiprotonInJetV0 (2 , 0 ) * AntiprotonInJetV0 (2 , 0 ));
1049+ registryData.fill (HIST (" TProfile2DAntiLambdaPtMassSinPhi" ), candidate.mAntiLambda (), candidate.pt (), AntiprotonInJetV0 (2 , 0 ) / sqrt (AntiprotonInJetV0 (1 , 0 ) * AntiprotonInJetV0 (1 , 0 ) + AntiprotonInJetV0 (2 , 0 ) * AntiprotonInJetV0 (2 , 0 )));
1050+ TMatrixD AntiprotonInV0 (4 , 1 );
1051+ AntiprotonInV0 = LorentzTransInV0frame (EAntiLambda, candidate.px (), candidate.py (), candidate.pz ()) * pLabAntiproton;
1052+ double AntiprotonPinJetV0 = sqrt (AntiprotonInJetV0 (1 , 0 ) * AntiprotonInJetV0 (1 , 0 ) + AntiprotonInJetV0 (2 , 0 ) * AntiprotonInJetV0 (2 , 0 ) + AntiprotonInJetV0 (3 , 0 ) * AntiprotonInJetV0 (3 , 0 ));
1053+ double AntiprotonPtinJetV0 = sqrt (AntiprotonInJetV0 (1 , 0 ) * AntiprotonInJetV0 (1 , 0 ) + AntiprotonInJetV0 (2 , 0 ) * AntiprotonInJetV0 (2 , 0 ));
1054+ double AntiprotonCosThetainJetV0 = AntiprotonInJetV0 (3 , 0 ) / AntiprotonPinJetV0;
1055+ double AntiprotonSinThetainJetV0 = AntiprotonPtinJetV0 / AntiprotonPinJetV0;
1056+ registryData.fill (HIST (" TProfile2DAntiLambdaPtMassSintheta" ), candidate.mAntiLambda (), candidate.pt (), AntiprotonSinThetainJetV0);
1057+ registryData.fill (HIST (" TProfile2DAntiLambdaPtMassCosSquareTheta" ), candidate.mAntiLambda (), candidate.pt (), AntiprotonCosThetainJetV0 * AntiprotonCosThetainJetV0);
10001058 }
10011059 }
10021060
@@ -1009,6 +1067,10 @@ struct LfMyV0s {
10091067 registryData.fill (HIST (" V0LambdaprotonPhi" ), TMath::ASin (protonsinPhiInJetV0frame / V0Numbers));
10101068 registryData.fill (HIST (" profileLambda" ), candidate.mLambda (), protonsinPhiInJetV0frame / V0Numbers);
10111069 }
1070+ if (passedAntiLambdaSelection (candidate, pos, neg)) {
1071+ registryData.fill (HIST (" hAntiLambdamassandSinPhi" ), candidate.mAntiLambda (), AntiprotonsinPhiInJetV0frame / AntiV0Numbers);
1072+ registryData.fill (HIST (" profileAntiLambda" ), candidate.mAntiLambda (), AntiprotonsinPhiInJetV0frame / AntiV0Numbers);
1073+ }
10121074 }
10131075 }
10141076 PROCESS_SWITCH (LfMyV0s, processData, " processData" , true );
@@ -1019,7 +1081,6 @@ struct LfMyV0s {
10191081 if (!AcceptEvent (collision)) {
10201082 return ;
10211083 }
1022-
10231084 registryData.fill (HIST (" hNEvents" ), 8.5 );
10241085 int V0NumbersPerEvent = 0 ;
10251086 int V0NumbersPerEventsel = 0 ;
0 commit comments