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
447 changes: 198 additions & 249 deletions PWGCF/Femto3D/DataModel/singletrackselector.h

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion PWGCF/Femto3D/TableProducer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
# granted to it by virtue of its status as an Intergovernmental Organization
# or submit itself to any jurisdiction.

add_subdirectory(Converters)
#add_subdirectory(Converters)

o2physics_add_dpl_workflow(single-track-selector
SOURCES singleTrackSelector.cxx
Expand All @@ -19,4 +19,9 @@ o2physics_add_dpl_workflow(single-track-selector
o2physics_add_dpl_workflow(single-track-selector-extra
SOURCES singleTrackSelectorExtra.cxx
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)

o2physics_add_dpl_workflow(single-track-selector-pid-dummy
SOURCES singleTrackSelectorPIDMaker.cxx
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
COMPONENT_NAME Analysis)
74 changes: 36 additions & 38 deletions PWGCF/Femto3D/TableProducer/singleTrackSelector.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,16 @@ struct singleTrackSelector {
Produces<o2::aod::SingleCollExtras> tableRowCollExtra;
Produces<o2::aod::SingleTrackSels> tableRow;
Produces<o2::aod::SingleTrkExtras> tableRowExtra;

Produces<o2::aod::SinglePIDEls> tableRowPIDEl;
Produces<o2::aod::SinglePIDsITSPi> tableRowPIDITSPi;
Produces<o2::aod::SinglePIDsITSKa> tableRowPIDITSKa;
Produces<o2::aod::SinglePIDsITSPr> tableRowPIDITSPr;
Produces<o2::aod::SinglePIDPis> tableRowPIDPi;
Produces<o2::aod::SinglePIDKas> tableRowPIDKa;
Produces<o2::aod::SinglePIDPrs> tableRowPIDPr;
Produces<o2::aod::SinglePIDDes> tableRowPIDDe;
Produces<o2::aod::SinglePIDHes> tableRowPIDHe;

Produces<o2::aod::SingleTrkMCs> tableRowMC;
// Produces<o2::aod::SingleTrkMCExtras> tableRowMCExtra;

Filter eventFilter = (applyEvSel.node() == 0) ||
((applyEvSel.node() == 1) && (aod::evsel::sel7 == true)) ||
Expand Down Expand Up @@ -237,26 +242,29 @@ struct singleTrackSelector {
singletrackselector::packSymmetric<singletrackselector::binning::dca>(track.dcaZ()),
singletrackselector::packInTable<singletrackselector::binning::chi2>(track.tpcChi2NCl()),
singletrackselector::packInTable<singletrackselector::binning::chi2>(track.itsChi2NCl()),
singletrackselector::packInTable<singletrackselector::binning::rowsOverFindable>(track.tpcCrossedRowsOverFindableCls()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaPi()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaPi()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaKa()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaKa()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaPr()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaPr()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaDe()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaDe()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaHe()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaHe()));
singletrackselector::packInTable<singletrackselector::binning::rowsOverFindable>(track.tpcCrossedRowsOverFindableCls()));

tableRowExtra(track.tpcInnerParam(),
track.tpcSignal(),
track.beta());

tableRowPIDEl(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaEl()));
tableRowPIDITSPi(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.itsNSigmaPi()));
tableRowPIDITSKa(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.itsNSigmaKa()));
tableRowPIDITSPr(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.itsNSigmaPr()));
tableRowPIDEl(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaEl()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaEl()));

tableRowPIDPi(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaPi()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaPi()));

tableRowPIDKa(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaKa()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaKa()));

tableRowPIDPr(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaPr()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaPr()));

tableRowPIDDe(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaDe()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaDe()));

tableRowPIDHe(singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tofNSigmaHe()),
singletrackselector::packSymmetric<singletrackselector::binning::nsigma>(track.tpcNSigmaHe()));

if constexpr (isMC) {
int origin = -1;
Expand All @@ -277,6 +285,10 @@ struct singleTrackSelector {
track.mcParticle().p(),
track.mcParticle().eta(),
track.mcParticle().phi());

// tableRowMCExtra(track.mcParticle().vx(),
// track.mcParticle().vy(),
// track.mcParticle().vz());
}
break; // break the loop with particlesToKeep after the 'if' condition is satisfied -- don't want double entries
}
Expand All @@ -288,10 +300,6 @@ struct singleTrackSelector {
aod::BCsWithTimestamps const&)
{

auto tracksWithITSPid = soa::Attach<Trks,
aod::pidits::ITSNSigmaPi,
aod::pidits::ITSNSigmaKa,
aod::pidits::ITSNSigmaPr>(tracks);
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
initCCDB(bc);

Expand Down Expand Up @@ -320,7 +328,7 @@ struct singleTrackSelector {
collision.posZ(),
d_bz);

fillTrackTables<false>(tracksWithITSPid);
fillTrackTables<false>(tracks);
}
}
PROCESS_SWITCH(singleTrackSelector, processDataRun2, "process data Run2", false);
Expand All @@ -329,10 +337,7 @@ struct singleTrackSelector {
soa::Filtered<Trks> const& tracks,
aod::BCsWithTimestamps const&)
{
auto tracksWithITSPid = soa::Attach<Trks,
aod::pidits::ITSNSigmaPi,
aod::pidits::ITSNSigmaKa,
aod::pidits::ITSNSigmaPr>(tracks);

auto bc = collision.bc_as<aod::BCsWithTimestamps>();
initCCDB(bc);

Expand Down Expand Up @@ -403,7 +408,7 @@ struct singleTrackSelector {
hadronicRate,
occupancy);

fillTrackTables<false>(tracksWithITSPid);
fillTrackTables<false>(tracks);
}
}
PROCESS_SWITCH(singleTrackSelector, processDataRun3, "process data Run3", true);
Expand All @@ -413,10 +418,6 @@ struct singleTrackSelector {
aod::McParticles const&, aod::BCsWithTimestamps const&)
{

auto tracksWithITSPid = soa::Attach<soa::Join<Trks, aod::McTrackLabels>,
aod::pidits::ITSNSigmaPi,
aod::pidits::ITSNSigmaKa,
aod::pidits::ITSNSigmaPr>(tracks);
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
initCCDB(bc);

Expand Down Expand Up @@ -444,7 +445,7 @@ struct singleTrackSelector {
collision.posZ(),
d_bz);

fillTrackTables<true>(tracksWithITSPid);
fillTrackTables<true>(tracks);
}
}
PROCESS_SWITCH(singleTrackSelector, processMCRun2, "process MC Run2", false);
Expand All @@ -454,10 +455,7 @@ struct singleTrackSelector {
aod::McParticles const& mcParticles,
aod::BCsWithTimestamps const&)
{
auto tracksWithITSPid = soa::Attach<soa::Join<Trks, aod::McTrackLabels>,
aod::pidits::ITSNSigmaPi,
aod::pidits::ITSNSigmaKa,
aod::pidits::ITSNSigmaPr>(tracks);

auto bc = collision.bc_as<aod::BCsWithTimestamps>();
initCCDB(bc);
double hadronicRate = 0.;
Expand Down Expand Up @@ -519,7 +517,7 @@ struct singleTrackSelector {
hadronicRate,
occupancy);

fillTrackTables<true>(tracksWithITSPid);
fillTrackTables<true>(tracks);

if (!enable_gen_info) {
return;
Expand Down
16 changes: 1 addition & 15 deletions PWGCF/Femto3D/TableProducer/singleTrackSelectorExtra.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -34,27 +34,13 @@ struct singleTrackSelectorDummy {

Produces<o2::aod::SingleCollExtras> tableRowCollExtra;

void processDefault(aod::SingleCollSels::iterator const&)
void process(aod::SingleCollSels::iterator const&)
{
uint64_t selection = 0;
tableRowCollExtra(selection,
0.0,
0);
}
PROCESS_SWITCH(singleTrackSelectorDummy, processDefault, "filling the CollExtra table with dummy values", true);

void processExtra_v0(soa::Join<aod::SingleCollSels, aod::SingleCollExtras_v0>::iterator const& collision)
{
uint64_t selection = 0;
selection |= collision.isNoSameBunchPileup() ? BIT(evsel::kNoSameBunchPileup) : 0;
selection |= collision.isGoodZvtxFT0vsPV() ? BIT(evsel::kIsGoodZvtxFT0vsPV) : 0;
selection |= collision.isVertexITSTPC() ? BIT(evsel::kIsVertexITSTPC) : 0;

tableRowCollExtra(selection,
collision.hadronicRate(),
0);
}
PROCESS_SWITCH(singleTrackSelectorDummy, processExtra_v0, "process using info from the previous version of stored CollExtra table", false);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down
146 changes: 146 additions & 0 deletions PWGCF/Femto3D/TableProducer/singleTrackSelectorPIDMaker.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.
//
/// \file singleTrackSelectorPIDMaker.cxx
/// \brief creates dummy tables for PID columns that are not in the derived data
/// \author Sofia Tomassini, Gleb Romanenko, Nicolò Jacazio
/// \since 22 January 2025

#include <fairlogger/Logger.h>
#include <Framework/AnalysisDataModel.h>

#include <vector>
#include <string>
#include <unordered_map>

#include "PWGCF/Femto3D/DataModel/singletrackselector.h"

#include "Framework/AnalysisTask.h"
#include "Framework/runDataProcessing.h"

using namespace o2;
using namespace o2::framework;
using namespace o2::framework::expressions;
using namespace o2::track;
using namespace o2::aod;
//::singletrackselector; // the namespace defined in .h

struct StPidEl {
Produces<o2::aod::SinglePIDEls> table;
void process(o2::aod::SingleTrackSels const& tracks)
{
table.reserve(tracks.size());
for (int i = 0; i < tracks.size(); i++) {
table(singletrackselector::binning::nsigma::underflowBin,
singletrackselector::binning::nsigma::underflowBin);
}
}
};
struct StPidPi {
Produces<o2::aod::SinglePIDPis> table;
void process(o2::aod::SingleTrackSels const& tracks)
{
table.reserve(tracks.size());
for (int i = 0; i < tracks.size(); i++) {
table(singletrackselector::binning::nsigma::underflowBin,
singletrackselector::binning::nsigma::underflowBin);
}
}
};
struct StPidKa {
Produces<o2::aod::SinglePIDKas> table;
void process(o2::aod::SingleTrackSels const& tracks)
{
table.reserve(tracks.size());
for (int i = 0; i < tracks.size(); i++) {
table(singletrackselector::binning::nsigma::underflowBin,
singletrackselector::binning::nsigma::underflowBin);
}
}
};
struct StPidPr {
Produces<o2::aod::SinglePIDPrs> table;
void process(o2::aod::SingleTrackSels const& tracks)
{
table.reserve(tracks.size());
for (int i = 0; i < tracks.size(); i++) {
table(singletrackselector::binning::nsigma::underflowBin,
singletrackselector::binning::nsigma::underflowBin);
}
}
};
struct StPidDe {
Produces<o2::aod::SinglePIDDes> table;
void process(o2::aod::SingleTrackSels const& tracks)
{
table.reserve(tracks.size());
for (int i = 0; i < tracks.size(); i++) {
table(singletrackselector::binning::nsigma::underflowBin,
singletrackselector::binning::nsigma::underflowBin);
}
}
};
struct StPidHe {
Produces<o2::aod::SinglePIDHes> table;
void process(o2::aod::SingleTrackSels const& tracks)
{
table.reserve(tracks.size());
for (int i = 0; i < tracks.size(); i++) {
table(singletrackselector::binning::nsigma::underflowBin,
singletrackselector::binning::nsigma::underflowBin);
}
}
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
{
auto workflow = WorkflowSpec{};

// Check if 'aod-metadata-tables' option is available in the config context
if (cfgc.options().hasOption("aod-metadata-tables")) {
const std::vector<std::string> tables = cfgc.options().get<std::vector<std::string>>("aod-metadata-tables");

// Map of table names to their corresponding converter task functions
std::unordered_map<std::string, std::vector<std::function<void()>>> tableToTasks = {
{"O2singlepidel", {[&]() { workflow.push_back(adaptAnalysisTask<StPidEl>(cfgc)); }}},
{"O2singlepidpi", {[&]() { workflow.push_back(adaptAnalysisTask<StPidPi>(cfgc)); }}},
{"O2singlepidka", {[&]() { workflow.push_back(adaptAnalysisTask<StPidKa>(cfgc)); }}},
{"O2singlepidpr", {[&]() { workflow.push_back(adaptAnalysisTask<StPidPr>(cfgc)); }}},
{"O2singlepidde", {[&]() { workflow.push_back(adaptAnalysisTask<StPidDe>(cfgc)); }}},
{"O2singlepidhe", {[&]() { workflow.push_back(adaptAnalysisTask<StPidHe>(cfgc)); }}}

};

for (auto const& tableInWorkflow : tables) {
LOG(info) << tableInWorkflow;
}

// Iterate through the tables and process based on the mapping
for (auto const& table : tableToTasks) {
bool foundIt = false;
for (auto const& tableInWorkflow : tables) {
if (tableInWorkflow == table.first) {
foundIt = true;
break;
}
}
if (foundIt)
continue;
for (auto const& task : table.second) {
LOG(info) << "Adding task " << table.first;
task();
}
}
} else {
LOG(warning) << "AOD converter: No tables found in the meta data";
}
return workflow;
}
5 changes: 4 additions & 1 deletion PWGCF/Femto3D/Tasks/femto3dPairTask.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
#include <random>
#include <chrono>
#include <vector>
#include <map>
#include <memory>
#include <utility>
#include <TParameter.h>
#include <TH1F.h>

Expand Down Expand Up @@ -118,7 +121,7 @@ struct FemtoCorrelations {
std::pair<int, std::vector<float>> TOFcuts_2;

using FilteredCollisions = soa::Join<aod::SingleCollSels, aod::SingleCollExtras>;
using FilteredTracks = aod::SingleTrackSels;
using FilteredTracks = soa::Join<aod::SingleTrackSels, aod::SinglePIDPis, aod::SinglePIDKas, aod::SinglePIDPrs, aod::SinglePIDDes, aod::SinglePIDHes>;

typedef std::shared_ptr<soa::Filtered<FilteredTracks>::iterator> trkType;
typedef std::shared_ptr<soa::Filtered<FilteredCollisions>::iterator> colType;
Expand Down
5 changes: 4 additions & 1 deletion PWGCF/Femto3D/Tasks/femto3dPairTaskMC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
/// \since 31 May 2023

#include <vector>
#include <map>
#include <memory>
#include <utility>
#include <TParameter.h>
#include <TH1F.h>

Expand Down Expand Up @@ -100,7 +103,7 @@ struct FemtoCorrelationsMC {
std::pair<int, std::vector<float>> TOFcuts_2;

using FilteredCollisions = soa::Join<aod::SingleCollSels, aod::SingleCollExtras>;
using FilteredTracks = soa::Join<aod::SingleTrackSels, aod::SingleTrkMCs>;
using FilteredTracks = soa::Join<aod::SingleTrackSels, aod::SingleTrkMCs, aod::SinglePIDPis, aod::SinglePIDKas, aod::SinglePIDPrs, aod::SinglePIDDes, aod::SinglePIDHes>;

typedef std::shared_ptr<soa::Filtered<FilteredTracks>::iterator> trkType;
typedef std::shared_ptr<soa::Filtered<FilteredCollisions>::iterator> colType;
Expand Down
Loading
Loading