laura is hosted by Hepforge, IPPP Durham
Laura++  v3r5
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauKMatrixProdPole.cc
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 
29 #include "LauKMatrixProdPole.hh"
30 #include "LauKMatrixPropagator.hh"
31 
32 #include <iostream>
33 
35 
36 LauKMatrixProdPole::LauKMatrixProdPole(const TString& poleName, Int_t poleIndex, Int_t resPairAmpInt,
37  LauKMatrixPropagator* propagator, const LauDaughters* daughters,
38  Bool_t useProdAdler) :
39  LauAbsResonance(poleName, resPairAmpInt, daughters),
40  thePropagator_(propagator),
41  poleIndex_(poleIndex - 1), // poleIndex goes from 1 to nPoles
42  useProdAdler_(useProdAdler)
43 {
44 
45  if (useProdAdler_) {
46  std::cout<<"Creating K matrix production pole "<<poleName<<" with poleIndex = "
47  <<poleIndex<<" with s-dependent production Adler zero term"<<std::endl;
48  } else {
49  std::cout<<"Creating K matrix production pole "<<poleName<<" with poleIndex = "
50  <<poleIndex<<" with production Adler zero factor = 1"<<std::endl;
51  }
52 
53 }
54 
56 {
57 }
58 
59 LauComplex LauKMatrixProdPole::resAmp(Double_t mass, Double_t spinTerm)
60 {
61  std::cerr << "ERROR in LauKMatrixProdPole::resAmp : This method shouldn't get called." << std::endl;
62  std::cerr << " Returning zero amplitude for mass = " << mass << " and spinTerm = " << spinTerm << "." << std::endl;
63  return LauComplex(0.0, 0.0);
64 }
65 
67 {
68 
69  // Calculate the amplitude for the K-matrix production pole.
70  // First, make sure the K-matrix propagator is up-to-date for
71  // the given centre-of-mass squared value ("s") from the kinematics.
72  LauComplex amp(0.0, 0.0);
73 
74  if (thePropagator_ == 0) {
75  std::cerr << "ERROR in LauKMatrixProdPole::amplitude : The propagator is null" << std::endl;
76  return amp;
77  }
78 
79  thePropagator_->updatePropagator(kinematics);
80 
81  // Sum the pole denominator terms over all channels j, multiplying by
82  // the propagator terms. Note that we do not sum over poles, since we
83  // only want one of the production pole terms.
84  Int_t nChannels = thePropagator_->getNChannels();
85  Int_t jChannel;
86 
87  for (jChannel = 0; jChannel < nChannels; jChannel++) {
88 
89  Double_t gj = thePropagator_->getCouplingConstant(poleIndex_, jChannel);
90  LauComplex prodTerm = thePropagator_->getPropTerm(jChannel);
91 
92  prodTerm.rescale(gj);
93 
94  amp += prodTerm;
95 
96  }
97 
98  Double_t poleDenom = thePropagator_->getPoleDenomTerm(poleIndex_);
99 
100  // Include Adler zero factor if requested
101  Double_t adlerZero(1.0);
102  if (useProdAdler_) {adlerZero = thePropagator_->getAdlerZero();}
103 
104  amp.rescale(poleDenom*adlerZero);
105 
106  return amp;
107 
108 }
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:47
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:299
Class for defining a complex number.
Definition: LauComplex.hh:61
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.