00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "EvtGenBase/EvtPatches.hh"
00023 #include <stdlib.h>
00024 #include "EvtGenBase/EvtParticle.hh"
00025 #include "EvtGenBase/EvtGenKine.hh"
00026 #include "EvtGenBase/EvtPDL.hh"
00027 #include "EvtGenBase/EvtVector4C.hh"
00028 #include "EvtGenBase/EvtTensor4C.hh"
00029 #include "EvtGenBase/EvtReport.hh"
00030 #include "EvtGenModels/EvtVVPIPI_WEIGHTED.hh"
00031 #include <string>
00032 using std::endl;
00033
00034 EvtVVPIPI_WEIGHTED::~EvtVVPIPI_WEIGHTED() {}
00035
00036 void EvtVVPIPI_WEIGHTED::getName(std::string& model_name){
00037
00038 model_name="VVPIPI_WEIGHTED";
00039
00040 }
00041
00042
00043 EvtDecayBase* EvtVVPIPI_WEIGHTED::clone(){
00044
00045 return new EvtVVPIPI_WEIGHTED;
00046
00047 }
00048
00049 void EvtVVPIPI_WEIGHTED::init(){
00050
00051 static EvtId PIP=EvtPDL::getId("pi+");
00052 static EvtId PIM=EvtPDL::getId("pi-");
00053 static EvtId PI0=EvtPDL::getId("pi0");
00054
00055
00056 checkNArg(0);
00057 checkNDaug(3);
00058
00059 checkSpinParent(EvtSpinType::VECTOR);
00060 checkSpinDaughter(0,EvtSpinType::VECTOR);
00061
00062
00063
00064 if ((!(getDaug(1)==PIP&&getDaug(2)==PIM))&&
00065 (!(getDaug(1)==PI0&&getDaug(2)==PI0))) {
00066 report(ERROR,"EvtGen") << "EvtVVPIPI_WEIGHTED generator expected "
00067 << " pi+ and pi- (or pi0 and pi0) "
00068 << "as 2nd and 3rd daughter. "<<endl;
00069 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00070 ::abort();
00071 }
00072
00073 }
00074
00075 void EvtVVPIPI_WEIGHTED::initProbMax() {
00076
00077 setProbMax(0.08* 1.13 );
00078 }
00079
00080 double reweight_event(double pipi_mass)
00081 {
00082 pipi_mass *= 1000.0;
00083 return sqrt(
00084 -3.6911336508223251 +
00085 0.019119831948029617 * pipi_mass +
00086 -1.8962883732377376e-05 * pipi_mass * pipi_mass
00087 );
00088 }
00089
00090 void EvtVVPIPI_WEIGHTED::decay( EvtParticle *psi_prime){
00091
00092 psi_prime->initializePhaseSpace(getNDaug(),getDaugs());
00093
00094 EvtParticle *jpsi,*pi1,*pi2;
00095
00096 jpsi=psi_prime->getDaug(0);
00097 pi1=psi_prime->getDaug(1);
00098 pi2=psi_prime->getDaug(2);
00099
00100
00101
00102 EvtVector4C ep0,ep1,ep2;
00103
00104 ep0=psi_prime->eps(0);
00105 ep1=psi_prime->eps(1);
00106 ep2=psi_prime->eps(2);
00107
00108 EvtVector4C e0,e1,e2;
00109
00110 e0 = jpsi->epsParent(0);
00111 e1 = jpsi->epsParent(1);
00112 e2 = jpsi->epsParent(2);
00113
00114 double mass2 = (pi1->getP4()+pi2->getP4()).mass2();
00115
00116 double fac = mass2-4*pi1->mass()*pi2->mass();
00117
00118 fac *= reweight_event(sqrt(mass2));
00119
00120 vertex(0,0,fac*(ep0*e0.conj()));
00121 vertex(0,1,fac*(ep0*e1.conj()));
00122 vertex(0,2,fac*(ep0*e2.conj()));
00123
00124 vertex(1,0,fac*(ep1*e0.conj()));
00125 vertex(1,1,fac*(ep1*e1.conj()));
00126 vertex(1,2,fac*(ep1*e2.conj()));
00127
00128 vertex(2,0,fac*(ep2*e0.conj()));
00129 vertex(2,1,fac*(ep2*e1.conj()));
00130 vertex(2,2,fac*(ep2*e2.conj()));
00131
00132 return ;
00133
00134 }
00135