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:
9 : // Copyright (C) 1998 Caltech, UCSB
10 : //
11 : // Module: EvtBaryonVminusA.cc
12 : //
13 : // Description: Routine to implement semileptonic decays using realistic
14 : // dynamics. The form factors are from
15 : // M.Pervin,S.Capstick,W. Roberts, Phys.Rev. C72 035201(2005).
16 : //
17 : //
18 : // Modification history:
19 : //
20 : // R.J. Tesarek May 28, 2004 Module created
21 : // Karen Gibson 1/20/2006 Module updated for 1/2+->1/2+,
22 : // 1/2+->1/2-, 1/2+->3/2- Lambda decays
23 : //
24 : //------------------------------------------------------------------------
25 :
26 : #include "EvtGenBase/EvtPatches.hh"
27 : #include <stdlib.h>
28 : #include "EvtGenBase/EvtParticle.hh"
29 : #include "EvtGenBase/EvtGenKine.hh"
30 : #include "EvtGenBase/EvtPDL.hh"
31 : #include "EvtGenBase/EvtReport.hh"
32 : #include "EvtGenModels/EvtBaryonPCR.hh"
33 : #include "EvtGenBase/EvtConst.hh"
34 : #include "EvtGenBase/EvtIdSet.hh"
35 : #include <string>
36 : #include "EvtGenModels/EvtBaryonPCRFF.hh"
37 :
38 : using namespace std;
39 : #ifdef D0
40 : #undef D0
41 : #endif
42 0 : EvtBaryonPCR::EvtBaryonPCR():
43 0 : baryonpcrffmodel(0)
44 0 : ,calcamp(0)
45 0 : {}
46 :
47 :
48 0 : EvtBaryonPCR::~EvtBaryonPCR() {
49 0 : delete baryonpcrffmodel;
50 0 : baryonpcrffmodel=0;
51 0 : delete calcamp;
52 0 : calcamp=0;
53 0 : }
54 :
55 : std::string EvtBaryonPCR::getName(){
56 :
57 0 : return "BaryonPCR";
58 :
59 : }
60 :
61 :
62 :
63 : EvtDecayBase* EvtBaryonPCR::clone(){
64 :
65 0 : return new EvtBaryonPCR;
66 :
67 0 : }
68 :
69 : void EvtBaryonPCR::decay( EvtParticle *p ){
70 :
71 : //This is a kludge to avoid warnings because the K_2* mass becomes to large.
72 0 : static EvtIdSet regenerateMasses("K_2*+","K_2*-","K_2*0","anti-K_2*0",
73 0 : "K_1+","K_1-","K_10","anti-K_10",
74 0 : "D'_1+","D'_1-","D'_10","anti-D'_10");
75 :
76 0 : if (regenerateMasses.contains(getDaug(0))){
77 0 : p->resetFirstOrNot();
78 0 : }
79 :
80 0 : p->initializePhaseSpace(getNDaug(),getDaugs());
81 :
82 0 : EvtComplex r00(getArg(0), 0.0 );
83 0 : EvtComplex r01(getArg(1), 0.0 );
84 0 : EvtComplex r10(getArg(2), 0.0 );
85 0 : EvtComplex r11(getArg(3), 0.0 );
86 :
87 0 : calcamp->CalcAmp(p,_amp2,baryonpcrffmodel, r00, r01, r10, r11);
88 :
89 0 : }
90 :
91 : void EvtBaryonPCR::initProbMax() {
92 :
93 : // Baryons (partial list 5/28/04)
94 :
95 0 : static EvtId SIGC0=EvtPDL::getId("Sigma_c0");
96 0 : static EvtId SIGC0B=EvtPDL::getId("anti-Sigma_c0");
97 0 : static EvtId SIGCP=EvtPDL::getId("Sigma_c+");
98 0 : static EvtId SIGCM=EvtPDL::getId("anti-Sigma_c-");
99 0 : static EvtId SIGCPP=EvtPDL::getId("Sigma_c++");
100 0 : static EvtId SIGCMM=EvtPDL::getId("anti-Sigma_c--");
101 0 : static EvtId LAMCP=EvtPDL::getId("Lambda_c+");
102 0 : static EvtId LAMCM=EvtPDL::getId("anti-Lambda_c-");
103 0 : static EvtId LAMC1P=EvtPDL::getId("Lambda_c(2593)+");
104 0 : static EvtId LAMC1M=EvtPDL::getId("anti-Lambda_c(2593)-");
105 0 : static EvtId LAMC2P=EvtPDL::getId("Lambda_c(2625)+");
106 0 : static EvtId LAMC2M=EvtPDL::getId("anti-Lambda_c(2625)-");
107 0 : static EvtId LAMB=EvtPDL::getId("Lambda_b0");
108 0 : static EvtId LAMBB=EvtPDL::getId("anti-Lambda_b0");
109 :
110 0 : EvtId parnum,barnum,lnum;
111 :
112 0 : parnum = getParentId();
113 0 : barnum = getDaug(0);
114 0 : lnum = getDaug(1);
115 :
116 0 : if( parnum==LAMB || parnum==LAMBB ) {
117 0 : if( barnum==LAMCP|| barnum==LAMCM
118 0 : || barnum==LAMC1P || barnum==LAMC1M || barnum==LAMC2P || barnum==LAMC2M
119 0 : || barnum==SIGC0 || barnum==SIGC0B || barnum==SIGCP || barnum==SIGCM
120 0 : || barnum==SIGCPP || barnum==SIGCMM ) {
121 0 : setProbMax(22000.0);
122 0 : return;
123 : }
124 : }
125 :
126 : //This is a real cludge.. (ryd)
127 0 : setProbMax(0.0);
128 :
129 0 : }
130 :
131 : void EvtBaryonPCR::init(){
132 :
133 : //if (getNArg()!=0) {
134 0 : if (getNArg()!=4) {
135 :
136 0 : report(Severity::Error,"EvtGen") << "EvtBaryonPCR generator expected "
137 0 : << " 4 arguments but found:"<<getNArg()<<endl;
138 : //<< " 0 arguments but found:"<<getNArg()<<endl;
139 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
140 0 : ::abort();
141 :
142 : }
143 :
144 0 : if ( getNDaug()!=3 ) {
145 0 : report(Severity::Error,"EvtGen")
146 0 : << "Wrong number of daughters in EvtBaryonPCR.cc "
147 0 : << " 3 daughters expected but found: "<<getNDaug()<<endl;
148 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
149 0 : ::abort();
150 : }
151 :
152 :
153 : //We expect the parent to be a scalar
154 : //and the daughters to be X lepton neutrino
155 :
156 0 : EvtSpinType::spintype parenttype=EvtPDL::getSpinType(getParentId());
157 0 : EvtSpinType::spintype baryontype=EvtPDL::getSpinType(getDaug(0));
158 0 : EvtSpinType::spintype leptontype=EvtPDL::getSpinType(getDaug(1));
159 0 : EvtSpinType::spintype neutrinotype=EvtPDL::getSpinType(getDaug(2));
160 :
161 0 : if ( parenttype != EvtSpinType::DIRAC ) {
162 0 : report(Severity::Error,"EvtGen") << "EvtBaryonPCR generator expected "
163 0 : << " a DIRAC parent, found:"<<
164 0 : EvtPDL::name(getParentId())<<endl;
165 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
166 0 : ::abort();
167 : }
168 0 : if ( leptontype != EvtSpinType::DIRAC ) {
169 0 : report(Severity::Error,"EvtGen") << "EvtBaryonPCR generator expected "
170 0 : << " a DIRAC 2nd daughter, found:"<<
171 0 : EvtPDL::name(getDaug(1))<<endl;
172 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
173 0 : ::abort();
174 : }
175 0 : if ( neutrinotype != EvtSpinType::NEUTRINO ) {
176 0 : report(Severity::Error,"EvtGen") << "EvtBaryonPCR generator expected "
177 0 : << " a NEUTRINO 3rd daughter, found:"<<
178 0 : EvtPDL::name(getDaug(2))<<endl;
179 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!"<<endl;
180 0 : ::abort();
181 : }
182 :
183 0 : baryonpcrffmodel = new EvtBaryonPCRFF;
184 :
185 0 : if ( baryontype==EvtSpinType::DIRAC
186 0 : || baryontype==EvtSpinType::RARITASCHWINGER) {
187 0 : calcamp = new EvtSemiLeptonicBaryonAmp;
188 : }
189 : else {
190 0 : report(Severity::Error,"EvtGen")
191 0 : << "Wrong baryon spin type in EvtBaryonPCR.cc "
192 0 : << "Expected spin type " << EvtSpinType::DIRAC
193 0 : << ", found spin type " << baryontype <<endl;
194 0 : report(Severity::Error,"EvtGen") << "Will terminate execution!" <<endl;
195 0 : ::abort();
196 : }
197 :
198 0 : }
199 :
|