/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenModels/EvtSVVNONCPEIGEN.cc

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 //
00003 // Environment:
00004 //      This software is part of the EvtGen package developed jointly
00005 //      for the BaBar and CLEO collaborations.  If you use all or part
00006 //      of it, please give an appropriate acknowledgement.
00007 //
00008 // Copyright Information: See EvtGen/COPYRIGHT
00009 //      Copyright (C) 2001      Royal Holloway, University of London
00010 //
00011 // Module: EvtSVVNONCPEIGEN.cc
00012 //
00013 // Description: Routine to decay scalar -> vector vector 
00014 //              and has CP violation.
00015 //
00016 //              This model does all the ckm-suppressed decays and mixing for you. It randomly 'overwrites' 
00017 //              any reco or tagging state as set in the Y(4S) decay model (VSS_(B)MIX) with its own generated states.
00018 //
00019 //              As such, the corresponding dec file requires only one decay-mode description, for example:
00020 //              Decay MyB0
00021 //              1.000    rho+ MyD*-       SVV_NONCPEIGEN dm beta gamma 0.322 0.31 0.941 0 0.107 1.42 0.02 0 0.02 0 0.02 0 ;
00022 //              EndDecay
00023 //              and furthermore Y(4S) only needs to decay to B0's (or B0bar's).
00024 //              The decay above should be a CKM-favored mode (eg. B0->D*-rho+ or B0bar->D*+rho-).
00025 //              All ckm-suppressed decays and the mixing are derived from this line in the ::Decay function.
00026 //
00027 //              There are 15 or 27 arguments. The first three are dm, phase1
00028 //              and phase2. dm is the B0-B0bar mass difference. Phases 1
00029 //              and 2 are the CKM weak phases relevant for the particular mode, 
00030 //              eg for B-->DstRho phase1 is beta and phase2 is gamma.
00031 //
00032 //              The next arguments are the 2 amplitudes (= 12 input parameters) 
00033 //              in the order: A_f, Abar_f. In the example above, the 'A_f' amplitude now 
00034 //              stands for the ckm-favored decay 'B0->D*-rho+', and 'Abar_f' stands for 'B0bar->D*-rho+'
00035 //
00036 //              Each amplitude has its 3 helicity states in the order +, 0, -, which are each 
00037 //              specified by a magnitude and a strong phase.
00038 //
00039 //              The last 2 arguments A_fbar and Abar_fbar (=12 input parameters) are not necessary, 
00040 //              but can included if one wants to set them differently from A_f, Abar_f.
00041 //
00042 //              Mind you that Hbar_+- = H_-+ (ignoring the weak phase, which flips sign).
00043 //              It is custumary to select one set of helicity states (eg H_+-) and to adopt these for
00044 //              the CP-conjugate decays as well (ie. depict Hbar_-+ with H_+-), which is the interpretation
00045 //              we use for the input-parameters above. 
00046 //              However, the angular decay in EvtGen is just a formula in which helicity amplitudes are 'plugged' in,
00047 //              making no difference between B0 or B0bar decays. In the model below we (thus) account for the +- 
00048 //              flipping between B0 and B0bar.
00049 //              
00050 //
00051 // Modification history:
00052 //    Ajit Kurup 9 March 2001        Module created (from EvtSVSNONCPEIGEN)
00053 //    Max Baak 01/16/2004            Fix of Helicity amplitude ordering.
00054 //                                   Decay also works for B0bar decays.
00055 //------------------------------------------------------------------------
00056 // 
00057 #include "EvtGenBase/EvtPatches.hh"
00058 #include <stdlib.h>
00059 #include "EvtGenBase/EvtParticle.hh"
00060 #include "EvtGenBase/EvtRandom.hh"
00061 #include "EvtGenBase/EvtGenKine.hh"
00062 #include "EvtGenBase/EvtCPUtil.hh"
00063 #include "EvtGenBase/EvtPDL.hh"
00064 #include "EvtGenBase/EvtReport.hh"
00065 #include "EvtGenBase/EvtVector4C.hh"
00066 #include "EvtGenModels/EvtSVVNONCPEIGEN.hh"
00067 #include <string>
00068 #include "EvtGenModels/EvtSVVHelAmp.hh"
00069 #include "EvtGenBase/EvtConst.hh"
00070 
00071 EvtSVVNONCPEIGEN::~EvtSVVNONCPEIGEN() {}
00072 
00073 void EvtSVVNONCPEIGEN::getName(std::string& model_name){
00074 
00075   model_name="SVV_NONCPEIGEN";     
00076 
00077 }
00078 
00079 
00080 EvtDecayBase* EvtSVVNONCPEIGEN::clone(){
00081 
00082   return new EvtSVVNONCPEIGEN;
00083 
00084 }
00085 
00086 void EvtSVVNONCPEIGEN::init(){
00087 
00088   // check that there are 27 arguments
00089   checkNArg(27,15);
00090   checkNDaug(2);
00091 
00092   checkSpinDaughter(0,EvtSpinType::VECTOR);
00093   checkSpinDaughter(1,EvtSpinType::VECTOR);
00094 
00095   //  The ordering of A_f is :
00096   //  A_f[0-2] = A_f
00097   //  A_f[3-5] = Abar_f
00098   //  A_f[6-8] = A_fbar 
00099   //  A_f[9-11] = Abar_fbar
00100   //  
00101   //  Each of the 4 amplitudes include the 3 different helicity states in 
00102   //  the order +, 0, -. See more about helicity amplitude ordering in ::decay
00103 
00104   int i=0;
00105   int j=(getNArg()-3)/2;
00106 
00107   for(i=0; i<j; ++i){
00108     _A_f[i] = getArg((2*i)+3) * EvtComplex( cos(getArg((2*i)+4)),sin(getArg((2*i)+4)) );
00109   }
00110 
00111   //  If only 6 amplitudes are specified, calculate the last 6 from the first 6:
00112   if(6 == j){
00113     for(i = 0; i < 3; ++i){
00114       _A_f[6+i] = _A_f[3+i];
00115       _A_f[9+i] = _A_f[i];
00116     }
00117   }
00118 }
00119 
00120 void EvtSVVNONCPEIGEN::initProbMax() {
00121   double probMax = 0;
00122   for (int i = 0; i < 12; ++i){
00123     double amp = abs(_A_f[i]);
00124     probMax += amp * amp;
00125   }
00126 
00127   setProbMax(probMax); 
00128 }
00129 
00130 void EvtSVVNONCPEIGEN::decay( EvtParticle *p){
00131 
00132   //added by Lange Jan4,2000
00133   static EvtId B0=EvtPDL::getId("B0");
00134   static EvtId B0B=EvtPDL::getId("anti-B0");
00135 
00136   double t;
00137   EvtId other_b;
00138   EvtId daugs[2];
00139 
00140 
00141   // MB: flip selects the final of the decay
00142   int flip = ((p->getId() == B0) ? 0 : 1);
00143   daugs[0]=getDaug(0);
00144   daugs[1]=getDaug(1);
00145   p->initializePhaseSpace(2,daugs);
00146 
00147   EvtCPUtil::OtherB(p,t,other_b,0.5);
00148 
00149   EvtComplex amp[3];
00150 
00151   double dmt2 = getArg(0) * t / (2 * EvtConst::c);
00152   double phiCKM = (2.0 * getArg(1) + getArg(2));   // 2b+g
00153   EvtComplex ePlusIPhi(cos(phiCKM), sin(phiCKM));
00154   EvtComplex eMinusIPhi(cos(-phiCKM), sin(-phiCKM));
00155 
00156   // flip == 0 : D*-rho+
00157   // flip == 1 : D*+rho-
00158 
00159   if (!flip) {
00160     if (other_b==B0B){
00161       // At t=0 we have a B0
00162       for (int i=0; i<3; ++i) {
00163         amp[i] = _A_f[i]*cos(dmt2) + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f[i+3];
00164       }
00165     }
00166     if (other_b==B0){
00167       // At t=0 we have a B0bar
00168       for(int i=0; i<3; ++i) {
00169         amp[i] = _A_f[i]*ePlusIPhi*EvtComplex(0.0,sin(dmt2)) + _A_f[i+3]*cos(dmt2);
00170       }
00171     }
00172   } else{
00173     if (other_b==B0B){
00174       // At t=0 we have a B0
00175 
00176       // M.Baak 01/16/2004
00177       // Note: \bar{H}+- = H-+ 
00178       // If one wants to use the correct helicities for B0 and B0bar decays but the same formula-notation (as done in EvtSVV_HelAmp), 
00179       // count the B0bar helicities backwards. (Equivalently, one could flip the chi angle.)
00180 
00181       for(int i=0; i<3; ++i) { 
00182         amp[i] = _A_f[8-i]*cos(dmt2) + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f[11-i];
00183       }
00184     }
00185     if (other_b==B0){
00186       // At t=0 we have a B0bar
00187       for(int i=0; i<3; ++i) {
00188         amp[i] = _A_f[8-i] * ePlusIPhi * EvtComplex(0.0,sin(dmt2)) + _A_f[11-i]*cos(dmt2);
00189       }
00190     }
00191   }
00192   
00193   EvtSVVHelAmp::SVVHel(p,_amp2,daugs[0],daugs[1],amp[0],amp[1],amp[2]);
00194 
00195   return ;
00196 }
00197 

Generated on Tue Nov 29 23:12:23 2016 for BOSS_7.0.2 by  doxygen 1.4.7