laura is hosted by Hepforge, IPPP Durham
Laura++  3.6.0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauIsobarDynamics.hh
Go to the documentation of this file.
1 
2 /*
3 Copyright 2005 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 
33 #ifndef LAU_ISOBAR_DYNAMICS
34 #define LAU_ISOBAR_DYNAMICS
35 
36 #include "LauAbsResonance.hh"
37 #include "LauComplex.hh"
38 
39 #include "TString.h"
40 
41 #include <set>
42 #include <vector>
43 
44 class LauCacheData;
45 class LauDaughters;
46 class LauAbsEffModel;
47 class LauAbsIncohRes;
48 class LauFitDataTree;
51 class LauKinematics;
52 
54 
55  public:
57  typedef std::map<Int_t, LauAbsEffModel*> LauTagCatScfFractionModelMap;
58 
60  enum ToyMCStatus {
64  };
65 
67 
72  LauIsobarDynamics( LauDaughters* daughters,
73  LauAbsEffModel* effModel,
74  LauAbsEffModel* scfFractionModel = 0 );
75 
77 
82  LauIsobarDynamics( LauDaughters* daughters,
83  LauAbsEffModel* effModel,
84  LauTagCatScfFractionModelMap scfFractionModel );
85 
87  virtual ~LauIsobarDynamics();
88 
90 
93  void initialise( const std::vector<LauComplex>& coeffs );
94 
97 
99 
102  inline void setIntFileName( const TString& fileName ) { intFileName_ = fileName; }
103 
104  // Integration
106 
119  void setIntegralBinWidths( const Double_t m13BinWidth,
120  const Double_t m23BinWidth,
121  const Double_t mPrimeBinWidth = 0.001,
122  const Double_t thPrimeBinWidth = 0.001 );
123 
125 
131  void setNarrowResonanceThreshold( const Double_t narrowWidth ) { narrowWidth_ = narrowWidth; }
132 
134 
140  void setIntegralBinningFactor( const Double_t binningFactor )
141  {
142  binningFactor_ = binningFactor;
143  }
144 
146 
151  void forceSymmetriseIntegration( const Bool_t force ) { forceSymmetriseIntegration_ = force; }
152 
154 
165  LauAbsResonance* addResonance( const TString& resName,
166  const Int_t resPairAmpInt,
169  LauBlattWeisskopfFactor::Default );
170 
172 
182  LauAbsResonance* addIncoherentResonance( const TString& resName,
183  const Int_t resPairAmpInt,
184  const LauAbsResonance::LauResonanceModel resType );
185 
187 
195  LauKMatrixPropagator* defineKMatrixPropagator( const TString& propName,
196  const TString& paramFileName,
197  Int_t resPairAmpInt,
198  Int_t nChannels,
199  Int_t nPoles,
200  Int_t rowIndex = 1 );
201 
203 
213  void addKMatrixProdPole( const TString& poleName,
214  const TString& propName,
215  Int_t poleIndex,
216  Bool_t useProdAdler = kFALSE );
217 
219 
229  void addKMatrixProdSVP( const TString& SVPName,
230  const TString& propName,
231  Int_t channelIndex,
232  Bool_t useProdAdler = kFALSE );
233 
235 
240  inline void setASqMaxValue( Double_t value )
241  {
242  aSqMaxSet_ = value;
243  aSqMaxAuto_ = kFALSE;
244  }
245 
247 
250  inline Double_t getASqMaxSetValue() const { return aSqMaxSet_; }
251 
253 
256  inline Double_t getASqMaxVarValue() const { return aSqMaxVar_; }
257 
259 
262  Bool_t generate();
263 
265 
270  ToyMCStatus checkToyMC( Bool_t printErrorMessages = kTRUE, Bool_t printInfoMessages = kFALSE );
271 
273 
276  inline Int_t maxGenIterations() const { return iterationsMax_; }
277 
279 
282  void calcLikelihoodInfo( const UInt_t iEvt );
283 
285 
289  void calcLikelihoodInfo( const Double_t m13Sq, const Double_t m23Sq );
290 
292 
299  void calcLikelihoodInfo( const Double_t m13Sq, const Double_t m23Sq, const Int_t tagCat );
300 
302 
305  void calcExtraInfo( const Bool_t init = kFALSE );
306 
308 
313  Bool_t gotReweightedEvent();
314 
316 
319  Double_t getEventWeight();
320 
322 
325  inline const LauComplex& getEvtDPAmp() const { return totAmp_; }
326 
328 
331  inline Double_t getEvtm13Sq() const { return m13Sq_; }
332 
334 
337  inline Double_t getEvtm23Sq() const { return m23Sq_; }
338 
340 
343  inline Double_t getEvtmPrime() const { return mPrime_; }
344 
346 
349  inline Double_t getEvtthPrime() const { return thPrime_; }
350 
352 
355  inline Double_t getEvtEff() const { return eff_; }
356 
358 
361  inline Double_t getEvtScfFraction() const { return scfFraction_; }
362 
364 
367  inline Double_t getEvtJacobian() const { return jacobian_; }
368 
370 
373  inline Double_t getEvtIntensity() const { return ASq_; }
374 
376 
382  inline Double_t getEvtLikelihood() const { return evtLike_; }
383 
385 
389  inline LauComplex getDynamicAmp( const Int_t resID ) const
390  {
391  return ff_[resID].scale( fNorm_[resID] );
392  }
393 
395 
399  inline LauComplex getFullAmplitude( const Int_t resID ) const
400  {
401  return Amp_[resID] * this->getDynamicAmp( resID );
402  }
403 
405 
408  inline const std::vector<std::vector<LauComplex>>& getFiFjSum() const { return fifjSum_; }
409 
411 
414  inline const std::vector<std::vector<LauComplex>>& getFiFjEffSum() const { return fifjEffSum_; }
415 
417 
420  inline const std::vector<Double_t>& getFNorm() const { return fNorm_; }
421 
423 
426  void fillDataTree( const LauFitDataTree& fitDataTree );
427 
429  void modifyDataTree();
430 
432 
436  Bool_t hasResonance( const TString& resName ) const;
437 
439 
443  Int_t resonanceIndex( const TString& resName ) const;
444 
446 
450  TString getConjResName( const TString& resName ) const;
451 
453 
457  const LauAbsResonance* findResonance( const TString& resName ) const;
458 
460 
464  const LauAbsResonance* getResonance( const UInt_t resIndex ) const;
465 
467 
470  void updateCoeffs( const std::vector<LauComplex>& coeffs );
471 
473 
478 
480 
483  inline void flipHelicityForCPEigenstates( const Bool_t boolean ) { flipHelicity_ = boolean; }
484 
486 
489  inline const LauParameter& getMeanEff() const { return meanDPEff_; }
490 
492 
495  inline const LauParameter& getDPRate() const { return DPRate_; }
496 
498 
501  inline const LauParArray& getFitFractions() const { return fitFrac_; }
502 
504 
508  {
509  return fitFracEffUnCorr_;
510  }
511 
513 
516  inline UInt_t getnTotAmp() const { return nAmp_ + nIncohAmp_; }
517 
519 
522  inline UInt_t getnCohAmp() const { return nAmp_; }
523 
525 
528  inline UInt_t getnIncohAmp() const { return nIncohAmp_; }
529 
531 
534  inline Double_t getDPNorm() const { return DPNorm_; }
535 
537 
540  inline const LauDaughters* getDaughters() const { return daughters_; }
541 
543 
546  inline const LauKinematics* getKinematics() const { return kinematics_; }
547 
549 
553 
555 
558  inline const LauAbsEffModel* getEffModel() const { return effModel_; }
559 
561 
564  inline Bool_t usingScfModel() const { return ! scfFractionModel_.empty(); }
565 
567 
570  inline const std::vector<LauParameter>& getExtraParameters() const { return extraParameters_; }
571 
573 
576  inline std::vector<LauParameter*>& getFloatingParameters() { return resonancePars_; }
577 
579  inline void calculateRhoOmegaFitFractions( const Bool_t calcFF )
580  {
582  }
583 
584  protected:
586  void initSummary();
587 
589  void initialiseVectors();
590 
592  void resetNormVectors();
593 
595  void calcDPNormalisation();
596 
598 
604  std::vector<std::pair<Double_t, Double_t>> formGapsFromRegions(
605  const std::vector<std::pair<Double_t, Double_t>>& regions,
606  const Double_t min,
607  const Double_t max ) const;
608 
610 
613  void cullNullRegions( std::vector<LauDPPartialIntegralInfo*>& regions ) const;
614 
616 
628  LauDPPartialIntegralInfo* newDPIntegrationRegion( const Double_t minm13,
629  const Double_t maxm13,
630  const Double_t minm23,
631  const Double_t maxm23,
632  const Double_t m13BinWidth,
633  const Double_t m23BinWidth,
634  const Double_t precision,
635  const UInt_t nAmp,
636  const UInt_t nIncohAmp ) const;
637 
639 
643  void correctDPOverlap( std::vector<std::pair<Double_t, Double_t>>& regions,
644  const std::vector<Double_t>& binnings ) const;
645 
647 
659  std::vector<LauDPPartialIntegralInfo*> m23IntegrationRegions(
660  const std::vector<std::pair<Double_t, Double_t>>& m13Regions,
661  const std::vector<std::pair<Double_t, Double_t>>& m23Regions,
662  const std::vector<Double_t>& m13Binnings,
663  const std::vector<Double_t>& m23Binnings,
664  const Double_t precision,
665  const Double_t defaultBinning ) const;
666 
668 
679  std::vector<LauDPPartialIntegralInfo*> m13IntegrationRegions(
680  const std::vector<std::pair<Double_t, Double_t>>& m13Regions,
681  const std::vector<std::pair<Double_t, Double_t>>& m23Regions,
682  const std::vector<Double_t>& m13Binnings,
683  const Double_t precision,
684  const Double_t defaultBinning ) const;
685 
688 
691 
693 
697 
699  void writeIntegralsFile();
700 
702 
707  void setFFTerm( const UInt_t index, const Double_t realPart, const Double_t imagPart );
708 
710 
714  void setIncohIntenTerm( const UInt_t index, const Double_t value );
715 
717  void calculateAmplitudes();
718 
720 
726  const UInt_t m13Point,
727  const UInt_t m23Point );
728 
730 
733  void addGridPointToIntegrals( const Double_t weight );
734 
736 
739  void calcTotalAmp( const Bool_t useEff );
740 
742 
745  Double_t retrieveEfficiency();
746 
748 
752  Double_t retrieveScfFraction( Int_t tagCat );
753 
755 
758  inline void setASqMaxVarValue( Double_t value ) { aSqMaxVar_ = value; }
759 
761 
764  Double_t calcSigDPNorm();
765 
767 
770  LauComplex resAmp( const UInt_t index );
771 
773 
776  Double_t incohResAmp( const UInt_t index );
777 
779 
782  void setDataEventNo( UInt_t iEvt );
783 
785 
789  LauAbsResonance* findResonance( const TString& resName );
790 
792 
796  LauAbsResonance* getResonance( const UInt_t resIndex );
797 
799 
802  void removeCharge( TString& string ) const;
803 
805 
810  Bool_t gotKMatrixMatch( UInt_t resAmpInt, const TString& propName ) const;
811 
812  private:
815 
818 
820  typedef std::map<TString, LauKMatrixPropagator*> KMPropMap;
821 
823  typedef std::map<TString, TString> KMStringMap;
824 
827 
830 
833 
835 
840 
842  UInt_t nAmp_;
843 
845  UInt_t nIncohAmp_;
846 
848  std::vector<LauComplex> Amp_;
849 
851  Double_t DPNorm_;
852 
855 
858 
861 
864 
866  std::vector<LauCacheData*> data_;
867 
870 
872  std::vector<LauParameter> extraParameters_;
873 
875  std::vector<LauAbsResonance*> sigResonances_;
876 
878  std::vector<LauAbsIncohRes*> sigIncohResonances_;
879 
882 
885 
887  std::vector<TString> resTypAmp_;
888 
890  std::vector<Int_t> resPairAmp_;
891 
893  std::vector<TString> incohResTypAmp_;
894 
896  std::vector<Int_t> incohResPairAmp_;
897 
899  std::vector<Int_t> typDaug_;
900 
903 
906 
908  Bool_t flavConjDP_;
909 
912 
915 
918 
920  std::vector<LauDPPartialIntegralInfo*> dpPartialIntegralInfo_;
921 
923  TString intFileName_;
924 
926  Double_t m13BinWidth_;
927 
929  Double_t m23BinWidth_;
930 
932  Double_t mPrimeBinWidth_;
933 
936 
938  Double_t narrowWidth_;
939 
941  Double_t binningFactor_;
942 
944  Double_t m13Sq_;
945 
947  Double_t m23Sq_;
948 
950  Double_t mPrime_;
951 
953  Double_t thPrime_;
954 
956  Int_t tagCat_;
957 
959  Double_t eff_;
960 
962  Double_t scfFraction_;
963 
965  Double_t jacobian_;
966 
968  Double_t ASq_;
969 
971  Double_t evtLike_;
972 
975 
977 
980  std::vector<std::vector<LauComplex>> fifjEffSum_;
981 
983 
986  std::vector<std::vector<LauComplex>> fifjSum_;
987 
989  std::vector<LauComplex> ff_;
990 
992  std::vector<Double_t> incohInten_;
993 
995  std::vector<Double_t> fSqSum_;
996 
998  std::vector<Double_t> fSqEffSum_;
999 
1001  std::vector<Double_t> fNorm_;
1002 
1005 
1008 
1010  Double_t aSqMaxSet_;
1011 
1013  Double_t aSqMaxVar_;
1014 
1016  Bool_t aSqMaxAuto_ { kTRUE };
1017 
1020 
1023 
1025  std::vector<LauParameter*> resonancePars_;
1026 
1028  std::vector<Double_t> resonanceParValues_;
1029 
1031  std::vector<std::vector<UInt_t>> resonanceParResIndex_;
1032 
1034  std::set<UInt_t> integralsToBeCalculated_;
1035 
1038 
1039  ClassDef( LauIsobarDynamics, 0 )
1040 };
1041 
1042 #endif
std::map< TString, LauKMatrixPropagator * > KMPropMap
The type used for containing the K-matrix propagators.
Double_t getEventWeight()
Calculate the acceptance rate, for events with the current kinematics, when generating events accordi...
Bool_t normalizationSchemeDone_
Whether the scheme for the integration has been determined.
Bool_t aSqMaxAuto_
Flag to generate aSqMaxSet_ once generate is called.
Int_t resonanceIndex(const TString &resName) const
Retrieve the index for the given resonance.
const LauAbsResonance * getResonance(const UInt_t resIndex) const
Retrieve a resonance by its index.
std::vector< Double_t > incohInten_
The dynamic part of the intensity for each incoherent amplitude component at the current point in the...
LauParArray fitFrac_
The fit fractions for the amplitude components.
std::vector< TString > incohResTypAmp_
The resonance types of all of the incoherent amplitude components.
Class for defining the fit parameter objects.
Definition: LauParameter.hh:49
std::vector< LauComplex > ff_
The dynamic part of the amplitude for each amplitude component at the current point in the Dalitz plo...
LauKinematics * kinematics_
The kinematics of the decay.
std::vector< LauAbsIncohRes * > sigIncohResonances_
The incoherent resonances in the model.
UInt_t nIncohAmp_
The number of incoherent amplitude components.
Abstract class for defining incoherent resonant amplitude models.
const LauParArray & getFitFractionsEfficiencyUncorrected() const
Retrieve the fit fractions for the amplitude components.
const LauAbsResonance * findResonance(const TString &resName) const
Retrieve the named resonance.
std::vector< Double_t > fNorm_
The normalisation factors for the dynamic parts of the amplitude for each amplitude component.
KMPropMap kMatrixPropagators_
The K-matrix propagators.
void calcLikelihoodInfo(const UInt_t iEvt)
Calculate the likelihood (and all associated information) for the given event number.
std::map< TString, TString > KMStringMap
The type used for mapping K-matrix components to their propagators.
LauKMatrixPropagator * defineKMatrixPropagator(const TString &propName, const TString &paramFileName, Int_t resPairAmpInt, Int_t nChannels, Int_t nPoles, Int_t rowIndex=1)
Define a new K-matrix Propagator.
Bool_t symmetricalDP_
Whether the Dalitz plot is symmetrical.
Double_t getDPNorm() const
Retrieve the normalisation factor for the log-likelihood function.
LauComplex getDynamicAmp(const Int_t resID) const
Retrieve the normalised dynamic part of the amplitude of the given amplitude component at the current...
LauComplex resAmp(const UInt_t index)
Calculate the dynamic part of the amplitude for a given component at the current point in the Dalitz ...
Double_t aSqMaxSet_
The maximum allowed value of A squared.
void setDataEventNo(UInt_t iEvt)
Load the data for a given event.
void setIncohIntenTerm(const UInt_t index, const Double_t value)
Set the dynamic part of the intensity for a given incoherent amplitude component at the current point...
KMStringMap kMatrixPropSet_
The names of the M-matrix components in the model mapped to their propagators.
void calcDPNormalisation()
Calculate the Dalitz plot normalisation integrals across the whole Dalitz plot.
Double_t getEvtEff() const
Retrieve the efficiency for the current event.
UInt_t nAmp_
The number of amplitude components.
Int_t nSigGenLoop_
The number of unsucessful attempts to generate an event so far.
void recalculateNormalisation()
recalculate Normalization
Bool_t fullySymmetricDP_
Whether the Dalitz plot is fully symmetric.
Double_t ASq_
The value of A squared for the current event.
void cullNullRegions(std::vector< LauDPPartialIntegralInfo * > &regions) const
Removes entries in the vector of LauDPPartialIntegralInfo* that are null.
std::vector< LauDPPartialIntegralInfo * > m13IntegrationRegions(const std::vector< std::pair< Double_t, Double_t >> &m13Regions, const std::vector< std::pair< Double_t, Double_t >> &m23Regions, const std::vector< Double_t > &m13Binnings, const Double_t precision, const Double_t defaultBinning) const
Create the integration grid objects for the m13 narrow resonance regions, excluding the overlap regio...
std::vector< Double_t > fSqSum_
The event-by-event running total of the dynamical amplitude squared for each amplitude component.
void setFFTerm(const UInt_t index, const Double_t realPart, const Double_t imagPart)
Set the dynamic part of the amplitude for a given amplitude component at the current point in the Dal...
void calcTotalAmp(const Bool_t useEff)
Calculate the total Dalitz plot amplitude at the current point in the Dalitz plot.
File containing declaration of LauAbsResonance class.
Bool_t flipHelicity_
The helicity flip flag for new amplitude components.
void fillDataTree(const LauFitDataTree &fitDataTree)
Fill the internal data structure that caches the resonance dynamics.
Bool_t recalcNormalisation_
Flag to recalculate the normalisation.
LauAbsResonance * addResonance(const TString &resName, const Int_t resPairAmpInt, const LauAbsResonance::LauResonanceModel resType, const LauBlattWeisskopfFactor::BlattWeisskopfCategory bwCategory=LauBlattWeisskopfFactor::Default)
Add a resonance to the Dalitz plot.
Bool_t hasResonance(const TString &resName) const
Check whether this model includes a named resonance.
const std::vector< std::vector< LauComplex > > & getFiFjSum() const
Retrieve the event-by-event running totals of amplitude cross terms for all pairs of amplitude compon...
TString intFileName_
The name of the file to save integrals to.
LauDPPartialIntegralInfo * newDPIntegrationRegion(const Double_t minm13, const Double_t maxm13, const Double_t minm23, const Double_t maxm23, const Double_t m13BinWidth, const Double_t m23BinWidth, const Double_t precision, const UInt_t nAmp, const UInt_t nIncohAmp) const
Wrapper for LauDPPartialIntegralInfo constructor.
Double_t getEvtmPrime() const
Retrieve the square Dalitz plot coordinate, m', for the current event.
void correctDPOverlap(std::vector< std::pair< Double_t, Double_t >> &regions, const std::vector< Double_t > &binnings) const
Correct regions to ensure that the finest integration grid takes precedence.
std::vector< LauParameter * > & getFloatingParameters()
Retrieve the floating parameters of the resonance models.
std::vector< Int_t > incohResPairAmp_
The index of the daughter not produced by the resonance for each incoherent amplitude component.
Double_t getASqMaxVarValue() const
Retrieve the maximum of A squared that has been found while generating.
LauKinematics * getKinematics()
Retrieve the Dalitz plot kinematics.
LauAbsEffModel * effModel_
The efficiency model across the Dalitz plot.
LauTagCatScfFractionModelMap scfFractionModel_
The self cross feed fraction models across the Dalitz plot.
Double_t aSqMaxVar_
The maximum value of A squared that has been seen so far while generating.
LauDaughters * daughters_
The daughters of the decay.
Double_t scfFraction_
The fraction of events that are poorly reconstructed (the self cross feed fraction) at the current po...
void addGridPointToIntegrals(const Double_t weight)
Add the amplitude values (with the appropriate weight) at the current grid point to the running integ...
Class to store the input fit variables.
Double_t m13Sq_
The invariant mass squared of the first and third daughters.
Double_t getASqMaxSetValue() const
Retrieve the maximum value of A squared to be used in the accept/reject.
Bool_t generate()
Generate a toy MC signal event.
Double_t narrowWidth_
The value below which a resonance width is considered to be narrow.
Class for defining a complex number.
Definition: LauComplex.hh:61
Int_t iterationsMax_
The maximum allowed number of attempts when generating an event.
UInt_t getnTotAmp() const
Retrieve the total number of amplitude components.
std::vector< LauParameter > extraParameters_
any extra parameters/quantities (e.g. K-matrix total fit fractions)
std::vector< Double_t > resonanceParValues_
List of floating resonance parameter values from previous calculation.
std::vector< LauDPPartialIntegralInfo * > m23IntegrationRegions(const std::vector< std::pair< Double_t, Double_t >> &m13Regions, const std::vector< std::pair< Double_t, Double_t >> &m23Regions, const std::vector< Double_t > &m13Binnings, const std::vector< Double_t > &m23Binnings, const Double_t precision, const Double_t defaultBinning) const
Create the integration grid objects for the m23 narrow resonance regions, including the overlap regio...
std::map< Int_t, LauAbsEffModel * > LauTagCatScfFractionModelMap
The type used for containing multiple self cross feed fraction models for different categories (e....
std::vector< Double_t > fSqEffSum_
The event-by-event running total of the dynamical amplitude squared for each amplitude component.
void calculateAmplitudes()
Calculate the amplitudes for all resonances for the current kinematics.
Class for defining a K-matrix propagator.
void setASqMaxValue(Double_t value)
Set the maximum value of A squared to be used in the accept/reject.
Class for defining (a section of) the Dalitz plot integration binning scheme.
Class to contain cached data relating to an event.
Definition: LauCacheData.hh:43
Bool_t gotReweightedEvent()
Calculates whether an event with the current kinematics should be accepted in order to produce a dist...
Double_t DPNorm_
The normalisation factor for the log-likelihood function.
void findIntegralsToBeRecalculated()
Determine which amplitudes and integrals need to be recalculated.
std::vector< LauCacheData * > data_
The cached data for all events.
void setASqMaxVarValue(Double_t value)
Set the maximum of A squared that has been found.
ToyMCStatus
The possible statuses for toy MC generation.
TString getConjResName(const TString &resName) const
Retrieve the name of the charge conjugate of a named resonance.
File containing declaration of LauComplex class.
LauComplex totAmp_
The total amplitude for the current event.
std::vector< Int_t > typDaug_
The PDG codes of the daughters.
Bool_t usingScfModel() const
Check whether a self cross feed fraction model is being used.
Double_t eff_
The efficiency at the current point in the Dalitz plot.
Double_t getEvtIntensity() const
Retrieve the total intensity multiplied by the efficiency for the current event.
void addKMatrixProdSVP(const TString &SVPName, const TString &propName, Int_t channelIndex, Bool_t useProdAdler=kFALSE)
Add a K-matrix slowly-varying part (SVP) term to the model.
ToyMCStatus checkToyMC(Bool_t printErrorMessages=kTRUE, Bool_t printInfoMessages=kFALSE)
Check the status of the toy MC generation.
void setIntegralBinningFactor(const Double_t binningFactor)
Set the factor relating the width of a narrow resonance and the binning size in its integration regio...
Int_t maxGenIterations() const
Retrieve the maximum number of iterations allowed when generating an event.
Double_t thPrime_
The square Dalitz plot coordinate theta'.
UInt_t getnCohAmp() const
Retrieve the number of coherent amplitude components.
const std::vector< LauParameter > & getExtraParameters() const
Retrieve any extra parameters/quantities (e.g. K-matrix total fit fractions)
std::vector< std::vector< LauParameter > > LauParArray
Type to define an array of parameters.
Double_t getEvtLikelihood() const
Retrieve the likelihood for the current event.
void initSummary()
Print a summary of the model to be used.
void resetNormVectors()
Zero the various values used to store integrals info.
LauParameter DPRate_
The overall Dalitz plot rate.
Bool_t gotKMatrixMatch(UInt_t resAmpInt, const TString &propName) const
Check whether a resonance is a K-matrix component of a given propagator.
const LauDaughters * getDaughters() const
Retrieve the daughters.
void setIntFileName(const TString &fileName)
Set the name of the file to which to save the results of the integrals.
LauParameter meanDPEff_
The mean efficiency across the Dalitz plot.
Double_t getEvtm23Sq() const
Retrieve the invariant mass squared of the second and third daughters in the current event.
Double_t mPrimeBinWidth_
The bin width to use when integrating over mPrime.
Double_t m23Sq_
The invariant mass squared of the second and third daughters.
void calcDPPartialIntegral(LauDPPartialIntegralInfo *intInfo)
Calculate the Dalitz plot normalisation integrals over a given range.
Double_t retrieveScfFraction(Int_t tagCat)
Obtain the self cross feed fraction of the current event from the model.
Double_t evtLike_
The normalised likelihood for the current event.
std::vector< std::vector< LauComplex > > fifjEffSum_
The event-by-event running total of efficiency corrected amplitude cross terms for each pair of ampli...
LauIsobarDynamics & operator=(const LauIsobarDynamics &rhs)
Copy assignment operator (not implemented)
void initialise(const std::vector< LauComplex > &coeffs)
Initialise the Dalitz plot dynamics.
LauIsobarDynamics(LauDaughters *daughters, LauAbsEffModel *effModel, LauAbsEffModel *scfFractionModel=0)
Constructor.
UInt_t getnIncohAmp() const
Retrieve the number of incoherent amplitude components.
Int_t tagCat_
The tagging category.
std::vector< std::pair< Double_t, Double_t > > formGapsFromRegions(const std::vector< std::pair< Double_t, Double_t >> &regions, const Double_t min, const Double_t max) const
Form the regions that are produced by the spaces between narrow resonances.
void collateResonanceParameters()
Collate the resonance parameters to initialise (or re-initialise) the model.
std::vector< LauAbsResonance * > sigResonances_
The resonances in the model.
void calculateRhoOmegaFitFractions(const Bool_t calcFF)
Whether to calculate separate rho and omega fit-fractions from LauRhoOmegaMix.
Bool_t flavConjDP_
Whether the Dalitz plot is a flavour-conjugate final state.
std::vector< LauParameter * > resonancePars_
List of floating resonance parameters.
const std::vector< std::vector< LauComplex > > & getFiFjEffSum() const
Retrieve the event-by-event running totals of efficiency corrected amplitude cross terms for all pair...
const LauComplex & getEvtDPAmp() const
Retrieve the total amplitude for the current event.
Double_t m23BinWidth_
The bin width to use when integrating over m23.
Double_t getEvtScfFraction() const
Retrieve the fraction of events that are poorly reconstructed (the self cross feed fraction) for the ...
void setNarrowResonanceThreshold(const Double_t narrowWidth)
Set the value below which a resonance width is considered to be narrow.
BlattWeisskopfCategory
Define resonance categories that will share common barrier factor radii.
Bool_t integralsDone_
Whether the integrals have been performed.
std::vector< LauComplex > Amp_
The complex coefficients for the amplitude components.
void modifyDataTree()
Recache the amplitude values for those that have changed.
Bool_t forceSymmetriseIntegration_
Force the symmetrisation of the integration in m13 <-> m23 for non-symmetric but flavour-conjugate fi...
void flipHelicityForCPEigenstates(const Bool_t boolean)
Set the helicity flip flag for new amplitude components.
std::vector< TString > resTypAmp_
The resonance types of all of the amplitude components.
void addKMatrixProdPole(const TString &poleName, const TString &propName, Int_t poleIndex, Bool_t useProdAdler=kFALSE)
Add a K-matrix production pole term to the model.
Double_t calcSigDPNorm()
Calculate the normalisation factor for the log-likelihood function.
Abstract class for defining type for resonance amplitude models (Breit-Wigner, Flatte etc....
Double_t jacobian_
The Jacobian, for the transformation into square DP coordinates at the current point in the Dalitz pl...
void initialiseVectors()
Initialise the internal storage for this model.
const std::vector< Double_t > & getFNorm() const
Retrieve the normalisation factors for the dynamic parts of the amplitudes for all of the amplitude c...
Double_t mPrime_
The square Dalitz plot coordinate, m'.
LauCacheData * currentEvent_
The cached data for the current event.
std::vector< std::vector< UInt_t > > resonanceParResIndex_
Indices in sigResonances_ to point to the corresponding signal resonance(s) for each floating paramet...
Bool_t calculateRhoOmegaFitFractions_
Whether to calculate separate rho and omega fit fractions from the LauRhoOmegaMix model.
Class for calculating 3-body kinematic quantities.
const LauParameter & getDPRate() const
Retrieve the overall Dalitz plot rate.
const LauParameter & getMeanEff() const
Retrieve the mean efficiency across the Dalitz plot.
LauIsobarDynamics(const LauIsobarDynamics &rhs)
Copy constructor (not implemented)
LauParArray fitFracEffUnCorr_
The efficiency-uncorrected fit fractions for the amplitude components.
Double_t retrieveEfficiency()
Obtain the efficiency of the current event from the model.
Pure abstract base class for defining the efficiency description across the signal Dalitz plot.
const LauAbsEffModel * getEffModel() const
Retrieve the model for the efficiency across the Dalitz plot.
void updateCoeffs(const std::vector< LauComplex > &coeffs)
Update the complex coefficients for the resonances.
std::set< UInt_t > integralsToBeCalculated_
Resonance indices for which the amplitudes and integrals should be recalculated.
Double_t getEvtJacobian() const
Retrieve the Jacobian, for the transformation into square DP coordinates, for the current event.
Class that defines the particular 3-body decay under study.
Definition: LauDaughters.hh:47
void removeCharge(TString &string) const
Remove the charge from the given particle name.
Double_t getEvtthPrime() const
Retrieve the square Dalitz plot coordinate, theta', for the current event.
std::vector< Int_t > resPairAmp_
The index of the daughter not produced by the resonance for each amplitude component.
LauComplex getFullAmplitude(const Int_t resID) const
Retrieve the Amplitude of resonance resID.
Class for defining signal dynamics using the isobar model.
std::vector< std::vector< LauComplex > > fifjSum_
The event-by-event running total of the amplitude cross terms for each pair of amplitude components.
void setIntegralBinWidths(const Double_t m13BinWidth, const Double_t m23BinWidth, const Double_t mPrimeBinWidth=0.001, const Double_t thPrimeBinWidth=0.001)
Set the widths of the bins to use when integrating across the Dalitz plot or square Dalitz plot.
Double_t thPrimeBinWidth_
The bin width to use when integrating over thetaPrime.
virtual ~LauIsobarDynamics()
Destructor.
void calcExtraInfo(const Bool_t init=kFALSE)
Calculate the fit fractions, mean efficiency and total DP rate.
void calcDPNormalisationScheme()
Calculate the Dalitz plot normalisation integrals across the whole Dalitz plot.
const LauKinematics * getKinematics() const
Retrieve the Dalitz plot kinematics.
LauResonanceModel
Define the allowed resonance types.
Double_t m13BinWidth_
The bin width to use when integrating over m13.
LauAbsResonance * addIncoherentResonance(const TString &resName, const Int_t resPairAmpInt, const LauAbsResonance::LauResonanceModel resType)
Add an incoherent resonance to the Dalitz plot.
Double_t getEvtm13Sq() const
Retrieve the invariant mass squared of the first and third daughters in the current event.
void writeIntegralsFile()
Write the results of the integrals (and related information) to a file.
void forceSymmetriseIntegration(const Bool_t force)
Force the symmetrisation of the integration in m13 <-> m23 for non-symmetric but flavour-conjugate fi...
Double_t incohResAmp(const UInt_t index)
Calculate the dynamic part of the intensity for a given incoherent component at the current point in ...
Double_t binningFactor_
The factor relating the width of the narrowest resonance and the binning size.
std::vector< LauDPPartialIntegralInfo * > dpPartialIntegralInfo_
The storage of the integration scheme.
const LauParArray & getFitFractions() const
Retrieve the fit fractions for the amplitude components.