Skip to content
Merged
Changes from 1 commit
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: 22 additions & 9 deletions DPG/Tasks/ITS/filterTracks.cxx
Original file line number Diff line number Diff line change
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,53 @@
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)
{
float zvtz = collision.posZ(); // dummy to silent compilation error about unused variable
if (trackPtSampling == 0) {
for (auto& track : tracks) {

Check failure on line 266 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 271 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 275 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)
{
float zvtz = collision.posZ(); // dummy to silent compilation error about unused variable
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 +317,12 @@
std::vector<int> indxDaughers;
float etamax = 0;
bool isMatchedToSignal = false;
if (std::abs(pdgCode) == 310) {

Check failure on line 320 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 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, 421, pdgDecayDzero, true, nullptr, 3, &indxDaughers);
} else if (std::abs(pdgCode) == 4122) {

Check failure on line 325 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 +341,7 @@
etamax = eta;
}
}
if (pdgCode == 310) {

Check failure on line 344 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