Skip to content

Commit fef7477

Browse files
committed
Add possibility to avoid D0 daus swapping in D* ML application
1 parent 5855acc commit fef7477

File tree

2 files changed

+43
-42
lines changed

2 files changed

+43
-42
lines changed

PWGHF/Core/HfMlResponseDstarToD0Pi.h

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -61,26 +61,26 @@
6161

6262
// Very specific case of CHECK_AND_FILL_VEC_DSTAR_FULL(OBJECT, FEATURE, GETTER)
6363
// Use for push back different value for D*+ or D*- candidate
64-
#define CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(POSGETTER, NEGGETTER, FEATURENAME) \
65-
case static_cast<uint8_t>(InputFeaturesDstarToD0Pi::FEATURENAME): { \
66-
if (candidate.signSoftPi() > 0) { \
67-
inputFeatures.emplace_back(candidate.POSGETTER()); \
68-
} else { \
69-
inputFeatures.emplace_back(candidate.NEGGETTER()); \
70-
} \
71-
break; \
64+
#define CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(POSGETTER, NEGGETTER, FEATURENAME, SWAP) \
65+
case static_cast<uint8_t>(InputFeaturesDstarToD0Pi::FEATURENAME): { \
66+
if (candidate.signSoftPi() > 0 || !SWAP) { \
67+
inputFeatures.emplace_back(candidate.POSGETTER()); \
68+
} else { \
69+
inputFeatures.emplace_back(candidate.NEGGETTER()); \
70+
} \
71+
break; \
7272
}
7373

7474
// Very specific case of CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(OBJECT, FEATURE, GETTER)
7575
// Use for push back different value for D*+ or D*- candidate getting the correct feature from two different objects (tracks)
76-
#define CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(OBJECTPOS, OBJECTNEG, FEATURENAME, GETTER) \
77-
case static_cast<uint8_t>(InputFeaturesDstarToD0Pi::FEATURENAME): { \
78-
if (candidate.signSoftPi() > 0) { \
79-
inputFeatures.emplace_back(OBJECTPOS.GETTER()); \
80-
} else { \
81-
inputFeatures.emplace_back(OBJECTNEG.GETTER()); \
82-
} \
83-
break; \
76+
#define CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(OBJECTPOS, OBJECTNEG, FEATURENAME, GETTER, SWAP) \
77+
case static_cast<uint8_t>(InputFeaturesDstarToD0Pi::FEATURENAME): { \
78+
if (candidate.signSoftPi() > 0 || !SWAP) { \
79+
inputFeatures.emplace_back(OBJECTPOS.GETTER()); \
80+
} else { \
81+
inputFeatures.emplace_back(OBJECTNEG.GETTER()); \
82+
} \
83+
break; \
8484
}
8585

8686
// Very specific case of CHECK_AND_FILL_VEC_DSTAR_FULL(OBJECT, FEATURE, GETTER)
@@ -164,7 +164,7 @@ class HfMlResponseDstarToD0Pi : public HfMlResponse<TypeOutputScore>
164164
/// \param prongSoftPi is the candidate's prongSoftPi
165165
/// \return inputFeatures vector
166166
template <typename T1>
167-
std::vector<float> getInputFeatures(T1 const& candidate)
167+
std::vector<float> getInputFeatures(T1 const& candidate, bool swapDzeroDaus=true)
168168
{
169169
std::vector<float> inputFeatures;
170170

@@ -179,36 +179,36 @@ class HfMlResponseDstarToD0Pi : public HfMlResponse<TypeOutputScore>
179179
CHECK_AND_FILL_VEC_DSTAR(cpaXYD0);
180180
CHECK_AND_FILL_VEC_DSTAR(deltaIPNormalisedMaxD0);
181181
CHECK_AND_FILL_VEC_DSTAR(impactParameterProductD0);
182-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(ptProng0, ptProng1, ptProng0);
183-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(ptProng1, ptProng0, ptProng1);
182+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(ptProng0, ptProng1, ptProng0, swapDzeroDaus);
183+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(ptProng1, ptProng0, ptProng1, swapDzeroDaus);
184184
CHECK_AND_FILL_VEC_DSTAR(ptSoftPi);
185-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameter0, impactParameter1, impactParameter0);
186-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameter1, impactParameter0, impactParameter1);
187-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZ0, impactParameterZ1, impactParameterZ0);
188-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZ1, impactParameterZ0, impactParameterZ1);
185+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameter0, impactParameter1, impactParameter0, swapDzeroDaus);
186+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameter1, impactParameter0, impactParameter1, swapDzeroDaus);
187+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZ0, impactParameterZ1, impactParameterZ0, swapDzeroDaus);
188+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZ1, impactParameterZ0, impactParameterZ1, swapDzeroDaus);
189189
CHECK_AND_FILL_VEC_DSTAR(impParamSoftPi);
190190
CHECK_AND_FILL_VEC_DSTAR(impParamZSoftPi);
191-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterNormalised0, impactParameterNormalised1, impactParameterNormalised0);
192-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterNormalised1, impactParameterNormalised0, impactParameterNormalised1);
193-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZNormalised0, impactParameterZNormalised1, impactParameterZNormalised0);
194-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZNormalised1, impactParameterZNormalised0, impactParameterZNormalised1);
191+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterNormalised0, impactParameterNormalised1, impactParameterNormalised0, swapDzeroDaus);
192+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterNormalised1, impactParameterNormalised0, impactParameterNormalised1, swapDzeroDaus);
193+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZNormalised0, impactParameterZNormalised1, impactParameterZNormalised0, swapDzeroDaus);
194+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZNormalised1, impactParameterZNormalised0, impactParameterZNormalised1, swapDzeroDaus);
195195
CHECK_AND_FILL_VEC_DSTAR(normalisedImpParamSoftPi);
196196
CHECK_AND_FILL_VEC_DSTAR(normalisedImpParamZSoftPi);
197-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(cosThetaStarD0, cosThetaStarD0Bar, cosThetaStarD0);
198-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(invMassD0, invMassD0Bar, massD0);
197+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(cosThetaStarD0, cosThetaStarD0Bar, cosThetaStarD0, true);
198+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(invMassD0, invMassD0Bar, massD0, true);
199199
CHECK_AND_FILL_VEC_DSTAR_DELTA_MASS_D0(deltaMassD0);
200-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcPi0, nSigTpcPi1, nSigmaTPCPiPr0);
201-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcKa0, nSigTpcKa1, nSigmaTPCKaPr0);
202-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofPi0, nSigTofPi1, nSigmaTOFPiPr0);
203-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofKa0, nSigTofKa1, nSigmaTOFKaPr0);
204-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaPi0, tpcTofNSigmaPi1, nSigmaTPCTOFPiPr0);
205-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaKa0, tpcTofNSigmaKa1, nSigmaTPCTOFKaPr0);
206-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcPi1, nSigTpcPi0, nSigmaTPCPiPr1);
207-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcKa1, nSigTpcKa0, nSigmaTPCKaPr1);
208-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofPi1, nSigTofPi0, nSigmaTOFPiPr1);
209-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofKa1, nSigTofKa0, nSigmaTOFKaPr1);
210-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaPi1, tpcTofNSigmaPi0, nSigmaTPCTOFPiPr1);
211-
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaKa1, tpcTofNSigmaKa0, nSigmaTPCTOFKaPr1);
200+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcPi0, nSigTpcPi1, nSigmaTPCPiPr0, swapDzeroDaus);
201+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcKa0, nSigTpcKa1, nSigmaTPCKaPr0, swapDzeroDaus);
202+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofPi0, nSigTofPi1, nSigmaTOFPiPr0, swapDzeroDaus);
203+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofKa0, nSigTofKa1, nSigmaTOFKaPr0, swapDzeroDaus);
204+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaPi0, tpcTofNSigmaPi1, nSigmaTPCTOFPiPr0, swapDzeroDaus);
205+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaKa0, tpcTofNSigmaKa1, nSigmaTPCTOFKaPr0, swapDzeroDaus);
206+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcPi1, nSigTpcPi0, nSigmaTPCPiPr1, swapDzeroDaus);
207+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTpcKa1, nSigTpcKa0, nSigmaTPCKaPr1, swapDzeroDaus);
208+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofPi1, nSigTofPi0, nSigmaTOFPiPr1, swapDzeroDaus);
209+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(nSigTofKa1, nSigTofKa0, nSigmaTOFKaPr1, swapDzeroDaus);
210+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaPi1, tpcTofNSigmaPi0, nSigmaTPCTOFPiPr1, swapDzeroDaus);
211+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(tpcTofNSigmaKa1, tpcTofNSigmaKa0, nSigmaTPCTOFKaPr1, swapDzeroDaus);
212212
CHECK_AND_FILL_VEC_DSTAR_GETTER(nSigmaTPCPiPrSoftPi, nSigTpcPi2);
213213
CHECK_AND_FILL_VEC_DSTAR_GETTER(nSigmaTPCKaPrSoftPi, nSigTpcKa2);
214214
CHECK_AND_FILL_VEC_DSTAR_GETTER(nSigmaTOFPiPrSoftPi, nSigTofPi2);

PWGHF/TableProducer/candidateSelectorDstarToD0Pi.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ struct HfCandidateSelectorDstarToD0Pi {
9797
Configurable<LabeledArray<double>> cutsMl{"cutsMl", {hf_cuts_ml::Cuts[0], hf_cuts_ml::NBinsPt, hf_cuts_ml::NCutScores, hf_cuts_ml::labelsPt, hf_cuts_ml::labelsCutScore}, "ML selections per pT bin"};
9898
Configurable<int> nClassesMl{"nClassesMl", static_cast<int>(hf_cuts_ml::NCutScores), "Number of classes in ML model"};
9999
Configurable<std::vector<std::string>> namesInputFeatures{"namesInputFeatures", std::vector<std::string>{"feature1", "feature2"}, "Names of ML model input features"};
100+
Configurable<bool> isTriggerBDT{"isTriggerBDT", false, "Flag to enable / disable features for software trigger BDTs"};
100101

101102
// CCDB configuration
102103
Configurable<std::string> ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
@@ -461,7 +462,7 @@ struct HfCandidateSelectorDstarToD0Pi {
461462
if (applyMl) {
462463
// ML selections
463464
bool isSelectedMlDstar = false;
464-
std::vector<float> inputFeatures = hfMlResponse.getInputFeatures(candDstar);
465+
std::vector<float> inputFeatures = hfMlResponse.getInputFeatures(candDstar, !isTriggerBDT);
465466
isSelectedMlDstar = hfMlResponse.isSelectedMl(inputFeatures, ptCand, outputMlDstarToD0Pi);
466467

467468
hfMlDstarCandidate(outputMlDstarToD0Pi);

0 commit comments

Comments
 (0)