Line data Source code
1 : //-----------------------------------------------------------------------
2 : // File and Version Information:
3 : // $Id: EvtMassAmp.cpp,v 1.3 2009-03-16 15:47:10 robbep 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 :
20 : EvtMassAmp::EvtMassAmp(const EvtPropBreitWignerRel& prop, const EvtTwoBodyVertex& vd)
21 0 : : EvtAmplitude<EvtPoint1D>()
22 0 : ,_prop(prop), _vd(vd), _vb(0)
23 0 : ,_useBirthFact(false), _useDeathFact(false)
24 0 : ,_useBirthFactFF(false), _useDeathFactFF(false)
25 0 : {}
26 :
27 : EvtMassAmp::EvtMassAmp(const EvtMassAmp& other)
28 0 : : EvtAmplitude<EvtPoint1D>(other)
29 0 : ,_prop(other._prop), _vd(other._vd)
30 0 : ,_vb(other._vb ? new EvtTwoBodyVertex(*other._vb) : 0)
31 0 : ,_useBirthFact(other._useBirthFact)
32 0 : ,_useDeathFact(other._useDeathFact)
33 0 : ,_useBirthFactFF(other._useBirthFactFF)
34 0 : ,_useDeathFactFF(other._useDeathFactFF)
35 0 : {}
36 :
37 :
38 : EvtMassAmp::~EvtMassAmp()
39 0 : {
40 0 : if(_vb) delete _vb;
41 0 : }
42 :
43 :
44 : EvtComplex EvtMassAmp::amplitude(const EvtPoint1D& p) const
45 : {
46 : // Modified vertex
47 :
48 0 : double m = p.value();
49 : // keep things from crashing..
50 :
51 0 : if ( m< (_vd.mA()+_vd.mB()) ) return EvtComplex(0.,0.);
52 :
53 0 : EvtTwoBodyKine vd(_vd.mA(),_vd.mB(),m);
54 :
55 : // Compute mass-dependent width for relativistic propagator
56 :
57 0 : EvtPropBreitWignerRel bw(_prop.m0(),_prop.g0()*_vd.widthFactor(vd));
58 0 : EvtComplex amp = bw.evaluate(m);
59 :
60 :
61 : // Birth vertex factors
62 :
63 0 : if(_useBirthFact) {
64 :
65 0 : assert(_vb);
66 0 : if ( (m+_vb->mB()) < _vb->mAB() ) {
67 0 : EvtTwoBodyKine vb(m,_vb->mB(),_vb->mAB());
68 0 : amp *= _vb->phaseSpaceFactor(vb,EvtTwoBodyKine::AB);
69 0 : amp *= sqrt((vb.p() / _vb->pD()));
70 :
71 0 : if(_useBirthFactFF) {
72 :
73 0 : assert(_vb);
74 0 : amp *= _vb->formFactor(vb);
75 0 : }
76 0 : }
77 : else{
78 0 : if ( _vb->L() != 0 ) amp=0.;
79 : }
80 : }
81 :
82 :
83 : // Decay vertex factors
84 :
85 0 : if(_useDeathFact) {
86 0 : amp *= _vd.phaseSpaceFactor(vd,EvtTwoBodyKine::AB);
87 0 : amp *= sqrt((vd.p() / _vd.pD()));
88 0 : }
89 0 : if(_useDeathFactFF) amp *= _vd.formFactor(vd);
90 :
91 0 : return amp;
92 0 : }
93 :
94 :
95 :
96 :
97 :
98 :
|