BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtVVSPwave.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: EvtVVSPwave.cc
12//
13// Description: Routine to decay vector-> vector scalar in Partial-wave
14// Routine to decay a vector into a vector and scalar. Started
15// by ryd on Aug 20, 1996.
16//
17// Modification history:
18//
19// Ping R.G. November 24, 2008 P-wave implement
20// RYD November 24, 1996 Module created
21//
22//------------------------------------------------------------------------
23//
24#include "EvtVVSPwave.hh"
32#include <stdlib.h>
33#include <string>
34using std::endl;
35
37
38void EvtVVSPwave::getName( std::string& model_name ) { model_name = "VVS_PWAVE"; }
39
41
43
44 // check that there are 6 arguments
45 checkNArg( 6 );
46 checkNDaug( 2 );
47
51}
52
54
55 // probmax is 1.0 for all possible decays I think!
56
57 setProbMax( 1.0 );
58}
59
61
63
64 EvtComplex as( getArg( 0 ) * cos( getArg( 1 ) ), getArg( 0 ) * sin( getArg( 1 ) ) );
65 EvtComplex ap( getArg( 2 ) * cos( getArg( 3 ) ), getArg( 2 ) * sin( getArg( 3 ) ) );
66 EvtComplex ad( getArg( 4 ) * cos( getArg( 5 ) ), getArg( 4 ) * sin( getArg( 5 ) ) );
67
68 EvtParticle *v, *s;
69 v = p->getDaug( 0 );
70 s = p->getDaug( 1 );
71
72 if ( ap != EvtComplex( 0.0, 0.0 ) )
73 { // implement P-wave pingrg,2008-11-24
74 EvtVector4C epi[3], epf[3];
75
76 epi[0] = p->eps( 0 ); // for parent polarization
77 epi[1] = p->eps( 1 );
78 epi[2] = p->eps( 2 );
79
80 epf[0] = v->eps( 0 ); // for sun vector polarization
81 epf[1] = v->eps( 1 );
82 epf[2] = v->eps( 2 );
83
84 EvtVector4R momv = p->getDaug( 0 )->getP4();
85 EvtVector3C p1( momv.get( 1 ), momv.get( 2 ), momv.get( 3 ) );
86
87 EvtVector3C ei0( epi[0].get( 1 ), epi[0].get( 2 ), epi[0].get( 3 ) );
88 EvtVector3C ei1( epi[1].get( 1 ), epi[1].get( 2 ), epi[1].get( 3 ) );
89 EvtVector3C ei2( epi[2].get( 1 ), epi[2].get( 2 ), epi[2].get( 3 ) );
90
91 EvtVector3C ef0( epf[0].get( 1 ), epf[0].get( 2 ), epf[0].get( 3 ) );
92 EvtVector3C ef1( epf[1].get( 1 ), epf[1].get( 2 ), epf[1].get( 3 ) );
93 EvtVector3C ef2( epf[2].get( 1 ), epf[2].get( 2 ), epf[2].get( 3 ) );
94
95 double norm = 1 / momv.d3mag();
96 EvtVector3C q0 = p1.cross( ef0 );
97 EvtVector3C q1 = p1.cross( ef1 );
98 EvtVector3C q2 = p1.cross( ef2 );
99
100 vertex( 0, 0, norm * ei0.conj() * q0 );
101 vertex( 0, 1, norm * ei0.conj() * q1 );
102 vertex( 0, 2, norm * ei0.conj() * q2 );
103
104 vertex( 1, 0, norm * ei1.conj() * q0 );
105 vertex( 1, 1, norm * ei1.conj() * q1 );
106 vertex( 1, 2, norm * ei1.conj() * q2 );
107
108 vertex( 2, 0, norm * ei2.conj() * q0 );
109 vertex( 2, 1, norm * ei2.conj() * q1 );
110 vertex( 2, 2, norm * ei2.conj() * q2 );
111 }
112 else if ( as != EvtComplex( 0.0, 0.0 ) || ad != EvtComplex( 0.0, 0.0 ) )
113 { // implemet s- and d-wave
114
115 // EvtParticle *v,*s;
116 // v=p->getDaug(0);
117 // s=p->getDaug(1);
118
119 EvtTensor4C d, g;
120
121 g.setdiag( 1.0, -1.0, -1.0, -1.0 );
122
123 d = ad * ( ( 1.0 / ( v->getP4().d3mag() * v->getP4().d3mag() ) ) *
124 directProd( v->getP4(), v->getP4() ) +
125 ( 1 / 3.0 ) * g ) +
126 as * g;
127
128 EvtVector4C ep0, ep1, ep2;
129
130 ep0 = d.cont1( p->eps( 0 ) );
131 ep1 = d.cont1( p->eps( 1 ) );
132 ep2 = d.cont1( p->eps( 2 ) );
133
134 vertex( 0, 0, ep0.cont( v->eps( 0 ).conj() ) );
135 vertex( 0, 1, ep0.cont( v->eps( 1 ).conj() ) );
136 vertex( 0, 2, ep0.cont( v->eps( 2 ).conj() ) );
137
138 vertex( 1, 0, ep1.cont( v->eps( 0 ).conj() ) );
139 vertex( 1, 1, ep1.cont( v->eps( 1 ).conj() ) );
140 vertex( 1, 2, ep1.cont( v->eps( 2 ).conj() ) );
141
142 vertex( 2, 0, ep2.cont( v->eps( 0 ).conj() ) );
143 vertex( 2, 1, ep2.cont( v->eps( 1 ).conj() ) );
144 vertex( 2, 2, ep2.cont( v->eps( 2 ).conj() ) );
145 }
146 else
147 {
148 report( ERROR, "EvtGen" ) << "In EvtVectorToVectorScalar.cc" << endl;
149 report( ERROR, "EvtGen" ) << "Not all zero value for parameters are need!!" << endl;
150 ::abort();
151 }
152 return;
153}
double p1[4]
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ ERROR
Definition EvtReport.hh:49
XmlRpcServer s
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35
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)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
virtual EvtVector4C eps(int i) const
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void setdiag(double t00, double t11, double t22, double t33)
EvtVector4C cont1(const EvtVector4C &v4) const
EvtDecayBase * clone()
void decay(EvtParticle *p)
void initProbMax()
virtual ~EvtVVSPwave()
void getName(std::string &name)
EvtVector3C conj() const
EvtComplex cont(const EvtVector4C &v4) const
double get(int i) const
double d3mag() const