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