/**
 * @file likelihoodscan.hh
 * @author Christoph Langenbruch Renata Kopecna
 * @date 2020-01-12
 *
 */

#ifndef LIKELIHOODSCAN_H
#define LIKELIHOODSCAN_H

#include <string>
#include <vector>

namespace fcnc {
    //Forward decalrations
    class parameters;
    class pdf;
    class event;
    class options;

class likelihoodscan;

class likelihoodscan {
private:
    options* opts;
    int from, to;
public:
    ///constructor
    likelihoodscan(options* o):
        opts(o),
        from(-1),
        to(-1)
    {};
    ///destructor
    ~likelihoodscan(){};

    ///one-dimensional likelihoodscan
    bool scan_1d(std::string parname, unsigned int nsteps, double parmin, double parmax,
                 std::vector<pdf*> probs, std::vector<parameters*> params,
                 std::vector<std::vector<event> *> events, std::vector<std::string> common_par,
                 unsigned int bin=0, int from=-1, int to=-1);
    bool scan_1d(std::string parname, unsigned int nsteps, double parmin, double parmax,
                 pdf* prob, parameters* params, std::vector<event> * events,
                 unsigned int bin=0, int from=-1, int to=-1);

    ///two-dimensional likelihood scan
    bool scan_2d(std::string parxname, unsigned int nstepsx, double parxmin, double parxmax,
                 std::string paryname, unsigned int nstepsy, double parymin, double parymax,
                 std::vector<pdf*> probs, std::vector<parameters*> params,
                 std::vector<std::vector<event> *> events, std::vector<std::string> common_par,
                 unsigned int bin=0, int from=-1, int to=-1);
    bool scan_2d(std::string parxname, unsigned int nstepsx, double parxmin, double parxmax,
                 std::string paryname, unsigned int nstepsy, double parymin, double parymax,
                 pdf* prob, parameters* params, std::vector<event> * events,
                 unsigned int bin=0, int from=-1, int to=-1);
};

}//end namespace

#endif
