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

Go to the documentation of this file.
00001 //-----------------------------------------------------------------------
00002 // File and Version Information: 
00003 //      $Id: EvtPto3P.cc,v 1.1.1.2 2007/10/26 05:03:14 pingrg Exp $
00004 // 
00005 // Environment:
00006 //      This software is part of the EvtGen package developed jointly
00007 //      for the BaBar and CLEO collaborations. If you use all or part
00008 //      of it, please give an appropriate acknowledgement.
00009 //
00010 // Copyright Information:
00011 //      Copyright (C) 1998 Caltech, UCSB
00012 //
00013 // Module creator:
00014 //      Alexei Dvoretskii, Caltech, 2001-2002.
00015 //-----------------------------------------------------------------------
00016 #include "EvtGenBase/EvtPatches.hh"
00017 
00018 #include "EvtGenBase/EvtPatches.hh"
00019 #include "EvtGenBase/EvtPDL.hh"
00020 #include "EvtGenModels/EvtPto3P.hh"
00021 #include "EvtGenBase/EvtPto3PAmpFactory.hh"
00022 using namespace EvtCyclic3;
00023 
00024 EvtDalitzPlot EvtPto3P::dp()
00025 {
00026   // There must be 3 daughters. All particles must be pseudoscalars.
00027   // Charge must be conserved. Number of arguments must be non-zero.
00028 
00029   EvtId parent = getParentId();
00030   assert(getNDaug() == 3);
00031   EvtId dau0 = getDaug(0);
00032   EvtId dau1 = getDaug(1);
00033   EvtId dau2 = getDaug(2);
00034   
00035   assert(EvtPDL::getSpinType(parent) == EvtSpinType::SCALAR);
00036   assert(EvtPDL::getSpinType(dau0) == EvtSpinType::SCALAR);
00037   assert(EvtPDL::getSpinType(dau1) == EvtSpinType::SCALAR);
00038   assert(EvtPDL::getSpinType(dau2) == EvtSpinType::SCALAR);  
00039   assert(EvtPDL::chg3(parent) == EvtPDL::chg3(dau0) + EvtPDL::chg3(dau1) + EvtPDL::chg3(dau2));
00040   assert(getNArg() > 0);
00041 
00042   return EvtDalitzPlot(EvtPDL::getMass(dau0),EvtPDL::getMass(dau1),EvtPDL::getMass(dau2),EvtPDL::getMass(parent));
00043 }
00044 
00045 EvtAmpFactory<EvtDalitzPoint>* EvtPto3P::createFactory(const EvtMultiChannelParser& parser)
00046 {
00047   // Compute the interval size
00048 
00049   EvtDalitzPlot plot = dp();
00050   EvtAmpFactory<EvtDalitzPoint>* fact = new EvtPto3PAmpFactory(plot);
00051   fact->build(parser,10000);
00052   return fact;
00053 }
00054 
00055 
00056 std::vector<EvtVector4R> EvtPto3P::initDaughters(const EvtDalitzPoint& x) const
00057 {
00058   std::vector<EvtVector4R> v;
00059   assert(x.isValid());
00060   
00061   // Calculate in the r.f. of AB
00062                                                                               
00063   double eA = x.e(A,AB);
00064   double eB = x.e(B,AB);
00065   double eC = x.e(C,AB);
00066   double pA = x.p(A,AB);
00067   double pC = x.p(C,AB);
00068   double cos = x.cosTh(CA,AB);
00069   double sin = sqrt(1.0-cos*cos);
00070                                                                                   
00071   EvtVector4R vA(eA,0,0,pA);                                                   
00072   EvtVector4R vB(eB,0,0,-pA); 
00073   EvtVector4R vC(eC,0,pC*sin,pC*cos);
00074 
00075   // Boost from rest frame of AB to rest-frame of decaying particle
00076   // vboost is the 4-momentum of frame being boosted from in the frame
00077   // being boosted into.
00078  
00079   EvtVector4R vboost = vA + vB + vC;
00080   vboost.set(1,-vboost.get(1));
00081   vboost.set(2,-vboost.get(2));
00082   vboost.set(3,-vboost.get(3));
00083   vA.applyBoostTo(vboost);
00084   vB.applyBoostTo(vboost);
00085   vC.applyBoostTo(vboost);
00086   
00087   // Rotate
00088                                                                                 
00089   double alpha = EvtRandom::Flat( EvtConst::twoPi );
00090   double beta = acos(EvtRandom::Flat( -1.0, 1.0 ));
00091   double gamma = EvtRandom::Flat( EvtConst::twoPi );
00092                                                                                 
00093   vA.applyRotateEuler( alpha, beta, gamma );
00094   vB.applyRotateEuler( alpha, beta, gamma );
00095   vC.applyRotateEuler( alpha, beta, gamma );
00096                                                                                  
00097    // Fill vector
00098                                                                                  
00099   assert(v.size() == 0);  
00100   v.push_back(vA);
00101   v.push_back(vB);
00102   v.push_back(vC);
00103 
00104   return v;
00105 }                                                                             
00106 
00107 
00108 
00109 
00110 
00111 
00112 
00113 
00114 
00115 
00116 

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