CMS 3D CMS Logo

AlCa.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 """
3 _AlCa_
4 
5 Scenario supporting proton collisions
6 
7 """
8 
9 import os
10 import sys
11 
13 from Configuration.DataProcessing.Utils import stepALCAPRODUCER,dqmIOSource,harvestingMode,dictIO,gtNameAndConnect,addMonitoring
14 import FWCore.ParameterSet.Config as cms
15 
16 class AlCa(Scenario):
17  def __init__(self):
18  Scenario.__init__(self)
19 
20  """
21  _AlCa_
22 
23  Implement configuration building for data processing for proton
24  collision data taking
25 
26  """
27 
28  def skimsIfNotGiven(self,args,sl):
29  if not 'skims' in args:
30  args['skims']=sl
31 
32  def promptReco(self, globalTag, **args):
33  if not 'skims' in args:
34  args['skims']=self.skims
35  step = stepALCAPRODUCER(args['skims'])
36  options = Options()
37  options.__dict__.update(defaultOptions.__dict__)
38  options.scenario = "pp"
39  options.step = step
40  dictIO(options,args)
41  options.conditions = gtNameAndConnect(globalTag, args)
42 
43  process = cms.Process('RECO', self.eras)
44  cb = ConfigBuilder(options, process = process, with_output = True)
45 
46  # Input source
47  process.source = cms.Source("PoolSource",
48  fileNames = cms.untracked.vstring()
49  )
50  cb.prepare()
51 
52  return process
53 
54  def alcaSkim(self, skims, **args):
55  """
56  _alcaSkim_
57 
58  AlcaReco processing & skims for proton collisions
59 
60  """
61  step = ""
62  pclWflws = [x for x in skims if "PromptCalibProd" in x]
63  skims = filter(lambda x: x not in pclWflws, skims)
64 
65  if len(pclWflws):
66  step += 'ALCA:'+('+'.join(pclWflws))
67 
68  if len(skims) > 0:
69  if step != "":
70  step += ","
71  step += "ALCAOUTPUT:"+('+'.join(skims))
72 
73  options = Options()
74  options.__dict__.update(defaultOptions.__dict__)
75  options.scenario = "pp"
76  options.step = step
77  options.conditions = args['globaltag'] if 'globaltag' in args else 'None'
78  if 'globalTagConnect' in args and args['globalTagConnect'] != '':
79  options.conditions += ','+args['globalTagConnect']
80 
81  options.triggerResultsProcess = 'RECO'
82 
83  process = cms.Process('ALCA', self.eras)
84  cb = ConfigBuilder(options, process=process)
85 
86  # Input source
87  process.source = cms.Source(
88  "PoolSource",
89  fileNames=cms.untracked.vstring()
90  )
91 
92  cb.prepare()
93 
94  # FIXME: dirty hack..any way around this?
95  # Tier0 needs the dataset used for ALCAHARVEST step to be a different data-tier
96  for wfl in pclWflws:
97  methodToCall = getattr(process, 'ALCARECOStream'+wfl)
98  methodToCall.dataset.dataTier = cms.untracked.string('ALCAPROMPT')
99 
100  return process
101 
102 
103  def dqmHarvesting(self, datasetName, runNumber, globalTag, **args):
104  """
105  _dqmHarvesting_
106 
107  Proton collisions data taking DQM Harvesting
108 
109  """
110  options = defaultOptions
111  options.scenario = "pp"
112  options.step = "HARVESTING:alcaHarvesting"
113  options.name = "EDMtoMEConvert"
114  options.conditions = gtNameAndConnect(globalTag, args)
115 
116  process = cms.Process("HARVESTING", self.eras)
117  process.source = dqmIOSource(args)
118  configBuilder = ConfigBuilder(options, process = process)
119  configBuilder.prepare()
120 
121  #
122  # customise process for particular job
123  #
124  #process.source.processingMode = cms.untracked.string('RunsAndLumis')
125  #process.source.fileNames = cms.untracked(cms.vstring())
126  #process.maxEvents.input = -1
127  #process.dqmSaver.workflow = datasetName
128  #process.dqmSaver.saveByLumiSection = 1
129  #if args.has_key('referenceFile') and args.get('referenceFile', ''):
130  # process.DQMStore.referenceFileName = \
131  # cms.untracked.string(args['referenceFile'])
132  harvestingMode(process,datasetName,args)
133 
134  return process
135 
136  def alcaHarvesting(self, globalTag, datasetName, **args):
137  """
138  _alcaHarvesting_
139 
140  Proton collisions data taking AlCa Harvesting
141 
142  """
143  skims = []
144  if 'skims' in args:
145  skims = args['skims']
146 
147 
148  if 'alcapromptdataset' in args:
149  skims.append('@'+args['alcapromptdataset'])
150 
151  if len(skims) == 0: return None
152  options = defaultOptions
153  options.scenario = self.cbSc if hasattr(self,'cbSc') else self.__class__.__name__
154  options.step = "ALCAHARVEST:"+('+'.join(skims))
155  options.name = "ALCAHARVEST"
156  options.conditions = gtNameAndConnect(globalTag, args)
157 
158  process = cms.Process("ALCAHARVEST", self.eras)
159  process.source = cms.Source("PoolSource")
160 
161  if 'customs' in args:
162  options.customisation_file=args['customs']
163 
164  configBuilder = ConfigBuilder(options, process = process)
165  configBuilder.prepare()
166 
167  #
168  # customise process for particular job
169  #
170  process.source.processingMode = cms.untracked.string('RunsAndLumis')
171  process.source.fileNames = cms.untracked(cms.vstring())
172  process.maxEvents.input = -1
173  process.dqmSaver.workflow = datasetName
174 
175  return process
176 
177  def expressProcessing(self, globalTag, **args):
178  """
179  _expressProcessing_
180 
181  Proton collision data taking express processing
182 
183  """
184  skims = []
185  if 'skims' in args:
186  skims = args['skims']
187  pclWkflws = [x for x in skims if "PromptCalibProd" in x]
188  for wfl in pclWkflws:
189  skims.remove(wfl)
190 
191  options = Options()
192  options.__dict__.update(defaultOptions.__dict__)
193  options.scenario = "pp"
194  options.step = stepALCAPRODUCER(skims)
195 
196  if 'outputs' in args:
197  # the RAW data-tier needs a special treatment since the event-content as defined in release is not good enough
198  outputs_Raw = [x for x in args['outputs'] if x['dataTier'] == 'RAW']
199  outputs_noRaw = [x for x in args['outputs'] if x['dataTier'] != 'RAW']
200  if len(outputs_Raw) == 1:
201  print 'RAW data-tier requested'
202  options.outputDefinition = outputs_noRaw.__str__()
203 
204  # dictIO(options,args)
205  options.conditions = gtNameAndConnect(globalTag, args)
206 
207  options.filein = 'tobeoverwritten.xyz'
208  if 'inputSource' in args:
209  options.filetype = args['inputSource']
210  process = cms.Process('RECO', self.eras)
211 
212  if 'customs' in args:
213  options.customisation_file=args['customs']
214 
215  cb = ConfigBuilder(options, process = process, with_output = True, with_input = True)
216 
217  cb.prepare()
218 
219  addMonitoring(process)
220 
221  for output in outputs_Raw:
222  print output
223  moduleLabel = output['moduleLabel']
224  selectEvents = output.get('selectEvents', None)
225  maxSize = output.get('maxSize', None)
226 
227  outputModule = cms.OutputModule(
228  "PoolOutputModule",
229  fileName = cms.untracked.string("%s.root" % moduleLabel)
230  )
231 
232  outputModule.dataset = cms.untracked.PSet(dataTier = cms.untracked.string("RAW"))
233 
234  if maxSize != None:
235  outputModule.maxSize = cms.untracked.int32(maxSize)
236 
237  if selectEvents != None:
238  outputModule.SelectEvents = cms.untracked.PSet(
239  SelectEvents = cms.vstring(selectEvents)
240  )
241  outputModule.outputCommands = cms.untracked.vstring('drop *',
242  'keep *_*_*_HLT')
243 
244  setattr(process, moduleLabel, outputModule)
245  # outputModule=getattr(self.process,theModuleLabel)
246  setattr(process, moduleLabel+'_step', cms.EndPath(outputModule))
247  path = getattr(process, moduleLabel+'_step')
248  process.schedule.append(path)
249 
250  return process
def harvestingMode(process, datasetName, args, rANDl=True)
Definition: Utils.py:114
def expressProcessing(self, globalTag, args)
Definition: AlCa.py:177
def gtNameAndConnect(globalTag, args)
Definition: Utils.py:137
def dqmHarvesting(self, datasetName, runNumber, globalTag, args)
Definition: AlCa.py:103
def dictIO(options, args)
Definition: Utils.py:123
def skimsIfNotGiven(self, args, sl)
Definition: AlCa.py:28
def promptReco(self, globalTag, args)
Definition: AlCa.py:32
def addMonitoring(process)
Definition: Utils.py:38
def alcaSkim(self, skims, args)
Definition: AlCa.py:54
def stepALCAPRODUCER(skims)
Definition: Utils.py:9
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def __init__(self)
Definition: AlCa.py:17
def alcaHarvesting(self, globalTag, datasetName, args)
Definition: AlCa.py:136
def dqmIOSource(args)
Definition: Utils.py:103