laura is hosted by Hepforge, IPPP Durham
Laura++  v3r0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauBlattWeisskopfFactor.cc
Go to the documentation of this file.
1 
2 // Copyright University of Warwick 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 <iostream>
16 
17 #include "TMath.h"
18 
20 #include "LauParameter.hh"
21 #include "LauResonanceInfo.hh"
22 
24 
25 
26 // Constructor
28  spin_(resInfo.getSpin()),
29  radius_(new LauParameter("NEED_A_GOOD_NAME",resInfo.getBWRadius(),0.0,10.0,kTRUE)),
30  barrierType_(barrierType)
31 {
32  TString categoryName = this->setRadiusName( resInfo, category );
33  std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resInfo.getBWRadius() << std::endl;
34 }
35 
36 LauBlattWeisskopfFactor::LauBlattWeisskopfFactor( const LauResonanceInfo& resInfo, const Double_t resRadius, const BarrierType barrierType, const BlattWeisskopfCategory category ) :
37  spin_(resInfo.getSpin()),
38  radius_(new LauParameter("NEED_A_GOOD_NAME",resRadius,0.0,10.0,kTRUE)),
39  barrierType_(barrierType)
40 {
41  TString categoryName = this->setRadiusName( resInfo, category );
42  std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resRadius << std::endl;
43 }
44 
46 {
47 }
48 
50  spin_(newSpin),
51  radius_(other.radius_->createClone()),
52  barrierType_(other.barrierType_)
53 {
54 }
55 
57 {
58  TString name = "BarrierRadius_";
59  TString categoryName;
60 
61  switch (category) {
62  case Parent :
63  categoryName = "Parent";
64  break;
65  case Indep :
66  categoryName = resInfo.getSanitisedName();
67  break;
68  case Light :
69  categoryName = "Light";
70  break;
71  case Kstar :
72  categoryName = "Kstar";
73  break;
74  case Charm :
75  categoryName = "Charm";
76  break;
77  case StrangeCharm :
78  categoryName = "StrangeCharm";
79  break;
80  case Charmonium :
81  categoryName = "Charmonium";
82  break;
83  case Beauty :
84  categoryName = "Beauty";
85  break;
86  case StrangeBeauty :
87  categoryName = "StrangeBeauty";
88  break;
89  case CharmBeauty :
90  categoryName = "CharmBeauty";
91  break;
92  case Custom1 :
93  categoryName = "Custom1";
94  break;
95  case Custom2 :
96  categoryName = "Custom2";
97  break;
98  case Custom3 :
99  categoryName = "Custom3";
100  break;
101  case Custom4 :
102  categoryName = "Custom4";
103  break;
104  default :
105  categoryName = "Unknown";
106  break;
107  }
108 
109  name.Append(categoryName);
110  radius_->name(name);
111 
112  return categoryName;
113 }
114 
116 {
117  LauBlattWeisskopfFactor* clone = new LauBlattWeisskopfFactor( *this, newSpin );
118  return clone;
119 }
120 
121 Double_t LauBlattWeisskopfFactor::calcFormFactor( const Double_t p ) const
122 {
123  // Calculate the requested form factor for the resonance, given the momentum value
124  Double_t fFactor(1.0);
125 
126  // For scalars the form factor is always unity
127  // TODO: and we currently don't have formulae for spin > 5
128  if ( (spin_ == 0) || (spin_ > 5) ) {
129  return fFactor;
130  }
131 
132  const Double_t radius = radius_->value();
133  const Double_t z = radius*radius*p*p;
134 
135  if ( barrierType_ == BWBarrier ) {
136  if (spin_ == 1) {
137  fFactor = TMath::Sqrt(2.0*z/(z + 1.0));
138  } else if (spin_ == 2) {
139  fFactor = TMath::Sqrt(13.0*z*z/(z*z + 3.0*z + 9.0));
140  } else if (spin_ == 3) {
141  fFactor = TMath::Sqrt(277.0*z*z*z/(z*z*z + 6.0*z*z + 45.0*z + 225.0));
142  } else if (spin_ == 4) {
143  fFactor = TMath::Sqrt(12746.0*z*z*z*z/(z*z*z*z + 10.0*z*z*z + 135.0*z*z + 1575.0*z + 11025.0));
144  } else if (spin_ == 5) {
145  fFactor = TMath::Sqrt(998881.0*z*z*z*z*z/(z*z*z*z*z + 15.0*z*z*z*z + 315.0*z*z*z + 6300.0*z*z + 99225.0*z + 893025.0));
146  }
147  } else if ( barrierType_ == BWPrimeBarrier ) {
148  if (spin_ == 1) {
149  fFactor = TMath::Sqrt(1.0/(z + 1.0));
150  } else if (spin_ == 2) {
151  fFactor = TMath::Sqrt(1.0/(z*z + 3.0*z + 9.0));
152  } else if (spin_ == 3) {
153  fFactor = TMath::Sqrt(1.0/(z*z*z + 6.0*z*z + 45.0*z + 225.0));
154  } else if (spin_ == 4) {
155  fFactor = TMath::Sqrt(1.0/(z*z*z*z + 10.0*z*z*z + 135.0*z*z + 1575.0*z + 11025.0));
156  } else if (spin_ == 5) {
157  fFactor = TMath::Sqrt(1.0/(z*z*z*z*z + 15.0*z*z*z*z + 315.0*z*z*z + 6300.0*z*z + 99225.0*z + 893025.0));
158  }
159  } else if ( barrierType_ == ExpBarrier ) {
160  if (spin_ == 1) {
161  fFactor = TMath::Exp( -TMath::Sqrt(z) );
162  } else if (spin_ == 2) {
163  fFactor = TMath::Exp( -z );
164  } else if (spin_ == 3) {
165  fFactor = TMath::Exp( -TMath::Sqrt(z*z*z) );
166  } else if (spin_ == 4) {
167  fFactor = TMath::Exp( -z*z );
168  } else if (spin_ == 5) {
169  fFactor = TMath::Exp( -TMath::Sqrt(z*z*z*z*z) );
170  }
171  }
172 
173  return fFactor;
174 }
175 
File containing declaration of LauResonanceInfo class.
ClassImp(LauAbsCoeffSet)
Class for defining the properties of a resonant particle.
TString getSanitisedName() const
Retrieve the sanitised name of the resonant particle.
const TString & name() const
The parameter name.
LauBlattWeisskopfFactor(const LauResonanceInfo &resInfo, const BarrierType barrierType, const BlattWeisskopfCategory category)
Constructor.
Double_t calcFormFactor(const Double_t p) const
Calculate form factor value.
LauParameter * radius_
Radius parameter.
virtual ~LauBlattWeisskopfFactor()
Destructor.
Bool_t clone() const
Check whether is a clone or not.
File containing declaration of LauBlattWeisskopfFactor class.
File containing declaration of LauParameter class.
const BarrierType barrierType_
Barrier type.
Class for defining the fit parameter objects.
Definition: LauParameter.hh:34
BarrierType
Define the allowed types of barrier factors.
const UInt_t spin_
Resonance spin.
TString setRadiusName(const LauResonanceInfo &resInfo, const BlattWeisskopfCategory category)
Set the name of the radius parameter.
Class that implements the Blatt-Weisskopf barrier factor.
LauParameter * createClone(Double_t constFactor=1.0)
Method to create a clone from the parent parameter using the copy constructor.
LauBlattWeisskopfFactor * createClone(const UInt_t newSpin)
Method to create a new factor with cloned radius parameter.
Double_t value() const
The value of the parameter.
BlattWeisskopfCategory
Define resonance categories that will share common barrier factor radii.