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  process.merge_step.remove(process.lowPtGsfElectronTask)
412  process.merge_step.remove(process.gsfTracksOpenConversions)
413 
414  process.load('CommonTools.ParticleFlow.genForPF2PAT_cff')
415 
416  process.merge_step += process.genForPF2PATSequence
417 
418  process.slimmingTask.remove(process.slimmedLowPtElectronsTask)
419 
420  process.schedule.insert(0,process.merge_step)
421  # process.load('PhysicsTools.PatAlgos.slimming.slimmedGenJets_cfi')
422 
423  process = customisoptions(process)
424  return modify_outputModules(process, [keepMerged(dataTier)])
425 
426 def customiseMerging_Reselect(process, changeProcessname=True):
427  return customiseMerging(process, changeProcessname=changeProcessname, reselect=True)
428 
429 ################################ cross Customizers ###########################
430 
431 def customiseLHEandCleaning(process,reselect=False):
432  process._Process__name = "LHEembeddingCLEAN"
433  process = customiseCleaning(process,changeProcessname=False,reselect=reselect)
434  process = customiseLHE(process,changeProcessname=False,reselect=reselect)
435  return process
436 
438  return customiseLHEandCleaning(process,reselect=True)
439 
440 ################################ additionla Customizer ###########################
441 
442 def customisoptions(process):
443  if not hasattr(process, "options"):
444  process.options = cms.untracked.PSet()
445  process.options.emptyRunLumiMode = cms.untracked.string('doNotHandleEmptyRunsAndLumis')
446  if not hasattr(process, "bunchSpacingProducer"):
447  process.bunchSpacingProducer = cms.EDProducer("BunchSpacingProducer")
448  process.bunchSpacingProducer.bunchSpacingOverride = cms.uint32(25)
449  process.bunchSpacingProducer.overrideBunchSpacing = cms.bool(True)
450  process.options.numberOfThreads = cms.untracked.uint32(1)
451  process.options.numberOfStreams = cms.untracked.uint32(0)
452  return process
453 
454 ############################### MC specific Customizer ###########################
455 
457  process.load("TauAnalysis.MCEmbeddingTools.DYToMuMuGenFilter_cfi")
458  process.ZToMuMuFilter = cms.Path(process.dYToMuMuGenFilter)
459  process.schedule.insert(-1,process.ZToMuMuFilter)
460  return process
461 
463  process.load("TauAnalysis.MCEmbeddingTools.TTbartoMuMuGenFilter_cfi")
464  process.MCFilter = cms.Path(process.TTbartoMuMuGenFilter)
465  return customiseMCFilter(process)
466 
467 def customiseMCFilter(process):
468  process.schedule.insert(-1,process.MCFilter)
469  outputModulesList = [key for key,value in six.iteritems(process.outputModules)]
470  for outputModule in outputModulesList:
471  outputModule = getattr(process, outputModule)
472  outputModule.SelectEvents = cms.untracked.PSet(SelectEvents = cms.vstring("MCFilter"))
473  return process
474 
475 def fix_input_tags(process, formodules = ["generalTracks","cscSegments","dt4DSegments","rpcRecHits"]):
476  def change_tags_process(test_input):
477  if isinstance(test_input, cms.InputTag):
478  if test_input.getModuleLabel() in formodules:
479  test_input.setProcessName(process._Process__name)
480 
481  def search_for_tags(pset):
482  if isinstance(pset, dict):
483  for key in pset:
484  if isinstance(pset[key], cms.VInputTag):
485  for akt_inputTag in pset[key]:
486  change_tags_process(akt_inputTag)
487  elif isinstance(pset[key], cms.PSet):
488  search_for_tags(pset[key].__dict__)
489  elif isinstance(pset[key], cms.VPSet):
490  for akt_pset in pset[key]:
491  search_for_tags(akt_pset.__dict__)
492  else:
493  change_tags_process(pset[key])
494  else:
495  print("must be python dict not a ",type(pset))
496 
497  for module in process.producers_():
498  search_for_tags(getattr(process, module).__dict__)
499  for module in process.filters_():
500  search_for_tags(getattr(process, module).__dict__)
501  for module in process.analyzers_():
502  search_for_tags(getattr(process, module).__dict__)
503 
504  return process
def customiseSelecting(process, reselect=False)
Definition: customisers.py:99
def customiseLHEandCleaning_Reselect(process)
Definition: customisers.py:437
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:456
def customiseMerging(process, changeProcessname=True, reselect=False)
Definition: customisers.py:324
def fix_input_tags(process, formodules=["generalTracks", cscSegments, dt4DSegments, rpcRecHits)
Definition: customisers.py:475
def customiseMerging_Reselect(process, changeProcessname=True)
Definition: customisers.py:426
def customiseLHEandCleaning(process, reselect=False)
cross Customizers ###########################
Definition: customisers.py:431
def customiseMCFilter(process)
Definition: customisers.py:467
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:442
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:462