Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-28 23:10:44

0001 #!/usr/bin/env python3
0002 """
0003 _RunAlcaSkimming_
0004 
0005 Test wrapper to generate an alca skimming config and push it into cmsRun for
0006 testing with a few input files etc from the command line
0007 
0008 """
0009 
0010 import sys
0011 import getopt
0012 import pickle
0013 
0014 from Configuration.DataProcessing.GetScenario import getScenario
0015 
0016 
0017 
0018 class RunAlcaSkimming:
0019 
0020     def __init__(self):
0021         self.scenario = None
0022         self.skims = []
0023         self.inputLFN = None
0024 
0025     def __call__(self):
0026         if self.scenario == None:
0027             msg = "No --scenario specified"
0028             raise RuntimeError(msg)
0029         if self.inputLFN == None:
0030             msg = "No --lfn specified"
0031             raise RuntimeError(msg)
0032 
0033         if len(self.skims) == 0:
0034             msg = "No --skims provided, need at least one"
0035             raise RuntimeError(msg)
0036 
0037         if self.globalTag == None:
0038             msg = "No --global-tag specified"
0039             raise RuntimeError(msg)
0040 
0041         try:
0042             scenario = getScenario(self.scenario)
0043         except Exception as ex:
0044             msg = "Error getting Scenario implementation for %s\n" % (
0045                 self.scenario,)
0046             msg += str(ex)
0047             raise RuntimeError(msg)
0048 
0049         print("Retrieved Scenario: %s" % self.scenario)
0050         print("Creating ALCA skimming config with skims:")
0051         for skim in self.skims:
0052             print(" => %s" % skim)
0053             
0054         try:
0055             process = scenario.alcaSkim(self.skims, globaltag = self.globalTag)
0056         except NotImplementedError as ex:
0057             print("This scenario does not support Alca Skimming:\n")
0058             return
0059         except Exception as ex:
0060             msg = "Error creating Alca Skimming config:\n"
0061             msg += str(ex)
0062             raise RuntimeError(msg)
0063 
0064         process.source.fileNames.append(self.inputLFN)
0065 
0066         import FWCore.ParameterSet.Config as cms
0067 
0068         process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(10) )
0069 
0070         pklFile = open("RunAlcaSkimmingCfg.pkl", "wb")
0071         psetFile = open("RunAlcaSkimmingCfg.py", "w")
0072         try:
0073             pickle.dump(process, pklFile, protocol=0)
0074             psetFile.write("import FWCore.ParameterSet.Config as cms\n")
0075             psetFile.write("import pickle\n")
0076             psetFile.write("handle = open('RunAlcaSkimmingCfg.pkl','rb')\n")
0077             psetFile.write("process = pickle.load(handle)\n")
0078             psetFile.write("handle.close()\n")
0079             psetFile.close()
0080         except Exception as ex:
0081             print("Error writing out PSet:")
0082             print(traceback.format_exc())
0083             raise ex
0084         finally:
0085             psetFile.close()
0086             pklFile.close()
0087 
0088         cmsRun = "cmsRun -e RunAlcaSkimmingCfg.py"
0089         print("Now do:\n%s" % cmsRun)
0090 
0091 
0092 
0093 if __name__ == '__main__':
0094     valid = ["scenario=", "skims=", "lfn=","global-tag="]
0095 
0096     usage = \
0097 """
0098 RunAlcaSkimming.py <options>
0099 
0100 Where options are:
0101  --scenario=ScenarioName
0102  --lfn=/store/input/lfn
0103  --skims=comma,separated,list
0104  --global-tag=GlobalTag
0105 
0106 Example:
0107 python2.4 RunAlcaSkimming.py --scenario=Cosmics --lfn=/store/whatever --skims=MuAlStandAloneCosmics
0108 
0109 """
0110     try:
0111         opts, args = getopt.getopt(sys.argv[1:], "", valid)
0112     except getopt.GetoptError as ex:
0113         print(usage)
0114         print(str(ex))
0115         sys.exit(1)
0116 
0117 
0118     skimmer = RunAlcaSkimming()
0119 
0120     for opt, arg in opts:
0121         if opt == "--scenario":
0122             skimmer.scenario = arg
0123         if opt == "--lfn" :
0124             skimmer.inputLFN = arg
0125         if opt == "--skims":
0126             skimmer.skims = [ x for x in arg.split('+') if len(x) > 0 ]
0127         if opt == "--global-tag":
0128             skimmer.globalTag = arg
0129 
0130     skimmer()