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.