if (docrossvalidation == 1):
    df_scores = cross_validation_mse(names, classifiers, X_train, y_train, 10,
                                     ncores)
    plot_cross_validation_mse(names, df_scores, suffix)

if (doRoCLearning == 1):
    confusion(mylistvariables, names, classifiers, suffix, X_train, y_train, 5)
    precision_recall(mylistvariables, names, classifiers, suffix, X_train,
                     y_train, 5)
    plot_learning_curves(names, classifiers, suffix, X_train, y_train, 100,
                         12000, 300)

if (dotesting == 1):
    filenametest_set_ML = "output/testsample%sMLdecision.pkl" % (suffix)
    ntuplename = "fTreeFlagged%s" % (optionClassification)
    test_setML = test(names, trainedmodels, X_test, test_set)
    test_set.to_pickle(filenametest_set_ML)

if (doBoundary == 1):
    mydecisionboundaries = decisionboundaries(names, trainedmodels, suffix,
                                              X_train, y_train)
    X_train_2PC, pca = GetPCADataFrameAndPC(X_train, 2)
    trainedmodels = fit(names, classifiers, X_train_2PC, y_train)
    mydecisionboundaries = decisionboundaries(names, trainedmodels,
                                              suffix + "PCAdecomposition",
                                              X_train_2PC, y_train)

if (doBinarySearch == 1):
    namesCV, classifiersCV, param_gridCV, changeparameter = getgridsearchparameters(
        optionClassification)
    grid_search_models, grid_search_bests = do_gridsearch(
if (activateKerasModels == 1):
    classifiersDNN, namesDNN = getclassifiersDNN(len(X_train.columns))
    classifiers = classifiers + classifiersDNN
    names = names + namesDNN

if (dotraining == 1):
    trainedmodels = fit(names, classifiers, X_train, y_train)
    savemodels(names, trainedmodels, output, suffix)

if (dotesting == 1):
    filenametest_set_ML = output + "/testsample%sMLdecision.pkl" % (suffix)
    filenametest_set_ML_root = output + "/testsample%sMLdecision.root" % (
        suffix)
    ntuplename = getTreeName(optionClassification) + "Tested"
    test_setML = test(names, trainedmodels, test_set, mylistvariables,
                      myvariablesy)
    test_setML.to_pickle(filenametest_set_ML)
    writeTree(filenametest_set_ML_root, ntuplename, test_setML)

if (doRoCLearning == 1):
    #   confusion(mylistvariables,names,classifiers,suffix,X_train,y_train,5)
    precision_recall(mylistvariables, names, classifiers, suffix, X_train,
                     y_train, 5, plotdir)
    plot_learning_curves(names, classifiers, suffix, plotdir, X_train, y_train,
                         500, nevents, 4000)

if (doOptimisation == 1):
    if not ((classtype == "HFmeson") & (optionClassification == "Ds")):
        print("==================ERROR==================")
        print(
            "Optimisation is not implemented for this classification problem. The code is going to fail"