10#include <analysis/variables/MCParticleTag.h>
13#include <analysis/VariableManager/Manager.h>
16#include <analysis/dataobjects/Particle.h>
19#include <analysis/utility/GenBplusTag.h>
20#include <analysis/utility/GenB0Tag.h>
21#include <analysis/utility/GenBsTag.h>
22#include <analysis/utility/GenDTag.h>
23#include <analysis/utility/GenTauTag.h>
26#include <mdst/dataobjects/MCParticle.h>
29#include <framework/datastore/StoreArray.h>
30#include <framework/gearbox/Const.h>
31#include <framework/logging/Logger.h>
42 double BplusMode(
const Particle*)
45 StoreArray<MCParticle> MC_Particle_list;
46 if (!MC_Particle_list) {
47 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
52 for (
const auto& iMCParticle : MC_Particle_list) {
53 if (iMCParticle.getPDG() != 521)
continue;
55 std::vector<int> DauPDG;
56 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
57 DauPDG.push_back(mcDaughter->getPDG());
59 modeB = gBtag.Mode_B_plus(DauPDG);
66 double BminusMode(
const Particle*)
69 StoreArray<MCParticle> MC_Particle_list;
70 if (!MC_Particle_list) {
71 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
76 for (
const auto& iMCParticle : MC_Particle_list) {
77 if (iMCParticle.getPDG() != -521)
continue;
79 std::vector<int> DauPDG;
80 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
81 DauPDG.push_back(mcDaughter->getPDG());
83 modeB = gBtag.Mode_B_minus(DauPDG);
90 double B0Mode(
const Particle*)
93 StoreArray<MCParticle> MC_Particle_list;
94 if (!MC_Particle_list) {
95 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
98 int modeB1 = -99, modeB2 = -99, modeB = -99, nb1 = 0, nb2 = 0;
100 for (
const auto& iMCParticle : MC_Particle_list) {
101 if (iMCParticle.getPDG() == 511) {
104 std::vector<int> DauPDG1;
105 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
106 DauPDG1.push_back(mcDaughter->getPDG());
108 modeB1 = gBtag.Mode_B0(DauPDG1);
112 if (iMCParticle.getPDG() == -511) {
115 std::vector<int> DauPDG2;
116 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
117 DauPDG2.push_back(mcDaughter->getPDG());
119 modeB2 = gBtag.Mode_anti_B0(DauPDG2);
125 if (modeB1 != -99) { modeB = modeB1;}
126 else if (modeB2 != -99) { modeB = modeB2;}
131 double Bbar0Mode(
const Particle*)
134 StoreArray<MCParticle> MC_Particle_list;
135 if (!MC_Particle_list) {
136 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
139 int modeB1 = -99, modeB2 = -99, modeB = -99, nb1 = 0, nb2 = 0;
141 for (
const auto& iMCParticle : MC_Particle_list) {
142 if (iMCParticle.getPDG() == -511) {
145 std::vector<int> DauPDG1;
146 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
147 DauPDG1.push_back(mcDaughter->getPDG());
149 modeB1 = gBtag.Mode_anti_B0(DauPDG1);
153 if (iMCParticle.getPDG() == 511) {
156 std::vector<int> DauPDG2;
157 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
158 DauPDG2.push_back(mcDaughter->getPDG());
160 modeB2 = gBtag.Mode_B0(DauPDG2);
166 if (modeB1 != -99) { modeB = modeB1;}
167 else if (modeB2 != -99) { modeB = modeB2;}
172 double Bs0Mode(
const Particle*)
175 StoreArray<MCParticle> MC_Particle_list;
176 if (!MC_Particle_list) {
177 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
180 int modeB1 = -99, modeB2 = -99, modeB = -99, nb1 = 0, nb2 = 0;
182 for (
const auto& iMCParticle : MC_Particle_list) {
183 if (iMCParticle.getPDG() == 531) {
186 std::vector<int> DauPDG1;
187 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
188 DauPDG1.push_back(mcDaughter->getPDG());
190 modeB1 = gBtag.Mode_Bs0(DauPDG1);
194 if (iMCParticle.getPDG() == -531) {
197 std::vector<int> DauPDG2;
198 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
199 DauPDG2.push_back(mcDaughter->getPDG());
201 modeB2 = gBtag.Mode_anti_Bs0(DauPDG2);
207 if (modeB1 != -99) { modeB = modeB1;}
208 else if (modeB2 != -99) { modeB = modeB2;}
213 double Bsbar0Mode(
const Particle*)
216 StoreArray<MCParticle> MC_Particle_list;
217 if (!MC_Particle_list) {
218 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
221 int modeB1 = -99, modeB2 = -99, modeB = -99, nb1 = 0, nb2 = 0;
223 for (
const auto& iMCParticle : MC_Particle_list) {
224 if (iMCParticle.getPDG() == -531) {
227 std::vector<int> DauPDG1;
228 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
229 DauPDG1.push_back(mcDaughter->getPDG());
231 modeB1 = gBtag.Mode_anti_Bs0(DauPDG1);
235 if (iMCParticle.getPDG() == 531) {
238 std::vector<int> DauPDG2;
239 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
240 DauPDG2.push_back(mcDaughter->getPDG());
242 modeB2 = gBtag.Mode_Bs0(DauPDG2);
248 if (modeB1 != -99) { modeB = modeB1;}
249 else if (modeB2 != -99) { modeB = modeB2;}
254 double DstplusMode(
const Particle*)
257 StoreArray<MCParticle> MC_Particle_list;
258 if (!MC_Particle_list) {
259 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
264 for (
const auto& iMCParticle : MC_Particle_list) {
265 if (iMCParticle.getPDG() != 413)
continue;
267 std::vector<int> DauPDG;
268 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
269 DauPDG.push_back(mcDaughter->getPDG());
271 modeD = gDtag.Mode_Dst_plus(DauPDG);
278 double DstminusMode(
const Particle*)
281 StoreArray<MCParticle> MC_Particle_list;
282 if (!MC_Particle_list) {
283 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
288 for (
const auto& iMCParticle : MC_Particle_list) {
289 if (iMCParticle.getPDG() != -413)
continue;
291 std::vector<int> DauPDG;
292 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
293 DauPDG.push_back(mcDaughter->getPDG());
295 modeD = gDtag.Mode_Dst_minus(DauPDG);
302 double DsplusMode(
const Particle*)
305 StoreArray<MCParticle> MC_Particle_list;
306 if (!MC_Particle_list) {
307 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
312 for (
const auto& iMCParticle : MC_Particle_list) {
313 if (iMCParticle.getPDG() != 431)
continue;
315 std::vector<int> DauPDG;
316 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
317 DauPDG.push_back(mcDaughter->getPDG());
319 modeD = gDtag.Mode_Ds_plus(DauPDG);
326 double DsminusMode(
const Particle*)
329 StoreArray<MCParticle> MC_Particle_list;
330 if (!MC_Particle_list) {
331 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
336 for (
const auto& iMCParticle : MC_Particle_list) {
337 if (iMCParticle.getPDG() != -431)
continue;
339 std::vector<int> DauPDG;
340 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
341 DauPDG.push_back(mcDaughter->getPDG());
343 modeD = gDtag.Mode_Ds_minus(DauPDG);
350 double DplusMode(
const Particle*)
353 StoreArray<MCParticle> MC_Particle_list;
354 if (!MC_Particle_list) {
355 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
360 for (
const auto& iMCParticle : MC_Particle_list) {
361 if (iMCParticle.getPDG() != 411)
continue;
363 std::vector<int> DauPDG;
364 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
365 DauPDG.push_back(mcDaughter->getPDG());
367 modeD = gDtag.Mode_D_plus(DauPDG);
374 double DminusMode(
const Particle*)
377 StoreArray<MCParticle> MC_Particle_list;
378 if (!MC_Particle_list) {
379 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
384 for (
const auto& iMCParticle : MC_Particle_list) {
385 if (iMCParticle.getPDG() != -411)
continue;
387 std::vector<int> DauPDG;
388 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
389 DauPDG.push_back(mcDaughter->getPDG());
391 modeD = gDtag.Mode_D_minus(DauPDG);
398 double D0Mode(
const Particle*)
401 StoreArray<MCParticle> MC_Particle_list;
402 if (!MC_Particle_list) {
403 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
408 for (
const auto& iMCParticle : MC_Particle_list) {
409 if (iMCParticle.getPDG() != 421)
continue;
411 std::vector<int> DauPDG;
412 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
413 DauPDG.push_back(mcDaughter->getPDG());
415 modeD = gDtag.Mode_D0(DauPDG);
422 double Dbar0Mode(
const Particle*)
425 StoreArray<MCParticle> MC_Particle_list;
426 if (!MC_Particle_list) {
427 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
432 for (
const auto& iMCParticle : MC_Particle_list) {
433 if (iMCParticle.getPDG() != -421)
continue;
435 std::vector<int> DauPDG;
436 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
437 DauPDG.push_back(mcDaughter->getPDG());
439 modeD = gDtag.Mode_anti_D0(DauPDG);
446 double TauplusMode(
const Particle*)
449 StoreArray<MCParticle> MC_Particle_list;
450 if (!MC_Particle_list) {
451 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
456 for (
const auto& iMCParticle : MC_Particle_list) {
457 if (iMCParticle.getPDG() != -15)
continue;
459 std::vector<int> DauPDG;
460 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
461 if (mcDaughter->getPDG() == 24) {
462 for (
auto const& WDaughter : mcDaughter->getDaughters()) {
463 DauPDG.push_back(WDaughter->getPDG());
465 }
else DauPDG.push_back(mcDaughter->getPDG());
467 modeTau = gTKtag.Mode_tau_plus(DauPDG);
474 double TauminusMode(
const Particle*)
477 StoreArray<MCParticle> MC_Particle_list;
478 if (!MC_Particle_list) {
479 B2WARNING(
"GenMCTagTool::eval - missing MCParticles array");
484 for (
const auto& iMCParticle : MC_Particle_list) {
485 if (iMCParticle.getPDG() != 15)
continue;
487 std::vector<int> DauPDG;
488 for (
auto const& mcDaughter : iMCParticle.getDaughters()) {
489 if (mcDaughter->getPDG() == -24) {
490 for (
auto const& WDaughter : mcDaughter->getDaughters()) {
491 DauPDG.push_back(WDaughter->getPDG());
493 }
else DauPDG.push_back(mcDaughter->getPDG());
495 modeTau = gTKtag.Mode_tau_minus(DauPDG);
502 VARIABLE_GROUP(
"MCParticle tag variables");
503 REGISTER_VARIABLE(
"BplusMode", BplusMode, R
"DOC(
504**[Eventbased]** Returns the decay modes of :math:`B^+` particles.
506.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
509 REGISTER_VARIABLE("BminusMode", BminusMode, R
"DOC(
510**[Eventbased]** Returns the decay modes of :math:`B^-` particles.
512.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
515 REGISTER_VARIABLE("B0Mode", B0Mode, R
"DOC(
516**[Eventbased]** Returns the decay modes of :math:`B^0` particles.
518.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
521 REGISTER_VARIABLE("Bbar0Mode", Bbar0Mode, R
"DOC(
522**[Eventbased]** Returns the decay modes of :math:`\overline{B}{}^0` particles".
524.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
527 REGISTER_VARIABLE("Bs0Mode", Bs0Mode, R
"DOC(
528**[Eventbased]** Returns the decays mode of :math:`B^0_s` particles.
530.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
533 REGISTER_VARIABLE("Bsbar0Mode", Bsbar0Mode, R
"DOC(
534**[Eventbased]** Returns the decay modes of :math:`\overline{B}{}^0_s` particles.
536.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
539 REGISTER_VARIABLE("DstplusMode", DstplusMode, R
"DOC(
540**[Eventbased]** Returns the decay modes of :math:`D^{*+}` particles.
542.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
545 REGISTER_VARIABLE("DstminusMode", DstminusMode, R
"DOC(
546**[Eventbased]** Returns the decay modes of :math:`D^{*-}` particles.
548.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
551 REGISTER_VARIABLE("DsplusMode", DsplusMode, R
"DOC(
552**[Eventbased]** Returns the decay modes of :math:`D^+_s` particles.
554.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
557 REGISTER_VARIABLE("DsminusMode", DsminusMode, R
"DOC(
558**[Eventbased]** Returns the decay modes of :math:`D^-_s` particles.
560.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
563 REGISTER_VARIABLE("DplusMode", DplusMode, R
"DOC(
564**[Eventbased]** Returns the decay modes of :math:`D^+` particles.
566.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
569 REGISTER_VARIABLE("DminusMode", DminusMode, R
"DOC(
570**[Eventbased]** Returns the decay modes of :math:`D^-` particles.
572.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
575 REGISTER_VARIABLE("D0Mode", D0Mode, R
"DOC(
576**[Eventbased]** Returns the decay modes of :math:`D^0` particles.
578.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
581 REGISTER_VARIABLE("Dbar0Mode", Dbar0Mode, R
"DOC(
582**[Eventbased]** Returns the decay modes of :math:`\overline{D}{}^0` particles.
584.. note:: The list of decay modes is documented in :ref:`GeneratedDecayModes`.
587 REGISTER_VARIABLE("TauplusMode", TauplusMode, R
"DOC(
588**[Eventbased]** Returns the decay modes of :math:`\tau^+` particles.
590.. note:: The list of decay modes is documented in :ref:`TauDecayMCModes`.
593 REGISTER_VARIABLE("TauminusMode", TauminusMode, R
"DOC(
594**[Eventbased]** Returns the decay modes of :math:`\tau^-` particles.
596.. note:: The list of decay modes is documented in :ref:`TauDecayMCModes`.
static const double doubleNaN
quiet_NaN
Abstract base class for different kinds of events.