BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtHypWK.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of models developed at BES collaboration
5// based on the EvtGen framework. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/BesCopyright
9// Copyright (A) 2006 Ping Rong-Gang, Pang Cai-Ying@IHEP
10//
11// Module: EvtHypWK.hh
12//
13// Description: To generate octet hyperon weak decays.
14//
15// Modification history:
16//
17// Pang C.-Y., Ping R.-G. Mar, 2007 Module created
18// Ping R.G. Apr. 2007 change to helicity amplitude method
19//------------------------------------------------------------------------
20//
21#include "EvtHypWK.hh"
32#include <iostream>
33#include <stdlib.h>
34#include <string>
35
36using std::cout;
37using std::endl;
38
40
41void EvtHypWK::getName( std::string& model_name ) { model_name = "HypWK"; }
42
44
46
47 // check that there are 0 arguments
48 // checkNArg(0);
49 checkNDaug( 2 );
50
51 // checkSpinParent(EvtSpinType::VECTOR);
53
56 // checkSpinDaughter(1,EvtSpinType::DIRAC);
57}
58
60
61 static EvtId PIP = EvtPDL::getId( "pi+" );
62 static EvtId PIM = EvtPDL::getId( "pi-" );
63 static EvtId PI0 = EvtPDL::getId( "pi0" );
64 static EvtId PP = EvtPDL::getId( "p+" );
65 static EvtId PM = EvtPDL::getId( "anti-p-" );
66 static EvtId NP = EvtPDL::getId( "n0" );
67 static EvtId NM = EvtPDL::getId( "anti-n0" );
68
69 static EvtId LP = EvtPDL::getId( "Lambda0" );
70 static EvtId LM = EvtPDL::getId( "anti-Lambda0" );
71 static EvtId SPP = EvtPDL::getId( "Sigma+" );
72 static EvtId SPM = EvtPDL::getId( "anti-Sigma-" );
73 static EvtId SMP = EvtPDL::getId( "Sigma-" );
74 static EvtId SMM = EvtPDL::getId( "anti-Sigma+" );
75
76 static EvtId XP = EvtPDL::getId( "Xi-" );
77 static EvtId XM = EvtPDL::getId( "anti-Xi+" );
78 static EvtId X0P = EvtPDL::getId( "Xi0" );
79 static EvtId X0M = EvtPDL::getId( "anti-Xi0" );
80
81 static int count = 0;
82
83 // if(count==0) findMaxPro(p); //using the default getProbMax() in
84 // EvtGenBase/EvtDecayProb.cc
85 count += 1;
86
88
89 EvtParticle *l1, *l2;
90 l1 = p->getDaug( 0 );
91 l2 = p->getDaug( 1 );
92 EvtVector4R DRP4 = l1->getP4(); // Dirac Daughter
93 EvtVector4R MEP4 = l2->getP4(); // Meson Daughter
94 EvtVector4R PRP4 = p->getP4(); // Parent Momentum
95 EvtHelSys angles( PRP4, DRP4 ); // using helicity sys.angles
96 double tht = angles.getHelAng( 1 );
97 double ph = angles.getHelAng( 2 );
98 double gmm = 0;
99
100 EvtVector4R pDaug = l1->getP4();
101 double p3 = pDaug.d3mag();
102
103 double M = p->mass();
104 double M2 = M * M;
105 double m = l1->mass();
106 double m2 = m * m;
107 double theta, phi, alpha, beta, ga; // the following is the
108
109 EvtId p1, d1, d2;
110 p1 = p->getId();
111 d1 = l1->getId();
112 d2 = l2->getId();
113
114 if ( p1 == XP )
115 {
116 alpha = -0.46;
117 phi = -2.1;
118 }
119 else if ( p1 == XM )
120 {
121 alpha = 0.46;
122 phi = -2.1;
123 }
124 else if ( p1 == X0P )
125 {
126 alpha = -0.41;
127 phi = 21.0;
128 }
129 else if ( p1 == X0M )
130 {
131 alpha = 0.41;
132 phi = 21.0;
133 }
134 else if ( p1 == LP )
135 {
136 alpha = 0.64;
137 phi = -6.5;
138 }
139 else if ( p1 == LM )
140 {
141 alpha = -0.64;
142 phi = -6.5;
143 }
144 else if ( p1 == SMP )
145 {
146 alpha = -0.07;
147 phi = 10.0;
148 }
149 else if ( p1 == SMM )
150 {
151 alpha = 0.07;
152 phi = 10.0;
153 }
154 else if ( p1 == SPP )
155 {
156 if ( d1 == PP )
157 {
158 alpha = -0.98;
159 phi = 36.0;
160 }
161 else if ( d1 == NP )
162 {
163 alpha = 0.07;
164 phi = 167.0;
165 }
166 else { cout << "The decay is not discussed." << endl; }
167 }
168 else if ( p1 == SPM )
169 {
170 if ( d1 == PM )
171 {
172 alpha = 0.98;
173 phi = 36.0;
174 }
175 else if ( d1 == NM )
176 {
177 alpha = -0.07;
178 phi = 167.0;
179 }
180 else { cout << "The decay is not discussed." << endl; }
181 }
182 else { cout << "The decay is not discussed."; }
183 if ( getNArg() > 0 ) { alpha = getArg( 0 ); }
184
185 double FP = sqrt( ( 1 + alpha ) / 2. );
186 double FM = sqrt( ( 1 - alpha ) / 2. );
187
188 vertex( 0, 0, Djmn( 0.5, 0.5, 0.5, ph, tht, gmm ) * FP );
189 vertex( 0, 1, Djmn( 0.5, 0.5, -0.5, ph, tht, gmm ) * FM );
190 vertex( 1, 0, Djmn( 0.5, -0.5, 0.5, ph, tht, gmm ) * FP );
191 vertex( 1, 1, Djmn( 0.5, -0.5, -0.5, ph, tht, gmm ) * FM );
192
193 return;
194}
double p1[4]
EvtComplex Djmn(int j, int m, int n, double phi, double theta, double gamma)
Definition EvtHelSys.cc:165
DOUBLE_PRECISION count[3]
double alpha
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
double getHelAng(int i)
Definition EvtHelSys.cc:52
void init()
Definition EvtHypWK.cc:45
void getName(std::string &name)
Definition EvtHypWK.cc:41
EvtDecayBase * clone()
Definition EvtHypWK.cc:43
void decay(EvtParticle *p)
Definition EvtHypWK.cc:59
virtual ~EvtHypWK()
Definition EvtHypWK.cc:39
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
EvtId getId() const
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double mass() const
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double d3mag() const
double double * m2
Definition qcdloop1.h:83