Skip to content

Commit a5312ca

Browse files
fgrosaalibuildvkucera
authored
[PWGHF] Resolve mass hypothesis ambiguities for D* daughters (#8460)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch> Co-authored-by: Vít Kučera <vit.kucera@cern.ch>
1 parent 44c2dcc commit a5312ca

File tree

2 files changed

+81
-40
lines changed

2 files changed

+81
-40
lines changed

PWGHF/Core/HfMlResponseDstarToD0Pi.h

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,18 @@
6161
break; \
6262
}
6363

64+
// Very specific case of CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(OBJECT, FEATURE, GETTER)
65+
// Use for push back different value for D*+ or D*- candidate getting the correct feature from two different objects (tracks)
66+
#define CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(OBJECTPOS, OBJECTNEG, FEATURENAME, GETTER) \
67+
case static_cast<uint8_t>(InputFeaturesDstarToD0Pi::FEATURENAME): { \
68+
if (candidate.signSoftPi() > 0) { \
69+
inputFeatures.emplace_back(OBJECTPOS.GETTER()); \
70+
} else { \
71+
inputFeatures.emplace_back(OBJECTNEG.GETTER()); \
72+
} \
73+
break; \
74+
}
75+
6476
// Very specific case of CHECK_AND_FILL_VEC_DSTAR_FULL(OBJECT, FEATURE, GETTER)
6577
// Use for push back deltaMassD0 for D*+ or D*- candidate
6678
#define CHECK_AND_FILL_VEC_DSTAR_DELTA_MASS_D0(FEATURENAME) \
@@ -156,36 +168,36 @@ class HfMlResponseDstarToD0Pi : public HfMlResponse<TypeOutputScore>
156168
CHECK_AND_FILL_VEC_DSTAR(cpaXYD0);
157169
CHECK_AND_FILL_VEC_DSTAR(deltaIPNormalisedMaxD0);
158170
CHECK_AND_FILL_VEC_DSTAR(impactParameterProductD0);
159-
CHECK_AND_FILL_VEC_DSTAR(ptProng0);
160-
CHECK_AND_FILL_VEC_DSTAR(ptProng1);
171+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(ptProng0, ptProng1, ptProng0);
172+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(ptProng1, ptProng0, ptProng1);
161173
CHECK_AND_FILL_VEC_DSTAR(ptSoftPi);
162-
CHECK_AND_FILL_VEC_DSTAR(impactParameter0);
163-
CHECK_AND_FILL_VEC_DSTAR(impactParameter1);
164-
CHECK_AND_FILL_VEC_DSTAR(impactParameterZ0);
165-
CHECK_AND_FILL_VEC_DSTAR(impactParameterZ1);
174+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameter0, impactParameter1, impactParameter0);
175+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameter1, impactParameter0, impactParameter1);
176+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZ0, impactParameterZ1, impactParameterZ0);
177+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZ1, impactParameterZ0, impactParameterZ1);
166178
CHECK_AND_FILL_VEC_DSTAR(impParamSoftPi);
167179
CHECK_AND_FILL_VEC_DSTAR(impParamZSoftPi);
168-
CHECK_AND_FILL_VEC_DSTAR(impactParameterNormalised0);
169-
CHECK_AND_FILL_VEC_DSTAR(impactParameterNormalised1);
170-
CHECK_AND_FILL_VEC_DSTAR(impactParameterZNormalised0);
171-
CHECK_AND_FILL_VEC_DSTAR(impactParameterZNormalised1);
180+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterNormalised0, impactParameterNormalised1, impactParameterNormalised0);
181+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterNormalised1, impactParameterNormalised0, impactParameterNormalised1);
182+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZNormalised0, impactParameterZNormalised1, impactParameterZNormalised0);
183+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(impactParameterZNormalised1, impactParameterZNormalised0, impactParameterZNormalised1);
172184
CHECK_AND_FILL_VEC_DSTAR(normalisedImpParamSoftPi);
173185
CHECK_AND_FILL_VEC_DSTAR(normalisedImpParamZSoftPi);
174186
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(cosThetaStarD0, cosThetaStarD0Bar, cosThetaStarD0);
175187
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE(invMassD0, invMassD0Bar, massD0);
176188
CHECK_AND_FILL_VEC_DSTAR_DELTA_MASS_D0(deltaMassD0);
177-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong0, nSigmaTPCPiPr0, tpcNSigmaPi);
178-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong0, nSigmaTPCKaPr0, tpcNSigmaKa);
179-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong0, nSigmaTOFPiPr0, tofNSigmaPi);
180-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong0, nSigmaTOFKaPr0, tofNSigmaKa);
181-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong0, nSigmaTPCTOFPiPr0, tpcTofNSigmaPi);
182-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong0, nSigmaTPCTOFKaPr0, tpcTofNSigmaKa);
183-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong1, nSigmaTPCPiPr1, tpcNSigmaPi);
184-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong1, nSigmaTPCKaPr1, tpcNSigmaKa);
185-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong1, nSigmaTOFPiPr1, tofNSigmaPi);
186-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong1, nSigmaTOFKaPr1, tofNSigmaKa);
187-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong1, nSigmaTPCTOFPiPr1, tpcTofNSigmaPi);
188-
CHECK_AND_FILL_VEC_DSTAR_FULL(prong1, nSigmaTPCTOFKaPr1, tpcTofNSigmaKa);
189+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong0, prong1, nSigmaTPCPiPr0, tpcNSigmaPi);
190+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong0, prong1, nSigmaTPCKaPr0, tpcNSigmaKa);
191+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong0, prong1, nSigmaTOFPiPr0, tofNSigmaPi);
192+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong0, prong1, nSigmaTOFKaPr0, tofNSigmaKa);
193+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong0, prong1, nSigmaTPCTOFPiPr0, tpcTofNSigmaPi);
194+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong0, prong1, nSigmaTPCTOFKaPr0, tpcTofNSigmaKa);
195+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong1, prong0, nSigmaTPCPiPr1, tpcNSigmaPi);
196+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong1, prong0, nSigmaTPCKaPr1, tpcNSigmaKa);
197+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong1, prong0, nSigmaTOFPiPr1, tofNSigmaPi);
198+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong1, prong0, nSigmaTOFKaPr1, tofNSigmaKa);
199+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong1, prong0, nSigmaTPCTOFPiPr1, tpcTofNSigmaPi);
200+
CHECK_AND_FILL_VEC_DSTAR_CHARGEBASE_FROMOBJECT(prong1, prong0, nSigmaTPCTOFKaPr1, tpcTofNSigmaKa);
189201
CHECK_AND_FILL_VEC_DSTAR_FULL(prongSoftPi, nSigmaTPCPiPrSoftPi, tpcNSigmaPi);
190202
CHECK_AND_FILL_VEC_DSTAR_FULL(prongSoftPi, nSigmaTPCKaPrSoftPi, tpcNSigmaKa);
191203
CHECK_AND_FILL_VEC_DSTAR_FULL(prongSoftPi, nSigmaTOFPiPrSoftPi, tofNSigmaPi);

PWGHF/TableProducer/treeCreatorDstarToD0Pi.cxx

Lines changed: 47 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -293,21 +293,50 @@ struct HfTreeCreatorDstarToD0Pi {
293293
originMc = candidate.originMcRec();
294294
}
295295

296-
auto prong0 = candidate.template prong0_as<TracksWPid>();
297-
auto prong1 = candidate.template prong1_as<TracksWPid>();
296+
TracksWPid::iterator prong0;
297+
TracksWPid::iterator prong1;
298298
auto prongSoftPi = candidate.template prongPi_as<TracksWPid>();
299299

300300
float massD0{-1.f};
301301
float massDStar{-1.f};
302302
float cosThetaD0{-1.f};
303+
float impParameterProng0{-999.}, impParameterProng1{-999.};
304+
float errorImpParameterProng0{-999.}, errorImpParameterProng1{-999.};
305+
float impParameterNormalisedProng0{-999.}, impParameterNormalisedProng1{-999.};
306+
float ptProng0{-999.}, ptProng1{-999.};
307+
float pProng0{-999.}, pProng1{-999.};
303308
if (candidate.signSoftPi() > 0) {
304309
massD0 = candidate.invMassD0();
305310
massDStar = candidate.invMassDstar();
306311
cosThetaD0 = candidate.cosThetaStarD0();
312+
prong0 = candidate.template prong0_as<TracksWPid>(); // pion
313+
prong1 = candidate.template prong1_as<TracksWPid>(); // kaon
314+
ptProng0 = candidate.ptProng0();
315+
ptProng1 = candidate.ptProng1();
316+
impParameterProng0 = candidate.impactParameter0();
317+
impParameterProng1 = candidate.impactParameter1();
318+
errorImpParameterProng0 = candidate.errorImpactParameter0();
319+
errorImpParameterProng1 = candidate.errorImpactParameter1();
320+
impParameterNormalisedProng0 = candidate.impactParameterNormalised0();
321+
impParameterNormalisedProng1 = candidate.impactParameterNormalised1();
322+
pProng0 = RecoDecay::p(candidate.pxProng0(), candidate.pyProng0(), candidate.pzProng0());
323+
pProng1 = RecoDecay::p(candidate.pxProng1(), candidate.pyProng1(), candidate.pzProng1());
307324
} else {
308325
massD0 = candidate.invMassD0Bar();
309326
massDStar = candidate.invMassAntiDstar();
310327
cosThetaD0 = candidate.cosThetaStarD0Bar();
328+
prong0 = candidate.template prong1_as<TracksWPid>(); // pion
329+
prong1 = candidate.template prong0_as<TracksWPid>(); // kaon
330+
ptProng0 = candidate.ptProng1();
331+
ptProng1 = candidate.ptProng0();
332+
impParameterProng0 = candidate.impactParameter1();
333+
impParameterProng1 = candidate.impactParameter0();
334+
errorImpParameterProng0 = candidate.errorImpactParameter1();
335+
errorImpParameterProng1 = candidate.errorImpactParameter0();
336+
impParameterNormalisedProng0 = candidate.impactParameterNormalised1();
337+
impParameterNormalisedProng1 = candidate.impactParameterNormalised0();
338+
pProng0 = RecoDecay::p(candidate.pxProng1(), candidate.pyProng1(), candidate.pzProng1());
339+
pProng1 = RecoDecay::p(candidate.pxProng0(), candidate.pyProng0(), candidate.pzProng0());
311340
}
312341

313342
if (fillCandidateLiteTable) {
@@ -322,14 +351,14 @@ struct HfTreeCreatorDstarToD0Pi {
322351
candidate.deltaIPNormalisedMaxD0(),
323352
candidate.impactParameterProductD0(),
324353
cosThetaD0,
325-
candidate.ptProng0(),
326-
candidate.ptProng1(),
354+
ptProng0,
355+
ptProng1,
327356
candidate.ptSoftPi(),
328-
candidate.impactParameter0(),
329-
candidate.impactParameter1(),
357+
impParameterProng0,
358+
impParameterProng1,
330359
candidate.impParamSoftPi(),
331-
candidate.impactParameterNormalised0(),
332-
candidate.impactParameterNormalised1(),
360+
impParameterNormalisedProng0,
361+
impParameterNormalisedProng1,
333362
candidate.normalisedImpParamSoftPi(),
334363
prong0.tpcNSigmaPi(),
335364
prong0.tpcNSigmaKa(),
@@ -385,17 +414,17 @@ struct HfTreeCreatorDstarToD0Pi {
385414
candidate.deltaIPNormalisedMaxD0(),
386415
candidate.impactParameterProductD0(),
387416
cosThetaD0,
388-
RecoDecay::p(candidate.pxProng0(), candidate.pyProng0(), candidate.pzProng0()),
389-
RecoDecay::p(candidate.pxProng1(), candidate.pyProng1(), candidate.pzProng1()),
417+
pProng0,
418+
pProng1,
390419
RecoDecay::p(candidate.pxSoftPi(), candidate.pySoftPi(), candidate.pzSoftPi()),
391-
candidate.ptProng0(),
392-
candidate.ptProng1(),
420+
ptProng0,
421+
ptProng1,
393422
candidate.ptSoftPi(),
394-
candidate.impactParameter0(),
395-
candidate.impactParameter1(),
423+
impParameterProng0,
424+
impParameterProng1,
396425
candidate.impParamSoftPi(),
397-
candidate.impactParameterNormalised0(),
398-
candidate.impactParameterNormalised1(),
426+
impParameterNormalisedProng0,
427+
impParameterNormalisedProng1,
399428
candidate.normalisedImpParamSoftPi(),
400429
candidate.errorImpactParameter0(),
401430
candidate.errorImpactParameter1(),
@@ -457,7 +486,7 @@ struct HfTreeCreatorDstarToD0Pi {
457486
}
458487
for (const auto& candidate : candidates) {
459488
if (downSampleBkgFactor < 1.) {
460-
float pseudoRndm = candidate.ptProng0() * 1000. - (int64_t)(candidate.ptProng0() * 1000);
489+
float pseudoRndm = candidate.ptProng0() * 1000. - static_cast<int64_t>(candidate.ptProng0() * 1000);
461490
if (candidate.pt() < ptMaxForDownSample && pseudoRndm >= downSampleBkgFactor) {
462491
continue;
463492
}
@@ -498,7 +527,7 @@ struct HfTreeCreatorDstarToD0Pi {
498527
}
499528
for (const auto& candidate : reconstructedCandBkg) {
500529
if (downSampleBkgFactor < 1.) {
501-
float pseudoRndm = candidate.ptProng0() * 1000. - (int64_t)(candidate.ptProng0() * 1000);
530+
float pseudoRndm = candidate.ptProng0() * 1000. - static_cast<int64_t>(candidate.ptProng0() * 1000);
502531
if (candidate.pt() < ptMaxForDownSample && pseudoRndm >= downSampleBkgFactor) {
503532
continue;
504533
}

0 commit comments

Comments
 (0)