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

Test wrapper to generate an alca skimming 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 RunAlcaSkimming:

    def __init__(self):
        self.scenario = None
        self.skims = []
        self.inputLFN = 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 len(self.skims) == 0:
            msg = "No --skims provided, need at least one"
            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("Creating ALCA skimming config with skims:")
        for skim in self.skims:
            print(" => %s" % skim)
            
        try:
            process = scenario.alcaSkim(self.skims, globaltag = self.globalTag)
        except NotImplementedError as ex:
            print("This scenario does not support Alca Skimming:\n")
            return
        except Exception as ex:
            msg = "Error creating Alca Skimming config:\n"
            msg += str(ex)
            raise RuntimeError(msg)

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

        import FWCore.ParameterSet.Config as cms

        process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10) )

        pklFile = open("RunAlcaSkimmingCfg.pkl", "wb")
        psetFile = open("RunAlcaSkimmingCfg.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('RunAlcaSkimmingCfg.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 -e RunAlcaSkimmingCfg.py"
        print("Now do:\n%s" % cmsRun)



if __name__ == '__main__':
    valid = ["scenario=", "skims=", "lfn=","global-tag="]

    usage = \
"""
RunAlcaSkimming.py <options>

Where options are:
 --scenario=ScenarioName
 --lfn=/store/input/lfn
 --skims=comma,separated,list
 --global-tag=GlobalTag

Example:
python2.4 RunAlcaSkimming.py --scenario=Cosmics --lfn=/store/whatever --skims=MuAlStandAloneCosmics

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


    skimmer = RunAlcaSkimming()

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

    skimmer()