//Renata Kopecna


#ifndef PARSEOPTS_HH
#define PARSEOPTS_HH

//TODO: toys
//TODO: this should probably be a class instead of a struct

//parameters
//b Bin #b
//d Dataset; 0 :data,  1 MC, ...
//g FoldinG
//e number of Events
//i,j general purpose indices
//l get likelihood profiles of final fit?
//p Use P' instead of S
//r Run: 0/1/2/12/21/22
//n number of toys
//o feLdmanCousins
//u Number of bins
//v Verbosity
//y Year: 2011, 2012, 2015, 2016, 2017, 2018
//z Used for testing stuff in case one needs an extra parameter to tune or so

struct basic_params{
    int bin;
    int dataset;
    int folding;
    int index;
    int jobID;
    bool likelyhood;
    bool FeldCous;
    bool usePprime;
    bool reference;
    int Run;
    int year;
    int nEvents;
    int nBins;
    int verbosity;
    int testInt;
    int polarity;

    basic_params(){
        bin     = -1;
        dataset = -1;
        folding = -1;
        index   = -1;
        jobID   = -1;
        Run     = -1;
        year    = -1;
        nEvents = -1;
        nBins   = -1;
        likelyhood = false;
        FeldCous   = false;
        usePprime  = false;
        reference  = false;
        verbosity = 2;
        testInt = -1;        
        polarity = 0;
    }
};

//Actions
//a angular resolution
//c angular Correction
//f fit:
    //0: bkg only (0 signals :) (only ang fit!)
    //1: Full fit (2D+4D)
    //2: 2D mass fit
    //3: MoM
    //4: 4D MC fit (B mass+angles in bins of q2)
    //5: GenLvlFit
//h Get help
//k convert Events
//m pulls from MC
//s systematics
//t pulls from toys

struct basic_actions{
    bool angRes;
    bool angCorr; //Use generic index i to set whether it is a scan or not
    bool angCorrScan;
    bool convert;
    int fitType;
    bool getHelp;
    int systematics;
    bool genToys;
    bool pullsToys;
    bool pullsMC;
    bool script;

    basic_actions(){
        fitType     = -1;
        systematics = -1;
        angCorrScan = false;
        angRes      = false;
        angCorr     = false;
        convert     = false;
        getHelp     = false;
        genToys     = false;
        pullsToys   = false;
        pullsMC     = false;
        script      = false;
    }
};


int parseOpts(int argc, char *argv[], basic_params &par, basic_actions &act, int nMCEvents);
int checkOpts(basic_params &par, basic_actions &act);

#endif // PARSEOPTS_HH
