ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/writeCfg.py
(Generate patch)

Comparing COMP/CRAB/python/writeCfg.py (file contents):
Revision 1.1 by ewv, Fri Dec 14 17:53:36 2007 UTC vs.
Revision 1.3.4.1 by ewv, Fri Apr 4 12:55:47 2008 UTC

# Line 3 | Line 3
3   import sys, getopt, string
4   import imp
5   import os
6 + import random
7 + from random import SystemRandom
8 + _inst  = SystemRandom()
9  
10   from ProdCommon.CMSConfigTools.ConfigAPI.CfgInterface import CfgInterface
11   from FWCore.ParameterSet.DictTypes import SortedKeysDict
12   from FWCore.ParameterSet.Modules   import Service
13   from FWCore.ParameterSet.Types     import *
14 < from FWCore.ParameterSet.Config import include
14 > from FWCore.ParameterSet.Config    import include
15  
16   import FWCore.ParameterSet.Types   as CfgTypes
17   import FWCore.ParameterSet.Modules as CfgModules
18  
19 + class ConfigException(Exception):
20 +    def __init__(self, msg):
21 +        Exception.__init__(self, msg)
22 +        self._msg = msg
23 +        return
24 +
25 +    def __str__(self):
26 +        return self._msg
27  
28   def main(argv) :
29    """
# Line 31 | Line 42 | def main(argv) :
42    """
43  
44    # defaults
34  maxEvents = 0
35  skipEvents = 0
45    inputFileNames = None
46 <  debug = False
46 >  firstRun       = 0
47 >  sourceSeed     = 0
48 >  vtxSeed        = 0
49 >  g4Seed         = 0
50 >  mixSeed        = 0
51 >  debug          = False
52  
53    try:
54 <    opts, args = getopt.getopt(argv, "", ["debug", "help","inputFiles=","maxEvents=","skipEvents="])
54 >    opts, args = getopt.getopt(argv, "", ["debug", "help"])
55    except getopt.GetoptError:
56      print main.__doc__
57      sys.exit(2)
58  
59 <  # Parse command line parameters
59 >  try:
60 >    CMSSW  = os.environ['CMSSW_VERSION']
61 >    parts = CMSSW.split('_')
62 >    CMSSW_major = int(parts[1])
63 >    CMSSW_minor = int(parts[2])
64 >    CMSSW_patch = int(parts[3])
65 >  except KeyError, ValueError:
66 >    msg = "Your environment doesn't specify the CMSSW version or specifies it incorrectly"
67 >    raise ConfigException(msg)
68 >
69 >  # Parse command line options
70    for opt, arg in opts :
71      if opt  == "--help" :
72        print main.__doc__
73        sys.exit()
74      elif opt == "--debug" :
75        debug = True
52    elif opt == "--maxEvents":
53      maxEvents = int(arg)
54    elif opt == "--skipEvents":
55      skipEvents = int(arg)
56    elif opt == "--inputFiles":
57      inputFiles = arg
58      inputFiles = inputFiles.replace('\\','')
59      inputFiles = inputFiles.replace('"','')
60      inputFileNames = inputFiles.split(',')
76  
77    # Parse remaining parameters
78  
79 <  fileName    = args[0];
80 <  outFileName = args[1];
79 >  try:
80 >    fileName    = args[0];
81 >    outFileName = args[1];
82 >  except IndexError:
83 >      print main.__doc__
84 >      sys.exit()
85  
86 <  # Input cfg or python cfg file
86 > # Optional Parameters
87 >
88 >  maxEvents  = int(os.environ.get('MaxEvents','0'))
89 >  skipEvents = int(os.environ.get('SkipEvents','0'))
90 >  inputFiles = os.environ.get('InputFiles','')
91 >  firstRun   = int(os.environ.get('FirstRun','0'))
92 >  nJob       = int(os.environ.get('NJob','0'))
93 >  preserveSeeds = os.environ.get('PreserveSeeds','')
94 >  incrementSeeds = os.environ.get('IncrementSeeds','')
95 >
96 > # Read Input cfg or python cfg file
97  
98    if (fileName.endswith('py') or fileName.endswith('pycfg') ):
99      handle = open(fileName, 'r')
# Line 84 | Line 113 | def main(argv) :
113      except Exception, ex:
114        msg =  "The cfg file is not valid, %s\n" % str(ex)
115        raise "Error: ",msg
116 +  inModule = cfg.inputSource
117  
118    # Set parameters for job
119 +  if maxEvents:
120 +    cfg.maxEvents.setMaxEventsInput(maxEvents)
121  
122 <  inModule = cfg.inputSource
123 <
92 <  cfg.maxEvents.setMaxEventsInput(maxEvents)
122 >  if skipEvents:
123 >    inModule.setSkipEvents(skipEvents)
124  
125 <  inModule.setSkipEvents(skipEvents)
126 <  if (inputFileNames):
125 >  if inputFiles:
126 >    inputFiles = inputFiles.replace('\\','')
127 >    inputFiles = inputFiles.replace('"','')
128 >    inputFileNames = inputFiles.split(',')
129      inModule.setFileNames(*inputFileNames)
130  
131 <  # Write out new config file
131 >  # FUTURE: This function tests the CMSSW version. Can be simplified as we drop support for old versions
132 >  # Pythia parameters
133 >  if (firstRun):
134 >    inModule.setFirstRun(firstRun)
135 >
136 >  incrementSeedList = []
137 >  preserveSeedList  = []
138 >
139 >  if incrementSeeds:
140 >    incrementSeedList = incrementSeeds.split(',')
141 >  if preserveSeeds:
142 >    preserveSeedList  = preserveSeeds.split(',')
143 >
144 >  if CMSSW_major < 3: # True for now, should be < 2 when really ready
145 >  # Treatment for seeds, CMSSW < 2_0_x
146 >    if cfg.data.services.has_key('RandomNumberGeneratorService'):
147 >      ranGenerator = cfg.data.services['RandomNumberGeneratorService']
148 >      ranModules   = ranGenerator.moduleSeeds
149 >
150 >      _MAXINT = 900000000
151 >
152 >      sourceSeed = int(ranGenerator.sourceSeed.value())
153 >      if 'sourceSeed' in preserveSeedList:
154 >        pass
155 >      elif 'sourceSeed' in incrementSeedList:
156 >        ranGenerator.sourceSeed = CfgTypes.untracked(CfgTypes.uint32(sourceSeed+nJob))
157 >      else:
158 >        ranGenerator.sourceSeed = CfgTypes.untracked(CfgTypes.uint32(_inst.randint(1,_MAXINT)))
159 >
160 >      for seed in incrementSeedList:
161 >        curSeed = getattr(ranGenerator.moduleSeeds,seed,None)
162 >        if curSeed:
163 >          curValue = int(curSeed.value())
164 >          setattr(ranGenerator.moduleSeeds,seed,CfgTypes.untracked(CfgTypes.uint32(curValue+nJob)))
165 >          preserveSeedList.append(seed)
166 >
167 >      try:
168 >        seedList = ranGenerator.moduleSeeds.parameters().keys()
169 >      except: # Needed for 1_6_7. Above line is good for 1_6_10
170 >        seedList = ranGenerator.moduleSeeds.parameterNames_()
171 >
172 >      for seed in seedList:
173 >        if seed not in preserveSeedList:
174 >          curSeed = getattr(ranGenerator.moduleSeeds,seed,None)
175 >          if curSeed:
176 >            curValue = int(curSeed.value())
177 >            setattr(ranGenerator.moduleSeeds,seed,CfgTypes.untracked(CfgTypes.uint32(_inst.randint(1,_MAXINT))))
178 >  else:
179 >    # Treatment for  seeds, CMSSW => 2_0_x
180 > #from RandomService import RandomSeedService
181 >
182 >
183 >    # This code not currently working because randSvc is not part of the actual configuration file
184 >
185 >    # Translate old format to new format first
186 >    randSvc = RandomSeedService()
187 >    try:
188 >      ranGenerator = cfg.data.services['RandomNumberGeneratorService']
189 >      ranModules   = ranGenerator.moduleSeeds
190 >      for seed in ranGenerator.moduleSeeds.parameters().keys():
191 >        curSeed = getattr(ranGenerator.moduleSeeds,seed,None)
192 >        curValue = int(curSeed.value())
193 >        setattr(randSvc,seed,CfgTypes.PSet())
194 >        curPSet = getattr(randSvc,seed,None)
195 >        curPSet.initialSeed = CfgTypes.untracked(CfgTypes.uint32(curValue))
196 >      del ranGenerator.moduleSeeds # Get rid of seeds in old format
197 > # Doesn't work, filter is false      randSvc.populate()
198 >
199 >    except:
200 >      print "Problems converting old seeds to new format"
201 >
202 >  # Write out new config file in one format or the other
203  
204    outFile = open(outFileName,"w")
205 <  outFile.write("import FWCore.ParameterSet.Config as cms\n")
206 <  outFile.write(cfo.dumpPython())
205 >  if (outFileName.endswith('py') or outFileName.endswith('pycfg') ):
206 >    outFile.write("import FWCore.ParameterSet.Config as cms\n")
207 >    outFile.write(cfo.dumpPython())
208 >    if (debug):
209 >      print "writeCfg output:"
210 >      print "import FWCore.ParameterSet.Config as cms"
211 >      print cfo.dumpPython()
212 >  else:
213 >    outFile.write(str(cfg))
214 >    if (debug):
215 >      print "writeCfg output:"
216 >      print str(cfg)
217    outFile.close()
218  
105  if (debug):
106    print "writeCfg output:"
107    print "import FWCore.ParameterSet.Config as cms"
108    print cfo.dumpPython()
109
219  
220   if __name__ == '__main__' :
221      exit_status = main(sys.argv[1:])

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines