00001
00002 """
00003 _HeavyIons_
00004
00005 Scenario supporting heavy-ion collisions
00006
00007 """
00008
00009 import os
00010 import sys
00011
00012 from Configuration.DataProcessing.Scenario import Scenario
00013 from Configuration.DataProcessing.Utils import stepALCAPRODUCER
00014 import FWCore.ParameterSet.Config as cms
00015 from Configuration.PyReleaseValidation.ConfigBuilder import ConfigBuilder
00016 from Configuration.PyReleaseValidation.ConfigBuilder import Options
00017 from Configuration.PyReleaseValidation.ConfigBuilder import defaultOptions
00018 from Configuration.PyReleaseValidation.ConfigBuilder import installFilteredStream
00019 from Configuration.PyReleaseValidation.ConfigBuilder import addOutputModule
00020 from Configuration.DataProcessing.RecoTLR import customisePromptHI,customiseExpressHI
00021
00022 class HeavyIons(Scenario):
00023 """
00024 _HeavyIons_
00025
00026 Implement configuration building for data processing for
00027 heavy-ion collision data taking
00028
00029 """
00030
00031
00032 def promptReco(self, globalTag, writeTiers = ['RECO'], **args):
00033 """
00034 _promptReco_
00035
00036 Heavy-ion collision data taking prompt reco
00037
00038 """
00039
00040 skims = ['SiStripCalZeroBias',
00041 'SiStripCalMinBias',
00042 'TkAlMinBiasHI',
00043 'HcalCalMinBias']
00044 step = stepALCAPRODUCER(skims)
00045 options = Options()
00046 options.__dict__.update(defaultOptions.__dict__)
00047 options.scenario = "HeavyIons"
00048 options.step = 'RAW2DIGI,L1Reco,RECO'+step+',L1HwVal,DQM,ENDJOB'
00049 options.isMC = False
00050 options.isData = True
00051 options.beamspot = None
00052 options.eventcontent = None
00053 options.magField = 'AutoFromDBCurrent'
00054 options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
00055 options.relval = False
00056
00057 process = cms.Process('RECO')
00058 cb = ConfigBuilder(options, process = process)
00059
00060
00061 process.source = cms.Source("PoolSource",
00062 fileNames = cms.untracked.vstring()
00063 )
00064 cb.prepare()
00065
00066 for tier in writeTiers:
00067 addOutputModule(process, tier, tier)
00068
00069
00070 customisePromptHI(process)
00071
00072 return process
00073
00074
00075 def expressProcessing(self, globalTag, writeTiers = [], **args):
00076 """
00077 _expressProcessing_
00078
00079 Heavy-ion collision data taking express processing
00080
00081 """
00082
00083 skims = ['SiStripCalZeroBias',
00084 'TkAlMinBiasHI']
00085 step = stepALCAPRODUCER(skims)
00086 options = Options()
00087 options.__dict__.update(defaultOptions.__dict__)
00088 options.scenario = "HeavyIons"
00089 options.step = 'RAW2DIGI,L1Reco,RECO'+step+',L1HwVal,DQM,ENDJOB'
00090 options.isMC = False
00091 options.isData = True
00092 options.beamspot = None
00093 options.eventcontent = None
00094 options.magField = 'AutoFromDBCurrent'
00095 options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
00096 options.relval = False
00097
00098 process = cms.Process('RECO')
00099 cb = ConfigBuilder(options, process = process)
00100
00101
00102 process.source = cms.Source("NewEventStreamFileReader",
00103 fileNames = cms.untracked.vstring()
00104 )
00105 cb.prepare()
00106
00107 for tier in writeTiers:
00108 addOutputModule(process, tier, tier)
00109
00110
00111 customiseExpressHI(process)
00112
00113 return process
00114
00115
00116 def alcaSkim(self, skims, **args):
00117 """
00118 _alcaSkim_
00119
00120 AlcaReco processing & skims for heavy-ion collisions
00121
00122 """
00123
00124 globalTag = None
00125 if 'globaltag' in args:
00126 globalTag = args['globaltag']
00127
00128 step = ""
00129 if 'PromptCalibProd' in skims:
00130 step = "ALCA:PromptCalibProd"
00131 skims.remove('PromptCalibProd')
00132
00133 if len( skims ) > 0:
00134 if step != "":
00135 step += ","
00136 step += "ALCAOUTPUT:"
00137
00138 for skim in skims:
00139 step += (skim+"+")
00140 options = Options()
00141 options.__dict__.update(defaultOptions.__dict__)
00142 options.scenario = "HeavyIons"
00143 options.step = step.rstrip('+')
00144 options.isMC = False
00145 options.isData = True
00146 options.beamspot = None
00147 options.eventcontent = None
00148 options.relval = None
00149 if globalTag != None :
00150 options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
00151 options.triggerResultsProcess = 'RECO'
00152
00153 process = cms.Process('ALCA')
00154 cb = ConfigBuilder(options, process = process)
00155
00156
00157 process.source = cms.Source(
00158 "PoolSource",
00159 fileNames = cms.untracked.vstring()
00160 )
00161
00162 cb.prepare()
00163
00164
00165
00166 if 'PromptCalibProd' in step:
00167 process.ALCARECOStreamPromptCalibProd.dataset.dataTier = cms.untracked.string('ALCAPROMPT')
00168
00169 return process
00170
00171
00172 def dqmHarvesting(self, datasetName, runNumber, globalTag, **args):
00173 """
00174 _dqmHarvesting_
00175
00176 Heavy-ion collisions data taking DQM Harvesting
00177
00178 """
00179 options = defaultOptions
00180 options.scenario = "HeavyIons"
00181 options.step = "HARVESTING:dqmHarvesting"
00182 options.isMC = False
00183 options.isData = True
00184 options.beamspot = None
00185 options.eventcontent = None
00186 options.name = "EDMtoMEConvert"
00187 options.conditions = "FrontierConditions_GlobalTag,%s" % globalTag
00188 options.arguments = ""
00189 options.evt_type = ""
00190 options.filein = []
00191
00192 process = cms.Process("HARVESTING")
00193 process.source = cms.Source("PoolSource")
00194 configBuilder = ConfigBuilder(options, process = process)
00195 configBuilder.prepare()
00196
00197
00198
00199
00200 process.source.processingMode = cms.untracked.string('RunsAndLumis')
00201 process.source.fileNames = cms.untracked(cms.vstring())
00202 process.maxEvents.input = -1
00203 process.dqmSaver.workflow = datasetName
00204 process.dqmSaver.saveByLumiSection = 1
00205 if args.has_key('referenceFile') and args.get('referenceFile', ''):
00206 process.DQMStore.referenceFileName = \
00207 cms.untracked.string(args['referenceFile'])
00208
00209 return process
00210
00211
00212 def alcaHarvesting(self, globalTag, **args):
00213 """
00214 _alcaHarvesting_
00215
00216 Heavy-ion collisions data taking AlCa Harvesting
00217
00218 """
00219 options = defaultOptions
00220 options.scenario = "HeavyIons"
00221 options.step = "ALCAHARVEST:BeamSpotByRun+BeamSpotByLumi+SiStripQuality"
00222 options.isMC = False
00223 options.isData = True
00224 options.beamspot = None
00225 options.eventcontent = None
00226 options.name = "ALCAHARVEST"
00227 options.conditions = globalTag
00228 options.arguments = ""
00229 options.evt_type = ""
00230 options.filein = []
00231
00232 process = cms.Process("ALCAHARVEST")
00233 process.source = cms.Source("PoolSource")
00234 configBuilder = ConfigBuilder(options, process = process)
00235 configBuilder.prepare()
00236
00237
00238
00239
00240 process.source.processingMode = cms.untracked.string('RunsAndLumis')
00241 process.source.fileNames = cms.untracked(cms.vstring())
00242 process.maxEvents.input = -1
00243 process.dqmSaver.workflow = datasetName
00244
00245 return process
00246