Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 45 additions & 58 deletions PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@
auto static constexpr TotFt0Channels = 208;
AxisSpec axisEvent{15, 0.5, 15.5, "#Event", "EventAxis"};
auto static constexpr KminCharge = 3.0f;
static constexpr std::string_view species[] = {"Pi", "Ka", "Pr", "K0s", "L0s"};
static constexpr std::array<int, 5> speciesIds{kPiPlus, kKPlus, kProton, kK0Short, kLambda0};
static constexpr std::string_view species[] = {"Pi", "Ka", "Pr"};
static constexpr std::array<int, 3> speciesIds{kPiPlus, kKPlus, kProton};

enum KindOfV0 {
kLambda = 0,
Expand Down Expand Up @@ -143,7 +143,7 @@
Configurable<float> cfigFt0cEtaMax{"cfigFt0cEtaMax", -2.1f, "Maximum FT0C eta cut"};
Configurable<float> cfigFt0cEtaMin{"cfigFt0cEtaMin", -3.3f, "Minimum FT0C eta cut"};
Configurable<bool> useGainCallib{"useGainCallib", true, "use gain calibration"};
Configurable<std::string> ConfGainPath{"ConfGainPath", "Analysis/EventPlane/GainEq/FT0", "Path to gain calibration"};

Check failure on line 146 in PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[name/configurable]

Use lowerCamelCase for names of configurables and use the same name for the struct member as for the JSON string. (Declare the type and names on the same line.)
} cfgfittrksel;

struct : ConfigurableGroup {
Expand Down Expand Up @@ -178,13 +178,13 @@
Configurable<std::vector<double>> tofNsigmaPidCut{"tofNsigmaPidCut", std::vector<double>{1.5, 1.5, 1.5, -1.5, -1.5, -1.5}, "TOF n-sigma cut for pions_posNsigma, kaons_posNsigma, protons_posNsigma, pions_negNsigma, kaons_negNsigma, protons_negNsigma"};
Configurable<float> cfgTofPidPtCut{"cfgTofPidPtCut", 0.3f, "Minimum pt to use TOF N-sigma"};
Configurable<bool> isUseItsPid{"isUseItsPid", false, "Use ITS PID for particle identification"};
Configurable<int> isUseDataLikeMult{"isUseDataLikeMult", 0, "Data like mult/cent classification"};
Configurable<bool> isUseCentEst{"isUseCentEst", false, "Centrality based classification"};

ConfigurableAxis vtxHistBin{"vtxHistBin", {20, -10, 10}, ""};
ConfigurableAxis multHistBin{"multHistBin", {100, 0, 100}, ""};
ConfigurableAxis etaHistBin{"etaHistBin", {20, -1, 1}, ""};
ConfigurableAxis ptHistBin{"ptHistBin", {10, 0, 10}, ""};
ConfigurableAxis speciesHistBin{"speciesHistBin", {6, 0.5, 6.5}, ""};
ConfigurableAxis speciesHistBin{"speciesHistBin", {4, 0.5, 4.5}, ""};

Service<o2::ccdb::BasicCCDBManager> ccdb;
Service<o2::framework::O2DatabasePDG> pdg;
Expand Down Expand Up @@ -252,8 +252,8 @@
axisGen->SetBinLabel(i + 1, species[i].data());
axisRec->SetBinLabel(i + 1, species[i].data());
}
axisGen->SetBinLabel(6, "Other");
axisRec->SetBinLabel(6, "Other");
axisGen->SetBinLabel(4, "Other");
axisRec->SetBinLabel(4, "Other");
}

myTrackFilter = getGlobalTrackSelectionRun3ITSMatch(TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSibAny, TrackSelection::GlobalTrackRun3DCAxyCut::Default);
Expand Down Expand Up @@ -735,43 +735,37 @@
return;
}
auto multiplicity = 0;
for (const auto& particle : mcparticles) {
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMult)
bool atLeastOne = false;
for (const auto& RecCol : RecCols) {
if (!isEventSelected(RecCol))
continue;
multiplicity++;
}
if (isUseDataLikeMult > 0) {
for (const auto& RecCol : RecCols) {
if (!isEventSelected(RecCol)) {
continue;
}
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
continue;
}
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
continue;
}
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
continue;
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
continue;
if (isUseCentEst) {
multiplicity = selColCent(RecCol);
} else {
auto recTracksPart = RecTracks.sliceBy(perColMidtrack, RecCol.globalIndex());
multiplicity = countNTracks(recTracksPart);
}
atLeastOne = true;
}

for (const auto& particle : mcparticles) {
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMult)
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMax)
continue;
auto pos = std::distance(speciesIds.begin(), std::find(speciesIds.begin(), speciesIds.end(), particle.pdgCode())) + 1;
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), pos);
if (atLeastOne) {
auto pos = std::distance(speciesIds.begin(), std::find(speciesIds.begin(), speciesIds.end(), particle.pdgCode())) + 1;
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), pos);
}
}

for (const auto& RecCol : RecCols) {
if (!isEventSelected(RecCol)) {
if (!isEventSelected(RecCol))
continue;
}
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
continue;
}
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
continue;
}
auto recTracksPart = RecTracks.sliceBy(perColMidtrack, RecCol.globalIndex());
for (const auto& track : recTracksPart) {
if (!track.isGlobalTrack())
Expand All @@ -790,50 +784,43 @@
}
}
}

void processMFTtrackEff(ColMCTrueTable::iterator const& mcCollision, ColMCRecTable const& RecCols,
MftTrkMCRecTable const& mfttracks, aod::McParticles const& mcparticles)
TrksMCRecTable const& RecTracks, MftTrkMCRecTable const& mfttracks,
aod::McParticles const& mcparticles)
{
if (std::abs(mcCollision.posZ()) >= cfgevtsel.cfgVtxCut) {
return;
}
auto multiplicity = 0;
for (const auto& particle : mcparticles) {
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMult)
bool atLeastOne = false;
for (const auto& RecCol : RecCols) {
if (!isEventSelected(RecCol))
continue;
multiplicity++;
}
if (isUseDataLikeMult > 0) {
for (const auto& RecCol : RecCols) {
if (!isEventSelected(RecCol)) {
continue;
}
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
continue;
}
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
continue;
}
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
continue;
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
continue;
if (isUseCentEst) {
multiplicity = selColCent(RecCol);
} else {
auto recTracksPart = RecTracks.sliceBy(perColMidtrack, RecCol.globalIndex());
multiplicity = countNTracks(recTracksPart);
}
atLeastOne = true;
}

for (const auto& particle : mcparticles) {
if (!isGenPartSelected(particle) || particle.eta() > cfgmfttrksel.cfigMftEtaMax || particle.eta() < cfgmfttrksel.cfigMftEtaMin || particle.pt() < cfgmfttrksel.cfgMftPtCutMin || particle.pt() > cfgmfttrksel.cfgMftPtCutMax)
continue;
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), 1.0);
if (atLeastOne)
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), 1.0);
}

for (const auto& RecCol : RecCols) {
if (!isEventSelected(RecCol)) {
if (!isEventSelected(RecCol))
continue;
}
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
continue;
}
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
continue;
}
auto recTracksPart = mfttracks.sliceBy(perColMfttrack, RecCol.globalIndex());
for (const auto& track : recTracksPart) {
if (!isMftTrackSelected(track))
Expand Down
71 changes: 55 additions & 16 deletions PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,6 @@ struct LongrangecorrDerived {
Configurable<float> cfgZdcCut{"cfgZdcCut", 0.1f, "ZDC threshold"};
Configurable<int> cfgGapSideCut{"cfgGapSideCut", 0, "Gap-side A=0, C=1, AC = 2, No Gap = -1, All events = 3"};

Configurable<bool> isApplyAmpCut{"isApplyAmpCut", false, "Enable FT0 amplitude cut"};
Configurable<float> cfgLowAmpCut{"cfgLowAmpCut", 2.0f, "Low FT0 amplitude cut"};

ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 10, 15, 25, 50, 60, 1000}, "multiplicity axis"};
ConfigurableAxis axisPhi{"axisPhi", {96, 0, TwoPI}, "#phi axis"};
ConfigurableAxis axisEtaTrig{"axisEtaTrig", {40, -1., 1.}, "#eta trig axis"};
Expand Down Expand Up @@ -165,6 +162,10 @@ struct LongrangecorrDerived {
histos.add("Trig_pt", "Trig_pt", kTH1D, {axisPtTrigger});
histos.add("Trig_invMass", "Trig_invMass", kTH1D, {axisInvMassQA});
histos.add("Trig_hist", "Trig_hist", kTHnSparseF, {axisVtxZ, axisMultiplicity, axisPtTrigger, axisInvMass});
histos.add("Trig_amp", "Trig_amp", kTH1D, {axisAmplitude});
histos.add("Trig_amp_gaincorrected", "Trig_amp_gaincorrected", kTH1D, {axisAmplitude});
histos.add("Channel_vs_Trig_amp", "Channel_vs_Trig_amp", kTH2D, {axisChannel, axisAmplitude});
histos.add("Channel_vs_Trig_amp_gaincorrected", "Channel_vs_Trig_amp_gaincorrected", kTH2D, {axisChannel, axisAmplitude});

histos.add("Assoc_eta", "Assoc_eta", kTH1D, {axisEtaAssoc});
histos.add("Assoc_phi", "Assoc_phi", kTH1D, {axisPhi});
Expand Down Expand Up @@ -195,7 +196,14 @@ struct LongrangecorrDerived {
histos.fill(HIST("Trig_etavsphi"), track.phi(), track.eta());
histos.fill(HIST("Trig_eta"), track.eta());
histos.fill(HIST("Trig_phi"), track.phi());
histos.fill(HIST("Trig_pt"), track.pt());
if constexpr (std::experimental::is_detected<HasFt0, TTrack>::value) {
histos.fill(HIST("Trig_amp"), track.amplitude());
histos.fill(HIST("Channel_vs_Trig_amp"), track.channelID(), track.amplitude());
histos.fill(HIST("Trig_amp_gaincorrected"), track.gainAmplitude());
histos.fill(HIST("Channel_vs_Trig_amp_gaincorrected"), track.channelID(), track.gainAmplitude());
} else {
histos.fill(HIST("Trig_pt"), track.pt());
}
if constexpr (std::experimental::is_detected<HasInvMass, TTrack>::value) {
histos.fill(HIST("Trig_invMass"), track.invMass());
}
Expand Down Expand Up @@ -251,6 +259,7 @@ struct LongrangecorrDerived {
template <CorrelationContainer::CFStep step, typename TTarget, typename TTriggers, typename TAssocs>
void fillCorrHist(TTarget target, TTriggers const& triggers, TAssocs const& assocs, bool mixing, float vz, float multiplicity, float eventWeight)
{
auto trigAmpl = 1.0f;
for (auto const& triggerTrack : triggers) {
if constexpr (std::experimental::is_detected<HasTpcTrack, typename TTriggers::iterator>::value) {
if (cfgPidMask != 0 && (cfgPidMask & (1u << static_cast<uint32_t>(triggerTrack.trackType()))) == 0u)
Expand All @@ -259,33 +268,39 @@ struct LongrangecorrDerived {
if (cfgV0Mask != 0 && (cfgV0Mask & (1u << static_cast<uint32_t>(triggerTrack.v0Type()))) == 0u)
continue;
}
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
trigAmpl *= triggerTrack.gainAmplitude();
}
if (!mixing) {
fillTrigTrackQA(triggerTrack);
if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight);
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
histos.fill(HIST("Trig_hist"), vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl);
} else if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl);
} else {
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight);
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl);
}
}
auto ampl = 1.0f;
auto assoAmpl = 1.0f;
for (auto const& assoTrack : assocs) {
if constexpr (std::experimental::is_detected<HasFt0, typename TAssocs::iterator>::value) {
if (isApplyAmpCut && (assoTrack.amplitude() < cfgLowAmpCut))
continue;
ampl *= assoTrack.gainAmplitude();
assoAmpl *= assoTrack.gainAmplitude();
}
float deltaPhi = RecoDecay::constrainAngle(triggerTrack.phi() - assoTrack.phi(), -PIHalf);
float deltaEta = triggerTrack.eta() - assoTrack.eta();
if (!mixing) {
fillAssocTrackQA(assoTrack);
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * ampl);
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl);
} else {
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * ampl);
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl);
}
if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * ampl);

if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
target->getPairHist()->Fill(step, vz, multiplicity, 1.0, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl);
} else if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl);
} else {
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * ampl);
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl);
}
} // associated tracks
} // trigger tracks
Expand Down Expand Up @@ -446,6 +461,11 @@ struct LongrangecorrDerived {
processSame(col, tracks, mfts);
}

void processFt0aft0cSE(CollsTable::iterator const& col, Ft0aTrksTable const& ft0as, Ft0cTrksTable const& ft0cs)
{
processSame(col, ft0as, ft0cs);
}

void processTpcft0aME(CollsTable const& cols, TrksTable const& tracks, Ft0aTrksTable const& ft0as)
{
processMixed(cols, tracks, ft0as);
Expand Down Expand Up @@ -491,6 +511,11 @@ struct LongrangecorrDerived {
processMixed(cols, tracks, mfts);
}

void processFt0aft0cME(CollsTable const& cols, Ft0aTrksTable const& ft0as, Ft0cTrksTable const& ft0cs)
{
processMixed(cols, ft0as, ft0cs);
}

void processUpcTpcft0aSE(UpcCollsTable::iterator const& col, TrksUpcTable const& tracks, Ft0aTrksUpcTable const& ft0as)
{
if (!isUpcEventSelected<true>(col)) {
Expand Down Expand Up @@ -628,6 +653,11 @@ struct LongrangecorrDerived {
processMcSame(mccollision, collisions, mfts, ft0as);
}

void processMcFt0aft0cSE(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, McFt0aTrksTable const& ft0as, McFt0cTrksTable const& ft0cs)
{
processMcSame(mccollision, collisions, ft0as, ft0cs);
}

void processMcTpcft0aME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McTrksTable const& tracks, McFt0aTrksTable const& ft0as)
{
processMcMixed(mccollisions, collisions, tracks, ft0as);
Expand All @@ -648,6 +678,11 @@ struct LongrangecorrDerived {
processMcMixed(mccollisions, collisions, mfts, ft0as);
}

void processMcFt0aft0cME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McFt0aTrksTable const& ft0as, McFt0cTrksTable const& ft0cs)
{
processMcMixed(mccollisions, collisions, ft0as, ft0cs);
}

PROCESS_SWITCH(LongrangecorrDerived, processTpcft0aSE, "same event TPC vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0aME, "mixed event TPC vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0cSE, "same event TPC vs FT0C", false);
Expand All @@ -666,6 +701,8 @@ struct LongrangecorrDerived {
PROCESS_SWITCH(LongrangecorrDerived, processMftbestft0aME, "mixed event best MFT vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processV0mftbestSE, "same event V0 vs best MFT", false);
PROCESS_SWITCH(LongrangecorrDerived, processV0mftbestME, "mixed event V0 vs best MFT", false);
PROCESS_SWITCH(LongrangecorrDerived, processFt0aft0cSE, "same event FT0A vs FT0C", false);
PROCESS_SWITCH(LongrangecorrDerived, processFt0aft0cME, "mixed event FT0A vs FT0C", false);
PROCESS_SWITCH(LongrangecorrDerived, processUpcTpcft0aSE, "same UPC event TPC vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processUpcTpcft0aME, "mixed UPC event TPC vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processUpcTpcft0cSE, "same UPC event TPC vs FT0C", false);
Expand All @@ -692,6 +729,8 @@ struct LongrangecorrDerived {
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcmftME, "mixed MC event TPC vs MFT", false);
PROCESS_SWITCH(LongrangecorrDerived, processMcMftft0aSE, "same MC event MFT vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processMcMftft0aME, "mixed MC event MFT vs FT0A", false);
PROCESS_SWITCH(LongrangecorrDerived, processMcFt0aft0cSE, "same MC event FT0A vs FT0C", false);
PROCESS_SWITCH(LongrangecorrDerived, processMcFt0aft0cME, "mixed MC event FT0A vs FT0C", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down
Loading