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.18 by ewv, Mon May 4 21:45:43 2009 UTC vs.
Revision 1.26 by ewv, Mon Dec 14 22:33:54 2009 UTC

# Line 39 | Line 39 | def main(argv) :
39      """
40      writeCfg
41  
42 <    - Read in existing, user supplied cfg or pycfg file
43 <    - Modify job specific parameters based on environment variables
44 <    - Write out modified cfg or pycfg file
42 >    - Read in existing, user supplied pycfg or pickled pycfg file
43 >    - Modify job specific parameters based on environment variables and arguments.xml
44 >    - Write out pickled pycfg file
45  
46      required parameters: none
47  
# Line 89 | Line 89 | def main(argv) :
89          print main.__doc__
90          sys.exit()
91  
92 <  # Read in XML and get optional Parameters
92 >  # Read in Environment, XML and get optional Parameters
93  
94      nJob       = int(os.environ.get('NJob',      '0'))
95 +    preserveSeeds  = os.environ.get('PreserveSeeds','')
96 +    incrementSeeds = os.environ.get('IncrementSeeds','')
97  
98    # Defaults
99  
# Line 100 | Line 102 | def main(argv) :
102      firstEvent = -1
103      compHEPFirstEvent = 0
104      firstRun   = 0
105 +    # FUTURE: Remove firstRun
106 +    firstLumi  = 0
107  
108      dom = xml.dom.minidom.parse(os.environ['RUNTIME_AREA']+'/arguments.xml')
109  
# Line 111 | Line 115 | def main(argv) :
115                  skipEvents = int(elem.getAttribute("SkipEvents"))
116              if elem.getAttribute("FirstEvent"):
117                  firstEvent = int(elem.getAttribute("FirstEvent"))
114            if elem.getAttribute("CompHEPFirstEvent"):
115                compHEPFirstEvent = int(elem.getAttribute("CompHEPFirstEvent"))
118              if elem.getAttribute("FirstRun"):
119                  firstRun = int(elem.getAttribute("FirstRun"))
120 +            if elem.getAttribute("FirstLumi"):
121 +                firstLumi = int(elem.getAttribute("FirstLumi"))
122  
123 +            generator      = str(elem.getAttribute('Generator'))
124              inputFiles     = str(elem.getAttribute('InputFiles'))
125              parentFiles    = str(elem.getAttribute('ParentFiles'))
126 <            preserveSeeds  = str(elem.getAttribute('PreserveSeeds'))
122 <            incrementSeeds = str(elem.getAttribute('IncrementSeeds'))
126 >            lumis          = str(elem.getAttribute('Lumis'))
127  
128 <  # Read Input cfg or python cfg file, FUTURE: Get rid cfg mode
128 >  # Read Input python config file
129  
130 <    if fileName.endswith('py'):
131 <        handle = open(fileName, 'r')
128 <        try:   # Nested form for Python < 2.5
129 <            try:
130 <                print "Importing .py file"
131 <                cfo = imp.load_source("pycfg", fileName, handle)
132 <                cmsProcess = cfo.process
133 <            except Exception, ex:
134 <                msg = "Your pycfg file is not valid python: %s" % str(ex)
135 <                raise ConfigException(msg)
136 <        finally:
137 <            handle.close()
138 <    else:
130 >    handle = open(fileName, 'r')
131 >    try:   # Nested form for Python < 2.5
132          try:
133 <            print "Importing .cfg file"
134 <            cfo = include(fileName)
135 <            cmsProcess = cfo
133 >            print "Importing .py file"
134 >            cfo = imp.load_source("pycfg", fileName, handle)
135 >            cmsProcess = cfo.process
136          except Exception, ex:
137 <            msg =  "The cfg file is not valid, %s\n" % str(ex)
137 >            msg = "Your pycfg file is not valid python: %s" % str(ex)
138              raise ConfigException(msg)
139 +    finally:
140 +        handle.close()
141  
142      cfg = CfgInterface(cmsProcess)
143  
# Line 154 | Line 149 | def main(argv) :
149  
150      if skipEvents:
151          inModule.setSkipEvents(skipEvents)
152 <    if firstEvent != -1:
152 >
153 >    # Set "skip events" for various generators
154 >    if generator == 'comphep':
155 >        cmsProcess.source.CompHEPFirstEvent = CfgTypes.int32(firstEvent)
156 >    elif generator == 'lhe':
157 >        cmsProcess.source.skipEvents = CfgTypes.untracked(CfgTypes.uint32(firstEvent))
158 >        cmsProcess.source.firstEvent = CfgTypes.untracked(CfgTypes.uint32(firstEvent+1))
159 >    elif firstEvent != -1: # (Old? Madgraph)
160          cmsProcess.source.firstEvent = CfgTypes.untracked(CfgTypes.uint32(firstEvent))
161 <    if compHEPFirstEvent:
160 <        cmsProcess.source.CompHEPFirstEvent = CfgTypes.int32(compHEPFirstEvent)
161 >
162      if inputFiles:
163          inputFileNames = inputFiles.split(',')
164          inModule.setFileNames(*inputFileNames)
# Line 167 | Line 168 | def main(argv) :
168          parentFileNames = parentFiles.split(',')
169          inModule.setSecondaryFileNames(*parentFileNames)
170  
171 +    if lumis:
172 +        if CMSSW_major < 3: # FUTURE: Can remove this check
173 +            print "Cannot skip lumis for CMSSW 2_x"
174 +        else:
175 +            lumiRanges = lumis.split(',')
176 +            inModule.setLumisToProcess(*lumiRanges)
177 +
178      # Pythia parameters
179      if (firstRun):
180          inModule.setFirstRun(firstRun)
181 +    if (firstLumi):
182 +        inModule.setFirstLumi(firstLumi)
183  
184 <    incrementSeedList = []
185 <    preserveSeedList  = []
176 <
177 <    if incrementSeeds:
178 <        incrementSeedList = incrementSeeds.split(',')
179 <    if preserveSeeds:
180 <        preserveSeedList  = preserveSeeds.split(',')
181 <
182 <    # FUTURE: This function tests the CMSSW version and presence of old-style seed specification.
183 <    # Reduce when we drop support for old versions
184 <    if cfg.data.services.has_key('RandomNumberGeneratorService'): # There are random #'s to deal with
184 >    # Check if there are random #'s to deal with
185 >    if cfg.data.services.has_key('RandomNumberGeneratorService'):
186          print "RandomNumberGeneratorService found, will attempt to change seeds"
187 +        from IOMC.RandomEngine.RandomServiceHelper import RandomNumberServiceHelper
188          ranGenerator = cfg.data.services['RandomNumberGeneratorService']
189 <        ranModules   = getattr(ranGenerator, "moduleSeeds", None)
188 <        oldSource    = getattr(ranGenerator, "sourceSeed",  None)
189 <        if ranModules != None or oldSource != None:     # Old format present, no matter the CMSSW version
190 <            print "Old-style random number seeds found, will be changed."
191 <            if oldSource != None:
192 <                sourceSeed = int(ranGenerator.sourceSeed.value())
193 <                if ('sourceSeed' in preserveSeedList) or ('theSource' in preserveSeedList):
194 <                    pass
195 <                elif ('sourceSeed' in incrementSeedList) or ('theSource' in incrementSeedList):
196 <                    ranGenerator.sourceSeed = CfgTypes.untracked(CfgTypes.uint32(sourceSeed+nJob))
197 <                else:
198 <                    ranGenerator.sourceSeed = CfgTypes.untracked(CfgTypes.uint32(MyRandom.randint(1, _MAXINT)))
199 <
200 <            for seed in incrementSeedList:
201 <                curSeed = getattr(ranGenerator.moduleSeeds, seed, None)
202 <                if curSeed:
203 <                    curValue = int(curSeed.value())
204 <                    setattr(ranGenerator.moduleSeeds, seed, CfgTypes.untracked(CfgTypes.uint32(curValue+nJob)))
205 <                    preserveSeedList.append(seed)
206 <
207 <            if ranModules != None:
208 <                for seed in ranGenerator.moduleSeeds.parameterNames_():
209 <                    if seed not in preserveSeedList:
210 <                        curSeed = getattr(ranGenerator.moduleSeeds, seed, None)
211 <                        if curSeed:
212 <                            curValue = int(curSeed.value())
213 <                            setattr(ranGenerator.moduleSeeds, seed,
214 <                                    CfgTypes.untracked(CfgTypes.uint32(MyRandom.randint(1,_MAXINT))))
215 <        elif CMSSW_major > 2 or (CMSSW_major == 2 and CMSSW_minor >= 1): # Treatment for  seeds, CMSSW 2_1_x and later
216 <            print "New-style random number seeds found, will be changed."
217 <            from IOMC.RandomEngine.RandomServiceHelper import RandomNumberServiceHelper
218 <            randSvc = RandomNumberServiceHelper(ranGenerator)
219 <
220 <            # Increment requested seed sets
221 <            for seedName in incrementSeedList:
222 <                curSeeds = randSvc.getNamedSeed(seedName)
223 <                newSeeds = [x+nJob for x in curSeeds]
224 <                randSvc.setNamedSeed(seedName, *newSeeds)
225 <                preserveSeedList.append(seedName)
189 >        randSvc = RandomNumberServiceHelper(ranGenerator)
190  
191 <            # Randomize remaining seeds
192 <            randSvc.populate(*preserveSeedList)
193 <        else:
194 <            print "Neither old nor new seed format found!"
191 >        incrementSeedList = []
192 >        preserveSeedList  = []
193 >
194 >        if incrementSeeds:
195 >            incrementSeedList = incrementSeeds.split(',')
196 >        if preserveSeeds:
197 >            preserveSeedList  = preserveSeeds.split(',')
198 >
199 >        # Increment requested seed sets
200 >        for seedName in incrementSeedList:
201 >            curSeeds = randSvc.getNamedSeed(seedName)
202 >            newSeeds = [x+nJob for x in curSeeds]
203 >            randSvc.setNamedSeed(seedName, *newSeeds)
204 >            preserveSeedList.append(seedName)
205  
206 <      # End version specific code
206 >        # Randomize remaining seeds
207 >        randSvc.populate(*preserveSeedList)
208  
209 <    # Write out new config file in one format or the other, FUTURE: Get rid of cfg mode
209 >    # Write out new config file
210      outFile = open(outFileName,"w")
211 <    if outFileName.endswith('py'):
212 <        outFile.write("import FWCore.ParameterSet.Config as cms\n")
213 <        outFile.write("import pickle\n")
214 <        outFile.write("pickledCfg=\"\"\"%s\"\"\"\n" % pickle.dumps(cmsProcess))
240 <        outFile.write("process = pickle.loads(pickledCfg)\n")
241 <        if (debug):
242 <            print "writeCfg output (May not be exact):"
243 <            print "import FWCore.ParameterSet.Config as cms"
244 <            print cmsProcess.dumpPython()
245 <    else:
246 <        outFile.write(cfg.data.dumpConfig())
247 <        if (debug):
248 <            print "writeCfg output:"
249 <            print str(cfg.data.dumpConfig())
211 >    outFile.write("import FWCore.ParameterSet.Config as cms\n")
212 >    outFile.write("import pickle\n")
213 >    outFile.write("pickledCfg=\"\"\"%s\"\"\"\n" % pickle.dumps(cmsProcess))
214 >    outFile.write("process = pickle.loads(pickledCfg)\n")
215      outFile.close()
216 +    if (debug):
217 +        print "writeCfg output (May not be exact):"
218 +        print "import FWCore.ParameterSet.Config as cms"
219 +        print cmsProcess.dumpPython()
220  
221  
222   if __name__ == '__main__' :

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines