@@ -60,14 +60,27 @@ struct FlowGFWOmegaXi {
6060 O2_DEFINE_CONFIGURABLE (cfgNbootstrap, int , 10 , " Number of subsamples" )
6161 O2_DEFINE_CONFIGURABLE (cfgEfficiency, std::string, " " , " CCDB path to efficiency object" )
6262 O2_DEFINE_CONFIGURABLE (cfgAcceptance, std::string, " " , " CCDB path to acceptance object" )
63+ O2_DEFINE_CONFIGURABLE (cfgOmegaMassbins, int , 16 , " Number of Omega mass axis bins for c22" )
64+ O2_DEFINE_CONFIGURABLE (cfgXiMassbins, int , 14 , " Number of Xi mass axis bins for c22" )
65+ O2_DEFINE_CONFIGURABLE (cfgK0sMassbins, int , 80 , " Number of K0s mass axis bins for c22" )
66+ O2_DEFINE_CONFIGURABLE (cfgLambdaMassbins, int , 32 , " Number of Lambda mass axis bins for c22" )
67+ // topological cut for V0
68+ O2_DEFINE_CONFIGURABLE (cfgv0_radius, float , 5 .0f , " minimum decay radius" )
69+ O2_DEFINE_CONFIGURABLE (cfgv0_v0cospa, float , 0 .995f , " minimum cosine of pointing angle" )
70+ O2_DEFINE_CONFIGURABLE (cfgv0_dcav0topv, float , 0 .1f , " minimum daughter DCA to PV" )
71+ O2_DEFINE_CONFIGURABLE (cfgv0_dcav0dau, float , 0 .5f , " maximum DCA among V0 daughters" )
72+ O2_DEFINE_CONFIGURABLE (cfgv0_mk0swindow, float , 0 .1f , " Invariant mass window of K0s" )
73+ O2_DEFINE_CONFIGURABLE (cfgv0_mlambdawindow, float , 0 .04f , " Invariant mass window of lambda" )
74+ O2_DEFINE_CONFIGURABLE (cfgv0_ArmPodocut, float , 0 .2f , " Armenteros Podolski cut for K0" )
6375 // topological cut for cascade
6476 O2_DEFINE_CONFIGURABLE (cfgcasc_radius, float , 0 .5f , " minimum decay radius" )
65- O2_DEFINE_CONFIGURABLE (cfgcasc_cospa, float , 0 .998f , " minimum cosine of pointing angle" )
77+ O2_DEFINE_CONFIGURABLE (cfgcasc_casccospa, float , 0 .999f , " minimum cosine of pointing angle" )
78+ O2_DEFINE_CONFIGURABLE (cfgcasc_v0cospa, float , 0 .998f , " minimum cosine of pointing angle" )
6679 O2_DEFINE_CONFIGURABLE (cfgcasc_dcav0topv, float , 0 .01f , " minimum daughter DCA to PV" )
6780 O2_DEFINE_CONFIGURABLE (cfgcasc_dcabachtopv, float , 0 .01f , " minimum bachelor DCA to PV" )
6881 O2_DEFINE_CONFIGURABLE (cfgcasc_dcacascdau, float , 0 .3f , " maximum DCA among cascade daughters" )
6982 O2_DEFINE_CONFIGURABLE (cfgcasc_dcav0dau, float , 1 .0f , " maximum DCA among V0 daughters" )
70- O2_DEFINE_CONFIGURABLE (cfgcasc_mlamdawindow , float , 0 .04f , " Invariant mass window of lamda " )
83+ O2_DEFINE_CONFIGURABLE (cfgcasc_mlambdawindow , float , 0 .04f , " Invariant mass window of lambda " )
7184 // track quality and type selections
7285 O2_DEFINE_CONFIGURABLE (cfgtpcclusters, int , 70 , " minimum number of TPC clusters requirement" )
7386 O2_DEFINE_CONFIGURABLE (cfgitsclusters, int , 1 , " minimum number of ITS clusters requirement" )
@@ -81,6 +94,8 @@ struct FlowGFWOmegaXi {
8194 AxisSpec axisMultiplicity{{0 , 5 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 }, " Centrality (%)" };
8295 AxisSpec axisOmegaminusMass = {80 , 1 .63f , 1 .71f , " Inv. Mass (GeV)" };
8396 AxisSpec axisXiminusMass = {70 , 1 .3f , 1 .37f , " Inv. Mass (GeV)" };
97+ AxisSpec axisK0sMass = {400 , 0 .4f , 0 .6f , " Inv. Mass (GeV)" };
98+ AxisSpec axisLambdaMass = {160 , 1 .08f , 1 .16f , " Inv. Mass (GeV)" };
8499
85100 Configurable<bool > cfgcheckDauTPC{" checkDauTPC" , false , " check if daughter tracks have TPC match" };
86101 Configurable<float > cfgCasc_rapidity{" Casc_rapidity" , 0.5 , " rapidity" };
@@ -133,20 +148,20 @@ struct FlowGFWOmegaXi {
133148 double * MultBins = &(axisMult.binEdges)[0 ];
134149 TAxis* fMultAxis = new TAxis(nMultBins, MultBins);
135150
136- o2::framework::AxisSpec axisphi = cfgaxisPhi;
137- int nPhiBins = axisphi.binEdges.size() - 1 ;
138- double * PhiBins = &(axisphi.binEdges)[0 ];
139- TAxis* fPhiAxis = new TAxis(nPhiBins, PhiBins);
151+ int nPhiBins = 60 ;
152+ TAxis* fPhiAxis = new TAxis(nPhiBins, 0 , constants::math::TwoPI);
140153
141- o2::framework::AxisSpec axisOmegamass = axisOmegaminusMass;
142- int nOmegaMassBins = axisOmegamass.binEdges.size() - 1 ;
143- double * OmegaMassBins = &(axisOmegamass.binEdges)[0 ];
144- TAxis* fOmegaMass = new TAxis(nOmegaMassBins, OmegaMassBins);
154+ int nOmegaMassBins = cfgOmegaMassbins;
155+ TAxis* fOmegaMass = new TAxis(nOmegaMassBins, 1.63 , 1.71 );
145156
146- o2::framework::AxisSpec axisXimass = axisXiminusMass;
147- int nXiMassBins = axisXimass.binEdges.size() - 1 ;
148- double * XiMassBins = &(axisXimass.binEdges)[0 ];
149- TAxis* fXiMass = new TAxis(nXiMassBins, XiMassBins);
157+ int nXiMassBins = cfgXiMassbins;
158+ TAxis* fXiMass = new TAxis(nXiMassBins, 1.3 , 1.37 );
159+
160+ int nK0sMassBins = cfgK0sMassbins;
161+ TAxis* fK0sMass = new TAxis(nK0sMassBins, 0.4 , 0.6 );
162+
163+ int nLambdaMassBins = cfgLambdaMassbins;
164+ TAxis* fLambdaMass = new TAxis(nLambdaMassBins, 1.08 , 1.16 );
150165
151166 void init (InitContext const &) // Initialization
152167 {
@@ -164,17 +179,25 @@ struct FlowGFWOmegaXi {
164179 registry.add (" hEtaPhiREF" , " " , {HistType::kTH2D , {cfgaxisEta, cfgaxisPhi}});
165180 registry.add (" hEtaPhiPOIXi" , " " , {HistType::kTH2D , {cfgaxisEta, cfgaxisPhi}});
166181 registry.add (" hEtaPhiPOIOmega" , " " , {HistType::kTH2D , {cfgaxisEta, cfgaxisPhi}});
182+ registry.add (" hEtaPhiPOIK0s" , " " , {HistType::kTH2D , {cfgaxisEta, cfgaxisPhi}});
183+ registry.add (" hEtaPhiPOILambda" , " " , {HistType::kTH2D , {cfgaxisEta, cfgaxisPhi}});
167184 // cumulant of flow
168185 registry.add (" c22" , " ;Centrality (%) ; C_{2}{2}" , {HistType::kTProfile , {axisMultiplicity}});
169186 registry.add (" c24" , " ;Centrality (%) ; C_{2}{4}" , {HistType::kTProfile , {axisMultiplicity}});
170187 // pt-diff cumulant of flow
171188 registry.add (" Xic22dpt" , " ;pt ; C_{2}{2} " , {HistType::kTProfile3D , {axisPt, axisXiminusMass, axisMultiplicity}});
172189 registry.add (" Omegac22dpt" , " ;pt ; C_{2}{2} " , {HistType::kTProfile3D , {axisPt, axisOmegaminusMass, axisMultiplicity}});
173- // InvMass(GeV) of casc
190+ registry.add (" K0sc22dpt" , " ;pt ; C_{2}{2} " , {HistType::kTProfile3D , {axisPt, axisK0sMass, axisMultiplicity}});
191+ registry.add (" Lambdac22dpt" , " ;pt ; C_{2}{2} " , {HistType::kTProfile3D , {axisPt, axisLambdaMass, axisMultiplicity}});
192+ // InvMass(GeV) of casc and v0
174193 registry.add (" InvMassXiMinus_all" , " " , {HistType::kTHnSparseF , {axisPt, axisXiminusMass, cfgaxisEta, axisMultiplicity}});
175194 registry.add (" InvMassOmegaMinus_all" , " " , {HistType::kTHnSparseF , {axisPt, axisOmegaminusMass, cfgaxisEta, axisMultiplicity}});
176195 registry.add (" InvMassOmegaMinus" , " " , {HistType::kTHnSparseF , {axisPt, axisOmegaminusMass, cfgaxisEta, axisMultiplicity}});
177196 registry.add (" InvMassXiMinus" , " " , {HistType::kTHnSparseF , {axisPt, axisXiminusMass, cfgaxisEta, axisMultiplicity}});
197+ registry.add (" InvMassK0s_all" , " " , {HistType::kTHnSparseF , {axisPt, axisK0sMass, cfgaxisEta, axisMultiplicity}});
198+ registry.add (" InvMassLambda_all" , " " , {HistType::kTHnSparseF , {axisPt, axisLambdaMass, cfgaxisEta, axisMultiplicity}});
199+ registry.add (" InvMassK0s" , " " , {HistType::kTHnSparseF , {axisPt, axisK0sMass, cfgaxisEta, axisMultiplicity}});
200+ registry.add (" InvMassLambda" , " " , {HistType::kTHnSparseF , {axisPt, axisLambdaMass, cfgaxisEta, axisMultiplicity}});
178201
179202 fGFW ->AddRegion (" full" , -0.8 , 0.8 , 1 , 1 ); // ("name", etamin, etamax, ptbinnum, bitmask)eta region -0.8 to 0.8
180203 // with (-0.5, 0.5) eta gap
@@ -184,11 +207,17 @@ struct FlowGFWOmegaXi {
184207 fGFW ->AddRegion (" poiXiP" , 0.5 , 0.8 , nXiptMassBins, 2 );
185208 int nOmegaptMassBins = nPtBins * nOmegaMassBins;
186209 fGFW ->AddRegion (" poiOmegaP" , 0.5 , 0.8 , nOmegaptMassBins, 4 );
210+ int nK0sptMassBins = nPtBins * nK0sMassBins;
211+ fGFW ->AddRegion (" poiK0sP" , 0.5 , 0.8 , nK0sptMassBins, 8 );
212+ int nLambdaptMassBins = nPtBins * nLambdaMassBins;
213+ fGFW ->AddRegion (" poiLambdaP" , 0.5 , 0.8 , nLambdaptMassBins, 16 );
187214 // pushback
188215 corrconfigs.push_back (fGFW ->GetCorrelatorConfig (" refP10 {2} refN10 {-2}" , " ChFull220" , kFALSE ));
189216 corrconfigs.push_back (fGFW ->GetCorrelatorConfig (" refP10 {2 2} refN10 {-2 -2}" , " ChFull240" , kFALSE ));
190217 corrconfigs.push_back (fGFW ->GetCorrelatorConfig (" poiXiP {2} refN10 {-2}" , " Ch10Gap22" , kTRUE ));
191218 corrconfigs.push_back (fGFW ->GetCorrelatorConfig (" poiOmegaP {2} refN10 {-2}" , " Ch10Gap22" , kTRUE ));
219+ corrconfigs.push_back (fGFW ->GetCorrelatorConfig (" poiK0sP {2} refN10 {-2}" , " Ch10Gap22" , kTRUE ));
220+ corrconfigs.push_back (fGFW ->GetCorrelatorConfig (" poiLambdaP {2} refN10 {-2}" , " Ch10Gap22" , kTRUE ));
192221 //
193222 fGFW ->CreateRegions (); // finalize the initialization
194223
@@ -236,8 +265,14 @@ struct FlowGFWOmegaXi {
236265 } else if (partical == 3334 ) {
237266 nMassBins = nOmegaMassBins;
238267 fMass = fOmegaMass ;
268+ } else if (partical == 310 ) {
269+ nMassBins = nK0sMassBins;
270+ fMass = fK0sMass ;
271+ } else if (partical == 3122 ) {
272+ nMassBins = nLambdaMassBins;
273+ fMass = fLambdaMass ;
239274 } else {
240- LOGF (error, " Error, partical = 3312 for Xi and 3334 for Omega" );
275+ LOGF (error, " Error, please put in correct PDG particalID of K0s, Lambda, Xi or Omega" );
241276 return ;
242277 }
243278 for (int massbin = 1 ; massbin <= nMassBins; massbin++) {
@@ -347,7 +382,7 @@ struct FlowGFWOmegaXi {
347382 return true ;
348383 }
349384
350- void process (aodCollisions::iterator const & collision, aod::BCsWithTimestamps const &, aodTracks const & tracks, aod::CascDataExt const & Cascades, DaughterTracks&)
385+ void process (aodCollisions::iterator const & collision, aod::BCsWithTimestamps const &, aodTracks const & tracks, aod::CascDataExt const & Cascades, aod::V0Datas const & V0s, DaughterTracks&)
351386 {
352387 int Ntot = tracks.size ();
353388 if (Ntot < 1 )
@@ -381,6 +416,49 @@ struct FlowGFWOmegaXi {
381416 fGFW ->Fill (track.eta (), ptbin, track.phi (), wacc * weff, 1 ); // (eta, ptbin, phi, wacc*weff, bitmask)
382417 }
383418 }
419+ // fill GFW of V0 flow
420+ for (auto & v0 : V0s) {
421+ auto v0posdau = v0.posTrack_as <DaughterTracks>();
422+ auto v0negdau = v0.negTrack_as <DaughterTracks>();
423+ // check tpc
424+ int partical = 0 ;
425+ if (v0.qtarm () / TMath::Abs (v0.alpha ()) > cfgv0_ArmPodocut && TMath::Abs (v0posdau.tpcNSigmaPi ()) < cfgNSigmaCascPion && TMath::Abs (v0negdau.tpcNSigmaPi ()) < cfgNSigmaCascPion) {
426+ registry.fill (HIST (" InvMassK0s_all" ), v0.pt (), v0.mK0Short (), v0.eta (), cent);
427+ partical = 310 ;
428+ } else if (v0.qtarm () / TMath::Abs (v0.alpha ()) < cfgv0_ArmPodocut && TMath::Abs (v0posdau.tpcNSigmaPr ()) < cfgNSigmaCascProton && TMath::Abs (v0negdau.tpcNSigmaPi ()) < cfgNSigmaCascPion) {
429+ registry.fill (HIST (" InvMassLambda_all" ), v0.pt (), v0.mLambda (), v0.eta (), cent);
430+ partical = 3122 ;
431+ }
432+ // track quality check
433+ if (v0posdau.tpcNClsFound () < cfgtpcclusters)
434+ continue ;
435+ if (v0negdau.tpcNClsFound () < cfgtpcclusters)
436+ continue ;
437+ if (v0posdau.itsNCls () < cfgitsclusters)
438+ continue ;
439+ if (v0negdau.itsNCls () < cfgitsclusters)
440+ continue ;
441+ // topological cut
442+ if (v0.v0radius () < cfgv0_radius)
443+ continue ;
444+ if (v0.v0cosPA () < cfgv0_v0cospa)
445+ continue ;
446+ if (v0.dcaV0daughters () > cfgv0_dcav0dau)
447+ continue ;
448+ if (partical == 310 ) {
449+ if (TMath::Abs (v0.mK0Short () - 0.49761 ) < cfgv0_mk0swindow) {
450+ registry.fill (HIST (" InvMassK0s" ), v0.pt (), v0.mK0Short (), v0.eta (), cent);
451+ registry.fill (HIST (" hEtaPhiPOIK0s" ), v0.eta (), v0.phi ());
452+ fGFW ->Fill (v0.eta (), fPtAxis ->FindBin (v0.pt ()) - 1 + ((fK0sMass ->FindBin (v0.mK0Short ()) - 1 ) * nPtBins), v0.phi (), wacc * weff, 8 );
453+ }
454+ } else if (partical == 3122 ) {
455+ if (TMath::Abs (v0.mLambda () - 1.115683 ) < cfgv0_mlambdawindow) {
456+ registry.fill (HIST (" InvMassLambda" ), v0.pt (), v0.mLambda (), v0.eta (), cent);
457+ registry.fill (HIST (" hEtaPhiPOILambda" ), v0.eta (), v0.phi ());
458+ fGFW ->Fill (v0.eta (), fPtAxis ->FindBin (v0.pt ()) - 1 + ((fLambdaMass ->FindBin (v0.mLambda ()) - 1 ) * nPtBins), v0.phi (), wacc * weff, 16 );
459+ }
460+ }
461+ }
384462 // fill GFW of casc flow
385463 for (auto & casc : Cascades) {
386464 auto bachelor = casc.bachelor_as <DaughterTracks>();
@@ -403,7 +481,9 @@ struct FlowGFWOmegaXi {
403481 // topological cut
404482 if (casc.cascradius () < cfgcasc_radius)
405483 continue ;
406- if (casc.casccosPA (collision.posX (), collision.posY (), collision.posZ ()) < cfgcasc_cospa)
484+ if (casc.casccosPA (collision.posX (), collision.posY (), collision.posZ ()) < cfgcasc_casccospa)
485+ continue ;
486+ if (casc.v0cosPA (collision.posX (), collision.posY (), collision.posZ ()) < cfgcasc_v0cospa)
407487 continue ;
408488 if (casc.dcav0topv (collision.posX (), collision.posY (), collision.posZ ()) < cfgcasc_dcav0topv)
409489 continue ;
@@ -413,7 +493,7 @@ struct FlowGFWOmegaXi {
413493 continue ;
414494 if (casc.dcaV0daughters () > cfgcasc_dcav0dau)
415495 continue ;
416- if (TMath::Abs (casc.mLambda () - 1.115683 ) > cfgcasc_mlamdawindow )
496+ if (TMath::Abs (casc.mLambda () - 1.115683 ) > cfgcasc_mlambdawindow )
417497 continue ;
418498 // track quality check
419499 if (bachelor.tpcNClsFound () < cfgtpcclusters)
@@ -450,6 +530,8 @@ struct FlowGFWOmegaXi {
450530 {
451531 FillProfilepT (corrconfigs.at (2 ), HIST (" Xic22dpt" ), i, 3312 , cent);
452532 FillProfilepT (corrconfigs.at (3 ), HIST (" Omegac22dpt" ), i, 3334 , cent);
533+ FillProfilepT (corrconfigs.at (4 ), HIST (" K0sc22dpt" ), i, 310 , cent);
534+ FillProfilepT (corrconfigs.at (5 ), HIST (" Lambdac22dpt" ), i, 3122 , cent);
453535 }
454536 }
455537};
0 commit comments