00001 import FWCore.ParameterSet.Config as cms
00002
00003 def makeAODTrackCandidates(process, label='TrackCands',
00004 tracks=cms.InputTag('generalTracks'),
00005 particleType="pi+",
00006 candSelection='pt > 10'):
00007 process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi");
00008 setattr(process, 'patAOD' + label + 'Unfiltered',
00009 cms.EDProducer("ConcreteChargedCandidateProducer",
00010 src = tracks,
00011 particleType = cms.string(particleType) ) )
00012 setattr(process, 'patAOD' + label,
00013 cms.EDFilter("CandViewSelector",
00014 src = cms.InputTag('patAOD' + label + 'Unfiltered'),
00015 cut = cms.string(candSelection) ) )
00016 process.patAODCoreReco += getattr(process, 'patAOD' + label + 'Unfiltered') * getattr(process, 'patAOD' + label)
00017
00018 def makePATTrackCandidates(process,
00019 label='TrackCands',
00020 input=cms.InputTag('patAODTrackCands'),
00021 selection='pt > 10',
00022
00023 isolation={'tracker':0.3,
00024 'ecalTowers':0.3,
00025 'hcalTowers':0.3},
00026 isodeposits=['tracker','ecalTowers','hcalTowers'],
00027 mcAs=cms.InputTag("muons"),
00028 triggerAs=[]):
00029 from PhysicsTools.PatAlgos.producersLayer1.genericParticleProducer_cfi import allLayer1GenericParticles
00030 from PhysicsTools.PatAlgos.cleaningLayer1.genericTrackCleaner_cfi import cleanLayer1Tracks
00031
00032
00033 setattr(process, 'allLayer1' + label, allLayer1GenericParticles.clone(src = input))
00034
00035 setattr(process, 'selectedLayer1' + label,
00036 cms.EDFilter("PATGenericParticleSelector",
00037 src = cms.InputTag("allLayer1"+label),
00038 cut = cms.string(selection)
00039 )
00040 )
00041
00042 setattr(process, 'cleanLayer1' + label, cleanLayer1Tracks.clone(src = cms.InputTag('selectedLayer1' + label)))
00043
00044 l1cands = getattr(process, 'allLayer1' + label)
00045 selectedL1cands = getattr(process, 'selectedLayer1' + label)
00046 cleanL1cands = getattr(process, 'cleanLayer1' + label)
00047
00048 process.allLayer1Objects.replace(process.allLayer1Electrons, l1cands + process.allLayer1Electrons)
00049 process.selectedLayer1Objects.replace(process.selectedLayer1Electrons, process.selectedLayer1Electrons + selectedL1cands)
00050 process.cleanLayer1Objects.replace(process.cleanLayer1Electrons, process.cleanLayer1Electrons + cleanL1cands)
00051
00052 process.aodSummary.candidates += [ input ]
00053 process.allLayer1Summary.candidates += [ cms.InputTag("allLayer1"+label) ]
00054 process.selectedLayer1Summary.candidates += [ cms.InputTag("selectedLayer1"+label) ]
00055 process.cleanLayer1Summary.candidates += [ cms.InputTag("cleanLayer1"+label) ]
00056
00057
00058 isoModules = []
00059 runIsoDeps = { 'tracker':False, 'caloTowers':False }
00060 for (source,deltaR) in isolation.items():
00061 if source == 'tracker':
00062 runIsoDeps['tracker'] = True
00063 l1cands.isolation.tracker = cms.PSet(
00064 src = cms.InputTag('pat'+label+'IsoDepositTracks'),
00065 deltaR = cms.double(deltaR),
00066 )
00067 elif source == 'ecalTowers':
00068 runIsoDeps['caloTowers'] = True
00069 l1cands.isolation.ecal = cms.PSet(
00070 src = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'ecal'),
00071 deltaR = cms.double(deltaR),
00072 )
00073 elif source == 'hcalTowers':
00074 runIsoDeps['caloTowers'] = True
00075 l1cands.isolation.hcal = cms.PSet(
00076 src = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'hcal'),
00077 deltaR = cms.double(deltaR),
00078 )
00079 for source in isodeposits:
00080 if source == 'tracker':
00081 runIsoDeps['tracker'] = True
00082 l1cands.isoDeposits.tracker = cms.InputTag('pat'+label+'IsoDepositTracks')
00083 elif source == 'ecalTowers':
00084 runIsoDeps['caloTowers'] = True
00085 l1cands.isoDeposits.ecal = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'ecal')
00086 elif source == 'hcalTowers':
00087 runIsoDeps['caloTowers'] = True
00088 l1cands.isoDeposits.hcal = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'hcal')
00089 for dep in [ dep for dep,runme in runIsoDeps.items() if runme == True ]:
00090 if dep == 'tracker':
00091 from RecoMuon.MuonIsolationProducers.trackExtractorBlocks_cff import MIsoTrackExtractorCtfBlock
00092 setattr(process, 'pat'+label+'IsoDepositTracks',
00093 cms.EDProducer("CandIsoDepositProducer",
00094 src = input,
00095 trackType = cms.string('best'),
00096 MultipleDepositsFlag = cms.bool(False),
00097 ExtractorPSet = cms.PSet( MIsoTrackExtractorCtfBlock )
00098 ) )
00099 isoModules.append( getattr(process, 'pat'+label+'IsoDepositTracks') )
00100 elif dep == 'caloTowers':
00101 from RecoMuon.MuonIsolationProducers.caloExtractorByAssociatorBlocks_cff import MIsoCaloExtractorByAssociatorTowersBlock
00102 setattr(process, 'pat'+label+'IsoDepositCaloTowers',
00103 cms.EDProducer("CandIsoDepositProducer",
00104 src = input,
00105 trackType = cms.string('best'),
00106 MultipleDepositsFlag = cms.bool(True),
00107 ExtractorPSet = cms.PSet( MIsoCaloExtractorByAssociatorTowersBlock )
00108 ) )
00109 isoModules.append( getattr(process, 'pat'+label+'IsoDepositCaloTowers') )
00110 for m in isoModules: process.patAODExtraReco += m
00111
00112 from PhysicsTools.PatAlgos.tools.jetTools import MassSearchParamVisitor;
00113 if type(mcAs) != type(None):
00114 searchMC = MassSearchParamVisitor('src', mcAs);
00115 process.patMCTruth.visit(searchMC)
00116 modulesMC = searchMC.modules()
00117 if len(modulesMC) != 1: raise RuntimeError, "Can't find MC-Truth match for '%s', or it's not unique."%(mcAs,)
00118 setattr(process, 'pat'+label+'MCMatch', modulesMC[0].clone(src = input))
00119 process.patMCTruth.replace( modulesMC[0], modulesMC[0] + getattr(process, 'pat'+label+'MCMatch'))
00120 l1cands.addGenMatch = True
00121 l1cands.genParticleMatch = cms.InputTag('pat'+label+'MCMatch')
00122 if triggerAs != None and triggerAs != []:
00123 modulesTR = []; labelsTR = []
00124 for t in triggerAs:
00125 searchTR = MassSearchParamVisitor('src', cms.InputTag(t));
00126 process.patTrigMatch.visit(searchTR)
00127 modulesTR += searchTR.modules()
00128 if len(modulesTR) == 0: raise RuntimeError, "Can't find any trigger match among %s" % (triggerAs)
00129 def ucfirst(x): return x[0].upper() + x[1:]
00130 for m in modulesTR:
00131 lbl = 'pat'+label+'TrigMatchAs' + ucfirst(m.label())
00132 setattr(process, lbl, m.clone(src = input))
00133 process.patTrigMatch.replace( m, m + getattr(process, lbl))
00134 labelsTR.append (cms.InputTag(lbl))
00135 l1cands.addTrigMatch = cms.bool(True)
00136 l1cands.trigPrimMatch = cms.VInputTag(*labelsTR)
00137
00138 def makeTrackCandidates(process,
00139 label='TrackCands',
00140 tracks=cms.InputTag('generalTracks'),
00141 particleType="pi+",
00142 preselection='pt > 10',
00143 selection='pt > 10',
00144 isolation={'tracker': 0.3,
00145 'ecalTowers':0.3,
00146 'hcalTowers':0.3},
00147 isodeposits=['tracker','ecalTowers','hcalTowers'],
00148 mcAs=cms.InputTag("muons"),
00149 triggerAs=[]):
00150 makeAODTrackCandidates(process, tracks=tracks, particleType=particleType, candSelection=preselection, label=label)
00151 makePATTrackCandidates(process, label=label, input=cms.InputTag('patAOD' + label),
00152 isolation=isolation, isodeposits=isodeposits, mcAs=mcAs, triggerAs=triggerAs, selection=selection)