laura is hosted by Hepforge, IPPP Durham
Laura++  v3r2
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
27 LauBlattWeisskopfFactor::LauBlattWeisskopfFactor( const LauResonanceInfo& resInfo, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ) :
28  spin_(resInfo.getSpin()),
29  radius_(new LauParameter("NEED_A_GOOD_NAME",resInfo.getBWRadius(),0.0,10.0,kTRUE)),
30  barrierType_(barrierType),
31  restFrame_(restFrame)
32 {
33  TString categoryName = this->setRadiusName( resInfo, category );
34  std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resInfo.getBWRadius() << std::endl;
35 }
36 
37 LauBlattWeisskopfFactor::LauBlattWeisskopfFactor( const LauResonanceInfo& resInfo, const Double_t resRadius, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category ) :
38  spin_(resInfo.getSpin()),
39  radius_(new LauParameter("NEED_A_GOOD_NAME",resRadius,0.0,10.0,kTRUE)),
40  barrierType_(barrierType),
41  restFrame_(restFrame)
42 {
43  TString categoryName = this->setRadiusName( resInfo, category );
44  std::cout << "INFO in LauBlattWeisskopfFactor constructor : creating radius parameter for category \"" << categoryName << "\", with initial value " << resRadius << std::endl;
45 }
46 
48 {
49 }
50 
52  spin_(newSpin),
53  radius_(other.radius_->createClone()),
54  barrierType_(other.barrierType_),
55  restFrame_(other.restFrame_)
56 {
57 }
58 
60 {
61  TString name = "BarrierRadius_";
62  TString categoryName;
63 
64  switch (category) {
65  case Parent :
66  categoryName = "Parent";
67  break;
68  case Indep :
69  categoryName = resInfo.getSanitisedName();
70  break;
71  case Light :
72  categoryName = "Light";
73  break;
74  case Kstar :
75  categoryName = "Kstar";
76  break;
77  case Charm :
78  categoryName = "Charm";
79  break;
80  case StrangeCharm :
81  categoryName = "StrangeCharm";
82  break;
83  case Charmonium :
84  categoryName = "Charmonium";
85  break;
86  case Beauty :
87  categoryName = "Beauty";
88  break;
89  case StrangeBeauty :
90  categoryName = "StrangeBeauty";
91  break;
92  case CharmBeauty :
93  categoryName = "CharmBeauty";
94  break;
95  case Custom1 :
96  categoryName = "Custom1";
97  break;
98  case Custom2 :
99  categoryName = "Custom2";
100  break;
101  case Custom3 :
102  categoryName = "Custom3";
103  break;
104  case Custom4 :
105  categoryName = "Custom4";
106  break;
107  default :
108  categoryName = "Unknown";
109  break;
110  }
111 
112  name.Append(categoryName);
113  radius_->name(name);
114 
115  return categoryName;
116 }
117 
119 {
120  LauBlattWeisskopfFactor* clone = new LauBlattWeisskopfFactor( *this, newSpin );
121  return clone;
122 }
123 
124 Double_t LauBlattWeisskopfFactor::calcFormFactor( const Double_t p ) const
125 {
126  // Calculate the requested form factor for the resonance, given the momentum value
127  Double_t fFactor(1.0);
128 
129  // For scalars the form factor is always unity
130  // TODO: and we currently don't have formulae for spin > 5
131  if ( (spin_ == 0) || (spin_ > 5) ) {
132  return fFactor;
133  }
134 
135  const Double_t radius = radius_->unblindValue();
136  const Double_t z = radius*radius*p*p;
137 
138  if ( barrierType_ == BWBarrier ) {
139  if (spin_ == 1) {
140  fFactor = TMath::Sqrt(2.0*z/(z + 1.0));
141  } else if (spin_ == 2) {
142  fFactor = TMath::Sqrt(13.0*z*z/(z*z + 3.0*z + 9.0));
143  } else if (spin_ == 3) {
144  fFactor = TMath::Sqrt(277.0*z*z*z/(z*z*z + 6.0*z*z + 45.0*z + 225.0));
145  } else if (spin_ == 4) {
146  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));
147  } else if (spin_ == 5) {
148  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));
149  }
150  } else if ( barrierType_ == BWPrimeBarrier ) {
151  if (spin_ == 1) {
152  fFactor = TMath::Sqrt(1.0/(z + 1.0));
153  } else if (spin_ == 2) {
154  fFactor = TMath::Sqrt(1.0/(z*z + 3.0*z + 9.0));
155  } else if (spin_ == 3) {
156  fFactor = TMath::Sqrt(1.0/(z*z*z + 6.0*z*z + 45.0*z + 225.0));
157  } else if (spin_ == 4) {
158  fFactor = TMath::Sqrt(1.0/(z*z*z*z + 10.0*z*z*z + 135.0*z*z + 1575.0*z + 11025.0));
159  } else if (spin_ == 5) {
160  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));
161  }
162  } else if ( barrierType_ == ExpBarrier ) {
163  if (spin_ == 1) {
164  fFactor = TMath::Exp( -TMath::Sqrt(z) );
165  } else if (spin_ == 2) {
166  fFactor = TMath::Exp( -z );
167  } else if (spin_ == 3) {
168  fFactor = TMath::Exp( -TMath::Sqrt(z*z*z) );
169  } else if (spin_ == 4) {
170  fFactor = TMath::Exp( -z*z );
171  } else if (spin_ == 5) {
172  fFactor = TMath::Exp( -TMath::Sqrt(z*z*z*z*z) );
173  }
174  }
175 
176  return fFactor;
177 }
178 
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.
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:35
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.
RestFrame
Define the rest frame in which the momentum should be calculated (only relevant for bachelor) ...
Double_t unblindValue() const
The unblinded value of the 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.
BlattWeisskopfCategory
Define resonance categories that will share common barrier factor radii.
LauBlattWeisskopfFactor(const LauResonanceInfo &resInfo, const BarrierType barrierType, const RestFrame restFrame, const BlattWeisskopfCategory category)
Constructor.