laura is hosted by Hepforge, IPPP Durham
Laura++  3.6.0
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 "LauConstants.hh"
41 #include "LauResonanceInfo.hh"
42 #include "LauResonanceMaker.hh"
43 
44 #include "TMatrixD.h"
45 #include "TString.h"
46 
47 #include <map>
48 #include <vector>
49 
50 class LauParameter;
51 class LauKinematics;
52 class LauComplex;
53 
55 
56  public:
58 
66  LauKMatrixPropagator( const TString& name,
67  const TString& paramFileName,
68  const Int_t resPairAmpInt,
69  const Int_t nChannels,
70  const Int_t nPoles,
71  const Int_t rowIndex = 1 );
72 
74  virtual ~LauKMatrixPropagator();
75 
77 
80  void updatePropagator( const Double_t s );
81 
83 
86  void setParameters( const TString& inputFile );
87 
90 
92 
95  TMatrixD getKMatrix() const { return ScattKMatrix_; }
96 
98 
101  TMatrixD getRealPropMatrix() const { return realProp_; }
102 
104 
107  TMatrixD getNegImagPropMatrix() const { return negImagProp_; }
108 
110 
114  Double_t getRealPropTerm( const Int_t channelIndex ) const;
115 
117 
121  Double_t getImagPropTerm( const Int_t channelIndex ) const;
122 
124 
128  Double_t getPoleDenomTerm( const Int_t poleIndex ) const;
129 
131 
135  Int_t getL( const Int_t iChannel ) const { return L_[iChannel]; }
136 
138 
141  Int_t getIndex() const { return index_; };
142 
144 
148  LauParameter& getPoleMassSqParameter( const Int_t poleIndex );
149 
151 
156  Double_t getCouplingConstant( const Int_t poleIndex, const Int_t channelIndex ) const;
157 
159 
164  LauParameter& getCouplingParameter( const Int_t poleIndex, const Int_t channelIndex );
165 
167 
172  Double_t getScatteringConstant( const Int_t channel1Index, const Int_t channel2Index ) const;
173 
175 
180  LauParameter& getScatteringParameter( const Int_t channel1Index, const Int_t channel2Index );
181 
183 
186  LauParameter& getmSq0() { return mSq0_; }
187 
189 
193 
195 
199 
201 
204  LauParameter& getsA() { return sA_; }
205 
207 
210  LauParameter& getsA0() { return sA0_; }
211 
213 
216  Double_t getProdSVPTerm() const { return prodSVP_; }
217 
219 
223  LauComplex getPropTerm( const Int_t channelIndex ) const;
224 
226 
229  Int_t getResPairAmpInt() const { return resPairAmpInt_; }
230 
232 
235  Int_t getNChannels() const { return nChannels_; }
236 
238 
241  Int_t getNPoles() const { return nPoles_; }
242 
244 
247  TString getName() const { return name_; }
248 
250 
255  LauComplex getTransitionAmp( const Double_t s, const Int_t channel );
256 
258 
263  LauComplex getPhaseSpaceTerm( const Double_t s, const Int_t channel );
264 
266 
269  Double_t getAdlerZero() const { return adlerZeroFactor_; }
270 
272 
277  LauComplex getTHat( const Double_t s, const Int_t channel );
278 
279  protected:
280  // Integers to specify the allowed channels for the phase space calculations.
281  // Please keep Zero at the start and leave TotChannels at the end
282  // whenever more channels are added to this.
284  enum class KMatrixChannels {
285  Zero,
286  PiPi,
287  KK,
288  FourPi,
289  EtaEta,
290  EtaEtaP,
291  KPi,
292  KEtaP,
293  KThreePi,
294  D0K,
295  Dstar0K,
296  TotChannels
297  };
298 
300 
303  void calcScattKMatrix( const Double_t s );
304 
306 
309  void calcRhoMatrix( const Double_t s );
310 
312 
317  LauComplex getRho( const Double_t s, const LauKMatrixPropagator::KMatrixChannels ) const;
318 
320 
323  void calcGammaMatrix( const Double_t s );
324 
326 
331  Double_t calcGamma( const Int_t iCh, const Double_t s ) const;
332 
334 
337  void calcPoleDenomVect( const Double_t s );
338 
340 
344  LauComplex calcD0KRho( const Double_t s ) const;
345 
347 
351  LauComplex calcDstar0KRho( const Double_t s ) const;
352 
354 
358  LauComplex calcPiPiRho( const Double_t s ) const;
359 
361 
365  LauComplex calcKKRho( const Double_t s ) const;
366 
368 
372  LauComplex calcFourPiRho( const Double_t s ) const;
373 
375 
379  LauComplex calcEtaEtaRho( const Double_t s ) const;
380 
382 
386  LauComplex calcEtaEtaPRho( const Double_t s ) const;
387 
389 
393  LauComplex calcKPiRho( const Double_t s ) const;
394 
396 
400  LauComplex calcKEtaPRho( const Double_t s ) const;
401 
403 
407  LauComplex calcKThreePiRho( const Double_t s ) const;
408 
410 
415  Double_t calcSVPTerm( const Double_t s, const Double_t s0 ) const;
416 
418 
421  void updateScattSVPTerm( const Double_t s );
422 
424 
427  void updateProdSVPTerm( const Double_t s );
428 
430 
433  void updateAdlerZeroFactor( const Double_t s );
434 
436 
440  Bool_t checkPhaseSpaceType( const Int_t phaseSpaceInt ) const;
441 
443 
446  void getTMatrix( const LauKinematics* kinematics );
447 
449 
452  void getTMatrix( const Double_t s );
453 
455  void getSqrtRhoMatrix();
456 
457  private:
460 
463 
465  void initialiseMatrices();
466 
468 
471  void storeChannels( const std::vector<std::string>& theLine );
472 
474 
477  void storePole( const std::vector<std::string>& theLine );
478 
480 
483  void storeScattering( const std::vector<std::string>& theLine );
484 
486 
489  void storeRadii( const std::vector<std::string>& theLine );
490 
492 
496  void storeOrbitalAngularMomenta( const std::vector<std::string>& theLine, std::vector<Int_t>& a );
497 
499 
503  void storeBarrierFactorParameter( const std::vector<std::string>& theLine, std::vector<Int_t>& a );
504 
506 
510  void storeParameter( const TString& keyword, const TString& parString );
511 
513  TString name_;
515  TString paramFileName_;
519  Int_t index_;
520 
522  Double_t previousS_ { 0.0 };
524  Double_t scattSVP_ { 0.0 };
526  Double_t prodSVP_ { 0.0 };
528  TMatrixD realProp_;
530  TMatrixD negImagProp_;
531 
533  TMatrixD ScattKMatrix_;
535  TMatrixD ReRhoMatrix_;
537  TMatrixD ImRhoMatrix_;
539  TMatrixD GammaMatrix_;
541  TMatrixD IMatrix_;
543  TMatrixD zeroMatrix_;
544 
550  TMatrixD ReTMatrix_;
552  TMatrixD ImTMatrix_;
553 
555  Int_t nChannels_;
557  Int_t nPoles_;
559  std::vector<Int_t> L_;
563  Bool_t includeBWBarrierFactor_ { kTRUE };
564 
566  std::vector<LauParameter> mSqPoles_;
567 
573  std::vector<Double_t> radii_;
575  std::vector<Double_t> gamAInvRadSq_;
576 
578  std::vector<KMatrixChannels> phaseSpaceTypes_;
580  std::vector<Double_t> mSumSq_;
582  std::vector<Double_t> mDiffSq_;
584  std::vector<Double_t> poleDenomVect_;
585 
596 
598  Double_t sAConst_ { 0.0 };
599 
601  const Double_t m2piSq_ { 4.0 * LauConstants::mPiSq };
603  const Double_t m2KSq_ { 4.0 * LauConstants::mKSq };
605  const Double_t m2EtaSq_ { 4.0 * LauConstants::mEtaSq };
625  const Double_t mK3piDiffSq_ { ( LauConstants::mK - 3.0 * LauConstants::mPi ) *
626  ( LauConstants::mK - 3.0 * LauConstants::mPi ) };
628  const Double_t k3piFactor_ { TMath::Power( ( 1.44 - mK3piDiffSq_ ) / 1.44, -2.5 ) };
630  const Double_t fourPiFactor1_ { 16.0 * LauConstants::mPiSq };
632  const Double_t fourPiFactor2_ { TMath::Sqrt( 1.0 - fourPiFactor1_ ) };
640  const Double_t mDstar0KSumSq_ {
644  const Double_t mDstar0KDiffSq_ {
647 
649  Double_t adlerZeroFactor_ { 0.0 };
651  Bool_t parametersSet_ { kFALSE };
652 
654  static constexpr Bool_t verbose_ { kFALSE };
655 
657  Bool_t scattSymmetry_ { kFALSE };
658 
659  ClassDef( LauKMatrixPropagator, 0 ) // K-matrix amplitude model
660 };
661 
662 #endif
Double_t getScatteringConstant(const Int_t channel1Index, const Int_t channel2Index) const
Get scattering constants that were loaded from the input file.
TMatrixD ImTMatrix_
Imaginary part of the unitary T matrix.
Double_t prodSVP_
"slowly-varying part" for the production K-matrix
LauComplex getTransitionAmp(const Double_t s, const Int_t channel)
Get the unitary transition amplitude for the given channel.
File containing declaration of LauResonanceInfo class.
const Double_t mPiSq
Square of pi+- mass.
Definition: LauConstants.hh:80
Double_t sAConst_
Defined as 0.5*sA*mPi*mPi.
LauComplex calcPiPiRho(const Double_t s) const
Calculate the pipi phase space factor.
const Double_t mDstar0KDiffSq_
Defined as (mD*0-mK)^2.
static LauResonanceMaker & get()
Get the factory instance.
const Double_t m2piSq_
Defined as 4*mPi*mPi.
Int_t getIndex() const
Get index of final channel.
Class for defining the fit parameter objects.
Definition: LauParameter.hh:49
Double_t scattSVP_
"slowly-varying part" for the scattering K-matrix
void storeScattering(const std::vector< std::string > &theLine)
Store the scattering coefficients from a line in the parameter file.
const Double_t mKEtaPSumSq_
Defined as (mK+mEta')^2.
std::vector< Double_t > mDiffSq_
Vector of mass differences.
LauParameter & getmSq0()
Get mSq0 production parameter.
Double_t getImagPropTerm(const Int_t channelIndex) const
Get the imaginary part of the term of the propagator.
Double_t value() const
The value of the parameter.
Double_t calcSVPTerm(const Double_t s, const Double_t s0) const
Calculate the "slow-varying part".
TMatrixD getKMatrix() const
Get the scattering K matrix.
const Double_t mEtaSq
Square of eta mass.
Definition: LauConstants.hh:88
LauParameter & gets0Scatt()
Get s0Scatt production parameter.
LauParameter sA0_
Constant from input file.
const Double_t m2KSq_
Defined as 4*mK*mK.
TMatrixD getNegImagPropMatrix() const
Get the negative imaginary part of the full propagator matrix.
TMatrixD IMatrix_
Identity matrix.
LauParArray gCouplings_
Array of coupling constants.
KMatrixChannels
Integers to specify the allowed channels for the phase space calculations.
Int_t index_
Row index - 1.
Double_t getRealPropTerm(const Int_t channelIndex) const
Get the real part of the term of the propagator.
std::vector< Double_t > poleDenomVect_
Vector of 1/(m_pole^2 - s) terms for scattering and production K-matrix formulae.
LauComplex getTHat(const Double_t s, const Int_t channel)
Get the THat amplitude for the given s and channel number.
std::vector< LauParameter > mSqPoles_
Vector of squared pole masses.
std::vector< Double_t > mSumSq_
Vector of squared masses.
Int_t nPoles_
Number of poles.
Int_t nChannels_
Number of channels.
void updateScattSVPTerm(const Double_t s)
Update the scattering "slowly-varying part".
const Double_t m2EtaSq_
Defined as 4*mEta*mEta.
void setParameters(const TString &inputFile)
Read an input file to set parameters.
LauParArray fScattering_
Array of scattering SVP values.
TMatrixD realProp_
Real part of the propagator matrix.
void getSqrtRhoMatrix()
Get the square root of the phase space matrix.
LauParameter mSq0_
Constant from input file.
TMatrixD ReTMatrix_
Real part of the unitary T matrix.
TString name_
String to store the propagator name.
Bool_t haveCalled_storeBarrierFactorParameter
Boolean to indicate whether storeBarrierFactorParameter has been called.
Double_t adlerZeroFactor_
Multiplicative factor containing various Adler zero constants.
void storePole(const std::vector< std::string > &theLine)
Store the pole mass and couplings from a line in the parameter file.
const Double_t k3piFactor_
Factor used to calculate the Kpipipi phase space term.
const Double_t mEta
Mass of eta (GeV/c^2)
Definition: LauConstants.hh:63
TMatrixD ImRhoMatrix_
Imaginary part of the phase space density diagonal matrix.
std::vector< KMatrixChannels > phaseSpaceTypes_
Vector of phase space types.
const Double_t fourPiFactor2_
Factor used to calculate the pipipipi phase space term.
const Double_t mEtaEtaPDiffSq_
Defined as (mEta-mEta')^2.
TMatrixD ReRhoMatrix_
Real part of the phase space density diagonal matrix.
LauKMatrixPropagator(const LauKMatrixPropagator &rhs)=delete
Copy constructor (not implemented)
LauComplex calcFourPiRho(const Double_t s) const
Calculate the 4 pi phase space factor.
const Double_t fourPiFactor1_
Factor used to calculate the pipipipi phase space term.
Class for defining a complex number.
Definition: LauComplex.hh:61
void updateAdlerZeroFactor(const Double_t s)
Calculate the multiplicative factor containing severa Adler zero constants.
TMatrixD ReSqrtRhoMatrix_
Real part of the square root of the phase space density diagonal matrix.
void getTMatrix(const LauKinematics *kinematics)
Get the unitary transition amplitude matrix for the given kinematics.
LauParameter & getsA0()
Get sA0 production parameter.
const Double_t mKpiDiffSq_
Defined as (mK-mPi)^2.
Class for defining a K-matrix propagator.
Double_t getCouplingConstant(const Int_t poleIndex, const Int_t channelIndex) const
Get coupling constants that were loaded from the input file.
void calcGammaMatrix(const Double_t s)
Calculate the (real) gamma angular-momentum barrier matrix.
LauParameter s0Scatt_
Constant from input file.
void calcPoleDenomVect(const Double_t s)
Calulate the term 1/(m_pole^2 - s) for the scattering and production K-matrix formulae.
Double_t getPoleDenomTerm(const Int_t poleIndex) const
Get the 1/(m_pole^2 -s) terms for the scattering and production K-matrix formulae.
Int_t getNChannels() const
Get the number of channels.
void storeRadii(const std::vector< std::string > &theLine)
Store the channels' characteristic radii from a line in the parameter file.
LauComplex calcKKRho(const Double_t s) const
Calculate the KK phase space factor.
LauParameter & getCouplingParameter(const Int_t poleIndex, const Int_t channelIndex)
Get coupling parameters, set according to the input file.
Bool_t parametersSet_
Tracks if all params have been set.
LauComplex calcDstar0KRho(const Double_t s) const
Calculate the D*0K+ phase space factor.
LauParameter * getMass() const
Retrieve the mass of the resonant particle.
static constexpr Bool_t verbose_
Control the output of the functions.
LauComplex calcKEtaPRho(const Double_t s) const
Calculate the K-eta' phase space factor.
TMatrixD GammaMatrix_
Gamma angular-momentum barrier matrix.
void storeOrbitalAngularMomenta(const std::vector< std::string > &theLine, std::vector< Int_t > &a)
Store the channels' angular momenta from a line in the parameter file.
LauParameter & getsA()
Get sA production parameter.
const Double_t mKSq
Square of K+- mass.
Definition: LauConstants.hh:84
void calcRhoMatrix(const Double_t s)
Calculate the real and imaginary part of the phase space density diagonal matrix.
void calcScattKMatrix(const Double_t s)
Calculate the scattering K-matrix for the given value of s.
const Double_t mK3piDiffSq_
Defined as (mK-3*mPi)^2.
void updatePropagator(const Double_t s)
Calculate the K-matrix propagator for the given s value.
const Double_t mKpiSumSq_
Defined as (mK+mPi)^2.
void storeParameter(const TString &keyword, const TString &parString)
Store miscelleanous parameters from a line in the parameter file.
std::vector< std::vector< LauParameter > > LauParArray
Type to define an array of parameters.
const Double_t mD0KSumSq_
Defined as (mD0+mK)^2.
LauComplex calcKPiRho(const Double_t s) const
Calculate the Kpi phase space factor.
TString paramFileName_
Name of the input parameter file.
LauKMatrixPropagator(const TString &name, const TString &paramFileName, const Int_t resPairAmpInt, const Int_t nChannels, const Int_t nPoles, const Int_t rowIndex=1)
Constructor.
const Double_t mD0
Mass of neutral D (GeV/c^2)
Definition: LauConstants.hh:45
virtual ~LauKMatrixPropagator()
Destructor.
Double_t previousS_
s value of the previous pole
LauParameter & getScatteringParameter(const Int_t channel1Index, const Int_t channel2Index)
Get scattering parameters, set according to the input file.
LauComplex getPhaseSpaceTerm(const Double_t s, const Int_t channel)
Get the complex phase space term for the given channel and invariant mass squared.
LauComplex getRho(const Double_t s, const LauKMatrixPropagator::KMatrixChannels) const
Retrieve the complex phasespace density for a given channel.
LauComplex calcEtaEtaPRho(const Double_t s) const
Calculate the eta-eta' phase space factor.
LauParameter sA_
Constant from input file.
Bool_t scattSymmetry_
Control if scattering constants are channel symmetric: f_ji = f_ij.
File containing LauConstants namespace.
LauParameter & gets0Prod()
Get s0 production parameter.
const Double_t mK
Mass of K+- (GeV/c^2)
Definition: LauConstants.hh:59
LauParameter & getPoleMassSqParameter(const Int_t poleIndex)
Get pole mass parameters, set according to the input file.
const Double_t mKEtaPDiffSq_
Defined as (mK-mEta')^2.
TMatrixD negImagProp_
Imaginary part of the propagator matrix.
void updateProdSVPTerm(const Double_t s)
Update the production "slowly-varying part".
Double_t getAdlerZero() const
Get the Adler zero factor, which is set when updatePropagator is called.
const Double_t mEtaEtaPSumSq_
Defined as (mEta+mEta')^2.
void storeBarrierFactorParameter(const std::vector< std::string > &theLine, std::vector< Int_t > &a)
Store the barrier-factor parameter from a line in the parameter file.
const Double_t mD0KDiffSq_
Defined as (mD0-mK)^2.
void storeChannels(const std::vector< std::string > &theLine)
Store the (phase space) channel indices from a line in the parameter file.
std::vector< Double_t > radii_
Vector of characteristic radii.
Int_t getL(const Int_t iChannel) const
Get spin of K-matrix.
TString getName() const
Get the propagator name.
const Double_t mDstar0KSumSq_
Defined as (mD*0+mK)^2.
Class for calculating 3-body kinematic quantities.
Bool_t includeBWBarrierFactor_
Boolean to dictate whether to include Blatt-Weisskopf-like denominator in K-matrix centrifugal barrie...
LauComplex getPropTerm(const Int_t channelIndex) const
Get the full complex propagator term for a given channel.
std::vector< Double_t > gamAInvRadSq_
Vector of ratio a/R^2.
Int_t resPairAmpInt_
Number to identify the DP axis in question.
LauComplex calcEtaEtaRho(const Double_t s) const
Calculate the eta-eta phase space factor.
void initialiseMatrices()
Initialise and set the dimensions for the internal matrices and parameter arrays.
const Double_t mPi
Mass of pi+- (GeV/c^2)
Definition: LauConstants.hh:55
Int_t getResPairAmpInt() const
Get the DP axis identifier.
std::vector< Int_t > L_
Vector of orbital angular momenta.
Double_t calcGamma(const Int_t iCh, const Double_t s) const
Calculate the gamma angular-momentum barrier.
const Double_t mEtaPrime
Mass of eta' (GeV/c^2)
Definition: LauConstants.hh:65
Bool_t checkPhaseSpaceType(const Int_t phaseSpaceInt) const
Check the phase space factors that need to be used.
LauResonanceInfo * getResInfo(const TString &resName) const
Get the information for the given resonance name.
TMatrixD zeroMatrix_
Null matrix.
Int_t getNPoles() const
Get the number of poles.
Double_t getProdSVPTerm() const
Get the "slowly-varying part" term of the amplitude.
TMatrixD ScattKMatrix_
Scattering K-matrix.
LauComplex calcKThreePiRho(const Double_t s) const
Calculate the Kpipipi phase space factor.
LauKMatrixPropagator & operator=(const LauKMatrixPropagator &rhs)=delete
Copy assignment operator (not implemented)
TMatrixD ImSqrtRhoMatrix_
Imaginary part of the square root of the phase space density diagonal matrix.
File containing declaration of LauResonanceMaker class.
LauParameter s0Prod_
Constant from input file.
TMatrixD getRealPropMatrix() const
Get the real part of the propagator full matrix.
LauComplex calcD0KRho(const Double_t s) const
Calculate the D0K+ phase space factor.
void ignoreBWBarrierFactor()
Set flag to ignore Blatt-Weisskopf-like barrier factor.