Skip to content
Open
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
88 changes: 59 additions & 29 deletions DPG/Tasks/AOTTrack/PID/HMPID/hmpidTableProducer.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include <TTree.h>

#include <string>
#include <unordered_set>

using namespace o2;
using namespace o2::framework;
Expand All @@ -57,24 +58,28 @@ struct HmpidTableProducer {

Produces<aod::HmpidAnalysis> hmpidAnalysis;

// using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection>;
// configurable for quality requirements
Configurable<bool> requireITS{"requireITS", true, "Require ITS track"};
Configurable<bool> requireTPC{"requireTPC", true, "Require TPC track"};
Configurable<bool> requireTOF{"requireTOF", true, "Require TOF track"};

using CollisionCandidates = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>;
using CollisionCandidates = o2::soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFV0As>;

using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection,
aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTPCFullDe,
aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::pidTOFFullDe>;

// using CentralityClass = o2::soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFV0As>;

void init(o2::framework::InitContext&)
{
// Configure CCDB
ccdb->setURL(ccdbConfig.ccdbUrl);
ccdb->setCaching(true);
ccdb->setLocalObjectValidityChecking();
ccdb->setFatalWhenNull(false);

histos.add("eventCounter", "eventCounter", kTH1F, {axisEvtCounter});
histos.add("goodEventCounter", "goodEventCounter", kTH1F, {axisEvtCounter});
histos.add("eventsHmpid", "eventsWithHmpid", kTH1F, {axisEvtCounter});
}

// function to manage ccdb
Expand All @@ -87,50 +92,75 @@ struct HmpidTableProducer {
mCCDBRunNumber = bc.runNumber();
}

void process(soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFV0As>::iterator const& col,
const aod::HMPIDs& hmpids,
TrackCandidates const&,
aod::BCsWithTimestamps const&)
void processEvent(CollisionCandidates::iterator const& col,
aod::BCsWithTimestamps const&)
{
histos.fill(HIST("eventCounter"), 0.5);
if (col.sel8()) {
histos.fill(HIST("goodEventCounter"), 0.5);
}

// initialize CCDB for current BC
initCCDB(col.bc_as<aod::BCsWithTimestamps>());
}
PROCESS_SWITCH(HmpidTableProducer, processEvent, "Process event level - collisions", true);

void processHmpid(
aod::HMPIDs const& hmpids,
TrackCandidates const&,
CollisionCandidates const&,
aod::BCsWithTimestamps const&)
{
// --- Static set to track unique collisions with HMPID tracks ---
static std::unordered_set<uint32_t> collisionsWithHmpid;

for (const auto& t : hmpids) {
for (auto const& t : hmpids) {

// global tracks associated to hmpid tracks
// Access the global track associated to the HMPID track
const auto& globalTrack = t.track_as<TrackCandidates>();
if (!globalTrack.isGlobalTrack())
continue;
if (!globalTrack.hasITS() || !globalTrack.hasTPC() || !globalTrack.hasTOF())

if (!globalTrack.has_collision())
continue;

// verify accessible collision
if (!globalTrack.has_collision()) {
// Access the associated collision
const auto& col = globalTrack.collision_as<CollisionCandidates>();
initCCDB(col.bc_as<aod::BCsWithTimestamps>());
uint32_t collId = col.globalIndex();

// --- Track quality selection ---
if ((requireITS && !globalTrack.hasITS()) ||
(requireTPC && !globalTrack.hasTPC()) ||
(requireTOF && !globalTrack.hasTOF())) {
continue;
}

// Count collisions with at least one valid HMPID track
if (collisionsWithHmpid.insert(collId).second) {
histos.fill(HIST("eventsHmpid"), 0.5);
}

float centrality = col.centFV0A();

float hmpidPhotsCharge2[o2::aod::kDimPhotonsCharge];

for (int i = 0; i < o2::aod::kDimPhotonsCharge; i++) {
hmpidPhotsCharge2[i] = t.hmpidPhotsCharge()[i];
}

float centrality = col.centFV0A();

/////FILL TABLE
hmpidAnalysis(
t.hmpidSignal(), globalTrack.phi(), globalTrack.eta(), t.hmpidMom(),
globalTrack.p(), t.hmpidXTrack(), t.hmpidYTrack(), t.hmpidXMip(),
t.hmpidYMip(), t.hmpidNPhotons(), t.hmpidQMip(), (t.hmpidClusSize() % 1000000) / 1000,
t.hmpidClusSize() / 1000000, hmpidPhotsCharge2, globalTrack.eta(), globalTrack.phi(),
globalTrack.px(), globalTrack.py(), globalTrack.pz(), globalTrack.itsNCls(),
globalTrack.tpcNClsFound(), globalTrack.tpcNClsCrossedRows(), globalTrack.tpcChi2NCl(), globalTrack.itsChi2NCl(),
globalTrack.dcaXY(), globalTrack.dcaZ(), globalTrack.tpcNSigmaPi(), globalTrack.tofNSigmaPi(),
globalTrack.tpcNSigmaKa(), globalTrack.tofNSigmaKa(), globalTrack.tpcNSigmaPr(), globalTrack.tofNSigmaPr(),
globalTrack.tpcNSigmaDe(), globalTrack.tofNSigmaDe(), centrality);
}
/////FILL HMPID CUSTOM TABLE
hmpidAnalysis(t.hmpidSignal(), t.hmpidMom(),
globalTrack.p(), t.hmpidXTrack(), t.hmpidYTrack(), t.hmpidXMip(),
t.hmpidYMip(), t.hmpidNPhotons(), t.hmpidQMip(), (t.hmpidClusSize() % 1000000) / 1000,
t.hmpidClusSize() / 1000000, hmpidPhotsCharge2, globalTrack.eta(), globalTrack.phi(),
globalTrack.px(), globalTrack.py(), globalTrack.pz(), globalTrack.itsNCls(),
globalTrack.tpcNClsFound(), globalTrack.tpcNClsCrossedRows(), globalTrack.tpcChi2NCl(), globalTrack.itsChi2NCl(),
globalTrack.dcaXY(), globalTrack.dcaZ(), globalTrack.tpcNSigmaPi(), globalTrack.tofNSigmaPi(),
globalTrack.tpcNSigmaKa(), globalTrack.tofNSigmaKa(), globalTrack.tpcNSigmaPr(), globalTrack.tofNSigmaPr(),
globalTrack.tpcNSigmaDe(), globalTrack.tofNSigmaDe(), centrality);
} // end loop on hmpid table entries
}

PROCESS_SWITCH(HmpidTableProducer, processHmpid, "Process hmpid entries - tracks", true);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfg) { return WorkflowSpec{adaptAnalysisTask<HmpidTableProducer>(cfg)}; }
5 changes: 0 additions & 5 deletions DPG/Tasks/AOTTrack/PID/HMPID/tableHMPID.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ inline constexpr int kDimPhotonsCharge = 10;
namespace variables_table
{
DECLARE_SOA_COLUMN(ChAngle, chAngle, float);
DECLARE_SOA_COLUMN(Phi, phi, float);
DECLARE_SOA_COLUMN(Eta, eta, float);
DECLARE_SOA_COLUMN(MomentumHmpid, momentumHmpid, float);
DECLARE_SOA_COLUMN(MomentumTrack, momentumTrack, float);
DECLARE_SOA_COLUMN(XTrack, xTrack, float);
Expand Down Expand Up @@ -60,15 +58,12 @@ DECLARE_SOA_COLUMN(TpcNSigmaPr, tpcNSigmaPr, float);
DECLARE_SOA_COLUMN(TofNSigmaPr, tofNSigmaPr, float);
DECLARE_SOA_COLUMN(TpcNSigmaDe, tpcNSigmaDe, float);
DECLARE_SOA_COLUMN(TofNSigmaDe, tofNSigmaDe, float);

DECLARE_SOA_COLUMN(Centrality, centrality, float);

} // namespace variables_table

DECLARE_SOA_TABLE(HmpidAnalysis, "AOD", "HMPIDANALYSIS",
variables_table::ChAngle,
variables_table::Phi,
variables_table::Eta,
variables_table::MomentumHmpid,
variables_table::MomentumTrack,
variables_table::XTrack,
Expand Down
Loading