Belle II Software  release-05-01-25
EvtBSemiTauonic2HDMType2.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2013 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Koji Hara *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <stdlib.h>
12 #include "EvtGenBase/EvtParticle.hh"
13 #include "EvtGenBase/EvtPDL.hh"
14 
15 #include <string>
16 
17 #include "framework/logging/Logger.h"
18 
19 #include "generators/evtgen/EvtGenModelRegister.h"
20 #include "generators/evtgen/models/EvtBSemiTauonic2HDMType2.h"
21 #include "generators/evtgen/models/EvtBSemiTauonicHelicityAmplitudeCalculator.h"
22 #include "generators/evtgen/models/EvtBSemiTauonicVectorMesonAmplitude.h"
23 #include "generators/evtgen/models/EvtBSemiTauonicScalarMesonAmplitude.h"
24 
25 namespace Belle2 {
32  B2_EVTGEN_REGISTER_MODEL(EvtBSemiTauonic2HDMType2);
33 
34  EvtBSemiTauonic2HDMType2::EvtBSemiTauonic2HDMType2(): m_CalcHelAmp(0), m_CalcAmp(0) {}
35 
37  {
38  if (m_CalcHelAmp)delete m_CalcHelAmp;
39  if (m_CalcAmp)delete m_CalcAmp;
40  }
41 
43  {
44  return "BSTD_2HDMTYPE2";
45  }
46 
47 
48 
49  EvtDecayBase* EvtBSemiTauonic2HDMType2::clone()
50  {
51  return new EvtBSemiTauonic2HDMType2;
52  }
53 
54 
55  void EvtBSemiTauonic2HDMType2::decay(EvtParticle* p)
56  {
57  p->initializePhaseSpace(getNDaug(), getDaugs());
58  m_CalcAmp->CalcAmp(p, _amp2, m_CalcHelAmp);
59  }
60 
62  {
63  EvtId parnum, mesnum, lnum, nunum;
64 
65  parnum = getParentId();
66  mesnum = getDaug(0);
67  lnum = getDaug(1);
68  nunum = getDaug(2);
69 
70  double maxprob = m_CalcAmp->CalcMaxProb(parnum, mesnum,
71  lnum, nunum,
72  m_CalcHelAmp);
73 
74  B2INFO("EvtBSemiTauonic2HDMType2::initProbMax()>> maxprob: " << maxprob);
75 
76  setProbMax(maxprob);
77  }
78 
79 
81  {
82  checkNDaug(3);
83 
84  //We expect the parent to be a scalar
85  //and the daughters to be X lepton neutrino
86  checkSpinParent(EvtSpinType::SCALAR);
87 
88  checkSpinDaughter(1, EvtSpinType::DIRAC);
89  checkSpinDaughter(2, EvtSpinType::NEUTRINO);
90 
91  const double m_tau = EvtPDL::getMeanMass(getDaug(1));
92 
93  EvtSpinType::spintype d1type = EvtPDL::getSpinType(getDaug(0));
94 
95  if (d1type == EvtSpinType::VECTOR) {
96  B2INFO("EvtBSemiTauonic2HDMType2::init()>> Initializing for decays to a vector type meson ");
97  checkNArg(7, 8);
98 
99  const double rhoa12 = getArg(0);
100  const double R11 = getArg(1);
101  const double R21 = getArg(2);
102  const double aR3 = getArg(3);
103 
104  const double rho12 = 0; // not used for D*taunu decays
105  const double aS1 = 0; // not used for D*taunu decays
106 
107  EvtComplex Coeffs[5];
108 
109  const double m_b = getArg(4);
110  const double m_c = getArg(5);
111  const double tanBetaOverMH = getArg(6);
112  B2INFO("tan(beta)/m_H+ = " << tanBetaOverMH);
113 
114  Coeffs[0] = 0; // CV1
115  Coeffs[1] = 0; // CV2
116  Coeffs[2] = -m_b * m_tau * tanBetaOverMH * tanBetaOverMH; // CS1
117  Coeffs[3] = 0; // CS2, neglected by default
118  Coeffs[4] = 0; // CT
119 
120  if (getNArg() == 8) {
121  // if m_H is explicitly given
122  const double m_H = getArg(7);
123  Coeffs[3] = -m_c * m_tau / m_H / m_H; // CS2
124  }
125 
126  m_CalcHelAmp = new EvtBSemiTauonicHelicityAmplitudeCalculator(rho12, rhoa12, R11, R21, aS1, aR3, m_b, m_c,
127  Coeffs[0], Coeffs[1], Coeffs[2], Coeffs[3], Coeffs[4],
128  EvtPDL::getMeanMass(getParentId()),
129  -1, /*dummy for Dmass*/
130  EvtPDL::getMeanMass(getDaug(0)));
132  } else if (d1type == EvtSpinType::SCALAR) {
133  B2INFO("EvtBSemiTauonic2HDMType2::init()>> Initializing for decays to a scalar type meson ");
134  checkNArg(5, 6);
135 
136  const double rho12 = getArg(0);
137  const double aS1 = getArg(1);
138 
139  const double rhoa12 = 0; // not used for Dtaunu decays
140  const double R11 = 0; // not used for Dtaunu decays
141  const double R21 = 0; // not used for Dtaunu decays
142  const double aR3 = 0; // not used for Dtaunu decays
143 
144  EvtComplex Coeffs[5];
145 
146  const double m_b = getArg(2);
147  const double m_c = getArg(3);
148  const double tanBetaOverMH = getArg(4);
149  B2INFO("tan(beta)/m_H+ = " << tanBetaOverMH);
150 
151  Coeffs[0] = 0; // CV1
152  Coeffs[1] = 0; // CV2
153  Coeffs[2] = -m_b * m_tau * tanBetaOverMH * tanBetaOverMH; // CS1
154  Coeffs[3] = 0; // CS2, neglected by default
155  Coeffs[4] = 0; // CT
156 
157  if (getNArg() == 6) {
158  // if m_H is explicitly given
159  const double m_H = getArg(5);
160  Coeffs[3] = -m_c * m_tau / m_H / m_H; // CS2
161  }
162 
163  m_CalcHelAmp = new EvtBSemiTauonicHelicityAmplitudeCalculator(rho12, rhoa12, R11, R21, aS1, aR3, m_b, m_c,
164  Coeffs[0], Coeffs[1], Coeffs[2], Coeffs[3], Coeffs[4],
165  EvtPDL::getMeanMass(getParentId()),
166  EvtPDL::getMeanMass(getDaug(0)),
167  -1 /*dummy for D*mass*/);
168  m_CalcAmp = new EvtBSemiTauonicScalarMesonAmplitude();
169  } else {
170  B2ERROR("BSemiTauonic2HDMType2 model handles only scalar and vector meson daughters.");
171 // EvtGenReport(EVTGEN_ERROR, "EvtGen") << "BSemiTauonic2HDMType2 model handles only scalar and vector meson daughters."<<std::endl;
172  ::abort();
173  }
174  }
176 } // Belle 2 Namespace
Belle2::EvtBSemiTauonic2HDMType2::m_CalcAmp
EvtBSemiTauonicAmplitude * m_CalcAmp
A pointer to the spin-dependent amplitude calculator specific to the spin type of the daughter meson.
Definition: EvtBSemiTauonic2HDMType2.h:76
Belle2::EvtBSemiTauonic2HDMType2::initProbMax
void initProbMax()
The function sets the maximum value of the probability.
Definition: EvtBSemiTauonic2HDMType2.cc:69
Belle2::EvtBSemiTauonic2HDMType2::decay
void decay(EvtParticle *p)
The function evaluates the decay amplitude of the parent particle.
Definition: EvtBSemiTauonic2HDMType2.cc:63
Belle2::EvtBSemiTauonic2HDMType2::getName
std::string getName()
The function returns the model name.
Definition: EvtBSemiTauonic2HDMType2.cc:50
Belle2::EvtBSemiTauonic2HDMType2::~EvtBSemiTauonic2HDMType2
virtual ~EvtBSemiTauonic2HDMType2()
The destructor
Definition: EvtBSemiTauonic2HDMType2.cc:44
Belle2::EvtBSemiTauonicAmplitude::CalcMaxProb
double CalcMaxProb(EvtId parent, EvtId meson, EvtId lepton, EvtId nudaug, EvtBSemiTauonicHelicityAmplitudeCalculator *HelicityAmplitudeCalculator)
The function calculates the maximum probability.
Definition: EvtBSemiTauonicAmplitude.cc:87
Belle2::EvtBSemiTauonicVectorMesonAmplitude
The class calculates the spin dependent amplitudes of B->D*taunu decays for the BSemiTauonic model ba...
Definition: EvtBSemiTauonicVectorMesonAmplitude.h:29
Belle2::EvtBSemiTauonic2HDMType2::m_CalcHelAmp
EvtBSemiTauonicHelicityAmplitudeCalculator * m_CalcHelAmp
A pointer to the helicity amplitude calculator.
Definition: EvtBSemiTauonic2HDMType2.h:73
Belle2::B2_EVTGEN_REGISTER_MODEL
B2_EVTGEN_REGISTER_MODEL(EvtB0toKsKK)
register the model in EvtGen
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EvtBSemiTauonic2HDMType2::init
void init()
The function initializes the decay.
Definition: EvtBSemiTauonic2HDMType2.cc:88
Belle2::EvtBSemiTauonicAmplitude::CalcAmp
virtual void CalcAmp(EvtParticle *parent, EvtAmp &amp, EvtBSemiTauonicHelicityAmplitudeCalculator *HelicityAmplitudeCalculator)=0
The function calculates the spin dependent amplitude.
Belle2::EvtBSemiTauonicHelicityAmplitudeCalculator
The class calculates the helicity amplitude of semi-tauonic B decays including new physics effects ba...
Definition: EvtBSemiTauonicHelicityAmplitudeCalculator.h:38
Belle2::EvtBSemiTauonic2HDMType2::clone
EvtDecayBase * clone()
The function makes a copy of an EvtBSemiTauonic2HDMType2 object.
Definition: EvtBSemiTauonic2HDMType2.cc:57
Belle2::EvtBSemiTauonic2HDMType2::EvtBSemiTauonic2HDMType2
EvtBSemiTauonic2HDMType2()
The default constructor
Definition: EvtBSemiTauonic2HDMType2.cc:42