Line data Source code
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: EvtGen/EvtGenericDalitz.hh
12 : //
13 : // Description: Model to describe a generic dalitz decay
14 : //
15 : // Modification history:
16 : //
17 : // DCC 16 December, 2011 Module created
18 : //
19 : //------------------------------------------------------------------------
20 :
21 : #include "EvtGenModels/EvtGenericDalitz.hh"
22 : #include "EvtGenModels/EvtDalitzTable.hh"
23 : #include "EvtGenBase/EvtParticle.hh"
24 : #include "EvtGenBase/EvtDalitzPoint.hh"
25 : #include "EvtGenBase/EvtPDL.hh"
26 :
27 : std::string EvtGenericDalitz::getName() {
28 0 : return "GENERIC_DALITZ";
29 : }
30 :
31 : EvtDecayBase* EvtGenericDalitz::clone() {
32 0 : return new EvtGenericDalitz();
33 0 : }
34 :
35 : void EvtGenericDalitz::init() {
36 :
37 0 : checkNArg(1);
38 :
39 0 : EvtId parnum=getParentId();
40 0 : EvtId d1=getDaug(0);
41 0 : EvtId d2=getDaug(1);
42 0 : EvtId d3=getDaug(2);
43 :
44 0 : std::vector<EvtDalitzDecayInfo> decays = EvtDalitzTable::getInstance(getArgStr(0))->getDalitzTable(parnum);
45 :
46 0 : std::vector<EvtDalitzDecayInfo>::iterator i = decays.begin();
47 0 : for( ; i != decays.end(); i++) {
48 0 : EvtId daughter1 = (*i).daughter1();
49 0 : EvtId daughter2 = (*i).daughter2();
50 0 : EvtId daughter3 = (*i).daughter3();
51 :
52 0 : if(d1 == daughter1 && d2 == daughter2 && d3 == daughter3) {
53 0 : _d1 = 0;
54 0 : _d2 = 1;
55 0 : _d3 = 2;
56 0 : } else if(d1 == daughter1 && d2 == daughter3 && d3 == daughter2) {
57 0 : _d1 = 0;
58 0 : _d2 = 2;
59 0 : _d3 = 1;
60 0 : } else if(d1 == daughter2 && d2 == daughter1 && d3 == daughter3) {
61 0 : _d1 = 1;
62 0 : _d2 = 0;
63 0 : _d3 = 2;
64 0 : } else if(d1 == daughter2 && d2 == daughter3 && d3 == daughter1) {
65 0 : _d1 = 1;
66 0 : _d2 = 2;
67 0 : _d3 = 0;
68 0 : } else if(d1 == daughter3 && d2 == daughter1 && d3 == daughter2) {
69 0 : _d1 = 2;
70 0 : _d2 = 0;
71 0 : _d3 = 1;
72 0 : } else if(d1 == daughter3 && d2 == daughter2 && d3 == daughter1) {
73 0 : _d1 = 2;
74 0 : _d2 = 1;
75 0 : _d3 = 0;
76 : } else {
77 0 : continue;
78 : }
79 :
80 0 : _resonances = (*i).getResonances();
81 0 : setProbMax((*i).getProbMax());
82 0 : return;
83 0 : }
84 0 : }
85 :
86 : void EvtGenericDalitz::decay(EvtParticle *p) {
87 :
88 0 : p->initializePhaseSpace(getNDaug(),getDaugs());
89 :
90 0 : EvtVector4R p4_d1 = p->getDaug(_d1)->getP4();
91 0 : EvtVector4R p4_d2 = p->getDaug(_d2)->getP4();
92 0 : EvtVector4R p4_d3 = p->getDaug(_d3)->getP4();
93 :
94 0 : double mA = p->getDaug(_d1)->mass();
95 0 : double mB = p->getDaug(_d2)->mass();
96 0 : double mC = p->getDaug(_d3)->mass();
97 :
98 0 : double m2AB = ( p4_d1 + p4_d2 ).mass2();
99 0 : double m2CA = ( p4_d1 + p4_d3 ).mass2();
100 0 : double m2BC = ( p4_d2 + p4_d3 ).mass2();
101 :
102 0 : EvtDalitzPoint point( mA, mB, mC, m2AB, m2BC, m2CA );
103 :
104 0 : EvtComplex amp(0,0);
105 0 : std::vector<std::pair<EvtComplex,EvtDalitzReso> >::iterator i = _resonances.begin();
106 0 : for( ; i!= _resonances.end(); i++) {
107 0 : std::pair<EvtComplex,EvtDalitzReso> res = (*i);
108 0 : amp += res.first * res.second.evaluate( point );
109 0 : }
110 :
111 0 : vertex(amp);
112 : return;
113 0 : }
114 :
115 : std::string EvtGenericDalitz::getParamName(int i) {
116 0 : switch(i) {
117 : case 0:
118 0 : return "xmlFile";
119 : default:
120 0 : return "";
121 : }
122 0 : }
|