1 //--------------------------------------------------------------------------
4 // This software is part of the EvtGen package developed jointly
5 // for the BaBar and CLEO collaborations. If you use all or part
6 // of it, please give an appropriate acknowledgement.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 1998 Caltech, UCSB
11 // Module: EvtBtoKpiCPiso.cc
13 // Description: Routine to decay B -> K pi with isospin amplitudes
15 // Modification history:
17 // RYD/NK Febuary 7, 1998 Module created
19 //------------------------------------------------------------------------
21 #include "EvtGenBase/EvtPatches.hh"
23 #include "EvtGenBase/EvtParticle.hh"
24 #include "EvtGenBase/EvtGenKine.hh"
25 #include "EvtGenBase/EvtPDL.hh"
26 #include "EvtGenBase/EvtReport.hh"
27 #include "EvtGenModels/EvtBtoKpiCPiso.hh"
30 EvtBtoKpiCPiso::~EvtBtoKpiCPiso() {}
32 std::string EvtBtoKpiCPiso::getName(){
34 return "BTOKPI_CP_ISO";
39 EvtDecayBase* EvtBtoKpiCPiso::clone(){
41 return new EvtBtoKpiCPiso;
46 void EvtBtoKpiCPiso::init(){
48 // check that there are 15 arguments
52 checkSpinParent(EvtSpinType::SCALAR);
54 checkSpinDaughter(0,EvtSpinType::SCALAR);
55 checkSpinDaughter(1,EvtSpinType::SCALAR);
59 void EvtBtoKpiCPiso::initProbMax() {
61 //this might need to be revised
63 //added by Lange Jan4,2000
64 static EvtId PI0=EvtPDL::getId("pi0");
65 static EvtId PIP=EvtPDL::getId("pi+");
66 static EvtId PIM=EvtPDL::getId("pi+");
67 static EvtId K0=EvtPDL::getId("K0");
68 static EvtId KB=EvtPDL::getId("anti-K0");
69 static EvtId KP=EvtPDL::getId("K+");
70 static EvtId KM=EvtPDL::getId("K-");
72 if (((getDaug(0)==PI0) && (getDaug(1)==KP)) || ((getDaug(0)==KP) && (getDaug(1)==PI0))) {
73 setProbMax(2.0*(getArg(2)*getArg(2) + getArg(10)*getArg(10)));
76 if (((getDaug(0)==PI0) && (getDaug(1)==KM)) || ((getDaug(0)==KM) && (getDaug(1)==PI0))) {
77 setProbMax( 2.0*(getArg(4)*getArg(4) + getArg(12)*getArg(12)));
80 if (((getDaug(0)==PIP) && (getDaug(1)==K0)) || ((getDaug(0)==K0) && (getDaug(1)==PIP))) {
81 setProbMax( 4.0*(getArg(6)*getArg(6) + getArg(10)*getArg(10)));
84 if (((getDaug(0)==PIM) && (getDaug(1)==KB)) || ((getDaug(0)==KB) && (getDaug(1)==PIM))) {
85 setProbMax( 4.0*(getArg(8)*getArg(8) + getArg(12)*getArg(12)));
88 if (((getDaug(0)==PI0) && (getDaug(1)==K0)) || ((getDaug(0)==K0) && (getDaug(1)==PI0))) {
89 setProbMax( 2.0*(getArg(2)*getArg(2) + getArg(10)*getArg(10)));
92 if (((getDaug(0)==PI0) && (getDaug(1)==KB)) || ((getDaug(0)==KB) && (getDaug(1)==PI0))) {
93 setProbMax( 2.0*(getArg(4)*getArg(4) + getArg(12)*getArg(12)));
96 if (((getDaug(0)==PIM) && (getDaug(1)==KP)) || ((getDaug(0)==KP) && (getDaug(1)==PIM))) {
97 setProbMax( 4.0*(getArg(6)*getArg(6) + getArg(10)*getArg(10)));
100 if (((getDaug(0)==PIP) && (getDaug(1)==KM)) || ((getDaug(0)==KM) && (getDaug(1)==PIP))) {
101 setProbMax( 4.0*(getArg(8)*getArg(8) + getArg(12)*getArg(12)));
105 void EvtBtoKpiCPiso::decay( EvtParticle *p ){
108 p->initializePhaseSpace(getNDaug(),getDaugs());
109 //added by Lange Jan4,2000
110 static EvtId PI0=EvtPDL::getId("pi0");
111 static EvtId PIP=EvtPDL::getId("pi+");
112 static EvtId PIM=EvtPDL::getId("pi+");
113 static EvtId K0=EvtPDL::getId("K0");
114 static EvtId KB=EvtPDL::getId("anti-K0");
115 static EvtId KP=EvtPDL::getId("K+");
116 static EvtId KM=EvtPDL::getId("K-");
120 EvtComplex U, Ubar, V, Vbar, W, Wbar;
122 U = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
123 Ubar = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
124 V = EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
125 Vbar = EvtComplex(getArg(8)*cos(getArg(9)),getArg(8)*sin(getArg(9)));
126 W = EvtComplex(getArg(10)*cos(getArg(11)),getArg(10)*sin(getArg(11)));
127 Wbar = EvtComplex(getArg(12)*cos(getArg(13)),getArg(12)*sin(getArg(13)));
129 //depending on what combination of K pi we have, there will be different
130 //A and Abar (only A given in comments!)
132 if (((getDaug(0)==PI0) && (getDaug(1)==KP)) || ((getDaug(0)==KP) && (getDaug(1)==PI0))) {
139 if (((getDaug(0)==PI0) && (getDaug(1)==KM)) || ((getDaug(0)==KM) && (getDaug(1)==PI0))) {
141 //pi0 K-, so Ubar - Wbar
146 if (((getDaug(0)==PIP) && (getDaug(1)==K0)) || ((getDaug(0)==K0) && (getDaug(1)==PIP))) {
150 A = sqrt(2.0)*(V + W);
153 if (((getDaug(0)==PIM) && (getDaug(1)==KB)) || ((getDaug(0)==KB) && (getDaug(1)==PIM))) {
155 //pi- K0bar, so Vbar + Wbar
156 A = sqrt(2.0)*(Vbar + Wbar);
159 if (((getDaug(0)==PI0) && (getDaug(1)==K0)) || ((getDaug(0)==K0) && (getDaug(1)==PI0))) {
166 if (((getDaug(0)==PI0) && (getDaug(1)==KB)) || ((getDaug(0)==KB) && (getDaug(1)==PI0))) {
171 if (((getDaug(0)==PIM) && (getDaug(1)==KP)) || ((getDaug(0)==KP) && (getDaug(1)==PIM))) {
175 A = sqrt(2.0)*(V - W);
178 if (((getDaug(0)==PIP) && (getDaug(1)==KM)) || ((getDaug(0)==KM) && (getDaug(1)==PIP))) {
180 A = sqrt(2.0)*(Vbar - Wbar);