BOSS 7.0.3
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBToKpipiCP.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
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.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtBToKpipiCP.cc
12//
13// Description: Routine to decay B->K pi pi
14// and has CP violation.
15// --- This is the routine to be called by the Main generator
16// to get the decay of B0 -->-- K+ pi- pi0
17// The decay proceeeds through three channels:
18// a) B0 -->-- K*+ pi- ; K*+ -->-- K+ pi0
19// b) K*0 pi0 ; K*0bar -->-- K+ pi-
20// c) K- rho+ ; rho+ -->-- pi+ pi0
21// It provides at the same time the CP conjugate decay
22// B0bar -->-- K- pi+ pi0
23//
24// Modification history:
25//
26// Versille September, 1997 Module created
27//
28//------------------------------------------------------------------------
29//
31#include <stdlib.h>
35#include "EvtGenBase/EvtPDL.hh"
38#include "EvtGenBase/EvtId.hh"
39#include <string>
40
41extern "C" {
42 extern void evtkpipi_(double *, double *, int *,double *,
43 double *,double *,double *,double *,
44 double *,double *,double *);
45}
46
48
49
50void EvtBToKpipiCP::getName(std::string& model_name){
51
52 model_name="BTOKPIPI_CP";
53
54}
55
56
58
59 return new EvtBToKpipiCP;
60
61}
62
64
65 // check that there are 3 arguments
66 checkNArg(3);
67 checkNDaug(3);
68
70
74
75}
76
77
79
80 //added by Lange Jan4,2000
81 static EvtId B0=EvtPDL::getId("B0");
82 static EvtId B0B=EvtPDL::getId("anti-B0");
83
84 double t;
85 EvtId other_b;
86
87 EvtCPUtil::OtherB(p,t,other_b);
88
89 EvtParticle *Kp,*pim,*pi0;
90
92 Kp=p->getDaug(0);
93 pim=p->getDaug(1);
94 pi0=p->getDaug(2);
95
96 EvtVector4R p4[3];
97
98 //double dm=getArg(0);
99 double alpha=getArg(1);
100 double beta=getArg(2);
101 int iset;
102
103 static int first=1;
104
105 if (first==1) {
106 iset=10000;
107 first=0;
108 }
109 else{
110 iset=0;
111 }
112
113 double p4Kplus[4],p4piminus[4],p4gamm1[4],p4gamm2[4];
114
115 double realA,imgA,realbarA,imgbarA;
116
117 evtkpipi_(&alpha,&beta,&iset,p4Kplus,p4piminus,p4gamm1,p4gamm2,
118 &realA,&imgA,&realbarA,&imgbarA);
119
120 p4[0].set(p4Kplus[3],p4Kplus[0],p4Kplus[1],p4Kplus[2]);
121 p4[1].set(p4piminus[3],p4piminus[0],p4piminus[1],p4piminus[2]);
122 p4[2].set(p4gamm1[3]+p4gamm2[3],p4gamm1[0]+p4gamm2[0],
123 p4gamm1[1]+p4gamm2[1],p4gamm1[2]+p4gamm2[2]);
124
125 Kp->init( getDaug(0), p4[0] );
126 pim->init( getDaug(1), p4[1] );
127 pi0->init( getDaug(2), p4[2] );
128
129 EvtComplex amp;
130
131 EvtComplex A(realA,imgA);
132 EvtComplex Abar(realbarA,imgbarA);
133
134 if (other_b==B0B){
135 amp=Abar;
136 }
137 if (other_b==B0){
138 amp=A;
139 }
140
141 vertex(amp);
142
143 return ;
144}
145
void evtkpipi_(double *, double *, int *, double *, double *, double *, double *, double *, double *, double *, double *)
const double alpha
void decay(EvtParticle *p)
virtual ~EvtBToKpipiCP()
EvtDecayBase * clone()
void getName(std::string &name)
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition: EvtCPUtil.cc:229
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
Definition: EvtDecayBase.hh:65
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
EvtId getDaug(int i)
Definition: EvtDecayBase.hh:66
Definition: EvtId.hh:27
static EvtId getId(const std::string &name)
Definition: EvtPDL.cc:287
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
void set(int i, double d)
Definition: EvtVector4R.hh:183
int t()
Definition: t.c:1