Page MenuHomeHEPForge

D41.1759175096.diff
No OneTemporary

Size
49 KB
Referenced Files
None
Subscribers
None

D41.1759175096.diff

diff --git a/inc/LauKMatrixProdPole.hh b/inc/LauKMatrixProdPole.hh
--- a/inc/LauKMatrixProdPole.hh
+++ b/inc/LauKMatrixProdPole.hh
@@ -44,7 +44,7 @@
class LauKMatrixProdPole : public LauAbsResonance {
- public:
+ public:
//! Constructor
/*!
\param [in] poleName name of the pole
@@ -54,34 +54,36 @@
\param [in] daughters the daughter particles
\param [in] useProdAdler boolean to turn on/off the production Adler zero factor
*/
- LauKMatrixProdPole(const TString& poleName, Int_t poleIndex, Int_t resPairAmpInt,
- LauKMatrixPropagator* propagator, const LauDaughters* daughters,
- Bool_t useProdAdler = kFALSE);
+ LauKMatrixProdPole( const TString& poleName, Int_t poleIndex, Int_t resPairAmpInt,
+ LauKMatrixPropagator* propagator, const LauDaughters* daughters,
+ Bool_t useProdAdler = kFALSE);
//! Destructor
- virtual ~LauKMatrixProdPole();
+ virtual ~LauKMatrixProdPole();
// Initialise the model
- virtual void initialise() {return;}
+ virtual void initialise() {return;}
//! The amplitude calculation
/*!
\param [in] kinematics the kinematic variables of the current event
\return the complex amplitude
*/
- virtual LauComplex amplitude(const LauKinematics* kinematics);
+ virtual LauComplex amplitude(const LauKinematics* kinematics);
//! Get the resonance model type
- /*!
- \return the resonance model type
- */
+ /*!
+ \return the resonance model type
+ */
virtual LauAbsResonance::LauResonanceModel getResonanceModel() const {return LauAbsResonance::KMatrix;}
+ virtual const std::vector<LauParameter*>& getFloatingParameters();
+
protected:
//! Function not meant to be called, amplitude is called directly in this case
- virtual LauComplex resAmp(Double_t mass, Double_t spinTerm);
+ virtual LauComplex resAmp(Double_t mass, Double_t spinTerm);
- private:
+ private:
//! Copy constructor (not implemented)
LauKMatrixProdPole(const LauKMatrixProdPole& rhs);
@@ -89,14 +91,14 @@
LauKMatrixProdPole& operator=(const LauKMatrixProdPole& rhs);
//! The K-matrix propagator
- LauKMatrixPropagator* thePropagator_;
+ LauKMatrixPropagator* thePropagator_;
//! The number of the pole
Int_t poleIndex_;
- //! Boolean to turn on/off the production Adler zero factor
- Bool_t useProdAdler_;
+ //! Boolean to turn on/off the production Adler zero factor
+ Bool_t useProdAdler_;
- ClassDef(LauKMatrixProdPole, 0) // K-matrix production pole
+ ClassDef(LauKMatrixProdPole, 0) // K-matrix production pole
};
diff --git a/inc/LauKMatrixProdSVP.hh b/inc/LauKMatrixProdSVP.hh
--- a/inc/LauKMatrixProdSVP.hh
+++ b/inc/LauKMatrixProdSVP.hh
@@ -76,6 +76,8 @@
\return the resonance model type
*/
virtual LauAbsResonance::LauResonanceModel getResonanceModel() const {return LauAbsResonance::KMatrix;}
+
+ const std::vector<LauParameter*>& getFloatingParameters();
protected:
//! Function not meant to be called
diff --git a/inc/LauKMatrixPropagator.hh b/inc/LauKMatrixPropagator.hh
--- a/inc/LauKMatrixPropagator.hh
+++ b/inc/LauKMatrixPropagator.hh
@@ -6,7 +6,7 @@
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
@@ -23,15 +23,15 @@
*/
/*! \file LauKMatrixPropagator.hh
- \brief File containing declaration of LauKMatrixPropagator class.
+ \brief File containing declaration of LauKMatrixPropagator class.
*/
/*! \class LauKMatrixPropagator
- \brief Class for defining a K-matrix propagator.
+ \brief Class for defining a K-matrix propagator.
- Class used to define a K-matrix propagator.
- See the following papers for info:
- hep-ph/0204328, hep-ex/0312040, [hep-ex]0804.2089 and hep-ph/9705401.
+ Class used to define a K-matrix propagator.
+ See the following papers for info:
+ hep-ph/0204328, hep-ex/0312040, [hep-ex]0804.2089 and hep-ph/9705401.
*/
#ifndef LAU_KMATRIX_PROPAGATOR
@@ -49,7 +49,7 @@
class LauKMatrixPropagator {
- public:
+ public:
//! Constructor
/*!
\param [in] name name of the propagator
@@ -59,12 +59,12 @@
\param [in] nPoles the number of poles
\param [in] rowIndex this specifies which row of the propagator should be used when summing over the amplitude channels
*/
- LauKMatrixPropagator(const TString& name, const TString& paramFileName,
- Int_t resPairAmpInt, Int_t nChannels, Int_t nPoles,
- Int_t rowIndex = 1);
+ LauKMatrixPropagator( const TString& name, const TString& paramFileName,
+ Int_t resPairAmpInt, Int_t nChannels, Int_t nPoles,
+ Int_t rowIndex = 1 );
//! Destructor
- virtual ~LauKMatrixPropagator();
+ virtual ~LauKMatrixPropagator();
//! Calculate the invariant mass squared s
/*!
@@ -82,25 +82,25 @@
/*!
\param [in] inputFile name of the input file
*/
- void setParameters(const TString& inputFile);
+ void setParameters(const TString& inputFile);
- //! Get the scattering K matrix
- /*!
- \return the real, symmetric scattering K matrix
+ //! Get the scattering K matrix
+ /*!
+ \return the real, symmetric scattering K matrix
*/
- TMatrixD getKMatrix() const {return ScattKMatrix_;}
+ TMatrixD getKMatrix() const {return ScattKMatrix_;}
- //! Get the real part of the propagator full matrix
- /*!
- \return the real part of the propagator full matrix
- */
- TMatrixD getRealPropMatrix() const {return realProp_;}
+ //! Get the real part of the propagator full matrix
+ /*!
+ \return the real part of the propagator full matrix
+ */
+ TMatrixD getRealPropMatrix() const {return realProp_;}
- //! Get the negative imaginary part of the full propagator matrix
- /*!
- \return the negative imaginary part of the full propagator matrix
- */
- TMatrixD getNegImagPropMatrix() const {return negImagProp_;}
+ //! Get the negative imaginary part of the full propagator matrix
+ /*!
+ \return the negative imaginary part of the full propagator matrix
+ */
+ TMatrixD getNegImagPropMatrix() const {return negImagProp_;}
//! Get the real part of the term of the propagator
/*!
@@ -131,6 +131,14 @@
*/
Double_t getCouplingConstant(Int_t poleIndex, Int_t channelIndex) const;
+ //! Get coupling parameters, set according to the input file
+ /*!
+ \param [in] poleIndex number of the required pole
+ \param [in] channelIndex number of the required channel
+ \return the parameter of the coupling constant
+ */
+ LauParameter& getCouplingParameter(Int_t poleIndex, Int_t channelIndex);
+
//! Get scattering constants that were loaded from the input file
/*!
\param [in] channel1Index number of the first channel index
@@ -143,6 +151,21 @@
/*!
\return the svp term
*/
+
+ //! Get scattering parameters, set according to the input file
+ /*!
+ \param [in] channel1Index number of the first channel index
+ \param [in] channel2Index number of the second channel index
+ \return the parameter of the scattering constant
+ */
+ LauParameter& getScatteringParameter(Int_t channel1Index, Int_t channel2Index);
+
+ //! Get s0 production parameter
+ /*!
+ \return the s0Prod parameter
+ */
+ LauParameter& gets0Prod() {return s0Prod_;}
+
Double_t getProdSVPTerm() const {return prodSVP_;}
//! Get the full complex propagator term for a given channel
@@ -154,62 +177,59 @@
//! Get the DP axis identifier
/*!
- /return the value to identify the DP axis in question
+ \return the value to identify the DP axis in question
*/
Int_t getResPairAmpInt() const {return resPairAmpInt_;}
//! Get the number of channels
/*!
- /return the number of channels
+ \return the number of channels
*/
Int_t getNChannels() const {return nChannels_;}
//! Get the number of poles
/*!
- /return the number of poles
+ \return the number of poles
*/
Int_t getNPoles() const {return nPoles_;}
//! Get the propagator name
/*!
- /return the name of the propagator
+ \return the name of the propagator
*/
TString getName() const {return name_;}
- //! Get the unitary transition amplitude for the given channel
- /*!
- \param [in] s The invariant mass squared
- \param [in] channel The index number of the channel process
- \return the complex amplitude T
+ //! Get the unitary transition amplitude for the given channel
+ /*!
+ \param [in] s The invariant mass squared
+ \param [in] channel The index number of the channel process
+ \return the complex amplitude T
*/
- LauComplex getTransitionAmp(Double_t s, Int_t channel);
-
+ LauComplex getTransitionAmp(Double_t s, Int_t channel);
- //! Get the complex phase space term for the given channel and invariant mass squared
- /*!
- \param [in] s The invariant mass squared
- \param [in] channel The index number of the channel process
- \return the complex phase space term rho(channel, channel)
+ //! Get the complex phase space term for the given channel and invariant mass squared
+ /*!
+ \param [in] s The invariant mass squared
+ \param [in] channel The index number of the channel process
+ \return the complex phase space term rho(channel, channel)
*/
- LauComplex getPhaseSpaceTerm(Double_t s, Int_t channel);
+ LauComplex getPhaseSpaceTerm(Double_t s, Int_t channel);
- //! Get the Adler zero factor, which is set when updatePropagator is called
- /*!
- \return the Adler zero factor
+ //! Get the Adler zero factor, which is set when updatePropagator is called
+ /*!
+ \return the Adler zero factor
*/
- Double_t getAdlerZero() const {return adlerZeroFactor_;}
-
+ Double_t getAdlerZero() const {return adlerZeroFactor_;}
- //! Get the THat amplitude for the given s and channel number
- /*!
- \param [in] s The invariant mass squared
+ //! Get the THat amplitude for the given s and channel number
+ /*!
+ \param [in] s The invariant mass squared
\param [in] channel The index number of the channel process
\return the complex THat amplitude
*/
- LauComplex getTHat(Double_t s, Int_t channel);
+ LauComplex getTHat(Double_t s, Int_t channel);
-
- protected:
+ protected:
//! Calculate the scattering K-matrix for the given value of s
/*!
\param [in] s the invariant mass squared
@@ -222,12 +242,42 @@
*/
void calcRhoMatrix(Double_t s);
+ //! Calculate the (real) gamma angular-momentum barrier matrix
+ /*!
+ \param [in] s the invariant mass squared
+ */
+ void calcGammaMatrix(Double_t s);
+
+ //! Calculate the Xspin matrix
+ void calcXspinMatrix();
+
+ //! Calculate the DK P-wave gamma angular-momentum barrier
+ /*!
+ \param [in] s the invariant mass squared
+ \return the centrifugal barrier factor for L=0,1, or 2
+ */
+ Double_t calcGamma(Int_t iCh, Double_t s, Int_t L) const;
+
//! Calulate the term 1/(m_pole^2 - s) for the scattering and production K-matrix formulae
/*!
\param [in] s the invariant mass squared
*/
void calcPoleDenomVect(Double_t s);
+ //! Calculate the D0K+ phase space factor
+ /*!
+ \param [in] s the invariant mass squared
+ \return the complex phase space factor
+ */
+ LauComplex calcD0KRho(Double_t s) const;
+
+ //! Calculate the D*0K+ phase space factor
+ /*!
+ \param [in] s the invariant mass squared
+ \return the complex phase space factor
+ */
+ LauComplex calcDstar0KRho(Double_t s) const;
+
//! Calculate the pipi phase space factor
/*!
\param [in] s the invariant mass squared
@@ -318,22 +368,22 @@
Bool_t checkPhaseSpaceType(Int_t phaseSpaceInt) const;
- //! Get the unitary transition amplitude matrix for the given kinematics
- /*!
- \param [in] kinematics The pointer to the constant kinematics
+ //! Get the unitary transition amplitude matrix for the given kinematics
+ /*!
+ \param [in] kinematics The pointer to the constant kinematics
*/
- void getTMatrix(const LauKinematics* kinematics);
+ void getTMatrix(const LauKinematics* kinematics);
- //! Get the unitary transition amplitude matrix for the given kinematics
- /*!
- \param [in] s The invariant mass squared of the system
+ //! Get the unitary transition amplitude matrix for the given kinematics
+ /*!
+ \param [in] s The invariant mass squared of the system
*/
- void getTMatrix(Double_t s);
+ void getTMatrix(Double_t s);
+
+ //! Get the square root of the phase space matrix
+ void getSqrtRhoMatrix();
- //! Get the square root of the phase space matrix
- void getSqrtRhoMatrix();
-
- private:
+ private:
//! Copy constructor (not implemented)
LauKMatrixPropagator(const LauKMatrixPropagator& rhs);
@@ -341,39 +391,45 @@
LauKMatrixPropagator& operator=(const LauKMatrixPropagator& rhs);
//! Create a map for the K-matrix parameters
- typedef std::map<int, std::vector<LauParameter> > KMatrixParamMap;
+ typedef std::map<int, std::vector<LauParameter> > KMatrixParamMap;
- //! Initialise and set the dimensions for the internal matrices and parameter arrays
- void initialiseMatrices();
+ //! Initialise and set the dimensions for the internal matrices and parameter arrays
+ void initialiseMatrices();
- //! Store the (phase space) channel indices from a line in the parameter file
- /*!
- \param [in] theLine Vector of strings corresponding to the line from the parameter file
+ //! Store the (phase space) channel indices from a line in the parameter file
+ /*!
+ \param [in] theLine Vector of strings corresponding to the line from the parameter file
*/
- void storeChannels(const std::vector<std::string>& theLine);
+ void storeChannels(const std::vector<std::string>& theLine);
- //! Store the pole mass and couplings from a line in the parameter file
- /*!
- \param [in] theLine Vector of strings corresponding to the line from the parameter file
+ //! Store the pole mass and couplings from a line in the parameter file
+ /*!
+ \param [in] theLine Vector of strings corresponding to the line from the parameter file
*/
- void storePole(const std::vector<std::string>& theLine);
+ void storePole(const std::vector<std::string>& theLine);
- //! Store the scattering coefficients from a line in the parameter file
- /*!
- \param [in] theLine Vector of strings corresponding to the line from the parameter file
+ //! Store the scattering coefficients from a line in the parameter file
+ /*!
+ \param [in] theLine Vector of strings corresponding to the line from the parameter file
*/
- void storeScattering(const std::vector<std::string>& theLine);
+ void storeScattering(const std::vector<std::string>& theLine);
- //! Store miscelleanous parameters from a line in the parameter file
- /*!
- \param [in] keyword the name of the parameter to be set
- \param [in] parString the string containing the value of the parameter
+ //! Store the channels' characteristic radii from a line in the parameter file
+ /*!
+ \param [in] theLine Vector of strings corresponding to the line from the parameter file
*/
- void storeParameter(const TString& keyword, const TString& parString);
+ void storeRadii(const std::vector<std::string>& theLine);
+
+ //! Store miscelleanous parameters from a line in the parameter file
+ /*!
+ \param [in] keyword the name of the parameter to be set
+ \param [in] parString the string containing the value of the parameter
+ */
+ void storeParameter(const TString& keyword, const TString& parString);
- //! String to store the propagator name
+ //! String to store the propagator name
TString name_;
//! Name of the input parameter file
TString paramFileName_;
@@ -397,8 +453,8 @@
// Please keep Zero at the start and leave TotChannels at the end
// whenever more channels are added to this.
//! Integers to specify the allowed channels for the phase space calculations
- enum KMatrixChannels {Zero, PiPi, KK, FourPi, EtaEta, EtaEtaP,
- KPi, KEtaP, KThreePi, TotChannels};
+ enum KMatrixChannels {Zero, PiPi, KK, FourPi, EtaEta, EtaEtaP,
+ KPi, KEtaP, KThreePi, D0K_Pwave, Dstar0K_Swave, TotChannels};
//! Scattering K-matrix
TMatrixD ScattKMatrix_;
@@ -406,6 +462,10 @@
TMatrixD ReRhoMatrix_;
//! Imaginary part of the phase space density diagonal matrix
TMatrixD ImRhoMatrix_;
+ //! Gamma angular-momentum barrier matrix
+ TMatrixD GammaMatrix_;
+ //! Xspin matrix
+ TMatrixD XspinMatrix_;
//! Identity matrix
TMatrixD IMatrix_;
//! Null matrix
@@ -415,10 +475,10 @@
TMatrixD ReSqrtRhoMatrix_;
//! Imaginary part of the square root of the phase space density diagonal matrix
TMatrixD ImSqrtRhoMatrix_;
- //! Real part of the unitary T matrix
- TMatrixD ReTMatrix_;
- //! Imaginary part of the unitary T matrix
- TMatrixD ImTMatrix_;
+ //! Real part of the unitary T matrix
+ TMatrixD ReTMatrix_;
+ //! Imaginary part of the unitary T matrix
+ TMatrixD ImTMatrix_;
//! Number of channels
Int_t nChannels_;
@@ -426,12 +486,14 @@
Int_t nPoles_;
//! Vector of squared pole masses
- std::vector<LauParameter> mSqPoles_;
+ std::vector<LauParameter> mSqPoles_;
//! Array of coupling constants
- LauParArray gCouplings_;
+ LauParArray gCouplings_;
//! Array of scattering SVP values
- LauParArray fScattering_;
+ LauParArray fScattering_;
+ //! Vector of characteristic radii
+ std::vector<Double_t> radii_;
//! Vector of phase space types
std::vector<Int_t> phaseSpaceTypes_;
@@ -481,17 +543,28 @@
Double_t fourPiFactor1_;
//! Factor used to calculate the pipipipi phase space term
Double_t fourPiFactor2_;
+ //! Defined as (mD0+mK)^2
+ Double_t mD0KSumSq_;
+ //! Defined as (mD0-mK)^2
+ Double_t mD0KDiffSq_;
+ //! Defined as (mD*0+mK)^2
+ Double_t mDstar0KSumSq_;
+ //! Defined as (mD*0-mK)^2
+ Double_t mDstar0KDiffSq_;
//! Multiplicative factor containing various Adler zero constants
Double_t adlerZeroFactor_;
//! Tracks if all params have been set
Bool_t parametersSet_;
+ //! Helicity angle cosine
+ Double_t cosHel_;
+
//! Control the output of the functions
Bool_t verbose_;
- //! Control if scattering constants are channel symmetric: f_ji = f_ij
- Bool_t scattSymmetry_;
+ //! Control if scattering constants are channel symmetric: f_ji = f_ij
+ Bool_t scattSymmetry_;
ClassDef(LauKMatrixPropagator,0) // K-matrix amplitude model
};
diff --git a/src/LauKMatrixProdPole.cc b/src/LauKMatrixProdPole.cc
--- a/src/LauKMatrixProdPole.cc
+++ b/src/LauKMatrixProdPole.cc
@@ -106,3 +106,21 @@
return amp;
}
+
+const std::vector<LauParameter*>& LauKMatrixProdPole::getFloatingParameters()
+{
+
+ this->clearFloatingParameters();
+
+ Int_t nChannels = thePropagator_->getNChannels();
+
+ for (int jChannel = 0 ; jChannel < nChannels ; jChannel++)
+ {
+ LauParameter& par_gj_ = thePropagator_->getCouplingParameter(poleIndex_, jChannel);
+ if ( !par_gj_.fixed() )
+ this->addFloatingParameter( &par_gj_ );
+ }
+
+ return this->getParameters();
+
+}
\ No newline at end of file
diff --git a/src/LauKMatrixProdSVP.cc b/src/LauKMatrixProdSVP.cc
--- a/src/LauKMatrixProdSVP.cc
+++ b/src/LauKMatrixProdSVP.cc
@@ -94,3 +94,26 @@
}
+const std::vector<LauParameter*>& LauKMatrixProdSVP::getFloatingParameters()
+{
+
+ this->clearFloatingParameters();
+
+ Int_t nChannels = thePropagator_->getNChannels();
+
+ for (int jChannel = 0 ; jChannel < nChannels ; jChannel++)
+ {
+ LauParameter& par_f_ = thePropagator_->getScatteringParameter(channelIndex_, jChannel);
+ if ( !par_f_.fixed() )
+ this->addFloatingParameter( &par_f_ );
+ }
+
+ LauParameter& par_s0Prod_ = thePropagator_->gets0Prod();
+ if ( !par_s0Prod_.fixed() )
+ {
+ this->addFloatingParameter( &par_s0Prod_ );
+ }
+
+ return this->getParameters();
+
+}
\ No newline at end of file
diff --git a/src/LauKMatrixPropagator.cc b/src/LauKMatrixPropagator.cc
--- a/src/LauKMatrixPropagator.cc
+++ b/src/LauKMatrixPropagator.cc
@@ -6,7 +6,7 @@
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
@@ -23,7 +23,7 @@
*/
/*! \file LauKMatrixPropagator.cc
- \brief File containing implementation of LauKMatrixPropagator class.
+ \brief File containing implementation of LauKMatrixPropagator class.
*/
#include "LauKMatrixPropagator.hh"
@@ -45,8 +45,8 @@
ClassImp(LauKMatrixPropagator)
LauKMatrixPropagator::LauKMatrixPropagator(const TString& name, const TString& paramFile,
- Int_t resPairAmpInt, Int_t nChannels,
- Int_t nPoles, Int_t rowIndex) :
+ Int_t resPairAmpInt, Int_t nChannels,
+ Int_t nPoles, Int_t rowIndex) :
name_(name),
paramFileName_(paramFile),
resPairAmpInt_(resPairAmpInt),
@@ -70,6 +70,10 @@
k3piFactor_(TMath::Power((1.44 - mK3piDiffSq_)/1.44, -2.5)),
fourPiFactor1_(16.0*LauConstants::mPiSq),
fourPiFactor2_(TMath::Sqrt(1.0 - fourPiFactor1_)),
+ mD0KSumSq_((LauConstants::mD0 + LauConstants::mK)*(LauConstants::mD0 + LauConstants::mK)),
+ mD0KDiffSq_((LauConstants::mD0 - LauConstants::mK)*(LauConstants::mD0 - LauConstants::mK)),
+ mDstar0KSumSq_((2.00696 + LauConstants::mK)*(2.00696 + LauConstants::mK)),
+ mDstar0KDiffSq_((2.00696 - LauConstants::mK)*(2.00696 - LauConstants::mK)),
adlerZeroFactor_(0.0),
parametersSet_(kFALSE),
verbose_(kFALSE),
@@ -77,11 +81,11 @@
{
// Constructor
- // Check that the index is OK
- if (index_ < 0 || index_ >= nChannels_) {
- std::cerr << "ERROR in LauKMatrixPropagator constructor. The rowIndex, which is set to "
- << rowIndex << ", must be between 1 and the number of channels "
- << nChannels_ << std::endl;
+ // Check that the index is OK
+ if (index_ < 0 || index_ >= nChannels_) {
+ std::cerr << "ERROR in LauKMatrixPropagator constructor. The rowIndex, which is set to "
+ << rowIndex << ", must be between 1 and the number of channels "
+ << nChannels_ << std::endl;
gSystem->Exit(EXIT_FAILURE);
}
@@ -93,9 +97,10 @@
// Destructor
realProp_.Clear();
negImagProp_.Clear();
- ScattKMatrix_.Clear();
- ReRhoMatrix_.Clear();
- ImRhoMatrix_.Clear();
+ ScattKMatrix_.Clear();
+ ReRhoMatrix_.Clear();
+ ImRhoMatrix_.Clear();
+ GammaMatrix_.Clear();
ReTMatrix_.Clear();
ImTMatrix_.Clear();
IMatrix_.Clear();
@@ -139,7 +144,7 @@
void LauKMatrixPropagator::updatePropagator(const LauKinematics* kinematics)
{
- // Calculate the K-matrix propagator for the given s value.
+ // Calculate the K-matrix propagator for the given s value.
// The K-matrix amplitude is given by
// T_i = sum_{ij} (I - iK*rho)^-1 * P_j, where P is the production K-matrix.
// i = index for the state (e.g. S-wave index = 0).
@@ -153,10 +158,13 @@
if (resPairAmpInt_ == 1) {
s = kinematics->getm23Sq();
+ cosHel_ = kinematics->getc23();
} else if (resPairAmpInt_ == 2) {
s = kinematics->getm13Sq();
+ cosHel_ = kinematics->getc13();
} else if (resPairAmpInt_ == 3) {
s = kinematics->getm12Sq();
+ cosHel_ = kinematics->getc12();
}
this->updatePropagator(s);
@@ -165,7 +173,7 @@
void LauKMatrixPropagator::updatePropagator(Double_t s)
{
- // Calculate the K-matrix propagator for the given s value.
+ // Calculate the K-matrix propagator for the given s value.
// The K-matrix amplitude is given by
// T_i = sum_{ij} (I - iK*rho)^-1 * P_j, where P is the production K-matrix.
// i = index for the state (e.g. S-wave index = 0).
@@ -193,20 +201,28 @@
// if the quantity s is below various threshold values (analytic continuation).
this->calcRhoMatrix(s);
- // Calculate K*rho (real and imaginary parts, since rho can be complex)
- TMatrixD K_realRho(ScattKMatrix_);
- K_realRho *= ReRhoMatrix_;
- TMatrixD K_imagRho(ScattKMatrix_);
- K_imagRho *= ImRhoMatrix_;
+ // Calculate the angular momentum barrier matrix, which is diagonal
+ this->calcGammaMatrix(s);
+
+ // Calculate the Xspin matrix, which is diagonal
+ this->calcXspinMatrix();
+
+ // Calculate K*rho*(gamma^2) (real and imaginary parts, since rho can be complex)
+ TMatrixD K_realRhoGammasq(ScattKMatrix_);
+ K_realRhoGammasq *= ReRhoMatrix_;
+ K_realRhoGammasq *= (GammaMatrix_*GammaMatrix_);
+ TMatrixD K_imagRhoGammasq(ScattKMatrix_);
+ K_imagRhoGammasq *= ImRhoMatrix_;
+ K_imagRhoGammasq *= (GammaMatrix_*GammaMatrix_);
// A = I + K*Imag(rho), B = -K*Real(Rho)
// Calculate C and D matrices such that (A + iB)*(C + iD) = I,
// ie. C + iD = (I - i K*rho)^-1, separated into real and imaginary parts.
// realProp C = (A + B A^-1 B)^-1, imagProp D = -A^-1 B C
TMatrixD A(IMatrix_);
- A += K_imagRho;
+ A += K_imagRhoGammasq;
TMatrixD B(zeroMatrix_);
- B -= K_realRho;
+ B -= K_realRhoGammasq;
TMatrixD invA(TMatrixD::kInverted, A);
TMatrixD invA_B(invA);
@@ -216,7 +232,6 @@
TMatrixD invC(A);
invC += B_invA_B;
-
// Set the real part of the propagator matrix ("C")
realProp_ = TMatrixD(TMatrixD::kInverted, invC);
@@ -226,6 +241,15 @@
negImagProp_ = TMatrixD(invA);
negImagProp_ *= BC;
+ // Pre-multiply by the Gamma matrix:
+ realProp_ = GammaMatrix_ * realProp_;
+ negImagProp_ = GammaMatrix_ * negImagProp_;
+
+ // Pre-multiply by the Xspin matrix:
+ realProp_ = XspinMatrix_ * realProp_;
+ negImagProp_ = XspinMatrix_ * negImagProp_;
+
+
// Also calculate the production SVP term, since this uses Adler-zero parameters
// defined in the parameter file.
this->updateProdSVPTerm(s);
@@ -261,7 +285,9 @@
// 3) Definition of scattering f_{ij} constants: scattering index (1 to N), channel values
// "Scatt index f_{i1} f_{i2} ... f_{iN}", where i = index
// 4) Various Adler zero and scattering constants; each line is "name value".
- // Possible names are mSq0, s0Scatt, s0Prod, sA, sA0
+ // Possible names are mSq0, s0Scatt, s0Prod, sA, sA0
+ // 5) Characteristic radius for each channel. If not set here, defaults to 3.0 GeV^{-1}
+ // "Radii radChannel1 radChannel2 ... radChannelN"
// By default, the scattering constants are symmetrised: f_{ji} = f_{ij}.
// To not assume this use "ScattSymmetry 0" on a line
@@ -272,9 +298,9 @@
UInt_t nTotLines = readFile.getTotalNumLines();
if (nTotLines == 0) {
- std::cerr << "ERROR in LauKMatrixPropagator::setParameters : K-matrix parameter file not present - exiting." << std::endl;
+ std::cerr << "ERROR in LauKMatrixPropagator::setParameters : K-matrix parameter file not present - exiting." << std::endl;
- gSystem->Exit(EXIT_FAILURE);
+ gSystem->Exit(EXIT_FAILURE);
}
UInt_t iLine(0);
@@ -305,6 +331,11 @@
// Scattering terms
this->storeScattering(theLine);
+ } else if (!keyword.CompareTo("radii")) {
+
+ // Values of characteristic radius
+ this->storeRadii(theLine);
+
} else {
// Usually Adler-zero constants
@@ -365,14 +396,30 @@
ReRhoMatrix_.ResizeTo(nChannels_, nChannels_);
ImRhoMatrix_.ResizeTo(nChannels_, nChannels_);
+ // Gamma matrices
+ GammaMatrix_.Clear();
+ GammaMatrix_.ResizeTo(nChannels_, nChannels_);
+
+ // Xspin matrices
+ XspinMatrix_.Clear();
+ XspinMatrix_.ResizeTo(nChannels_, nChannels_);
+ cosHel_=0.;
+
+ // Characteristic radius (diagonal) vector (default to 3.0)
+ radii_.clear();
+ radii_.resize(nChannels_);
+ for (Int_t iChannel = 0; iChannel < nChannels_; iChannel++) {
+ radii_.push_back(3.0);
+ }
+
// Square-root phase space matrices
ReSqrtRhoMatrix_.Clear(); ImSqrtRhoMatrix_.Clear();
ReSqrtRhoMatrix_.ResizeTo(nChannels_, nChannels_);
ImSqrtRhoMatrix_.ResizeTo(nChannels_, nChannels_);
// T matrices
- ReTMatrix_.Clear(); ImTMatrix_.Clear();
- ReTMatrix_.ResizeTo(nChannels_, nChannels_);
+ ReTMatrix_.Clear(); ImTMatrix_.Clear();
+ ReTMatrix_.ResizeTo(nChannels_, nChannels_);
ImTMatrix_.ResizeTo(nChannels_, nChannels_);
// For the coupling and scattering constants, use LauParArrays instead of TMatrices
@@ -413,7 +460,7 @@
Int_t nTypes = static_cast<Int_t>(theLine.size()) - 1;
if (nTypes != nChannels_) {
cerr<<"Error in LauKMatrixPropagator::storeChannels. The input file defines "
- <<nTypes<<" channels when "<<nChannels_<<" are expected"<<endl;
+ <<nTypes<<" channels when "<<nChannels_<<" are expected"<<endl;
return;
}
@@ -424,11 +471,11 @@
if (checkChannel == kTRUE) {
cout<<"Adding phase space channel index "<<phaseSpaceInt
- <<" to K-matrix propagator "<<name_<<endl;
+ <<" to K-matrix propagator "<<name_<<endl;
phaseSpaceTypes_[iChannel] = phaseSpaceInt;
} else {
cerr<<"Phase space channel index "<<phaseSpaceInt
- <<" should be between 1 and "<<LauKMatrixPropagator::TotChannels-1<<endl;
+ <<" should be between 1 and "<<LauKMatrixPropagator::TotChannels-1<<endl;
}
}
@@ -460,11 +507,11 @@
for (Int_t iChannel = 0; iChannel < nChannels_; iChannel++) {
Double_t couplingConst = std::atof(theLine[iChannel+3].c_str());
- LauParameter couplingParam(couplingConst);
+ LauParameter couplingParam(Form("KM_gCoupling_%i_%i",poleIndex,iChannel),couplingConst);
gCouplings_[poleIndex][iChannel] = couplingParam;
cout<<"Added coupling parameter g^{"<<poleIndex+1<<"}_"
- <<iChannel+1<<" = "<<couplingConst<<endl;
+ <<iChannel+1<<" = "<<couplingConst<<endl;
}
@@ -473,8 +520,8 @@
} else {
cerr<<"Error in LauKMatrixPropagator::storePole. Expecting "<<nExpect
- <<" numbers for pole definition but found "<<nWords
- <<" values instead"<<endl;
+ <<" numbers for pole definition but found "<<nWords
+ <<" values instead"<<endl;
}
@@ -503,7 +550,7 @@
fScattering_[scattIndex][iChannel] = scattParam;
cout<<"Added scattering parameter f("<<scattIndex+1<<","
- <<iChannel+1<<") = "<<scattConst<<endl;
+ <<iChannel+1<<") = "<<scattConst<<endl;
}
@@ -512,11 +559,42 @@
} else {
cerr<<"Error in LauKMatrixPropagator::storeScattering. Expecting "<<nExpect
- <<" numbers for scattering constants definition but found "<<nWords
- <<" values instead"<<endl;
+ <<" numbers for scattering constants definition but found "<<nWords
+ <<" values instead"<<endl;
}
+}
+
+void LauKMatrixPropagator::storeRadii(const std::vector<std::string>& theLine)
+{
+
+ // Store the characteristic radii (measured in GeV^{-1})
+ // Each line will contain: Radii RadiusConstantsPerChannel
+
+ // Check that the line has nChannels_ + 1 strings
+ Int_t nWords = static_cast<Int_t>(theLine.size());
+ Int_t nExpect = nChannels_ + 1;
+
+ if (nWords == nExpect) {
+
+ for (Int_t iChannel = 0; iChannel < nChannels_; iChannel++) {
+
+ Double_t radiusConst = std::atof(theLine[iChannel+1].c_str());
+ radii_[iChannel] = radiusConst;
+
+ cout<<"Added K-matrix radius "<<radiusConst<<" for channel "
+ <<iChannel<<endl;
+
+ }
+
+ } else {
+
+ cerr<<"Error in LauKMatrixPropagator::storeRadii. Expecting "<<nExpect
+ <<" numbers for scattering constants definition but found "<<nWords
+ <<" values instead"<<endl;
+
+ }
}
@@ -565,7 +643,6 @@
}
-
void LauKMatrixPropagator::calcScattKMatrix(Double_t s)
{
@@ -663,6 +740,18 @@
}
+LauParameter& LauKMatrixPropagator::getCouplingParameter(Int_t poleIndex, Int_t channelIndex)
+{
+
+ if ( (parametersSet_ == kFALSE) || (poleIndex < 0 || poleIndex >= nPoles_) || (channelIndex < 0 || channelIndex >= nChannels_) ) {
+ std::cerr << "ERROR from LauKMatrixPropagator::getCouplingParameter(). Invalid coupling." << std::endl;
+ gSystem->Exit(EXIT_FAILURE);
+ }
+
+ //std::cout << "Minvalue + range for " << poleIndex << ", " << channelIndex << ": " << gCouplings_[poleIndex][channelIndex].minValue() << " => + " << gCouplings_[poleIndex][channelIndex].range() <<
+ // " and init value: " << gCouplings_[poleIndex][channelIndex].initValue() << std::endl;
+ return gCouplings_[poleIndex][channelIndex];
+}
Double_t LauKMatrixPropagator::getScatteringConstant(Int_t channel1Index, Int_t channel2Index) const
{
@@ -676,6 +765,17 @@
}
+LauParameter& LauKMatrixPropagator::getScatteringParameter(Int_t channel1Index, Int_t channel2Index)
+{
+
+ if ( (parametersSet_ == kFALSE) || (channel1Index < 0 || channel1Index >= nChannels_) || (channel2Index < 0 || channel2Index >= nChannels_) ) {
+ std::cerr << "ERROR from LauKMatrixPropagator::getScatteringParameter(). Invalid chanel index." << std::endl;
+ gSystem->Exit(EXIT_FAILURE);
+ }
+
+ return fScattering_[channel1Index][channel2Index];
+}
+
Double_t LauKMatrixPropagator::calcSVPTerm(Double_t s, Double_t s0) const
{
@@ -686,7 +786,7 @@
Double_t deltaS = s - s0;
if (TMath::Abs(deltaS) > 1.0e-6) {
result = (mSq0_.unblindValue() - s0)/deltaS;
- }
+ }
return result;
@@ -717,7 +817,97 @@
Double_t deltaS = s - sA0Val;
if (TMath::Abs(deltaS) > 1e-6) {
adlerZeroFactor_ = (s - sAConst_)*(1.0 - sA0Val)/deltaS;
- }
+ }
+
+}
+
+void LauKMatrixPropagator::calcGammaMatrix(Double_t s)
+{
+ // Calculate the gamma angular momentum barrier matrix
+ // for the given invariant mass squared quantity, s.
+
+ // Initialise all entries to zero
+ GammaMatrix_.Zero();
+
+ Double_t gamma(0.0);
+ Int_t phaseSpaceIndex(0);
+
+ for (Int_t iChannel (0); iChannel < nChannels_; ++iChannel) {
+
+ phaseSpaceIndex = phaseSpaceTypes_[iChannel];
+
+ if (phaseSpaceIndex == LauKMatrixPropagator::D0K_Pwave) {
+ gamma = this->calcGamma(iChannel,s,1);
+ } else {
+ gamma = 1.0; // S-wave
+ }
+
+ if (verbose_) {
+ cout<<"GammaMatrix("<<iChannel<<", "<<iChannel<<") = "<<gamma<<endl;
+ }
+
+ GammaMatrix_(iChannel, iChannel) = gamma;
+
+ }
+
+}
+
+Double_t LauKMatrixPropagator::calcGamma(Int_t iCh, Double_t s, Int_t L) const
+{
+ // Calculate the DK P-wave angular momentum barrier factor
+ Double_t gamma(0.0);
+
+ Double_t sqrtTerm = (s - mD0KSumSq_) * (s - mD0KDiffSq_) / (4*s);
+ Double_t q(0.0);
+
+ if (L < 0 || L > 2) {
+ std::cerr << "ERROR in LauKMatrixPropagator::calcGamma(). Centrifugal barrier factor can only be computed for L=0,1,2 using this function. "
+ << std::endl;
+ gSystem->Exit(EXIT_FAILURE);
+ }
+
+ if (sqrtTerm < 0.0) {
+ std::cerr << "ERROR in LauKMatrixPropagator::calcGamma(). The centre of mass energy for the D0K system is below the m(D0K) threshold. "
+ << "This should not happen" << std::endl;
+ gSystem->Exit(EXIT_FAILURE);
+ } else {
+ q = TMath::Sqrt(sqrtTerm);
+ }
+
+ gamma = pow(q,L);
+ gamma /= pow( q*q + (1./radii_[iCh]) , L/2. );
+
+ return gamma;
+}
+
+void LauKMatrixPropagator::calcXspinMatrix()
+{
+ // Calculate the X spin matrix (diagonal: 1 for S wave channel, cos(theta) for P wave channel)
+
+ // Initialise all entries to zero
+ XspinMatrix_.Zero();
+
+ Double_t Xspin(0.0);
+ Int_t phaseSpaceIndex(0);
+
+ for (Int_t iChannel (0); iChannel < nChannels_; ++iChannel) {
+
+ phaseSpaceIndex = phaseSpaceTypes_[iChannel];
+
+ if (phaseSpaceIndex == LauKMatrixPropagator::D0K_Pwave) {
+
+ Xspin = cosHel_;
+ } else {
+ Xspin = 1.0; // S-wave
+ }
+
+ if (verbose_) {
+ cout<<"XspinMatrix("<<iChannel<<", "<<iChannel<<") = "<<Xspin<<endl;
+ }
+
+ XspinMatrix_(iChannel, iChannel) = Xspin;
+
+ }
}
@@ -729,8 +919,8 @@
// The matrix can be complex if s is below threshold (so that
// the amplitude continues analytically).
- // Initialise all entries to zero
- ReRhoMatrix_.Zero(); ImRhoMatrix_.Zero();
+ // Initialise all entries to zero
+ ReRhoMatrix_.Zero(); ImRhoMatrix_.Zero();
LauComplex rho(0.0, 0.0);
Int_t phaseSpaceIndex(0);
@@ -755,6 +945,10 @@
rho = this->calcKEtaPRho(s);
} else if (phaseSpaceIndex == LauKMatrixPropagator::KThreePi) {
rho = this->calcKThreePiRho(s);
+ } else if (phaseSpaceIndex == LauKMatrixPropagator::D0K_Pwave) {
+ rho = this->calcD0KRho(s);
+ } else if (phaseSpaceIndex == LauKMatrixPropagator::Dstar0K_Swave) {
+ rho = this->calcDstar0KRho(s);
}
if (verbose_) {
@@ -763,12 +957,48 @@
}
ReRhoMatrix_(iChannel, iChannel) = rho.re();
- ImRhoMatrix_(iChannel, iChannel) = rho.im();
+ ImRhoMatrix_(iChannel, iChannel) = rho.im();
}
}
+LauComplex LauKMatrixPropagator::calcD0KRho(Double_t s) const
+{
+ // Calculate the D0K+ phase space factor
+ LauComplex rho(0.0, 0.0);
+ if (TMath::Abs(s) < 1e-10) {return rho;}
+
+ Double_t sqrtTerm1 = (-mD0KSumSq_/s) + 1.0;
+ Double_t sqrtTerm2 = (-mD0KDiffSq_/s) + 1.0;
+ Double_t sqrtTerm = sqrtTerm1*sqrtTerm2;
+ if (sqrtTerm < 0.0) {
+ rho.setImagPart( TMath::Sqrt(-sqrtTerm) );
+ } else {
+ rho.setRealPart( TMath::Sqrt(sqrtTerm) );
+ }
+
+ return rho;
+}
+
+LauComplex LauKMatrixPropagator::calcDstar0KRho(Double_t s) const
+{
+ // Calculate the Dstar0K+ phase space factor
+ LauComplex rho(0.0, 0.0);
+ if (TMath::Abs(s) < 1e-10) {return rho;}
+
+ Double_t sqrtTerm1 = (-mDstar0KSumSq_/s) + 1.0;
+ Double_t sqrtTerm2 = (-mDstar0KDiffSq_/s) + 1.0;
+ Double_t sqrtTerm = sqrtTerm1*sqrtTerm2;
+ if (sqrtTerm < 0.0) {
+ rho.setImagPart( TMath::Sqrt(-sqrtTerm) );
+ } else {
+ rho.setRealPart( TMath::Sqrt(sqrtTerm) );
+ }
+
+ return rho;
+}
+
LauComplex LauKMatrixPropagator::calcPiPiRho(Double_t s) const
{
// Calculate the pipi phase space factor
@@ -804,30 +1034,30 @@
LauComplex LauKMatrixPropagator::calcFourPiRho(Double_t s) const
{
// Calculate the 4pi phase space factor. This uses a 6th-order polynomial
- // parameterisation that approximates the multi-body phase space double integral
- // defined in Eq 4 of the A&S paper hep-ph/0204328. This form agrees with the
- // BaBar model (another 6th order polynomial from s^4 down to 1/s^2), but avoids the
- // exponential increase at small values of s (~< 0.1) arising from 1/s and 1/s^2.
- // Eq 4 is evaluated for each value of s by assuming incremental steps of 1e-3 GeV^2
- // for s1 and s2, the invariant energy squared of each of the di-pion states,
- // with the integration limits of s1 = (2*mpi)^2 to (sqrt(s) - 2*mpi)^2 and
- // s2 = (2*mpi)^2 to (sqrt(s) - sqrt(s1))^2. The mass M of the rho is taken to be
- // 0.775 GeV and the energy-dependent width of the 4pi system
- // Gamma(s) = gamma_0*rho1^3(s), where rho1 = sqrt(1.0 - 4*mpiSq/s) and gamma_0 is
- // the "width" of the 4pi state at s = 1, which is taken to be 0.3 GeV
- // (~75% of the total width from PDG estimates of the f0(1370) -> 4pi state).
- // The normalisation term rho_0 is found by ensuring that the phase space integral
- // at s = 1 is equal to sqrt(1.0 - 16*mpiSq/s). Note that the exponent for this
- // factor in hep-ph/0204328 is wrong; it should be 0.5, i.e. sqrt, not n = 1 to 5.
- // Plotting the value of this double integral as a function of s can then be fitted
- // to a 6th-order polynomial (for s < 1), which is the result used below
+ // parameterisation that approximates the multi-body phase space double integral
+ // defined in Eq 4 of the A&S paper hep-ph/0204328. This form agrees with the
+ // BaBar model (another 6th order polynomial from s^4 down to 1/s^2), but avoids the
+ // exponential increase at small values of s (~< 0.1) arising from 1/s and 1/s^2.
+ // Eq 4 is evaluated for each value of s by assuming incremental steps of 1e-3 GeV^2
+ // for s1 and s2, the invariant energy squared of each of the di-pion states,
+ // with the integration limits of s1 = (2*mpi)^2 to (sqrt(s) - 2*mpi)^2 and
+ // s2 = (2*mpi)^2 to (sqrt(s) - sqrt(s1))^2. The mass M of the rho is taken to be
+ // 0.775 GeV and the energy-dependent width of the 4pi system
+ // Gamma(s) = gamma_0*rho1^3(s), where rho1 = sqrt(1.0 - 4*mpiSq/s) and gamma_0 is
+ // the "width" of the 4pi state at s = 1, which is taken to be 0.3 GeV
+ // (~75% of the total width from PDG estimates of the f0(1370) -> 4pi state).
+ // The normalisation term rho_0 is found by ensuring that the phase space integral
+ // at s = 1 is equal to sqrt(1.0 - 16*mpiSq/s). Note that the exponent for this
+ // factor in hep-ph/0204328 is wrong; it should be 0.5, i.e. sqrt, not n = 1 to 5.
+ // Plotting the value of this double integral as a function of s can then be fitted
+ // to a 6th-order polynomial (for s < 1), which is the result used below
LauComplex rho(0.0, 0.0);
if (TMath::Abs(s) < 1e-10) {return rho;}
if (s <= 1.0) {
- Double_t rhoTerm = ((1.07885*s + 0.13655)*s - 0.29744)*s - 0.20840;
- rhoTerm = ((rhoTerm*s + 0.13851)*s - 0.01933)*s + 0.00051;
+ Double_t rhoTerm = ((1.07885*s + 0.13655)*s - 0.29744)*s - 0.20840;
+ rhoTerm = ((rhoTerm*s + 0.13851)*s - 0.01933)*s + 0.00051;
// For some values of s (below 2*mpi), this term is a very small
// negative number. Check for this and set the rho term to zero.
if (rhoTerm < 0.0) {rhoTerm = 0.0;}
@@ -858,15 +1088,15 @@
LauComplex LauKMatrixPropagator::calcEtaEtaPRho(Double_t s) const
{
// Calculate the eta-eta' phase space factor. Note that the
- // mass difference term m_eta - m_eta' is not included,
- // since this corresponds to a "t or u-channel crossing",
- // which means that we cannot simply analytically continue
- // this part of the phase space factor below threshold, which
- // we can do for s-channel contributions. This is actually an
- // unsolved problem, e.g. see Guo et al 1409.8652, and
- // Danilkin et al 1409.7708. Anisovich and Sarantsev in
- // hep-ph/0204328 "solve" this issue by setting the mass
- // difference term to unity, which is what we do here...
+ // mass difference term m_eta - m_eta' is not included,
+ // since this corresponds to a "t or u-channel crossing",
+ // which means that we cannot simply analytically continue
+ // this part of the phase space factor below threshold, which
+ // we can do for s-channel contributions. This is actually an
+ // unsolved problem, e.g. see Guo et al 1409.8652, and
+ // Danilkin et al 1409.7708. Anisovich and Sarantsev in
+ // hep-ph/0204328 "solve" this issue by setting the mass
+ // difference term to unity, which is what we do here...
LauComplex rho(0.0, 0.0);
if (TMath::Abs(s) < 1e-10) {return rho;}
@@ -875,7 +1105,7 @@
if (sqrtTerm < 0.0) {
rho.setImagPart( TMath::Sqrt(-sqrtTerm) );
} else {
- rho.setRealPart( TMath::Sqrt(sqrtTerm) );
+ rho.setRealPart( TMath::Sqrt(sqrtTerm) );
}
return rho;
@@ -957,13 +1187,13 @@
LauComplex LauKMatrixPropagator::getTransitionAmp(Double_t s, Int_t channel)
{
- // Get the complex (unitary) transition amplitude T for the given channel
+ // Get the complex (unitary) transition amplitude T for the given channel
LauComplex TAmp(0.0, 0.0);
channel -= 1;
if (channel < 0 || channel >= nChannels_) {return TAmp;}
- this->getTMatrix(s);
+ this->getTMatrix(s);
TAmp.setRealPart(ReTMatrix_[index_][channel]);
TAmp.setImagPart(ImTMatrix_[index_][channel]);
@@ -975,7 +1205,7 @@
LauComplex LauKMatrixPropagator::getPhaseSpaceTerm(Double_t s, Int_t channel)
{
- // Get the complex (unitary) transition amplitude T for the given channel
+ // Get the complex (unitary) transition amplitude T for the given channel
LauComplex rho(0.0, 0.0);
channel -= 1;
@@ -983,7 +1213,7 @@
// If s has changed from the previous value, recalculate rho
if (TMath::Abs(s - previousS_) > 1e-6*s) {
- this->calcRhoMatrix(s);
+ this->calcRhoMatrix(s);
}
rho.setRealPart(ReRhoMatrix_[channel][channel]);
@@ -995,11 +1225,11 @@
void LauKMatrixPropagator::getTMatrix(const LauKinematics* kinematics) {
- // Find the unitary T matrix, where T = [sqrt(rho)]^{*} T_hat sqrt(rho),
- // and T_hat = (I - i K rho)^-1 * K is the Lorentz-invariant T matrix,
- // which has phase-space factors included (rho). This function is not
- // needed to calculate the K-matrix amplitudes, but allows us
- // to check the variation of T as a function of s (kinematics)
+ // Find the unitary T matrix, where T = [sqrt(rho)]^{*} T_hat sqrt(rho),
+ // and T_hat = (I - i K rho)^-1 * K is the Lorentz-invariant T matrix,
+ // which has phase-space factors included (rho). This function is not
+ // needed to calculate the K-matrix amplitudes, but allows us
+ // to check the variation of T as a function of s (kinematics)
if (!kinematics) {return;}
@@ -1023,22 +1253,22 @@
void LauKMatrixPropagator::getTMatrix(Double_t s)
{
- // Find the unitary transition T matrix, where
- // T = [sqrt(rho)]^{*} T_hat sqrt(rho), and
- // T_hat = (I - i K rho)^-1 * K is the Lorentz-invariant T matrix,
- // which has phase-space factors included (rho). Note that the first
- // sqrt of the rho matrix is complex conjugated.
+ // Find the unitary transition T matrix, where
+ // T = [sqrt(rho)]^{*} T_hat sqrt(rho), and
+ // T_hat = (I - i K rho)^-1 * K is the Lorentz-invariant T matrix,
+ // which has phase-space factors included (rho). Note that the first
+ // sqrt of the rho matrix is complex conjugated.
- // This function is not needed to calculate the K-matrix amplitudes, but
- // allows us to check the variation of T as a function of s (kinematics)
+ // This function is not needed to calculate the K-matrix amplitudes, but
+ // allows us to check the variation of T as a function of s (kinematics)
- // Initialse the real and imaginary parts of the T matrix to zero
- ReTMatrix_.Zero(); ImTMatrix_.Zero();
+ // Initialse the real and imaginary parts of the T matrix to zero
+ ReTMatrix_.Zero(); ImTMatrix_.Zero();
- if (parametersSet_ == kFALSE) {return;}
+ if (parametersSet_ == kFALSE) {return;}
- // Update K, rho and the propagator (I - i K rho)^-1
- this->updatePropagator(s);
+ // Update K, rho and the propagator (I - i K rho)^-1
+ this->updatePropagator(s);
// Find the real and imaginary T_hat matrices
TMatrixD THatReal = realProp_*ScattKMatrix_;
@@ -1075,44 +1305,43 @@
void LauKMatrixPropagator::getSqrtRhoMatrix()
{
- // Find the square root of the (current) phase space matrix so that
- // we can find T = [sqrt(rho)}^{*} T_hat sqrt(rho), where T_hat is the
- // Lorentz-invariant T matrix = (I - i K rho)^-1 * K; note that the first
- // sqrt of rho matrix is complex conjugated
+ // Find the square root of the (current) phase space matrix so that
+ // we can find T = [sqrt(rho)}^{*} T_hat sqrt(rho), where T_hat is the
+ // Lorentz-invariant T matrix = (I - i K rho)^-1 * K; note that the first
+ // sqrt of rho matrix is complex conjugated
- // If rho = rho_i + i rho_r = a + i b, then sqrt(rho) = c + i d, where
- // c = sqrt(0.5*(r+a)) and d = sqrt(0.5(r-a)), where r = sqrt(a^2 + b^2).
- // Since rho is diagonal, then the square root of rho will also be diagonal,
- // with its real and imaginary matrix elements equal to c and d, respectively
+ // If rho = rho_i + i rho_r = a + i b, then sqrt(rho) = c + i d, where
+ // c = sqrt(0.5*(r+a)) and d = sqrt(0.5(r-a)), where r = sqrt(a^2 + b^2).
+ // Since rho is diagonal, then the square root of rho will also be diagonal,
+ // with its real and imaginary matrix elements equal to c and d, respectively
- // Initialise the real and imaginary parts of the square root of
- // the rho matrix to zero
- ReSqrtRhoMatrix_.Zero(); ImSqrtRhoMatrix_.Zero();
+ // Initialise the real and imaginary parts of the square root of
+ // the rho matrix to zero
+ ReSqrtRhoMatrix_.Zero(); ImSqrtRhoMatrix_.Zero();
- for (Int_t iChannel (0); iChannel < nChannels_; ++iChannel) {
+ for (Int_t iChannel (0); iChannel < nChannels_; ++iChannel) {
- Double_t realRho = ReRhoMatrix_[iChannel][iChannel];
- Double_t imagRho = ImRhoMatrix_[iChannel][iChannel];
+ Double_t realRho = ReRhoMatrix_[iChannel][iChannel];
+ Double_t imagRho = ImRhoMatrix_[iChannel][iChannel];
Double_t rhoMag = sqrt(realRho*realRho + imagRho*imagRho);
- Double_t rhoSum = rhoMag + realRho;
- Double_t rhoDiff = rhoMag - realRho;
+ Double_t rhoSum = rhoMag + realRho;
+ Double_t rhoDiff = rhoMag - realRho;
- Double_t reSqrtRho(0.0), imSqrtRho(0.0);
- if (rhoSum > 0.0) {reSqrtRho = sqrt(0.5*rhoSum);}
+ Double_t reSqrtRho(0.0), imSqrtRho(0.0);
+ if (rhoSum > 0.0) {reSqrtRho = sqrt(0.5*rhoSum);}
if (rhoDiff > 0.0) {imSqrtRho = sqrt(0.5*rhoDiff);}
- ReSqrtRhoMatrix_[iChannel][iChannel] = reSqrtRho;
- ImSqrtRhoMatrix_[iChannel][iChannel] = imSqrtRho;
-
- }
+ ReSqrtRhoMatrix_[iChannel][iChannel] = reSqrtRho;
+ ImSqrtRhoMatrix_[iChannel][iChannel] = imSqrtRho;
+ }
}
LauComplex LauKMatrixPropagator::getTHat(Double_t s, Int_t channel) {
- LauComplex THat(0.0, 0.0);
+ LauComplex THat(0.0, 0.0);
channel -= 1;
if (channel < 0 || channel >= nChannels_) {return THat;}

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 29, 8:44 PM (22 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6571439
Default Alt Text
D41.1759175096.diff (49 KB)

Event Timeline