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
26 changes: 24 additions & 2 deletions PWGCF/Femto/Core/charmHadronBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ struct ConfD0Filters : o2::framework::ConfigurableGroup {
// invariant-mass window
o2::framework::Configurable<float> massMin{"massMin", 1.7f, "Minimum invariant mass for D0"};
o2::framework::Configurable<float> massMax{"massMax", 2.0f, "Maximum invariant mass for D0"};
o2::framework::Configurable<bool> rejectAmbiguousHypothesis{"rejectAmbiguousHypothesis", false, "Reject candidates selected under both D0 and D0bar hypotheses"};
};

// derived selection bits for D0s
Expand All @@ -73,8 +74,9 @@ struct ConfD0Bits : o2::framework::ConfigurableGroup {
};

// base selection for analysis task for D0s
template <auto& Prefix>
struct ConfD0Selection : o2::framework::ConfigurableGroup {
std::string prefix = std::string("D0Selection");
std::string prefix = Prefix;
o2::framework::Configurable<int> pdgCodeAbs{"pdgCodeAbs", o2::constants::physics::Pdg::kD0, "PDG code (D0)"};
o2::framework::Configurable<int> sign{"sign", 0, "Particle sign (+1: D0; -1: D0bar; 0: both)"};
o2::framework::Configurable<float> ptMin{"ptMin", 1.f, "Minimum pT"};
Expand All @@ -91,6 +93,11 @@ struct ConfD0Selection : o2::framework::ConfigurableGroup {
o2::framework::Configurable<datatypes::CharmHadronMaskType> mask{"mask", 0, "Bitmask for D0 selection"};
};

constexpr const char PrefixD0Selection1[] = "D0Selection1";
constexpr const char PrefixD0Selection2[] = "D0Selection2";
using ConfD0Selection1 = ConfD0Selection<PrefixD0Selection1>;
using ConfD0Selection2 = ConfD0Selection<PrefixD0Selection2>;

/// The different selections for D0s
enum D0Sels {
// topological selections
Expand Down Expand Up @@ -125,6 +132,7 @@ enum D0Filters {
kYMax,
kMassMin,
kMassMax,
kRejectAmbiguous,
kD0FiltersMax
};

Expand All @@ -142,7 +150,8 @@ const std::unordered_map<D0Filters, std::string> d0FilterNames = {
{kYMin, "Minimum rapidity"},
{kYMax, "Maximum rapidity"},
{kMassMin, "Minimum invariant mass"},
{kMassMax, "Maximum invariant mass"}};
{kMassMax, "Maximum invariant mass"},
{kRejectAmbiguous, "Reject ambiguous D0/D0bar hypothesis"}};

template <modes::CharmHadron hadronType, auto& SelectionHistName, auto& FilterHistName>
class D0Selection : public baseselection::BaseSelection<float, o2::analysis::femto::datatypes::CharmHadronMaskType, kD0SelsMax>
Expand All @@ -167,6 +176,7 @@ class D0Selection : public baseselection::BaseSelection<float, o2::analysis::fem
mUseYCut = filter.useYCut.value;
mYMin = filter.yMin.value;
mYMax = filter.yMax.value;
mRejectAmbiguousHypothesis = filter.rejectAmbiguousHypothesis.value;

this->addSelection(kCpaMin, d0SelectionNames.at(kCpaMin), config.cpaMin.value, limits::kLowerLimit, true, true, false);
this->addSelection(kDecayLengthMin, d0SelectionNames.at(kDecayLengthMin), config.decayLengthMin.value, limits::kLowerLimit, true, true, false);
Expand All @@ -189,6 +199,7 @@ class D0Selection : public baseselection::BaseSelection<float, o2::analysis::fem
{d0FilterNames.at(kYMax), mYMax},
{d0FilterNames.at(kMassMin), mMassMin},
{d0FilterNames.at(kMassMax), mMassMax},
{d0FilterNames.at(kRejectAmbiguous), static_cast<float>(mRejectAmbiguousHypothesis)},
});
}

Expand Down Expand Up @@ -223,6 +234,16 @@ class D0Selection : public baseselection::BaseSelection<float, o2::analysis::fem
this->template fillFilter<FilterHistName>(kHypothesis, p);
pass &= p;

bool competing = false;
if constexpr (modes::isEqual(hadronType, modes::CharmHadron::kD0)) {
competing = d0candidate.isSelD0bar();
} else {
competing = d0candidate.isSelD0();
}
p = !mRejectAmbiguousHypothesis || !competing;
this->template fillFilter<FilterHistName>(kRejectAmbiguous, p);
pass &= p;

p = d0candidate.pt() > mPtMin;
this->template fillFilter<FilterHistName>(kPtMin, p);
pass &= p;
Expand Down Expand Up @@ -286,6 +307,7 @@ class D0Selection : public baseselection::BaseSelection<float, o2::analysis::fem
bool mUseYCut = true;
float mYMin = -0.8f;
float mYMax = 0.8f;
bool mRejectAmbiguousHypothesis = false;
};

// tables produced by the D0 builder: kinematics, bitmask and QA
Expand Down
2 changes: 2 additions & 0 deletions PWGCF/Femto/Core/charmHadronHistManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,9 @@ struct ConfD0Binning : o2::framework::ConfigurableGroup {
#undef CHARMHADRON_DEFAULT_BINNING

constexpr const char PrefixD0Binning1[] = "D0Binning1";
constexpr const char PrefixD0Binning2[] = "D0Binning2";
using ConfD0Binning1 = ConfD0Binning<PrefixD0Binning1>;
using ConfD0Binning2 = ConfD0Binning<PrefixD0Binning2>;

template <auto& Prefix>
struct ConfD0QaBinning : o2::framework::ConfigurableGroup {
Expand Down
8 changes: 8 additions & 0 deletions PWGCF/Femto/Core/closePairRejection.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ struct ConfCpr : o2::framework::ConfigurableGroup {
constexpr const char PrefixCprTrackTrack[] = "CprTrackTrack";
constexpr const char PrefixCprTrackV0Daughter[] = "CprTrackV0Daughter";
constexpr const char PrefixCprTrackD0Daughter[] = "CprTrackD0Daughter";
constexpr const char PrefixCprD0DaughterD0DaughterPos[] = "CprD0DaughterD0DaughterPos";
constexpr const char PrefixCprD0DaughterD0DaughterNeg[] = "CprD0DaughterD0DaughterNeg";
constexpr const char PrefixCprTrackResonanceDaughter[] = "CprTrackResonanceDaughter";
constexpr const char PrefixCprTrackKinkDaughter[] = "CprTrackKinkDaughter";
constexpr const char PrefixCprV0DaughterV0DaughterPos[] = "CprV0DaughterV0DaughterPos";
Expand All @@ -96,6 +98,8 @@ constexpr const char PrefixCprTrackCascadeBachelor[] = "CprTrackCascadeBachelor"
using ConfCprTrackTrack = ConfCpr<PrefixCprTrackTrack>;
using ConfCprTrackV0Daughter = ConfCpr<PrefixCprTrackV0Daughter>;
using ConfCprTrackD0Daughter = ConfCpr<PrefixCprTrackD0Daughter>;
using ConfCprD0DaugherD0DaughterPos = ConfCpr<PrefixCprD0DaughterD0DaughterPos>;
using ConfCprD0DaugherD0DaughterNeg = ConfCpr<PrefixCprD0DaughterD0DaughterNeg>;
using ConfCprTrackResonanceDaughter = ConfCpr<PrefixCprTrackResonanceDaughter>;
using ConfCprTrackKinkDaughter = ConfCpr<PrefixCprTrackKinkDaughter>;
using ConfCprV0DaugherV0DaughterPos = ConfCpr<PrefixCprV0DaughterV0DaughterPos>;
Expand All @@ -115,6 +119,10 @@ constexpr char PrefixTrackV0DaughterSe[] = "CPR_TrackV0Dau/SE/";
constexpr char PrefixTrackV0DaughterMe[] = "CPR_TrackV0Dau/ME/";
constexpr char PrefixTrackD0DaughterSe[] = "CPR_TrackD0Dau/SE/";
constexpr char PrefixTrackD0DaughterMe[] = "CPR_TrackD0Dau/ME/";
constexpr char PrefixD0D0PosSe[] = "CPR_D0D0_PosDau/SE/";
constexpr char PrefixD0D0NegSe[] = "CPR_D0D0_NegDau/SE/";
constexpr char PrefixD0D0PosMe[] = "CPR_D0D0_PosDau/ME/";
constexpr char PrefixD0D0NegMe[] = "CPR_D0D0_NegDau/ME/";
constexpr char PrefixV0V0PosSe[] = "CPR_V0V0_PosDau/SE/";
constexpr char PrefixV0V0NegSe[] = "CPR_V0V0_NegDau/SE/";
constexpr char PrefixV0V0PosMe[] = "CPR_V0V0_PosDau/ME/";
Expand Down
Loading
Loading