laura is hosted by Hepforge, IPPP Durham
Laura++  v3r5
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauAbsResonance.cc
Go to the documentation of this file.
1 
2 /*
3 Copyright 2004 University of Warwick
4 
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
8 
9  http://www.apache.org/licenses/LICENSE-2.0
10 
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16 */
17 
18 /*
19 Laura++ package authors:
20 John Back
21 Paul Harrison
22 Thomas Latham
23 */
24 
29 #include <iostream>
30 
31 #include "TSystem.h"
32 
33 #include "LauAbsResonance.hh"
34 #include "LauConstants.hh"
35 #include "LauDaughters.hh"
36 #include "LauKinematics.hh"
37 #include "LauParameter.hh"
38 #include "LauResonanceInfo.hh"
39 
41 
42 bool LauAbsResonance::isIncoherentModel(LauResonanceModel model) {
43  switch(model) {
44  case BW:
45  case RelBW:
46  case GS:
47  case Flatte:
48  case Sigma:
49  case Kappa:
50  case Dabba:
51  case LASS:
52  case LASS_BW:
53  case LASS_NR:
54  case EFKLLM:
55  case KMatrix:
56  case FlatNR:
57  case NRModel:
58  case BelleNR:
59  case PowerLawNR:
60  case BelleSymNR:
61  case BelleSymNRNoInter:
62  case TaylorNR:
63  case PolNR:
64  case Pole:
65  case PolarFFNR:
66  case PolarFFSymNR:
67  case PolarFFSymNRNoInter:
68  case Rescattering:
69  case Rescattering2:
70  case RescatteringNoInter:
71  case MIPW_MagPhase:
72  case MIPW_RealImag:
73  case RhoOmegaMix_GS:
74  case RhoOmegaMix_RBW:
75  case RhoOmegaMix_GS_1:
76  case RhoOmegaMix_RBW_1:
77  break;
78  case GaussIncoh:
79  return true;
80  }
81  return false;
82 }
83 
84 // Constructor
85 LauAbsResonance::LauAbsResonance(LauResonanceInfo* resInfo, const Int_t resPairAmpInt, const LauDaughters* daughters) :
86  resInfo_(resInfo),
87  daughters_(daughters),
88  nameParent_(""), nameDaug1_(""), nameDaug2_(""), nameBachelor_(""),
89  chargeParent_(0), chargeDaug1_(0), chargeDaug2_(0), chargeBachelor_(0),
90  massParent_(0.0), massDaug1_(0.0), massDaug2_(0.0), massBachelor_(0.0),
91  resName_( (resInfo!=0) ? resInfo->getName() : "" ),
92  sanitisedName_( (resInfo!=0) ? resInfo->getSanitisedName() : "" ),
93  resMass_( (resInfo!=0) ? resInfo->getMass() : 0 ),
94  resWidth_( (resInfo!=0) ? resInfo->getWidth() : 0 ),
95  resSpin_( (resInfo!=0) ? resInfo->getSpin() : 0 ),
96  resCharge_( (resInfo!=0) ? resInfo->getCharge() : 0 ),
97  resPairAmpInt_(resPairAmpInt),
98  parBWFactor_(0),
99  resBWFactor_(0),
100  spinType_(Zemach_P),
101  flipHelicity_(kFALSE),
102  ignoreMomenta_(kFALSE),
103  ignoreSpin_(kFALSE),
104  ignoreBarrierScaling_(kFALSE),
105  mass_(0.0),
106  cosHel_(0.0),
107  q_(0.0),
108  p_(0.0),
109  pstar_(0.0),
110  erm_(1.0),
111  covFactor_(1.0)
112 {
113  if ( resInfo == 0 ) {
114  std::cerr << "ERROR in LauAbsResonance constructor : null LauResonanceInfo object provided" << std::endl;
115  gSystem->Exit(EXIT_FAILURE);
116  }
117 
118  if ( daughters_ == 0 ) {
119  std::cerr << "ERROR in LauAbsResonance constructor : null LauDaughters object provided" << std::endl;
120  gSystem->Exit(EXIT_FAILURE);
121  }
122 
123  nameParent_ = this->getNameParent();
124  nameDaug1_ = this->getNameDaug1();
125  nameDaug2_ = this->getNameDaug2();
126  nameBachelor_ = this->getNameBachelor();
127  massParent_ = this->getMassParent();
128  massDaug1_ = this->getMassDaug1();
129  massDaug2_ = this->getMassDaug2();
130  massBachelor_ = this->getMassBachelor();
131  chargeParent_ = this->getChargeParent();
132  chargeDaug1_ = this->getChargeDaug1();
133  chargeDaug2_ = this->getChargeDaug2();
135 
136  // check that the total charge adds up to that of the resonance
137  Int_t totalCharge = chargeDaug1_ + chargeDaug2_;
138  if ( (totalCharge != resCharge_) && (resPairAmpInt_ != 0) ) {
139  std::cerr << "ERROR in LauAbsResonance : Total charge of daughters = " << totalCharge << ". Resonance charge = " << resCharge_ << "." << std::endl;
140  gSystem->Exit(EXIT_FAILURE);
141  }
142 }
143 
144 // Constructor
145 LauAbsResonance::LauAbsResonance(const TString& resName, const Int_t resPairAmpInt, const LauDaughters* daughters) :
146  resInfo_(0),
147  daughters_(daughters),
148  nameParent_(""), nameDaug1_(""), nameDaug2_(""), nameBachelor_(""),
149  chargeParent_(0), chargeDaug1_(0), chargeDaug2_(0), chargeBachelor_(0),
150  massParent_(0.0), massDaug1_(0.0), massDaug2_(0.0), massBachelor_(0.0),
151  resName_(resName),
152  sanitisedName_(resName),
153  resMass_(0),
154  resWidth_(0),
155  resSpin_(0),
156  resCharge_(0),
157  resPairAmpInt_(resPairAmpInt),
158  parBWFactor_(0),
159  resBWFactor_(0),
160  spinType_(Zemach_P),
161  flipHelicity_(kFALSE),
162  ignoreMomenta_(kFALSE),
163  ignoreSpin_(kFALSE),
164  ignoreBarrierScaling_(kFALSE),
165  mass_(0.0),
166  cosHel_(0.0),
167  q_(0.0),
168  p_(0.0),
169  pstar_(0.0),
170  erm_(1.0),
171  covFactor_(1.0)
172 {
173  if ( daughters_ == 0 ) {
174  std::cerr << "ERROR in LauAbsResonance constructor : null LauDaughters object provided" << std::endl;
175  gSystem->Exit(EXIT_FAILURE);
176  }
177 
178  nameParent_ = this->getNameParent();
179  nameDaug1_ = this->getNameDaug1();
180  nameDaug2_ = this->getNameDaug2();
181  nameBachelor_ = this->getNameBachelor();
182  massParent_ = this->getMassParent();
183  massDaug1_ = this->getMassDaug1();
184  massDaug2_ = this->getMassDaug2();
185  massBachelor_ = this->getMassBachelor();
186  chargeParent_ = this->getChargeParent();
187  chargeDaug1_ = this->getChargeDaug1();
188  chargeDaug2_ = this->getChargeDaug2();
190 
191  // Since we haven't been provided with a LauResonanceInfo object we can just
192  // set the change of the resonance to be the sum of the daughter charges
194 }
195 
196 // Destructor
198 {
199 }
200 
202 {
203  // Use LauKinematics interface for amplitude
204 
205  // For resonance made from tracks i, j, we need the momenta
206  // of tracks i and k in the i-j rest frame for spin helicity calculations
207  // in the Zemach tensor formalism.
208  // Also need the momentum of track k in the parent rest-frame for
209  // calculation of the Blatt-Weisskopf factors.
210  mass_ = 0.0; cosHel_ = 0.0;
211  q_ = 0.0; p_ = 0.0; pstar_ = 0.0;
212  erm_ = 1.0; covFactor_ = 1.0;
213 
214  if (resPairAmpInt_ == 1) {
215 
216  mass_ = kinematics->getm23();
217  cosHel_ = kinematics->getc23();
218  q_ = kinematics->getp2_23();
219  p_ = kinematics->getp1_23();
220  pstar_ = kinematics->getp1_Parent();
221  erm_ = kinematics->getcov23();
222 
223  } else if (resPairAmpInt_ == 2) {
224 
225  mass_ = kinematics->getm13();
226  cosHel_ = kinematics->getc13();
227  q_ = kinematics->getp1_13();
228  p_ = kinematics->getp2_13();
229  pstar_ = kinematics->getp2_Parent();
230  erm_ = kinematics->getcov13();
231 
232  } else if (resPairAmpInt_ == 3) {
233 
234  mass_ = kinematics->getm12();
235  cosHel_ = kinematics->getc12();
236  q_ = kinematics->getp1_12();
237  p_ = kinematics->getp3_12();
238  pstar_ = kinematics->getp3_Parent();
239  erm_ = kinematics->getcov12();
240 
241  } else {
242  std::cerr << "ERROR in LauAbsResonance::amplitude : Nonsense setup of resPairAmp array." << std::endl;
243  gSystem->Exit(EXIT_FAILURE);
244  }
245 
246  if (this->flipHelicity()) {
247  cosHel_ *= -1.0;
248  }
249 
250  if (this->ignoreMomenta()) {
251  q_ = 1.0;
252  p_ = 1.0;
253  pstar_ = 1.0;
254  erm_ = 1.0;
255  }
256 
257  // Calculate the spin factors
258  Double_t spinTerm(1.0);
259  Double_t pProd(1.0);
260 
261  if (!this->ignoreSpin()) {
262  switch ( this->getSpinType() ) {
263 
264  case Zemach_P:
265  pProd = q_*p_;
266  spinTerm = this->calcZemachSpinFactor( pProd );
267  break;
268 
269  case Zemach_Pstar:
270  pProd = q_*pstar_;
271  spinTerm = this->calcZemachSpinFactor( pProd );
272  break;
273 
274  case Covariant:
275  pProd = q_*pstar_;
276  spinTerm = this->calcCovSpinFactor( pProd );
277  break;
278 
279  case Legendre:
280  spinTerm = this->calcLegendrePoly();
281  break;
282  }
283  }
284 
285  // Calculate the full amplitude
286  LauComplex resAmplitude = this->resAmp(mass_, spinTerm);
287 
288  return resAmplitude;
289 }
290 
291 void LauAbsResonance::calcCovFactor( const Double_t erm )
292 {
293  if (resSpin_ == 0) {
294  covFactor_ = 1.0;
295  } else if (resSpin_ == 1) {
296  covFactor_ = erm;
297  } else if (resSpin_ == 2) {
298  covFactor_ = erm*erm + 0.5;
299  } else if (resSpin_ == 3) {
300  covFactor_ = erm*(erm*erm + 1.5);
301  } else if (resSpin_ == 4) {
302  covFactor_ = (8.*erm*erm*erm*erm + 24.*erm*erm + 3.)/35.;
303  } else if (resSpin_ > 4) {
304  std::cerr << "WARNING in LauAbsResonance::calcCovFactor : covariant spin factor cannot (yet) be fully calculated for spin >= 5" << std::endl;
305  std::cerr << " : the function of sqrt(1 + (p/mParent)^2) part will be missing" << std::endl;
306  covFactor_ = 1.0;
307  }
308 }
309 
310 Double_t LauAbsResonance::calcCovSpinFactor( const Double_t pProd )
311 {
312  if (resSpin_ == 0) {
313  covFactor_ = 1.0;
314  return 1.0;
315  }
316 
317  // Covariant spin factor is (p* q)^L * f_L(erm) * P_L(cosHel)
318  Double_t spinFactor(pProd);
319  for ( Int_t i(1); i < resSpin_; ++i ) {
320  spinFactor *= pProd;
321  }
322 
323  this->calcCovFactor( erm_ );
324 
325  spinFactor *= covFactor_;
326 
327  spinFactor *= this->calcLegendrePoly();
328 
329  return spinFactor;
330 }
331 
332 Double_t LauAbsResonance::calcZemachSpinFactor( const Double_t pProd ) const
333 {
334  // Calculate the spin factors
335  //
336  // These are calculated as follows
337  //
338  // -2^j * (q*p)^j * cj * Pj(cosHel)
339  //
340  // where Pj(coshHel) is the jth order Legendre polynomial and
341  //
342  // cj = j! / (2j-1)!!
343 
344  if (resSpin_ == 0) {
345  return 1.0;
346  }
347 
348  Double_t spinFactor(pProd);
349  for ( Int_t i(1); i < resSpin_; ++i ) {
350  spinFactor *= pProd;
351  }
352 
353  spinFactor *= this->calcLegendrePoly();
354 
355  return spinFactor;
356 }
357 
358 Double_t LauAbsResonance::calcLegendrePoly( const Double_t cosHel )
359 {
360  cosHel_ = cosHel;
361  return this->calcLegendrePoly();
362 }
363 
365 {
366  Double_t legPol = 1.0;
367 
368  if (resSpin_ == 1) {
369  // Calculate vector resonance Legendre polynomial
370  legPol = -2.0*cosHel_;
371  } else if (resSpin_ == 2) {
372  // Calculate tensor resonance Legendre polynomial
373  legPol = 4.0*(3.0*cosHel_*cosHel_ - 1.0)/3.0;
374  } else if (resSpin_ == 3) {
375  // Calculate spin 3 resonance Legendre polynomial
376  legPol = -8.0*(5.0*cosHel_*cosHel_*cosHel_ - 3.0*cosHel_)/5.0;
377  } else if (resSpin_ == 4) {
378  // Calculate spin 4 resonance Legendre polynomial
379  legPol = 16.0*(35.0*cosHel_*cosHel_*cosHel_*cosHel_ - 30.0*cosHel_*cosHel_ + 3.0)/35.0;
380  } else if (resSpin_ == 5) {
381  // Calculate spin 5 resonance Legendre polynomial
382  legPol = -32.0*(63.0*cosHel_*cosHel_*cosHel_*cosHel_*cosHel_ - 70.0*cosHel_*cosHel_*cosHel_ + 15.0*cosHel_)/63.0;
383  } else if (resSpin_ > 5) {
384  std::cerr << "WARNING in LauAbsResonance::calcLegendrePoly : Legendre polynomials not (yet) implemented for spin > 5" << std::endl;
385  }
386 
387  return legPol;
388 }
389 
390 void LauAbsResonance::changeResonance(const Double_t newMass, const Double_t newWidth, const Int_t newSpin)
391 {
392  if (newMass > 0.0) {
393  resMass_->valueAndRange(newMass,0.0,3.0*newMass);
394  resMass_->initValue(newMass);
395  resMass_->genValue(newMass);
396  std::cout << "INFO in LauAbsResonance::changeResonance : Setting mass to " << resMass_->value() << std::endl;
397  }
398  if (newWidth > 0.0) {
399  resWidth_->valueAndRange(newWidth,0.0,3.0*newWidth);
400  resWidth_->initValue(newWidth);
401  resWidth_->genValue(newWidth);
402  std::cout << "INFO in LauAbsResonance::changeResonance : Setting width to " << resWidth_->value() << std::endl;
403  }
404  if (newSpin > -1) {
405  resSpin_ = newSpin;
406  std::cout << "INFO in LauAbsResonance::changeResonance : Setting spin to " << resSpin_ << std::endl;
407  }
408 }
409 
410 void LauAbsResonance::changeBWBarrierRadii(const Double_t resRadius, const Double_t parRadius)
411 {
412  if ( resRadius >= 0.0 && resBWFactor_ != 0 ) {
413  LauParameter* resBWRadius = resBWFactor_->getRadiusParameter();
414  resBWRadius->value(resRadius);
415  resBWRadius->initValue(resRadius);
416  resBWRadius->genValue(resRadius);
417  std::cout << "INFO in LauAbsResonance::changeBWBarrierRadii : Setting resonance factor radius to " << resBWRadius->value() << std::endl;
418  }
419  if ( parRadius >= 0.0 && parBWFactor_ != 0 ) {
420  LauParameter* parBWRadius = parBWFactor_->getRadiusParameter();
421  parBWRadius->value(parRadius);
422  parBWRadius->initValue(parRadius);
423  parBWRadius->genValue(parRadius);
424  std::cout << "INFO in LauAbsResonance::changeBWBarrierRadii : Setting parent factor radius to " << parBWRadius->value() << std::endl;
425  }
426 }
427 
428 void LauAbsResonance::setResonanceParameter(const TString& name, const Double_t value)
429 {
430  //This function should always be overwritten if needed in classes inheriting from LauAbsResonance.
431  std::cerr << "WARNING in LauAbsResonance::setResonanceParameter : Unable to set parameter \"" << name << "\" to value: " << value << "." << std::endl;
432 }
433 
435 {
436  //This function should always be overwritten if needed in classes inheriting from LauAbsResonance.
437  std::cerr << "WARNING in LauAbsResonance::floatResonanceParameter : Unable to release parameter \"" << name << "\"." << std::endl;
438 }
439 
441 {
442  //This function should always be overwritten if needed in classes inheriting from LauAbsResonance.
443  std::cerr << "WARNING in LauAbsResonance::getResonanceParameter : Unable to get parameter \"" << name << "\"." << std::endl;
444  return 0;
445 }
446 
448 {
449  if ( param == 0 ) {
450  return;
451  }
452 
453  if ( param->clone() ) {
454  resParameters_.push_back( param->parent() );
455  } else {
456  resParameters_.push_back( param );
457  }
458 }
459 
460 void LauAbsResonance::fixBarrierRadii(const Bool_t fixResRad, const Bool_t fixParRad)
461 {
462  if ( resBWFactor_ == 0 ) {
463  std::cerr << "WARNING in LauAbsResonance::fixBarrierRadii : resonance barrier factor not present, cannot fix/float it" << std::endl;
464  return;
465  }
466 
467  if ( parBWFactor_ == 0 ) {
468  std::cerr << "WARNING in LauAbsResonance::fixBarrierRadii : parent barrier factor not present, cannot fix/float it" << std::endl;
469  return;
470  }
471 
472  LauParameter* resBWRadius = resBWFactor_->getRadiusParameter();
473  resBWRadius->fixed(fixResRad);
474 
475  LauParameter* parBWRadius = parBWFactor_->getRadiusParameter();
476  parBWRadius->fixed(fixParRad);
477 }
478 
480 {
481  if ( resBWFactor_ == 0 ) {
482  std::cerr << "WARNING in LauAbsResonance::fixResRadius : resonance barrier factor not present" << std::endl;
483  return kTRUE;
484  }
485 
487  return bwRadius->fixed();
488 }
489 
491 {
492  if ( parBWFactor_ == 0 ) {
493  std::cerr << "WARNING in LauAbsResonance::fixParRadius : parent barrier factor not present" << std::endl;
494  return kTRUE;
495  }
496 
498  return bwRadius->fixed();
499 }
500 
502 {
503  if ( resBWFactor_ == 0 ) {
504  std::cerr << "WARNING in LauAbsResonance::getResRadius : resonance barrier factor not present" << std::endl;
505  return -1.0;
506  }
507 
509  return bwRadius->unblindValue();
510 }
511 
513 {
514  if ( parBWFactor_ == 0 ) {
515  std::cerr << "WARNING in LauAbsResonance::getParRadius : parent barrier factor not present" << std::endl;
516  return -1.0;
517  }
518 
520  return bwRadius->unblindValue();
521 }
522 
524 {
525  // Get the parent mass
526  Double_t mass(LauConstants::mB);
527 
528  if (daughters_) {
529  mass = daughters_->getMassParent();
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_->getMassDaug2();
543  } else if (resPairAmpInt_ == 2) {
544  mass = daughters_->getMassDaug1();
545  } else if (resPairAmpInt_ == 3) {
546  mass = daughters_->getMassDaug1();
547  }
548  }
549 
550  return mass;
551 }
552 
554 {
555  // Get the daughter mass
556  Double_t mass(LauConstants::mPi);
557 
558  if (daughters_) {
559  if (resPairAmpInt_ == 1) {
560  mass = daughters_->getMassDaug3();
561  } else if (resPairAmpInt_ == 2) {
562  mass = daughters_->getMassDaug3();
563  } else if (resPairAmpInt_ == 3) {
564  mass = daughters_->getMassDaug2();
565  }
566  }
567 
568  return mass;
569 }
570 
572 {
573  // Get the bachelor mass
574  Double_t mass(LauConstants::mPi);
575 
576  if (daughters_) {
577  if (resPairAmpInt_ == 1) {
578  mass = daughters_->getMassDaug1();
579  } else if (resPairAmpInt_ == 2) {
580  mass = daughters_->getMassDaug2();
581  } else if (resPairAmpInt_ == 3) {
582  mass = daughters_->getMassDaug3();
583  }
584  }
585 
586  return mass;
587 }
588 
590 {
591  // Get the parent charge
592  Int_t charge(0);
593 
594  if (daughters_) {
595  charge = daughters_->getChargeParent();
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_->getChargeDaug2();
609  } else if (resPairAmpInt_ == 2) {
610  charge = daughters_->getChargeDaug1();
611  } else if (resPairAmpInt_ == 3) {
612  charge = daughters_->getChargeDaug1();
613  }
614  }
615 
616  return charge;
617 }
618 
620 {
621  // Get the daughter charge
622  Int_t charge(0);
623 
624  if (daughters_) {
625  if (resPairAmpInt_ == 1) {
626  charge = daughters_->getChargeDaug3();
627  } else if (resPairAmpInt_ == 2) {
628  charge = daughters_->getChargeDaug3();
629  } else if (resPairAmpInt_ == 3) {
630  charge = daughters_->getChargeDaug2();
631  }
632  }
633 
634  return charge;
635 }
636 
638 {
639  // Get the bachelor charge
640  Int_t charge(0);
641 
642  if (daughters_) {
643  if (resPairAmpInt_ == 1) {
644  charge = daughters_->getChargeDaug1();
645  } else if (resPairAmpInt_ == 2) {
646  charge = daughters_->getChargeDaug2();
647  } else if (resPairAmpInt_ == 3) {
648  charge = daughters_->getChargeDaug3();
649  }
650  }
651 
652  return charge;
653 }
654 
656 {
657  // Get the parent name
658  TString name("");
659 
660  if (daughters_) {
661  name = daughters_->getNameParent();
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_->getNameDaug2();
675  } else if (resPairAmpInt_ == 2) {
676  name = daughters_->getNameDaug1();
677  } else if (resPairAmpInt_ == 3) {
678  name = daughters_->getNameDaug1();
679  }
680  }
681 
682  return name;
683 }
684 
686 {
687  // Get the daughter name
688  TString name("");
689 
690  if (daughters_) {
691  if (resPairAmpInt_ == 1) {
692  name = daughters_->getNameDaug3();
693  } else if (resPairAmpInt_ == 2) {
694  name = daughters_->getNameDaug3();
695  } else if (resPairAmpInt_ == 3) {
696  name = daughters_->getNameDaug2();
697  }
698  }
699 
700  return name;
701 }
702 
704 {
705  // Get the bachelor name
706  TString name("");
707 
708  if (daughters_) {
709  if (resPairAmpInt_ == 1) {
710  name = daughters_->getNameDaug1();
711  } else if (resPairAmpInt_ == 2) {
712  name = daughters_->getNameDaug2();
713  } else if (resPairAmpInt_ == 3) {
714  name = daughters_->getNameDaug3();
715  }
716  }
717 
718  return name;
719 }
720 
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:47
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:54
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:48
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:49
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:61
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.