laura is hosted by Hepforge, IPPP Durham
Laura++  v3r2
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauAbsResonance.cc
Go to the documentation of this file.
1 
2 // Copyright University of Warwick 2004 - 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 "TSystem.h"
18 
19 #include "LauAbsResonance.hh"
20 #include "LauConstants.hh"
21 #include "LauDaughters.hh"
22 #include "LauKinematics.hh"
23 #include "LauParameter.hh"
24 #include "LauResonanceInfo.hh"
25 
27 
28 bool LauAbsResonance::isIncoherentModel(LauResonanceModel model) {
29  switch(model) {
30  case BW:
31  case RelBW:
32  case GS:
33  case Flatte:
34  case Sigma:
35  case Kappa:
36  case Dabba:
37  case LASS:
38  case LASS_BW:
39  case LASS_NR:
40  case EFKLLM:
41  case KMatrix:
42  case FlatNR:
43  case NRModel:
44  case BelleNR:
45  case PowerLawNR:
46  case BelleSymNR:
47  case BelleSymNRNoInter:
48  case TaylorNR:
49  case PolNR:
50  case MIPW_MagPhase:
51  case MIPW_RealImag:
52  case RhoOmegaMix_GS:
53  case RhoOmegaMix_RBW:
54  case RhoOmegaMix_GS_1:
55  case RhoOmegaMix_RBW_1:
56  break;
57  case GaussIncoh:
58  return true;
59  }
60  return false;
61 }
62 
63 // Constructor
64 LauAbsResonance::LauAbsResonance(LauResonanceInfo* resInfo, const Int_t resPairAmpInt, const LauDaughters* daughters) :
65  resInfo_(resInfo),
66  daughters_(daughters),
67  nameParent_(""), nameDaug1_(""), nameDaug2_(""), nameBachelor_(""),
68  chargeParent_(0), chargeDaug1_(0), chargeDaug2_(0), chargeBachelor_(0),
69  massParent_(0.0), massDaug1_(0.0), massDaug2_(0.0), massBachelor_(0.0),
70  resName_( (resInfo!=0) ? resInfo->getName() : "" ),
71  sanitisedName_( (resInfo!=0) ? resInfo->getSanitisedName() : "" ),
72  resMass_( (resInfo!=0) ? resInfo->getMass() : 0 ),
73  resWidth_( (resInfo!=0) ? resInfo->getWidth() : 0 ),
74  resSpin_( (resInfo!=0) ? resInfo->getSpin() : 0 ),
75  resCharge_( (resInfo!=0) ? resInfo->getCharge() : 0 ),
76  resPairAmpInt_(resPairAmpInt),
77  parBWFactor_(0),
78  resBWFactor_(0),
79  spinType_(Zemach_P),
80  flipHelicity_(kFALSE),
81  ignoreMomenta_(kFALSE),
82  ignoreSpin_(kFALSE),
83  ignoreBarrierScaling_(kFALSE),
84  mass_(0.0),
85  cosHel_(0.0),
86  q_(0.0),
87  p_(0.0),
88  pstar_(0.0),
89  erm_(1.0),
90  covFactor_(1.0)
91 {
92  if ( resInfo == 0 ) {
93  std::cerr << "ERROR in LauAbsResonance constructor : null LauResonanceInfo object provided" << std::endl;
94  gSystem->Exit(EXIT_FAILURE);
95  }
96 
97  if ( daughters_ == 0 ) {
98  std::cerr << "ERROR in LauAbsResonance constructor : null LauDaughters object provided" << std::endl;
99  gSystem->Exit(EXIT_FAILURE);
100  }
101 
102  nameParent_ = this->getNameParent();
103  nameDaug1_ = this->getNameDaug1();
104  nameDaug2_ = this->getNameDaug2();
105  nameBachelor_ = this->getNameBachelor();
106  massParent_ = this->getMassParent();
107  massDaug1_ = this->getMassDaug1();
108  massDaug2_ = this->getMassDaug2();
109  massBachelor_ = this->getMassBachelor();
110  chargeParent_ = this->getChargeParent();
111  chargeDaug1_ = this->getChargeDaug1();
112  chargeDaug2_ = this->getChargeDaug2();
114 
115  // check that the total charge adds up to that of the resonance
116  Int_t totalCharge = chargeDaug1_ + chargeDaug2_;
117  if ( (totalCharge != resCharge_) && (resPairAmpInt_ != 0) ) {
118  std::cerr << "ERROR in LauAbsResonance : Total charge of daughters = " << totalCharge << ". Resonance charge = " << resCharge_ << "." << std::endl;
119  gSystem->Exit(EXIT_FAILURE);
120  }
121 }
122 
123 // Constructor
124 LauAbsResonance::LauAbsResonance(const TString& resName, const Int_t resPairAmpInt, const LauDaughters* daughters) :
125  resInfo_(0),
126  daughters_(daughters),
127  nameParent_(""), nameDaug1_(""), nameDaug2_(""), nameBachelor_(""),
128  chargeParent_(0), chargeDaug1_(0), chargeDaug2_(0), chargeBachelor_(0),
129  massParent_(0.0), massDaug1_(0.0), massDaug2_(0.0), massBachelor_(0.0),
130  resName_(resName),
131  sanitisedName_(resName),
132  resMass_(0),
133  resWidth_(0),
134  resSpin_(0),
135  resCharge_(0),
136  resPairAmpInt_(resPairAmpInt),
137  parBWFactor_(0),
138  resBWFactor_(0),
139  spinType_(Zemach_P),
140  flipHelicity_(kFALSE),
141  ignoreMomenta_(kFALSE),
142  ignoreSpin_(kFALSE),
143  ignoreBarrierScaling_(kFALSE),
144  mass_(0.0),
145  cosHel_(0.0),
146  q_(0.0),
147  p_(0.0),
148  pstar_(0.0),
149  erm_(1.0),
150  covFactor_(1.0)
151 {
152  if ( daughters_ == 0 ) {
153  std::cerr << "ERROR in LauAbsResonance constructor : null LauDaughters object provided" << std::endl;
154  gSystem->Exit(EXIT_FAILURE);
155  }
156 
157  nameParent_ = this->getNameParent();
158  nameDaug1_ = this->getNameDaug1();
159  nameDaug2_ = this->getNameDaug2();
160  nameBachelor_ = this->getNameBachelor();
161  massParent_ = this->getMassParent();
162  massDaug1_ = this->getMassDaug1();
163  massDaug2_ = this->getMassDaug2();
164  massBachelor_ = this->getMassBachelor();
165  chargeParent_ = this->getChargeParent();
166  chargeDaug1_ = this->getChargeDaug1();
167  chargeDaug2_ = this->getChargeDaug2();
169 
170  // check that the total charge adds up to that of the resonance
171  Int_t totalCharge = chargeDaug1_ + chargeDaug2_;
172  if ( (totalCharge != resCharge_) && (resPairAmpInt_ != 0) ) {
173  std::cerr << "ERROR in LauAbsResonance : Total charge of daughters = " << totalCharge << ". Resonance charge = " << resCharge_ << "." << std::endl;
174  gSystem->Exit(EXIT_FAILURE);
175  }
176 }
177 
178 // Destructor
180 {
181 }
182 
184 {
185  // Use LauKinematics interface for amplitude
186 
187  // For resonance made from tracks i, j, we need the momenta
188  // of tracks i and k in the i-j rest frame for spin helicity calculations
189  // in the Zemach tensor formalism.
190  // Also need the momentum of track k in the parent rest-frame for
191  // calculation of the Blatt-Weisskopf factors.
192  mass_ = 0.0; cosHel_ = 0.0;
193  q_ = 0.0; p_ = 0.0; pstar_ = 0.0;
194  erm_ = 1.0; covFactor_ = 1.0;
195 
196  if (resPairAmpInt_ == 1) {
197 
198  mass_ = kinematics->getm23();
199  cosHel_ = kinematics->getc23();
200  q_ = kinematics->getp2_23();
201  p_ = kinematics->getp1_23();
202  pstar_ = kinematics->getp1_Parent();
203  erm_ = kinematics->getcov23();
204 
205  } else if (resPairAmpInt_ == 2) {
206 
207  mass_ = kinematics->getm13();
208  cosHel_ = kinematics->getc13();
209  q_ = kinematics->getp1_13();
210  p_ = kinematics->getp2_13();
211  pstar_ = kinematics->getp2_Parent();
212  erm_ = kinematics->getcov13();
213 
214  } else if (resPairAmpInt_ == 3) {
215 
216  mass_ = kinematics->getm12();
217  cosHel_ = kinematics->getc12();
218  q_ = kinematics->getp1_12();
219  p_ = kinematics->getp3_12();
220  pstar_ = kinematics->getp3_Parent();
221  erm_ = kinematics->getcov12();
222 
223  } else {
224  std::cerr << "ERROR in LauAbsResonance::amplitude : Nonsense setup of resPairAmp array." << std::endl;
225  gSystem->Exit(EXIT_FAILURE);
226  }
227 
228  if (this->flipHelicity()) {
229  cosHel_ *= -1.0;
230  }
231 
232  if (this->ignoreMomenta()) {
233  q_ = 1.0;
234  p_ = 1.0;
235  pstar_ = 1.0;
236  erm_ = 1.0;
237  }
238 
239  // Calculate the spin factors
240  Double_t spinTerm(1.0);
241  Double_t pProd(1.0);
242 
243  if (!this->ignoreSpin()) {
244  switch ( this->getSpinType() ) {
245 
246  case Zemach_P:
247  pProd = q_*p_;
248  spinTerm = this->calcZemachSpinFactor( pProd );
249  break;
250 
251  case Zemach_Pstar:
252  pProd = q_*pstar_;
253  spinTerm = this->calcZemachSpinFactor( pProd );
254  break;
255 
256  case Covariant:
257  pProd = q_*pstar_;
258  spinTerm = this->calcCovSpinFactor( pProd );
259  break;
260 
261  case Legendre:
262  spinTerm = this->calcLegendrePoly();
263  break;
264  }
265  }
266 
267  // Calculate the full amplitude
268  LauComplex resAmplitude = this->resAmp(mass_, spinTerm);
269 
270  return resAmplitude;
271 }
272 
273 void LauAbsResonance::calcCovFactor( const Double_t erm )
274 {
275  if (resSpin_ == 0) {
276  covFactor_ = 1.0;
277  } else if (resSpin_ == 1) {
278  covFactor_ = erm;
279  } else if (resSpin_ == 2) {
280  covFactor_ = erm*erm + 0.5;
281  } else if (resSpin_ == 3) {
282  covFactor_ = erm*(erm*erm + 1.5);
283  } else if (resSpin_ == 4) {
284  covFactor_ = (8.*erm*erm*erm*erm + 24.*erm*erm + 3.)/35.;
285  } else if (resSpin_ > 4) {
286  std::cerr << "WARNING in LauAbsResonance::calcCovFactor : covariant spin factor cannot (yet) be fully calculated for spin >= 5" << std::endl;
287  std::cerr << " : the function of sqrt(1 + (p/mParent)^2) part will be missing" << std::endl;
288  covFactor_ = 1.0;
289  }
290 }
291 
292 Double_t LauAbsResonance::calcCovSpinFactor( const Double_t pProd )
293 {
294  if (resSpin_ == 0) {
295  covFactor_ = 1.0;
296  return 1.0;
297  }
298 
299  // Covariant spin factor is (p* q)^L * f_L(erm) * P_L(cosHel)
300  Double_t spinFactor(pProd);
301  for ( Int_t i(1); i < resSpin_; ++i ) {
302  spinFactor *= pProd;
303  }
304 
305  this->calcCovFactor( erm_ );
306 
307  spinFactor *= covFactor_;
308 
309  spinFactor *= this->calcLegendrePoly();
310 
311  return spinFactor;
312 }
313 
314 Double_t LauAbsResonance::calcZemachSpinFactor( const Double_t pProd ) const
315 {
316  // Calculate the spin factors
317  //
318  // These are calculated as follows
319  //
320  // -2^j * (q*p)^j * cj * Pj(cosHel)
321  //
322  // where Pj(coshHel) is the jth order Legendre polynomial and
323  //
324  // cj = j! / (2j-1)!!
325 
326  if (resSpin_ == 0) {
327  return 1.0;
328  }
329 
330  Double_t spinFactor(pProd);
331  for ( Int_t i(1); i < resSpin_; ++i ) {
332  spinFactor *= pProd;
333  }
334 
335  spinFactor *= this->calcLegendrePoly();
336 
337  return spinFactor;
338 }
339 
340 Double_t LauAbsResonance::calcLegendrePoly( const Double_t cosHel )
341 {
342  cosHel_ = cosHel;
343  return this->calcLegendrePoly();
344 }
345 
347 {
348  Double_t legPol = 1.0;
349 
350  if (resSpin_ == 1) {
351  // Calculate vector resonance Legendre polynomial
352  legPol = -2.0*cosHel_;
353  } else if (resSpin_ == 2) {
354  // Calculate tensor resonance Legendre polynomial
355  legPol = 4.0*(3.0*cosHel_*cosHel_ - 1.0)/3.0;
356  } else if (resSpin_ == 3) {
357  // Calculate spin 3 resonance Legendre polynomial
358  legPol = -8.0*(5.0*cosHel_*cosHel_*cosHel_ - 3.0*cosHel_)/5.0;
359  } else if (resSpin_ == 4) {
360  // Calculate spin 4 resonance Legendre polynomial
361  legPol = 16.0*(35.0*cosHel_*cosHel_*cosHel_*cosHel_ - 30.0*cosHel_*cosHel_ + 3.0)/35.0;
362  } else if (resSpin_ == 5) {
363  // Calculate spin 5 resonance Legendre polynomial
364  legPol = -32.0*(63.0*cosHel_*cosHel_*cosHel_*cosHel_*cosHel_ - 70.0*cosHel_*cosHel_*cosHel_ + 15.0*cosHel_)/63.0;
365  } else if (resSpin_ > 5) {
366  std::cerr << "WARNING in LauAbsResonance::calcLegendrePoly : Legendre polynomials not (yet) implemented for spin > 5" << std::endl;
367  }
368 
369  return legPol;
370 }
371 
372 void LauAbsResonance::changeResonance(const Double_t newMass, const Double_t newWidth, const Int_t newSpin)
373 {
374  if (newMass > 0.0) {
375  resMass_->valueAndRange(newMass,0.0,3.0*newMass);
376  resMass_->initValue(newMass);
377  resMass_->genValue(newMass);
378  std::cout << "INFO in LauAbsResonance::changeResonance : Setting mass to " << resMass_->value() << std::endl;
379  }
380  if (newWidth > 0.0) {
381  resWidth_->valueAndRange(newWidth,0.0,3.0*newWidth);
382  resWidth_->initValue(newWidth);
383  resWidth_->genValue(newWidth);
384  std::cout << "INFO in LauAbsResonance::changeResonance : Setting width to " << resWidth_->value() << std::endl;
385  }
386  if (newSpin > -1) {
387  resSpin_ = newSpin;
388  std::cout << "INFO in LauAbsResonance::changeResonance : Setting spin to " << resSpin_ << std::endl;
389  }
390 }
391 
392 void LauAbsResonance::changeBWBarrierRadii(const Double_t resRadius, const Double_t parRadius)
393 {
394  if ( resRadius >= 0.0 && resBWFactor_ != 0 ) {
395  LauParameter* resBWRadius = resBWFactor_->getRadiusParameter();
396  resBWRadius->value(resRadius);
397  resBWRadius->initValue(resRadius);
398  resBWRadius->genValue(resRadius);
399  std::cout << "INFO in LauAbsResonance::changeBWBarrierRadii : Setting resonance factor radius to " << resBWRadius->value() << std::endl;
400  }
401  if ( parRadius >= 0.0 && parBWFactor_ != 0 ) {
402  LauParameter* parBWRadius = parBWFactor_->getRadiusParameter();
403  parBWRadius->value(parRadius);
404  parBWRadius->initValue(parRadius);
405  parBWRadius->genValue(parRadius);
406  std::cout << "INFO in LauAbsResonance::changeBWBarrierRadii : Setting parent factor radius to " << parBWRadius->value() << std::endl;
407  }
408 }
409 
410 void LauAbsResonance::setResonanceParameter(const TString& name, const Double_t value)
411 {
412  //This function should always be overwritten if needed in classes inheriting from LauAbsResonance.
413  std::cerr << "WARNING in LauAbsResonance::setResonanceParameter : Unable to set parameter \"" << name << "\" to value: " << value << "." << std::endl;
414 }
415 
417 {
418  //This function should always be overwritten if needed in classes inheriting from LauAbsResonance.
419  std::cerr << "WARNING in LauAbsResonance::floatResonanceParameter : Unable to release parameter \"" << name << "\"." << std::endl;
420 }
421 
423 {
424  //This function should always be overwritten if needed in classes inheriting from LauAbsResonance.
425  std::cerr << "WARNING in LauAbsResonance::getResonanceParameter : Unable to get parameter \"" << name << "\"." << std::endl;
426  return 0;
427 }
428 
430 {
431  if ( param == 0 ) {
432  return;
433  }
434 
435  if ( param->clone() ) {
436  resParameters_.push_back( param->parent() );
437  } else {
438  resParameters_.push_back( param );
439  }
440 }
441 
442 void LauAbsResonance::fixBarrierRadii(const Bool_t fixResRad, const Bool_t fixParRad)
443 {
444  if ( resBWFactor_ == 0 ) {
445  std::cerr << "WARNING in LauAbsResonance::fixBarrierRadii : resonance barrier factor not present, cannot fix/float it" << std::endl;
446  return;
447  }
448 
449  if ( parBWFactor_ == 0 ) {
450  std::cerr << "WARNING in LauAbsResonance::fixBarrierRadii : parent barrier factor not present, cannot fix/float it" << std::endl;
451  return;
452  }
453 
454  LauParameter* resBWRadius = resBWFactor_->getRadiusParameter();
455  resBWRadius->fixed(fixResRad);
456 
457  LauParameter* parBWRadius = parBWFactor_->getRadiusParameter();
458  parBWRadius->fixed(fixParRad);
459 }
460 
462 {
463  if ( resBWFactor_ == 0 ) {
464  std::cerr << "WARNING in LauAbsResonance::fixResRadius : resonance barrier factor not present" << std::endl;
465  return kTRUE;
466  }
467 
469  return bwRadius->fixed();
470 }
471 
473 {
474  if ( parBWFactor_ == 0 ) {
475  std::cerr << "WARNING in LauAbsResonance::fixParRadius : parent barrier factor not present" << std::endl;
476  return kTRUE;
477  }
478 
480  return bwRadius->fixed();
481 }
482 
484 {
485  if ( resBWFactor_ == 0 ) {
486  std::cerr << "WARNING in LauAbsResonance::getResRadius : resonance barrier factor not present" << std::endl;
487  return -1.0;
488  }
489 
491  return bwRadius->unblindValue();
492 }
493 
495 {
496  if ( parBWFactor_ == 0 ) {
497  std::cerr << "WARNING in LauAbsResonance::getParRadius : parent barrier factor not present" << std::endl;
498  return -1.0;
499  }
500 
502  return bwRadius->unblindValue();
503 }
504 
506 {
507  // Get the parent mass
508  Double_t mass(LauConstants::mB);
509 
510  if (daughters_) {
511  mass = daughters_->getMassParent();
512  }
513 
514  return mass;
515 }
516 
518 {
519  // Get the daughter mass
520  Double_t mass(LauConstants::mPi);
521 
522  if (daughters_) {
523  if (resPairAmpInt_ == 1) {
524  mass = daughters_->getMassDaug2();
525  } else if (resPairAmpInt_ == 2) {
526  mass = daughters_->getMassDaug1();
527  } else if (resPairAmpInt_ == 3) {
528  mass = daughters_->getMassDaug1();
529  }
530  }
531 
532  return mass;
533 }
534 
536 {
537  // Get the daughter mass
538  Double_t mass(LauConstants::mPi);
539 
540  if (daughters_) {
541  if (resPairAmpInt_ == 1) {
542  mass = daughters_->getMassDaug3();
543  } else if (resPairAmpInt_ == 2) {
544  mass = daughters_->getMassDaug3();
545  } else if (resPairAmpInt_ == 3) {
546  mass = daughters_->getMassDaug2();
547  }
548  }
549 
550  return mass;
551 }
552 
554 {
555  // Get the bachelor mass
556  Double_t mass(LauConstants::mPi);
557 
558  if (daughters_) {
559  if (resPairAmpInt_ == 1) {
560  mass = daughters_->getMassDaug1();
561  } else if (resPairAmpInt_ == 2) {
562  mass = daughters_->getMassDaug2();
563  } else if (resPairAmpInt_ == 3) {
564  mass = daughters_->getMassDaug3();
565  }
566  }
567 
568  return mass;
569 }
570 
572 {
573  // Get the parent charge
574  Int_t charge(0);
575 
576  if (daughters_) {
577  charge = daughters_->getChargeParent();
578  }
579 
580  return charge;
581 }
582 
584 {
585  // Get the daughter charge
586  Int_t charge(0);
587 
588  if (daughters_) {
589  if (resPairAmpInt_ == 1) {
590  charge = daughters_->getChargeDaug2();
591  } else if (resPairAmpInt_ == 2) {
592  charge = daughters_->getChargeDaug1();
593  } else if (resPairAmpInt_ == 3) {
594  charge = daughters_->getChargeDaug1();
595  }
596  }
597 
598  return charge;
599 }
600 
602 {
603  // Get the daughter charge
604  Int_t charge(0);
605 
606  if (daughters_) {
607  if (resPairAmpInt_ == 1) {
608  charge = daughters_->getChargeDaug3();
609  } else if (resPairAmpInt_ == 2) {
610  charge = daughters_->getChargeDaug3();
611  } else if (resPairAmpInt_ == 3) {
612  charge = daughters_->getChargeDaug2();
613  }
614  }
615 
616  return charge;
617 }
618 
620 {
621  // Get the bachelor charge
622  Int_t charge(0);
623 
624  if (daughters_) {
625  if (resPairAmpInt_ == 1) {
626  charge = daughters_->getChargeDaug1();
627  } else if (resPairAmpInt_ == 2) {
628  charge = daughters_->getChargeDaug2();
629  } else if (resPairAmpInt_ == 3) {
630  charge = daughters_->getChargeDaug3();
631  }
632  }
633 
634  return charge;
635 }
636 
638 {
639  // Get the parent name
640  TString name("");
641 
642  if (daughters_) {
643  name = daughters_->getNameParent();
644  }
645 
646  return name;
647 }
648 
650 {
651  // Get the daughter name
652  TString name("");
653 
654  if (daughters_) {
655  if (resPairAmpInt_ == 1) {
656  name = daughters_->getNameDaug2();
657  } else if (resPairAmpInt_ == 2) {
658  name = daughters_->getNameDaug1();
659  } else if (resPairAmpInt_ == 3) {
660  name = daughters_->getNameDaug1();
661  }
662  }
663 
664  return name;
665 }
666 
668 {
669  // Get the daughter name
670  TString name("");
671 
672  if (daughters_) {
673  if (resPairAmpInt_ == 1) {
674  name = daughters_->getNameDaug3();
675  } else if (resPairAmpInt_ == 2) {
676  name = daughters_->getNameDaug3();
677  } else if (resPairAmpInt_ == 3) {
678  name = daughters_->getNameDaug2();
679  }
680  }
681 
682  return name;
683 }
684 
686 {
687  // Get the bachelor name
688  TString name("");
689 
690  if (daughters_) {
691  if (resPairAmpInt_ == 1) {
692  name = daughters_->getNameDaug1();
693  } else if (resPairAmpInt_ == 2) {
694  name = daughters_->getNameDaug2();
695  } else if (resPairAmpInt_ == 3) {
696  name = daughters_->getNameDaug3();
697  }
698  }
699 
700  return name;
701 }
702 
Double_t getMassParent() const
Get mass of the parent particle.
TString getNameDaug1() const
Get name of the first daughter particle.
Double_t mass_
Invariant mass.
Int_t getChargeDaug3() const
Get charge of the third daughter particle.
Double_t calcCovSpinFactor(const Double_t pProd)
Calculate the amplitude spin term using the covariant tensor formalism.
Int_t getChargeBachelor() const
Get the charge of the bachelor daughter.
Double_t getc23() const
Get the cosine of the helicity angle theta23.
Bool_t fixed() const
Check whether the parameter is fixed or floated.
Double_t massDaug2_
Daughter 2 mass.
Double_t getMassBachelor() const
Get the mass of the bachelor daughter.
LauAbsResonance(LauResonanceInfo *resInfo, const Int_t resPairAmpInt, const LauDaughters *daughters)
Constructor (for use by standard resonances)
void calcCovFactor(const Double_t erm)
Calculate the spin-dependent covariant factor.
Double_t calcLegendrePoly() const
Calculate the Legendre polynomial for the spin factor.
void changeResonance(const Double_t newMass, const Double_t newWidth, const Int_t newSpin)
Allow the mass, width and spin of the resonance to be changed.
Double_t getp2_Parent() const
Get the momentum of the track 2 in parent rest frame.
File containing declaration of LauResonanceInfo class.
ClassImp(LauAbsCoeffSet)
Double_t getMassParent() const
Get the parent particle mass.
Double_t getcov12() const
Get covariant factor in 12 axis.
Double_t getm23() const
Get the m23 invariant mass.
Double_t massDaug1_
Daughter 1 mass.
Class for defining the properties of a resonant particle.
Double_t getcov23() const
Get covariant factor in 23 axis.
const TString & name() const
The parameter name.
Class that defines the particular 3-body decay under study.
Definition: LauDaughters.hh:33
Double_t getc13() const
Get the cosine of the helicity angle theta13.
TString nameDaug2_
Daughter 2 name.
Double_t getp2_13() const
Get the momentum of the track 2 in 13 rest frame.
File containing declaration of LauDaughters class.
virtual void floatResonanceParameter(const TString &name)
Allow the various parameters to float in the fit.
Int_t getChargeDaug1() const
Get charge of the first daughter particle.
Double_t covFactor_
Covariant factor (full spin-dependent expression)
const LauParameter * getRadiusParameter() const
Retrieve the radius parameter.
TString getNameDaug2() const
Get the name of the second daughter of the resonance.
LauParameter * resWidth_
Resonance width.
LauParameter * resMass_
Resonance mass.
LauBlattWeisskopfFactor * resBWFactor_
Blatt Weisskopf barrier for resonance decay.
Double_t getp1_12() const
Get the momentum of the track 1 in 12 rest frame.
Double_t massParent_
Parent mass.
Double_t getMassDaug1() const
Get the mass of daughter 1.
TString getNameDaug2() const
Get name of the second daughter particle.
Double_t getMassDaug2() const
Get mass of second daughter particle.
void valueAndRange(Double_t newValue, Double_t newMinValue, Double_t newMaxValue)
Set the value and range for the parameter.
Bool_t fixResRadius() const
Get the status of resonance barrier radius (fixed or released)
Bool_t flipHelicity() const
Get the helicity flip flag.
Double_t getParRadius() const
Get the radius of the parent barrier factor.
File containing declaration of LauKinematics class.
Double_t calcZemachSpinFactor(const Double_t pProd) const
Calculate the amplitude spin term using the Zemach tensor formalism.
Double_t getMassDaug2() const
Get the mass of daughter 2.
virtual LauParameter * getResonanceParameter(const TString &name)
Access the given resonance parameter.
Double_t getp1_Parent() const
Get the momentum of the track 1 in parent rest frame.
const Double_t mPi
Mass of pi+- (GeV/c^2)
Definition: LauConstants.hh:40
void addFloatingParameter(LauParameter *param)
Add parameter to the list of floating parameters.
Bool_t clone() const
Check whether is a clone or not.
const Double_t mB
Mass of charged B (GeV/c^2)
Definition: LauConstants.hh:34
Int_t chargeBachelor_
Bachelor charge.
Double_t getcov13() const
Get covariant factor in 13 axis.
Int_t getChargeDaug1() const
Get the charge of daughter 1.
const LauDaughters * daughters_
Information on the particles.
Double_t getp1_23() const
Get the momentum of the track 1 in 23 rest frame.
File containing declaration of LauParameter class.
std::vector< LauParameter * > resParameters_
All parameters of the resonance.
Double_t getc12() const
Get the cosine of the helicity angle theta12.
Double_t getm13() const
Get the m13 invariant mass.
Int_t getChargeDaug2() const
Get charge of the second daughter particle.
virtual void setResonanceParameter(const TString &name, const Double_t value)
Set value of the various parameters.
Int_t getChargeParent() const
Get the Charge of the parent particle.
Double_t getp1_13() const
Get the momentum of the track 1 in 13 rest frame.
virtual ~LauAbsResonance()
Destructor.
LauBlattWeisskopfFactor * parBWFactor_
Blatt Weisskopf barrier for parent decay.
virtual LauComplex resAmp(Double_t mass, Double_t spinTerm)=0
Complex resonant amplitude.
TString getNameParent() const
Get the name of the parent particle.
TString nameBachelor_
Bachelor name.
Double_t erm_
Covariant factor.
Int_t chargeDaug2_
Daughter 2 charge.
Class for defining the fit parameter objects.
Definition: LauParameter.hh:35
Bool_t ignoreMomenta() const
Get the ignore momenta flag.
Int_t resCharge_
Resonance charge.
TString nameParent_
Parent name.
LauParameter * parent() const
The parent parameter.
Int_t chargeParent_
Parent charge.
TString getNameBachelor() const
Get the name of the daughter that does not originate form the resonance.
Int_t getChargeDaug2() const
Get the charge of daughter 2.
LauResonanceModel
Define the allowed resonance types.
Double_t getResRadius() const
Get the radius of the resonance barrier factor.
Double_t getp3_12() const
Get the momentum of the track 3 in 12 rest frame.
Bool_t fixParRadius() const
Get the status of parent barrier radius (fixed or released)
void fixBarrierRadii(const Bool_t fixResRadius, const Bool_t fixParRadius)
Fix or release the Blatt-Weisskopf barrier radii.
Abstract class for defining type for resonance amplitude models (Breit-Wigner, Flatte etc...
TString getNameParent() const
Get name of the parent particle.
void changeBWBarrierRadii(const Double_t resRadius, const Double_t parRadius)
Allow the Blatt-Weisskopf radius for the resonance and parent factors to be changed.
Int_t getChargeParent() const
Get charge of the parent particle.
Double_t initValue() const
The initial value of the parameter.
Double_t getMassDaug1() const
Get mass of first daughter particle.
Int_t resPairAmpInt_
DP axis identifier.
Double_t getm12() const
Get the m12 invariant mass.
File containing LauConstants namespace.
File containing declaration of LauAbsResonance class.
Double_t getp2_23() const
Get the momentum of the track 2 in 23 rest frame.
Double_t unblindValue() const
The unblinded value of the parameter.
Int_t chargeDaug1_
Daughter 1 charge.
Class for defining a complex number.
Definition: LauComplex.hh:47
LauSpinType getSpinType() const
Get the spin type.
TString getNameDaug1() const
Get the name of the first daughter of the resonance.
Class for calculating 3-body kinematic quantities.
Int_t resSpin_
Resonance spin.
Double_t value() const
The value of the parameter.
Bool_t ignoreSpin() const
Get the ignore spin flag.
Double_t cosHel_
Helicity angle cosine.
TString nameDaug1_
Daughter 1 name.
virtual LauComplex amplitude(const LauKinematics *kinematics)
Calculate the complex amplitude.
Double_t getMassDaug3() const
Get mass of third daughter particle.
TString getNameDaug3() const
Get name of the third daughter particle.
Double_t genValue() const
The value generated for the parameter.
Double_t p_
Bachelor momentum in resonance rest frame.
Double_t getp3_Parent() const
Get the momentum of the track 3 in parent rest frame.
Double_t pstar_
Bachelor momentum in parent rest frame.
Double_t q_
Daughter momentum in resonance rest frame.