BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtSVVNONCPEIGEN.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) 2001 Royal Holloway, University of London
10//
11// Module: EvtSVVNONCPEIGEN.cc
12//
13// Description: Routine to decay scalar -> vector vector
14// and has CP violation.
15//
16// This model does all the ckm-suppressed decays and mixing for you. It randomly
17// 'overwrites' any reco or tagging state as set in the Y(4S) decay model
18// (VSS_(B)MIX) with its own generated states.
19//
20// As such, the corresponding dec file requires only one decay-mode description,
21// for example: Decay MyB0 1.000 rho+ MyD*- SVV_NONCPEIGEN dm beta gamma
22// 0.322 0.31 0.941 0 0.107 1.42 0.02 0 0.02 0 0.02 0 ; EndDecay and furthermore
23// Y(4S) only needs to decay to B0's (or B0bar's). The decay above should be a
24// CKM-favored mode (eg. B0->D*-rho+ or B0bar->D*+rho-). All ckm-suppressed decays
25// and the mixing are derived from this line in the ::Decay function.
26//
27// There are 15 or 27 arguments. The first three are dm, phase1
28// and phase2. dm is the B0-B0bar mass difference. Phases 1
29// and 2 are the CKM weak phases relevant for the particular mode,
30// eg for B-->DstRho phase1 is beta and phase2 is gamma.
31//
32// The next arguments are the 2 amplitudes (= 12 input parameters)
33// in the order: A_f, Abar_f. In the example above, the 'A_f' amplitude now
34// stands for the ckm-favored decay 'B0->D*-rho+', and 'Abar_f' stands for
35// 'B0bar->D*-rho+'
36//
37// Each amplitude has its 3 helicity states in the order +, 0, -, which are each
38// specified by a magnitude and a strong phase.
39//
40// The last 2 arguments A_fbar and Abar_fbar (=12 input parameters) are not
41// necessary, but can included if one wants to set them differently from A_f,
42// Abar_f.
43//
44// Mind you that Hbar_+- = H_-+ (ignoring the weak phase, which flips sign).
45// It is custumary to select one set of helicity states (eg H_+-) and to adopt
46// these for the CP-conjugate decays as well (ie. depict Hbar_-+ with H_+-), which
47// is the interpretation we use for the input-parameters above. However, the
48// angular decay in EvtGen is just a formula in which helicity amplitudes are
49// 'plugged' in, making no difference between B0 or B0bar decays. In the model
50// below we (thus) account for the +- flipping between B0 and B0bar.
51//
52//
53// Modification history:
54// Ajit Kurup 9 March 2001 Module created (from EvtSVSNONCPEIGEN)
55// Max Baak 01/16/2004 Fix of Helicity amplitude ordering.
56// Decay also works for B0bar decays.
57//------------------------------------------------------------------------
58//
59#include "EvtSVVNONCPEIGEN.hh"
69#include "EvtSVVHelAmp.hh"
70#include <stdlib.h>
71#include <string>
72
74
75void EvtSVVNONCPEIGEN::getName( std::string& model_name ) { model_name = "SVV_NONCPEIGEN"; }
76
78
80
81 // check that there are 27 arguments
82 checkNArg( 27, 15 );
83 checkNDaug( 2 );
84
87
88 // The ordering of A_f is :
89 // A_f[0-2] = A_f
90 // A_f[3-5] = Abar_f
91 // A_f[6-8] = A_fbar
92 // A_f[9-11] = Abar_fbar
93 //
94 // Each of the 4 amplitudes include the 3 different helicity states in
95 // the order +, 0, -. See more about helicity amplitude ordering in ::decay
96
97 int i = 0;
98 int j = ( getNArg() - 3 ) / 2;
99
100 for ( i = 0; i < j; ++i )
101 {
102 _A_f[i] = getArg( ( 2 * i ) + 3 ) *
103 EvtComplex( cos( getArg( ( 2 * i ) + 4 ) ), sin( getArg( ( 2 * i ) + 4 ) ) );
104 }
105
106 // If only 6 amplitudes are specified, calculate the last 6 from the first 6:
107 if ( 6 == j )
108 {
109 for ( i = 0; i < 3; ++i )
110 {
111 _A_f[6 + i] = _A_f[3 + i];
112 _A_f[9 + i] = _A_f[i];
113 }
114 }
115}
116
118 double probMax = 0;
119 for ( int i = 0; i < 12; ++i )
120 {
121 double amp = abs( _A_f[i] );
122 probMax += amp * amp;
123 }
124
125 setProbMax( probMax );
126}
127
129
130 // added by Lange Jan4,2000
131 static EvtId B0 = EvtPDL::getId( "B0" );
132 static EvtId B0B = EvtPDL::getId( "anti-B0" );
133
134 double t;
135 EvtId other_b;
136 EvtId daugs[2];
137
138 // MB: flip selects the final of the decay
139 int flip = ( ( p->getId() == B0 ) ? 0 : 1 );
140 daugs[0] = getDaug( 0 );
141 daugs[1] = getDaug( 1 );
142 p->initializePhaseSpace( 2, daugs );
143
144 EvtCPUtil::OtherB( p, t, other_b, 0.5 );
145
146 EvtComplex amp[3];
147
148 double dmt2 = getArg( 0 ) * t / ( 2 * EvtConst::c );
149 double phiCKM = ( 2.0 * getArg( 1 ) + getArg( 2 ) ); // 2b+g
150 EvtComplex ePlusIPhi( cos( phiCKM ), sin( phiCKM ) );
151 EvtComplex eMinusIPhi( cos( -phiCKM ), sin( -phiCKM ) );
152
153 // flip == 0 : D*-rho+
154 // flip == 1 : D*+rho-
155
156 if ( !flip )
157 {
158 if ( other_b == B0B )
159 {
160 // At t=0 we have a B0
161 for ( int i = 0; i < 3; ++i )
162 {
163 amp[i] =
164 _A_f[i] * cos( dmt2 ) + eMinusIPhi * EvtComplex( 0.0, sin( dmt2 ) ) * _A_f[i + 3];
165 }
166 }
167 if ( other_b == B0 )
168 {
169 // At t=0 we have a B0bar
170 for ( int i = 0; i < 3; ++i )
171 {
172 amp[i] =
173 _A_f[i] * ePlusIPhi * EvtComplex( 0.0, sin( dmt2 ) ) + _A_f[i + 3] * cos( dmt2 );
174 }
175 }
176 }
177 else
178 {
179 if ( other_b == B0B )
180 {
181 // At t=0 we have a B0
182
183 // M.Baak 01/16/2004
184 // Note: \bar{H}+- = H-+
185 // If one wants to use the correct helicities for B0 and B0bar decays but the same
186 // formula-notation (as done in EvtSVV_HelAmp), count the B0bar helicities backwards.
187 // (Equivalently, one could flip the chi angle.)
188
189 for ( int i = 0; i < 3; ++i )
190 {
191 amp[i] = _A_f[8 - i] * cos( dmt2 ) +
192 eMinusIPhi * EvtComplex( 0.0, sin( dmt2 ) ) * _A_f[11 - i];
193 }
194 }
195 if ( other_b == B0 )
196 {
197 // At t=0 we have a B0bar
198 for ( int i = 0; i < 3; ++i )
199 {
200 amp[i] = _A_f[8 - i] * ePlusIPhi * EvtComplex( 0.0, sin( dmt2 ) ) +
201 _A_f[11 - i] * cos( dmt2 );
202 }
203 }
204 }
205
206 EvtSVVHelAmp::SVVHel( p, _amp2, daugs[0], daugs[1], amp[0], amp[1], amp[2] );
207
208 return;
209}
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition EvtCPUtil.cc:225
static const double c
Definition EvtConst.hh:31
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
double getArg(int j)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
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
EvtId getId() const
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
static void SVVHel(EvtParticle *parent, EvtAmp &amp, EvtId n_v1, EvtId n_v2, const EvtComplex &hp, const EvtComplex &h0, const EvtComplex &hm)
void decay(EvtParticle *p)
virtual ~EvtSVVNONCPEIGEN()
EvtDecayBase * clone()
void getName(std::string &name)
int t()
Definition t.c:1