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
385 changes: 150 additions & 235 deletions PWGEM/Dilepton/Core/DileptonHadronMPC.h

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions PWGEM/Dilepton/Core/EMTrackCut.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,9 @@ void EMTrackCut::RequireITSib1st(bool flag)
mRequireITSib1st = flag;
LOG(info) << "EMTrack Cut, require ITS ib 1st: " << mRequireITSib1st;
}

void EMTrackCut::SetTrackBits(uint16_t bits)
{
mTrackBits = bits;
LOG(info) << "EMTrack Cut, require track bits: " << mTrackBits;
}
137 changes: 73 additions & 64 deletions PWGEM/Dilepton/Core/EMTrackCut.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
#ifndef PWGEM_DILEPTON_CORE_EMTRACKCUT_H_
#define PWGEM_DILEPTON_CORE_EMTRACKCUT_H_

// #include "PWGEM/Dilepton/Utils/EMTrackUtilities.h"
#include "PWGEM/Dilepton/Utils/EMTrackUtilities.h"

#include "CommonConstants/PhysicsConstants.h"
#include "Framework/DataTypes.h"
Expand All @@ -31,7 +31,7 @@
#include <utility>
#include <vector>

// using namespace o2::aod::pwgem::dilepton::utils::emtrackutil;
using namespace o2::aod::pwgem::dilepton::utils::emtrackutil;

class EMTrackCut : public TNamed
{
Expand All @@ -45,80 +45,84 @@ class EMTrackCut : public TNamed
kTrackPtRange,
kTrackEtaRange,
kTrackPhiRange,
kDCAxy,
kDCAz,
kTPCNCls,
kTPCCrossedRows,
kTPCCrossedRowsOverNCls,
kTPCFracSharedClusters,
kTPCChi2NDF,
kDCAxy,
kDCAz,
kITSNCls,
kITSChi2NDF,
kTrackBits,
kNCuts
};

template <typename TTrack>
bool IsSelected(TTrack const& track) const
{
if (!track.hasITS() || !track.hasTPC()) {
return false;
}
// if (!track.hasITS() || !track.hasTPC()) {
// return false;
// }

if (!IsSelectedTrack(track, EMTrackCuts::kTrackPtRange)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kTrackEtaRange)) {
return false;
}

if (!IsSelectedTrack(track, EMTrackCuts::kTrackPhiRange)) {
return false;
}

if (!IsSelectedTrack(track, EMTrackCuts::kDCAxy)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kDCAz)) {
return false;
}

// ITS cuts
if (!IsSelectedTrack(track, EMTrackCuts::kITSNCls)) {
if (!IsSelectedTrack(track, EMTrackCuts::kTrackBits)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kITSChi2NDF)) {
return false;
}

if (mRequireITSibAny) {
auto hits_ib = std::count_if(its_ib_any_Requirement.second.begin(), its_ib_any_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
if (hits_ib < its_ib_any_Requirement.first) {
return false;
}
}

if (mRequireITSib1st) {
auto hits_ib = std::count_if(its_ib_1st_Requirement.second.begin(), its_ib_1st_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
if (hits_ib < its_ib_1st_Requirement.first) {
return false;
}
}

// TPC cuts
if (!IsSelectedTrack(track, EMTrackCuts::kTPCNCls)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kTPCCrossedRows)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kTPCCrossedRowsOverNCls)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kTPCFracSharedClusters)) {
return false;
}
if (!IsSelectedTrack(track, EMTrackCuts::kTPCChi2NDF)) {
return false;
}
// // ITS cuts
// if (!IsSelectedTrack(track, EMTrackCuts::kITSNCls)) {
// return false;
// }
// if (!IsSelectedTrack(track, EMTrackCuts::kITSChi2NDF)) {
// return false;
// }
//
// if (mRequireITSibAny) {
// auto hits_ib = std::count_if(its_ib_any_Requirement.second.begin(), its_ib_any_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
// if (hits_ib < its_ib_any_Requirement.first) {
// return false;
// }
// }
//
// if (mRequireITSib1st) {
// auto hits_ib = std::count_if(its_ib_1st_Requirement.second.begin(), its_ib_1st_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
// if (hits_ib < its_ib_1st_Requirement.first) {
// return false;
// }
// }
//
// // TPC cuts
// if (!IsSelectedTrack(track, EMTrackCuts::kTPCNCls)) {
// return false;
// }
// if (!IsSelectedTrack(track, EMTrackCuts::kTPCCrossedRows)) {
// return false;
// }
// if (!IsSelectedTrack(track, EMTrackCuts::kTPCCrossedRowsOverNCls)) {
// return false;
// }
// if (!IsSelectedTrack(track, EMTrackCuts::kTPCFracSharedClusters)) {
// return false;
// }
// if (!IsSelectedTrack(track, EMTrackCuts::kTPCChi2NDF)) {
// return false;
// }

return true;
}
Expand All @@ -136,32 +140,35 @@ class EMTrackCut : public TNamed
case EMTrackCuts::kTrackPhiRange:
return track.phi() > mMinTrackPhi && track.phi() < mMaxTrackPhi;

case EMTrackCuts::kTPCNCls:
return track.tpcNClsFound() >= mMinNClustersTPC;

case EMTrackCuts::kTPCCrossedRows:
return track.tpcNClsCrossedRows() >= mMinNCrossedRowsTPC;

case EMTrackCuts::kTPCCrossedRowsOverNCls:
return track.tpcCrossedRowsOverFindableCls() > mMinNCrossedRowsOverFindableClustersTPC;

case EMTrackCuts::kTPCFracSharedClusters:
return track.tpcFractionSharedCls() < mMaxFracSharedClustersTPC;

case EMTrackCuts::kTPCChi2NDF:
return mMinChi2PerClusterTPC < track.tpcChi2NCl() && track.tpcChi2NCl() < mMaxChi2PerClusterTPC;

case EMTrackCuts::kDCAxy:
return std::fabs(track.dcaXY()) < ((mMaxDcaXYPtDep) ? mMaxDcaXYPtDep(track.pt()) : mMaxDcaXY);

case EMTrackCuts::kDCAz:
return std::fabs(track.dcaZ()) < mMaxDcaZ;

case EMTrackCuts::kITSNCls:
return mMinNClustersITS <= track.itsNCls() && track.itsNCls() <= mMaxNClustersITS;

case EMTrackCuts::kITSChi2NDF:
return mMinChi2PerClusterITS < track.itsChi2NCl() && track.itsChi2NCl() < mMaxChi2PerClusterITS;
case EMTrackCuts::kTrackBits:
return true;

// case EMTrackCuts::kTPCNCls:
// return track.tpcNClsFound() >= mMinNClustersTPC;
//
// case EMTrackCuts::kTPCCrossedRows:
// return track.tpcNClsCrossedRows() >= mMinNCrossedRowsTPC;
//
// case EMTrackCuts::kTPCCrossedRowsOverNCls:
// return track.tpcCrossedRowsOverFindableCls() > mMinNCrossedRowsOverFindableClustersTPC;
//
// case EMTrackCuts::kTPCFracSharedClusters:
// return track.tpcFractionSharedCls() < mMaxFracSharedClustersTPC;
//
// case EMTrackCuts::kTPCChi2NDF:
// return mMinChi2PerClusterTPC < track.tpcChi2NCl() && track.tpcChi2NCl() < mMaxChi2PerClusterTPC;
//
// case EMTrackCuts::kITSNCls:
// return mMinNClustersITS <= track.itsNCls() && track.itsNCls() <= mMaxNClustersITS;
//
// case EMTrackCuts::kITSChi2NDF:
// return mMinChi2PerClusterITS < track.itsChi2NCl() && track.itsChi2NCl() < mMaxChi2PerClusterITS;

default:
return false;
Expand All @@ -186,6 +193,7 @@ class EMTrackCut : public TNamed
void SetTrackMaxDcaXYPtDep(std::function<float(float)> ptDepCut);
void RequireITSibAny(bool flag);
void RequireITSib1st(bool flag);
void SetTrackBits(uint16_t bits);

private:
static const std::pair<int8_t, std::set<uint8_t>> its_ib_any_Requirement;
Expand All @@ -206,6 +214,7 @@ class EMTrackCut : public TNamed
float mMinChi2PerClusterITS{0.f}, mMaxChi2PerClusterITS{1e10f}; // max its fit chi2 per ITS cluster
bool mRequireITSibAny{true};
bool mRequireITSib1st{false};
uint16_t mTrackBits{0};

float mMaxDcaXY{1.0f}; // max dca in xy plane
float mMaxDcaZ{1.0f}; // max dca in z direction
Expand Down
25 changes: 14 additions & 11 deletions PWGEM/Dilepton/DataModel/dileptonTables.h
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,7 @@ DECLARE_SOA_INDEX_COLUMN(EMEvent, emevent); //!
DECLARE_SOA_COLUMN(CollisionId, collisionId, int); //!
DECLARE_SOA_COLUMN(TrackId, trackId, int); //!
DECLARE_SOA_COLUMN(Sign, sign, int8_t); //!
DECLARE_SOA_COLUMN(TrackBit, trackBit, uint16_t); //!
DECLARE_SOA_DYNAMIC_COLUMN(Signed1Pt, signed1Pt, [](float pt, int8_t sign) -> float { return sign * 1. / pt; });
DECLARE_SOA_DYNAMIC_COLUMN(P, p, [](float pt, float eta) -> float { return pt * std::cosh(eta); });
DECLARE_SOA_DYNAMIC_COLUMN(Px, px, [](float pt, float phi) -> float { return pt * std::cos(phi); });
Expand All @@ -704,18 +705,20 @@ DECLARE_SOA_DYNAMIC_COLUMN(Pz, pz, [](float pt, float eta) -> float { return pt
DECLARE_SOA_TABLE_VERSIONED(EMPrimaryTracks_000, "AOD", "EMPRIMARYTRACK", 0, //!
o2::soa::Index<>, emprimarytrack::CollisionId,
emprimarytrack::TrackId, emprimarytrack::Sign,
track::Pt, track::Eta, track::Phi, track::DcaXY, track::DcaZ,
track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TPCChi2NCl,
track::ITSClusterSizes, track::ITSChi2NCl, track::DetectorMap,
track::Pt, track::Eta, track::Phi, track::DcaXY, track::DcaZ, emprimarytrack::TrackBit,

// dynamic column
track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
track::HasITS<track::DetectorMap>, track::HasTPC<track::DetectorMap>, track::HasTRD<track::DetectorMap>, track::HasTOF<track::DetectorMap>,
// track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsShared, track::TPCChi2NCl,
// track::ITSClusterSizes, track::ITSChi2NCl, track::DetectorMap,

// // dynamic column
// track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
// track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
// track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
// track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
// track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
// track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,

// track::HasITS<track::DetectorMap>, track::HasTPC<track::DetectorMap>, track::HasTRD<track::DetectorMap>, track::HasTOF<track::DetectorMap>,
emprimarytrack::Signed1Pt<track::Pt, emprimarytrack::Sign>,
emprimarytrack::P<track::Pt, track::Eta>,
emprimarytrack::Px<track::Pt, track::Phi>,
Expand Down
Loading
Loading