File indexing completed on 2025-12-16 10:29:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef RooStats_ProposalHelper
0013 #define RooStats_ProposalHelper
0014
0015 #include "Rtypes.h"
0016 #include "RooStats/ProposalFunction.h"
0017 #include "RooStats/UniformProposal.h"
0018 #include "RooStats/PdfProposal.h"
0019 #include "RooArgSet.h"
0020 #include "RooMsgService.h"
0021 #include "RooRealVar.h"
0022 #include "TMatrixDSym.h"
0023 #include "TObject.h"
0024
0025
0026
0027 namespace RooStats {
0028
0029 class ProposalHelper : public TObject {
0030
0031 public:
0032 ProposalHelper();
0033
0034
0035 virtual void SetPdf(RooAbsPdf& pdf) { fPdf = &pdf; }
0036
0037 virtual void SetClues(RooDataSet& clues) { fClues = &clues; }
0038
0039
0040 virtual ProposalFunction* GetProposalFunction();
0041
0042 virtual void SetCacheSize(Int_t size)
0043 {
0044 if (size > 0) {
0045 fCacheSize = size;
0046 } else {
0047 coutE(Eval) << "Warning: Requested non-positive cache size: " << size << ". Cache size unchanged."
0048 << std::endl;
0049 }
0050 }
0051
0052 virtual void SetUpdateProposalParameters(bool updateParams)
0053 { fUseUpdates = updateParams; }
0054
0055 virtual void SetVariables(RooArgList& vars)
0056 { fVars = &vars; }
0057
0058 virtual void SetVariables(const RooArgList& vars)
0059 { fVars = new RooArgList(vars); fOwnsVars = true; }
0060
0061
0062
0063 virtual void SetUniformFraction(double uniFrac) { fUniFrac = uniFrac; }
0064
0065
0066
0067 virtual void SetCluesFraction(double cluesFrac) { fCluesFrac = cluesFrac; }
0068
0069
0070 virtual void SetCovMatrix(const TMatrixDSym& covMatrix)
0071 { fCovMatrix = new TMatrixDSym(covMatrix); }
0072
0073
0074
0075
0076 virtual void SetWidthRangeDivisor(double divisor)
0077 { if (divisor > 0.) fSigmaRangeDivisor = divisor; }
0078
0079
0080
0081
0082 virtual void SetCluesOptions(const Option_t* options)
0083 { if (options != nullptr) fCluesOptions = options; }
0084
0085 virtual void SetVariables(RooArgSet& vars)
0086 {
0087 RooArgList* argList = new RooArgList(vars);
0088 SetVariables(*argList);
0089 fOwnsVars = true;
0090 }
0091
0092 ~ProposalHelper() override
0093 {
0094 if (fOwnsPdfProp) delete fPdfProp;
0095 if (fOwnsPdf) delete fPdf;
0096 if (fOwnsCluesPdf) delete fCluesPdf;
0097 if (fOwnsVars) delete fVars;
0098 delete fCovMatrix;
0099 delete fUniformPdf;
0100 }
0101
0102 protected:
0103 RooAbsPdf *fPdf = nullptr;
0104 RooAbsPdf *fCluesPdf = nullptr;
0105 RooAbsPdf *fUniformPdf = nullptr;
0106 RooDataSet *fClues = nullptr;
0107 TMatrixDSym *fCovMatrix = nullptr;
0108 PdfProposal* fPdfProp = nullptr;
0109 RooArgList *fVars = nullptr;
0110 Int_t fCacheSize = -1;
0111 double fSigmaRangeDivisor;
0112 double fUniFrac = -1;
0113 double fCluesFrac = -1;
0114 bool fOwnsPdfProp = true;
0115
0116 bool fOwnsPdf = false;
0117 bool fOwnsCluesPdf = false;
0118 bool fOwnsVars = false;
0119 bool fUseUpdates = false;
0120 const Option_t *fCluesOptions = nullptr;
0121
0122 void CreatePdf();
0123 void CreateCluesPdf();
0124 void CreateUniformPdf();
0125 void CreateCovMatrix(RooArgList& xVec);
0126
0127 ClassDefOverride(ProposalHelper,1)
0128 };
0129 }
0130 #endif