Line data Source code
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: EvtXPsiGamma.cc
12 : //
13 : // Description: Routine to implement radiative decay X3872(2-+) -> J/psi gamma
14 : // according to [F. Brazzi et al, arXiv:1103.3155
15 : //
16 : // Modification history:
17 : //
18 : // May, 7, 2012 Module created
19 : //
20 : //------------------------------------------------------------------------
21 : //
22 : #include "EvtGenBase/EvtPatches.hh"
23 : #include <stdlib.h>
24 : #include "EvtGenBase/EvtParticle.hh"
25 : #include "EvtGenBase/EvtTensorParticle.hh"
26 : #include "EvtGenBase/EvtGenKine.hh"
27 : #include "EvtGenBase/EvtPDL.hh"
28 : #include "EvtGenBase/EvtReport.hh"
29 : #include "EvtGenBase/EvtVector4C.hh"
30 : #include "EvtGenBase/EvtTensor4C.hh"
31 :
32 : #include "EvtGenModels/EvtXPsiGamma.hh"
33 :
34 : #include <string>
35 : #include <iostream>
36 :
37 : using namespace std;
38 :
39 0 : EvtXPsiGamma::~EvtXPsiGamma() {
40 : /* cout<<"(* AVL EvtXPsiGamma::destructor getProbMax(-1) = "<<getProbMax(-1)<<" *)"<<endl;
41 : cout<<"(* AVL EvtXPsiGamma::destructor "<<ncall<<" calls *)"<<endl;*/
42 0 : }
43 :
44 : std::string EvtXPsiGamma::getName(){
45 0 : return "X38722-+_PSI_GAMMA";
46 : }
47 :
48 :
49 : EvtDecayBase* EvtXPsiGamma::clone(){
50 : // cout<<" (* AVL: === EvtXPsiGamma::clone() ============ *)"<<endl;
51 0 : return new EvtXPsiGamma;
52 :
53 0 : }
54 :
55 : EvtComplex EvtXPsiGamma::fT2(EvtVector4R p, EvtVector4R q , EvtTensor4C epsPI, EvtVector4C epsEps, EvtVector4C epsEta) {
56 : // T2 term from [Bazi](10)
57 0 : EvtTensor4C epsPQ = EvtGenFunctions::directProd(q,p); // e_{mu nu a b} p^a q^b;
58 0 : epsPQ = dual(epsPQ);
59 :
60 0 : EvtVector4C tmp1 = epsPI.cont1(epsEps);
61 0 : EvtVector4C tmp2=epsPQ.cont1(tmp1);
62 0 : EvtComplex T2 = tmp2*epsEta; // epa^a pi_{a mu} e_{mu nu rho si} p_nu q_rho eta_si
63 :
64 0 : tmp1 = epsPI.cont1(epsEta);
65 0 : tmp2=epsPQ.cont1(tmp1);
66 0 : T2+=tmp2*epsEps; // T2 - eta^a pi_{a mu} e_{mu nu rho si} q_nu p_rhi eps_si
67 :
68 : return T2;
69 0 : }
70 :
71 : EvtComplex EvtXPsiGamma::fT3(EvtVector4R p, EvtVector4R q , EvtTensor4C epsPI, EvtVector4C epsEps, EvtVector4C epsEta) {
72 : // T3 term from [Bazi](11)
73 0 : EvtVector4R Q = p-q, P = p+q;
74 0 : EvtVector4C tmp1 = epsPI.cont1(Q); // Q_a pi_{a mu}
75 0 : EvtTensor4C tmp3 = dual(EvtGenFunctions::directProd(P,epsEps)); // e_{mu nu rho si} P^rho eps^si
76 0 : EvtVector4C tmp4 = tmp3.cont1(tmp1);
77 0 : EvtComplex T3 = tmp4*epsEta; // Q_a pi_{a mu} e_{mu nu rho si} P^rho eps_si eta_nu
78 : return T3;
79 0 : }
80 :
81 :
82 : void EvtXPsiGamma::decay( EvtParticle *root ){
83 0 : ncall++;
84 0 : root -> initializePhaseSpace(getNDaug(),getDaugs());
85 :
86 : double gOmega = 1.58, gPOmega = -0.74; // X -> omega psi couplings from table II
87 : double gRho = 1.58, gPRho = -0.74; // X -> omega psi couplings from table II
88 : double fRho=0.121, mRho2 = 0.770*0.770, fOmega=0.036, mOmega2 = 0.782*0.782;
89 :
90 0 : EvtComplex amp;
91 :
92 0 : if(_ID0 == EvtPDL::getId("gamma") ) {
93 0 : for(int iPsi = 0; iPsi < 4; iPsi++) {
94 0 : for(int iGamma = 0; iGamma < 1; iGamma++) {
95 0 : for(int iChi = 0; iChi<4; iChi++) {
96 :
97 0 : EvtComplex T2 = fT2(
98 0 : root->getDaug(1)->getP4(),
99 0 : root->getDaug(0)->getP4(),
100 0 : root->epsTensor(iChi),
101 0 : root->getDaug(1)->epsParent(iPsi).conj(),
102 0 : root->getDaug(0)->epsParentPhoton(iGamma).conj()
103 : );
104 0 : EvtComplex T3 = fT3(
105 0 : root->getDaug(1)->getP4(),
106 0 : root->getDaug(0)->getP4(),
107 0 : root->epsTensor(iChi),
108 0 : root->getDaug(1)->epsParent(iPsi).conj(),
109 0 : root->getDaug(0)->epsParentPhoton(iGamma).conj()
110 : );
111 0 : amp = (fOmega/mOmega2*gOmega+fRho/mRho2*gRho)*T2
112 0 : + (fOmega/mOmega2*gPOmega+fRho/mRho2*gPRho)*T3;
113 0 : vertex(iChi, iGamma, iPsi, amp);
114 0 : };};};
115 0 : }
116 0 : else if(_ID0 == EvtPDL::getId("omega") ) {
117 0 : for(int iPsi = 0; iPsi < 4; iPsi++) {
118 0 : for(int iGamma = 0; iGamma < 4; iGamma++) {
119 0 : for(int iChi = 0; iChi<4; iChi++) {
120 :
121 0 : EvtComplex T2 = fT2(
122 0 : root->getDaug(1)->getP4(),
123 0 : root->getDaug(0)->getP4(),
124 0 : root->epsTensor(iChi),
125 0 : root->getDaug(1)->epsParent(iPsi).conj(),
126 0 : root->getDaug(0)->epsParent(iGamma).conj()
127 : );
128 0 : EvtComplex T3 = fT3(
129 0 : root->getDaug(1)->getP4(),
130 0 : root->getDaug(0)->getP4(),
131 0 : root->epsTensor(iChi),
132 0 : root->getDaug(1)->epsParent(iPsi).conj(),
133 0 : root->getDaug(0)->epsParent(iGamma).conj()
134 : );
135 : // cout << "AVL:: omega"<<endl;
136 0 : amp = gOmega*T2 + gPOmega*T3;
137 0 : vertex(iChi, iGamma, iPsi, amp);
138 0 : };};};
139 0 : }
140 0 : else if(_ID0 == EvtPDL::getId("rho0") ) {
141 0 : for(int iPsi = 0; iPsi < 4; iPsi++) {
142 0 : for(int iGamma = 0; iGamma < 4; iGamma++) {
143 0 : for(int iChi = 0; iChi<4; iChi++) {
144 :
145 0 : EvtComplex T2 = fT2(
146 0 : root->getDaug(1)->getP4(),
147 0 : root->getDaug(0)->getP4(),
148 0 : root->epsTensor(iChi),
149 0 : root->getDaug(1)->epsParent(iPsi).conj(),
150 0 : root->getDaug(0)->epsParent(iGamma).conj()
151 : );
152 0 : EvtComplex T3 = fT3(
153 0 : root->getDaug(1)->getP4(),
154 0 : root->getDaug(0)->getP4(),
155 0 : root->epsTensor(iChi),
156 0 : root->getDaug(1)->epsParent(iPsi).conj(),
157 0 : root->getDaug(0)->epsParent(iGamma).conj()
158 : );
159 : // cout << "AVL:: rho"<<endl;
160 0 : amp = gRho*T2 + gPRho*T3;
161 0 : vertex(iChi, iGamma, iPsi, amp);
162 0 : };};};
163 0 : }
164 : else {
165 0 : cout<<"AVL:: Not realized yet"<<endl;
166 : };
167 :
168 0 : }
169 :
170 :
171 : void EvtXPsiGamma::init(){
172 : // cout<<" (* AVL: ==== EvtXPsiGamma::init() ============ *)"<<endl;
173 :
174 0 : ncall = 0;
175 :
176 0 : checkNArg(0);
177 0 : checkNDaug(2);
178 :
179 :
180 0 : checkSpinParent(EvtSpinType::TENSOR);
181 :
182 : // checkSpinDaughter(0,EvtSpinType::PHOTON);
183 0 : checkSpinDaughter(1,EvtSpinType::VECTOR);
184 :
185 0 : _ID0 = getDaug(0);
186 : /* if(_ID0 == EvtPDL::getId("gamma") ) {
187 : cout << "AVL:: gamma"<<endl;
188 : }
189 : else if(_ID0 == EvtPDL::getId("omega") ) {
190 : cout << "AVL:: omega"<<endl;
191 : }
192 : else if(_ID0 == EvtPDL::getId("rho0") ) {
193 : cout << "AVL:: rho"<<endl;
194 : };
195 : */
196 :
197 0 : }
198 :
199 : void EvtXPsiGamma::initProbMax() {
200 0 : if(_ID0 == EvtPDL::getId("gamma") ) setProbMax(2.400);
201 0 : else if(_ID0 == EvtPDL::getId("omega") ) setProbMax(16.);
202 0 : else if(_ID0 == EvtPDL::getId("rho0") ) setProbMax(70.);
203 0 : };
204 :
205 :
|