CMS 3D CMS Logo

customisers.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 
4 ### Various set of customise functions needed for embedding
5 from __future__ import print_function
6 import FWCore.ParameterSet.Config as cms
7 from FWCore.ParameterSet.Utilities import cleanUnscheduled
8 
9 import six
10 
11 ################################ Customizer for skimming ###########################
12 ### There are four different parts.
13 ##First step is the SELECT (former SKIM) part, where we identfy the events which are good for Embedding. Need to store RAWRECO [RAW is needed for the MERG and RECO for the CLEAN step]
14 ##Second step is the CLEAN input are PAT muons with RECO information. After this step only RAW plus some special collections needed for the MERG step must be saved
15 ##Third step is the SIM. The input is the externalLHEProducer, which must be produced before (At the moment we do it parallel to the CLEAN step). Again only save RAW of the SELECT and only save what is need for the MERG step
16 ##Last step is the MERG step. Which is the usally reconstruction, where the input produces are replaced by merg producer, which mix the SIM and CLEAN inputs.
17 
18 ## Some comments on this approach. All steps runs the RECO sequence until the end in the moment. It would be possible to stop after the all inputs which are needed for the MERG step are generated (which happens at a very early state of the reconstruction. But with this approach we are able to get the RECO (and PAT aka miniAOD) of all four step SELECT (orginal event), SIM, CLEAN and MERGED. Therefor one only needs to SAVE the corresponding output (in cmsDriver change output to RAW -> RAW,RECO,PAT)
19 
20 ####################### Some basic functions ####################
21 ## Helper Class, which summerizes in which step which Producer (Cleaner Merger), should be loaded. It is also usefull to define which collection should be stored for the next step
22 ## E.g What is needed for MERGE must be produce in the CLEAN and SIM step
23 
24 
26  def __init__(self, module_name, manipulator_name, steps = ["SELECT","CLEAN","SIM","MERGE"], instance=[""], merge_prefix = ""):
27  self.module_name = module_name
28  self.manipulator_name = manipulator_name
29  self.steps = steps
30  self.instance = instance
31  self.merger_name = manipulator_name+"ColMerger"
32  self.cleaner_name = manipulator_name+"ColCleaner"
33  self.merge_prefix = merge_prefix
34 
35 
36 
37 
38 to_bemanipulate = []
39 
40 
41 to_bemanipulate.append(module_manipulate(module_name = 'siPixelClusters', manipulator_name = "Pixel", steps = ["SELECT","CLEAN"] ))
42 to_bemanipulate.append(module_manipulate(module_name = 'siStripClusters', manipulator_name = "Strip", steps = ["SELECT","CLEAN"] ))
43 
44 to_bemanipulate.append(module_manipulate(module_name = 'generalTracks', manipulator_name = "Track", steps = ["SIM", "MERGE"]))
45 to_bemanipulate.append(module_manipulate(module_name = 'muons1stStep', manipulator_name = "Muon", steps = ["SIM", "MERGE"]))
46 to_bemanipulate.append(module_manipulate(module_name = 'gedGsfElectronsTmp', manipulator_name = "GsfElectron", steps = ["SIM", "MERGE"]))
47 to_bemanipulate.append(module_manipulate(module_name = 'gedPhotonsTmp', manipulator_name = "Photon", steps = ["SIM", "MERGE"]))
48 to_bemanipulate.append(module_manipulate(module_name = 'particleFlowTmp', manipulator_name = "PF", steps = ["SIM", "MERGE"], instance=["","CleanedHF","CleanedCosmicsMuons","CleanedTrackerAndGlobalMuons","CleanedFakeMuons","CleanedPunchThroughMuons","CleanedPunchThroughNeutralHadrons","AddedMuonsAndHadrons"]))
49 
50 
51 to_bemanipulate.append(module_manipulate(module_name = 'ecalRecHit', manipulator_name = "EcalRecHit", instance= ["EcalRecHitsEB","EcalRecHitsEE"]))
52 to_bemanipulate.append(module_manipulate(module_name = 'ecalPreshowerRecHit', manipulator_name = "EcalRecHit", instance= ["EcalRecHitsES"]))
53 
54 to_bemanipulate.append(module_manipulate(module_name = 'hbheprereco', manipulator_name = "HBHERecHit"))
55 to_bemanipulate.append(module_manipulate(module_name = 'hbhereco', manipulator_name = "HBHERecHit"))
56 to_bemanipulate.append(module_manipulate(module_name = 'zdcreco', manipulator_name = "ZDCRecHit"))
57 
58 to_bemanipulate.append(module_manipulate(module_name = 'horeco', manipulator_name = "HORecHit"))
59 to_bemanipulate.append(module_manipulate(module_name = 'hfreco', manipulator_name = "HFRecHit"))
60 to_bemanipulate.append(module_manipulate(module_name = 'castorreco', manipulator_name = "CastorRecHit"))
61 
62 
63 to_bemanipulate.append(module_manipulate(module_name = 'dt1DRecHits', manipulator_name = "DTRecHit", steps = ["SELECT","CLEAN"] ))
64 to_bemanipulate.append(module_manipulate(module_name = 'dt1DCosmicRecHits', manipulator_name = "DTRecHit", steps = ["SELECT","CLEAN"] ))
65 
66 to_bemanipulate.append(module_manipulate(module_name = 'csc2DRecHits', manipulator_name = "CSCRecHit", steps = ["SELECT","CLEAN"] ))
67 to_bemanipulate.append(module_manipulate(module_name = 'rpcRecHits', manipulator_name = "RPCRecHit", steps = ["SELECT","CLEAN"] ))
68 
69 
70 def modify_outputModules(process, keep_drop_list = [], module_veto_list = [] ):
71  outputModulesList = [key for key,value in six.iteritems(process.outputModules)]
72  for outputModule in outputModulesList:
73  if outputModule in module_veto_list:
74  continue
75  outputModule = getattr(process, outputModule)
76  for add_element in keep_drop_list:
77  outputModule.outputCommands.extend(add_element)
78  return process
79 
80 
81 
82 ################################ Customizer for Selecting ###########################
83 
84 def keepSelected(dataTier):
85  ret_vstring = cms.untracked.vstring(
86  # "drop *_*_*_"+dataTier,
87  "keep *_patMuonsAfterID_*_"+dataTier,
88  "keep *_slimmedMuons_*_"+dataTier,
89  "keep *_selectedMuonsForEmbedding_*_"+dataTier,
90  "keep recoVertexs_offlineSlimmedPrimaryVertices_*_"+dataTier,
91  "keep *_firstStepPrimaryVertices_*_"+dataTier,
92  "keep *_offlineBeamSpot_*_"+dataTier
93  )
94  for akt_manimod in to_bemanipulate:
95  if "CLEAN" in akt_manimod.steps:
96  ret_vstring.append("keep *_"+akt_manimod.module_name+"_*_"+dataTier)
97  return ret_vstring
98 
99 def customiseSelecting(process,reselect=False):
100  if reselect:
101  process._Process__name = "RESELECT"
102  dataTier="RESELECT"
103  else:
104  process._Process__name = "SELECT"
105  dataTier="SELECT"
106 
107  process.load('TauAnalysis.MCEmbeddingTools.SelectingProcedure_cff')
108  # don't rekey TrackExtra refs because the full original collections are anyways stored
109  process.slimmedMuons.trackExtraAssocs = []
110  process.patMuonsAfterKinCuts.src = cms.InputTag("slimmedMuons","",dataTier)
111  process.patMuonsAfterID = process.patMuonsAfterLooseID.clone()
112 
113  process.selecting = cms.Path(process.makePatMuonsZmumuSelection)
114  process.schedule.insert(-1, process.selecting)
115 
116  outputModulesList = [key for key,value in six.iteritems(process.outputModules)]
117  for outputModule in outputModulesList:
118  outputModule = getattr(process, outputModule)
119  outputModule.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("selecting"))
120  outputModule.outputCommands.extend(keepSelected(dataTier))
121 
122  process = customisoptions(process)
123  return modify_outputModules(process,[keepSelected(dataTier)])
124 
126  return customiseSelecting(process,reselect=True)
127 
128 ################################ Customizer for cleaining ###########################
130  ret_vstring = cms.untracked.vstring(
131 # "drop *_*_*_LHEembeddingCLEAN",
132 # "drop *_*_*_CLEAN"
133  )
134 
135  for akt_manimod in to_bemanipulate:
136  if "MERGE" in akt_manimod.steps:
137  ret_vstring.append("keep *_"+akt_manimod.module_name+"_*_LHEembeddingCLEAN")
138  ret_vstring.append("keep *_"+akt_manimod.module_name+"_*_CLEAN")
139  ret_vstring.append("keep *_standAloneMuons_*_LHEembeddingCLEAN")
140  ret_vstring.append("keep *_glbTrackQual_*_LHEembeddingCLEAN")
141  return ret_vstring
142 
143 
144 
145 def customiseCleaning(process, changeProcessname=True,reselect=False):
146  if changeProcessname:
147  process._Process__name = "CLEAN"
148  if reselect:
149  dataTier="RESELECT"
150  else:
151  dataTier="SELECT"
152  ## Needed for the Calo Cleaner, could also be put into a function wich fix the input parameters
153  from TrackingTools.TrackAssociator.default_cfi import TrackAssociatorParameterBlock
154  TrackAssociatorParameterBlock.TrackAssociatorParameters.CSCSegmentCollectionLabel = cms.InputTag("cscSegments","",dataTier)
155  TrackAssociatorParameterBlock.TrackAssociatorParameters.CaloTowerCollectionLabel = cms.InputTag("towerMaker","",dataTier)
156  TrackAssociatorParameterBlock.TrackAssociatorParameters.DTRecSegment4DCollectionLabel = cms.InputTag("dt4DSegments","",dataTier)
157  TrackAssociatorParameterBlock.TrackAssociatorParameters.EBRecHitCollectionLabel = cms.InputTag("ecalRecHit","EcalRecHitsEB",dataTier)
158  TrackAssociatorParameterBlock.TrackAssociatorParameters.EERecHitCollectionLabel = cms.InputTag("ecalRecHit","EcalRecHitsEE",dataTier)
159  TrackAssociatorParameterBlock.TrackAssociatorParameters.HBHERecHitCollectionLabel = cms.InputTag("hbhereco","",dataTier)
160  TrackAssociatorParameterBlock.TrackAssociatorParameters.HORecHitCollectionLabel = cms.InputTag("horeco","",dataTier)
161 
162 
163  MuonImput = cms.InputTag("selectedMuonsForEmbedding","","") ## This are the muon
164  for akt_manimod in to_bemanipulate:
165  if "CLEAN" in akt_manimod.steps:
166  oldCollections_in = cms.VInputTag()
167  for instance in akt_manimod.instance:
168  oldCollections_in.append(cms.InputTag(akt_manimod.module_name,instance,dataTier))
169  setattr(process, akt_manimod.module_name, cms.EDProducer(akt_manimod.cleaner_name,MuonCollection = MuonImput,TrackAssociatorParameters = TrackAssociatorParameterBlock.TrackAssociatorParameters,oldCollection = oldCollections_in))
170  process.ecalPreshowerRecHit.TrackAssociatorParameters.usePreshower = cms.bool(True)
171  process = customisoptions(process)
172  return modify_outputModules(process,[keepSelected(dataTier),keepCleaned()],["MINIAODoutput"])
173 
174 
175 ################################ Customizer for simulaton ###########################
176 def keepLHE():
177  ret_vstring = cms.untracked.vstring()
178  ret_vstring.append("keep *_externalLHEProducer_*_LHEembedding")
179  ret_vstring.append("keep *_externalLHEProducer_*_LHEembeddingCLEAN")
180  return ret_vstring
181 
182 
184  ret_vstring = cms.untracked.vstring()
185  for akt_manimod in to_bemanipulate:
186  if "MERGE" in akt_manimod.steps:
187  ret_vstring.append("keep *_"+akt_manimod.module_name+"_*_SIMembedding")
188  ret_vstring.append("keep *_genParticles_*_SIMembedding")
189  ret_vstring.append("keep *_standAloneMuons_*_SIMembedding")
190  ret_vstring.append("keep *_glbTrackQual_*_SIMembedding")
191  ret_vstring.append("keep *_generator_*_SIMembedding")
192  ret_vstring.append("keep *_addPileupInfo_*_SIMembedding")
193  ret_vstring.append("keep *_slimmedAddPileupInfo_*_*")
194  return ret_vstring
195 
196 
197 
198 
199 def customiseLHE(process, changeProcessname=True,reselect=False):
200  if reselect:
201  dataTier="RESELECT"
202  else:
203  dataTier="SELECT"
204  if changeProcessname:
205  process._Process__name = "LHEembedding"
206  process.load('TauAnalysis.MCEmbeddingTools.EmbeddingLHEProducer_cfi')
207  if reselect:
208  process.externalLHEProducer.vertices=cms.InputTag("offlineSlimmedPrimaryVertices","","RESELECT")
209  process.lheproduction = cms.Path(process.makeexternalLHEProducer)
210  process.schedule.insert(0,process.lheproduction)
211 
212 
213  process = customisoptions(process)
214  return modify_outputModules(process,[keepSelected(dataTier),keepCleaned(), keepLHE()],["MINIAODoutput"])
215 
216 
217 def customiseGenerator(process, changeProcessname=True,reselect=False):
218  if reselect:
219  dataTier="RESELECT"
220  else:
221  dataTier="SELECT"
222  if changeProcessname:
223  process._Process__name = "SIMembedding"
224 
225  ## here correct the vertex collection
226 
227  process.load('TauAnalysis.MCEmbeddingTools.EmbeddingVertexCorrector_cfi')
228  process.VtxSmeared = process.VtxCorrectedToInput.clone()
229  print("Correcting Vertex in genEvent to one from input. Replaced 'VtxSmeared' with the Corrector.")
230 
231  # Remove BeamSpot Production, use the one from selected data instead.
232  process.reconstruction.remove(process.offlineBeamSpot)
233 
234  # Disable noise simulation
235  process.mix.digitizers.castor.doNoise = cms.bool(False)
236 
237  process.mix.digitizers.ecal.doESNoise = cms.bool(False)
238  process.mix.digitizers.ecal.doENoise = cms.bool(False)
239 
240  process.mix.digitizers.hcal.doNoise = cms.bool(False)
241  process.mix.digitizers.hcal.doThermalNoise = cms.bool(False)
242  process.mix.digitizers.hcal.doHPDNoise = cms.bool(False)
243 
244  process.mix.digitizers.pixel.AddNoisyPixels = cms.bool(False)
245  process.mix.digitizers.pixel.AddNoise = cms.bool(False)
246 
247  process.mix.digitizers.strip.Noise = cms.bool(False)
248 
249 
250  process = customisoptions(process)
251  ##process = fix_input_tags(process)
252 
253  return modify_outputModules(process,[keepSelected(dataTier),keepCleaned(),keepSimulated()],["AODSIMoutput"])
254 
256  return customiseGenerator(process,reselect=True)
257 
258 ################################ Customizer for merging ###########################
259 def keepMerged(dataTier="SELECT"):
260  ret_vstring = cms.untracked.vstring()
261  ret_vstring.append("drop *_*_*_"+dataTier)
262  ret_vstring.append("keep *_prunedGenParticles_*_MERGE")
263  ret_vstring.append("keep *_generator_*_SIMembedding")
264  return ret_vstring
265 
266 
267 def customiseKeepPrunedGenParticles(process,reselect=False):
268  if reselect:
269  dataTier="RESELECT"
270  else:
271  dataTier="SELECT"
272 
273  process.load('PhysicsTools.PatAlgos.slimming.genParticles_cff')
274  process.merge_step += process.prunedGenParticlesWithStatusOne
275  process.load('PhysicsTools.PatAlgos.slimming.prunedGenParticles_cfi')
276  process.merge_step += process.prunedGenParticles
277  process.load('PhysicsTools.PatAlgos.slimming.packedGenParticles_cfi')
278  process.merge_step += process.packedGenParticles
279 
280  process.load('PhysicsTools.PatAlgos.mcMatchLayer0.muonMatch_cfi')
281  process.merge_step += process.muonMatch
282  process.load('PhysicsTools.PatAlgos.mcMatchLayer0.electronMatch_cfi')
283  process.merge_step += process.electronMatch
284  process.load('PhysicsTools.PatAlgos.mcMatchLayer0.photonMatch_cfi')
285  process.merge_step += process.photonMatch
286  process.load('PhysicsTools.PatAlgos.mcMatchLayer0.tauMatch_cfi')
287  process.merge_step += process.tauMatch
288  process.load('PhysicsTools.JetMCAlgos.TauGenJets_cfi')
289  process.merge_step += process.tauGenJets
290  process.load('PhysicsTools.PatAlgos.mcMatchLayer0.jetFlavourId_cff')
291  process.merge_step += process.patJetPartons
292  process.load('PhysicsTools.PatAlgos.mcMatchLayer0.jetMatch_cfi')
293  process.merge_step += process.patJetPartonMatch
294 
295  process.muonMatch.matched = "prunedGenParticles"
296  process.electronMatch.matched = "prunedGenParticles"
297  process.electronMatch.src = cms.InputTag("reducedEgamma","reducedGedGsfElectrons")
298  process.photonMatch.matched = "prunedGenParticles"
299  process.photonMatch.src = cms.InputTag("reducedEgamma","reducedGedPhotons")
300  process.tauMatch.matched = "prunedGenParticles"
301  process.tauGenJets.GenParticles = "prunedGenParticles"
302  ##Boosted taus
303  #process.tauMatchBoosted.matched = "prunedGenParticles"
304  #process.tauGenJetsBoosted.GenParticles = "prunedGenParticles"
305  process.patJetPartons.particles = "prunedGenParticles"
306  process.patJetPartonMatch.matched = "prunedGenParticles"
307  process.patJetPartonMatch.mcStatus = [ 3, 23 ]
308  process.patJetGenJetMatch.matched = "slimmedGenJets"
309  process.patJetGenJetMatchAK8.matched = "slimmedGenJetsAK8"
310  process.patMuons.embedGenMatch = False
311  process.patElectrons.embedGenMatch = False
312  process.patPhotons.embedGenMatch = False
313  process.patTaus.embedGenMatch = False
314  process.patTausBoosted.embedGenMatch = False
315  process.patJets.embedGenPartonMatch = False
316  #also jet flavour must be switched
317  process.patJetFlavourAssociation.rParam = 0.4
318 
319  process.schedule.insert(0,process.merge_step)
320  process = customisoptions(process)
321  return modify_outputModules(process, [keepMerged(dataTier)])
322 
323 
324 def customiseMerging(process, changeProcessname=True,reselect=False):
325  if changeProcessname:
326  process._Process__name = "MERGE"
327  if reselect:
328  dataTier="RESELECT"
329  else:
330  dataTier="SELECT"
331 
332 
333  process.source.inputCommands = cms.untracked.vstring()
334  process.source.inputCommands.append("keep *_*_*_*")
335 
336  #process.source.inputCommands.append("drop *_*_*_SELECT")
337  #process.source.inputCommands.append("drop *_*_*_SIMembedding")
338  #process.source.inputCommands.append("drop *_*_*_LHEembeddingCLEAN")
339  #process.source.inputCommands.extend(keepSimulated())
340  #process.source.inputCommands.extend(keepCleaned())
341 
342  process.load('Configuration.StandardSequences.Reconstruction_Data_cff')
343  process.merge_step = cms.Path()
344 
345 
346  for akt_manimod in to_bemanipulate:
347  if "MERGE" in akt_manimod.steps:
348  #if akt_manimod.module_name != 'particleFlowTmp':
349  # continue
350  print(akt_manimod.module_name)
351  mergCollections_in = cms.VInputTag()
352  for instance in akt_manimod.instance:
353  mergCollections_in.append(cms.InputTag(akt_manimod.merge_prefix+akt_manimod.module_name,instance,"SIMembedding"))
354  mergCollections_in.append(cms.InputTag(akt_manimod.merge_prefix+akt_manimod.module_name,instance,"LHEembeddingCLEAN"))## Mayb make some process history magic which finds out if it was CLEAN or LHEembeddingCLEAN step
355  setattr(process, akt_manimod.module_name, cms.EDProducer(akt_manimod.merger_name,
356  mergCollections = mergCollections_in
357  )
358  )
359  process.merge_step +=getattr(process, akt_manimod.module_name)
360 
361 
362  process.merge_step += process.doAlldEdXEstimators
363  process.merge_step += process.vertexreco
364  process.unsortedOfflinePrimaryVertices.beamSpotLabel = cms.InputTag("offlineBeamSpot","",dataTier)
365  process.ak4CaloJetsForTrk.srcPVs = cms.InputTag("firstStepPrimaryVertices","",dataTier)
366 
367  process.muons.FillDetectorBasedIsolation = cms.bool(False)
368  process.muons.FillSelectorMaps = cms.bool(False)
369  process.muons.FillShoweringInfo = cms.bool(False)
370  process.muons.FillCosmicsIdMap = cms.bool(False)
371 
372  process.muonsFromCosmics.fillShowerDigis = cms.bool(False)
373  process.muonsFromCosmics1Leg.fillShowerDigis = cms.bool(False)
374 
375  process.merge_step += process.highlevelreco
376 
377  #process.merge_step.remove(process.reducedEcalRecHitsEE)
378  #process.merge_step.remove(process.reducedEcalRecHitsEB)
379 
380  process.merge_step.remove(process.ak4JetTracksAssociatorExplicit)
381 
382  process.merge_step.remove(process.pfTrack)
383  process.merge_step.remove(process.pfConversions)
384  process.merge_step.remove(process.pfV0)
385  process.merge_step.remove(process.particleFlowDisplacedVertexCandidate)
386  process.merge_step.remove(process.particleFlowDisplacedVertex)
387  process.merge_step.remove(process.pfDisplacedTrackerVertex)
388  process.merge_step.remove(process.pfTrackElec)
389  process.merge_step.remove(process.electronsWithPresel)
390  process.merge_step.remove(process.mvaElectrons)
391  process.merge_step.remove(process.particleFlowBlock)
392  process.merge_step.remove(process.particleFlowEGamma)
393  process.merge_step.remove(process.gedGsfElectronCores)
394  # process.merge_step.remove(process.gedGsfElectronsTmp)
395  process.merge_step.remove(process.gedPhotonCore)
396  process.merge_step.remove(process.ecalDrivenGsfElectronCores)
397  process.merge_step.remove(process.ecalDrivenGsfElectrons)
398  process.merge_step.remove(process.uncleanedOnlyElectronSeeds)
399  process.merge_step.remove(process.uncleanedOnlyAllConversions)
400  process.merge_step.remove(process.uncleanedOnlyPfTrack)
401  process.merge_step.remove(process.uncleanedOnlyPfTrackElec)
402  process.merge_step.remove(process.uncleanedOnlyGsfElectrons)
403  process.merge_step.remove(process.uncleanedOnlyElectronCkfTrackCandidates)
404  process.merge_step.remove(process.cosmicsVeto)
405  process.merge_step.remove(process.cosmicsVetoTrackCandidates)
406  # process.merge_step.remove(process.ecalDrivenGsfElectronCores)
407  # process.merge_step.remove(process.ecalDrivenGsfElectrons)
408  # process.merge_step.remove(process.gedPhotonsTmp)
409  # process.merge_step.remove(process.particleFlowTmp)
410  process.merge_step.remove(process.hcalnoise)
411 
412  process.load('CommonTools.ParticleFlow.genForPF2PAT_cff')
413 
414  process.merge_step += process.genForPF2PATSequence
415 
416  process.schedule.insert(0,process.merge_step)
417  # process.load('PhysicsTools.PatAlgos.slimming.slimmedGenJets_cfi')
418 
419  process = customisoptions(process)
420  return modify_outputModules(process, [keepMerged(dataTier)])
421 
422 def customiseMerging_Reselect(process, changeProcessname=True):
423  return customiseMerging(process, changeProcessname=changeProcessname, reselect=True)
424 
425 ################################ cross Customizers ###########################
426 
427 def customiseLHEandCleaning(process,reselect=False):
428  process._Process__name = "LHEembeddingCLEAN"
429  process = customiseCleaning(process,changeProcessname=False,reselect=reselect)
430  process = customiseLHE(process,changeProcessname=False,reselect=reselect)
431  return process
432 
434  return customiseLHEandCleaning(process,reselect=True)
435 
436 ################################ additionla Customizer ###########################
437 
438 def customisoptions(process):
439  if not hasattr(process, "options"):
440  process.options = cms.untracked.PSet()
441  process.options.emptyRunLumiMode = cms.untracked.string('doNotHandleEmptyRunsAndLumis')
442  if not hasattr(process, "bunchSpacingProducer"):
443  process.bunchSpacingProducer = cms.EDProducer("BunchSpacingProducer")
444  process.bunchSpacingProducer.bunchSpacingOverride = cms.uint32(25)
445  process.bunchSpacingProducer.overrideBunchSpacing = cms.bool(True)
446  process.options.numberOfThreads = cms.untracked.uint32(1)
447  process.options.numberOfStreams = cms.untracked.uint32(0)
448  return process
449 
450 ############################### MC specific Customizer ###########################
451 
453  process.load("TauAnalysis.MCEmbeddingTools.DYToMuMuGenFilter_cfi")
454  process.ZToMuMuFilter = cms.Path(process.dYToMuMuGenFilter)
455  process.schedule.insert(-1,process.ZToMuMuFilter)
456  return process
457 
459  process.load("TauAnalysis.MCEmbeddingTools.TTbartoMuMuGenFilter_cfi")
460  process.MCFilter = cms.Path(process.TTbartoMuMuGenFilter)
461  return customiseMCFilter(process)
462 
463 def customiseMCFilter(process):
464  process.schedule.insert(-1,process.MCFilter)
465  outputModulesList = [key for key,value in six.iteritems(process.outputModules)]
466  for outputModule in outputModulesList:
467  outputModule = getattr(process, outputModule)
468  outputModule.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("MCFilter"))
469  return process
470 
471 def fix_input_tags(process, formodules = ["generalTracks","cscSegments","dt4DSegments","rpcRecHits"]):
472  def change_tags_process(test_input):
473  if isinstance(test_input, cms.InputTag):
474  if test_input.getModuleLabel() in formodules:
475  test_input.setProcessName(process._Process__name)
476 
477  def search_for_tags(pset):
478  if isinstance(pset, dict):
479  for key in pset:
480  if isinstance(pset[key], cms.VInputTag):
481  for akt_inputTag in pset[key]:
482  change_tags_process(akt_inputTag)
483  elif isinstance(pset[key], cms.PSet):
484  search_for_tags(pset[key].__dict__)
485  elif isinstance(pset[key], cms.VPSet):
486  for akt_pset in pset[key]:
487  search_for_tags(akt_pset.__dict__)
488  else:
489  change_tags_process(pset[key])
490  else:
491  print("must be python dict not a ",type(pset))
492 
493  for module in process.producers_():
494  search_for_tags(getattr(process, module).__dict__)
495  for module in process.filters_():
496  search_for_tags(getattr(process, module).__dict__)
497  for module in process.analyzers_():
498  search_for_tags(getattr(process, module).__dict__)
499 
500  return process
def customiseSelecting(process, reselect=False)
Definition: customisers.py:99
def customiseLHEandCleaning_Reselect(process)
Definition: customisers.py:433
def customiseSelecting_Reselect(process)
Definition: customisers.py:125
def keepCleaned()
Customizer for cleaining ###########################.
Definition: customisers.py:129
def customiseGenerator(process, changeProcessname=True, reselect=False)
Definition: customisers.py:217
Customizer for skimming ########################### There are four different parts.
Definition: customisers.py:25
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def keepLHE()
Customizer for simulaton ###########################.
Definition: customisers.py:176
def customiseKeepPrunedGenParticles(process, reselect=False)
Definition: customisers.py:267
def keepSimulated()
Definition: customisers.py:183
def keepMerged(dataTier="SELECT")
Customizer for merging ###########################.
Definition: customisers.py:259
def customiseFilterZToMuMu(process)
MC specific Customizer ###########################.
Definition: customisers.py:452
def customiseMerging(process, changeProcessname=True, reselect=False)
Definition: customisers.py:324
def fix_input_tags(process, formodules=["generalTracks", cscSegments, dt4DSegments, rpcRecHits)
Definition: customisers.py:471
def customiseMerging_Reselect(process, changeProcessname=True)
Definition: customisers.py:422
def customiseLHEandCleaning(process, reselect=False)
cross Customizers ###########################
Definition: customisers.py:427
def customiseMCFilter(process)
Definition: customisers.py:463
def __init__(self, module_name, manipulator_name, steps=["SELECT", CLEAN, SIM, MERGE, instance=[""], merge_prefix="")
Definition: customisers.py:26
def customisoptions(process)
additionla Customizer ###########################
Definition: customisers.py:438
def modify_outputModules(process, keep_drop_list=[], module_veto_list=[])
Definition: customisers.py:70
def customiseLHE(process, changeProcessname=True, reselect=False)
Definition: customisers.py:199
def keepSelected(dataTier)
Customizer for Selecting ###########################.
Definition: customisers.py:84
def customiseGenerator_Reselect(process)
Definition: customisers.py:255
def customiseCleaning(process, changeProcessname=True, reselect=False)
Definition: customisers.py:145
def customiseFilterTTbartoMuMu(process)
Definition: customisers.py:458