laura is hosted by Hepforge, IPPP Durham
Laura++  v1r0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauKMatrixProdPole.cc
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 
15 #include "LauKMatrixProdPole.hh"
16 #include "LauKMatrixPropagator.hh"
17 
18 #include <iostream>
19 
20 ClassImp(LauKMatrixProdPole)
21 
22 LauKMatrixProdPole::LauKMatrixProdPole(const TString& poleName, Int_t poleIndex, Int_t resPairAmpInt,
23  LauKMatrixPropagator* propagator, const LauDaughters* daughters) :
24  LauAbsResonance(poleName, 0.0, 0.0, 0, 0, resPairAmpInt, daughters),
25  thePropagator_(propagator),
26  poleIndex_(poleIndex - 1) // poleIndex goes from 1 to nPoles
27 {
28 }
29 
31 {
32 }
33 
34 LauComplex LauKMatrixProdPole::resAmp(Double_t mass, Double_t spinTerm)
35 {
36  std::cerr << "ERROR in LauKMatrixProdPole::resAmp : This method shouldn't get called." << std::endl;
37  std::cerr << " Returning zero amplitude for mass = " << mass << " and spinTerm = " << spinTerm << "." << std::endl;
38  return LauComplex(0.0, 0.0);
39 }
40 
42 {
43 
44  // Calculate the amplitude for the K-matrix production pole.
45  // First, make sure the K-matrix propagator is up-to-date for
46  // the given centre-of-mass squared value ("s") from the kinematics.
47  LauComplex amp(0.0, 0.0);
48 
49  if (thePropagator_ == 0) {
50  std::cerr << "ERROR in LauKMatrixProdPole::amplitude : The propagator is null" << std::endl;
51  return amp;
52  }
53 
54  thePropagator_->updatePropagator(kinematics);
55 
56  // Sum the pole denominator terms over all channels j, multiplying by
57  // the propagator terms. Note that we do not sum over poles, since we
58  // only want one of the production pole terms.
59  Int_t nChannels = thePropagator_->getNChannels();
60  Int_t jChannel;
61 
62  for (jChannel = 0; jChannel < nChannels; jChannel++) {
63 
64  Double_t gj = thePropagator_->getCouplingConstant(poleIndex_, jChannel);
65  LauComplex prodTerm = thePropagator_->getPropTerm(jChannel);
66 
67  prodTerm.rescale(gj);
68 
69  amp += prodTerm;
70 
71  }
72 
73  Double_t poleDenom = thePropagator_->getPoleDenomTerm(poleIndex_);
74  amp.rescale(poleDenom);
75 
76  return amp;
77 
78 }
virtual ~LauKMatrixProdPole()
Destructor.
virtual LauComplex resAmp(Double_t mass, Double_t spinTerm)
Function not meant to be called, amplitude is called directly in this case.
File containing declaration of LauKMatrixProdPole class.
Class that defines the particular 3-body decay under study.
Definition: LauDaughters.hh:33
Int_t poleIndex_
The number of the pole.
Int_t getNChannels() const
Get the number of channels.
virtual LauComplex amplitude(const LauKinematics *kinematics)
The amplitude calculation.
File containing declaration of LauKMatrixPropagator class.
Class for defining a K-matrix production pole amplitude term.
Double_t getPoleDenomTerm(Int_t poleIndex) const
Get the 1/(m_pole^2 -s) terms for the scattering and production K-matrix formulae.
Double_t getCouplingConstant(Int_t poleIndex, Int_t channelIndex) const
Get coupling constants that were loaded from the input file.
void updatePropagator(const LauKinematics *kinematics)
Calculate the invariant mass squared s.
Abstract class for defining type for resonance amplitude models (Breit-Wigner, Flatte etc...
void rescale(Double_t scaleVal)
Scale this by a factor.
Definition: LauComplex.hh:282
Class for defining a complex number.
Definition: LauComplex.hh:47
LauKMatrixPropagator * thePropagator_
The K-matrix propagator.
Class for calculating 3-body kinematic quantities.
LauComplex getPropTerm(Int_t channelIndex) const
Get the full complex propagator term for a given channel.
Class for defining a K-matrix propagator.