Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
349 changes: 106 additions & 243 deletions Alignment/OfflineValidation/interface/FitWithRooFit.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
#ifndef Alignment_OfflineValidation_FitWithRooFit_h
#define Alignment_OfflineValidation_FitWithRooFit_h

#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "TCanvas.h"
#include "TTree.h"
#include "TH1D.h"
Expand Down Expand Up @@ -44,264 +42,129 @@
* The methods names after the variables return the fit result.
*/

namespace {
typedef std::pair<RooRealVar, RooDataHist*> rooPair;
}

class FitWithRooFit {
public:
FitWithRooFit()
: useChi2_(false),
mean_(nullptr),
mean2_(nullptr),
mean3_(nullptr),
sigma_(nullptr),
sigma2_(nullptr),
sigma3_(nullptr),
gamma_(nullptr),
gaussFrac_(nullptr),
gaussFrac2_(nullptr),
expCoeffa0_(nullptr),
expCoeffa1_(nullptr),
expCoeffa2_(nullptr),
fsig_(nullptr),
a0_(nullptr),
a1_(nullptr),
a2_(nullptr),
a3_(nullptr),
a4_(nullptr),
a5_(nullptr),
a6_(nullptr),
alpha_(nullptr),
n_(nullptr),
fGCB_(nullptr) {}

rooPair importTH1(TH1* histo, const double& inputXmin, const double& inputXmax);
std::unique_ptr<RooDataHist> importTH1(TH1* histo, double xMin, double xMax);

void fit(TH1* histo,
const TString signalType,
const TString backgroundType,
const double& xMin = 0.,
const double& xMax = 0.,
double xMin = 0.,
double xMax = 0.,
bool sumW2Error = false);

void initMean(const double& value,
const double& min,
const double& max,
const TString& name = "mean",
const TString& title = "mean");

void initMean2(const double& value,
const double& min,
const double& max,
const TString& name = "mean2",
const TString& title = "mean2");

void initMean3(const double& value,
const double& min,
const double& max,
const TString& name = "mean3",
const TString& title = "mean3");

void initSigma(const double& value,
const double& min,
const double& max,
const TString& name = "sigma",
const TString& title = "sigma");

void initSigma2(const double& value,
const double& min,
const double& max,
const TString& name = "sigma2",
const TString& title = "sigma2");

void initSigma3(const double& value,
const double& min,
const double& max,
const TString& name = "sigma3",
const TString& title = "sigma3");

void initGamma(const double& value,
const double& min,
const double& max,
const TString& name = "gamma",
const TString& title = "gamma");

void initGaussFrac(const double& value,
const double& min,
const double& max,
const TString& name = "GaussFrac",
const TString& title = "GaussFrac");

void initGaussFrac2(const double& value,
const double& min,
const double& max,
const TString& name = "GaussFrac2",
const TString& title = "GaussFrac2");

void initExpCoeffA0(const double& value,
const double& min,
const double& max,
const TString& name = "expCoeffa0",
const TString& title = "expCoeffa0");

void initExpCoeffA1(const double& value,
const double& min,
const double& max,
const TString& name = "expCoeffa1",
const TString& title = "expCoeffa1");

void initExpCoeffA2(const double& value,
const double& min,
const double& max,
const TString& name = "expCoeffa2",
const TString& title = "expCoeffa2");

void initFsig(const double& value,
const double& min,
const double& max,
const TString& name = "fsig",
const TString& title = "signal fraction");

void initA0(const double& value,
const double& min,
const double& max,
const TString& name = "a0",
const TString& title = "a0");

void initA1(const double& value,
const double& min,
const double& max,
const TString& name = "a1",
const TString& title = "a1");

void initA2(const double& value,
const double& min,
const double& max,
const TString& name = "a2",
const TString& title = "a2");

void initA3(const double& value,
const double& min,
const double& max,
const TString& name = "a3",
const TString& title = "a3");

void initA4(const double& value,
const double& min,
const double& max,
const TString& name = "a4",
const TString& title = "a4");

void initA5(const double& value,
const double& min,
const double& max,
const TString& name = "a5",
const TString& title = "a5");

void initA6(const double& value,
const double& min,
const double& max,
const TString& name = "a6",
const TString& title = "a6");

void initAlpha(const double& value,
const double& min,
const double& max,
const TString& name = "alpha",
const TString& title = "alpha");

void initN(
const double& value, const double& min, const double& max, const TString& name = "n", const TString& title = "n");

void initFGCB(const double& value,
const double& min,
const double& max,
const TString& name = "fGCB",
const TString& title = "fGCB");

inline RooRealVar* mean() { return mean_; }
inline RooRealVar* mean2() { return mean2_; }
inline RooRealVar* mean3() { return mean3_; }
inline RooRealVar* sigma() { return sigma_; }
inline RooRealVar* sigma2() { return sigma2_; }
inline RooRealVar* sigma3() { return sigma3_; }
inline RooRealVar* gamma() { return gamma_; }
inline RooRealVar* gaussFrac() { return gaussFrac_; }
inline RooRealVar* gaussFrac2() { return gaussFrac2_; }
inline RooRealVar* expCoeffa0() { return expCoeffa0_; }
inline RooRealVar* expCoeffa1() { return expCoeffa1_; }
inline RooRealVar* expCoeffa2() { return expCoeffa2_; }
inline RooRealVar* fsig() { return fsig_; }
inline RooRealVar* a0() { return a0_; }
inline RooRealVar* a1() { return a1_; }
inline RooRealVar* a2() { return a2_; }
inline RooRealVar* a3() { return a3_; }
inline RooRealVar* a4() { return a4_; }
inline RooRealVar* a5() { return a5_; }
inline RooRealVar* a6() { return a6_; }
inline RooRealVar* alpha() { return alpha_; }
inline RooRealVar* n() { return n_; }
inline RooRealVar* fGCB() { return fGCB_; }
void initMean(double value, double min, double max, const TString& name = "mean", const TString& title = "mean");
void initMean2(double value, double min, double max, const TString& name = "mean2", const TString& title = "mean2");
void initMean3(double value, double min, double max, const TString& name = "mean3", const TString& title = "mean3");
void initSigma(double value, double min, double max, const TString& name = "sigma", const TString& title = "sigma");
void initSigma2(double value, double min, double max, const TString& name = "sigma2", const TString& title = "sigma2");
void initSigma3(double value, double min, double max, const TString& name = "sigma3", const TString& title = "sigma3");
void initGamma(double value, double min, double max, const TString& name = "gamma", const TString& title = "gamma");
void initGaussFrac(
double value, double min, double max, const TString& name = "GaussFrac", const TString& title = "GaussFrac");
void initGaussFrac2(
double value, double min, double max, const TString& name = "GaussFrac2", const TString& title = "GaussFrac2");
void initExpCoeffA0(
double value, double min, double max, const TString& name = "expCoeffa0", const TString& title = "expCoeffa0");
void initExpCoeffA1(
double value, double min, double max, const TString& name = "expCoeffa1", const TString& title = "expCoeffa1");
void initExpCoeffA2(
double value, double min, double max, const TString& name = "expCoeffa2", const TString& title = "expCoeffa2");
void initFsig(
double value, double min, double max, const TString& name = "fsig", const TString& title = "signal fraction");
void initA0(double value, double min, double max, const TString& name = "a0", const TString& title = "a0");
void initA1(double value, double min, double max, const TString& name = "a1", const TString& title = "a1");
void initA2(double value, double min, double max, const TString& name = "a2", const TString& title = "a2");
void initA3(double value, double min, double max, const TString& name = "a3", const TString& title = "a3");
void initA4(double value, double min, double max, const TString& name = "a4", const TString& title = "a4");
void initA5(double value, double min, double max, const TString& name = "a5", const TString& title = "a5");
void initA6(double value, double min, double max, const TString& name = "a6", const TString& title = "a6");
void initAlpha(double value, double min, double max, const TString& name = "alpha", const TString& title = "alpha");
void initN(double value, double min, double max, const TString& name = "n", const TString& title = "n");
void initFGCB(double value, double min, double max, const TString& name = "fGCB", const TString& title = "fGCB");

inline RooRealVar* mean() { return mean_.get(); }
inline RooRealVar* mean2() { return mean2_.get(); }
inline RooRealVar* mean3() { return mean3_.get(); }
inline RooRealVar* sigma() { return sigma_.get(); }
inline RooRealVar* sigma2() { return sigma2_.get(); }
inline RooRealVar* sigma3() { return sigma3_.get(); }
inline RooRealVar* gamma() { return gamma_.get(); }
inline RooRealVar* gaussFrac() { return gaussFrac_.get(); }
inline RooRealVar* gaussFrac2() { return gaussFrac2_.get(); }
inline RooRealVar* expCoeffa0() { return expCoeffa0_.get(); }
inline RooRealVar* expCoeffa1() { return expCoeffa1_.get(); }
inline RooRealVar* expCoeffa2() { return expCoeffa2_.get(); }
inline RooRealVar* fsig() { return fsig_.get(); }
inline RooRealVar* a0() { return a0_.get(); }
inline RooRealVar* a1() { return a1_.get(); }
inline RooRealVar* a2() { return a2_.get(); }
inline RooRealVar* a3() { return a3_.get(); }
inline RooRealVar* a4() { return a4_.get(); }
inline RooRealVar* a5() { return a5_.get(); }
inline RooRealVar* a6() { return a6_.get(); }
inline RooRealVar* alpha() { return alpha_.get(); }
inline RooRealVar* n() { return n_.get(); }
inline RooRealVar* fGCB() { return fGCB_.get(); }

void reinitializeParameters();

RooAbsPdf* buildSignalModel(RooRealVar* x, const TString& signalType);
RooAbsPdf* buildBackgroundModel(RooRealVar* x, const TString& backgroundType);
RooAbsPdf* buildModel(RooRealVar* x, const TString& signalType, const TString& backgroundType);
std::unique_ptr<RooAbsPdf> buildSignalModel(RooRealVar* x, const TString& signalType);
std::unique_ptr<RooAbsPdf> buildBackgroundModel(RooRealVar* x, const TString& backgroundType);
std::unique_ptr<RooAbsPdf> buildModel(RooRealVar* x, const TString& signalType, const TString& backgroundType);

bool useChi2_;
bool useChi2_ = false;

protected:
// Declare all variables
RooRealVar* mean_;
RooRealVar* mean2_;
RooRealVar* mean3_;
RooRealVar* sigma_;
RooRealVar* sigma2_;
RooRealVar* sigma3_;
RooRealVar* gamma_;
RooRealVar* gaussFrac_;
RooRealVar* gaussFrac2_;
RooRealVar* expCoeffa0_;
RooRealVar* expCoeffa1_;
RooRealVar* expCoeffa2_;
RooRealVar* fsig_;
RooRealVar* a0_;
RooRealVar* a1_;
RooRealVar* a2_;
RooRealVar* a3_;
RooRealVar* a4_;
RooRealVar* a5_;
RooRealVar* a6_;
RooRealVar* alpha_;
RooRealVar* n_;
RooRealVar* fGCB_;
std::unique_ptr<RooRealVar> mean_;
std::unique_ptr<RooRealVar> mean2_;
std::unique_ptr<RooRealVar> mean3_;
std::unique_ptr<RooRealVar> sigma_;
std::unique_ptr<RooRealVar> sigma2_;
std::unique_ptr<RooRealVar> sigma3_;
std::unique_ptr<RooRealVar> gamma_;
std::unique_ptr<RooRealVar> gaussFrac_;
std::unique_ptr<RooRealVar> gaussFrac2_;
std::unique_ptr<RooRealVar> expCoeffa0_;
std::unique_ptr<RooRealVar> expCoeffa1_;
std::unique_ptr<RooRealVar> expCoeffa2_;
std::unique_ptr<RooRealVar> fsig_;
std::unique_ptr<RooRealVar> a0_;
std::unique_ptr<RooRealVar> a1_;
std::unique_ptr<RooRealVar> a2_;
std::unique_ptr<RooRealVar> a3_;
std::unique_ptr<RooRealVar> a4_;
std::unique_ptr<RooRealVar> a5_;
std::unique_ptr<RooRealVar> a6_;
std::unique_ptr<RooRealVar> alpha_;
std::unique_ptr<RooRealVar> n_;
std::unique_ptr<RooRealVar> fGCB_;

// Initial values
double initVal_mean;
double initVal_mean2;
double initVal_mean3;
double initVal_sigma;
double initVal_sigma2;
double initVal_sigma3;
double initVal_gamma;
double initVal_gaussFrac;
double initVal_gaussFrac2;
double initVal_expCoeffa0;
double initVal_expCoeffa1;
double initVal_expCoeffa2;
double initVal_fsig;
double initVal_a0;
double initVal_a1;
double initVal_a2;
double initVal_a3;
double initVal_a4;
double initVal_a5;
double initVal_a6;
double initVal_alpha;
double initVal_n;
double initVal_fGCB;
double initVal_mean = 0.0;
double initVal_mean2 = 0.0;
double initVal_mean3 = 0.0;
double initVal_sigma = 0.0;
double initVal_sigma2 = 0.0;
double initVal_sigma3 = 0.0;
double initVal_gamma = 0.0;
double initVal_gaussFrac = 0.0;
double initVal_gaussFrac2 = 0.0;
double initVal_expCoeffa0 = 0.0;
double initVal_expCoeffa1 = 0.0;
double initVal_expCoeffa2 = 0.0;
double initVal_fsig = 0.0;
double initVal_a0 = 0.0;
double initVal_a1 = 0.0;
double initVal_a2 = 0.0;
double initVal_a3 = 0.0;
double initVal_a4 = 0.0;
double initVal_a5 = 0.0;
double initVal_a6 = 0.0;
double initVal_alpha = 0.0;
double initVal_n = 0.0;
double initVal_fGCB = 0.0;
};

#endif
Loading