laura is hosted by Hepforge, IPPP Durham
Laura++  v1r0
A maximum likelihood fitting package for performing Dalitz-plot analysis.
LauCPFitModel.hh
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 
26 #ifndef LAU_CP_FIT_MODEL
27 #define LAU_CP_FIT_MODEL
28 
29 #include <vector>
30 
31 #include "TString.h"
32 
33 #include "LauAbsFitModel.hh"
34 #include "LauParameter.hh"
35 
36 class TH2;
37 class LauAbsBkgndDPModel;
38 class LauAbsCoeffSet;
39 class LauAbsDPDynamics;
40 class LauAbsPdf;
41 class LauEffModel;
42 class LauEmbeddedData;
43 class LauKinematics;
44 class LauScfMap;
45 
46 
47 class LauCPFitModel : public LauAbsFitModel {
48 
49  public:
51 
57  LauCPFitModel(LauAbsDPDynamics* negModel, LauAbsDPDynamics* posModel, Bool_t tagged = kTRUE, const TString& tagVarName = "charge");
58 
60  virtual ~LauCPFitModel();
61 
63 
67  virtual void setNSigEvents(Double_t nSigEvents, Bool_t fixSigEvents = kFALSE);
68 
70 
77  virtual void setNSigEvents(Double_t nSigEvents, Bool_t fixSigEvents, Double_t sigAsym, Bool_t fixSigAsym, Bool_t forceAsym = kFALSE);
78 
80 
85  virtual void setNBkgndEvents(const TString& bkgndClass, Double_t nBkgndEvents, Bool_t fixBkgndEvents = kFALSE);
86 
88 
95  virtual void setNBkgndEvents(const TString& bkgndClass, Double_t nBkgndEvents, Bool_t fixBkgndEvents, Double_t bkgndAsym, Bool_t fixBkgndAsym);
96 
98 
103  void setBkgndDPModels(const TString& bkgndClass, LauAbsBkgndDPModel* negModel, LauAbsBkgndDPModel* posModel);
104 
106 
115  void splitSignalComponent( const TH2* dpHisto, Bool_t upperHalf = kFALSE, LauScfMap* scfMap = 0 );
116 
118 
125  void splitSignalComponent( Double_t scfFrac, Bool_t fixed );
126 
128  Bool_t useSCF() const { return useSCF_; }
129 
131  Bool_t useSCFHist() const { return useSCFHist_; }
132 
134  Bool_t smearSCFDP() const { return (scfMap_ != 0); }
135 
136  // Set the DeltaE and mES models, i.e. give us the PDFs
138 
142  void setSignalPdfs(LauAbsPdf* negPdf, LauAbsPdf* posPdf);
143 
145 
149  void setSCFPdfs(LauAbsPdf* negPdf, LauAbsPdf* posPdf);
150 
152 
157  void setBkgndPdfs(const TString& bkgndClass, LauAbsPdf* negPdf, LauAbsPdf* posPdf);
158 
160 
167  void embedNegSignal(const TString& fileName, const TString& treeName,
168  Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment = kFALSE,
169  Bool_t useReweighting = kFALSE);
170 
172 
179  void embedNegBkgnd(const TString& bgClass, const TString& fileName, const TString& treeName,
180  Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment = kFALSE);
181 
183 
190  void embedPosSignal(const TString& fileName, const TString& treeName,
191  Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment = kFALSE,
192  Bool_t useReweighting = kFALSE);
193 
195 
202  void embedPosBkgnd(const TString& bgClass, const TString& fileName, const TString& treeName,
203  Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment = kFALSE);
204 
206 
209  void setAmpCoeffSet(LauAbsCoeffSet* coeffSet);
210 
212 
216  virtual void weightEvents( const TString& dataFileName, const TString& dataTreeName );
217 
218  protected:
220  typedef std::map< std::pair<TString,Int_t>, std::pair<Int_t,Double_t> > LauGenInfo;
221 
223  typedef std::vector<LauAbsBkgndDPModel*> LauBkgndDPModelList;
224 
226  typedef std::vector<LauPdfList> LauBkgndPdfsList;
227 
229  typedef std::vector<LauParameter> LauBkgndYieldList;
230 
232  typedef std::vector<LauEmbeddedData*> LauBkgndEmbDataList;
233 
235  typedef std::vector<Bool_t> LauBkgndReuseEventsList;
236 
237 
239  virtual void initialise();
240 
242  virtual void initialiseDPModels();
243 
245  virtual void updateCoeffs();
246 
248  virtual Bool_t genExpt();
249 
252  virtual void propagateParUpdates();
253 
255  virtual void cacheInputFitVars();
256 
258  virtual void checkInitFitParams();
259 
261 
264  virtual void finaliseFitResults(const TString& tablePrefixName);
265 
267 
270  virtual void printFitFractions(std::ostream& output);
271 
273 
276  virtual void printAsymmetries(std::ostream& output);
277 
279 
282  virtual void writeOutTable(const TString& outputFile);
283 
285  virtual void storePerEvtLlhds();
286 
287  // Methods to do with calculating the likelihood functions
288  // and manipulating the fitting parameters.
290 
293  virtual Double_t getTotEvtLikelihood(UInt_t iEvt);
294 
296 
299  virtual void getEvtDPLikelihood(UInt_t iEvt);
300 
302 
305  virtual Double_t getEvtSCFDPLikelihood(UInt_t iEvt);
306 
308 
311  virtual void getEvtExtraLikelihoods(UInt_t iEvt);
312 
314 
317  virtual Double_t getEventSum() const;
318 
320  void setSignalDPParameters();
321 
323  void setExtraPdfParameters();
324 
326  void setFitNEvents();
327 
329  void setExtraNtupleVars();
330 
332  void randomiseInitFitPars();
333 
335 
338  void calcExtraFractions(Bool_t initValues = kFALSE);
339 
341 
344  void calcAsymmetries(Bool_t initValues = kFALSE);
345 
347  virtual void setupBkgndVectors();
348 
351 
353  Bool_t generateSignalEvent();
354 
356 
359  Bool_t generateBkgndEvent(UInt_t bgID);
360 
362  void setupGenNtupleBranches();
363 
365  void setDPBranchValues();
366 
368 
372  void generateExtraPdfValues(LauPdfList* extraPdfs, LauEmbeddedData* embeddedData);
373 
375 
378  Bool_t storeSignalMCMatch(LauEmbeddedData* embeddedData);
379 
381 
385  void addSPlotNtupleBranches(const LauPdfList* extraPdfs, const TString& prefix);
386 
388 
393  Double_t setSPlotNtupleBranchValues(LauPdfList* extraPdfs, const TString& prefix, UInt_t iEvt);
394 
396  void updateSigEvents();
397 
399  virtual void setupSPlotNtupleBranches();
400 
402  virtual LauSPlot::NameSet variableNames() const;
403 
405  virtual LauSPlot::NumbMap freeSpeciesNames() const;
406 
408  virtual LauSPlot::NumbMap fixdSpeciesNames() const;
409 
411  virtual LauSPlot::TwoDMap twodimPDFs() const;
412 
414  virtual Bool_t splitSignal() const {return this->useSCF();}
415 
417  virtual Bool_t scfDPSmear() const {return (scfMap_ != 0);}
418 
425 
428  void appendBinCentres( LauFitDataTree* inputData );
429 
430  private:
433 
436 
439 
442 
445 
448 
451 
454 
457 
460 
463 
466 
468  Bool_t usingBkgnd_;
469 
471  UInt_t nSigComp_;
472 
474  UInt_t nSigDPPar_;
475 
478 
480  UInt_t nNormPar_;
481 
483  std::vector<LauAbsCoeffSet*> coeffPars_;
484 
487 
490 
493 
496 
498  std::vector<LauParameter> fitFracAsymm_;
499 
501  std::vector<LauParameter> acp_;
502 
505 
508 
511 
514 
517 
520 
522  Bool_t forceAsym_;
523 
526 
529 
531  const Bool_t tagged_;
532 
534  const TString tagVarName_;
535 
538 
540  std::vector<Int_t> evtCharges_;
541 
543  Bool_t useSCF_;
544 
546  Bool_t useSCFHist_;
547 
550 
553 
556 
558  std::vector<Double_t> recoSCFFracs_;
559 
561  std::vector<Double_t> fakeSCFFracs_;
562 
564  std::vector<Double_t> recoJacobians_;
565 
567  std::vector<Double_t> fakeJacobians_;
568 
571 
573  TString negParent_;
574 
576  TString posParent_;
577 
579  std::vector<LauComplex> negCoeffs_;
580 
582  std::vector<LauComplex> posCoeffs_;
583 
584  // Embedding SP events
587 
590 
593 
596 
598  Bool_t reuseSignal_;
599 
602 
605 
608 
609  // Likelihood values
611  Double_t sigDPLike_;
612 
614  Double_t scfDPLike_;
615 
617  std::vector<Double_t> bkgndDPLike_;
618 
620  Double_t sigExtraLike_;
621 
623  Double_t scfExtraLike_;
624 
626  std::vector<Double_t> bkgndExtraLike_;
627 
629  Double_t sigTotalLike_;
630 
632  Double_t scfTotalLike_;
633 
635  std::vector<Double_t> bkgndTotalLike_;
636 
637  ClassDef(LauCPFitModel,0) // CP fit/ToyMC model
638 
639 };
640 
641 #endif
void generateExtraPdfValues(LauPdfList *extraPdfs, LauEmbeddedData *embeddedData)
Generate from the extra PDFs.
void splitSignalComponent(const TH2 *dpHisto, Bool_t upperHalf=kFALSE, LauScfMap *scfMap=0)
Split the signal component into well-reconstructed and mis-reconstructed parts.
Bool_t generateSignalEvent()
Generate signal event.
Class for defining the abstract interface for signal Dalitz plot dynamics.
The abstract interface for a background Dalitz plot model.
std::vector< LauParameter > acp_
A_CP parameter.
virtual LauSPlot::NameSet variableNames() const
Returns the names of all variables in the fit.
LauKinematics * negKinematics_
The B- Dalitz plot kinematics object.
virtual void setNBkgndEvents(const TString &bkgndClass, Double_t nBkgndEvents, Bool_t fixBkgndEvents=kFALSE)
Set the background event yield(s)
virtual void printAsymmetries(std::ostream &output)
Print the asymmetries.
LauPdfList negSignalPdfs_
The B- signal PDFs.
Bool_t smearSCFDP() const
Determine if we are smearing the SCF DP PDF.
void addSPlotNtupleBranches(const LauPdfList *extraPdfs, const TString &prefix)
Add sPlot branches for the extra PDFs.
Bool_t forceAsym_
Option to force an asymmetry.
Double_t scfTotalLike_
Total SCF likelihood.
void setExtraPdfParameters()
Set the fit parameters for the extra PDFs.
LauBkgndDPModelList posBkgndDPModels_
The B+ background Dalitz plot models.
UInt_t nNormPar_
Number of parameters.
Bool_t useSCF() const
Determine whether we are splitting the signal into TM and SCF parts.
LauEmbeddedData * posSignalTree_
The B+ signal event tree.
File containing declaration of LauAbsFitModel class.
Int_t curEvtCharge_
Current event charge.
void calcExtraFractions(Bool_t initValues=kFALSE)
Calculate the CP-conserving and CP-violating fit fractions.
LauEmbeddedData * negSignalTree_
The B- signal event tree.
Bool_t useNegReweighting_
Boolean to use reweighting for B-.
std::vector< LauComplex > negCoeffs_
The complex coefficients for B-.
LauBkgndPdfsList posBkgndPdfs_
The B+ background PDFs.
std::multimap< TString, std::pair< TString, TString > > TwoDMap
Type to associate the name of the species that have 2D PDFs with the names of the two variables invol...
Definition: LauSPlot.hh:68
Bool_t compareFitData_
Run choice variables.
virtual Bool_t scfDPSmear() const
Check if the mis-reconstructed signal is to be smeared in the DP.
LauParArray negFitFrac_
The B- fit fractions.
virtual void getEvtExtraLikelihoods(UInt_t iEvt)
Determine the signal and background likelihood for the extra variables for a given event...
Double_t sigDPLike_
Signal DP likelihood value.
LauPdfList negScfPdfs_
The B- SCF PDFs.
Bool_t useSCF_
Is the signal split into TM and SCF.
virtual Bool_t genExpt()
Toy MC generation and fitting overloaded functions.
TString negParent_
Name of the parent particle.
TString posParent_
Name of the parent particle.
void embedNegSignal(const TString &fileName, const TString &treeName, Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment=kFALSE, Bool_t useReweighting=kFALSE)
Embed full simulation events for the B- signal, rather than generating toy from the PDFs...
std::vector< Double_t > fakeSCFFracs_
The cached values of the SCF fraction for each bin centre.
std::vector< std::vector< LauParameter > > LauParArray
Type to define an array of parameters.
Bool_t storeSignalMCMatch(LauEmbeddedData *embeddedData)
Store the MC truth info on the TM/SCF nature of the embedded signal event.
Bool_t usingBkgnd_
Background boolean.
LauGenInfo eventsToGenerate()
Determine the number of events to generate for each hypothesis.
std::vector< LauAbsPdf * > LauPdfList
List of Pdfs.
LauBkgndYieldList bkgndAsym_
Background asymmetries(s)
std::vector< LauParameter > LauBkgndYieldList
Typedef for a vector of background yields.
LauParameter negDPRate_
The average DP rate for B-.
std::vector< Double_t > bkgndTotalLike_
Total background likelihood(s)
std::vector< Double_t > recoSCFFracs_
The cached values of the SCF fraction for each event.
LauParameter posDPRate_
The average DP rate for B+.
std::vector< Double_t > bkgndExtraLike_
Background likelihood value(s) from extra PDFs.
void setupGenNtupleBranches()
Setup the required ntuple branches.
LauAbsDPDynamics * posSigModel_
The B+ signal Dalitz plot model.
Double_t scfExtraLike_
SCF likelihood from extra PDFs.
Bool_t reuseSignal_
Boolean to reuse signal events.
LauParArray posFitFrac_
The B+ fit fractions.
virtual void cacheInputFitVars()
Read in the input fit data variables, e.g. m13Sq and m23Sq.
void setSignalDPParameters()
Set the fit parameters for the DP model.
void randomiseInitFitPars()
Randomise the initial fit parameters.
void appendBinCentres(LauFitDataTree *inputData)
virtual void checkInitFitParams()
Check the initial fit parameters.
const Bool_t tagged_
IS the analysis tagged?
UInt_t nExtraPdfPar_
Number of extra PDF parameters.
virtual void finaliseFitResults(const TString &tablePrefixName)
Get the fit results and store them.
virtual void printFitFractions(std::ostream &output)
Print the fit fractions, total DP rate and mean efficiency.
Class for defining a CP fit model.
Abstract interface to the fitting and toy MC model.
const TString tagVarName_
Event charge.
std::vector< LauAbsBkgndDPModel * > LauBkgndDPModelList
Typedef for a vector of background DP models.
std::vector< Int_t > evtCharges_
Vector to store event charges.
File containing declaration of LauParameter class.
virtual Bool_t splitSignal() const
Check if the signal is split into well-reconstructed and mis-reconstructed types. ...
std::vector< LauPdfList > LauBkgndPdfsList
Typedef for a vector of background PDFs.
void calcAsymmetries(Bool_t initValues=kFALSE)
Calculate the CP asymmetries.
std::map< TString, Double_t > NumbMap
Type to associate a category name with a double precision number, e.g. a yield or PDF value for a giv...
Definition: LauSPlot.hh:62
LauScfMap * scfMap_
The smearing matrix for the SCF DP PDF.
Double_t sigExtraLike_
Signal likelihood from extra PDFs.
LauCPFitModel(LauAbsDPDynamics *negModel, LauAbsDPDynamics *posModel, Bool_t tagged=kTRUE, const TString &tagVarName="charge")
Constructor.
virtual void initialise()
Initialise the fit.
virtual LauSPlot::NumbMap fixdSpeciesNames() const
Returns the names and yields of species that are fixed in the fit.
virtual void setNSigEvents(Double_t nSigEvents, Bool_t fixSigEvents=kFALSE)
Set the signal event yield.
Class for defining the abstract interface for complex coefficient classes.
Double_t sigTotalLike_
Total signal likelihood.
void setAmpCoeffSet(LauAbsCoeffSet *coeffSet)
Set the DP amplitude coefficients.
Class for defining the fit parameter objects.
Definition: LauParameter.hh:31
Class to store the data for embedding in toy experiments.
UInt_t nSigComp_
Number of signal components.
virtual void setupSPlotNtupleBranches()
Add branches to store experiment number and the event number within the experiment.
std::vector< Double_t > bkgndDPLike_
Background DP likelihood value(s)
void embedNegBkgnd(const TString &bgClass, const TString &fileName, const TString &treeName, Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment=kFALSE)
Embed full simulation events for the given background class, rather than generating toy from the PDFs...
LauBkgndEmbDataList negBkgndTree_
The B- background event tree.
LauBkgndReuseEventsList reuseBkgnd_
Vector of booleans to reuse background events.
std::vector< LauAbsCoeffSet * > coeffPars_
Magnitudes and Phases.
LauParameter posMeanEff_
The mean efficiency for B+ model.
LauAbsDPDynamics * negSigModel_
The B- signal Dalitz plot model.
LauParArray CPCFitFrac_
The CP conserving fit fraction.
virtual void weightEvents(const TString &dataFileName, const TString &dataTreeName)
Weight events based on the DP model.
Bool_t usePosReweighting_
Boolean to use reweighting for B+.
Bool_t generateBkgndEvent(UInt_t bgID)
Generate background event.
virtual void writeOutTable(const TString &outputFile)
Write the fit results in latex table format.
Bool_t useSCFHist() const
Determine whether the SCF fraction is DP-dependent.
Class that implements the efficiency description across the signal Dalitz plot.
Definition: LauEffModel.hh:37
virtual void updateCoeffs()
Update the coefficients.
Double_t setSPlotNtupleBranchValues(LauPdfList *extraPdfs, const TString &prefix, UInt_t iEvt)
Set the branches for the sPlot ntuple with extra PDFs.
virtual ~LauCPFitModel()
Destructor.
std::vector< LauComplex > posCoeffs_
The complex coefficients for B+.
virtual void initialiseDPModels()
Initialise the signal DP models.
void updateSigEvents()
Update the signal events after Minuit sets background parameters.
virtual void setupBkgndVectors()
Define the length of the background vectors.
void setSignalPdfs(LauAbsPdf *negPdf, LauAbsPdf *posPdf)
Set the signal PDFs.
void setFitNEvents()
Set the initial yields.
virtual LauSPlot::TwoDMap twodimPDFs() const
Returns the species and variables for all 2D PDFs in the fit.
virtual LauSPlot::NumbMap freeSpeciesNames() const
Returns the names and yields of species that are free in the fit.
LauEffModel * scfFracHist_
The histogram giving the DP-dependence of the SCF fraction.
LauParameter signalAsym_
Signal asymmetry.
UInt_t nSigDPPar_
Number of signal DP parameters.
virtual void propagateParUpdates()
Class for representing the 4D smearing matrix for mis-reconstructed signal (self cross feed) ...
Definition: LauScfMap.hh:29
virtual void storePerEvtLlhds()
Store the per event likelihood values.
Double_t scfDPLike_
SCF DP likelihood value.
std::vector< Double_t > recoJacobians_
The cached values of the sqDP jacobians for each event.
std::vector< Bool_t > LauBkgndReuseEventsList
Typedef for a vector of booleans to flag if events are reused.
virtual Double_t getEventSum() const
Get the total number of events.
Class for defining the abstract interface for PDF classes.
Definition: LauAbsPdf.hh:40
LauPdfList posScfPdfs_
The B+ SCF PDFs.
LauBkgndYieldList bkgndEvents_
Background yield(s)
Class for calculating 3-body kinematic quantities.
LauBkgndDPModelList negBkgndDPModels_
The B- background Dalitz plot models.
LauParArray CPVFitFrac_
The CP violating fit fraction.
LauPdfList posSignalPdfs_
The B+ signal PDFs.
std::vector< Double_t > fakeJacobians_
The cached values of the sqDP jacobians for each true bin.
void embedPosBkgnd(const TString &bgClass, const TString &fileName, const TString &treeName, Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment=kFALSE)
Embed full simulation events for the given background class, rather than generating toy from the PDFs...
virtual Double_t getEvtSCFDPLikelihood(UInt_t iEvt)
Calculate the SCF likelihood for the DP for a given event.
std::vector< LauEmbeddedData * > LauBkgndEmbDataList
Typedef for a vector of embedded data objects.
LauParameter signalEvents_
Signal yield.
void setSCFPdfs(LauAbsPdf *negPdf, LauAbsPdf *posPdf)
Set the SCF PDF for a given variable.
std::map< std::pair< TString, Int_t >, std::pair< Int_t, Double_t > > LauGenInfo
Define a map to be used to store a category name and numbers.
Bool_t useSCFHist_
Is the SCF fraction DP-dependent.
LauParameter negMeanEff_
The mean efficiency for B- model.
void setBkgndPdfs(const TString &bkgndClass, LauAbsPdf *negPdf, LauAbsPdf *posPdf)
Set the background PDFs.
virtual Double_t getTotEvtLikelihood(UInt_t iEvt)
Get the total likelihood for each event.
virtual void getEvtDPLikelihood(UInt_t iEvt)
Calculate the signal and background likelihoods for the DP for a given event.
LauBkgndEmbDataList posBkgndTree_
The B+ background event tree.
void setBkgndDPModels(const TString &bkgndClass, LauAbsBkgndDPModel *negModel, LauAbsBkgndDPModel *posModel)
Set the background DP models.
LauBkgndPdfsList negBkgndPdfs_
The B- background PDFs.
Class to store the input fit variables.
LauParameter scfFrac_
The (global) SCF fraction parameter.
std::set< TString > NameSet
Type to store names, e.g. of the discriminating/control variables.
Definition: LauSPlot.hh:59
void setDPBranchValues()
Store all of the DP information.
LauKinematics * posKinematics_
The B+ Dalitz plot kinematics object.
void embedPosSignal(const TString &fileName, const TString &treeName, Bool_t reuseEventsWithinEnsemble, Bool_t reuseEventsWithinExperiment=kFALSE, Bool_t useReweighting=kFALSE)
Embed full simulation events for the B+ signal, rather than generating toy from the PDFs...
std::vector< LauParameter > fitFracAsymm_
The fit fraction asymmetries.
void setExtraNtupleVars()
Set-up other parameters that are derived from the fit results, e.g. fit fractions.