def pfTools::adaptPFElectrons | ( | process, | |
module, | |||
postfix | |||
) |
Definition at line 135 of file pfTools.py.
00136 : 00137 # module.useParticleFlow = True 00138 print "Adapting PF Electrons " 00139 print "********************* " 00140 warningIsolation() 00141 print 00142 module.useParticleFlow = True 00143 module.pfElectronSource = cms.InputTag("pfIsolatedElectrons" + postfix) 00144 module.userIsolation = cms.PSet() 00145 module.isoDeposits = cms.PSet( 00146 pfChargedHadrons = cms.InputTag("elPFIsoDepositCharged" + postfix), 00147 pfChargedAll = cms.InputTag("elPFIsoDepositChargedAll" + postfix), 00148 pfPUChargedHadrons = cms.InputTag("elPFIsoDepositPU" + postfix), 00149 pfNeutralHadrons = cms.InputTag("elPFIsoDepositNeutral" + postfix), 00150 pfPhotons = cms.InputTag("elPFIsoDepositGamma" + postfix) 00151 ) 00152 module.isolationValues = cms.PSet( 00153 pfChargedHadrons = cms.InputTag("elPFIsoValueCharged04PFId"+ postfix), 00154 pfChargedAll = cms.InputTag("elPFIsoValueChargedAll04PFId"+ postfix), 00155 pfPUChargedHadrons = cms.InputTag("elPFIsoValuePU04PFId" + postfix), 00156 pfNeutralHadrons = cms.InputTag("elPFIsoValueNeutral04PFId" + postfix), 00157 pfPhotons = cms.InputTag("elPFIsoValueGamma04PFId" + postfix) 00158 ) 00159 00160 # COLIN: since we take the egamma momentum for pat Electrons, we must 00161 # match the egamma electron to the gen electrons, and not the PFElectron. 00162 # -> do not uncomment the line below. 00163 # process.electronMatch.src = module.pfElectronSource 00164 # COLIN: how do we depend on this matching choice? 00165 00166 print " PF electron source:", module.pfElectronSource 00167 print " isolation :" 00168 print module.isolationValues 00169 print " isodeposits: " 00170 print module.isoDeposits 00171 print 00172 00173 print "removing traditional isolation" 00174 00175 removeIfInSequence(process, "patElectronIsolation", "patDefaultSequence", postfix)
def pfTools::adaptPFIsoElectrons | ( | process, | |
module, | |||
postfix = "PFIso" , |
|||
dR = "04" |
|||
) |
Definition at line 48 of file pfTools.py.
00049 : 00050 #FIXME: adaptPFElectrons can use this function. 00051 module.isoDeposits = cms.PSet( 00052 pfChargedHadrons = cms.InputTag("elPFIsoDepositCharged" + postfix), 00053 pfChargedAll = cms.InputTag("elPFIsoDepositChargedAll" + postfix), 00054 pfPUChargedHadrons = cms.InputTag("elPFIsoDepositPU" + postfix), 00055 pfNeutralHadrons = cms.InputTag("elPFIsoDepositNeutral" + postfix), 00056 pfPhotons = cms.InputTag("elPFIsoDepositGamma" + postfix) 00057 ) 00058 module.isolationValues = cms.PSet( 00059 pfChargedHadrons = cms.InputTag("elPFIsoValueCharged"+dR+"PFId"+ postfix), 00060 pfChargedAll = cms.InputTag("elPFIsoValueChargedAll"+dR+"PFId"+ postfix), 00061 pfPUChargedHadrons = cms.InputTag("elPFIsoValuePU"+dR+"PFId" + postfix), 00062 pfNeutralHadrons = cms.InputTag("elPFIsoValueNeutral"+dR+"PFId" + postfix), 00063 pfPhotons = cms.InputTag("elPFIsoValueGamma"+dR+"PFId" + postfix) 00064 ) 00065 module.isolationValuesNoPFId = cms.PSet( 00066 pfChargedHadrons = cms.InputTag("elPFIsoValueCharged"+dR+"NoPFId"+ postfix), 00067 pfChargedAll = cms.InputTag("elPFIsoValueChargedAll"+dR+"NoPFId"+ postfix), 00068 pfPUChargedHadrons = cms.InputTag("elPFIsoValuePU"+dR+"NoPFId" + postfix), 00069 pfNeutralHadrons = cms.InputTag("elPFIsoValueNeutral"+dR+"NoPFId" + postfix), 00070 pfPhotons = cms.InputTag("elPFIsoValueGamma"+dR+"NoPFId" + postfix) 00071 )
def pfTools::adaptPFIsoMuons | ( | process, | |
module, | |||
postfix = "PFIso" , |
|||
dR = "04" |
|||
) |
Definition at line 72 of file pfTools.py.
00073 : 00074 #FIXME: adaptPFMuons can use this function. 00075 module.isoDeposits = cms.PSet( 00076 pfChargedHadrons = cms.InputTag("muPFIsoDepositCharged" + postfix), 00077 pfChargedAll = cms.InputTag("muPFIsoDepositChargedAll" + postfix), 00078 pfPUChargedHadrons = cms.InputTag("muPFIsoDepositPU" + postfix), 00079 pfNeutralHadrons = cms.InputTag("muPFIsoDepositNeutral" + postfix), 00080 pfPhotons = cms.InputTag("muPFIsoDepositGamma" + postfix) 00081 ) 00082 module.isolationValues = cms.PSet( 00083 pfChargedHadrons = cms.InputTag("muPFIsoValueCharged" + dR + postfix), 00084 pfChargedAll = cms.InputTag("muPFIsoValueChargedAll" + dR + postfix), 00085 pfPUChargedHadrons = cms.InputTag("muPFIsoValuePU" + dR + postfix), 00086 pfNeutralHadrons = cms.InputTag("muPFIsoValueNeutral" + dR + postfix), 00087 pfPhotons = cms.InputTag("muPFIsoValueGamma" + dR + postfix) 00088 )
def pfTools::adaptPFMuons | ( | process, | |
module, | |||
postfix = "" |
|||
) |
Definition at line 102 of file pfTools.py.
00103 : 00104 print "Adapting PF Muons " 00105 print "***************** " 00106 warningIsolation() 00107 print 00108 module.useParticleFlow = True 00109 module.pfMuonSource = cms.InputTag("pfIsolatedMuons" + postfix) 00110 module.userIsolation = cms.PSet() 00111 module.isoDeposits = cms.PSet( 00112 pfChargedHadrons = cms.InputTag("muPFIsoDepositCharged" + postfix), 00113 pfChargedAll = cms.InputTag("muPFIsoDepositChargedAll" + postfix), 00114 pfPUChargedHadrons = cms.InputTag("muPFIsoDepositPU" + postfix), 00115 pfNeutralHadrons = cms.InputTag("muPFIsoDepositNeutral" + postfix), 00116 pfPhotons = cms.InputTag("muPFIsoDepositGamma" + postfix) 00117 ) 00118 module.isolationValues = cms.PSet( 00119 pfChargedHadrons = cms.InputTag("muPFIsoValueCharged04"+ postfix), 00120 pfChargedAll = cms.InputTag("muPFIsoValueChargedAll04"+ postfix), 00121 pfPUChargedHadrons = cms.InputTag("muPFIsoValuePU04" + postfix), 00122 pfNeutralHadrons = cms.InputTag("muPFIsoValueNeutral04" + postfix), 00123 pfPhotons = cms.InputTag("muPFIsoValueGamma04" + postfix) 00124 ) 00125 # matching the pfMuons, not the standard muons. 00126 applyPostfix(process,"muonMatch",postfix).src = module.pfMuonSource 00127 00128 print " muon source:", module.pfMuonSource 00129 print " isolation :", 00130 print module.isolationValues 00131 print " isodeposits: " 00132 print module.isoDeposits 00133 print 00134
def pfTools::adaptPFPhotons | ( | process, | |
module | |||
) |
Definition at line 176 of file pfTools.py.
def pfTools::adaptPFTaus | ( | process, | |
tauType = 'shrinkingConePFTau' , |
|||
postfix = "" |
|||
) |
Definition at line 322 of file pfTools.py.
00323 : 00324 # Set up the collection used as a preselection to use this tau type 00325 if tauType != 'hpsPFTau' : 00326 reconfigurePF2PATTaus(process, tauType, postfix=postfix) 00327 else: 00328 reconfigurePF2PATTaus(process, tauType, 00329 ["DiscriminationByLooseCombinedIsolationDBSumPtCorr"], 00330 ["DiscriminationByDecayModeFinding"], 00331 postfix=postfix) 00332 # new default use unselected taus (selected only for jet cleaning) 00333 if tauType != 'hpsPFTau' : 00334 applyPostfix(process,"patTaus", postfix).tauSource = cms.InputTag("pfTausBase"+postfix) 00335 else: 00336 applyPostfix(process,"patTaus", postfix).tauSource = cms.InputTag("hpsPFTauProducer"+postfix) 00337 # to use preselected collection (old default) uncomment line below 00338 #applyPostfix(process,"patTaus", postfix).tauSource = cms.InputTag("pfTaus"+postfix) 00339 00340 00341 redoPFTauDiscriminators(process, 00342 cms.InputTag(tauType+'Producer'), 00343 applyPostfix(process,"patTaus", postfix).tauSource, 00344 tauType, postfix=postfix) 00345 00346 switchToPFTauByType(process, pfTauType=tauType, 00347 pfTauLabelNew=applyPostfix(process,"patTaus", postfix).tauSource, 00348 pfTauLabelOld=cms.InputTag(tauType+'Producer'), 00349 postfix=postfix) 00350 00351 applyPostfix(process,"makePatTaus", postfix).remove( 00352 applyPostfix(process,"patPFCandidateIsoDepositSelection", postfix) 00353 ) 00354 #helper function for PAT on PF2PAT sample
def pfTools::adaptPVs | ( | process, | |
pvCollection = cms.InputTag('offlinePrimaryVertices') , |
|||
postfix = '' |
|||
) |
Definition at line 515 of file pfTools.py.
00516 : 00517 00518 print "Switching PV collection for PF2PAT:", pvCollection 00519 print "***********************************" 00520 00521 # PV sources to be exchanged: 00522 pvExchange = ['Vertices','vertices','pvSrc','primaryVertices','srcPVs'] 00523 # PV sources NOT to be exchanged: 00524 #noPvExchange = ['src','PVProducer','primaryVertexSrc','vertexSrc','primaryVertex'] 00525 00526 # find out all added jet collections (they don't belong to PF2PAT) 00527 interPostfixes = [] 00528 for m in getattr(process,'patPF2PATSequence'+postfix).moduleNames(): 00529 if m.startswith('patJets') and m.endswith(postfix) and not len(m)==len('patJets')+len(postfix): 00530 interPostfix = m.replace('patJets','') 00531 interPostfix = interPostfix.replace(postfix,'') 00532 interPostfixes.append(interPostfix) 00533 00534 # exchange the primary vertex source of all relevant modules 00535 for m in getattr(process,'patPF2PATSequence'+postfix).moduleNames(): 00536 modName = m.replace(postfix,'') 00537 # only if the module has a source with a relevant name 00538 for namePvSrc in pvExchange: 00539 if hasattr(getattr(process,m),namePvSrc): 00540 # only if the module is not coming from an added jet collection 00541 interPostFixFlag = False 00542 for pfix in interPostfixes: 00543 if modName.endswith(pfix): 00544 interPostFixFlag = True 00545 break 00546 if not interPostFixFlag: 00547 setattr(getattr(process,m),namePvSrc,deepcopy(pvCollection)) 00548
def pfTools::addPFCandidates | ( | process, | |
src, | |||
patLabel = 'PFParticles' , |
|||
cut = "" , |
|||
postfix = "" |
|||
) |
Definition at line 360 of file pfTools.py.
00361 : 00362 from PhysicsTools.PatAlgos.producersLayer1.pfParticleProducer_cfi import patPFParticles 00363 # make modules 00364 producer = patPFParticles.clone(pfCandidateSource = src) 00365 filter = cms.EDFilter("PATPFParticleSelector", 00366 src = cms.InputTag("pat" + patLabel), 00367 cut = cms.string(cut)) 00368 counter = cms.EDFilter("PATCandViewCountFilter", 00369 minNumber = cms.uint32(0), 00370 maxNumber = cms.uint32(999999), 00371 src = cms.InputTag("pat" + patLabel)) 00372 # add modules to process 00373 setattr(process, "pat" + patLabel, producer) 00374 setattr(process, "selectedPat" + patLabel, filter) 00375 setattr(process, "countPat" + patLabel, counter) 00376 # insert into sequence 00377 getattr(process, "patDefaultSequence"+postfix).replace( 00378 applyPostfix(process, "patCandidateSummary", postfix), 00379 producer+applyPostfix(process, "patCandidateSummary", postfix) 00380 ) 00381 getattr(process, "patDefaultSequence"+postfix).replace( 00382 applyPostfix(process, "selectedPatCandidateSummary", postfix), 00383 filter+applyPostfix(process, "selectedPatCandidateSummary", postfix) 00384 ) 00385 index = len( applyPostfix( process, "patDefaultSequence", postfix ).moduleNames() ) 00386 applyPostfix( process, "patDefaultSequence", postfix ).insert( index, counter ) 00387 # summary tables 00388 applyPostfix(process, "patCandidateSummary", postfix).candidates.append(cms.InputTag('pat' + patLabel)) 00389 applyPostfix(process, "selectedPatCandidateSummary", postfix).candidates.append(cms.InputTag('selectedPat' + patLabel)) 00390
def pfTools::reconfigurePF2PATTaus | ( | process, | |
tauType = 'shrinkingConePFTau' , |
|||
pf2patSelection = ["DiscriminationByIsolation" , |
|||
DiscriminationByLeadingPionPtCut, | |||
selectionDependsOn = ["DiscriminationByLeadingTrackFinding"] , |
|||
producerFromType = lambda producer: producer+"Producer" , |
|||
postfix = "" |
|||
) |
Definition at line 181 of file pfTools.py.
00185 : producer+"Producer", 00186 postfix = ""): 00187 print "patTaus will be produced from taus of type: %s that pass %s" \ 00188 % (tauType, pf2patSelection) 00189 00190 #get baseSequence 00191 baseSequence = getattr(process,"pfTausBaseSequence"+postfix) 00192 #clean baseSequence from old modules 00193 for oldBaseModuleName in baseSequence.moduleNames(): 00194 oldBaseModule = getattr(process,oldBaseModuleName) 00195 baseSequence.remove(oldBaseModule) 00196 00197 # Get the prototype of tau producer to make, i.e. fixedConePFTauProducer 00198 producerName = producerFromType(tauType) 00199 # Set as the source for the pf2pat taus (pfTaus) selector 00200 applyPostfix(process,"pfTaus", postfix).src = producerName+postfix 00201 # Start our pf2pat taus base sequence 00202 oldTauSansRefs = getattr(process,'pfTausProducerSansRefs'+postfix) 00203 oldTau = getattr(process,'pfTausProducer'+postfix) 00204 ## copy tau and setup it properly 00205 newTauSansRefs = None 00206 newTau = getattr(process,producerName).clone() 00207 ## adapted to new structure in RecoTauProducers PLEASE CHECK!!! 00208 if tauType=='shrinkingConePFTau': 00209 newTauSansRefs = getattr(process,producerName+"SansRefs").clone() 00210 newTauSansRefs.modifiers[1] = cms.PSet( 00211 pfTauTagInfoSrc = cms.InputTag("pfTauTagInfoProducer"+postfix), 00212 name = cms.string('pfTauTTIworkaround'+postfix), 00213 plugin = cms.string('RecoTauTagInfoWorkaroundModifer') 00214 ) 00215 newTau.modifiers[1] = newTauSansRefs.modifiers[1] 00216 newTauSansRefs.piZeroSrc = "pfJetsLegacyTaNCPiZeros"+postfix 00217 newTau.piZeroSrc = newTauSansRefs.piZeroSrc 00218 newTauSansRefs.builders[0].pfCandSrc = oldTauSansRefs.builders[0].pfCandSrc 00219 newTauSansRefs.jetRegionSrc = oldTauSansRefs.jetRegionSrc 00220 newTauSansRefs.jetSrc = oldTauSansRefs.jetSrc 00221 elif tauType=='fixedConePFTau': 00222 newTau.piZeroSrc = "pfJetsLegacyTaNCPiZeros"+postfix 00223 elif tauType=='hpsPFTau': 00224 newTau = process.combinatoricRecoTaus.clone() 00225 newTau.piZeroSrc="pfJetsLegacyHPSPiZeros"+postfix 00226 newTau.modifiers[3] = cms.PSet( 00227 pfTauTagInfoSrc = cms.InputTag("pfTauTagInfoProducer"+postfix), 00228 name = cms.string('pfTauTTIworkaround'+postfix), 00229 plugin = cms.string('RecoTauTagInfoWorkaroundModifer') 00230 ) 00231 from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet 00232 cloneProcessingSnippet(process, process.produceHPSPFTaus, postfix) 00233 massSearchReplaceParam(getattr(process,"produceHPSPFTaus"+postfix), 00234 "PFTauProducer", 00235 cms.InputTag("combinatoricRecoTaus"), 00236 cms.InputTag("pfTausBase"+postfix) ) 00237 massSearchReplaceParam(getattr(process,"produceHPSPFTaus"+postfix), 00238 "src", 00239 cms.InputTag("combinatoricRecoTaus"), 00240 cms.InputTag("pfTausBase"+postfix) ) 00241 00242 newTau.builders[0].pfCandSrc = oldTau.builders[0].pfCandSrc 00243 newTau.jetRegionSrc = oldTau.jetRegionSrc 00244 newTau.jetSrc = oldTau.jetSrc 00245 00246 # replace old tau producer by new one put it into baseSequence 00247 setattr(process,"pfTausBase"+postfix,newTau) 00248 if tauType=='shrinkingConePFTau': 00249 setattr(process,"pfTausBaseSansRefs"+postfix,newTauSansRefs) 00250 getattr(process,"pfTausBase"+postfix).src = "pfTausBaseSansRefs"+postfix 00251 baseSequence += getattr(process,"pfTausBaseSansRefs"+postfix) 00252 baseSequence += getattr(process,"pfTausBase"+postfix) 00253 if tauType=='hpsPFTau': 00254 baseSequence += getattr(process,"produceHPSPFTaus"+postfix) 00255 #make custom mapper to take postfix into account (could have gone with lambda of lambda but... ) 00256 def producerIsTauTypeMapperWithPostfix(tauProducer): 00257 return lambda x: producerIsTauTypeMapper(tauProducer)+x.group(1)+postfix 00258 00259 def recoTauTypeMapperWithGroup(tauProducer): 00260 return "%s(.*)"%recoTauTypeMapper(tauProducer) 00261 00262 # Get our prediscriminants 00263 for predisc in selectionDependsOn: 00264 # Get the prototype 00265 originalName = tauType+predisc # i.e. fixedConePFTauProducerDiscriminationByLeadingTrackFinding 00266 clonedName = "pfTausBase"+predisc+postfix 00267 clonedDisc = getattr(process, originalName).clone() 00268 # Register in our process 00269 setattr(process, clonedName, clonedDisc) 00270 baseSequence += getattr(process, clonedName) 00271 00272 tauCollectionToSelect = None 00273 if tauType != 'hpsPFTau' : 00274 tauCollectionToSelect = "pfTausBase"+postfix 00275 #cms.InputTag(clonedDisc.PFTauProducer.value()+postfix) 00276 else: 00277 tauCollectionToSelect = "hpsPFTauProducer"+postfix 00278 # Adapt this discriminator for the cloned prediscriminators 00279 adaptTauDiscriminator(clonedDisc, newTauProducer="pfTausBase", 00280 oldTauTypeMapper=recoTauTypeMapperWithGroup, 00281 newTauTypeMapper=producerIsTauTypeMapperWithPostfix, 00282 preservePFTauProducer=True) 00283 clonedDisc.PFTauProducer = tauCollectionToSelect 00284 00285 # Reconfigure the pf2pat PFTau selector discrimination sources 00286 applyPostfix(process,"pfTaus", postfix).discriminators = cms.VPSet() 00287 for selection in pf2patSelection: 00288 # Get our discriminator that will be used to select pfTaus 00289 originalName = tauType+selection 00290 clonedName = "pfTausBase"+selection+postfix 00291 clonedDisc = getattr(process, originalName).clone() 00292 # Register in our process 00293 setattr(process, clonedName, clonedDisc) 00294 00295 tauCollectionToSelect = None 00296 00297 if tauType != 'hpsPFTau' : 00298 tauCollectionToSelect = cms.InputTag("pfTausBase"+postfix) 00299 #cms.InputTag(clonedDisc.PFTauProducer.value()+postfix) 00300 else: 00301 tauCollectionToSelect = cms.InputTag("hpsPFTauProducer"+postfix) 00302 #Adapt our cloned discriminator to the new prediscriminants 00303 adaptTauDiscriminator(clonedDisc, newTauProducer="pfTausBase", 00304 oldTauTypeMapper=recoTauTypeMapperWithGroup, 00305 newTauTypeMapper=producerIsTauTypeMapperWithPostfix, 00306 preservePFTauProducer=True) 00307 clonedDisc.PFTauProducer = tauCollectionToSelect 00308 baseSequence += clonedDisc 00309 # Add this selection to our pfTau selectors 00310 applyPostfix(process,"pfTaus", postfix).discriminators.append(cms.PSet( 00311 discriminator=cms.InputTag(clonedName), selectionCut=cms.double(0.5))) 00312 # Set the input of the final selector. 00313 if tauType != 'hpsPFTau': 00314 applyPostfix(process,"pfTaus", postfix).src = "pfTausBase"+postfix 00315 else: 00316 # If we are using HPS taus, we need to take the output of the clenaed 00317 # collection 00318 applyPostfix(process,"pfTaus", postfix).src = "hpsPFTauProducer"+postfix 00319 00320 00321
def pfTools::removeMCMatchingPF2PAT | ( | process, | |
postfix = "" , |
|||
outputModules = ['out'] |
|||
) |
Definition at line 509 of file pfTools.py.
def pfTools::switchToPFJets | ( | process, | |
input = cms.InputTag('pfNoTau') , |
|||
algo = 'AK5' , |
|||
postfix = "" , |
|||
jetCorrections = ('AK5PFchs', ['L1FastJet' , |
|||
L2Relative, | |||
L3Absolute, | |||
type1 = False , |
|||
outputModules = ['out'] |
|||
) |
Definition at line 447 of file pfTools.py.
00448 : 00449 00450 print "Switching to PFJets, ", algo 00451 print "************************ " 00452 print "input collection: ", input 00453 00454 if( algo == 'IC5' ): 00455 genJetCollection = cms.InputTag('iterativeCone5GenJetsNoNu') 00456 elif algo == 'AK5': 00457 genJetCollection = cms.InputTag('ak5GenJetsNoNu') 00458 elif algo == 'AK7': 00459 genJetCollection = cms.InputTag('ak7GenJetsNoNu') 00460 else: 00461 print 'bad jet algorithm:', algo, '! for now, only IC5, AK5 and AK7 are allowed. If you need other algorithms, please contact Colin' 00462 sys.exit(1) 00463 00464 # changing the jet collection in PF2PAT: 00465 from CommonTools.ParticleFlow.Tools.jetTools import jetAlgo 00466 inputCollection = getattr(process,"pfJets"+postfix).src 00467 setattr(process,"pfJets"+postfix,jetAlgo(algo)) # problem for cfgBrowser 00468 getattr(process,"pfJets"+postfix).src = inputCollection 00469 inputJetCorrLabel=jetCorrections 00470 switchJetCollection(process, 00471 input, 00472 jetIdLabel = algo, 00473 doJTA=True, 00474 doBTagging=True, 00475 jetCorrLabel=inputJetCorrLabel, 00476 doType1MET=type1, 00477 genJetCollection = genJetCollection, 00478 doJetID = True, 00479 postfix = postfix, 00480 outputModules = outputModules 00481 ) 00482 # check whether L1FastJet is in the list of correction levels or not 00483 applyPostfix(process, "patJetCorrFactors", postfix).useRho = False 00484 for corr in inputJetCorrLabel[1]: 00485 if corr == 'L1FastJet': 00486 applyPostfix(process, "patJetCorrFactors", postfix).useRho = True 00487 applyPostfix(process, "pfJets", postfix).doAreaFastjet = True 00488 # do correct treatment for TypeI MET corrections 00489 if type1: 00490 for mod in getattr(process,'patPF2PATSequence'+postfix).moduleNames(): 00491 if mod.startswith("kt6"): 00492 prefix = mod.replace(postfix,'') 00493 prefix = prefix.replace('kt6PFJets','') 00494 prefix = prefix.replace('kt6CaloJets','') 00495 prefix = getattr(process,'patJetCorrFactors'+prefix+postfix).payload.pythonValue().replace("'","") 00496 for essource in process.es_sources_().keys(): 00497 if essource == prefix+'L1FastJet': 00498 setattr(process,essource+postfix,getattr(process,essource).clone(srcRho=cms.InputTag(mod,'rho'))) 00499 setattr(process,prefix+'CombinedCorrector'+postfix,getattr(process,prefix+'CombinedCorrector').clone()) 00500 getattr(process,prefix+'CorMet'+postfix).corrector = prefix+'CombinedCorrector'+postfix 00501 for cor in getattr(process,prefix+'CombinedCorrector'+postfix).correctors: 00502 if cor == essource: 00503 idx = getattr(process,prefix+'CombinedCorrector'+postfix).correctors.index(essource); 00504 getattr(process,prefix+'CombinedCorrector'+postfix).correctors[idx] = essource+postfix 00505 00506 applyPostfix(process, "patJets", postfix).embedCaloTowers = False 00507 applyPostfix(process, "patJets", postfix).embedPFCandidates = True 00508 #-- Remove MC dependence ------------------------------------------------------
def pfTools::switchToPFMET | ( | process, | |
input = cms.InputTag('pfMET') , |
|||
type1 = False , |
|||
postfix = "" |
|||
) |
Definition at line 391 of file pfTools.py.
00392 : 00393 print 'MET: using ', input 00394 if( not type1 ): 00395 oldMETSource = applyPostfix(process, "patMETs",postfix).metSource 00396 applyPostfix(process, "patMETs",postfix).metSource = input 00397 applyPostfix(process, "patMETs",postfix).addMuonCorrections = False 00398 getattr(process, "patDefaultSequence"+postfix).remove(applyPostfix(process, "patMETCorrections",postfix)) 00399 else: 00400 # type1 corrected MET 00401 # name of corrected MET hardcoded in PAT and meaningless 00402 print 'Apply TypeI corrections for MET' 00403 getattr(process, "patDefaultSequence"+postfix).remove(applyPostfix(process, "makePatMETs",postfix)) 00404 jecLabel = getattr(process,'patJetCorrFactors'+postfix).levels 00405 00406 if not hasattr(process,'producePatPFMETCorrections'): 00407 process.load("PhysicsTools.PatUtils.patPFMETCorrections_cff") 00408 #here add to the current path and give proper postfix 00409 if not hasattr(process,'producePatPFMETCorrections'+postfix): 00410 cloneProcessingSnippet(process,process.producePatPFMETCorrections,postfix) 00411 00412 getattr(process,'patPFMet'+postfix).metSource = cms.InputTag('pfMET'+postfix) 00413 00414 getattr(process,'selectedPatJetsForMETtype1p2Corr'+postfix).src = cms.InputTag('selectedPatJets'+postfix) 00415 getattr(process,'selectedPatJetsForMETtype2Corr'+postfix).src = cms.InputTag('selectedPatJets'+postfix) 00416 00417 getattr(process,'pfCandMETcorr'+postfix).src = cms.InputTag('pfNoJet'+postfix) 00418 00419 getattr(process,'patPFJetMETtype1p2Corr'+postfix).offsetCorrLabel = cms.string(jecLabel[0]) 00420 getattr(process,'patPFJetMETtype1p2Corr'+postfix).jetCorrLabel = cms.string(jecLabel[-1]) 00421 getattr(process,'patPFJetMETtype1p2Corr'+postfix).type1JetPtThreshold = cms.double(10.0) 00422 getattr(process,'patPFJetMETtype1p2Corr'+postfix).skipEM = cms.bool(False) 00423 getattr(process,'patPFJetMETtype1p2Corr'+postfix).skipMuons = cms.bool(False) 00424 00425 getattr(process,'patPFJetMETtype2Corr'+postfix).offsetCorrLabel = cms.string(jecLabel[0]) 00426 getattr(process,'patPFJetMETtype2Corr'+postfix).jetCorrLabel = cms.string(jecLabel[-1]) 00427 getattr(process,'patPFJetMETtype2Corr'+postfix).type1JetPtThreshold = cms.double(10.0) 00428 getattr(process,'patPFJetMETtype2Corr'+postfix).skipEM = cms.bool(False) 00429 getattr(process,'patPFJetMETtype2Corr'+postfix).skipMuons = cms.bool(False) 00430 00431 getattr(process,'patType1CorrectedPFMet'+postfix).srcType1Corrections = cms.VInputTag( 00432 cms.InputTag("patPFJetMETtype1p2Corr"+postfix,"type1"), 00433 #cms.InputTag("patPFMETtype0Corr"+postfix), 00434 ) 00435 getattr(process,'patType1p2CorrectedPFMet'+postfix).srcType1Corrections = cms.VInputTag( 00436 cms.InputTag("patPFJetMETtype1p2Corr"+postfix,"type1"), 00437 #cms.InputTag("patPFMETtype0Corr"+postfix), 00438 ) 00439 00440 getattr(process,'patMETs'+postfix).metSource = 'patType1CorrectedPFMet'+postfix 00441 00442 getattr(process,"patDefaultSequence"+postfix).replace( getattr(process,'selectedPatJets'+postfix), 00443 getattr(process,'selectedPatJets'+postfix) 00444 *getattr(process,'producePatPFMETCorrections'+postfix) 00445 *getattr(process,'patMETs'+postfix) 00446 )
def pfTools::tauTypeInPF2PAT | ( | process, | |
tauType = 'shrinkingConePFTau' , |
|||
postfix = "" |
|||
) |
Definition at line 355 of file pfTools.py.
def pfTools::useGsfElectrons | ( | process, | |
postfix, | |||
dR = "04" |
|||
) |
Definition at line 34 of file pfTools.py.
00035 : 00036 print "using Gsf Electrons in PF2PAT" 00037 print "WARNING: this will destory the feature of top projection which solves the ambiguity between leptons and jets because" 00038 print "WARNING: there will be overlap between non-PF electrons and jets even though top projection is ON!" 00039 print "********************* " 00040 module = applyPostfix(process,"patElectrons",postfix) 00041 module.useParticleFlow = False 00042 print "Building particle-based isolation for GsfElectrons in PF2PAT(PFBRECO)" 00043 print "********************* " 00044 adaptPFIsoElectrons( process, module, postfix+"PFIso", dR ) 00045 getattr(process,'patDefaultSequence'+postfix).replace( getattr(process,"patElectrons"+postfix), 00046 setupPFElectronIso(process, 'gsfElectrons', "PFIso", postfix, runPF2PAT=True) + 00047 getattr(process,"patElectrons"+postfix) )
def pfTools::usePF2PAT | ( | process, | |
runPF2PAT = True , |
|||
jetAlgo = 'AK5' , |
|||
runOnMC = True , |
|||
postfix = "" , |
|||
jetCorrections = ('AK5PFchs', ['L1FastJet' , |
|||
L2Relative, | |||
L3Absolute, | |||
pvCollection = cms.InputTag('offlinePrimaryVertices') , |
|||
typeIMetCorrections = False , |
|||
outputModules = ['out'] |
|||
) |
Switch PAT to use PF2PAT instead of AOD sources. if 'runPF2PAT' is true, we'll also add PF2PAT in front of the PAT sequence
Definition at line 549 of file pfTools.py.
00550 : 00551 # PLEASE DO NOT CLOBBER THIS FUNCTION WITH CODE SPECIFIC TO A GIVEN PHYSICS OBJECT. 00552 # CREATE ADDITIONAL FUNCTIONS IF NEEDED. 00553 00554 """Switch PAT to use PF2PAT instead of AOD sources. if 'runPF2PAT' is true, we'll also add PF2PAT in front of the PAT sequence""" 00555 00556 # -------- CORE --------------- 00557 if runPF2PAT: 00558 process.load("CommonTools.ParticleFlow.PF2PAT_cff") 00559 #add Pf2PAT *before* cloning so that overlapping modules are cloned too 00560 #process.patDefaultSequence.replace( process.patCandidates, process.PF2PAT+process.patCandidates) 00561 process.patPF2PATSequence = cms.Sequence( process.PF2PAT + process.patDefaultSequence) 00562 else: 00563 process.patPF2PATSequence = cms.Sequence( process.patDefaultSequence ) 00564 00565 if not postfix == "": 00566 from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet 00567 cloneProcessingSnippet(process, process.patPF2PATSequence, postfix) 00568 #delete everything pat PF2PAT modules! if you want to test the postfixing for completeness 00569 #from PhysicsTools.PatAlgos.tools.helpers import listModules,listSequences 00570 #for module in listModules(process.patDefaultSequence): 00571 # if not module.label() is None: process.__delattr__(module.label()) 00572 #for sequence in listSequences(process.patDefaultSequence): 00573 # if not sequence.label() is None: process.__delattr__(sequence.label()) 00574 #del process.patDefaultSequence 00575 00576 removeCleaning(process, postfix=postfix, outputModules=outputModules) 00577 00578 # -------- OBJECTS ------------ 00579 # Muons 00580 adaptPFMuons(process, 00581 applyPostfix(process,"patMuons",postfix), 00582 postfix) 00583 00584 # Electrons 00585 adaptPFElectrons(process, 00586 applyPostfix(process,"patElectrons",postfix), 00587 postfix) 00588 00589 # Photons 00590 print "Temporarily switching off photons completely" 00591 00592 removeSpecificPATObjects(process,names=['Photons'],outputModules=outputModules,postfix=postfix) 00593 removeIfInSequence(process,"patPhotonIsolation","patDefaultSequence",postfix) 00594 00595 # Jets 00596 if runOnMC : 00597 switchToPFJets( process, cms.InputTag('pfNoTau'+postfix), jetAlgo, postfix=postfix, 00598 jetCorrections=jetCorrections, type1=typeIMetCorrections, outputModules=outputModules ) 00599 applyPostfix(process,"patDefaultSequence",postfix).replace( 00600 applyPostfix(process,"patJetGenJetMatch",postfix), 00601 getattr(process,"genForPF2PATSequence") * 00602 applyPostfix(process,"patJetGenJetMatch",postfix) 00603 ) 00604 else : 00605 if not 'L2L3Residual' in jetCorrections[1]: 00606 print '#################################################' 00607 print 'WARNING! Not using L2L3Residual but this is data.' 00608 print 'If this is okay with you, disregard this message.' 00609 print '#################################################' 00610 switchToPFJets( process, cms.InputTag('pfNoTau'+postfix), jetAlgo, postfix=postfix, 00611 jetCorrections=jetCorrections, type1=typeIMetCorrections, outputModules=outputModules ) 00612 00613 # Taus 00614 #adaptPFTaus( process, tauType='shrinkingConePFTau', postfix=postfix ) 00615 #adaptPFTaus( process, tauType='fixedConePFTau', postfix=postfix ) 00616 adaptPFTaus( process, tauType='hpsPFTau', postfix=postfix ) 00617 00618 # MET 00619 switchToPFMET(process, cms.InputTag('pfMET'+postfix), type1=typeIMetCorrections, postfix=postfix) 00620 if not runOnMC : 00621 if hasattr(process,'patPFMet'+postfix): 00622 getattr(process,'patPFMet'+postfix).addGenMET = cms.bool(False) 00623 00624 # Unmasked PFCandidates 00625 addPFCandidates(process,cms.InputTag('pfNoJet'+postfix),patLabel='PFParticles'+postfix,cut="",postfix=postfix) 00626 00627 # adapt primary vertex collection 00628 adaptPVs(process, pvCollection=pvCollection, postfix=postfix) 00629 00630 if runOnMC: 00631 process.load("CommonTools.ParticleFlow.genForPF2PAT_cff") 00632 getattr(process, "patDefaultSequence"+postfix).replace( 00633 applyPostfix(process,"patCandidates",postfix), 00634 process.genForPF2PATSequence+applyPostfix(process,"patCandidates",postfix) 00635 ) 00636 else: 00637 removeMCMatchingPF2PAT(process,postfix=postfix,outputModules=outputModules) 00638 00639 print "Done: PF2PAT interfaced to PAT, postfix=", postfix
def pfTools::usePFIso | ( | process, | |
postfix = "PFIso" |
|||
) |
Definition at line 89 of file pfTools.py.
00090 : 00091 print "Building particle-based isolation " 00092 print "***************** " 00093 process.eleIsoSequence = setupPFElectronIso(process, 'gsfElectrons', postfix) 00094 process.muIsoSequence = setupPFMuonIso(process, 'muons', postfix) 00095 adaptPFIsoMuons( process, applyPostfix(process,"patMuons",""), postfix) 00096 adaptPFIsoElectrons( process, applyPostfix(process,"patElectrons",""), postfix) 00097 getattr(process,'patDefaultSequence').replace( getattr(process,"patCandidates"), 00098 process.pfParticleSelectionSequence + 00099 process.eleIsoSequence + 00100 process.muIsoSequence + 00101 getattr(process,"patCandidates") )
def pfTools::warningIsolation | ( | ) |
Definition at line 29 of file pfTools.py.