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

Go to the documentation of this file.
00001 //-----------------------------------------------------------------------
00002 // File and Version Information: 
00003 //      $Id: EvtMassAmp.cc,v 1.2 2011/01/06 22:57:56 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/EvtMassAmp.hh"
00019 
00020 EvtMassAmp::EvtMassAmp(const EvtPropBreitWignerRel& prop, const EvtTwoBodyVertex& vd)
00021   : EvtAmplitude<EvtPoint1D>()
00022   ,_prop(prop), _vd(vd), _vb(0)
00023   ,_useBirthFact(false), _useDeathFact(false)
00024   ,_useBirthFactFF(false), _useDeathFactFF(false)
00025   ,_fixUpMassForMax(false),_addfactor(0.)
00026 {}
00027 
00028 EvtMassAmp::EvtMassAmp(const EvtMassAmp& other)
00029   : EvtAmplitude<EvtPoint1D>(other)
00030   ,_prop(other._prop), _vd(other._vd)
00031   ,_vb(other._vb ? new EvtTwoBodyVertex(*other._vb) : 0)
00032   ,_useBirthFact(other._useBirthFact)
00033   ,_useDeathFact(other._useDeathFact)
00034   ,_useBirthFactFF(other._useBirthFactFF)
00035   ,_useDeathFactFF(other._useDeathFactFF)
00036   ,_fixUpMassForMax(other._fixUpMassForMax)
00037   ,_addfactor(other._addfactor)
00038 {}
00039 
00040 
00041 EvtMassAmp::~EvtMassAmp() 
00042 {
00043   if(_vb) delete _vb;
00044 }
00045 
00046 
00047 EvtComplex EvtMassAmp::amplitude(const EvtPoint1D& p) const 
00048 {
00049   // Modified vertex
00050 
00051   double m = p.value();
00052   // keep things from crashing..
00053 
00054   if ( m< (_vd.mA()+_vd.mB()) ) return EvtComplex(0.,0.);
00055 
00056   EvtTwoBodyKine vd(_vd.mA(),_vd.mB(),m);
00057   
00058   // Compute mass-dependent width for relativistic propagator
00059 
00060   EvtPropBreitWignerRel bw(_prop.m0(),_prop.g0()*_vd.widthFactor(vd)); 
00061   EvtComplex amp = bw.evaluate(m);
00062 
00063 
00064   // Birth vertex factors
00065 
00066   if(_useBirthFact) {
00067 
00068     assert(_vb);
00069     if ( (m+_vb->mB()) < _vb->mAB() ) {  
00070       EvtTwoBodyKine vb(m,_vb->mB(),_vb->mAB());
00071       double phsp= _vb->phaseSpaceFactor(vb,EvtTwoBodyKine::AB);
00072       amp *= phsp;
00073 
00074       if ( _fixUpMassForMax ) {
00075         amp *= sqrt((vb.p() / _vb->pD()));
00076       }
00077       if(_useBirthFactFF) {
00078         
00079         assert(_vb);
00080         amp *= _vb->formFactor(vb);
00081       }
00082     }
00083     else{
00084       if ( _vb->L() != 0 ) amp=0.;
00085     }
00086   }
00087 
00088 
00089   // Decay vertex factors
00090 
00091   if(_useDeathFact) {
00092     amp *= _vd.phaseSpaceFactor(vd,EvtTwoBodyKine::AB);
00093     if ( _fixUpMassForMax ) {
00094       amp *= sqrt((vd.p() / _vd.pD()));
00095     }
00096   }
00097   if(_useDeathFactFF) amp *= _vd.formFactor(vd);
00098 
00099   // AddFactorPn
00100 
00101   if(fabs(_addfactor) > 0.00000001){ //addFactorPn, pingrg-2011-1-6
00102     assert(_vb);
00103     double phsp;
00104     if ( (m+_vb->mB()) < _vb->mAB() ) {  
00105       EvtTwoBodyKine vb(m,_vb->mB(),_vb->mAB());
00106       phsp= vb.p(EvtTwoBodyKine::AB);
00107     } else{
00108       if ( _vb->L() != 0 ) phsp=0.;
00109     }
00110 
00111     amp *= pow(phsp,_addfactor);
00112     //   std::cout<<"EvtMassAmp::addFactorPn= "<<pow(phsp,_addfactor)<<std::endl;
00113    }
00114  
00115   return amp;
00116 }
00117 
00118 
00119 
00120 
00121 
00122 

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