Skip to content

Commit 71dcb8e

Browse files
ddobrigkalibuild
andauthored
[PWGLF] addition of derived data path for lambda polarization (#9100)
Co-authored-by: ALICE Builder <alibuild@users.noreply.github.com>
1 parent f6e43a6 commit 71dcb8e

File tree

5 files changed

+285
-8
lines changed

5 files changed

+285
-8
lines changed

PWGLF/DataModel/LFStrangenessTables.h

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,9 @@ DECLARE_SOA_TABLE(StraTPCQVs, "AOD", "STRATPCQVS", //! tpc Qvec
229229
qvec::QvecBPosRe, qvec::QvecBPosIm, epcalibrationtable::QTPCR);
230230
DECLARE_SOA_TABLE(StraFT0CQVsEv, "AOD", "STRAFT0CQVSEv", //! events used to compute t0c Qvec
231231
epcalibrationtable::TriggerEventEP);
232-
DECLARE_SOA_TABLE(StraZDCSP, "AOD", "STRAZDCSP", //! events used to compute the ZDC spectator plane
233-
spcalibrationtable::TriggerEventSP, spcalibrationtable::PsiZDCA, spcalibrationtable::PsiZDCC);
232+
DECLARE_SOA_TABLE(StraZDCSP, "AOD", "STRAZDCSP", //! ZDC SP information
233+
spcalibrationtable::TriggerEventSP,
234+
spcalibrationtable::PsiZDCA, spcalibrationtable::PsiZDCC);
234235
DECLARE_SOA_TABLE(StraStamps_000, "AOD", "STRASTAMPS", //! information for ID-ing mag field if needed
235236
bc::RunNumber, timestamp::Timestamp);
236237
DECLARE_SOA_TABLE_VERSIONED(StraStamps_001, "AOD", "STRASTAMPS", 1, //! information for ID-ing mag field if needed
@@ -262,6 +263,8 @@ namespace dautrack
262263
{
263264
//______________________________________________________
264265
// Daughter track declarations for derived data analysis
266+
// These definitions are for the first version of the table
267+
// The latest version will inherit most properties from TracksExtra
265268
DECLARE_SOA_COLUMN(ITSChi2PerNcl, itsChi2PerNcl, float); //! ITS chi2 per N cluster
266269
DECLARE_SOA_COLUMN(DetectorMap, detectorMap, uint8_t); //! detector map for reference (see DetectorMapEnum)
267270
DECLARE_SOA_COLUMN(ITSClusterSizes, itsClusterSizes, uint32_t); //! ITS cluster sizes per layer
@@ -306,6 +309,18 @@ DECLARE_SOA_DYNAMIC_COLUMN(HasITSTracker, hasITSTracker, //! Flag to check if tr
306309
[](uint8_t detectorMap, float itsChi2PerNcl) -> bool { return (detectorMap & o2::aod::track::ITS) ? (itsChi2PerNcl > -1e-3f) : false; });
307310
DECLARE_SOA_DYNAMIC_COLUMN(HasITSAfterburner, hasITSAfterburner, //! Flag to check if track is from ITS AB
308311
[](uint8_t detectorMap, float itsChi2PerNcl) -> bool { return (detectorMap & o2::aod::track::ITS) ? (itsChi2PerNcl < -1e-3f) : false; });
312+
313+
// sub-namespace for compatibility purposes
314+
namespace compatibility
315+
{ // adds dynamics that ensure full backwards compatibility with previous getters
316+
DECLARE_SOA_DYNAMIC_COLUMN(TPCClusters, tpcClusters, //! number of TPC clusters
317+
[](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> int16_t { return (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound; });
318+
DECLARE_SOA_DYNAMIC_COLUMN(TPCCrossedRows, tpcCrossedRows, //! Number of crossed TPC Rows
319+
[](uint8_t tpcNClsFindable, int8_t TPCNClsFindableMinusCrossedRows) -> int16_t { return (int16_t)tpcNClsFindable - TPCNClsFindableMinusCrossedRows; });
320+
DECLARE_SOA_DYNAMIC_COLUMN(ITSChi2PerNcl, itsChi2PerNcl, //! simple equivalent return
321+
[](float itsChi2NCl) -> float { return (float)itsChi2NCl; });
322+
} // namespace compatibility
323+
309324
} // namespace dautrack
310325

311326
DECLARE_SOA_TABLE(DauTrackExtras_000, "AOD", "DAUTRACKEXTRA", //! detector properties of decay daughters
@@ -337,10 +352,42 @@ DECLARE_SOA_TABLE_VERSIONED(DauTrackExtras_001, "AOD", "DAUTRACKEXTRA", 1, //! d
337352
dautrack::HasITSTracker<dautrack::DetectorMap, dautrack::ITSChi2PerNcl>,
338353
dautrack::HasITSAfterburner<dautrack::DetectorMap, dautrack::ITSChi2PerNcl>);
339354

355+
DECLARE_SOA_TABLE_VERSIONED(DauTrackExtras_002, "AOD", "DAUTRACKEXTRA", 2, //! detector properties of decay daughters
356+
track::ITSChi2NCl,
357+
dautrack::DetectorMap, // here we don´t save everything so we simplify this
358+
track::ITSClusterSizes,
359+
track::TPCNClsFindable,
360+
track::TPCNClsFindableMinusFound,
361+
track::TPCNClsFindableMinusCrossedRows,
362+
363+
// Dynamics for ITS matching TracksExtra
364+
track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
365+
track::v001::ITSClsSizeInLayer<track::ITSClusterSizes>,
366+
track::v001::ITSClusterMap<track::ITSClusterSizes>,
367+
track::v001::ITSNCls<track::ITSClusterSizes>,
368+
track::v001::IsITSAfterburner<track::v001::DetectorMap, track::ITSChi2NCl>,
369+
/*compatibility*/ dautrack::HasITSTracker<dautrack::DetectorMap, track::ITSChi2NCl>,
370+
/*compatibility*/ dautrack::HasITSAfterburner<dautrack::DetectorMap, track::ITSChi2NCl>,
371+
372+
// dynamics for TPC tracking properties matching main data model
373+
track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
374+
track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
375+
track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
376+
track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
377+
/*compatibility*/ dautrack::compatibility::TPCClusters<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
378+
/*compatibility*/ dautrack::compatibility::TPCCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
379+
/*compatibility*/ dautrack::compatibility::ITSChi2PerNcl<track::ITSChi2NCl>,
380+
381+
// dynamics to identify detectors
382+
dautrack::HasITS<dautrack::DetectorMap>,
383+
dautrack::HasTPC<dautrack::DetectorMap>,
384+
dautrack::HasTRD<dautrack::DetectorMap>,
385+
dautrack::HasTOF<dautrack::DetectorMap>);
386+
340387
DECLARE_SOA_TABLE(DauTrackMCIds, "AOD", "DAUTRACKMCID", // index table when using AO2Ds
341388
dautrack::ParticleMCId);
342389

343-
using DauTrackExtras = DauTrackExtras_001;
390+
using DauTrackExtras = DauTrackExtras_002;
344391
using DauTrackExtra = DauTrackExtras::iterator;
345392

346393
namespace motherParticle

PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ o2physics_add_dpl_workflow(stradautrackstofpidconverter
1414
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
1515
COMPONENT_NAME Analysis)
1616

17+
o2physics_add_dpl_workflow(stradautracksextraconverter2
18+
SOURCES stradautracksextraconverter2.cxx
19+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
20+
COMPONENT_NAME Analysis)
21+
1722
o2physics_add_dpl_workflow(strarawcentsconverter
1823
SOURCES strarawcentsconverter.cxx
1924
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
#include "Framework/runDataProcessing.h"
12+
#include "Framework/AnalysisTask.h"
13+
#include "Framework/AnalysisDataModel.h"
14+
#include "PWGLF/DataModel/LFStrangenessTables.h"
15+
#include "PWGLF/DataModel/LFStrangenessPIDTables.h"
16+
17+
using namespace o2;
18+
using namespace o2::framework;
19+
20+
// Converts daughter TracksExtra from 1 to 2
21+
struct stradautracksextraconverter2 {
22+
Produces<aod::DauTrackExtras_002> dauTrackExtras_002;
23+
24+
void process(aod::DauTrackExtras_001 const& dauTrackExtras_001)
25+
{
26+
for (auto& values : dauTrackExtras_001) {
27+
dauTrackExtras_002(values.itsChi2PerNcl(),
28+
values.detectorMap(),
29+
values.itsClusterSizes(),
30+
static_cast<uint8_t>(0), // findable (unknown in old format)
31+
-values.tpcClusters(), // findable minus found: we know found
32+
-values.tpcCrossedRows()); // findable minus crossed rows: we know crossed rows
33+
}
34+
}
35+
};
36+
37+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
38+
{
39+
return WorkflowSpec{
40+
adaptAnalysisTask<stradautracksextraconverter2>(cfgc)};
41+
}

PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,11 @@ struct strangederivedbuilder {
483483
for (auto const& tr : tracksExtra) {
484484
if (trackMap[tr.globalIndex()] >= 0) {
485485
dauTrackExtras(tr.itsChi2NCl(),
486-
tr.detectorMap(), tr.itsClusterSizes(),
487-
tr.tpcNClsFound(), tr.tpcNClsCrossedRows());
486+
tr.detectorMap(),
487+
tr.itsClusterSizes(),
488+
tr.tpcNClsFindable(),
489+
tr.tpcNClsFindableMinusFound(),
490+
tr.tpcNClsFindableMinusCrossedRows());
488491
}
489492
}
490493
// done!
@@ -574,8 +577,11 @@ struct strangederivedbuilder {
574577
for (auto const& tr : tracksExtra) {
575578
if (trackMap[tr.globalIndex()] >= 0) {
576579
dauTrackExtras(tr.itsChi2NCl(),
577-
tr.detectorMap(), tr.itsClusterSizes(),
578-
tr.tpcNClsFound(), tr.tpcNClsCrossedRows());
580+
tr.detectorMap(),
581+
tr.itsClusterSizes(),
582+
tr.tpcNClsFindable(),
583+
tr.tpcNClsFindableMinusFound(),
584+
tr.tpcNClsFindableMinusCrossedRows());
579585

580586
// if the table has MC info
581587
if constexpr (requires { tr.mcParticle(); }) {
@@ -807,7 +813,8 @@ struct strangederivedbuilder {
807813
}
808814
void processZDCSP(soa::Join<aod::Collisions, aod::SPCalibrationTables>::iterator const& collision)
809815
{
810-
StraZDCSP(collision.triggereventsp(), collision.psiZDCA(), collision.psiZDCC());
816+
StraZDCSP(collision.triggereventsp(),
817+
collision.psiZDCA(), collision.psiZDCC());
811818
}
812819
void processFT0MQVectors(soa::Join<aod::Collisions, aod::QvectorFT0Ms>::iterator const& collision)
813820
{

PWGLF/Tasks/Strangeness/lambdapolsp.cxx

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,17 @@
5454
#include "DataFormatsParameters/GRPMagField.h"
5555
#include "CCDB/BasicCCDBManager.h"
5656
#include "PWGLF/DataModel/LFStrangenessTables.h"
57+
#include "PWGLF/DataModel/LFStrangenessPIDTables.h"
5758
#include "Common/DataModel/FT0Corrected.h"
5859

5960
using namespace o2;
6061
using namespace o2::framework;
6162
using namespace o2::framework::expressions;
6263
using std::array;
6364

65+
using dauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs>;
66+
using v0Candidates = soa::Join<aod::V0CollRefs, aod::V0Cores, aod::V0Extras>;
67+
6468
struct lambdapolsp {
6569

6670
int mRunNumber;
@@ -427,6 +431,49 @@ struct lambdapolsp {
427431
return true;
428432
}
429433

434+
template <typename TV0>
435+
bool isCompatible(TV0 const& v0, int pid /*0: lambda, 1: antilambda*/)
436+
{
437+
// checks if this V0 is compatible with the requested hypothesis
438+
439+
// de-ref track extras
440+
auto posTrackExtra = v0.template posTrackExtra_as<dauTracks>();
441+
auto negTrackExtra = v0.template negTrackExtra_as<dauTracks>();
442+
443+
// check for desired kinematics
444+
if (pid == 0 && (v0.positivept() < cfgDaughPrPt || v0.negativept() < cfgDaughPiPt)) {
445+
return false; // doesn´t pass lambda pT sels
446+
}
447+
if (pid == 1 && (v0.positivept() < cfgDaughPiPt || v0.negativept() < cfgDaughPrPt)) {
448+
return false; // doesn´t pass antilambda pT sels
449+
}
450+
if (std::abs(v0.positiveeta()) > ConfDaughEta || std::abs(v0.negativeeta()) > ConfDaughEta) {
451+
return false;
452+
}
453+
454+
// check TPC tracking properties
455+
if (posTrackExtra.tpcNClsCrossedRows() < 70 || negTrackExtra.tpcNClsCrossedRows() < 70) {
456+
return false;
457+
}
458+
if (posTrackExtra.tpcNClsFound() < ConfDaughTPCnclsMin || negTrackExtra.tpcNClsFound() < ConfDaughTPCnclsMin) {
459+
return false;
460+
}
461+
if (posTrackExtra.tpcCrossedRowsOverFindableCls() < 0.8 || negTrackExtra.tpcCrossedRowsOverFindableCls() < 0.8) {
462+
return false;
463+
}
464+
465+
// check TPC PID
466+
if (pid == 0 && ((std::abs(posTrackExtra.tpcNSigmaPr()) > ConfDaughPIDCuts) || (std::abs(negTrackExtra.tpcNSigmaPi()) > ConfDaughPIDCuts))) {
467+
return false;
468+
}
469+
if (pid == 1 && ((std::abs(posTrackExtra.tpcNSigmaPi()) > ConfDaughPIDCuts) || (std::abs(negTrackExtra.tpcNSigmaPr()) > ConfDaughPIDCuts))) {
470+
return false;
471+
}
472+
473+
// if we made it this far, it's good
474+
return true;
475+
}
476+
430477
double GetPhiInRange(double phi)
431478
{
432479
double result = phi;
@@ -743,6 +790,136 @@ struct lambdapolsp {
743790
}
744791
}
745792
PROCESS_SWITCH(lambdapolsp, processData, "Process data", true);
793+
794+
// process function for derived data - mimics the functionality of the original data
795+
void processDerivedData(soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraStamps, aod::StraZDCSP>::iterator const& collision, v0Candidates const& V0s, dauTracks const&)
796+
{
797+
//___________________________________________________________________________________________________
798+
// event selection
799+
if (!collision.sel8()) {
800+
return;
801+
}
802+
auto centrality = collision.centFT0C();
803+
if (!collision.triggereventsp()) { // provided by StraZDCSP
804+
return;
805+
}
806+
807+
if (additionalEvSel && (!collision.selection_bit(aod::evsel::kNoSameBunchPileup) || !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV))) {
808+
return;
809+
}
810+
// histos.fill(HIST("hCentrality2"), centrality);
811+
// if (additionalEvSel2 && (!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard))) {
812+
if (additionalEvSel2 && (collision.trackOccupancyInTimeRange() > cfgMaxOccupancy || collision.trackOccupancyInTimeRange() < cfgMinOccupancy)) {
813+
return;
814+
}
815+
// histos.fill(HIST("hCentrality3"), centrality);
816+
if (additionalEvSel3 && (!collision.selection_bit(aod::evsel::kNoTimeFrameBorder) || !collision.selection_bit(aod::evsel::kNoITSROFrameBorder))) {
817+
return;
818+
}
819+
820+
//___________________________________________________________________________________________________
821+
// retrieve further info provided by StraZDCSP
822+
auto psiZDCC = collision.psiZDCC();
823+
auto psiZDCA = collision.psiZDCA();
824+
825+
// fill histograms
826+
histos.fill(HIST("hCentrality"), centrality);
827+
if (!checkwithpub) {
828+
// histos.fill(HIST("hVtxZ"), collision.posZ());
829+
histos.fill(HIST("hpRes"), centrality, (TMath::Cos(GetPhiInRange(psiZDCA - psiZDCC))));
830+
if (QA) {
831+
histos.fill(HIST("hpResSin"), centrality, (TMath::Sin(GetPhiInRange(psiZDCA - psiZDCC))));
832+
histos.fill(HIST("hpCosPsiA"), centrality, (TMath::Cos(GetPhiInRange(psiZDCA))));
833+
histos.fill(HIST("hpCosPsiC"), centrality, (TMath::Cos(GetPhiInRange(psiZDCC))));
834+
histos.fill(HIST("hpSinPsiA"), centrality, (TMath::Sin(GetPhiInRange(psiZDCA))));
835+
histos.fill(HIST("hpSinPsiC"), centrality, (TMath::Sin(GetPhiInRange(psiZDCC))));
836+
}
837+
}
838+
839+
//___________________________________________________________________________________________________
840+
// loop over V0s as necessary
841+
for (auto v0 : V0s) {
842+
bool LambdaTag = isCompatible(v0, 0);
843+
bool aLambdaTag = isCompatible(v0, 1);
844+
845+
if (LambdaTag == aLambdaTag)
846+
continue;
847+
848+
if (!SelectionV0(collision, v0)) {
849+
continue;
850+
}
851+
852+
if (LambdaTag) {
853+
Proton = ROOT::Math::PxPyPzMVector(v0.pxpos(), v0.pypos(), v0.pzpos(), massPr);
854+
Pion = ROOT::Math::PxPyPzMVector(v0.pxneg(), v0.pyneg(), v0.pzneg(), massPi);
855+
}
856+
if (aLambdaTag) {
857+
Proton = ROOT::Math::PxPyPzMVector(v0.pxneg(), v0.pyneg(), v0.pzneg(), massPr);
858+
Pion = ROOT::Math::PxPyPzMVector(v0.pxpos(), v0.pypos(), v0.pzpos(), massPi);
859+
}
860+
Lambda = Proton + Pion;
861+
862+
ROOT::Math::Boost boost{Lambda.BoostToCM()};
863+
fourVecDauCM = boost(Proton);
864+
threeVecDauCM = fourVecDauCM.Vect();
865+
// beamvector = ROOT::Math::XYZVector(0, 0, 1);
866+
// eventplaneVec = ROOT::Math::XYZVector(collision.qFT0C(), collision.qFT0A(), 0); //this needs to be changed
867+
// eventplaneVecNorm = eventplaneVec.Cross(beamvector); //z'
868+
phiangle = TMath::ATan2(fourVecDauCM.Py(), fourVecDauCM.Px());
869+
// double phiangledir = fourVecDauCM.Phi();
870+
871+
auto phiminuspsiC = GetPhiInRange(phiangle - psiZDCC);
872+
auto phiminuspsiA = GetPhiInRange(phiangle - psiZDCA);
873+
// histos.fill(HIST("hpsiApsiC"), psiZDCA, psiZDCC);
874+
// histos.fill(HIST("hpsiApsiC"), GetPhiInRange(GetPhiInRange(phiangle) - GetPhiInRange(psiZDCA)), phiminuspsiA);
875+
// histos.fill(HIST("hphiminuspsiA"), (phiminuspsiA));
876+
// histos.fill(HIST("hphiminuspsiC"), (phiminuspsiC));
877+
// auto cosThetaStar = eventplaneVecNorm.Dot(threeVecDauCM) / std::sqrt(threeVecDauCM.Mag2()) / std::sqrt(eventplaneVecNorm.Mag2());
878+
auto cosThetaStar = fourVecDauCM.Pz() / fourVecDauCM.P(); // A0 correction
879+
auto sinThetaStar = TMath::Sqrt(1 - (cosThetaStar * cosThetaStar));
880+
auto PolC = TMath::Sin(phiminuspsiC);
881+
auto PolA = TMath::Sin(phiminuspsiA);
882+
883+
// needed for corrections
884+
auto sinPhiStar = TMath::Sin(GetPhiInRange(phiangle));
885+
auto cosPhiStar = TMath::Cos(GetPhiInRange(phiangle));
886+
auto sinThetaStarcosphiphiStar = sinThetaStar * TMath::Cos(2 * GetPhiInRange(Lambda.Phi() - phiangle)); // A2 correction
887+
auto phiphiStar = GetPhiInRange(Lambda.Phi() - phiangle);
888+
889+
auto candmass = 0.0;
890+
auto candpt = 0.0;
891+
auto candeta = 0.0;
892+
893+
if (LambdaTag) {
894+
candmass = v0.mLambda();
895+
candpt = v0.pt();
896+
candeta = v0.eta();
897+
898+
histos.fill(HIST("hSparseLambdaPolA"), candmass, candpt, candeta, PolA, centrality);
899+
histos.fill(HIST("hSparseLambdaPolC"), candmass, candpt, candeta, PolC, centrality);
900+
histos.fill(HIST("hSparseLambda_corr1a"), candmass, candpt, candeta, sinPhiStar, centrality);
901+
histos.fill(HIST("hSparseLambda_corr1b"), candmass, candpt, candeta, cosPhiStar, centrality);
902+
histos.fill(HIST("hSparseLambda_corr1c"), candmass, candpt, candeta, phiphiStar, centrality);
903+
histos.fill(HIST("hSparseLambda_corr2a"), candmass, candpt, candeta, sinThetaStar, centrality);
904+
histos.fill(HIST("hSparseLambda_corr2b"), candmass, candpt, candeta, sinThetaStarcosphiphiStar, centrality);
905+
}
906+
907+
if (aLambdaTag) {
908+
candmass = v0.mAntiLambda();
909+
candpt = v0.pt();
910+
candeta = v0.eta();
911+
912+
histos.fill(HIST("hSparseAntiLambdaPolA"), candmass, candpt, candeta, PolA, centrality);
913+
histos.fill(HIST("hSparseAntiLambdaPolC"), candmass, candpt, candeta, PolC, centrality);
914+
histos.fill(HIST("hSparseAntiLambda_corr1a"), candmass, candpt, candeta, sinPhiStar, centrality);
915+
histos.fill(HIST("hSparseAntiLambda_corr1b"), candmass, candpt, candeta, cosPhiStar, centrality);
916+
histos.fill(HIST("hSparseAntiLambda_corr1c"), candmass, candpt, candeta, phiphiStar, centrality);
917+
histos.fill(HIST("hSparseAntiLambda_corr2a"), candmass, candpt, candeta, sinThetaStar, centrality);
918+
histos.fill(HIST("hSparseAntiLambda_corr2b"), candmass, candpt, candeta, sinThetaStarcosphiphiStar, centrality);
919+
}
920+
} // end loop over V0s
921+
}
922+
PROCESS_SWITCH(lambdapolsp, processDerivedData, "Process derived data", false);
746923
};
747924
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
748925
{

0 commit comments

Comments
 (0)