1 //--------------------------------------------------------------------------
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.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 1998 Caltech, UCSB
11 // Module: EvtGen/EvtGenericDalitz.hh
13 // Description: Model to describe a generic dalitz decay
15 // Modification history:
17 // DCC 16 December, 2011 Module created
19 //------------------------------------------------------------------------
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"
27 std::string EvtGenericDalitz::getName() {
28 return "GENERIC_DALITZ";
31 EvtDecayBase* EvtGenericDalitz::clone() {
32 return new EvtGenericDalitz();
35 void EvtGenericDalitz::init() {
39 EvtId parnum=getParentId();
44 std::vector<EvtDalitzDecayInfo> decays = EvtDalitzTable::getInstance(getArgStr(0))->getDalitzTable(parnum);
46 std::vector<EvtDalitzDecayInfo>::iterator i = decays.begin();
47 for( ; i != decays.end(); i++) {
48 EvtId daughter1 = (*i).daughter1();
49 EvtId daughter2 = (*i).daughter2();
50 EvtId daughter3 = (*i).daughter3();
52 if(d1 == daughter1 && d2 == daughter2 && d3 == daughter3) {
56 } else if(d1 == daughter1 && d2 == daughter3 && d3 == daughter2) {
60 } else if(d1 == daughter2 && d2 == daughter1 && d3 == daughter3) {
64 } else if(d1 == daughter2 && d2 == daughter3 && d3 == daughter1) {
68 } else if(d1 == daughter3 && d2 == daughter1 && d3 == daughter2) {
72 } else if(d1 == daughter3 && d2 == daughter2 && d3 == daughter1) {
80 _resonances = (*i).getResonances();
81 setProbMax((*i).getProbMax());
86 void EvtGenericDalitz::decay(EvtParticle *p) {
88 p->initializePhaseSpace(getNDaug(),getDaugs());
90 EvtVector4R p4_d1 = p->getDaug(_d1)->getP4();
91 EvtVector4R p4_d2 = p->getDaug(_d2)->getP4();
92 EvtVector4R p4_d3 = p->getDaug(_d3)->getP4();
94 double mA = p->getDaug(_d1)->mass();
95 double mB = p->getDaug(_d2)->mass();
96 double mC = p->getDaug(_d3)->mass();
98 double m2AB = ( p4_d1 + p4_d2 ).mass2();
99 double m2CA = ( p4_d1 + p4_d3 ).mass2();
100 double m2BC = ( p4_d2 + p4_d3 ).mass2();
102 EvtDalitzPoint point( mA, mB, mC, m2AB, m2BC, m2CA );
105 std::vector<std::pair<EvtComplex,EvtDalitzReso> >::iterator i = _resonances.begin();
106 for( ; i!= _resonances.end(); i++) {
107 std::pair<EvtComplex,EvtDalitzReso> res = (*i);
108 amp += res.first * res.second.evaluate( point );
115 std::string EvtGenericDalitz::getParamName(int i) {