def runANNZ(): exitStatus = runOneANNZ() if exitStatus == 0: return # if ANNZ failed during training, try again with a different random seed and randomized MLM options # -------------------------------------------------------------------------------------------------- if glob.annz["doTrain"]: # set random seed if not already set setSeed = (not glob.annz.has_key("initSeedRnd")) if not setSeed: setSeed = (glob.annz["initSeedRnd"] < 1) if setSeed: glob.annz["initSeedRnd"] = 198876 # remove all userMLMopts so that a random set is generated glob.annz["userMLMopts"] = "" if glob.annz["doBinnedCls"]: for nRndOptNow in range(glob.annz["binCls_nTries"]): glob.annz.pop("userMLMopts_"+str(nRndOptNow),None) nTries = 0 for nTryNow in range(nTries): glob.annz["initSeedRnd"] += 1 log.warning(whtOnRed(" - runANNZ failed !!! Will try again ("+str(nTryNow+1)+"/"+str(nTries)+") with initSeedRnd = ")+yellowOnRed(str(glob.annz["initSeedRnd"]))) exitStatus = runOneANNZ() if exitStatus == 0: break Assert("runANNZ failed !!!",(exitStatus == 0)) return
def initParse(): parser = argparse.ArgumentParser(description="Command line parser:") parser.add_argument("--make", action='store_true') parser.add_argument("--clean", action='store_true') parser.add_argument("--train", action='store_true') parser.add_argument("--optimize", action='store_true') parser.add_argument("--verify", action='store_true') parser.add_argument("--evaluate", action='store_true') parser.add_argument("--qsub", action='store_true') parser.add_argument("--genInputTrees", action='store_true') parser.add_argument("--singleRegression", action='store_true') parser.add_argument("--randomRegression", action='store_true') parser.add_argument("--binnedClassification", action='store_true') parser.add_argument("--singleClassification", action='store_true') parser.add_argument("--randomClassification", action='store_true') parser.add_argument("--onlyKnnErr", action='store_true') parser.add_argument("--inTrainFlag", action='store_true') parser.add_argument("--truncateLog", action='store_true') parser.add_argument("--isBatch", action='store_true') parser.add_argument("--fitsToAscii", action='store_true') parser.add_argument("--asciiToFits", action='store_true') parser.add_argument("--logFileName", type=str, default="") parser.add_argument("--logLevel", type=str, default="INFO") parser.add_argument("--generalOptS", type=str, default="NULL") parser.add_argument("--makeOpt", type=str, default="NULL") parser.add_argument("--maxNobj", type=float, default=0) parser.add_argument("--trainIndex", type=int, default=-1) parser.add_argument("--generalOptI", type=int, default=-1) glob.pars = vars(parser.parse_args()) initLogger() # sanity check of user options # -------------------------------------------------------------------------------------------------- hasMake = (glob.pars["make"] or glob.pars["clean"]) nModes = 0 ; nSetups = 0 # if glob.pars["genInputTrees"]: nSetups += 1 if glob.pars["singleClassification"]: nSetups += 1 if glob.pars["randomClassification"]: nSetups += 1 if glob.pars["singleRegression"]: nSetups += 1 if glob.pars["randomRegression"]: nSetups += 1 if glob.pars["binnedClassification"]: nSetups += 1 if glob.pars["onlyKnnErr"]: nSetups += 1 if glob.pars["inTrainFlag"]: nSetups += 1 if glob.pars["fitsToAscii"]: nSetups += 1 if glob.pars["asciiToFits"]: nSetups += 1 if not ((nSetups == 1) or (nSetups == 0 and (glob.pars["genInputTrees"] or hasMake or glob.pars["qsub"]))): log.warning("Possibly missing/conflicting job-options... Did you define: --singleClassification" \ + " --randomClassification , --singleRegression --randomRegression, --binnedClassification, " \ +"--onlyKnnErr, --inTrainFlag, --fitsToAscii, --asciiToFits .... ?") if nSetups == 1: if glob.pars["genInputTrees"]: nModes += 1 if glob.pars["train"]: nModes += 1 if glob.pars["optimize"]: nModes += 1 if glob.pars["verify"]: nModes += 1 if glob.pars["evaluate"]: nModes += 1 if glob.pars["onlyKnnErr"]: nModes += 1 if glob.pars["inTrainFlag"]: nModes += 1 if glob.pars["fitsToAscii"]: nModes += 1 if glob.pars["asciiToFits"]: nModes += 1 if not (nModes == 1 or hasMake): log.warning("Should define exactly one of --genInputTrees --train , --optimize --verify, --evaluate, --onlyKnnErr, --inTrainFlag, --fitsToAscii, --asciiToFits !") glob.pars["onlyMake"] = (((nSetups == 0) or (nModes == 0)) and hasMake and (not glob.pars["genInputTrees"])) # add make option, e.g., "-j4" glob.makeOpt = glob.pars["makeOpt"] if glob.pars["makeOpt"] is not "NULL" else "" # set basic values for operational flags # -------------------------------------------------------------------------------------------------- glob.annz["doGenInputTrees"] = glob.pars["genInputTrees"] glob.annz["doSingleReg"] = glob.pars["singleRegression"] glob.annz["doRandomReg"] = glob.pars["randomRegression"] glob.annz["doBinnedCls"] = glob.pars["binnedClassification"] glob.annz["doSingleCls"] = glob.pars["singleClassification"] glob.annz["doRandomCls"] = glob.pars["randomClassification"] glob.annz["doTrain"] = glob.pars["train"] glob.annz["doOptim"] = glob.pars["optimize"] glob.annz["doVerif"] = glob.pars["verify"] glob.annz["doEval"] = glob.pars["evaluate"] glob.annz["doOnlyKnnErr"] = glob.pars["onlyKnnErr"] glob.annz["doInTrainFlag"] = glob.pars["inTrainFlag"] glob.annz["doRegression"] = glob.annz["doSingleReg"] or glob.annz["doRandomReg"] or glob.annz["doBinnedCls"] glob.annz["doClassification"] = glob.annz["doSingleCls"] or glob.annz["doRandomCls"] glob.annz["maxNobj"] = int(floor(glob.pars["maxNobj"])) # limit number of used objects - used for debugging glob.annz["trainIndex"] = glob.pars["trainIndex"] # used for python batch-job submision glob.annz["doFitsToAscii"] = glob.pars["fitsToAscii"] glob.annz["doAsciiToFits"] = glob.pars["asciiToFits"] # general-use options for developers glob.annz["generalOptS"] = glob.pars["generalOptS"] glob.annz["generalOptI"] = glob.pars["generalOptI"] # default values for options which should be overridden in generalSettings() # -------------------------------------------------------------------------------------------------- glob.annz["isBatch"] = (glob.pars["logFileName"] != "" or glob.pars["isBatch"]) glob.annz["useCoutCol"] = glob.annz["doPlots"] = True glob.annz["printPlotExtension"] = "pdf"