]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenModels/EvtVSSMix.cpp
eda67ce30a39af27978a261b603cd063610f816a
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtVSSMix.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: EvtVSSMix.cc
12 //
13 // Description: Routine to decay vector-> scalar scalar
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/EvtPDL.hh"
26 #include "EvtGenBase/EvtReport.hh"
27 #include "EvtGenBase/EvtVector4C.hh"
28 #include "EvtGenModels/EvtVSSMix.hh"
29 #include "EvtGenBase/EvtId.hh"
30 #include <string>
31 #include "EvtGenBase/EvtConst.hh"
32
33 EvtVSSMix::~EvtVSSMix() {}
34
35 std::string EvtVSSMix::getName(){
36
37   return "VSS_MIX";     
38
39 }
40
41
42 EvtDecayBase* EvtVSSMix::clone(){
43
44   return new EvtVSSMix;
45
46 }
47
48 void EvtVSSMix::init(){
49
50   // check that there are 1 arguments
51   checkNArg(1);
52   checkNDaug(2);
53
54   checkSpinParent(EvtSpinType::VECTOR);
55     
56   checkSpinDaughter(0,EvtSpinType::SCALAR);
57   checkSpinDaughter(1,EvtSpinType::SCALAR);
58
59 }
60
61 void EvtVSSMix::initProbMax(){
62
63   setProbMax(0.5);
64
65 }
66
67 void EvtVSSMix::decay( EvtParticle *p ){
68
69   //added by Lange Jan4,2000
70   static EvtId B0=EvtPDL::getId("B0");
71   static EvtId B0B=EvtPDL::getId("anti-B0");
72
73   p->initializePhaseSpace(getNDaug(),getDaugs());
74   EvtParticle *s1,*s2;
75   s1 = p->getDaug(0);
76   s2 = p->getDaug(1);
77   EvtVector4R s1mom = s1->getP4();
78
79   double t1,t2,dm;
80
81   s1->setLifetime();
82   s2->setLifetime();
83
84   t1=s1->getLifetime();
85   t2=s2->getLifetime();
86
87   //dm should probably be a parameter to this model.
88
89   dm=getArg(0)/EvtConst::c;
90
91   EvtId d1,d2;
92
93   d1=s1->getId();
94   d2=s2->getId();
95
96   double mix_amp=0.;
97   if (d1==B0&&d2==B0B) mix_amp=cos(0.5*dm*(t1-t2));
98   if (d1==B0B&&d2==B0) mix_amp=cos(0.5*dm*(t1-t2));
99   if (d1==B0&&d2==B0) mix_amp=sin(0.5*dm*(t1-t2));
100   if (d1==B0B&&d2==B0B) mix_amp=sin(0.5*dm*(t1-t2));
101
102   double norm=1.0/s1mom.d3mag();
103
104   vertex(0,norm*mix_amp*s1mom*(p->eps(0)));
105   vertex(1,norm*mix_amp*s1mom*(p->eps(1)));
106   vertex(2,norm*mix_amp*s1mom*(p->eps(2)));
107
108   return ;
109 }
110
111 std::string EvtVSSMix::getParamName(int i) {
112   switch(i) {
113   case 0:
114     return "deltaM";
115   default:
116     return "";
117   }
118 }