BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPartWave Class Reference

#include <EvtPartWave.hh>

Inheritance diagram for EvtPartWave:

Public Member Functions

 EvtPartWave ()
virtual ~EvtPartWave ()
void getName (std::string &name)
EvtDecayBaseclone ()
void init ()
void initProbMax ()
void decay (EvtParticle *p)
Public Member Functions inherited from EvtDecayAmp
void makeDecay (EvtParticle *p)
void setWeight (double weight)
void vertex (const EvtComplex &amp)
void vertex (int i1, const EvtComplex &amp)
void vertex (int i1, int i2, const EvtComplex &amp)
void vertex (int i1, int i2, int i3, const EvtComplex &amp)
void vertex (int *i1, const EvtComplex &amp)
virtual ~EvtDecayAmp ()
Public Member Functions inherited from EvtDecayBase
virtual std::string commandName ()
virtual void command (std::string cmd)
double getProbMax (double prob)
double resetProbMax (double prob)
 EvtDecayBase ()
virtual ~EvtDecayBase ()
virtual bool matchingDecay (const EvtDecayBase &other) const
EvtId getParentId ()
double getBranchingFraction ()
void disableCheckQ ()
void checkQ ()
int getNDaug ()
EvtIdgetDaugs ()
EvtId getDaug (int i)
int getNArg ()
int getPHOTOS ()
void setPHOTOS ()
void setVerbose ()
void setSummary ()
double * getArgs ()
std::string * getArgsStr ()
double getArg (int j)
std::string getArgStr (int j)
std::string getModelName ()
int getDSum ()
int summary ()
int verbose ()
void saveDecayInfo (EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
void printSummary ()
void setProbMax (double prbmx)
void noProbMax ()
void checkNArg (int a1, int a2=-1, int a3=-1, int a4=-1)
void checkNDaug (int d1, int d2=-1)
void checkSpinParent (EvtSpinType::spintype sp)
void checkSpinDaughter (int d1, EvtSpinType::spintype sp)
virtual int nRealDaughters ()

Additional Inherited Members

Static Public Member Functions inherited from EvtDecayBase
static void findMasses (EvtParticle *p, int ndaugs, EvtId daugs[10], double masses[10])
static void findMass (EvtParticle *p)
static double findMaxMass (EvtParticle *p)
Protected Member Functions inherited from EvtDecayBase
bool daugsDecayedByParentModel ()
Protected Attributes inherited from EvtDecayAmp
EvtAmp _amp2
Protected Attributes inherited from EvtDecayBase
bool _daugsDecayedByParentModel

Detailed Description

Definition at line 31 of file EvtPartWave.hh.

Constructor & Destructor Documentation

◆ EvtPartWave()

EvtPartWave::EvtPartWave ( )
inline

Definition at line 34 of file EvtPartWave.hh.

34{}

Referenced by clone().

◆ ~EvtPartWave()

EvtPartWave::~EvtPartWave ( )
virtual

Definition at line 41 of file EvtPartWave.cc.

41{}

Member Function Documentation

◆ clone()

EvtDecayBase * EvtPartWave::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 45 of file EvtPartWave.cc.

45{ return new EvtPartWave; }

◆ decay()

void EvtPartWave::decay ( EvtParticle * p)
virtual

Implements EvtDecayBase.

Definition at line 205 of file EvtPartWave.cc.

205 {
206
207 // first generate simple phase space
209
210 _evalHelAmp->evalAmp( p, _amp2 );
211
212 return;
213}
EvtId * getDaugs()
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)

◆ getName()

void EvtPartWave::getName ( std::string & name)
virtual

Implements EvtDecayBase.

Definition at line 43 of file EvtPartWave.cc.

43{ model_name = "PARTWAVE"; }

◆ init()

void EvtPartWave::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 47 of file EvtPartWave.cc.

47 {
48
49 checkNDaug( 2 );
50
51 // find out how many states each particle have
55
56 if ( verbose() )
57 { report( INFO, "EvtGen" ) << "_nA,_nB,_nC:" << _nA << "," << _nB << "," << _nC << endl; }
58
59 // find out what 2 times the spin is
63
64 if ( verbose() )
65 {
66 report( INFO, "EvtGen" ) << "_JA2,_JB2,_JC2:" << _JA2 << "," << _JB2 << "," << _JC2
67 << endl;
68 }
69
70 // allocate memory
71 int* _lambdaA2 = new int[_nA];
72 int* _lambdaB2 = new int[_nB];
73 int* _lambdaC2 = new int[_nC];
74
75 EvtComplexPtr* _HBC = new EvtComplexPtr[_nB];
76 int ib, ic;
77 for ( ib = 0; ib < _nB; ib++ ) { _HBC[ib] = new EvtComplex[_nC]; }
78
79 int i;
80 // find the allowed helicities (actually 2*times the helicity!)
81
82 fillHelicity( _lambdaA2, _nA, _JA2 );
83 fillHelicity( _lambdaB2, _nB, _JB2 );
84 fillHelicity( _lambdaC2, _nC, _JC2 );
85
86 if ( verbose() )
87 {
88 report( INFO, "EvtGen" ) << "Helicity states of particle A:" << endl;
89 for ( i = 0; i < _nA; i++ ) { report( INFO, "EvtGen" ) << _lambdaA2[i] << endl; }
90
91 report( INFO, "EvtGen" ) << "Helicity states of particle B:" << endl;
92 for ( i = 0; i < _nB; i++ ) { report( INFO, "EvtGen" ) << _lambdaB2[i] << endl; }
93
94 report( INFO, "EvtGen" ) << "Helicity states of particle C:" << endl;
95 for ( i = 0; i < _nC; i++ ) { report( INFO, "EvtGen" ) << _lambdaC2[i] << endl; }
96
97 report( INFO, "EvtGen" ) << "Will now figure out the valid (M_LS) states:" << endl;
98 }
99
100 int Lmin =
101 std::max( _JA2 - _JB2 - _JC2, std::max( _JB2 - _JA2 - _JC2, _JC2 - _JA2 - _JB2 ) );
102 if ( Lmin < 0 ) Lmin = 0;
103 // int Lmin=_JA2-_JB2-_JC2;
104 int Lmax = _JA2 + _JB2 + _JC2;
105
106 int L;
107
108 int _nPartialWaveAmp = 0;
109
110 int _nL[50];
111 int _nS[50];
112
113 for ( L = Lmin; L <= Lmax; L += 2 )
114 {
115 int Smin = abs( L - _JA2 );
116 if ( Smin < abs( _JB2 - _JC2 ) ) Smin = abs( _JB2 - _JC2 );
117 int Smax = L + _JA2;
118 if ( Smax > abs( _JB2 + _JC2 ) ) Smax = abs( _JB2 + _JC2 );
119 int S;
120 for ( S = Smin; S <= Smax; S += 2 )
121 {
122 _nL[_nPartialWaveAmp] = L;
123 _nS[_nPartialWaveAmp] = S;
124
125 _nPartialWaveAmp++;
126 if ( verbose() ) { report( INFO, "EvtGen" ) << "M[" << L << "][" << S << "]" << endl; }
127 }
128 }
129
130 checkNArg( _nPartialWaveAmp * 2 );
131
132 int argcounter = 0;
133
134 EvtComplex _M[50];
135
136 for ( i = 0; i < _nPartialWaveAmp; i++ )
137 {
138 _M[i] = getArg( argcounter ) * exp( EvtComplex( 0.0, getArg( argcounter + 1 ) ) );
139 ;
140 argcounter += 2;
141 if ( verbose() )
142 { report( INFO, "EvtGen" ) << "M[" << _nL[i] << "][" << _nS[i] << "]=" << _M[i] << endl; }
143 }
144
145 // Now calculate the helicity amplitudes
146
147 for ( ib = 0; ib < _nB; ib++ )
148 {
149 for ( ic = 0; ic < _nC; ic++ )
150 {
151 _HBC[ib][ic] = 0.0;
152 if ( abs( _lambdaB2[ib] - _lambdaC2[ic] ) <= _JA2 )
153 {
154 for ( i = 0; i < _nPartialWaveAmp; i++ )
155 {
156 int L = _nL[i];
157 int S = _nS[i];
158 int lambda2 = _lambdaB2[ib];
159 int lambda3 = _lambdaC2[ic];
160 int s1 = _JA2;
161 int s2 = _JB2;
162 int s3 = _JC2;
163 int m1 = lambda2 - lambda3;
164 EvtCGCoefSingle c1( s2, s3 );
165 EvtCGCoefSingle c2( L, S );
166
167 if ( verbose() )
168 { report( INFO, "EvtGen" ) << "s2,lambda2:" << s2 << " " << lambda2 << endl; }
169 // fkw changes to satisfy KCC
170 double fkwTmp = ( L + 1.0 ) / ( s1 + 1.0 );
171
172 if ( S >= abs( m1 ) )
173 {
174
175 EvtComplex tmp = sqrt( fkwTmp ) * c1.coef( S, m1, s2, s3, lambda2, -lambda3 ) *
176 c2.coef( s1, m1, L, S, 0, m1 ) * _M[i];
177 // fkw EvtComplex
178 // tmp=sqrt((L+1)/(s1+1))*c1.coef(S,m1,s2,s3,lambda2,-lambda3)*c2.coef(s1,m1,L,S,0,m1)*_M[i];
179 _HBC[ib][ic] += tmp;
180 }
181 }
182 if ( verbose() )
183 {
184 report( INFO, "EvtGen" )
185 << "_HBC[" << ib << "][" << ic << "]=" << _HBC[ib][ic] << endl;
186 }
187 }
188 }
189 }
190
191 _evalHelAmp = new EvtEvalHelAmp( EvtPDL::getSpinType( getParentId() ),
193 EvtPDL::getSpinType( getDaug( 1 ) ), _HBC );
194}
EvtComplex exp(const EvtComplex &c)
EvtComplex * EvtComplexPtr
Definition EvtComplex.hh:68
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ INFO
Definition EvtReport.hh:52
double getArg(int j)
EvtId getParentId()
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
EvtId getDaug(int i)
static EvtSpinType::spintype getSpinType(EvtId i)
Definition EvtPDL.hh:66
static int getSpin2(spintype stype)
static int getSpinStates(spintype stype)
double * m1
Definition qcdloop1.h:83

◆ initProbMax()

void EvtPartWave::initProbMax ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 196 of file EvtPartWave.cc.

196 {
197
198 double maxprob = _evalHelAmp->probMax();
199
200 if ( verbose() ) { report( INFO, "EvtGen" ) << "Calculated probmax" << maxprob << endl; }
201
202 setProbMax( maxprob );
203}
void setProbMax(double prbmx)

The documentation for this class was generated from the following files: