laura is hosted by Hepforge, IPPP Durham
Laura++  v3r2
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 - 2014.
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 
21 
22 LauKMatrixProdPole::LauKMatrixProdPole(const TString& poleName, Int_t poleIndex, Int_t resPairAmpInt,
23  LauKMatrixPropagator* propagator, const LauDaughters* daughters,
24  Bool_t useProdAdler) :
25  LauAbsResonance(poleName, resPairAmpInt, daughters),
26  thePropagator_(propagator),
27  poleIndex_(poleIndex - 1), // poleIndex goes from 1 to nPoles
28  useProdAdler_(useProdAdler)
29 {
30 
31  if (useProdAdler_) {
32  std::cout<<"Creating K matrix production pole "<<poleName<<" with poleIndex = "
33  <<poleIndex<<" with s-dependent production Adler zero term"<<std::endl;
34  } else {
35  std::cout<<"Creating K matrix production pole "<<poleName<<" with poleIndex = "
36  <<poleIndex<<" with production Adler zero factor = 1"<<std::endl;
37  }
38 
39 }
40 
42 {
43 }
44 
45 LauComplex LauKMatrixProdPole::resAmp(Double_t mass, Double_t spinTerm)
46 {
47  std::cerr << "ERROR in LauKMatrixProdPole::resAmp : This method shouldn't get called." << std::endl;
48  std::cerr << " Returning zero amplitude for mass = " << mass << " and spinTerm = " << spinTerm << "." << std::endl;
49  return LauComplex(0.0, 0.0);
50 }
51 
53 {
54 
55  // Calculate the amplitude for the K-matrix production pole.
56  // First, make sure the K-matrix propagator is up-to-date for
57  // the given centre-of-mass squared value ("s") from the kinematics.
58  LauComplex amp(0.0, 0.0);
59 
60  if (thePropagator_ == 0) {
61  std::cerr << "ERROR in LauKMatrixProdPole::amplitude : The propagator is null" << std::endl;
62  return amp;
63  }
64 
65  thePropagator_->updatePropagator(kinematics);
66 
67  // Sum the pole denominator terms over all channels j, multiplying by
68  // the propagator terms. Note that we do not sum over poles, since we
69  // only want one of the production pole terms.
70  Int_t nChannels = thePropagator_->getNChannels();
71  Int_t jChannel;
72 
73  for (jChannel = 0; jChannel < nChannels; jChannel++) {
74 
75  Double_t gj = thePropagator_->getCouplingConstant(poleIndex_, jChannel);
76  LauComplex prodTerm = thePropagator_->getPropTerm(jChannel);
77 
78  prodTerm.rescale(gj);
79 
80  amp += prodTerm;
81 
82  }
83 
84  Double_t poleDenom = thePropagator_->getPoleDenomTerm(poleIndex_);
85 
86  // Include Adler zero factor if requested
87  Double_t adlerZero(1.0);
88  if (useProdAdler_) {adlerZero = thePropagator_->getAdlerZero();}
89 
90  amp.rescale(poleDenom*adlerZero);
91 
92  return amp;
93 
94 }
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.
ClassImp(LauAbsCoeffSet)
Bool_t useProdAdler_
Boolean to turn on/off the production Adler zero factor.
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 getAdlerZero() const
Get the Adler zero factor, which is set when updatePropagator is called.
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:285
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.