laura is hosted by Hepforge, IPPP Durham
Laura++  v1r0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauFlatteRes.cc
Go to the documentation of this file.
1 
2 // Copyright University of Warwick 2004 - 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 <iostream>
16 
17 #include "LauConstants.hh"
18 #include "LauFlatteRes.hh"
19 
20 ClassImp(LauFlatteRes)
21 
22 
23 LauFlatteRes::LauFlatteRes(TString resName, Double_t resMass, Double_t resWidth, Int_t resSpin,
24  Int_t resCharge, Int_t resPairAmpInt, const LauDaughters* daughters) :
25  LauAbsResonance(resName, resMass, resWidth, resSpin, resCharge, resPairAmpInt, daughters),
26  resMassSq_(0.0),
27  g1_(0.0),
28  g2_(0.0),
29  mSumSq0_(0.0),
30  mSumSq1_(0.0),
31  mSumSq2_(0.0),
32  mSumSq3_(0.0)
33 {
34  // constant factors from BES data
35  // resMass_ should be 0.965 +/- 0.008 +/- 0.006 GeV/c^2
36  g1_ = 0.165; // +/- 0.010 +/- 0.015 GeV/c^2
37  g2_ = g1_*4.21; // +/- 0.25 +/- 0.21
38 
39  // or from E791
40  //g1_ = 0.09;
41  //g2_ = 0.02;
42 
43  // or from CERN/WA76
44  //g1_ = 0.28;
45  //g2_ = 0.56;
46 }
47 
49 {
50 }
51 
53 {
54  Double_t resMass = this->getMass();
55  resMassSq_ = resMass*resMass;
56 
57  const TString& resName = this->getResonanceName();
58  if (resName != "f_0(980)") {
59  std::cerr << "WARNING in LauFlatteRes::initialise : Unexpected resonance name \"" << resName << "\" for Flatte shape." << std::endl;
60  std::cerr << " : Setting parameters to \"f0_980\" values." << std::endl;
61  }
62 
67 }
68 
69 void LauFlatteRes::setGFactors(Double_t g1, Double_t g2)
70 {
71  this->setg1Parameter(g1);
72  this->setg2Parameter(g2);
73 }
74 
75 void LauFlatteRes::setResonanceParameter(Double_t value, const TString& name)
76 {
77  if (name == "g1") {
78  this->setg1Parameter(value);
79  TString g1name = "gPiPi";
80  std::cout << "INFO in LauFlatteRes::setResonanceParameter : Setting " << g1name <<" Parameter to " << this->getg1Parameter() << std::endl;
81  } else if (name == "g2") {
82  this->setg2Parameter(value);
83  TString g2name = "gKK";
84  std::cout << "INFO in LauFlatteRes::setResonanceParameter : Setting " << g2name << " Parameter to " << this->getg2Parameter() << std::endl;
85  } else {
86  std::cerr << "WARNING in LauFlatteRes::setResonanceParameter : Parameter name \"" << name << "\" not recognised." << std::endl;
87  }
88 }
89 
90 LauComplex LauFlatteRes::resAmp(Double_t mass, Double_t spinTerm)
91 {
92  // This function returns the complex dynamical amplitude for a Flatte distribution
93  // given the invariant mass and cos(helicity) values.
94 
95  Double_t resMass = this->getMass();
96  Double_t s = mass*mass; // Invariant mass squared combination for the system
97  Double_t dMSq = resMassSq_ - s;
98 
99  Double_t rho1(0.0), rho2(0.0);
100  if (s > mSumSq0_) {
101  rho1 = TMath::Sqrt(1.0 - mSumSq0_/s)/3.0;
102  if (s > mSumSq1_) {
103  rho1 += 2.0*TMath::Sqrt(1.0 - mSumSq1_/s)/3.0;
104  if (s > mSumSq2_) {
105  rho2 = 0.5*TMath::Sqrt(1.0 - mSumSq2_/s);
106  if (s > mSumSq3_) {
107  rho2 += 0.5*TMath::Sqrt(1.0 - mSumSq3_/s);
108  } else {
109  // Continue analytically below higher channel thresholds
110  // This contributes to the real part of the amplitude denominator
111  dMSq += g2_*resMass*0.5*TMath::Sqrt(mSumSq3_/s - 1.0);
112  }
113  } else {
114  // Continue analytically below higher channel thresholds
115  // This contributes to the real part of the amplitude denominator
116  rho2 = 0.0;
117  dMSq += g2_*resMass*(0.5*TMath::Sqrt(mSumSq2_/s - 1.0) + 0.5*TMath::Sqrt(mSumSq3_/s - 1.0));
118  }
119  } else {
120  // Continue analytically below higher channel thresholds
121  // This contributes to the real part of the amplitude denominator
122  dMSq += g1_*resMass*2.0*TMath::Sqrt(mSumSq1_/s - 1.0)/3.0;
123  }
124  }
125 
126  Double_t width1 = g1_*rho1*resMass;
127  Double_t width2 = g2_*rho2*resMass;
128  Double_t widthTerm = width1 + width2;
129 
130  LauComplex resAmplitude(dMSq, widthTerm);
131 
132  Double_t denomFactor = dMSq*dMSq + widthTerm*widthTerm;
133 
134  Double_t invDenomFactor = 0.0;
135  if (denomFactor > 1e-10) {invDenomFactor = 1.0/denomFactor;}
136 
137  resAmplitude.rescale(spinTerm*invDenomFactor);
138 
139  return resAmplitude;
140 }
141 
virtual void initialise()
Initialise the model.
Definition: LauFlatteRes.cc:52
Double_t getMass() const
Get the mass of the resonance.
const TString & getResonanceName() const
Get the name of the resonance.
Double_t resMassSq_
Square of the resonance mass.
const Double_t mK0
Mass of K0 (GeV/c^2)
Definition: LauConstants.hh:46
const TString & name() const
The parameter name.
Class that defines the particular 3-body decay under study.
Definition: LauDaughters.hh:33
Double_t getg2Parameter()
Get the g2 parameter.
Definition: LauFlatteRes.hh:70
Double_t mSumSq1_
Defined as (mPi+mPi)*(mPi+mPi)
Double_t mSumSq3_
Defined as (mK0+mK0)*(mK0+mK0)
void setg2Parameter(Double_t g2)
Set the g2 parameter.
Definition: LauFlatteRes.hh:89
void setGFactors(Double_t g1, Double_t g2)
Set the constant g factors.
Definition: LauFlatteRes.cc:69
const Double_t mPi
Mass of pi+- (GeV/c^2)
Definition: LauConstants.hh:40
Double_t g2_
Constant factor (default value from BES data)
Double_t g1_
Constant factor (default value from BES data)
virtual ~LauFlatteRes()
Destructor.
Definition: LauFlatteRes.cc:48
Double_t getg1Parameter()
Get the g1 parameter.
Definition: LauFlatteRes.hh:64
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
void setg1Parameter(Double_t g1)
Set the g1 parameter.
Definition: LauFlatteRes.hh:83
Double_t mSumSq2_
Defined as (mK+mK)*(mK+mK)
File containing LauConstants namespace.
Class for defining a complex number.
Definition: LauComplex.hh:47
Double_t mSumSq0_
Defined as (mPi0+mPi0)*(mPi0+mPi0)
virtual LauComplex resAmp(Double_t mass, Double_t spinTerm)
Complex resonant amplitude.
Definition: LauFlatteRes.cc:90
Double_t value() const
The value of the parameter.
virtual void setResonanceParameter(Double_t value, const TString &name)
Set resonance parameter.
Definition: LauFlatteRes.cc:75
Class for defining the Flatte resonance model.
Definition: LauFlatteRes.hh:31
const Double_t mK
Mass of K+- (GeV/c^2)
Definition: LauConstants.hh:44
const Double_t mPi0
Mass of pi0 (GeV/c^2)
Definition: LauConstants.hh:42
File containing declaration of LauFlatteRes class.