#ifndef PARAMVALUES_HPP
#define PARAMVALUES_HPP

#include "../GlobalFunctions.hh"
#include "SignalType.hpp"
#include "BackgroundType.hpp"

class ParamValues: public SignalType, public BackgroundType{
protected:
    string latexName;
    double constrain;
    double fix;
    double ranges[2];
public:
    string name;
    double value;
    double error;
    ParamValues(){}; //default constructor
    void SetParamValues(string s_string, bool fitRef=true); //fitRef is relevant only for sigma, so set a default fitRef to true

    //Creates a RooRealVar for a given variable, if constrained, than including the constrain
    RooRealVar *getRooRealVar(string s_name, bool sig, bool fitRef=true);

    void printProperties();
    void setValuesAndErrors(bool sig);
    ~ParamValues(){}; //default destructor
};

struct FitValuesWithName{
public:
    string name;
    double val;
    double err;
    FitValuesWithName(string s_name, double d_val, double d_err){
        name = s_name;
        val = d_val;
        err = d_err;
    }
};

#endif // MASSFITSIGNALCLASS_HPP

#ifndef SAVEDFITVALUES
#define SAVEDFITVALUES

struct SavedFitValues {
    //No need to modify, this is needed only for saving the constrains from MC
    FitValuesWithName sig_mean   = FitValuesWithName("sig_mean",   1.0, 1.0);
    FitValuesWithName sig_sigma  = FitValuesWithName("sig_sigma",  1.0, 1.0);
    FitValuesWithName sig_sigma2 = FitValuesWithName("sig_sigma2", 1.0, 1.0);
    FitValuesWithName sig_alpha  = FitValuesWithName("sig_alpha",  1.0, 1.0);
    FitValuesWithName sig_alpha2 = FitValuesWithName("sig_alpha2", 1.0, 1.0);
    FitValuesWithName sig_n      = FitValuesWithName("sig_n",      1.0, 1.0);
    FitValuesWithName sig_n2     = FitValuesWithName("sig_n2",     1.0, 1.0);
    FitValuesWithName sig_f      = FitValuesWithName("sig_f",      1.0, 1.0);
    FitValuesWithName sig_effSigma = FitValuesWithName("sig_effSigma", 1.0, 1.0);
}FitValuesSignal;
#endif //saved fit values for the signal component

#ifndef SAVEDFITVALUESBKG
#define SAVEDFITVALUESBKG
struct SavedFitValuesBackground {
    //No need to modify, this is needed only for saving the constrains from MC
    FitValuesWithName bkg_mean   = FitValuesWithName("bkg_mean",   1.0, 1.0);
    FitValuesWithName bkg_sigma  = FitValuesWithName("bkg_sigma",  1.0, 1.0);
    FitValuesWithName bkg_decay  = FitValuesWithName("bkg_decay",  1.0, 1.0);
    FitValuesWithName bkg_alpha  = FitValuesWithName("bkg_alpha",  1.0, 1.0);
    FitValuesWithName bkg_alpha2 = FitValuesWithName("bkg_alpha2", 1.0, 1.0);
    FitValuesWithName bkg_n      = FitValuesWithName("bkg_n",      1.0, 1.0);
    FitValuesWithName bkg_n2     = FitValuesWithName("bkg_n2",     1.0, 1.0);
    FitValuesWithName bkg_f      = FitValuesWithName("bkg_f",      1.0, 1.0);
}FitValuesBackground;

#endif //saved fit values for background component


