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