Fix for definitions for CINT
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtOmegaDalitz.cpp
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: EvtOmegaDalitz.cc
12 //
13 // Description: Routine to decay omega -> pi pi pi0
14 //
15 // Modification history:
16 //
17 //    RYD     November 24, 1996         Module created
18 //
19 //------------------------------------------------------------------------
20 // 
21 #include "EvtGenBase/EvtPatches.hh"
22 #include <stdlib.h>
23 #include "EvtGenBase/EvtParticle.hh"
24 #include "EvtGenBase/EvtGenKine.hh"
25 #include "EvtGenBase/EvtTensor4C.hh"
26 #include "EvtGenBase/EvtVector4C.hh"
27 #include "EvtGenBase/EvtVector3R.hh"
28 #include "EvtGenBase/EvtPDL.hh"
29 #include "EvtGenModels/EvtOmegaDalitz.hh"
30 #include "EvtGenBase/EvtReport.hh"
31 #include <string>
32
33 EvtOmegaDalitz::~EvtOmegaDalitz() {}
34
35 std::string EvtOmegaDalitz::getName(){
36
37   return "OMEGA_DALITZ";     
38
39 }
40
41
42 EvtDecayBase* EvtOmegaDalitz::clone(){
43
44   return new EvtOmegaDalitz;
45
46 }
47
48 void EvtOmegaDalitz::init(){
49
50   // check that there are 0 arguments
51   checkNArg(0);
52   checkNDaug(3);
53
54   checkSpinParent(EvtSpinType::VECTOR);
55
56   checkSpinDaughter(0,EvtSpinType::SCALAR);
57   checkSpinDaughter(1,EvtSpinType::SCALAR);
58   checkSpinDaughter(2,EvtSpinType::SCALAR);
59
60 }
61
62 void EvtOmegaDalitz::initProbMax() {
63
64    setProbMax( 1.0);
65
66 }      
67
68 void EvtOmegaDalitz::decay( EvtParticle *p ){
69
70   p->initializePhaseSpace(getNDaug(),getDaugs());
71
72   EvtVector4C ep[3];
73
74   ep[0] = p->eps(0);
75   ep[1] = p->eps(1);
76   ep[2] = p->eps(2);
77
78   EvtVector4R mompi1 = p->getDaug(0)->getP4();
79   EvtVector4R mompi2 = p->getDaug(1)->getP4();
80
81   EvtVector3R p1(mompi1.get(1),mompi1.get(2),mompi1.get(3));
82   EvtVector3R p2(mompi2.get(1),mompi2.get(2),mompi2.get(3));
83   EvtVector3R q=cross(p2,p1);
84
85   EvtVector3C e1(ep[0].get(1),ep[0].get(2),ep[0].get(3));
86   EvtVector3C e2(ep[1].get(1),ep[1].get(2),ep[1].get(3));
87   EvtVector3C e3(ep[2].get(1),ep[2].get(2),ep[2].get(3));
88
89   //This is an approximate formula of the maximum value that
90   //|q| can have.
91   double norm=1.14/(p->mass()*p->mass()/9.0-mompi1.mass2());
92   
93   vertex(0,norm*e1*q);
94   vertex(1,norm*e2*q);
95   vertex(2,norm*e3*q);
96
97   return ;
98    
99 }
100