laura is hosted by Hepforge, IPPP Durham
Laura++  v3r3
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauKMatrixPropagator.hh
Go to the documentation of this file.
1 
2 // Copyright University of Warwick 2008 - 2013.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 // Authors:
7 // Thomas Latham
8 // John Back
9 // Paul Harrison
10 
23 #ifndef LAU_KMATRIX_PROPAGATOR
24 #define LAU_KMATRIX_PROPAGATOR
25 
26 #include "LauComplex.hh"
27 #include "LauKinematics.hh"
28 #include "LauParameter.hh"
29 
30 #include "TMatrixD.h"
31 #include "TString.h"
32 
33 #include <map>
34 #include <vector>
35 
37 
38  public:
40 
48  LauKMatrixPropagator(const TString& name, const TString& paramFileName,
49  Int_t resPairAmpInt, Int_t nChannels, Int_t nPoles,
50  Int_t rowIndex = 1);
51 
53  virtual ~LauKMatrixPropagator();
54 
56 
59  void updatePropagator(const LauKinematics* kinematics);
60 
62 
65  void updatePropagator(Double_t s);
66 
68 
71  void setParameters(const TString& inputFile);
72 
74 
77  TMatrixD getKMatrix() const {return ScattKMatrix_;}
78 
80 
83  TMatrixD getRealPropMatrix() const {return realProp_;}
84 
86 
89  TMatrixD getNegImagPropMatrix() const {return negImagProp_;}
90 
92 
96  Double_t getRealPropTerm(Int_t channelIndex) const;
97 
99 
103  Double_t getImagPropTerm(Int_t channelIndex) const;
104 
106 
110  Double_t getPoleDenomTerm(Int_t poleIndex) const;
111 
113 
118  Double_t getCouplingConstant(Int_t poleIndex, Int_t channelIndex) const;
119 
121 
126  Double_t getScatteringConstant(Int_t channel1Index, Int_t channel2Index) const;
127 
129 
132  Double_t getProdSVPTerm() const {return prodSVP_;}
133 
135 
139  LauComplex getPropTerm(Int_t channelIndex) const;
140 
142 
145  Int_t getResPairAmpInt() const {return resPairAmpInt_;}
146 
148 
151  Int_t getNChannels() const {return nChannels_;}
152 
154 
157  Int_t getNPoles() const {return nPoles_;}
158 
160 
163  TString getName() const {return name_;}
164 
166 
171  LauComplex getTransitionAmp(Double_t s, Int_t channel);
172 
173 
175 
180  LauComplex getPhaseSpaceTerm(Double_t s, Int_t channel);
181 
183 
186  Double_t getAdlerZero() const {return adlerZeroFactor_;}
187 
188 
190 
195  LauComplex getTHat(Double_t s, Int_t channel);
196 
197 
198  protected:
200 
203  void calcScattKMatrix(Double_t s);
204 
206 
209  void calcRhoMatrix(Double_t s);
210 
212 
215  void calcPoleDenomVect(Double_t s);
216 
218 
222  LauComplex calcPiPiRho(Double_t s) const;
223 
225 
229  LauComplex calcKKRho(Double_t s) const;
230 
232 
236  LauComplex calcFourPiRho(Double_t s) const;
237 
239 
243  LauComplex calcEtaEtaRho(Double_t s) const;
244 
246 
250  LauComplex calcEtaEtaPRho(Double_t s) const;
251 
253 
257  LauComplex calcKPiRho(Double_t s) const;
258 
260 
264  LauComplex calcKEtaPRho(Double_t s) const;
265 
267 
271  LauComplex calcKThreePiRho(Double_t s) const;
272 
274 
279  Double_t calcSVPTerm(Double_t s, Double_t s0) const;
280 
282 
285  void updateScattSVPTerm(Double_t s);
286 
288 
291  void updateProdSVPTerm(Double_t s);
292 
294 
297  void updateAdlerZeroFactor(Double_t s);
298 
300 
304  Bool_t checkPhaseSpaceType(Int_t phaseSpaceInt) const;
305 
306 
308 
311  void getTMatrix(const LauKinematics* kinematics);
312 
314 
317  void getTMatrix(Double_t s);
318 
320  void getSqrtRhoMatrix();
321 
322  private:
325 
328 
330  typedef std::map<int, std::vector<LauParameter> > KMatrixParamMap;
331 
332 
334  void initialiseMatrices();
335 
337 
340  void storeChannels(const std::vector<std::string>& theLine);
341 
343 
346  void storePole(const std::vector<std::string>& theLine);
347 
349 
352  void storeScattering(const std::vector<std::string>& theLine);
353 
355 
359  void storeParameter(const TString& keyword, const TString& parString);
360 
361 
363  TString name_;
365  TString paramFileName_;
369  Int_t index_;
370 
372  Double_t previousS_;
374  Double_t scattSVP_;
376  Double_t prodSVP_;
378  TMatrixD realProp_;
380  TMatrixD negImagProp_;
381 
382  // Integers to specify the allowed channels for the phase space calculations.
383  // Please keep Zero at the start and leave TotChannels at the end
384  // whenever more channels are added to this.
388 
390  TMatrixD ScattKMatrix_;
392  TMatrixD ReRhoMatrix_;
394  TMatrixD ImRhoMatrix_;
396  TMatrixD IMatrix_;
398  TMatrixD zeroMatrix_;
399 
405  TMatrixD ReTMatrix_;
407  TMatrixD ImTMatrix_;
408 
410  Int_t nChannels_;
412  Int_t nPoles_;
413 
415  std::vector<LauParameter> mSqPoles_;
416 
421 
423  std::vector<Int_t> phaseSpaceTypes_;
425  std::vector<Double_t> mSumSq_;
427  std::vector<Double_t> mDiffSq_;
429  std::vector<Double_t> poleDenomVect_;
430 
441 
443  Double_t sAConst_;
445  Double_t m2piSq_;
447  Double_t m2KSq_;
449  Double_t m2EtaSq_;
451  Double_t mEtaEtaPSumSq_;
453  Double_t mEtaEtaPDiffSq_;
455  Double_t mKpiSumSq_;
457  Double_t mKpiDiffSq_;
459  Double_t mKEtaPSumSq_;
461  Double_t mKEtaPDiffSq_;
463  Double_t mK3piDiffSq_;
465  Double_t k3piFactor_;
467  Double_t fourPiFactor1_;
469  Double_t fourPiFactor2_;
470 
475 
477  Bool_t verbose_;
478 
481 
482  ClassDef(LauKMatrixPropagator,0) // K-matrix amplitude model
483 
484 };
485 
486 #endif
void calcPoleDenomVect(Double_t s)
Calulate the term 1/(m_pole^2 - s) for the scattering and production K-matrix formulae.
TMatrixD ImTMatrix_
Imaginary part of the unitary T matrix.
Double_t previousS_
s value of the previous pole
LauComplex calcKThreePiRho(Double_t s) const
Calculate the Kpipipi phase space factor.
Bool_t scattSymmetry_
Control if scattering constants are channel symmetric: f_ji = f_ij.
std::vector< Int_t > phaseSpaceTypes_
Vector of phase space types.
Double_t mKEtaPSumSq_
Defined as (mK+mEta&#39;)^2.
TMatrixD IMatrix_
Identity matrix.
virtual ~LauKMatrixPropagator()
Destructor.
void storeParameter(const TString &keyword, const TString &parString)
Store miscelleanous parameters from a line in the parameter file.
Double_t calcSVPTerm(Double_t s, Double_t s0) const
Calculate the &quot;slow-varying part&quot;.
void calcRhoMatrix(Double_t s)
Calculate the real and imaginary part of the phase space density diagonal matrix. ...
LauComplex calcFourPiRho(Double_t s) const
Calculate the 4 pi phase space factor.
LauComplex calcEtaEtaRho(Double_t s) const
Calculate the eta-eta phase space factor.
LauComplex calcKEtaPRho(Double_t s) const
Calculate the K-eta&#39; phase space factor.
void storeScattering(const std::vector< std::string > &theLine)
Store the scattering coefficients from a line in the parameter file.
TString name_
String to store the propagator name.
TMatrixD ReTMatrix_
Real part of the unitary T matrix.
Double_t mKEtaPDiffSq_
Defined as (mK-mEta&#39;)^2.
LauParameter sA0_
Constant from input file.
Int_t getNPoles() const
Get the number of poles.
LauComplex calcEtaEtaPRho(Double_t s) const
Calculate the eta-eta&#39; phase space factor.
std::vector< Double_t > mSumSq_
Vector of squared masses.
Double_t getRealPropTerm(Int_t channelIndex) const
Get the real part of the term of the propagator.
void getSqrtRhoMatrix()
Get the square root of the phase space matrix.
std::map< int, std::vector< LauParameter > > KMatrixParamMap
Create a map for the K-matrix parameters.
TMatrixD ReSqrtRhoMatrix_
Real part of the square root of the phase space density diagonal matrix.
LauParameter s0Prod_
Constant from input file.
TMatrixD ScattKMatrix_
Scattering K-matrix.
Double_t m2piSq_
Defined as 4*mPi*mPi.
std::vector< std::vector< LauParameter > > LauParArray
Type to define an array of parameters.
std::vector< LauParameter > mSqPoles_
Vector of squared pole masses.
Double_t getScatteringConstant(Int_t channel1Index, Int_t channel2Index) const
Get scattering constants that were loaded from the input file.
std::vector< Double_t > poleDenomVect_
Vector of 1/(m_pole^2 - s) terms for scattering and production K-matrix formulae. ...
Int_t getNChannels() const
Get the number of channels.
Double_t mEtaEtaPDiffSq_
Defined as (mEta-mEta&#39;)^2.
Bool_t checkPhaseSpaceType(Int_t phaseSpaceInt) const
Check the phase space factors that need to be used.
Double_t mEtaEtaPSumSq_
Defined as (mEta+mEta&#39;)^2.
LauParArray fScattering_
Array of scattering SVP values.
File containing declaration of LauKinematics class.
LauKMatrixPropagator(const TString &name, const TString &paramFileName, Int_t resPairAmpInt, Int_t nChannels, Int_t nPoles, Int_t rowIndex=1)
Constructor.
TMatrixD getNegImagPropMatrix() const
Get the negative imaginary part of the full propagator matrix.
void storePole(const std::vector< std::string > &theLine)
Store the pole mass and couplings from a line in the parameter file.
TMatrixD zeroMatrix_
Null matrix.
void storeChannels(const std::vector< std::string > &theLine)
Store the (phase space) channel indices from a line in the parameter file.
void updateProdSVPTerm(Double_t s)
Update the production &quot;slowly-varying part&quot;.
Int_t nChannels_
Number of channels.
LauParameter mSq0_
Constant from input file.
LauComplex calcPiPiRho(Double_t s) const
Calculate the pipi phase space factor.
Double_t mKpiSumSq_
Defined as (mK+mPi)^2.
LauComplex calcKPiRho(Double_t s) const
Calculate the Kpi phase space factor.
Double_t getPoleDenomTerm(Int_t poleIndex) const
Get the 1/(m_pole^2 -s) terms for the scattering and production K-matrix formulae.
Int_t getResPairAmpInt() const
Get the DP axis identifier.
LauParameter s0Scatt_
Constant from input file.
TString paramFileName_
Name of the input parameter file.
void updateAdlerZeroFactor(Double_t s)
Calculate the multiplicative factor containing severa Adler zero constants.
File containing declaration of LauParameter class.
TMatrixD ImRhoMatrix_
Imaginary part of the phase space density diagonal matrix.
TMatrixD getRealPropMatrix() const
Get the real part of the propagator full matrix.
File containing declaration of LauComplex class.
Double_t mK3piDiffSq_
Defined as (mK-3*mPi)^2.
Double_t sAConst_
Defined as 0.5*sA*mPi*mPi.
LauKMatrixPropagator & operator=(const LauKMatrixPropagator &rhs)
Copy assignment operator (not implemented)
TMatrixD ImSqrtRhoMatrix_
Imaginary part of the square root of the phase space density diagonal matrix.
Double_t fourPiFactor2_
Factor used to calculate the pipipipi phase space term.
Bool_t parametersSet_
Tracks if all params have been set.
Double_t prodSVP_
&quot;slowly-varying part&quot; for the production K-matrix
Double_t getAdlerZero() const
Get the Adler zero factor, which is set when updatePropagator is called.
Class for defining the fit parameter objects.
Definition: LauParameter.hh:35
Double_t getCouplingConstant(Int_t poleIndex, Int_t channelIndex) const
Get coupling constants that were loaded from the input file.
LauParameter sA_
Constant from input file.
KMatrixChannels
Integers to specify the allowed channels for the phase space calculations.
void updatePropagator(const LauKinematics *kinematics)
Calculate the invariant mass squared s.
LauComplex getTHat(Double_t s, Int_t channel)
Get the THat amplitude for the given s and channel number.
Int_t index_
Row index - 1.
Double_t mKpiDiffSq_
Defined as (mK-mPi)^2.
Double_t getImagPropTerm(Int_t channelIndex) const
Get the imaginary part of the term of the propagator.
Bool_t verbose_
Control the output of the functions.
void getTMatrix(const LauKinematics *kinematics)
Get the unitary transition amplitude matrix for the given kinematics.
void setParameters(const TString &inputFile)
Read an input file to set parameters.
Double_t m2KSq_
Defined as 4*mK*mK.
Double_t k3piFactor_
Factor used to calculate the Kpipipi phase space term.
Int_t nPoles_
Number of poles.
Class for defining a complex number.
Definition: LauComplex.hh:47
void initialiseMatrices()
Initialise and set the dimensions for the internal matrices and parameter arrays. ...
Double_t adlerZeroFactor_
Multiplicative factor containing various Adler zero constants.
LauParArray gCouplings_
Array of coupling constants.
TString getName() const
Get the propagator name.
Class for calculating 3-body kinematic quantities.
LauComplex getTransitionAmp(Double_t s, Int_t channel)
Get the unitary transition amplitude for the given channel.
Double_t getProdSVPTerm() const
Get the &quot;slowly-varying part&quot; term of the amplitude.
TMatrixD realProp_
Real part of the propagator matrix.
Int_t resPairAmpInt_
Number to identify the DP axis in question.
Double_t scattSVP_
&quot;slowly-varying part&quot; for the scattering K-matrix
LauComplex getPropTerm(Int_t channelIndex) const
Get the full complex propagator term for a given channel.
TMatrixD getKMatrix() const
Get the scattering K matrix.
LauComplex calcKKRho(Double_t s) const
Calculate the KK phase space factor.
void calcScattKMatrix(Double_t s)
Calculate the scattering K-matrix for the given value of s.
Double_t m2EtaSq_
Defined as 4*mEta*mEta.
Double_t fourPiFactor1_
Factor used to calculate the pipipipi phase space term.
std::vector< Double_t > mDiffSq_
Vector of mass differences.
LauComplex getPhaseSpaceTerm(Double_t s, Int_t channel)
Get the complex phase space term for the given channel and invariant mass squared.
void updateScattSVPTerm(Double_t s)
Update the scattering &quot;slowly-varying part&quot;.
TMatrixD negImagProp_
Imaginary part of the propagator matrix.
Class for defining a K-matrix propagator.
TMatrixD ReRhoMatrix_
Real part of the phase space density diagonal matrix.