BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBTo3piCP.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: EvtBTo3piCP.cc
12//
13// Description: Routine to decay B->pi+ pi- pi0
14// and has CP violation.
15//
16// Modification history:
17//
18// RYD/VERSILLE March 2, 1997 Module created
19//
20//------------------------------------------------------------------------
21//
22#include "EvtBTo3piCP.hh"
30#include <stdlib.h>
31#include <string>
32
33extern "C" {
34extern void evt3pions_( double*, int*, double*, double*, double*, double*, double*, double*,
35 double*, double* );
36}
37
39
40void EvtBTo3piCP::getName( std::string& model_name ) { model_name = "BTO3PI_CP"; }
41
43
45
46 // check that there are 2 arguments
47 checkNArg( 2 );
48 checkNDaug( 3 );
49
51
55}
56
58
60
61 // added by Lange Jan4,2000
62 static EvtId B0 = EvtPDL::getId( "B0" );
63 static EvtId B0B = EvtPDL::getId( "anti-B0" );
64
65 double t;
66 EvtId other_b;
67
68 EvtCPUtil::OtherB( p, t, other_b );
69
70 EvtParticle *pip, *pim, *pi0;
71
73
74 // p->init_daug(SCALAR,&pip,SCALAR,&pim,SCALAR,&pi0);
75 pip = p->getDaug( 0 );
76 pim = p->getDaug( 1 );
77 pi0 = p->getDaug( 2 );
78
79 EvtVector4R p4[3];
80
81 double dm = getArg( 0 );
82 double alpha = getArg( 1 );
83 int iset;
84
85 static int first = 1;
86
87 if ( first == 1 )
88 {
89 iset = 10000;
90 first = 0;
91 }
92 else { iset = 0; }
93
94 double p4piplus[4], p4piminus[4], p4gamm1[4], p4gamm2[4];
95
96 double realA, imgA, realbarA, imgbarA;
97
98 evt3pions_( &alpha, &iset, p4piplus, p4piminus, p4gamm1, p4gamm2, &realA, &imgA, &realbarA,
99 &imgbarA );
100
101 p4[0].set( p4piplus[3], p4piplus[0], p4piplus[1], p4piplus[2] );
102 p4[1].set( p4piminus[3], p4piminus[0], p4piminus[1], p4piminus[2] );
103 p4[2].set( p4gamm1[3] + p4gamm2[3], p4gamm1[0] + p4gamm2[0], p4gamm1[1] + p4gamm2[1],
104 p4gamm1[2] + p4gamm2[2] );
105
106 if ( pip->getId() == EvtPDL::getId( "pi+" ) )
107 {
108 pip->init( getDaug( 0 ), p4[0] );
109 pim->init( getDaug( 1 ), p4[1] );
110 }
111 else
112 {
113 pip->init( getDaug( 0 ), p4[1] );
114 pim->init( getDaug( 1 ), p4[0] );
115 }
116
117 pi0->init( getDaug( 2 ), p4[2] );
118
119 EvtComplex amp;
120
121 EvtComplex A( realA, imgA );
122 EvtComplex Abar( realbarA, imgbarA );
123
124 if ( other_b == B0B )
125 {
126 amp = A * cos( dm * t / ( 2 * EvtConst::c ) ) +
127 EvtComplex( 0., 1. ) * Abar * sin( dm * t / ( 2 * EvtConst::c ) );
128 }
129 if ( other_b == B0 )
130 {
131 amp = Abar * cos( dm * t / ( 2 * EvtConst::c ) ) +
132 EvtComplex( 0., 1. ) * A * sin( dm * t / ( 2 * EvtConst::c ) );
133 }
134
135 vertex( amp );
136
137 return;
138}
void evt3pions_(double *, int *, double *, double *, double *, double *, double *, double *, double *, double *)
double alpha
void getName(std::string &name)
virtual ~EvtBTo3piCP()
void initProbMax()
EvtDecayBase * clone()
void decay(EvtParticle *p)
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition EvtCPUtil.cc:225
static const double c
Definition EvtConst.hh:31
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
EvtId getDaug(int i)
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtId getId() const
EvtParticle * getDaug(int i)
void set(int i, double d)
int t()
Definition t.c:1