ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/PsetManipulator.py
Revision: 1.39
Committed: Wed Oct 6 13:57:46 2010 UTC (14 years, 6 months ago) by ewv
Content type: text/x-python
Branch: MAIN
CVS Tags: CRAB_2_9_1, CRAB_2_9_1_pre2, CRAB_2_9_1_pre1, CRAB_2_9_0, CRAB_2_9_0_pre2, CRAB_2_9_0_pre1, CRAB_2_8_8, CRAB_2_8_8_pre1, CRAB_2_8_7_patch3, CRAB_2_8_7_patch2, CRAB_2_8_7_patch1, CRAB_2_8_7, CRAB_2_8_7_pre2, CRAB_2_8_7_pre1, CRAB_2_8_6, CRAB_2_8_6_pre1, CRAB_2_8_5_patch3, CRAB_2_8_5_patch2, CRAB_2_8_5_patch1, CRAB_2_8_5, CRAB_2_8_5_pre5, CRAB_2_8_5_pre4, CRAB_2_8_5_pre3, CRAB_2_8_4_patch3, CRAB_2_8_5_pre2, CRAB_2_8_4_patch2, CRAB_2_8_5_pre1, CRAB_2_8_4_patch1, CRAB_2_8_4, CRAB_2_8_4_pre5, CRAB_2_8_4_pre4, CRAB_2_8_4_pre3, CRAB_2_8_4_pre2, CRAB_2_8_4_pre1, CRAB_2_8_3, CRAB_2_8_3_pre4, CRAB_2_8_3_pre3, CRAB_2_8_3_pre2, CRAB_2_8_3_pre1, CRAB_2_8_2_patch1, CRAB_2_8_2, CRAB_2_8_2_pre5, CRAB_2_8_2_pre4, CRAB_2_8_2_pre3, CRAB_2_8_2_pre2, CRAB_2_8_2_pre1, CRAB_2_8_1, CRAB_2_8_0, CRAB_2_8_0_pre1, CRAB_2_7_10_pre3, CRAB_2_7_9_patch2_pre1, CRAB_2_7_10_pre2, CRAB_2_7_10_pre1, CRAB_2_7_9_patch1, CRAB_2_7_9, CRAB_2_7_9_pre5, CRAB_2_7_9_pre4, CRAB_2_7_9_pre3, CRAB_2_7_9_pre2, CRAB_2_7_8_patch2, CRAB_2_7_9_pre1, CRAB_2_7_8_patch2_pre1, CRAB_2_7_8_patch1, CRAB_2_7_8_patch1_pre1, CRAB_2_7_8, CRAB_2_7_8_pre3, CRAB_2_7_8_pre2, CRAB_2_7_8_dash3, CRAB_2_7_8_dash2, CRAB_2_7_8_dash, CRAB_2_7_7_patch1, CRAB_2_7_7_patch1_pre1, CRAB_2_7_8_pre1, CRAB_2_7_7, CRAB_2_7_7_pre2, CRAB_2_7_7_pre1, CRAB_2_7_6_patch1, CRAB_2_7_6, CRAB_2_7_6_pre1, CRAB_2_7_5_patch1, CRAB_2_7_5, HEAD
Changes since 1.38: +2 -1 lines
Error occurred while calculating annotation data.
Log Message:
Don't set skipEvents for EmptySource

File Contents

# Content
1 #!/usr/bin/env python
2
3 import os
4 import common
5 import imp
6 import pickle
7
8 from crab_util import *
9 from crab_exceptions import *
10
11 from ProdCommon.CMSConfigTools.ConfigAPI.CfgInterface import CfgInterface
12 # FIXME: Cleanup includes from FWCore. Most of this is not needed.
13 #from FWCore.ParameterSet.Config import include
14 from FWCore.ParameterSet.DictTypes import SortedKeysDict
15 from FWCore.ParameterSet.Modules import OutputModule
16 from FWCore.ParameterSet.Modules import Service
17 from FWCore.ParameterSet.Types import *
18
19 import FWCore.ParameterSet.Types as CfgTypes
20 import FWCore.ParameterSet.Modules as CfgModules
21 import FWCore.ParameterSet.Config as cms
22
23 class PsetManipulator:
24 def __init__(self, pset):
25 """
26 Read in Pset object and initialize
27 """
28
29 self.pset = pset
30
31 common.logger.debug("PsetManipulator::__init__: PSet file = "+self.pset)
32 handle = open(self.pset, 'r')
33 try: # Nested form for Python < 2.5
34 try:
35 self.cfo = imp.load_source("pycfg", self.pset, handle)
36 self.cmsProcess = self.cfo.process
37 except Exception, ex:
38 msg = "Your config file is not valid python: %s" % str(ex)
39 raise CrabException(msg)
40 finally:
41 handle.close()
42
43 self.cfg = CfgInterface(self.cmsProcess)
44 try: # Quiet the output
45 if self.cfg.data.MessageLogger.cerr.FwkReport.reportEvery.value() < 100:
46 self.cfg.data.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(100)
47 except AttributeError:
48 pass
49
50 def maxEvent(self, maxEv):
51 """
52 Set max event in the standalone untracked module
53 """
54 self.cfg.maxEvents.setMaxEventsInput(maxEv)
55 return
56
57 def skipEvent(self, skipEv):
58 """
59 Set max event in the standalone untracked module
60 """
61 if self.cfg.inputSource.sourceType not in ['EmptySource']:
62 self.cfg.inputSource.setSkipEvents(skipEv)
63 return
64
65 def psetWriter(self, name):
66 """
67 Write out modified CMSSW.py
68 """
69
70 pklFileName = common.work_space.jobDir() + name + ".pkl"
71 pklFile = open(pklFileName, "wb")
72 myPickle = pickle.Pickler(pklFile)
73 myPickle.dump(self.cmsProcess)
74 pklFile.close()
75
76 outFile = open(common.work_space.jobDir()+name, "w")
77 outFile.write("import FWCore.ParameterSet.Config as cms\n")
78 outFile.write("import pickle\n")
79 outFile.write("process = pickle.load(open('%s', 'rb'))\n" % (name + ".pkl"))
80 outFile.close()
81
82
83 return
84
85 def getTFileService(self):
86 """ Get Output filename from TFileService and return it. If not existing, return None """
87 if not self.cfg.data.services.has_key('TFileService'):
88 return None
89 tFileService = self.cfg.data.services['TFileService']
90 if "fileName" in tFileService.parameterNames_():
91 fileName = getattr(tFileService,'fileName',None).value()
92 return fileName
93 return None
94
95 def getPoolOutputModule(self):
96 """ Get Output filename from PoolOutputModule and return it. If not existing, return None """
97 outputFinder = PoolOutputFinder()
98 for p in self.cfg.data.endpaths.itervalues():
99 p.visit(outputFinder)
100 return outputFinder.getDict()
101 #return outputFinder.getList()
102
103 def getBadFilesSetting(self):
104 setting = False
105 try:
106 if self.cfg.data.source.skipBadFiles.value():
107 setting = True
108 except AttributeError:
109 pass # Either no source or no setting of skipBadFiles
110 return setting
111
112 class PoolOutputFinder(object):
113
114 def __init__(self):
115 self._poolList = []
116 self._poolDict = {}
117
118 def enter(self,visitee):
119 if isinstance(visitee,OutputModule) and visitee.type_() == "PoolOutputModule":
120 filename=visitee.fileName.value().split(":")[-1]
121 self._poolList.append(filename)
122
123 try:
124 selectEvents = visitee.SelectEvents.SelectEvents.value()
125 except AttributeError:
126 selectEvents = None
127 try:
128 dataset = visitee.dataset.filterName.value()
129 except AttributeError:
130 dataset = None
131 self._poolDict.update({filename:{'dataset':dataset, 'selectEvents':selectEvents}})
132
133 def leave(self,visitee):
134 pass
135
136 def getList(self):
137 return self._poolList
138
139 def getDict(self):
140 #### FEDE FOR MULTI ####
141 return self._poolDict