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,
"[Eventbased] It will return the decays mode of B+ particles");
504 REGISTER_VARIABLE(
"BminusMode", BminusMode,
"[Eventbased] It will return the decays mode of B- particles");
505 REGISTER_VARIABLE(
"B0Mode", B0Mode,
"[Eventbased] It will return the decays mode of B0 particles");
506 REGISTER_VARIABLE(
"Bbar0Mode", Bbar0Mode,
"[Eventbased] It will return the decays mode of anti-B0 particles");
507 REGISTER_VARIABLE(
"Bs0Mode", Bs0Mode,
"[Eventbased] It will return the decays mode of B_s0 particles");
508 REGISTER_VARIABLE(
"Bsbar0Mode", Bsbar0Mode,
"[Eventbased] It will return the decays mode of anti-B_s0 particles");
509 REGISTER_VARIABLE(
"DstplusMode", DstplusMode,
"[Eventbased] It will return the decays mode of D*+ particles");
510 REGISTER_VARIABLE(
"DstminusMode", DstminusMode,
"[Eventbased] It will return the decays mode of D*- particles");
511 REGISTER_VARIABLE(
"DsplusMode", DsplusMode,
"[Eventbased] It will return the decays mode of D_s+ particles");
512 REGISTER_VARIABLE(
"DsminusMode", DsminusMode,
"[Eventbased] It will return the decays mode of D_s- particles");
513 REGISTER_VARIABLE(
"DplusMode", DplusMode,
"[Eventbased] It will return the decays mode of D+ particles");
514 REGISTER_VARIABLE(
"DminusMode", DminusMode,
"[Eventbased] It will return the decays mode of D- particles");
515 REGISTER_VARIABLE(
"D0Mode", D0Mode,
"[Eventbased] It will return the decays mode of D0 particles");
516 REGISTER_VARIABLE(
"Dbar0Mode", Dbar0Mode,
"[Eventbased] It will return the decays mode of anti-D0 particles");
517 REGISTER_VARIABLE(
"TauplusMode", TauplusMode,
"[Eventbased] It will return the decays mode of tau+ particles");
518 REGISTER_VARIABLE(
"TauminusMode", TauminusMode,
"[Eventbased] It will return the decays mode of tau- particles");
static const double doubleNaN
quiet_NaN
Abstract base class for different kinds of events.