BOSS 7.0.9
BESIII Offline Software System
Loading...
Searching...
No Matches
BesEvtGen-00-04-08/src/EvtGen/EvtGenBase/EvtMassAmp.cc
Go to the documentation of this file.
1//-----------------------------------------------------------------------
2// File and Version Information:
3// $Id: EvtMassAmp.cc,v 1.2 2011/01/06 22:57:56 pingrg Exp $
4//
5// Environment:
6// This software is part of the EvtGen package developed jointly
7// for the BaBar and CLEO collaborations. If you use all or part
8// of it, please give an appropriate acknowledgement.
9//
10// Copyright Information:
11// Copyright (C) 1998 Caltech, UCSB
12//
13// Module creator:
14// Alexei Dvoretskii, Caltech, 2001-2002.
15//-----------------------------------------------------------------------
16#include "EvtGenBase/EvtPatches.hh"
17
18#include "EvtGenBase/EvtMassAmp.hh"
19
22 ,_prop(prop), _vd(vd), _vb(0)
23 ,_useBirthFact(false), _useDeathFact(false)
24 ,_useBirthFactFF(false), _useDeathFactFF(false)
25 ,_fixUpMassForMax(false),_addfactor(0.)
26{}
27
30 ,_prop(other._prop), _vd(other._vd)
31 ,_vb(other._vb ? new EvtTwoBodyVertex(*other._vb) : 0)
32 ,_useBirthFact(other._useBirthFact)
33 ,_useDeathFact(other._useDeathFact)
34 ,_useBirthFactFF(other._useBirthFactFF)
35 ,_useDeathFactFF(other._useDeathFactFF)
36 ,_fixUpMassForMax(other._fixUpMassForMax)
37 ,_addfactor(other._addfactor)
38{}
39
40
42{
43 if(_vb) delete _vb;
44}
45
46
48{
49 // Modified vertex
50
51 double m = p.value();
52 // keep things from crashing..
53
54 if ( m< (_vd.mA()+_vd.mB()) ) return EvtComplex(0.,0.);
55
56 EvtTwoBodyKine vd(_vd.mA(),_vd.mB(),m);
57
58 // Compute mass-dependent width for relativistic propagator
59
60 EvtPropBreitWignerRel bw(_prop.m0(),_prop.g0()*_vd.widthFactor(vd));
61 EvtComplex amp = bw.evaluate(m);
62
63
64 // Birth vertex factors
65
66 if(_useBirthFact) {
67
68 assert(_vb);
69 if ( (m+_vb->mB()) < _vb->mAB() ) {
70 EvtTwoBodyKine vb(m,_vb->mB(),_vb->mAB());
71 double phsp= _vb->phaseSpaceFactor(vb,EvtTwoBodyKine::AB);
72 amp *= phsp;
73
74 if ( _fixUpMassForMax ) {
75 amp *= sqrt((vb.p() / _vb->pD()));
76 }
77 if(_useBirthFactFF) {
78
79 assert(_vb);
80 amp *= _vb->formFactor(vb);
81 }
82 }
83 else{
84 if ( _vb->L() != 0 ) amp=0.;
85 }
86 }
87
88
89 // Decay vertex factors
90
91 if(_useDeathFact) {
93 if ( _fixUpMassForMax ) {
94 amp *= sqrt((vd.p() / _vd.pD()));
95 }
96 }
97 if(_useDeathFactFF) amp *= _vd.formFactor(vd);
98
99 // AddFactorPn
100
101 if(fabs(_addfactor) > 0.00000001){ //addFactorPn, pingrg-2011-1-6
102 assert(_vb);
103 double phsp;
104 if ( (m+_vb->mB()) < _vb->mAB() ) {
105 EvtTwoBodyKine vb(m,_vb->mB(),_vb->mAB());
106 phsp= vb.p(EvtTwoBodyKine::AB);
107 } else{
108 if ( _vb->L() != 0 ) phsp=0.;
109 }
110
111 amp *= pow(phsp,_addfactor);
112 // std::cout<<"EvtMassAmp::addFactorPn= "<<pow(phsp,_addfactor)<<std::endl;
113 }
114
115 return amp;
116}
117
118
119
120
121
122
EvtMassAmp(const EvtPropBreitWignerRel &prop, const EvtTwoBodyVertex &vd)
virtual EvtComplex amplitude(const EvtPoint1D &p) const
double phaseSpaceFactor(EvtTwoBodyKine x, EvtTwoBodyKine::Index) const