RooLass.cc

Go to the documentation of this file.
00001 /******************************************************************
00002 * Project: BaBar detector at the SLAC PEP-II B-factory
00003 * Package: RooRarFit
00004  *    File: $Id: RooLass.cc,v 1.4 2011/06/16 13:18:48 fwilson Exp $
00005  * Authors:                                                       *
00006  * Fergus Wilson, RAL, fwilson@slac.stanford.edu                  *
00007  *                                                                *
00008  * Copyright (C) 2005-2012, RAL                                   *
00009  *                                                                *
00010  ******************************************************************/
00011 
00012 // -- CLASS DESCRIPTION [PDF] --
00013 // This is an implentation of the LASS function for RooRarFit
00015 //
00016 // BEGIN_HTML
00017 // This is an implentation of the LASS function for RooRarFit
00018 // END_HTML
00019 //
00020 
00021 #include "Riostream.h"
00022 
00023 #include "RooRarFit/RooLass.hh"
00024 #include "RooFitCore/RooAbsReal.hh"
00025 #include "RooFitCore/RooRealVar.hh"
00026 #include "RooFitCore/RooComplex.hh"
00027 
00028 #include "TMath.h"
00029 
00030 using std::cout;
00031 using std::cerr;
00032 using std::endl;
00033 
00034 ClassImp(RooLass)
00035 
00036 RooLass::RooLass(const char * name, const char * title, 
00037                  RooAbsReal & fitVariable, RooAbsReal & theMean,
00038                  RooAbsReal & theWidth, RooAbsReal & effectiveRange,
00039                  RooAbsReal & scatteringLength, RooAbsReal & turnOffValue)
00040   : RooAbsPdf(name,title),
00041     x("x","Dependent",this,fitVariable),
00042     mean("mean","Mean",this,theMean),
00043     width("width","Width",this,theWidth),
00044     effRange("effRange","Effective Range",this,effectiveRange),
00045     scatLen("scatLen","Scattering Length",this,scatteringLength),
00046     turnOffVal("turnOffVal","Turn Off Value",this,turnOffValue)
00047 {
00048 }
00049 
00050 RooLass::RooLass(const RooLass & other, const char * name)
00051   : RooAbsPdf(other,name),
00052     x("x",this,other.x),
00053     mean("mean",this,other.mean),
00054     width("width",this,other.width),
00055     effRange("effRange",this,other.effRange),
00056     scatLen("scatLen",this,other.scatLen),
00057     turnOffVal("turnOffVal",this,other.turnOffVal)
00058 {
00059 }
00060 
00061 //------------------------------------------------------------
00062 Double_t RooLass::getQ(Double_t mass) const
00063 {
00064 
00065   const Double_t m_Kaon = 0.493677;
00066   const Double_t m_Pion = 0.13957018;
00067 
00068   if (mass < (m_Kaon+m_Pion)) {return(0);}
00069 
00070   const Double_t mDaugSumSq  = (m_Kaon+m_Pion)*(m_Kaon+m_Pion);
00071   const Double_t mDaugDiffSq = (m_Kaon-m_Pion)*(m_Kaon-m_Pion);
00072 
00073   Double_t q  = sqrt((mass*mass-mDaugSumSq)*(mass*mass-mDaugDiffSq))/(2*mass);
00074   return(q);
00075 }
00076 
00077 //------------------------------------------------------------
00078 Double_t RooLass::evaluate() const
00079 {
00080   //return (kmatrix());
00081   return (smatrix());
00082 }
00083 
00084 //----------------------------------------------------
00085 Double_t RooLass::kmatrix() const
00086 {
00087   Double_t mass = x;
00088 
00089   Double_t q  = getQ(mass);
00090   if (q==0) {return(0);}
00091 
00092   Double_t q0 = getQ(mean);
00093   if (q0==0) {return(0);}
00094 
00095   Double_t rho  = 2*q/mass;
00096   Double_t rho0 = 2*q0/mean;
00097 
00098   Double_t g0sqr = mean*mass*width/rho0;
00099   // K matrix for BW resonance
00100   Double_t Khat = g0sqr/(mean*mean - mass*mass);
00101 
00102   if (mass <= turnOffVal) {
00103     // K matrix for S-wave background + BW resonance
00104     Khat += ((scatLen*mass)/(2+scatLen*effRange*q*q));
00105   }
00106 
00107   RooComplex T(Khat,0.0);
00108   RooComplex denom(1.0,-Khat*rho);
00109   T = T / denom; // Transition probability
00110 
00111   return (T.abs2()); // Amplitude (arbitrary scale);
00112 }
00113 
00114 //----------------------------------------------------
00115 Double_t RooLass::smatrix() const
00116 {
00117   Double_t mass = x;
00118 
00119   const Double_t q  = getQ(mass);
00120   if (q==0) {return(0);}
00121 
00122   const Double_t qR = getQ(mean);
00123   if (qR==0) {return(0);}
00124 
00125   // Breit-Wigner resonace
00126   RooComplex T2(width*mean*mean/qR,0);
00127   RooComplex bw_denom(mean*mean - mass*mass, -mean*width*q*mean/(mass*qR));
00128   
00129   T2 = T2 / bw_denom;
00130 
00131   RooComplex T(T2);
00132 
00133   if (mass < turnOffVal) {
00134     // effective range parameterization
00135     Double_t cot_db = 1.0/ (scatLen*q) + (effRange*q)*0.5;
00136     Double_t db = TMath::ATan(1.0/cot_db);
00137 
00138     // relative phase exp^(2 i db)
00139     RooComplex phase(cos(2*db),sin(2*db));
00140 
00141     // S-wave
00142     RooComplex T1(mass, 0);
00143     RooComplex s_denom(q*cot_db, -q);
00144 
00145     T = (T1/s_denom) + (phase * T); 
00146   }
00147 
00148   return (T.abs2()); // Amplitude (arbitrary scale);
00149 }

Generated on 30 Oct 2013 for RooRarFit by  doxygen 1.4.7