CMS 3D CMS Logo

trackTools.py

Go to the documentation of this file.
00001 import FWCore.ParameterSet.Config as cms
00002 
00003 def makeAODTrackCandidates(process, label='TrackCands',                ## output collection will be <'patAOD'+label>
00004                                 tracks=cms.InputTag('generalTracks'),  ## input tracks
00005                                 particleType="pi+",                    ## particle type (for mass)
00006                                 candSelection='pt > 10'):              ## preselection cut on candidates
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',                     # output will be 'allLayer1'+label , 'selectedLayer1' + label
00020         input=cms.InputTag('patAODTrackCands'), # Name of input collection
00021         selection='pt > 10',                    # Selection on PAT Layer 1 objects;
00022                                                 #   The output will be 'selectedLayer1' + label
00023         isolation={'tracker':0.3,               # Isolations to use ('source':deltaR)
00024                    'ecalTowers':0.3,            # 'tracker' => as muon track iso
00025                    'hcalTowers':0.3},           # 'ecalTowers', 'hcalTowers' => as muon iso from calo towers.
00026         isodeposits=['tracker','ecalTowers','hcalTowers'],   
00027         mcAs=cms.InputTag("muons"),             # Replicate MC match as the one used by PAT on this AOD collection (None = no mc match)
00028         triggerAs=[]):                          # Replicate trigger match as all the ones used by PAT on these AOD collections (None = no trig.)
00029     from PhysicsTools.PatAlgos.producersLayer1.genericParticleProducer_cfi import allLayer1GenericParticles
00030     from PhysicsTools.PatAlgos.cleaningLayer1.genericTrackCleaner_cfi     import cleanLayer1Tracks
00031     # Define Modules
00032     #   producer
00033     setattr(process, 'allLayer1' + label, allLayer1GenericParticles.clone(src = input))
00034     #   selector
00035     setattr(process, 'selectedLayer1' + label, 
00036         cms.EDFilter("PATGenericParticleSelector",
00037             src = cms.InputTag("allLayer1"+label),
00038             cut = cms.string(selection) 
00039         ) 
00040     )
00041     #   cleaner
00042     setattr(process, 'cleanLayer1' + label, cleanLayer1Tracks.clone(src = cms.InputTag('selectedLayer1' + label)))
00043     # Get them as variables, so we can put them in the sequences and/or configure them
00044     l1cands = getattr(process, 'allLayer1' + label)
00045     selectedL1cands = getattr(process, 'selectedLayer1' + label)
00046     cleanL1cands    = getattr(process, 'cleanLayer1' + label)
00047     # Insert in sequence, after electrons
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     # Add to Summary Tables
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     # Isolation: start with empty config
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     # MC and trigger
00112     from PhysicsTools.PatAlgos.tools.jetTools import MassSearchParamVisitor;
00113     if type(mcAs) != type(None): # otherwise it complains that 'None' is not a valid InputTag :-(
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',                   # output collection will be 'allLayer'+(0/1)+label , 'selectedLayer1' + label
00140         tracks=cms.InputTag('generalTracks'), # input track collection
00141         particleType="pi+",                   # particle type (for assigning a mass)
00142         preselection='pt > 10',               # preselection cut on candidates
00143         selection='pt > 10',                  # Selection on PAT Layer 1 objects. The output will be 'selectedLayer1' + label
00144         isolation={'tracker':   0.3,          #  Isolations to use ({'source':deltaR, ...}; use {} for none)
00145                    'ecalTowers':0.3,          # 'tracker' => as muon track iso
00146                    'hcalTowers':0.3},         # 'ecalTowers', 'hcalTowers' => as muon iso from calo towers.
00147         isodeposits=['tracker','ecalTowers','hcalTowers'],   # IsoDeposits to save ([] for none)
00148         mcAs=cms.InputTag("muons"),           # Replicate MC match as the one used by PAT on this AOD collection (None = no mc match)
00149         triggerAs=[]):                        # Replicate trigger match as all the ones used by PAT on these AOD collections ([] = none)
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)

Generated on Tue Jun 9 17:41:44 2009 for CMSSW by  doxygen 1.5.4