laura is hosted by Hepforge, IPPP Durham
Laura++  v1r0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauResonanceMaker.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 using std::cout;
17 using std::endl;
18 
19 #include "LauAbsResonance.hh"
20 #include "LauBelleNR.hh"
21 #include "LauBelleSymNR.hh"
22 #include "LauBreitWignerRes.hh"
23 #include "LauDabbaRes.hh"
24 #include "LauDaughters.hh"
25 #include "LauFlatteRes.hh"
26 #include "LauGounarisSakuraiRes.hh"
27 #include "LauKappaRes.hh"
28 #include "LauLASSRes.hh"
29 #include "LauLASSBWRes.hh"
30 #include "LauLASSNRRes.hh"
31 #include "LauNRAmplitude.hh"
32 #include "LauRelBreitWignerRes.hh"
33 #include "LauResonanceInfo.hh"
34 #include "LauResonanceMaker.hh"
35 #include "LauSigmaRes.hh"
36 
37 ClassImp(LauResonanceMaker)
38 
39 
41  nResDefMax_(0),
42  daughters_(daughters)
43 {
44  this->createResonanceVector();
45 }
46 
48 {
49 }
50 
52 {
53  // Function to create all possible resonances that this class supports.
54  // Also add in the sigma and kappa - but a special paramterisation is used
55  // instead of the PDG "pole mass and width" values.
56 
57  cout<<"In createResonanceVector: setting up possible resonance states..."<<endl;
58 
59  // Define the resonance names and store them in the array
60  resInfo_.clear();
61  resInfo_.reserve(100);
62  // rho resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
63  // rho(770)
64  resInfo_.push_back(LauResonanceInfo("rho0(770)", 0.77549, 0.1491, 1, 0, 5.3));
65  resInfo_.push_back(LauResonanceInfo("rho+(770)", 0.77549, 0.1491, 1, +1, 5.3));
66  resInfo_.push_back(LauResonanceInfo("rho-(770)", 0.77549, 0.1491, 1, -1, 5.3));
67  // rho(1450)
68  resInfo_.push_back(LauResonanceInfo("rho0(1450)", 1.465, 0.400, 1, 0 ));
69  resInfo_.push_back(LauResonanceInfo("rho+(1450)", 1.465, 0.400, 1, +1 ));
70  resInfo_.push_back(LauResonanceInfo("rho-(1450)", 1.465, 0.400, 1, -1 ));
71  // rho(1700)
72  resInfo_.push_back(LauResonanceInfo("rho0(1700)", 1.720, 0.250, 1, 0 ));
73  resInfo_.push_back(LauResonanceInfo("rho+(1700)", 1.720, 0.250, 1, +1 ));
74  resInfo_.push_back(LauResonanceInfo("rho-(1700)", 1.720, 0.250, 1, -1 ));
75 
76  // K* resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
77  // K*(892)
78  resInfo_.push_back(LauResonanceInfo("K*0(892)", 0.89594, 0.0487, 1, 0, 3.4));
79  resInfo_.push_back(LauResonanceInfo("K*+(892)", 0.89166, 0.0508, 1, +1, 3.4));
80  resInfo_.push_back(LauResonanceInfo("K*-(892)", 0.89166, 0.0508, 1, -1, 3.4));
81  // K*(1410)
82  resInfo_.push_back(LauResonanceInfo("K*0(1410)", 1.414, 0.232, 1, 0 ));
83  resInfo_.push_back(LauResonanceInfo("K*+(1410)", 1.414, 0.232, 1, +1 ));
84  resInfo_.push_back(LauResonanceInfo("K*-(1410)", 1.414, 0.232, 1, -1 ));
85  // K*_0(1430)
86  resInfo_.push_back(LauResonanceInfo("K*0_0(1430)", 1.425, 0.270, 0, 0 ));
87  resInfo_.push_back(LauResonanceInfo("K*+_0(1430)", 1.425, 0.270, 0, +1 ));
88  resInfo_.push_back(LauResonanceInfo("K*-_0(1430)", 1.425, 0.270, 0, -1 ));
89  // K*_2(1430)
90  resInfo_.push_back(LauResonanceInfo("K*0_2(1430)", 1.4324, 0.109, 2, 0 ));
91  resInfo_.push_back(LauResonanceInfo("K*+_2(1430)", 1.4256, 0.0985, 2, +1 ));
92  resInfo_.push_back(LauResonanceInfo("K*-_2(1430)", 1.4256, 0.0985, 2, -1 ));
93  // K*(1680)
94  resInfo_.push_back(LauResonanceInfo("K*0(1680)", 1.717, 0.322, 1, 0 ));
95  resInfo_.push_back(LauResonanceInfo("K*+(1680)", 1.717, 0.322, 1, +1 ));
96  resInfo_.push_back(LauResonanceInfo("K*-(1680)", 1.717, 0.322, 1, -1 ));
97 
98  // phi resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
99  // phi(1020)
100  resInfo_.push_back(LauResonanceInfo("phi(1020)", 1.019455, 0.00426, 1, 0 ));
101  // phi(1680)
102  resInfo_.push_back(LauResonanceInfo("phi(1680)", 1.680, 0.150, 1, 0 ));
103 
104  // f resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
105  // f_0(980)
106  resInfo_.push_back(LauResonanceInfo("f_0(980)", 0.990, 0.070, 0, 0 ));
107  // f_2(1270)
108  resInfo_.push_back(LauResonanceInfo("f_2(1270)", 1.2751, 0.1851, 2, 0 ));
109  // f_0(1370)
110  resInfo_.push_back(LauResonanceInfo("f_0(1370)", 1.370, 0.350, 0, 0 ));
111  // f'_0(1300), from Belle's Kspipi paper
112  resInfo_.push_back(LauResonanceInfo("f'_0(1300)", 1.449, 0.126, 0, 0 ));
113  // f_0(1500)
114  resInfo_.push_back(LauResonanceInfo("f_0(1500)", 1.505, 0.109, 0, 0 ));
115  // f'_2(1525)
116  resInfo_.push_back(LauResonanceInfo("f'_2(1525)", 1.525, 0.073, 2, 0 ));
117 
118  // omega resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
119  // omega(782)
120  resInfo_.push_back(LauResonanceInfo("omega(782)", 0.78265, 0.00849, 1, 0 ));
121 
122  // a resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
123  // a_0(980)
124  resInfo_.push_back(LauResonanceInfo("a0_0(980)", 0.9847, 0.092, 0, 0 ));
125  resInfo_.push_back(LauResonanceInfo("a+_0(980)", 0.9847, 0.092, 0, +1 ));
126  resInfo_.push_back(LauResonanceInfo("a-_0(980)", 0.9847, 0.092, 0, -1 ));
127  // a_0(1450)
128  resInfo_.push_back(LauResonanceInfo("a0_0(1450)", 1.474, 0.265, 0, 0 ));
129  resInfo_.push_back(LauResonanceInfo("a+_0(1450)", 1.474, 0.265, 0, +1 ));
130  resInfo_.push_back(LauResonanceInfo("a-_0(1450)", 1.474, 0.265, 0, -1 ));
131  // a_2(1320)
132  resInfo_.push_back(LauResonanceInfo("a0_2(1320)", 1.3183, 0.107, 2, 0 ));
133  resInfo_.push_back(LauResonanceInfo("a+_2(1320)", 1.3183, 0.107, 2, +1 ));
134  resInfo_.push_back(LauResonanceInfo("a-_2(1320)", 1.3183, 0.107, 2, -1 ));
135 
136  // charmonium resonances name, mass, width, spin, charge, range parameter (defaults to 4.0)
137  // chi_c0
138  resInfo_.push_back(LauResonanceInfo("chi_c0", 3.41475, 0.0104, 0, 0 ));
139  // chi_c2
140  resInfo_.push_back(LauResonanceInfo("chi_c2", 3.55620, 0.00198, 2, 0 ));
141  // X(3872)
142  resInfo_.push_back(LauResonanceInfo("X(3872)", 3.87168, 0.0012, 1, 0 ));
143 
144  // unknown scalars name, mass, width, spin, charge, range parameter (defaults to 4.0)
145  // sigma
146  resInfo_.push_back(LauResonanceInfo("sigma0", 0.560, 0.500, 0, 0 ));
147  resInfo_.push_back(LauResonanceInfo("sigma+", 0.560, 0.500, 0, +1 ));
148  resInfo_.push_back(LauResonanceInfo("sigma-", 0.560, 0.500, 0, -1 ));
149  // kappa
150  resInfo_.push_back(LauResonanceInfo("kappa0", 0.720, 0.700, 0, 0 ));
151  resInfo_.push_back(LauResonanceInfo("kappa+", 0.720, 0.700, 0, +1 ));
152  resInfo_.push_back(LauResonanceInfo("kappa-", 0.720, 0.700, 0, -1 ));
153  // dabba
154  resInfo_.push_back(LauResonanceInfo("dabba0", 2.098, 0.520, 0, 0 ));
155  resInfo_.push_back(LauResonanceInfo("dabba+", 2.098, 0.520, 0, +1 ));
156  resInfo_.push_back(LauResonanceInfo("dabba-", 2.098, 0.520, 0, -1 ));
157 
158  // excited charm states name, mass, width, spin, charge, range parameter (defaults to 4.0)
159  // D*
160  resInfo_.push_back(LauResonanceInfo("D*0", 2.00698, 0.0021, 1, 0 ));
161  resInfo_.push_back(LauResonanceInfo("D*+", 2.01028, 0.000096, 1, +1 ));
162  resInfo_.push_back(LauResonanceInfo("D*-", 2.01028, 0.000096, 1, -1 ));
163  // D*_0
164  resInfo_.push_back(LauResonanceInfo("D*0_0", 2.318, 0.267, 0, 0 ));
165  resInfo_.push_back(LauResonanceInfo("D*+_0", 2.403, 0.283, 0, +1 ));
166  resInfo_.push_back(LauResonanceInfo("D*-_0", 2.403, 0.283, 0, -1 ));
167  // D*_2
168  resInfo_.push_back(LauResonanceInfo("D*0_2", 2.4626, 0.049, 2, 0 ));
169  //AVERAGE--resInfo_.push_back(LauResonanceInfo("D*0_2", 2.4618, 0.049, 2, 0 ));
170  resInfo_.push_back(LauResonanceInfo("D*+_2", 2.4644, 0.037, 2, +1 ));
171  resInfo_.push_back(LauResonanceInfo("D*-_2", 2.4644, 0.037, 2, -1 ));
172  // D1(2420)
173  resInfo_.push_back(LauResonanceInfo("D1(2420)", 2.4213, 0.0271, 1, 0 ));
174  // D(2600)
175  //OLD--resInfo_.push_back(LauResonanceInfo("D0(2600)", 2.6087, 0.093, 0, 0 ));
176  resInfo_.push_back(LauResonanceInfo("D0(2600)", 2.612, 0.093, 0, 0 ));
177  resInfo_.push_back(LauResonanceInfo("D+(2600)", 2.6213, 0.093, 0, +1 ));
178  resInfo_.push_back(LauResonanceInfo("D-(2600)", 2.6213, 0.093, 0, -1 ));
179  // D(2760)
180  //OLD--resInfo_.push_back(LauResonanceInfo("D0(2760)", 2.7633, 0.061, 1, 0 ));
181  resInfo_.push_back(LauResonanceInfo("D0(2760)", 2.761, 0.063, 1, 0 ));
182  resInfo_.push_back(LauResonanceInfo("D+(2760)", 2.7697, 0.061, 1, +1 ));
183  resInfo_.push_back(LauResonanceInfo("D-(2760)", 2.7697, 0.061, 1, -1 ));
184  // D(2900)
185  resInfo_.push_back(LauResonanceInfo("D0(3000)", 3.0, 0.15, 0, 0 ));
186  // D(3400)
187  resInfo_.push_back(LauResonanceInfo("D0(3400)", 3.4, 0.15, 0, 0 ));
188 
189  // excited bottom states
190  // B*
191  resInfo_.push_back(LauResonanceInfo("B*0", 5.3252, 0.00, 1, 0 ));
192  resInfo_.push_back(LauResonanceInfo("B*+", 5.3250, 0.00, 1, +1 ));
193  resInfo_.push_back(LauResonanceInfo("B*-", 5.3250, 0.00, 1, -1 ));
194 
195  // nonresonant models name, mass, width, spin, charge, range parameter (defaults to 4.0)
196  // Phase-space nonresonant model
197  resInfo_.push_back(LauResonanceInfo("NonReson", 0.0, 0.0, 0, 0 ));
198  // Theory-based nonresonant model
199  resInfo_.push_back(LauResonanceInfo("NRModel", 0.0, 0.0, 0, 0 ));
200  // Belle nonresonant models
201  resInfo_.push_back(LauResonanceInfo("BelleSymNR", 0.0, 0.0, 0, 0 ));
202  resInfo_.push_back(LauResonanceInfo("BelleNR", 0.0, 0.0, 0, 0 ));
203  resInfo_.push_back(LauResonanceInfo("BelleNR_Swave", 0.0, 0.0, 0, 0 ));
204  resInfo_.push_back(LauResonanceInfo("BelleNR_Pwave", 0.0, 0.0, 1, 0 ));
205  resInfo_.push_back(LauResonanceInfo("BelleNR_Dwave", 0.0, 0.0, 2, 0 ));
206  // Taylor expansion nonresonant model
207  resInfo_.push_back(LauResonanceInfo("NRTaylor", 0.0, 0.0, 0, 0 ));
208  // LASS nonresonant model
209  resInfo_.push_back(LauResonanceInfo("LASSNR", 1.412, 0.294, 0, 0 ));
210 
211  nResDefMax_ = resInfo_.size();
212 }
213 
214 LauAbsResonance* LauResonanceMaker::getResonance(const TString& resName, Int_t resPairAmpInt, const TString& resType)
215 {
216  // Routine to return the appropriate LauAbsResonance object given the resonance
217  // name (resName), which daughter is the bachelor track (resPairAmpInt = 1,2 or 3),
218  // and the resonance type ("BW" = Breit-Wigner, "Flatte" = Flatte distribution).
219 
220  Double_t resMass(0.0);
221  Double_t resWidth(0.0);
222  Int_t resSpin(0);
223  Int_t resCharge(0);
224  //Double_t resRange(0.0);
225 
226  Bool_t gotResonance(kFALSE);
227 
228  // Loop over all possible resonance states we have defined in
229  // createResonanceVector() until we get a match with the name of the resonance
230 
231  for (std::vector<LauResonanceInfo>::const_iterator iter=resInfo_.begin(); iter!=resInfo_.end(); ++iter) {
232 
233  if (resName == (*iter).getName()) {
234  // We have recognised the resonance name.
235  cout<<"Creating resonance: "<<resName<<endl;
236 
237  resMass = (*iter).getMass();
238  resWidth = (*iter).getWidth();
239  resSpin = (*iter).getSpin();
240  resCharge = (*iter).getCharge();
241  //resRange = (*iter).getRange();
242 
243  // stop looping
244  gotResonance = kTRUE;
245  break;
246  }
247  }
248 
249  // if we couldn't find the right resonance then we should return a null pointer
250  if (!gotResonance) {
251  return 0;
252  }
253 
254  LauAbsResonance* theResonance(0);
255 
256  // Now construct the resonnace using the right type.
257  // If we don't recognise the resonance model name, just use a simple Breit-Wigner.
258 
259  TString resTypeName(resType); resTypeName.ToLower();
260 
261  if (!resTypeName.CompareTo("flatte")) {
262 
263  // Flatte distribution - coupled channel Breit-Wigner
264  theResonance =
265  new LauFlatteRes(resName, resMass, resWidth, resSpin, resCharge,
266  resPairAmpInt, daughters_);
267 
268  } else if (!resTypeName.CompareTo("relbw")) {
269 
270  // Relativistic Breit-Wigner with Blatt-Weisskopf factors.
271  theResonance =
272  new LauRelBreitWignerRes(resName, resMass, resWidth, resSpin, resCharge,
273  resPairAmpInt, daughters_);
274  // Set the Blatt-Weisskopf barrier radius for the resonance and its parent
275  //LauRelBreitWignerRes * theRBW = dynamic_cast<LauRelBreitWignerRes*>(theResonance);
276  //Double_t parentRange = 4.0;
277  //theRBW->setBarrierRadii(resRange, parentRange);
278 
279  } else if (!resTypeName.CompareTo("dabba")) {
280 
281  // Dabba model - should only be used for the D-pi system
282  theResonance =
283  new LauDabbaRes(resName, resMass, resWidth, resSpin, resCharge,
284  resPairAmpInt, daughters_);
285 
286  } else if (!resTypeName.CompareTo("kappa")) {
287 
288  // Kappa model - should only be used for the K-pi system
289  theResonance =
290  new LauKappaRes(resName, resMass, resWidth, resSpin, resCharge,
291  resPairAmpInt, daughters_);
292 
293  } else if (!resTypeName.CompareTo("sigma")) {
294 
295  // Sigma model - should only be used for the pi-pi system
296  theResonance =
297  new LauSigmaRes(resName, resMass, resWidth, resSpin, resCharge,
298  resPairAmpInt, daughters_);
299 
300  } else if (!resTypeName.CompareTo("lass-bw")) {
301 
302  // LASS function to try and model the K-pi S-wave better
303  theResonance =
304  new LauLASSBWRes(resName, resMass, resWidth, resSpin, resCharge,
305  resPairAmpInt, daughters_);
306 
307  } else if (!resTypeName.CompareTo("lass-nr")) {
308 
309  // LASS function to try and model the K-pi S-wave better
310  theResonance =
311  new LauLASSNRRes(resName, resMass, resWidth, resSpin, resCharge,
312  resPairAmpInt, daughters_);
313 
314  } else if (!resTypeName.CompareTo("lass")) {
315 
316  // LASS function to try and model the K-pi S-wave better
317  theResonance =
318  new LauLASSRes(resName, resMass, resWidth, resSpin, resCharge,
319  resPairAmpInt, daughters_);
320 
321  } else if (!resTypeName.CompareTo("gs")) {
322 
323  // Gounaris-Sakurai function to try and model the rho(770) better
324  theResonance =
325  new LauGounarisSakuraiRes(resName, resMass, resWidth, resSpin, resCharge,
326  resPairAmpInt, daughters_);
327 
328  } else if (!resTypeName.CompareTo("nrmodel")) {
329 
330  // NR amplitude model - arguments are there to preserve the interface
331  theResonance =
332  new LauNRAmplitude(resName, resMass, resWidth, resSpin, resCharge,
333  resPairAmpInt, daughters_);
334 
335  } else if ( !resTypeName.CompareTo("bellesymnr") || !resTypeName.CompareTo("nrtaylor") ) {
336 
337  // Belle NR amplitude model - arguments are there to preserve the interface
338  theResonance =
339  new LauBelleSymNR(resName, resMass, resWidth, resSpin, resCharge,
340  resPairAmpInt, daughters_);
341 
342  } else if ( !resTypeName.CompareTo("bellenr") ) {
343 
344  // Belle NR amplitude model - arguments are there to preserve the interface
345  theResonance =
346  new LauBelleNR(resName, resMass, resWidth, resSpin, resCharge,
347  resPairAmpInt, daughters_);
348 
349  } else {
350 
351  // Simple non-relativistic Breit-Wigner
352  theResonance =
353  new LauBreitWignerRes(resName, resMass, resWidth, resSpin, resCharge,
354  resPairAmpInt, daughters_);
355 
356  }
357 
358  return theResonance;
359 
360 }
361 
362 Int_t LauResonanceMaker::resTypeInt(const TString& name) const
363 {
364  // Internal function that returns the resonance integer, specified by the
365  // order of the resonance vector defined in createResonanceVector(),
366  // for a given resonance name.
367  Int_t resTypInt(-99);
368  Int_t i(0);
369 
370  if (name.Contains("NonReson")) {
371 
372  resTypInt = -1;
373 
374  } else {
375 
376  for (std::vector<LauResonanceInfo>::const_iterator iter=resInfo_.begin(); iter!=resInfo_.end(); ++iter) {
377 
378  if (name.BeginsWith((*iter).getName(), TString::kExact) == kTRUE) {
379  // We have recognised the resonance from those that are available
380  resTypInt = i;
381  return resTypInt;
382  }
383  ++i;
384  }
385  }
386 
387  return resTypInt;
388 }
389 
File containing declaration of LauNRAmplitude class.
Class for defining the LASS resonance model.
Definition: LauLASSRes.hh:31
const LauDaughters * daughters_
The daughters.
File containing declaration of LauResonanceInfo class.
Class for defining the properties of a resonant particle.
const TString & name() const
The parameter name.
Class that defines the particular 3-body decay under study.
Definition: LauDaughters.hh:33
File containing declaration of LauBelleNR class.
Class for defininf the Gounaris-Sakurai resonance model.
File containing declaration of LauDaughters class.
LauAbsResonance * getResonance(const TString &resName, Int_t resPairAmpInt, const TString &resType)
Create a resonance.
File containing declaration of LauGounarisSakuraiRes class.
File containing declaration of LauBelleSymNR class.
File containing declaration of LauBreitWignerRes class.
Int_t resTypeInt(const TString &name) const
Retrieve the integer index for the specified resonance.
File containing declaration of LauRelBreitWignerRes class.
File containing declaration of LauLASSBWRes class.
Class for defining the non resonant part of the LASS model.
Definition: LauLASSNRRes.hh:31
Class for defining the Sigma resonance model.
Definition: LauSigmaRes.hh:31
Class for creating resonances.
void createResonanceVector()
Create the list of known resonances.
File containing declaration of LauResonanceMaker class.
File containing declaration of LauSigmaRes class.
Class for defining the Belle nonresonant model.
Definition: LauBelleNR.hh:33
Class for defining the NR amplitude model.
Class for defining the simple Breit-Wigner resonance model.
Class for defining the Kappa resonance model.
Definition: LauKappaRes.hh:32
File containing declaration of LauDabbaRes class.
Class for defining the relativistic Breit-Wigner resonance model.
File containing declaration of LauLASSRes class.
File containing declaration of LauLASSNRRes class.
virtual ~LauResonanceMaker()
Destructor.
Class for defining the symmetric Belle Non Resonant model.
Class for defining the resonant part of the LASS model.
Definition: LauLASSBWRes.hh:31
Abstract class for defining type for resonance amplitude models (Breit-Wigner, Flatte etc...
Class for defining the Dabba resonance model.
Definition: LauDabbaRes.hh:31
std::vector< LauResonanceInfo > resInfo_
The known resonances.
File containing declaration of LauAbsResonance class.
UInt_t nResDefMax_
The number of known resonances.
Class for defining the Flatte resonance model.
Definition: LauFlatteRes.hh:31
File containing declaration of LauKappaRes class.
File containing declaration of LauFlatteRes class.