CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HeavyIons.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 """
3 _HeavyIons_
4 
5 Scenario supporting heavy-ion collisions
6 
7 """
8 
9 import os
10 import sys
11 
12 from Configuration.DataProcessing.Scenario import Scenario
13 from Configuration.DataProcessing.Utils import stepALCAPRODUCER
14 import FWCore.ParameterSet.Config as cms
15 from Configuration.PyReleaseValidation.ConfigBuilder import ConfigBuilder
16 from Configuration.PyReleaseValidation.ConfigBuilder import Options
17 from Configuration.PyReleaseValidation.ConfigBuilder import defaultOptions
18 from Configuration.PyReleaseValidation.ConfigBuilder import installFilteredStream
19 from Configuration.PyReleaseValidation.ConfigBuilder import addOutputModule
20 from Configuration.DataProcessing.RecoTLR import customisePromptHI,customiseExpressHI
21 
23  """
24  _HeavyIons_
25 
26  Implement configuration building for data processing for
27  heavy-ion collision data taking
28 
29  """
30 
31 
32  def promptReco(self, globalTag, writeTiers = ['RECO'], **args):
33  """
34  _promptReco_
35 
36  Heavy-ion collision data taking prompt reco
37 
38  """
39 
40  skims = ['SiStripCalZeroBias',
41  'SiStripCalMinBias',
42  'TkAlMinBiasHI',
43  'HcalCalMinBias']
44  step = stepALCAPRODUCER(skims)
45  options = Options()
46  options.__dict__.update(defaultOptions.__dict__)
47  options.scenario = "HeavyIons"
48  options.step = 'RAW2DIGI,L1Reco,RECO'+step+',L1HwVal,DQM,ENDJOB'
49  options.isMC = False
50  options.isData = True
51  options.beamspot = None
52  options.eventcontent = None
53  options.magField = 'AutoFromDBCurrent'
54  options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
55  options.relval = False
56 
57  process = cms.Process('RECO')
58  cb = ConfigBuilder(options, process = process)
59 
60  # Input source
61  process.source = cms.Source("PoolSource",
62  fileNames = cms.untracked.vstring()
63  )
64  cb.prepare()
65 
66  for tier in writeTiers:
67  addOutputModule(process, tier, tier)
68 
69  #add the former top level patches here
70  customisePromptHI(process)
71 
72  return process
73 
74 
75  def expressProcessing(self, globalTag, writeTiers = [], **args):
76  """
77  _expressProcessing_
78 
79  Heavy-ion collision data taking express processing
80 
81  """
82 
83  skims = ['SiStripCalZeroBias',
84  'TkAlMinBiasHI']
85  step = stepALCAPRODUCER(skims)
86  options = Options()
87  options.__dict__.update(defaultOptions.__dict__)
88  options.scenario = "HeavyIons"
89  options.step = 'RAW2DIGI,L1Reco,RECO'+step+',L1HwVal,DQM,ENDJOB'
90  options.isMC = False
91  options.isData = True
92  options.beamspot = None
93  options.eventcontent = None
94  options.magField = 'AutoFromDBCurrent'
95  options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
96  options.relval = False
97 
98  process = cms.Process('RECO')
99  cb = ConfigBuilder(options, process = process)
100 
101  # Input source
102  process.source = cms.Source("NewEventStreamFileReader",
103  fileNames = cms.untracked.vstring()
104  )
105  cb.prepare()
106 
107  for tier in writeTiers:
108  addOutputModule(process, tier, tier)
109 
110  #add the former top level patches here
111  customiseExpressHI(process)
112 
113  return process
114 
115 
116  def alcaSkim(self, skims, **args):
117  """
118  _alcaSkim_
119 
120  AlcaReco processing & skims for heavy-ion collisions
121 
122  """
123 
124  globalTag = None
125  if 'globaltag' in args:
126  globalTag = args['globaltag']
127 
128  step = ""
129  if 'PromptCalibProd' in skims:
130  step = "ALCA:PromptCalibProd"
131  skims.remove('PromptCalibProd')
132 
133  if len( skims ) > 0:
134  if step != "":
135  step += ","
136  step += "ALCAOUTPUT:"
137 
138  for skim in skims:
139  step += (skim+"+")
140  options = Options()
141  options.__dict__.update(defaultOptions.__dict__)
142  options.scenario = "HeavyIons"
143  options.step = step.rstrip('+')
144  options.isMC = False
145  options.isData = True
146  options.beamspot = None
147  options.eventcontent = None
148  options.relval = None
149  if globalTag != None :
150  options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
151  options.triggerResultsProcess = 'RECO'
152 
153  process = cms.Process('ALCA')
154  cb = ConfigBuilder(options, process = process)
155 
156  # Input source
157  process.source = cms.Source(
158  "PoolSource",
159  fileNames = cms.untracked.vstring()
160  )
161 
162  cb.prepare()
163 
164  # FIXME: dirty hack..any way around this?
165  # Tier0 needs the dataset used for ALCAHARVEST step to be a different data-tier
166  if 'PromptCalibProd' in step:
167  process.ALCARECOStreamPromptCalibProd.dataset.dataTier = cms.untracked.string('ALCAPROMPT')
168 
169  return process
170 
171 
172  def dqmHarvesting(self, datasetName, runNumber, globalTag, **args):
173  """
174  _dqmHarvesting_
175 
176  Heavy-ion collisions data taking DQM Harvesting
177 
178  """
179  options = defaultOptions
180  options.scenario = "HeavyIons"
181  options.step = "HARVESTING:dqmHarvesting"
182  options.isMC = False
183  options.isData = True
184  options.beamspot = None
185  options.eventcontent = None
186  options.name = "EDMtoMEConvert"
187  options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
188  options.arguments = ""
189  options.evt_type = ""
190  options.filein = []
191 
192  process = cms.Process("HARVESTING")
193  process.source = cms.Source("PoolSource")
194  configBuilder = ConfigBuilder(options, process = process)
195  configBuilder.prepare()
196 
197  #
198  # customise process for particular job
199  #
200  process.source.processingMode = cms.untracked.string('RunsAndLumis')
201  process.source.fileNames = cms.untracked(cms.vstring())
202  process.maxEvents.input = -1
203  process.dqmSaver.workflow = datasetName
204  process.dqmSaver.saveByLumiSection = 1
205  if args.has_key('referenceFile') and args.get('referenceFile', ''):
206  process.DQMStore.referenceFileName = \
207  cms.untracked.string(args['referenceFile'])
208 
209  return process
210 
211 
212  def alcaHarvesting(self, globalTag, **args):
213  """
214  _alcaHarvesting_
215 
216  Heavy-ion collisions data taking AlCa Harvesting
217 
218  """
219  options = defaultOptions
220  options.scenario = "HeavyIons"
221  options.step = "ALCAHARVEST:BeamSpotByRun+BeamSpotByLumi+SiStripQuality"
222  options.isMC = False
223  options.isData = True
224  options.beamspot = None
225  options.eventcontent = None
226  options.name = "ALCAHARVEST"
227  options.conditions = globalTag
228  options.arguments = ""
229  options.evt_type = ""
230  options.filein = []
231 
232  process = cms.Process("ALCAHARVEST")
233  process.source = cms.Source("PoolSource")
234  configBuilder = ConfigBuilder(options, process = process)
235  configBuilder.prepare()
236 
237  #
238  # customise process for particular job
239  #
240  process.source.processingMode = cms.untracked.string('RunsAndLumis')
241  process.source.fileNames = cms.untracked(cms.vstring())
242  process.maxEvents.input = -1
243  process.dqmSaver.workflow = datasetName
244 
245  return process
246 
def customisePromptHI
Definition: RecoTLR.py:84
def stepALCAPRODUCER
Definition: Utils.py:9
def customiseExpressHI
Definition: RecoTLR.py:79