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 147
#!/usr/bin/env python3
"""
_RunAlcaHarvesting_

Test wrapper to generate a harvesting config and push it into cmsRun for
testing with a few input files etc from the command line

"""

import sys
import getopt
import pickle

from Configuration.DataProcessing.GetScenario import getScenario



class RunAlcaHarvesting:

    def __init__(self):
        self.scenario = None
        self.dataset = None
#         self.run = None
        self.globalTag = None
        self.inputLFN = None
        self.workflows = None
        self.alcapromptdataset = None

    def __call__(self):
        if self.scenario == None:
            msg = "No --scenario specified"
            raise RuntimeError(msg)
        if self.inputLFN == None:
            msg = "No --lfn specified"
            raise RuntimeError(msg)
        
#         if self.run == None:
#             msg = "No --run specified"
#             raise RuntimeError, msg
        
        if self.dataset == None:
            msg = "No --dataset specified"
            raise RuntimeError(msg)
        
        if self.globalTag == None:
            msg = "No --global-tag specified"
            raise RuntimeError(msg)

        
        try:
            scenario = getScenario(self.scenario)
        except Exception as ex:
            msg = "Error getting Scenario implementation for %s\n" % (
                self.scenario,)
            msg += str(ex)
            raise RuntimeError(msg)

        print("Retrieved Scenario: %s" % self.scenario)
        print("Using Global Tag: %s" % self.globalTag)
        print("Dataset: %s" % self.dataset)
#         print "Run: %s" % self.run
        
        
        try:
            kwds = {}
            if not self.workflows is None:
                kwds['skims'] = self.workflows
            if not self.alcapromptdataset is None:
                kwds['alcapromptdataset'] = self.alcapromptdataset
            process = scenario.alcaHarvesting(self.globalTag, self.dataset, **kwds)
            
        except Exception as ex:
            msg = "Error creating AlcaHarvesting config:\n"
            msg += str(ex)
            raise RuntimeError(msg)

        process.source.fileNames.append(self.inputLFN)


        pklFile = open("RunAlcaHarvestingCfg.pkl", "wb")
        psetFile = open("RunAlcaHarvestingCfg.py", "w")
        try:
            pickle.dump(process, pklFile, protocol=0)
            psetFile.write("import FWCore.ParameterSet.Config as cms\n")
            psetFile.write("import pickle\n")
            psetFile.write("handle = open('RunAlcaHarvestingCfg.pkl','rb')\n")
            psetFile.write("process = pickle.load(handle)\n")
            psetFile.write("handle.close()\n")
            psetFile.close()
        except Exception as ex:
            print("Error writing out PSet:")
            print(traceback.format_exc())
            raise ex
        finally:
            psetFile.close()
            pklFile.close()

        cmsRun = "cmsRun -j FrameworkJobReport.xml RunAlcaHarvestingCfg.py"
        print("Now do:\n%s" % cmsRun)
        



if __name__ == '__main__':
    valid = ["scenario=", "global-tag=", "lfn=", "dataset=","workflows=","alcapromptdataset="]
    usage = \
    usage = """
    RunAlcaHarvesting.py <options>


    Where options are:
    --scenario=ScenarioName
    --global-tag=GlobalTag
    --lfn=/store/input/lfn
    --dataset=/A/B/C
    --workflows=theWFs
    --alcapromptdataset=theAPdataset

    """


    try:
        opts, args = getopt.getopt(sys.argv[1:], "", valid)
    except getopt.GetoptError as ex:
        print(usage)
        print(str(ex))
        sys.exit(1)


    harvester = RunAlcaHarvesting()

    for opt, arg in opts:
        if opt == "--scenario":
            harvester.scenario = arg
        if opt == "--global-tag":
            harvester.globalTag = arg
        if opt == "--lfn" :
            harvester.inputLFN = arg
        if opt == "--dataset" :
            harvester.dataset = arg
        if opt == "--workflows":
            harvester.workflows = [ x for x in arg.split('+') if len(x) > 0 ]
        if opt == "--alcapromptdataset":
            harvester.alcapromptdataset = arg


    harvester()