CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
muonCustomsPreMixing.py
Go to the documentation of this file.
2 
3 
4 def unganged_me1a_geometry(process):
5  """Customise digi/reco geometry to use unganged ME1/a channels
6  """
7  process.CSCGeometryESModule.useGangedStripsInME1a = False
8  process.idealForDigiCSCGeometry.useGangedStripsInME1a = False
9  return process
10 
11 
13  """CSC digitizer customization
14  with bunchTimingOffsets tuned to center trigger stubs at bx6
15  when pretrigger with 3 layers and median stub timing are used
16  """
17  ## Make sure there's no bad chambers/channels
18  #process.simMuonCSCDigis.strips.readBadChambers = True
19  #process.simMuonCSCDigis.wires.readBadChannels = True
20  #process.simMuonCSCDigis.digitizeBadChambers = True
21 
22  ## Customised timing offsets so that ALCTs and CLCTs times are centered in signal BX.
23  ## These offsets below were tuned for the case of 3 layer pretriggering
24  ## and median stub timing algorithm.
25  process.simMuonCSCDigis.strips.bunchTimingOffsets = cms.vdouble(0.0,
26  37.53, 37.66, 55.4, 48.2, 54.45, 53.78, 53.38, 54.12, 51.98, 51.28)
27  process.simMuonCSCDigis.wires.bunchTimingOffsets = cms.vdouble(0.0,
28  22.88, 22.55, 29.28, 30.0, 30.0, 30.5, 31.0, 29.5, 29.1, 29.88)
29 
30  return process
31 
32 
34  """ Pick up upgrade condions data directly from DB tags using ESPrefer's.
35  Might be useful when dealing with a global tag that doesn't include
36  'unganged' CSC conditions.
37  """
38  myconds = [
39  ('CSCDBGainsRcd', 'CSCDBGains_ungangedME11A_mc'),
40  ('CSCDBNoiseMatrixRcd', 'CSCDBNoiseMatrix_ungangedME11A_mc'),
41  ('CSCDBCrosstalkRcd', 'CSCDBCrosstalk_ungangedME11A_mc'),
42  ('CSCDBPedestalsRcd', 'CSCDBPedestals_ungangedME11A_mc'),
43  ('CSCDBGasGainCorrectionRcd', 'CSCDBGasGainCorrection_ungangedME11A_mc'),
44  ('CSCDBChipSpeedCorrectionRcd', 'CSCDBChipSpeedCorrection_ungangedME11A_mc')
45  ]
46 
48  for (classname, tag) in myconds:
49  print classname, tag
50  sourcename = 'unganged_' + classname
51  process.__setattr__(sourcename, cscConditions.clone())
52  process.__getattribute__(sourcename).toGet = cms.VPSet( cms.PSet( record = cms.string(classname), tag = cms.string(tag)) )
53  process.__getattribute__(sourcename).connect = cms.string('frontier://FrontierProd/CMS_COND_CSC_000')
54  process.__setattr__('esp_' + classname, cms.ESPrefer("PoolDBESSource", sourcename) )
55 
56  del cscConditions
57 
58  return process
59 
60 
62  """Settings for the upgrade raw vs offline condition channel translation
63  """
64  process.CSCIndexerESProducer.AlgoName=cms.string("CSCIndexerPostls1")
65  process.CSCChannelMapperESProducer.AlgoName=cms.string("CSCChannelMapperPostls1")
66  return process
67 
68 
69 def remove_from_all_paths(process, module_name):
70  """Remove process.module_name from all the paths in process:
71  """
72 
73  # trivial case first:
74  if not hasattr(process, module_name):
75  return process
76 
77  # walk over all the paths:
78  for path_name in process._Process__paths.keys():
79  the_path = getattr(process, path_name)
80  module_names = the_path.moduleNames()
81  if module_name in module_names:
82  the_path.remove(getattr(process, module_name))
83  return process
84 
85 
87  """A sanity check to make sure that standard cmsDriver paths
88  have modules with expected names. If some paths would not have
89  expected modules, the procedure would only print WARNINGs.
90  """
91  # list of (pathName, expected moduleName) tuples:
92  paths_modules = [
93  ('digitisation_step', 'simMuonCSCDigis'),
94  ('L1simulation_step', 'simCscTriggerPrimitiveDigis'),
95  ('L1simulation_step', 'simCsctfTrackDigis'),
96  ('raw2digi_step', 'muonCSCDigis'),
97  ('raw2digi_step', 'csctfDigis'),
98  ('digi2raw_step', 'cscpacker'),
99  ('digi2raw_step', 'csctfpacker'),
100  ('reconstruction', 'csc2DRecHits'),
101  ('dqmoffline_step', 'muonAnalyzer'),
102  #('dqmHarvesting', ''),
103  ('validation_step', 'relvalMuonBits')
104  ]
105  # verify:
106  for path_name, module_name in paths_modules:
107  if hasattr(process, path_name) and not hasattr(process, module_name):
108  print "WARNING: module %s is not in %s path!!!" % (module_name, path_name)
109  print " This path has the following modules:"
110  print " ", getattr(process, path_name).moduleNames(),"\n"
111 
112 
113 # ------------------------------------------------------------------
114 
116  """Customise digi/reco geometry to use unganged ME1/a channels
117  """
118  process = unganged_me1a_geometry(process)
119  return process
120 
121 
123  """Customise CSC digitization to use unganged ME1/a channels
124  """
125  process = customise_csc_Indexing(process)
126  process = digitizer_timing_pre3_median(process)
127  return process
128 
129 
131  """Configure the local CSC trigger stubs emulator with the upgrade
132  algorithm version that efficiently uses unganged ME1a
133  """
134 
135  process = customise_csc_Indexing(process)
136 
137  from L1Trigger.CSCTriggerPrimitives.cscTriggerPrimitiveDigisPostLS1_cfi import cscTriggerPrimitiveDigisPostLS1
138  process.simCscTriggerPrimitiveDigis = cscTriggerPrimitiveDigisPostLS1
139  process.simCscTriggerPrimitiveDigis.CSCComparatorDigiProducer = cms.InputTag( 'mixData', 'MuonCSCComparatorDigisDM')
140  process.simCscTriggerPrimitiveDigis.CSCWireDigiProducer = cms.InputTag( 'mixData', 'MuonCSCWireDigisDM')
141 
142  return process
143 
144 
146  """Regular CSCTF configuration adapted to deal with unganged ME1a
147  """
148 
149  from L1Trigger.CSCTrackFinder.csctfTrackDigisUngangedME1a_cfi import csctfTrackDigisUngangedME1a
150  process.simCsctfTrackDigis = csctfTrackDigisUngangedME1a
151  process.simCsctfTrackDigis.DTproducer = cms.untracked.InputTag("simDtTriggerPrimitiveDigis")
152  process.simCsctfTrackDigis.SectorReceiverInput = cms.untracked.InputTag("simCscTriggerPrimitiveDigis", "MPCSORTED")
153 
154  return process
155 
156 
158  """Customise both stubs and TF emulators
159  """
160  process = customise_csc_L1Stubs_sim(process)
161  process = customise_csc_L1TrackFinder_sim(process)
162  return process
163 
164 
165 def customise_csc_Packer(process):
166  """Use 2013 a.k.a. post-LS1 version
167  """
168  process.cscpacker.useFormatVersion = cms.uint32(2013)
169  process.cscpacker.usePreTriggers = cms.bool(False)
170  process.cscpacker.packEverything = cms.bool(True)
171  return process
172 
173 
175  """Do nothing at the moment
176  """
177  return process
178 
179 
181  """Adjust L1Extra producer's input tags for the use case
182  when we want to run L1Extra without packing-unpacking first
183  """
184  l1ep = process.l1extraParticles
185  #l1ep.centralBxOnly = cms.bool(True)
186  #l1ep.produceMuonParticles = cms.bool(True)
187  #l1ep.produceCaloParticles = cms.bool(False)
188  #l1ep.ignoreHtMiss = cms.bool(False)
189  l1ep.muonSource = cms.InputTag('simGmtDigis')
190  l1ep.etTotalSource = cms.InputTag('simGctDigis')
191  l1ep.nonIsolatedEmSource = cms.InputTag('simGctDigis', 'nonIsoEm')
192  l1ep.etMissSource = cms.InputTag('simGctDigis')
193  l1ep.forwardJetSource = cms.InputTag('simGctDigis', 'forJets')
194  l1ep.centralJetSource = cms.InputTag('simGctDigis', 'cenJets')
195  l1ep.tauJetSource = cms.InputTag('simGctDigis', 'tauJets')
196  l1ep.isolatedEmSource = cms.InputTag('simGctDigis', 'isoEm')
197  l1ep.etHadSource = cms.InputTag('simGctDigis')
198  l1ep.htMissSource = cms.InputTag("simGctDigis")
199  l1ep.hfRingEtSumsSource = cms.InputTag("simGctDigis")
200  l1ep.hfRingBitCountsSource = cms.InputTag("simGctDigis")
201  return process
202 
203 
205  """Configure the CSC rechit producer
206  to handle unganged ME1a for upgrade studies
207  """
208  #
209  process = customise_csc_Indexing(process)
210 
211  # Turn off some flags for CSCRecHitD that are turned ON in default config
212  process.csc2DRecHits.readBadChannels = cms.bool(False)
213  process.csc2DRecHits.CSCUseGasGainCorrections = cms.bool(False)
214 
215  # Switch input for CSCRecHitD to s i m u l a t e d (and Mixed!) digis
216  process.csc2DRecHits.wireDigiTag = cms.InputTag("mixData", "MuonCSCWireDigisDM")
217  process.csc2DRecHits.stripDigiTag = cms.InputTag("mixData", "MuonCSCStripDigisDM")
218 
219  return process
220 
221 
222 def customise_csc_DQM(process):
223  """Runs after RAW2DIGI, so, should use defaults
224  """
225  return process
226 
227 
229  """Nothing for now
230  """
231  return process
232 
233 
235  """Full set of the CSC PostLS1 related customizations.
236  It's tied to specific expected module names.
237  Therefore, a sanity check is done first to make sure that
238  standard cmsDriver paths have modules with such expected names.
239  """
240 
241  # a simple sanity check first
243 
244  # use unganged geometry
245  process = customise_csc_Geometry(process)
246 
247  # digitizer
248  if hasattr(process, 'simMuonCSCDigis'):
249  process = customise_csc_Digitizer(process)
250 
251  # L1 stub emulator upgrade algorithm
252  if hasattr(process, 'simCscTriggerPrimitiveDigis'):
253  process = customise_csc_L1Stubs_sim(process)
254 
255  # CSCTF that can deal with unganged ME1a
256  if hasattr(process, 'simCsctfTrackDigis'):
257  process = customise_csc_L1TrackFinder_sim(process)
258 
259  # packer - simply get rid of it
260  if hasattr(process, 'cscpacker') or hasattr(process, 'csctfpacker'):
261  process = customise_csc_Packer(process)
262 
263  # unpacker - simply get rid of it
264  if hasattr(process, 'muonCSCDigis') or hasattr(process, 'csctfDigis'):
265  process = customise_csc_Unpacker(process)
266 
267  # CSC RecHiti producer adjustments
268  if hasattr(process, 'csc2DRecHits'):
269  process = customise_csc_LocalReco(process)
270 
271  # DQM
272  if hasattr(process, 'cscMonitor'):
273  process = customise_csc_DQM(process)
274 
275  # Validation
276  if hasattr(process, 'relvalMuonBits'):
277  process = customise_csc_Validation(process)
278 
279  return process
280 
281 def customise_csc_hlt(process):
282 
283  process.CSCGeometryESModule.useGangedStripsInME1a = False
284 
285  process.hltCsc2DRecHits.readBadChannels = cms.bool(False)
286 
287  process.hltCsc2DRecHits.CSCUseGasGainCorrections = cms.bool(False)
288 
289  process = customise_csc_Indexing(process)
290 
291  # Switch input for CSCRecHitD to s i m u l a t e d (and Mixed!) digis
292 
293  process.hltCsc2DRecHits.wireDigiTag = cms.InputTag("mixData","MuonCSCWireDigisDM")
294  process.hltCsc2DRecHits.stripDigiTag = cms.InputTag("mixData","MuonCSCStripDigisDM")
295 
296  return process