laura is hosted by Hepforge, IPPP Durham
Laura++  v3r5
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauKMatrixPropagator.hh
Go to the documentation of this file.
1 
2 /*
3 Copyright 2008 University of Warwick
4 
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
8 
9  http://www.apache.org/licenses/LICENSE-2.0
10 
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16 */
17 
18 /*
19 Laura++ package authors:
20 John Back
21 Paul Harrison
22 Thomas Latham
23 */
24 
37 #ifndef LAU_KMATRIX_PROPAGATOR
38 #define LAU_KMATRIX_PROPAGATOR
39 
40 #include "LauComplex.hh"
41 #include "LauKinematics.hh"
42 #include "LauParameter.hh"
43 
44 #include "TMatrixD.h"
45 #include "TString.h"
46 
47 #include <map>
48 #include <vector>
49 
51 
52  public:
54 
62  LauKMatrixPropagator(const TString& name, const TString& paramFileName,
63  Int_t resPairAmpInt, Int_t nChannels, Int_t nPoles,
64  Int_t rowIndex = 1);
65 
67  virtual ~LauKMatrixPropagator();
68 
70 
73  void updatePropagator(const LauKinematics* kinematics);
74 
76 
79  void updatePropagator(Double_t s);
80 
82 
85  void setParameters(const TString& inputFile);
86 
88 
91  TMatrixD getKMatrix() const {return ScattKMatrix_;}
92 
94 
97  TMatrixD getRealPropMatrix() const {return realProp_;}
98 
100 
103  TMatrixD getNegImagPropMatrix() const {return negImagProp_;}
104 
106 
110  Double_t getRealPropTerm(Int_t channelIndex) const;
111 
113 
117  Double_t getImagPropTerm(Int_t channelIndex) const;
118 
120 
124  Double_t getPoleDenomTerm(Int_t poleIndex) const;
125 
127 
132  Double_t getCouplingConstant(Int_t poleIndex, Int_t channelIndex) const;
133 
135 
140  Double_t getScatteringConstant(Int_t channel1Index, Int_t channel2Index) const;
141 
143 
146  Double_t getProdSVPTerm() const {return prodSVP_;}
147 
149 
153  LauComplex getPropTerm(Int_t channelIndex) const;
154 
156 
159  Int_t getResPairAmpInt() const {return resPairAmpInt_;}
160 
162 
165  Int_t getNChannels() const {return nChannels_;}
166 
168 
171  Int_t getNPoles() const {return nPoles_;}
172 
174 
177  TString getName() const {return name_;}
178 
180 
185  LauComplex getTransitionAmp(Double_t s, Int_t channel);
186 
187 
189 
194  LauComplex getPhaseSpaceTerm(Double_t s, Int_t channel);
195 
197 
200  Double_t getAdlerZero() const {return adlerZeroFactor_;}
201 
202 
204 
209  LauComplex getTHat(Double_t s, Int_t channel);
210 
211 
212  protected:
214 
217  void calcScattKMatrix(Double_t s);
218 
220 
223  void calcRhoMatrix(Double_t s);
224 
226 
229  void calcPoleDenomVect(Double_t s);
230 
232 
236  LauComplex calcPiPiRho(Double_t s) const;
237 
239 
243  LauComplex calcKKRho(Double_t s) const;
244 
246 
250  LauComplex calcFourPiRho(Double_t s) const;
251 
253 
257  LauComplex calcEtaEtaRho(Double_t s) const;
258 
260 
264  LauComplex calcEtaEtaPRho(Double_t s) const;
265 
267 
271  LauComplex calcKPiRho(Double_t s) const;
272 
274 
278  LauComplex calcKEtaPRho(Double_t s) const;
279 
281 
285  LauComplex calcKThreePiRho(Double_t s) const;
286 
288 
293  Double_t calcSVPTerm(Double_t s, Double_t s0) const;
294 
296 
299  void updateScattSVPTerm(Double_t s);
300 
302 
305  void updateProdSVPTerm(Double_t s);
306 
308 
311  void updateAdlerZeroFactor(Double_t s);
312 
314 
318  Bool_t checkPhaseSpaceType(Int_t phaseSpaceInt) const;
319 
320 
322 
325  void getTMatrix(const LauKinematics* kinematics);
326 
328 
331  void getTMatrix(Double_t s);
332 
334  void getSqrtRhoMatrix();
335 
336  private:
339 
342 
344  typedef std::map<int, std::vector<LauParameter> > KMatrixParamMap;
345 
346 
348  void initialiseMatrices();
349 
351 
354  void storeChannels(const std::vector<std::string>& theLine);
355 
357 
360  void storePole(const std::vector<std::string>& theLine);
361 
363 
366  void storeScattering(const std::vector<std::string>& theLine);
367 
369 
373  void storeParameter(const TString& keyword, const TString& parString);
374 
375 
377  TString name_;
379  TString paramFileName_;
383  Int_t index_;
384 
386  Double_t previousS_;
388  Double_t scattSVP_;
390  Double_t prodSVP_;
392  TMatrixD realProp_;
394  TMatrixD negImagProp_;
395 
396  // Integers to specify the allowed channels for the phase space calculations.
397  // Please keep Zero at the start and leave TotChannels at the end
398  // whenever more channels are added to this.
402 
404  TMatrixD ScattKMatrix_;
406  TMatrixD ReRhoMatrix_;
408  TMatrixD ImRhoMatrix_;
410  TMatrixD IMatrix_;
412  TMatrixD zeroMatrix_;
413 
419  TMatrixD ReTMatrix_;
421  TMatrixD ImTMatrix_;
422 
424  Int_t nChannels_;
426  Int_t nPoles_;
427 
429  std::vector<LauParameter> mSqPoles_;
430 
435 
437  std::vector<Int_t> phaseSpaceTypes_;
439  std::vector<Double_t> mSumSq_;
441  std::vector<Double_t> mDiffSq_;
443  std::vector<Double_t> poleDenomVect_;
444 
455 
457  Double_t sAConst_;
459  Double_t m2piSq_;
461  Double_t m2KSq_;
463  Double_t m2EtaSq_;
465  Double_t mEtaEtaPSumSq_;
467  Double_t mEtaEtaPDiffSq_;
469  Double_t mKpiSumSq_;
471  Double_t mKpiDiffSq_;
473  Double_t mKEtaPSumSq_;
475  Double_t mKEtaPDiffSq_;
477  Double_t mK3piDiffSq_;
479  Double_t k3piFactor_;
481  Double_t fourPiFactor1_;
483  Double_t fourPiFactor2_;
484 
489 
491  Bool_t verbose_;
492 
495 
496  ClassDef(LauKMatrixPropagator,0) // K-matrix amplitude model
497 };
498 
499 #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:49
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:61
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.