9#include <analysis/modules/TauDecayMode/TauDecayModeModule.h>
10#include <framework/logging/Logger.h>
11#include <framework/particledb/EvtGenDatabasePDG.h>
14#include <TParticlePDG.h>
17#include <Math/LorentzRotation.h>
18#include <Math/Boost.h>
22std::map<std::string, int> make_map(
const std::string& file,
int chg)
27 B2INFO(
"Missing input mapping file: use mp_file_minus=basf2.find_file('data/analysis/modules/TauDecayMode/map_tauminus.txt') TauDecayMode.param('file_minus', mp_file_minus) to classify with default mapping.");
29 B2INFO(
"Missing input mapping file: use mp_file_plus=basf2.find_file('data/analysis/modules/TauDecayMode/map_tauplus.txt') TauDecayMode.param('file_plus', mp_file_plus) to classify with default mapping.");
40 std::map <std::string, int> map_tau;
43 istringstream ss(line);
68 setDescription(
"Module to identify generated tau pair decays, using MCParticle information.\n"
69 "By default, each tau decay is numbered as TauolaBelle2DecayMode [Ref: BELLE2-NOTE-PH-2020-055]");
71 addParam(
"printmode",
m_printmode,
"Printout more information from each event", std::string(
"default"));
72 addParam(
"file_minus",
m_file_minus,
"Path for an alternative mapping for tau- decays", std::string(
""));
73 addParam(
"file_plus",
m_file_plus,
"Path for an alternative mapping for tau+ decays", std::string(
""));
200 map<int, std::vector<int>> map_vec;
243 map_vec[9010221] =
vec_f0;
249 bool TauMinusIsLeptonicDecay =
false;
250 bool TauPlusIsLeptonicDecay =
false;
252 bool elecFirst =
true;
253 bool muonFirst =
true;
255 bool isPiPizGamTauMinusFirst =
true;
256 bool isPiPizGamTauPlusFirst =
true;
258 bool isPiGamTauMinusFirst =
true;
259 bool isPiGamTauPlusFirst =
true;
261 bool isLFVTauMinus2BodyDecayFirst =
true;
262 bool isLFVTauPlus2BodyDecayFirst =
true;
264 bool isChargedRhoFromTauMinusFirst =
true;
265 bool isChargedRhoFromTauPlusFirst =
true;
267 bool isChargedA1FromTauMinusFirst =
true;
268 bool isChargedA1FromTauPlusFirst =
true;
270 bool isEtaPPGFromTauMinusFirst =
true;
271 bool isEtaPPGFromTauPlusFirst =
true;
273 bool isOmegaPizGamFromTauMinusFirst =
true;
274 bool isOmegaPizGamFromTauPlusFirst =
true;
276 bool isEtaPizPizPizFromTauMinusFirst =
true;
277 bool isEtaPizPizPizFromTauPlusFirst =
true;
282 bool isOmegaPimPipFromTauMinusFirst =
true;
283 bool isOmegaPimPipFromTauPlusFirst =
true;
289 for (
int i = 0; i <
MCParticles.getEntries(); i++) {
293 int pdgid = p.getPDG();
295 if (pdgid == -
Const::Klong.getPDGCode()) pdgid = -pdgid;
298 bool accept_photon =
false;
302 if (p.isInitial())
continue;
305 if (abs(pdgid) == 12 || abs(pdgid) == 14) {
306 int leptonicdecay = 0;
308 const vector<MCParticle*> daughters = mother->
getDaughters();
310 int dauid = abs(d->getPDG());
311 if (dauid == 11 || dauid == 12 || dauid == 13 || dauid == 14 || dauid == 16) {
315 if (leptonicdecay == 3) {
316 if (mother->
getPDG() == 15) TauMinusIsLeptonicDecay =
true;
317 if (mother->
getPDG() == -15) TauPlusIsLeptonicDecay =
true;
324 if (not mother)
continue;
325 const vector<MCParticle*> daughters = mother->
getDaughters();
328 stringstream elec_ss;
331 elec_ss << d->getPDG() <<
" ";
335 if (nElMinus == 1 && nElPlus == 1) {
336 B2DEBUG(19,
"Mother of elec pair is = " << mother->
getPDG() <<
" which has daughters : " << elec_ss.str());
340 else if (pdgid ==
Const::muon.getPDGCode() && muonFirst) {
343 if (not mother)
continue;
344 const vector<MCParticle*> daughters = mother->
getDaughters();
347 stringstream muon_ss;
350 muon_ss << d->getPDG() <<
" ";
351 if (d->getPDG() ==
Const::muon.getPDGCode()) nMuMinus++;
352 if (d->getPDG() == -
Const::muon.getPDGCode()) nMuPlus++;
354 if (nMuMinus == 1 && nMuPlus == 1) {
355 B2DEBUG(19,
"Mother of muon pair is = " << mother->
getPDG() <<
" which has daughters : " << muon_ss.str());
369 if (not mother)
continue;
370 int mothid = abs(mother->
getPDG());
373 bool isRadiationfromFinalStateChargedParticle =
false;
380 isRadiationfromFinalStateChargedParticle =
true;
384 bool isRadiationFromChargedRho =
false;
387 if (chg < 0 && isChargedRhoFromTauMinusFirst) {
388 isChargedRhoFromTauMinusFirst =
false;
389 isRadiationFromChargedRho =
true;
391 if (chg > 0 && isChargedRhoFromTauPlusFirst) {
392 isChargedRhoFromTauPlusFirst =
false;
393 isRadiationFromChargedRho =
true;
398 bool isRadiationFromChargedA1 =
false;
399 if (mothid == 20213) {
401 if (chg < 0 && isChargedA1FromTauMinusFirst) {
402 isChargedA1FromTauMinusFirst =
false;
403 isRadiationFromChargedA1 =
true;
405 if (chg > 0 && isChargedA1FromTauPlusFirst) {
406 isChargedA1FromTauPlusFirst =
false;
407 isRadiationFromChargedA1 =
true;
412 bool isRadiationfromIntermediateWBoson =
false;
413 if (mothid == 24) isRadiationfromIntermediateWBoson =
true;
418 bool isPiPizGam =
false;
419 bool isPiGam =
false;
420 if (isRadiationfromIntermediateWBoson) {
421 const vector<MCParticle*> daughters = mother->
getDaughters();
425 int nOtherSisters = 0;
429 if (abs(d->getPDG()) ==
Const::pion.getPDGCode()) {
431 }
else if (abs(d->getPDG()) ==
Const::pi0.getPDGCode()) {
438 if (nTotSisters >= 3 && nPiSisters == 1 && nPizSisters == 1 && nOtherSisters == 0) {
440 if (chg < 0 && isPiPizGamTauMinusFirst) {
441 isPiPizGamTauMinusFirst =
false;
444 if (chg > 0 && isPiPizGamTauPlusFirst) {
445 isPiPizGamTauPlusFirst =
false;
448 }
else if (nTotSisters == 2 && nPiSisters == 1 && nPizSisters == 0 && nOtherSisters == 0) {
450 if (chg < 0 && isPiGamTauMinusFirst) {
451 isPiGamTauMinusFirst =
false;
454 if (chg > 0 && isPiGamTauPlusFirst) {
455 isPiGamTauPlusFirst =
false;
462 bool isRadiationfromTau =
false;
463 if (mothid == 15) isRadiationfromTau =
true;
466 if (isRadiationfromTau) {
473 bool isLFVTau2BodyDecay =
false;
474 if (isRadiationfromTau) {
475 bool hasNeutrinoAsSister =
false;
476 int numChargedSister = 0;
477 int numNeutralNonNeutrinoNonPhotonSister = 0;
478 const vector<MCParticle*> daughters = mother->
getDaughters();
482 if (hasNeutrinoAsSister)
break;
484 if (!hasNeutrinoAsSister) {
488 if (isChargedFinalState) {
491 numNeutralNonNeutrinoNonPhotonSister++;
494 if (numChargedSister == 1 && numNeutralNonNeutrinoNonPhotonSister == 0) {
495 if (mother->
getPDG() == 15 && isLFVTauMinus2BodyDecayFirst) {
496 isLFVTauMinus2BodyDecayFirst =
false;
497 isLFVTau2BodyDecay =
true;
499 if (mother->
getPDG() == -15 && isLFVTauPlus2BodyDecayFirst) {
500 isLFVTauPlus2BodyDecayFirst =
false;
501 isLFVTau2BodyDecay =
true;
505 B2DEBUG(19,
"hasNeutrinoAsSister = " << hasNeutrinoAsSister
506 <<
" numChargedSister = " << numChargedSister
507 <<
" numNeutralNonNeutrinoNonPhotonSister = " << numNeutralNonNeutrinoNonPhotonSister
508 <<
" isLFVTau2BodyDecay = " << isLFVTau2BodyDecay);
511 bool isPi0GG =
false;
512 bool isEtaGG =
false;
513 bool isEtpGG =
false;
514 bool isPi0GEE =
false;
515 bool isEtaPPG =
false;
516 bool isOmPizG =
false;
517 if (mothid == 111 || mothid == 221 || mothid == 331 || mothid == 223) {
518 const vector<MCParticle*> daughters = mother->
getDaughters();
519 int numberofTotalDaughters = 0;
520 int numberOfPhotonDaughters = 0;
521 int numberOfElectronDaughters = 0;
522 int numberOfPionDaughters = 0;
523 int numberOfPizDaughters = 0;
526 numberofTotalDaughters ++;
527 if (abs(d->getPDG()) ==
Const::photon.getPDGCode()) numberOfPhotonDaughters++;
528 if (abs(d->getPDG()) ==
Const::electron.getPDGCode()) numberOfElectronDaughters++;
529 if (abs(d->getPDG()) ==
Const::pion.getPDGCode()) numberOfPionDaughters++;
530 if (abs(d->getPDG()) ==
Const::pi0.getPDGCode()) numberOfPizDaughters++;
532 if (numberofTotalDaughters == 2 && numberOfPhotonDaughters == 2) {
533 if (mothid ==
Const::pi0.getPDGCode()) isPi0GG =
true;
534 if (mothid == 221) isEtaGG =
true;
535 if (mothid == 331) isEtpGG =
true;
537 if (numberofTotalDaughters >= 3 && numberOfPhotonDaughters >= 1 && numberOfElectronDaughters == 2 && numberOfPionDaughters == 0
538 && numberOfPizDaughters == 0) {
539 if (mothid ==
Const::pi0.getPDGCode()) isPi0GEE =
true;
541 if (numberofTotalDaughters >= 3 && numberOfPhotonDaughters >= 1 && numberOfPizDaughters == 0 && numberOfPionDaughters == 2) {
544 if (chg < 0 && isEtaPPGFromTauMinusFirst) {
545 isEtaPPGFromTauMinusFirst =
false;
548 if (chg > 0 && isEtaPPGFromTauPlusFirst) {
549 isEtaPPGFromTauPlusFirst =
false;
554 if (numberofTotalDaughters >= 2 && numberOfPhotonDaughters >= 1 && numberOfPizDaughters == 1 && numberOfPionDaughters == 0) {
557 if (chg < 0 && isOmegaPizGamFromTauMinusFirst) {
558 isOmegaPizGamFromTauMinusFirst =
false;
561 if (chg > 0 && isOmegaPizGamFromTauPlusFirst) {
562 isOmegaPizGamFromTauPlusFirst =
false;
569 B2DEBUG(19,
"isRadiationfromFinalStateChargedParticle = " << isRadiationfromFinalStateChargedParticle);
570 B2DEBUG(19,
"isRadiationFromChargedRho = " << isRadiationFromChargedRho);
571 B2DEBUG(19,
"isRadiationFromChargedA1 = " << isRadiationFromChargedA1);
572 B2DEBUG(19,
"isRadiationfromIntermediateWBoson = " << isRadiationfromIntermediateWBoson <<
" isPiPizGam = " << isPiPizGam <<
573 " isPiGam = " << isPiGam);
574 B2DEBUG(19,
"isRadiationfromTau = " << isRadiationfromTau <<
" isLFVTau2BodyDecay = " << isLFVTau2BodyDecay);
575 B2DEBUG(19,
"isPi0GG = " << isPi0GG <<
" isEtaGG = " << isEtaGG <<
" isEtpGG = " << isEtpGG <<
" isPi0GEE = " << isPi0GEE);
576 B2DEBUG(19,
"isEtaPPG = " << isEtaPPG <<
" isOmPizG = " << isOmPizG);
582 if (isRadiationfromFinalStateChargedParticle) {
583 }
else if (isRadiationFromChargedRho) {
584 accept_photon =
true;
585 }
else if (isRadiationFromChargedA1) {
586 accept_photon =
true;
587 }
else if (isRadiationfromIntermediateWBoson) {
588 if (isPiPizGam || isPiGam) {
589 accept_photon =
true;
591 }
else if (isRadiationfromTau) {
592 if (isLFVTau2BodyDecay) {
593 accept_photon =
true;
595 }
else if (isPi0GG) {
596 }
else if (isEtaGG) {
597 }
else if (isEtpGG) {
598 }
else if (isPi0GEE) {
599 }
else if (isEtaPPG) {
600 accept_photon =
true;
601 }
else if (isOmPizG) {
602 accept_photon =
true;
610 else if (pdgid ==
Const::pi0.getPDGCode() && (isEtaPizPizPizFromTauMinusFirst || isEtaPizPizPizFromTauPlusFirst)) {
613 if (mother and (mother->
getPDG() == 221)) {
614 const vector<MCParticle*> daughters = mother->
getDaughters();
618 if (d->getPDG() ==
Const::pi0.getPDGCode()) nPizSisters++;
620 B2DEBUG(19,
"nPizSisters = " << nPizSisters);
621 if (nPizSisters == 3) {
623 if (chg < 0 && isEtaPizPizPizFromTauMinusFirst) {
624 isEtaPizPizPizFromTauMinusFirst =
false;
627 if (chg > 0 && isEtaPizPizPizFromTauPlusFirst) {
628 isEtaPizPizPizFromTauPlusFirst =
false;
648 else if (pdgid == -
Const::pion.getPDGCode() && (isOmegaPimPipFromTauMinusFirst || isOmegaPimPipFromTauPlusFirst)) {
651 if (mother and (mother->
getPDG() == 223)) {
652 const vector<MCParticle*> daughters = mother->
getDaughters();
653 int nOmegaDaughters = 0;
660 if (d->getPDG() == -
Const::pion.getPDGCode()) nPimSisters++;
661 if (d->getPDG() ==
Const::pion.getPDGCode()) nPipSisters++;
662 if (d->getPDG() ==
Const::pi0.getPDGCode()) nPizSisters++;
665 "nOmegaDaughters = " << nOmegaDaughters <<
" "
666 "nPimSisters = " << nPimSisters <<
" "
667 "nPipSisters = " << nPipSisters <<
" "
668 "nPizSisters = " << nPizSisters);
669 if (nOmegaDaughters >= 2 && nPimSisters == 1 && nPipSisters == 1 && nPizSisters == 0) {
671 if (chg < 0 && isOmegaPimPipFromTauMinusFirst) {
672 isOmegaPimPipFromTauMinusFirst =
false;
675 if (chg > 0 && isOmegaPimPipFromTauPlusFirst) {
676 isOmegaPimPipFromTauPlusFirst =
false;
683 "isEtaPizPizPizFromTauMinusFirst = " << isEtaPizPizPizFromTauMinusFirst <<
" "
685 "isEtaPizPizPizFromTauPlusFirst = " << isEtaPizPizPizFromTauPlusFirst <<
" "
689 "isOmegaPimPipFromTauMinusFirst = " << isOmegaPimPipFromTauMinusFirst <<
" "
691 "isOmegaPimPipFromTauPlusFirst = " << isOmegaPimPipFromTauPlusFirst <<
" "
696 map<int, std::vector<int>>::iterator ite ;
697 for (ite = map_vec.begin(); ite != map_vec.end(); ++ite) {
698 if (pdgid == ite->first) {
701 B2DEBUG(19,
"Photon accepted");
702 ite-> second.push_back(i);
705 ite-> second.push_back(i);
716 map<int, std::vector<int>>::iterator itr ;
717 for (itr = map_vec.begin(); itr != map_vec.end(); ++itr) {
718 for (
unsigned int i = 0; i < itr-> second.size(); i++) {
719 int ii = itr-> second[i];
731 for (
unsigned iorder = 0; iorder <
OrderedList.size(); ++iorder) {
736 int pdg = p->getPDG();
738 if (pdg != ii)
continue;
743 pdgname = databasePDG->GetParticle(pdg)->GetName();
753 for (
unsigned iorder = 0; iorder <
OrderedList.size(); ++iorder) {
758 int pdg = p->getPDG();
760 if (pdg != ii)
continue;
765 pdgname = databasePDG->GetParticle(pdg)->GetName();
779 map<std::string, int>::iterator itr ;
780 for (itr = mode_decay.begin(); itr != mode_decay.end(); ++itr) {
781 if (state == itr-> first) {
782 int mode = itr-> second;
809 if (mother ==
nullptr) {
821 }
else if (abs(p->getPDG()) ==
Const::muon.getPDGCode() && mother->
getPDG() == 221) {
823 }
else if (abs(p->getPDG()) ==
Const::muon.getPDGCode() && mother->
getPDG() == 113) {
825 }
else if (abs(p->getPDG()) ==
Const::muon.getPDGCode() && mother->
getPDG() == 333) {
827 }
else if (mother->
getPDG() == 15) {
829 }
else if (mother->
getPDG() == -15) {
843 for (
int i = 0; i <
MCParticles.getEntries(); i++) {
846 if (p.getStatus() == 1 && p.getPDG() == 15) {
850 if (p.getStatus() == 1 && p.getPDG() == -15) {
864 const vector<MCParticle*> daughters = p.getDaughters();
865 if (daughters.empty())
return ret;
872 if (isChargedFinalState) ret++;
882 ROOT::Math::PxPyPzEVector p4_tau = p.get4Vector();
883 B2DEBUG(19,
"p4_tau: " << p4_tau <<
" " << p4_tau.P());
884 ROOT::Math::Boost boost_to_mother_rest_frame(p4_tau.BoostToCM());
885 for (
auto i : vec_radgam) {
886 ROOT::Math::PxPyPzEVector p4_gamma =
MCParticles[i]->get4Vector();
887 B2DEBUG(19,
"p4_gamma: " << p4_gamma <<
" " << p4_gamma.P());
888 ROOT::Math::PxPyPzEVector p4_gamma_rest = boost_to_mother_rest_frame * p4_gamma;
889 B2DEBUG(19,
"p4_gamma_rest: " << p4_gamma_rest <<
" " << p4_gamma_rest.P());
890 double energy_rest = p4_gamma_rest.E();
891 if (energy_rest > egstar) egstar = energy_rest;
893 B2DEBUG(19,
"egstar: " << egstar);
static const ParticleType pi0
neutral pion particle
static const ChargedStable muon
muon particle
static const ChargedStable pion
charged pion particle
static const ParticleType Klong
K^0_L particle.
static const ParticleType photon
photon particle
static const ChargedStable electron
electron particle
Replacement for TDatabasePDG that is filled from EvtGen's evt.pdl.
static EvtGenDatabasePDG * Instance()
Instance method that loads the EvtGen table.
A Class to store the Monte Carlo particle information.
@ c_IsPHOTOSPhoton
bit 8: Particle is an radiative photon from PHOTOS
@ c_PrimaryParticle
bit 0: Particle is primary particle.
std::vector< Belle2::MCParticle * > getDaughters() const
Get vector of all daughter particles, empty vector if none.
int getPDG() const
Return PDG code of particle.
void setDescription(const std::string &description)
Sets the description of the module.
std::vector< int > vec_numu
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_em
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_omega
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_k0s
Variable name of the vector where particles identified in the event are stored.
Int_t m_mprong
Prong of the decay channel of tau-.
std::vector< int > vec_b1p
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_f1
Variable name of the vector where particles identified in the event are stored.
int numOfTauPlus
Number of tau+ in the event.
Int_t m_pprong
Prong of the decay channel of tau+.
StoreObjPtr< EventMetaData > m_event_metadata
event number
void IdentifyTauPair()
Identifies if the event is a generated tau pair.
std::vector< int > vec_apro
Variable name of the vector where particles identified in the event are stored.
double getEgstar(const std::vector< int > &vec_radgam, const MCParticle &mc)
Energy of the radiative photon in tau rest frame.
std::vector< int > vec_pi0
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_alpha
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_radgam_taum
Variable name of the vector where particles identified in the event are stored.
StoreArray< MCParticle > MCParticles
StoreArray of MCParticles.
std::vector< int > vec_anue
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_nue
Variable name of the vector where particles identified in the event are stored.
virtual void initialize() override
Initializes the module.
std::vector< int > vec_a0p_980
Variable name of the vector where particles identified in the event are stored.
std::string m_file_plus
Alternative mapping for tau+.
static constexpr std::array< int, 46 > OrderedList
PDG codes of ORDERED particles.
std::vector< int > vec_a0m_1450
Variable name of the vector where particles identified in the event are stored.
virtual void event() override
Method is called for each event.
bool m_isEtaPizPizPizFromTauMinus
Flag for eta->pi0pi0pi0 decays from tau-.
static constexpr std::array< int, 3 > Neutrinos
PDG codes of neutrinos in final state particles in generation: {nu_e, nu_mu, mu_tau}...
double m_pegstar
Energy of radiative photon from tau+.
std::vector< int > vec_lmb_br
Variable name of the vector where particles identified in the event are stored.
Int_t m_mmode
ID of the decay channel of tau-.
void AnalyzeTauPairEvent()
Analyze a generated tau pair event.
bool m_isOmegaPimPipFromTauMinus
Flag for omega->pi-pi+ decays from tau-.
static int getRecursiveMotherCharge(const MCParticle *mc)
Identifies particles coming from tau decays.
std::vector< int > vec_phi
Variable name of the vector where particles identified in the event are stored.
int m_taum_no
number of tau- unclassified events
std::string m_tauminusdecaymode
Variable name for the decay mode of the tau-.
std::vector< int > vec_a1p
Variable name of the vector where particles identified in the event are stored.
bool m_isOmegaPimPipFromTauPlus
Flag for omega->pi-pi+ decays from tau+.
bool tauPair
Boolean variable used to identify tau event.
int TauolaBelle2DecayMode(const std::string &s, int chg)
Classifies the decays of the event and assigns a decay mode.
int idOfTauMinus
Index of the generated tau-.
std::vector< int > vec_lambda
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_anut
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_f0
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_mum
Variable name of the vector where particles identified in the event are stored.
Int_t m_pmode
ID of the decay channel of tau+.
int numOfTauMinus
Number of tau- in the event.
std::vector< int > vec_nut
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_kstar0_br
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_radgam_taup
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_a00_1450
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_kstar0
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_a0m_980
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_a00_980
Variable name of the vector where particles identified in the event are stored.
static int getProngOfDecay(const MCParticle &mc)
Identifies the number of charged final state particles in the decay.
std::vector< int > vec_a1m
Variable name of the vector where particles identified in the event are stored.
int idOfTauPlus
Index of the generated tau+.
StoreObjPtr< TauPairDecay > m_tauDecay
pointer to tau pair decay objects
std::vector< int > vec_rhop
Variable name of the vector where particles identified in the event are stored.
std::string m_printmode
Parameter passed by the user to indicate the information to be printed.
std::vector< int > vec_pro
Variable name of the vector where particles identified in the event are stored.
bool m_isEtaPizPizPizFromTauPlus
Flag for eta->pi0pi0pi0 decays from tau+.
std::string m_tauplusdecaymode
Variable name for the decay mode of the tau+.
std::vector< int > vec_pim
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_mup
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_pip
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_kstarp
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_kstarm
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_etapr
Variable name of the vector where particles identified in the event are stored.
double m_megstar
Energy of radiative photon from tau-.
std::vector< int > vec_ep
Variable name of the vector where particles identified in the event are stored.
TauDecayModeModule()
Constructor: Sets the description, the properties and the parameters of the module.
std::vector< int > vec_k0l
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_eta
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_km
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_anumu
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_dau_tauplus
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_rhom
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_gam
Variable name of the vector where particles identified in the event are stored.
std::string m_file_minus
Alternative mapping for tau-.
int m_taup_no
number of tau+ unclassified events
std::vector< int > vec_dau_tauminus
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_kp
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_b1m
Variable name of the vector where particles identified in the event are stored.
std::vector< int > vec_rho0
Variable name of the vector where particles identified in the event are stored.
static constexpr std::array< int, 5 > finalStatePDGs
PDG codes accepted as charged final state particles in generation: {e, mu, pi, K, p}...
std::map< std::string, int > mode_decay_minus
Mapping for tau- decays.
std::map< std::string, int > mode_decay_plus
Mapping for tau+ decays.
std::vector< int > vec_a0p_1450
Variable name of the vector where particles identified in the event are stored.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.