Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
import os
import argparse
class CLIHelper(object):
    @classmethod
    def get_common_options_parser(cls):
        """ Return a parser with common options for each workflow"""
        common_opts_parser = argparse.ArgumentParser(add_help=False)
        common_opts_group = common_opts_parser.add_argument_group(
            description ="General options")
        common_opts_group.add_argument("-r","--run", type=int,
            help="set reference run number (typically first or last run in list)")
        common_opts_group.add_argument("--trial", type=int, default = 1,
            help="trial number used in the naming of output directories")
        common_opts_group.add_argument("--label", default="dtCalibration",
            help="label used in the naming of workflow output default:%(default)s")
        common_opts_group.add_argument("--datasettype", default = "Data",
            choices=["Data", "Cosmics", "MC"], help="Type of input dataset default: %(default)s")
        common_opts_group.add_argument("--config-path",
            help="Path to alternative workflow config json file, e.g. used to submit the job")
        common_opts_group.add_argument("--user", default="",
            help="User used e.g. for submission. Defaults to user HN name")
        common_opts_group.add_argument("--working-dir",
            default=os.getcwd(), help="connect string default:%(default)s")
        common_opts_group.add_argument("--no-exec",
            action="store_true", help="Do not execute or submit any workflow")
        return common_opts_parser

    @classmethod
    def add_parser_options(cls, parser):
        # Subparsers are used to choose a calibration workflow
        workflow_subparsers = parser.add_subparsers( help="workflow option help", dest="workflow" )
        return workflow_subparsers


    def fill_required_options_prepare_dict(self):
        common_required = []
        self.required_options_prepare_dict["submit"] = ["globaltag"]

    def fill_required_options_dict(self):
        common_required = ["run"]
        self.required_options_dict["submit"] = common_required
        self.required_options_dict["submit"].append("datasetpath")
        self.required_options_dict["submit"].append("globaltag")

        self.required_options_dict["correction"] = common_required
        self.required_options_dict["correction"].append("globaltag")


    @classmethod
    def get_input_db_options_parser(cls):
        """ Return a parser object with options relevant for input databases"""
        db_opts_parser = argparse.ArgumentParser(add_help=False)
        dp_opts_group = db_opts_parser.add_argument_group(
            description ="Options for Input databases")
        db_opts_parser.add_argument("--inputDBRcd",
            help="Record used for PoolDBESSource")
        db_opts_parser.add_argument("--inputDBTag",
            help="Tag used for PoolDBESSource")
        db_opts_parser.add_argument("--connectStrDBTag",
            default='frontier://FrontierProd/CMS_COND_31X_DT',
            help="connect string default:%(default)s")
        return db_opts_parser

    @classmethod
    def get_local_input_db_options_parser(cls):
        """ Return a parser object with options relevant for input databases"""
        db_opts_parser = argparse.ArgumentParser(add_help=False)
        db_opts_group = db_opts_parser.add_argument_group(
            description ="Options for local input databases")
        db_opts_group.add_argument("--inputVDriftDB",
            help="Local alternative VDrift database")
        db_opts_group.add_argument("--inputCalibDB",
            help="Local alternative Ttrig database")
        db_opts_group.add_argument("--inputT0DB",
            help="Local alternative T0 database")
        return db_opts_parser

    @classmethod
    def get_submission_options_parser(cls):
        """ Return a parser object with options relevant to remote submission"""
        submission_opts_parser = argparse.ArgumentParser(add_help=False)
        submission_opts_group = submission_opts_parser.add_argument_group(
            description ="Options for Job submission")
        submission_opts_group.add_argument("--datasetpath",
            help="dataset name to process")
        submission_opts_group.add_argument("--run-on-RAW", action = "store_true",
            help="Flag if run on RAW dataset")
        submission_opts_group.add_argument("--fromMuons", action = "store_true",
            help="Segment selection using muon-segment matching")
        submission_opts_group.add_argument("--globaltag",
            help="global tag identifier (with the '::All' string, if necessary)")
        submission_opts_group.add_argument("--histoRange", default = 0.4,
            help="Range or residual histogram, default is 0.4cm")
        submission_opts_group.add_argument("--runselection", default = [], nargs="+",
            help="run list or range")
        submission_opts_group.add_argument("--filesPerJob", default = 5,
            help="Number of files to process for MC grid jobs")
        submission_opts_group.add_argument("--lumisPerJob", default = 10000,
            help="Number of lumi sections to process for RAW / Comsics grid jobs")
        submission_opts_group.add_argument("--preselection", dest="preselection",
            help="configuration fragment and sequence name, separated by a ':', defining a pre-selection filter")
        submission_opts_group.add_argument("--raw-data-label", dest="raw_data_label", default="rawDataCollector",
            help="RAW Data label as in the sample file.")
        submission_opts_group.add_argument("--output-site", default = "T2_DE_RWTH",
            help="Site used for stage out of results")
        submission_opts_group.add_argument("--ce-black-list", default = [], nargs="+",
            help="add sites to black list when run on Grid")
        submission_opts_group.add_argument("--ce-white-list", default = [], nargs="+",
            help="add sites to white list when run on Grid")
        submission_opts_group.add_argument("--no-log",
            action="store_true", help="Do not transfer crab logs:%(default)s")
        return submission_opts_parser

    @classmethod
    def get_check_options_parser(cls):
        """ Return a parser object with options relevant to check the status of remote submission"""
        check_opts_parser = argparse.ArgumentParser(add_help=False)
        check_opts_group = check_opts_parser.add_argument_group(
            description ="Options for Job submission")
        check_opts_group.add_argument("--check-interval", default = 600,type=int,
            help="Time in seconds between check operations default: %(default)s")
        check_opts_group.add_argument("--max-checks", default =1000, type=int,
            help="Maximum number of checks before check is considered failed default: %(default)s")
        return check_opts_parser

    @classmethod
    def get_write_options_parser(cls):
        """ Return a parser object with options relevant to write results to dbs"""
        check_opts_parser = argparse.ArgumentParser(add_help=False)
        check_opts_group = check_opts_parser.add_argument_group(
            description ="Options for write jobs")
        check_opts_group.add_argument("--skip-stageout", action="store_true",
            help="Skip stageout to local disk and merging")
        return check_opts_parser

    @classmethod
    def get_dump_options_parser(cls):
        dump_opts_parser = argparse.ArgumentParser(add_help=False)
        dump_opts_group = dump_opts_parser.add_argument_group(
            description ="Options for dump db file")
        dump_opts_group.add_argument("--input-dumpDB",
        help="Input database file to dump."\
             " Defaults to existing corrected database from correction command"\
             " if run, label, trial or input config are specified")
        return dump_opts_group