Skip to content
Merged
Changes from 3 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
31 changes: 21 additions & 10 deletions DPG/Tasks/ITS/filterTracks.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// or submit itself to any jurisdiction.
/// \author Andrea Rossi <andrea.rossi@cern.ch>

/// \brief Simple task to filter tracks and save infos to trees for DCA-related studies (alignment, HF-related issues)
/// \brief Simple task to filter tracks and save infos to trees for DCA-related studies (alignment, HF-related issues, ...)

#include "Common/Core/RecoDecay.h"
#include "Common/Core/TrackSelection.h"
Expand Down Expand Up @@ -146,17 +146,22 @@
Produces<aod::GenParticles> selectedGenParticles;
Produces<aod::FilterColl> filterCollTable;

SliceCache cache;
// Configurable<int> dummy{"dummy", 0, "dummy"};
Configurable<float> minTrackPt{"minTrackPt", 0.25, "min track pt"};
Configurable<float> trackDcaXyMax{"trackDcaXyMax", 0.5, "max track pt"};
Configurable<int> trackPtSampling{"trackPtSampling", 0, "track sampling mode"};
Configurable<float> trackPtWeightLowPt{"trackPtWeightLowPt", 0.01f, "trackPtWeightLowPt"};
Configurable<float> trackPtWeightMidPt{"trackPtWeightMidPt", 0.10f, "trackPtWeightMidPt"};
Configurable<float> collFilterFraction{"collFilterFraction", 0.05f, "collFilterFraction"};

Filter trackFilter = requireGlobalTrackWoDCAInFilter() && aod::track::pt > minTrackPt&& nabs(aod::track::dcaXY) < trackDcaXyMax;
Filter collFilter = nabs(aod::collision::posZ * 10000.f - nround(aod::collision::posZ * 10000.f)) < collFilterFraction.node() * 2.f;
using CollisionsWithEvSel = soa::Join<aod::Collisions, aod::EvSels>;
using TracksWithSelAndDca = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa, aod::pidTPCFullPr, aod::pidTOFFullPr>;
using TracksWithSelAndDcaMc = soa::Join<TracksWithSelAndDca, aod::McTrackLabels>;
using FilterCollisionsWithEvSel = soa::Filtered<CollisionsWithEvSel>;

Partition<soa::Filtered<TracksWithSelAndDca>> lowPtTracks = aod::track::pt < 2.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightLowPt.node() * 2.f);
Partition<soa::Filtered<TracksWithSelAndDca>> midPtTracks = aod::track::pt > 2.f && aod::track::pt < 5.f && (nabs(aod::track::pt * 10000.f - nround(aod::track::pt * 10000.f)) < trackPtWeightMidPt.node() * 2.f);
Partition<soa::Filtered<TracksWithSelAndDca>> highPtTracks = aod::track::pt > 5.f;
Expand Down Expand Up @@ -203,7 +208,7 @@
// just for internal check
// double mass=particleMother.e()*particleMother.e()-particleMother.pt()*particleMother.pt()-particleMother.pz()*particleMother.pz();
// filteredTracksMC(mcparticle.pdgCode(),mcparticle.isPhysicalPrimary(),particleMother.pdgCode(),0,motherIndex,0,particleMother.pt(),particleMother.y(),std::sqrt(mass),0);
if (pdgParticleMother == 310) {

Check failure on line 211 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
auto daughtersSlice = mcparticle.template daughters_as<aod::McParticles>();
int ndaught = daughtersSlice.size(); // might not be accurate in case K0s interact with material before decaying
if (ndaught != 2)
Expand All @@ -215,13 +220,13 @@

int ndaught = 0;
std::vector<int> indxDaughers;
if (pdgParticleMother == 421) {

Check failure on line 223 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
if (RecoDecay::isMatchedMCGen<true, false>(mcParticles, particleMother, pdgParticleMother, pdgDecayDzero, true, nullptr, 3, &indxDaughers)) {
ndaught = 2;
// std::cout<<"######## FOUND D0, MATCHED! pdg: " <<particleMother.pdgCode()<<"################ size array "<<indxDaughers.size()<<std::endl;
} else
ndaught = -indxDaughers.size();
} else if (pdgParticleMother == 4122) {

Check failure on line 229 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
if (RecoDecay::isMatchedMCGen<true, false>(mcParticles, particleMother, pdgParticleMother, pdgDecayLc, true, nullptr, 3, &indxDaughers)) {
ndaught = 3;
} else
Expand Down Expand Up @@ -254,45 +259,51 @@
filteredTracksMC(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
}
void processData(soa::Filtered<TracksWithSelAndDca> const& tracks)
void processData(FilterCollisionsWithEvSel::iterator const& collision, soa::Filtered<TracksWithSelAndDca> const& tracks)
{
if (trackPtSampling == 0) {
for (auto& track : tracks) {

Check failure on line 265 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
fillTableData(track);
}
} else {
for (auto& track : lowPtTracks) {
auto lowPtTracksThisColl = lowPtTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto& track : lowPtTracksThisColl) {

Check failure on line 270 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
fillTableData(track);
}
for (auto& track : midPtTracks) {
auto midPtTracksThisColl = midPtTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto& track : midPtTracksThisColl) {

Check failure on line 274 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[const-ref-in-for-loop]

Use constant references for non-modified iterators in range-based for loops.
fillTableData(track);
}
for (auto& track : highPtTracks) {
auto highPtTracksThisColl = highPtTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto& track : highPtTracksThisColl) {
fillTableData(track);
}
}
}
PROCESS_SWITCH(FilterTracks, processData, "process data", true);
void processCollisions(CollisionsWithEvSel::iterator const& collision)
void processCollisions(FilterCollisionsWithEvSel::iterator const& collision)
{
filterCollTable(collision.bcId(), collision.posX(), collision.posY(), collision.posZ(), collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ(), collision.flags(), collision.chi2(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
}
PROCESS_SWITCH(FilterTracks, processCollisions, "process collisions", true);

void processMC(soa::Filtered<TracksWithSelAndDcaMc> const& tracks, aod::McParticles const& mcParticles)
void processMC(FilterCollisionsWithEvSel::iterator const& collision, soa::Filtered<TracksWithSelAndDcaMc> const& tracks, aod::McParticles const& mcParticles)
{
if (trackPtSampling == 0) {
for (auto& track : tracks) {
fillTableDataMC(track, mcParticles);
}
} else {
for (auto& track : lowPtTracksMC) {
auto lowPtTracksMCThisColl = lowPtTracksMC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto& track : lowPtTracksMCThisColl) {
fillTableDataMC(track, mcParticles);
}
for (auto& track : midPtTracksMC) {
auto midPtTracksMCThisColl = midPtTracksMC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto& track : midPtTracksMCThisColl) {
fillTableDataMC(track, mcParticles);
}
for (auto& track : highPtTracksMC) {
auto highPtTracksMCThisColl = highPtTracksMC->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache);
for (auto& track : highPtTracksMCThisColl) {
fillTableDataMC(track, mcParticles);
}
}
Expand All @@ -304,12 +315,12 @@
std::vector<int> indxDaughers;
float etamax = 0;
bool isMatchedToSignal = false;
if (std::abs(pdgCode) == 310) {

Check failure on line 318 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
isMatchedToSignal = RecoDecay::isMatchedMCGen<true, false>(mcParticles, mcpart, 310, pdgDecayKzero, true, nullptr, 1, &indxDaughers);
}
if (std::abs(pdgCode) == 421) {

Check failure on line 321 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
isMatchedToSignal = RecoDecay::isMatchedMCGen<true, false>(mcParticles, mcpart, 421, pdgDecayDzero, true, nullptr, 3, &indxDaughers);
} else if (std::abs(pdgCode) == 4122) {

Check failure on line 323 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
isMatchedToSignal = RecoDecay::isMatchedMCGen<true, false>(mcParticles, mcpart, 4122, pdgDecayLc, true, nullptr, 3, &indxDaughers);
// std::cout<<"Lc found, matched to MC? "<<isMatchedToSignal<<std::endl;
// if(!isMatchedToSignal){
Expand All @@ -328,7 +339,7 @@
etamax = eta;
}
}
if (pdgCode == 310) {

Check failure on line 342 in DPG/Tasks/ITS/filterTracks.cxx

View workflow job for this annotation

GitHub Actions / O2 linter

[pdg/explicit-code]

Avoid hard-coded PDG codes. Use named values from PDG_t or o2::constants::physics::Pdg instead.
selectedGenParticles(mcpart.pdgCode(), mcpart.mcCollisionId(), 0, mcpart.pt(), mcpart.y(), etamax, 0, 0);
continue;
}
Expand Down
Loading