laura is hosted by Hepforge, IPPP Durham
Laura++  v1r0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauSigmaRes.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 "LauSigmaRes.hh"
19 
20 ClassImp(LauSigmaRes)
21 
22 
23 LauSigmaRes::LauSigmaRes(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  mPiSq4_(0.0),
27  sAdler_(0.0),
28  b1_(0.0),
29  b2_(0.0),
30  A_(0.0),
31  m0_(0.0),
32  m0Sq_(0.0),
33  denom_(0.0)
34 {
35  // Initialise various constants
36  mPiSq4_ = 4.0*LauConstants::mPiSq;
37  sAdler_ = LauConstants::mPiSq*0.5; // Adler zero at 0.5*(mpi)^2
38 
39  // constant factors from BES data
40  Double_t b1 = 0.5843;
41  Double_t b2 = 1.6663;
42  Double_t A = 1.082;
43  Double_t m0 = 0.9264;
44 
45  this->setConstants(b1, b2, A, m0);
46 }
47 
49 {
50 }
51 
53 {
54  this->checkDaughterTypes();
55 
56  Double_t resSpin = this->getSpin();
57  if (resSpin != 0) {
58  std::cerr << "ERROR in LauSigmaRes : spin = " << resSpin << " is not zero!" << std::endl;
59  }
60 }
61 
62 void LauSigmaRes::setConstants(Double_t b1, Double_t b2, Double_t A, Double_t m0) {
63  b1_ = b1;
64  b2_ = b2;
65  A_ = A;
66  m0_ = m0;
67  m0Sq_ = m0_*m0_;
68  denom_ = m0Sq_ - sAdler_;
69 }
70 
72 {
73  // Check that the daughter tracks are the same type. Otherwise issue a warning
74  // and set the type to be pion for the Sigma distribution.
75  Int_t resPairAmpInt = this->getPairInt();
76  if (resPairAmpInt < 1 || resPairAmpInt > 3) {
77  std::cerr << "WARNING in LauSigmaRes::checkDaughterTypes : resPairAmpInt = " << resPairAmpInt << " is out of the range [1,2,3]." << std::endl;
78  return;
79  }
80 
81  const TString& nameDaug1 = this->getNameDaug1();
82  const TString& nameDaug2 = this->getNameDaug2();
83  if (!nameDaug1.CompareTo(nameDaug2, TString::kExact)) {
84  // Daughter types agree. Find out if we have pion or kaon system
85  if (!nameDaug1.Contains("pi")) {
86  std::cerr << "ERROR in LauSigmaRes::checkDaughterTypes : Sigma model is using daughters \""<<nameDaug1<<"\" and \""<<nameDaug2<<"\", which are not pions." << std::endl;
87  }
88  }
89 }
90 
91 LauComplex LauSigmaRes::resAmp(Double_t mass, Double_t spinTerm)
92 {
93  // This function returns the complex dynamical amplitude for a Sigma distribution
94  // given the invariant mass and cos(helicity) values.
95 
96  // First check that the appropriate daughters are either pi+pi- or K+K-
97  // Check that the daughter tracks are the same type. Otherwise issue a warning
98  // and set the type to be pion for the Sigma distribution. Returns the
99  // integer defined by the enum LauSigmaRes::SigmaPartType.
100 
101  Double_t s = mass*mass; // Invariant mass squared combination for the system
102  Double_t rho(0.0); // Phase-space factor
103  if (s > mPiSq4_) {rho = TMath::Sqrt(1.0 - mPiSq4_/s);}
104 
105  Double_t f = b2_*s + b1_; // f(s) function
106  Double_t numerator = s - sAdler_;
107  Double_t gamma(0.0);
108  if (TMath::Abs(denom_) > 1e-10 && TMath::Abs(A_) > 1e-10) {
109  // Decay width of the system
110  gamma = rho*(numerator/denom_)*f*TMath::Exp(-(s - m0Sq_)/A_);
111  }
112 
113  // Now form the complex amplitude - use relativistic BW form (without barrier factors)
114  // Note that the M factor in the denominator is not the "pole" at ~500 MeV, but is
115  // m0_ = 0.9264, the mass when the phase shift goes through 90 degrees.
116 
117  Double_t dMSq = m0Sq_ - s;
118  Double_t widthTerm = gamma*m0_;
119  LauComplex resAmplitude(dMSq, widthTerm);
120 
121  Double_t denomFactor = dMSq*dMSq + widthTerm*widthTerm;
122 
123  Double_t invDenomFactor = 0.0;
124  if (denomFactor > 1e-10) {invDenomFactor = 1.0/denomFactor;}
125 
126  resAmplitude.rescale(spinTerm*invDenomFactor);
127 
128  return resAmplitude;
129 
130 }
131 
virtual ~LauSigmaRes()
Destructor.
Definition: LauSigmaRes.cc:48
Class that defines the particular 3-body decay under study.
Definition: LauDaughters.hh:33
TString getNameDaug2() const
Get the name of the second daughter of the resonance.
void setConstants(Double_t b1, Double_t b2, Double_t A, Double_t m0)
Set the parameter values.
Definition: LauSigmaRes.cc:62
virtual void initialise()
Initialise the model.
Definition: LauSigmaRes.cc:52
Int_t getPairInt() const
Get the integer to identify which DP axis the resonance belongs to.
Double_t sAdler_
Defined as 0.5*mPi*mPi.
Definition: LauSigmaRes.hh:84
Class for defining the Sigma resonance model.
Definition: LauSigmaRes.hh:31
File containing declaration of LauSigmaRes class.
Double_t b2_
Factor from BES data.
Definition: LauSigmaRes.hh:88
Double_t b1_
Factor from BES data.
Definition: LauSigmaRes.hh:86
const Double_t mPiSq
Square of pi+- mass.
Definition: LauConstants.hh:65
Double_t m0_
Factor from BES data.
Definition: LauSigmaRes.hh:92
void checkDaughterTypes() const
Check that both daughters are the same type of particle.
Definition: LauSigmaRes.cc:71
virtual LauComplex resAmp(Double_t mass, Double_t spinTerm)
Complex resonant ampltiude.
Definition: LauSigmaRes.cc:91
Abstract class for defining type for resonance amplitude models (Breit-Wigner, Flatte etc...
Double_t A_
Factor from BES data.
Definition: LauSigmaRes.hh:90
void rescale(Double_t scaleVal)
Scale this by a factor.
Definition: LauComplex.hh:282
Double_t m0Sq_
Defined as m0 squared.
Definition: LauSigmaRes.hh:94
File containing LauConstants namespace.
Double_t denom_
Defined as m0Sq - sAdler.
Definition: LauSigmaRes.hh:96
Class for defining a complex number.
Definition: LauComplex.hh:47
TString getNameDaug1() const
Get the name of the first daughter of the resonance.
Double_t mPiSq4_
Defined as 4*mPi*mPi.
Definition: LauSigmaRes.hh:82
Int_t getSpin() const
Get the spin of the resonance.