249 algo, rParam, btagDiscriminators, btagInfos, patJets, labelName, btagPrefix, postfix):
254 discriminators = set(btagDiscriminators)
255 present_metaSet = discriminators.intersection(set(supportedMetaDiscr.keys()))
256 discriminators -= present_metaSet
257 for meta_tagger
in present_metaSet:
258 for src
in supportedMetaDiscr[meta_tagger]:
259 discriminators.add(src)
260 present_meta = sorted(present_metaSet)
261 btagDiscriminators = sorted(discriminators)
265 requiredTagInfos = list(btagInfos)
266 for btagDiscr
in btagDiscriminators :
267 for tagInfoList
in supportedBtagDiscr[btagDiscr] :
268 for requiredTagInfo
in tagInfoList :
269 tagInfoCovered =
False 270 for tagInfo
in requiredTagInfos :
271 if requiredTagInfo == tagInfo :
272 tagInfoCovered =
True 274 if not tagInfoCovered :
275 requiredTagInfos.append(requiredTagInfo)
277 if hasattr( process,
'candidateJetProbabilityComputer' ) ==
False :
279 process.load(
"RecoBTag.ImpactParameter.impactParameter_cff")
280 task.add(process.impactParameterTask)
281 process.load(
"RecoBTag.SecondaryVertex.secondaryVertex_cff")
282 task.add(process.secondaryVertexTask)
283 process.load(
"RecoBTag.SoftLepton.softLepton_cff")
284 task.add(process.softLeptonTask)
285 process.load(
"RecoBTag.Combined.combinedMVA_cff")
286 task.add(process.combinedMVATask)
287 process.load(
"RecoBTag.CTagging.cTagging_cff")
288 task.add(process.cTaggingTask)
290 process.load(
"RecoBTag.ImpactParameter.impactParameter_EventSetup_cff")
291 process.load(
"RecoBTag.SecondaryVertex.secondaryVertex_EventSetup_cff")
292 process.load(
"RecoBTag.SoftLepton.softLepton_EventSetup_cff")
293 process.load(
"RecoBTag.Combined.combinedMVA_EventSetup_cff")
294 process.load(
"RecoBTag.CTagging.cTagging_EventSetup_cff")
296 import RecoJets.JetProducers.caTopTaggers_cff
as toptag
300 sys.stderr.write(
"-------------------------------------------------------------------\n")
301 sys.stderr.write(
" Warning: For a complete switch to the legacy tight b-tag track\n")
302 sys.stderr.write(
" selection, please also enable the \'runIVF\' switch.\n")
303 sys.stderr.write(
"-------------------------------------------------------------------\n")
305 sys.stderr.write(
"-------------------------------------------------------------------\n")
306 sys.stderr.write(
" Warning: With the tight b-tag track selection enabled, it is\n")
307 sys.stderr.write(
" advisable to set \'btagPrefix\' to a non-empty string to\n")
308 sys.stderr.write(
" avoid unintentional modifications to the default\n")
309 sys.stderr.write(
" b tagging setup that might be loaded in the same job.\n")
310 sys.stderr.write(
"-------------------------------------------------------------------\n")
314 svSourceCvsL = copy.deepcopy(svSource)
315 svSourceCvsL.setModuleLabel(svSource.getModuleLabel()+
'CvsL')
318 runIVFforCTagOnly =
False 319 ivfcTagInfos = [
'pfInclusiveSecondaryVertexFinderCvsLTagInfos',
'pfInclusiveSecondaryVertexFinderNegativeCvsLTagInfos']
321 if pvSource.getModuleLabel() ==
'offlineSlimmedPrimaryVertices' and any(i
in requiredTagInfos
for i
in ivfcTagInfos)
and not runIVF:
322 runIVFforCTagOnly =
True 324 sys.stderr.write(
"-------------------------------------------------------------------\n")
325 sys.stderr.write(
" Info: To run c tagging on MiniAOD, c-tag-specific IVF secondary\n")
326 sys.stderr.write(
" vertices will be remade.\n")
327 sys.stderr.write(
"-------------------------------------------------------------------\n")
329 if runIVF
and btagPrefix !=
'':
330 if runIVFforCTagOnly:
331 svSourceCvsL.setModuleLabel(btagPrefix+svSourceCvsL.getModuleLabel())
333 svSource.setModuleLabel(btagPrefix+svSource.getModuleLabel())
334 svSourceCvsL.setModuleLabel(btagPrefix+svSourceCvsL.getModuleLabel())
340 runNegativeVertexing =
False 341 runNegativeCvsLVertexing =
False 342 for btagInfo
in requiredTagInfos:
344 'pfInclusiveSecondaryVertexFinderNegativeTagInfos',
345 'pfNegativeDeepFlavourTagInfos',
346 'pfNegativeParticleNetAK4TagInfos',
348 runNegativeVertexing =
True 349 if btagInfo ==
'pfInclusiveSecondaryVertexFinderNegativeCvsLTagInfos':
350 runNegativeCvsLVertexing =
True 352 if runNegativeVertexing
or runNegativeCvsLVertexing:
353 import RecoVertex.AdaptiveVertexFinder.inclusiveNegativeVertexing_cff
as NegVertex
355 if runNegativeVertexing:
357 NegVertex.inclusiveCandidateNegativeVertexFinder.clone(primaryVertices = pvSource,tracks=pfCandidates),
360 NegVertex.candidateNegativeVertexMerger.clone(secondaryVertices = cms.InputTag(btagPrefix+
'inclusiveCandidateNegativeVertexFinder'+labelName+postfix)),
363 NegVertex.candidateNegativeVertexArbitrator.clone( secondaryVertices = cms.InputTag(btagPrefix+
'candidateNegativeVertexMerger'+labelName+postfix)
364 ,primaryVertices = pvSource
365 ,tracks=pfCandidates),
367 addToProcessAndTask(btagPrefix+
'inclusiveCandidateNegativeSecondaryVertices'+labelName+postfix,
368 NegVertex.inclusiveCandidateNegativeSecondaryVertices.clone(secondaryVertices = cms.InputTag(btagPrefix+
'candidateNegativeVertexArbitrator'+labelName+postfix)),
371 if runNegativeCvsLVertexing:
372 addToProcessAndTask(btagPrefix+
'inclusiveCandidateNegativeVertexFinderCvsL'+labelName+postfix,
373 NegVertex.inclusiveCandidateNegativeVertexFinderCvsL.clone(primaryVertices = pvSource,tracks=pfCandidates),
376 NegVertex.candidateNegativeVertexMergerCvsL.clone(secondaryVertices = cms.InputTag(btagPrefix+
'inclusiveCandidateNegativeVertexFinderCvsL'+labelName+postfix)),
379 NegVertex.candidateNegativeVertexArbitratorCvsL.clone( secondaryVertices = cms.InputTag(btagPrefix+
'candidateNegativeVertexMergerCvsL'+labelName+postfix)
380 ,primaryVertices = pvSource
381 ,tracks=pfCandidates),
383 addToProcessAndTask(btagPrefix+
'inclusiveCandidateNegativeSecondaryVerticesCvsL'+labelName+postfix,
384 NegVertex.inclusiveCandidateNegativeSecondaryVerticesCvsL.clone(secondaryVertices = cms.InputTag(btagPrefix+
'candidateNegativeVertexArbitratorCvsL'+labelName+postfix)),
388 acceptedTagInfos = list()
389 for btagInfo
in requiredTagInfos:
390 if hasattr(btag,btagInfo):
391 if btagInfo ==
'pfImpactParameterTagInfos':
393 btag.pfImpactParameterTagInfos.clone(jets = jetSource,primaryVertex=pvSource,candidates=pfCandidates),
396 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
397 _btagInfo.explicitJTA = cms.bool(explicitJTA)
399 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
400 _btagInfo.minimumNumberOfPixelHits = cms.int32(2)
401 _btagInfo.minimumNumberOfHits = cms.int32(8)
402 if btagInfo ==
'pfImpactParameterAK8TagInfos':
404 btag.pfImpactParameterAK8TagInfos.clone(jets = jetSource,primaryVertex=pvSource,candidates=pfCandidates),
407 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
408 _btagInfo.explicitJTA = cms.bool(explicitJTA)
410 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
411 _btagInfo.minimumNumberOfPixelHits = cms.int32(2)
412 _btagInfo.minimumNumberOfHits = cms.int32(8)
413 if btagInfo ==
'pfImpactParameterCA15TagInfos':
415 btag.pfImpactParameterCA15TagInfos.clone(jets = jetSource,primaryVertex=pvSource,candidates=pfCandidates),
418 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
419 _btagInfo.explicitJTA = cms.bool(explicitJTA)
421 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
422 _btagInfo.minimumNumberOfPixelHits = cms.int32(2)
423 _btagInfo.minimumNumberOfHits = cms.int32(8)
424 if btagInfo ==
'pfSecondaryVertexTagInfos':
426 btag.pfSecondaryVertexTagInfos.clone(
427 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix)),
430 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
431 _btagInfo.trackSelection.pixelHitsMin = cms.uint32(2)
432 _btagInfo.trackSelection.totalHitsMin = cms.uint32(8)
433 if btagInfo ==
'pfDeepCSVTagInfos':
435 btag.pfDeepCSVTagInfos.clone(
436 svTagInfos = cms.InputTag(btagPrefix+
'pfInclusiveSecondaryVertexFinderTagInfos'+labelName+postfix)),
438 if svClustering
or fatJets != cms.InputTag(
''):
439 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
440 if btagInfo ==
'pfDeepCSVNegativeTagInfos':
442 btag.pfDeepCSVNegativeTagInfos.clone(
443 svTagInfos = cms.InputTag(btagPrefix+
'pfInclusiveSecondaryVertexFinderNegativeTagInfos'+labelName+postfix)),
445 if svClustering
or fatJets != cms.InputTag(
''):
446 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
447 if btagInfo ==
'pfDeepCSVPositiveTagInfos':
449 btag.pfDeepCSVPositiveTagInfos.clone(
450 svTagInfos = cms.InputTag(btagPrefix+
'pfInclusiveSecondaryVertexFinderTagInfos'+labelName+postfix)),
452 if svClustering
or fatJets != cms.InputTag(
''):
453 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
454 if btagInfo ==
'pfDeepCMVATagInfos':
456 btag.pfDeepCMVATagInfos.clone(
457 deepNNTagInfos = cms.InputTag(btagPrefix+
'pfDeepCSVTagInfos'+labelName+postfix),
458 ipInfoSrc = cms.InputTag(btagPrefix+
"pfImpactParameterTagInfos"+labelName+postfix),
459 muInfoSrc = cms.InputTag(btagPrefix+
"softPFMuonsTagInfos"+labelName+postfix),
460 elInfoSrc = cms.InputTag(btagPrefix+
"softPFElectronsTagInfos"+labelName+postfix)),
462 if svClustering
or fatJets != cms.InputTag(
''):
463 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
464 if btagInfo ==
'pfDeepCMVANegativeTagInfos':
466 btag.pfDeepCMVATagInfos.clone(
467 deepNNTagInfos = cms.InputTag(btagPrefix+
'pfDeepCSVTagInfos'+labelName+postfix),
468 ipInfoSrc = cms.InputTag(btagPrefix+
"pfImpactParameterTagInfos"+labelName+postfix),
469 muInfoSrc = cms.InputTag(btagPrefix+
"softPFMuonsTagInfos"+labelName+postfix),
470 elInfoSrc = cms.InputTag(btagPrefix+
"softPFElectronsTagInfos"+labelName+postfix)),
472 if svClustering
or fatJets != cms.InputTag(
''):
473 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
474 if btagInfo ==
'pfDeepCMVAPositiveTagInfos':
476 btag.pfDeepCMVATagInfos.clone(
477 deepNNTagInfos = cms.InputTag(btagPrefix+
'pfDeepCSVTagInfos'+labelName+postfix),
478 ipInfoSrc = cms.InputTag(btagPrefix+
"pfImpactParameterTagInfos"+labelName+postfix),
479 muInfoSrc = cms.InputTag(btagPrefix+
"softPFMuonsTagInfos"+labelName+postfix),
480 elInfoSrc = cms.InputTag(btagPrefix+
"softPFElectronsTagInfos"+labelName+postfix)),
482 if svClustering
or fatJets != cms.InputTag(
''):
483 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
484 if btagInfo ==
'pfInclusiveSecondaryVertexFinderTagInfos':
486 btag.pfInclusiveSecondaryVertexFinderTagInfos.clone(
487 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix),
488 extSVCollection=svSource),
490 if svClustering
or fatJets != cms.InputTag(
''):
491 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
492 if btagInfo ==
'pfInclusiveSecondaryVertexFinderAK8TagInfos':
494 btag.pfInclusiveSecondaryVertexFinderAK8TagInfos.clone(
495 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterAK8TagInfos'+labelName+postfix),
496 extSVCollection=svSource),
498 if svClustering
or fatJets != cms.InputTag(
''):
499 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
500 if btagInfo ==
'pfBoostedDoubleSVAK8TagInfos':
502 btag.pfBoostedDoubleSVAK8TagInfos.clone(
503 svTagInfos = cms.InputTag(btagPrefix+
'pfInclusiveSecondaryVertexFinderAK8TagInfos'+labelName+postfix)),
505 if btagInfo ==
'pfInclusiveSecondaryVertexFinderCA15TagInfos':
507 btag.pfInclusiveSecondaryVertexFinderCA15TagInfos.clone(
508 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterCA15TagInfos'+labelName+postfix),
509 extSVCollection=svSource),
511 if svClustering
or fatJets != cms.InputTag(
''):
512 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
513 if btagInfo ==
'pfBoostedDoubleSVCA15TagInfos':
515 btag.pfBoostedDoubleSVCA15TagInfos.clone(
516 svTagInfos = cms.InputTag(btagPrefix+
'pfInclusiveSecondaryVertexFinderCA15TagInfos'+labelName+postfix)),
518 if btagInfo ==
'pfInclusiveSecondaryVertexFinderCvsLTagInfos':
520 btag.pfInclusiveSecondaryVertexFinderCvsLTagInfos.clone(
521 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix),
522 extSVCollection=svSourceCvsL),
524 if svClustering
or fatJets != cms.InputTag(
''):
525 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
526 if btagInfo ==
'pfInclusiveSecondaryVertexFinderNegativeCvsLTagInfos':
528 btag.pfInclusiveSecondaryVertexFinderNegativeCvsLTagInfos.clone(
529 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix),
530 extSVCollection = btagPrefix+
'inclusiveCandidateNegativeSecondaryVerticesCvsL'+labelName+postfix),
532 if svClustering
or fatJets != cms.InputTag(
''):
533 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
534 if btagInfo ==
'pfGhostTrackVertexTagInfos':
536 btag.pfGhostTrackVertexTagInfos.clone(
537 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix)),
539 if btagInfo ==
'pfSecondaryVertexNegativeTagInfos':
541 btag.pfSecondaryVertexNegativeTagInfos.clone(
542 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix)),
545 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
546 _btagInfo.trackSelection.pixelHitsMin = cms.uint32(2)
547 _btagInfo.trackSelection.totalHitsMin = cms.uint32(8)
548 if btagInfo ==
'pfInclusiveSecondaryVertexFinderNegativeTagInfos':
550 btag.pfInclusiveSecondaryVertexFinderNegativeTagInfos.clone(
551 trackIPTagInfos = cms.InputTag(btagPrefix+
'pfImpactParameterTagInfos'+labelName+postfix),
552 extSVCollection=cms.InputTag(btagPrefix+
'inclusiveCandidateNegativeSecondaryVertices'+labelName+postfix)),
554 if svClustering
or fatJets != cms.InputTag(
''):
555 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
556 if btagInfo ==
'impactParameterTagInfos':
558 btag.impactParameterTagInfos.clone(
559 jetTracks = cms.InputTag(
'jetTracksAssociatorAtVertex'+labelName+postfix),
560 primaryVertex=pvSource),
562 if btagInfo ==
'secondaryVertexTagInfos':
564 btag.secondaryVertexTagInfos.clone(
565 trackIPTagInfos = cms.InputTag(btagPrefix+
'impactParameterTagInfos'+labelName+postfix)),
567 if btagInfo ==
'inclusiveSecondaryVertexFinderTagInfos':
569 btag.inclusiveSecondaryVertexFinderTagInfos.clone(
570 trackIPTagInfos = cms.InputTag(btagPrefix+
'impactParameterTagInfos'+labelName+postfix)),
572 if svClustering
or fatJets != cms.InputTag(
''):
573 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
574 if btagInfo ==
'inclusiveSecondaryVertexFinderFilteredTagInfos':
576 btag.inclusiveSecondaryVertexFinderFilteredTagInfos.clone(
577 trackIPTagInfos = cms.InputTag(btagPrefix+
'impactParameterTagInfos'+labelName+postfix)),
579 if svClustering
or fatJets != cms.InputTag(
''):
580 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
581 if btagInfo ==
'secondaryVertexNegativeTagInfos':
583 btag.secondaryVertexNegativeTagInfos.clone(
584 trackIPTagInfos = cms.InputTag(btagPrefix+
'impactParameterTagInfos'+labelName+postfix)),
586 if btagInfo ==
'inclusiveSecondaryVertexFinderNegativeTagInfos':
588 btag.inclusiveSecondaryVertexFinderNegativeTagInfos.clone(
589 trackIPTagInfos = cms.InputTag(btagPrefix+
'impactParameterTagInfos'+labelName+postfix)),
591 if svClustering
or fatJets != cms.InputTag(
''):
592 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
593 if btagInfo ==
'inclusiveSecondaryVertexFinderFilteredNegativeTagInfos':
595 btag.inclusiveSecondaryVertexFinderFilteredNegativeTagInfos.clone(
596 trackIPTagInfos = cms.InputTag(btagPrefix+
'impactParameterTagInfos'+labelName+postfix)),
598 if svClustering
or fatJets != cms.InputTag(
''):
599 setupSVClustering(getattr(process, btagPrefix+btagInfo+labelName+postfix), svClustering, algo, rParam, fatJets, groomedFatJets)
600 if btagInfo ==
'softMuonTagInfos':
602 btag.softMuonTagInfos.clone(jets = jetSource, primaryVertex=pvSource),
604 if btagInfo ==
'softPFMuonsTagInfos':
606 btag.softPFMuonsTagInfos.clone(jets = jetSource, primaryVertex=pvSource, muons=muSource),
608 if btagInfo ==
'softPFElectronsTagInfos':
610 btag.softPFElectronsTagInfos.clone(jets = jetSource, primaryVertex=pvSource, electrons=elSource),
612 if btagInfo ==
'pixelClusterTagInfos':
614 btag.pixelClusterTagInfos.clone(jets = jetSource, vertices=pvSource),
619 if 'pfBoostedDouble' in btagInfo
or 'SecondaryVertex' in btagInfo:
620 _btagInfo = getattr(process, btagPrefix+btagInfo+labelName+postfix)
621 if pfCandidates.value() ==
'packedPFCandidates':
623 _btagInfo.weights = cms.InputTag(packedPuppiName)
625 _btagInfo.weights = cms.InputTag(
"puppi")
627 if 'DeepFlavourTagInfos' in btagInfo:
629 if btagInfo ==
'pfNegativeDeepFlavourTagInfos':
630 deep_csv_tag_infos =
'pfDeepCSVNegativeTagInfos' 631 svUsed = cms.InputTag(btagPrefix+
'inclusiveCandidateNegativeSecondaryVertices'+labelName+postfix)
634 deep_csv_tag_infos =
'pfDeepCSVTagInfos' 639 if pfCandidates.value() ==
'packedPFCandidates':
641 vertex_associator = cms.InputTag(
"")
643 puppi_value_map = cms.InputTag(
"puppi")
644 vertex_associator = cms.InputTag(
"primaryVertexAssociation",
"original")
647 is_weighted_jet =
False 648 if (
'puppi' in jetSource.value().lower()):
649 is_weighted_jet =
True 651 btag.pfDeepFlavourTagInfos.clone(
654 secondary_vertices=svUsed,
655 shallow_tag_infos = cms.InputTag(btagPrefix+deep_csv_tag_infos+labelName+postfix),
656 puppi_value_map = puppi_value_map,
657 vertex_associator = vertex_associator,
658 is_weighted_jet = is_weighted_jet,
662 if btagInfo ==
'pfDeepDoubleXTagInfos':
664 if 'updated' not in jetSource.value().lower():
665 raise ValueError(
"Invalid jet collection: %s. pfDeepDoubleXTagInfos only supports running via updateJetCollection." % jetSource.value())
667 puppi_value_map = cms.InputTag(packedPuppiName)
669 btag.pfDeepDoubleXTagInfos.clone(
672 secondary_vertices=svSource,
673 shallow_tag_infos = cms.InputTag(btagPrefix+
'pfBoostedDoubleSVAK8TagInfos'+labelName+postfix),
674 puppi_value_map = puppi_value_map,
678 if btagInfo ==
'pfHiggsInteractionNetTagInfos':
680 puppi_value_map = cms.InputTag(packedPuppiName)
682 btag.pfHiggsInteractionNetTagInfos.clone(
685 secondary_vertices = svSource,
686 pf_candidates = pfCandidates,
687 puppi_value_map = puppi_value_map
691 if btagInfo ==
'pfDeepBoostedJetTagInfos':
692 if pfCandidates.value() ==
'packedPFCandidates':
694 if 'updated' not in jetSource.value().lower():
695 raise ValueError(
"Invalid jet collection: %s. pfDeepBoostedJetTagInfos only supports running via updateJetCollection." % jetSource.value())
697 vertex_associator =
"" 698 elif pfCandidates.value() ==
'particleFlow':
699 raise ValueError(
"Running pfDeepBoostedJetTagInfos with reco::PFCandidates is currently not supported.")
706 raise ValueError(
"Invalid pfCandidates collection: %s." % pfCandidates.value())
708 btag.pfDeepBoostedJetTagInfos.clone(
711 secondary_vertices = svSource,
712 pf_candidates = pfCandidates,
713 puppi_value_map = puppi_value_map,
714 vertex_associator = vertex_associator,
718 if btagInfo ==
'pfParticleNetTagInfos':
719 if pfCandidates.value() ==
'packedPFCandidates':
722 vertex_associator =
"" 723 elif pfCandidates.value() ==
'particleFlow':
724 raise ValueError(
"Running pfDeepBoostedJetTagInfos with reco::PFCandidates is currently not supported.")
726 puppi_value_map =
"puppi" 727 vertex_associator =
"primaryVertexAssociation:original" 729 raise ValueError(
"Invalid pfCandidates collection: %s." % pfCandidates.value())
731 btag.pfParticleNetTagInfos.clone(
734 secondary_vertices = svSource,
735 pf_candidates = pfCandidates,
736 puppi_value_map = puppi_value_map,
737 vertex_associator = vertex_associator,
741 if 'ParticleNetAK4TagInfos' in btagInfo:
742 if btagInfo ==
'pfNegativeParticleNetAK4TagInfos':
743 secondary_vertices = btagPrefix + \
744 'inclusiveCandidateNegativeSecondaryVertices' + labelName + postfix
748 secondary_vertices = svSource
751 if pfCandidates.value() ==
'packedPFCandidates':
754 vertex_associator =
"" 755 elif pfCandidates.value() ==
'particleFlow':
756 raise ValueError(
"Running pfDeepBoostedJetTagInfos with reco::PFCandidates is currently not supported.")
758 puppi_value_map =
"puppi" 759 vertex_associator =
"primaryVertexAssociation:original" 761 raise ValueError(
"Invalid pfCandidates collection: %s." % pfCandidates.value())
764 if "puppi" in jetSource.value().lower():
767 btag.pfParticleNetAK4TagInfos.clone(
770 secondary_vertices = secondary_vertices,
771 pf_candidates = pfCandidates,
772 puppi_value_map = puppi_value_map,
773 vertex_associator = vertex_associator,
774 flip_ip_sign = flip_ip_sign,
775 sip3dSigMax = sip3dSigMax,
776 use_puppiP4 = use_puppiP4
780 acceptedTagInfos.append(btagInfo)
781 elif hasattr(toptag, btagInfo) :
782 acceptedTagInfos.append(btagInfo)
784 print(
' --> %s ignored, since not available via RecoBTag.Configuration.RecoBTag_cff!'%(btagInfo))
786 acceptedBtagDiscriminators = list()
787 for discriminator_name
in btagDiscriminators :
788 btagDiscr = discriminator_name.split(
':')[0]
790 if hasattr(btag,btagDiscr):
791 newDiscr = btagPrefix+btagDiscr+labelName+postfix
792 if hasattr(process, newDiscr):
794 elif hasattr(getattr(btag, btagDiscr),
'tagInfos'):
797 getattr(btag, btagDiscr).
clone(
798 tagInfos = cms.VInputTag(
799 *[ cms.InputTag(btagPrefix+x+labelName+postfix) \
800 for x
in supportedBtagDiscr[discriminator_name][0] ]
806 elif hasattr(getattr(btag, btagDiscr),
'src'):
809 getattr(btag, btagDiscr).
clone(
810 src = cms.InputTag(btagPrefix+supportedBtagDiscr[discriminator_name][0][0]+labelName+postfix)
816 raise ValueError(
'I do not know how to update %s it does not have neither "tagInfos" nor "src" attributes' % btagDiscr)
817 acceptedBtagDiscriminators.append(discriminator_name)
819 print(
' --> %s ignored, since not available via RecoBTag.Configuration.RecoBTag_cff!'%(btagDiscr))
821 for meta_tagger
in present_meta:
822 btagDiscr = meta_tagger.split(
':')[0]
824 if hasattr(btag,btagDiscr):
825 newDiscr = btagPrefix+btagDiscr+labelName+postfix
826 if hasattr(process, newDiscr):
831 getattr(btag, btagDiscr).
clone(),
835 for dependency
in supportedMetaDiscr[meta_tagger]:
836 if ':' in dependency:
837 new_dep = btagPrefix+dependency.split(
':')[0]+labelName+postfix+
':'+dependency.split(
':')[1]
839 new_dep = btagPrefix+dependency+labelName+postfix
840 replace = MassSearchReplaceAnyInputTagVisitor(dependency, new_dep)
841 replace.doIt(getattr(process, newDiscr), newDiscr)
842 acceptedBtagDiscriminators.append(meta_tagger)
844 print(
' --> %s ignored, since not available via RecoBTag.Configuration.RecoBTag_cff!'%(btagDiscr))
847 patJets.tagInfoSources = cms.VInputTag( *[ cms.InputTag(btagPrefix+x+labelName+postfix)
for x
in acceptedTagInfos ] )
848 patJets.discriminatorSources = cms.VInputTag(*[
849 cms.InputTag(btagPrefix+x+labelName+postfix) \
850 if ':' not in x
else \
851 cms.InputTag(btagPrefix+x.split(
':')[0]+labelName+postfix+
':'+x.split(
':')[1]) \
852 for x
in acceptedBtagDiscriminators
854 if len(acceptedBtagDiscriminators) > 0 :
855 patJets.addBTagInfo =
True 858 if not tightBTagNTkHits:
859 if pvSource.getModuleLabel() ==
'offlineSlimmedPrimaryVertices':
864 ivfbTagInfos = [
'pfInclusiveSecondaryVertexFinderTagInfos',
'pfInclusiveSecondaryVertexFinderAK8TagInfos',
'pfInclusiveSecondaryVertexFinderCA15TagInfos']
865 if any(i
in acceptedTagInfos
for i
in ivfbTagInfos)
and not runIVFforCTagOnly:
866 if not hasattr( process, btagPrefix+
'inclusiveCandidateVertexFinder' ):
867 loadWithPrefix(process,
'RecoVertex.AdaptiveVertexFinder.inclusiveVertexing_cff', btagPrefix, task.label())
869 if hasattr( process, btagPrefix+
'inclusiveCandidateVertexFinder' ):
870 _temp = getattr(process, btagPrefix+
'inclusiveCandidateVertexFinder')
871 _temp.minHits = cms.uint32(8)
873 if pvSource.getModuleLabel() ==
'offlineSlimmedPrimaryVertices':
874 if hasattr( process, btagPrefix+
'inclusiveCandidateVertexFinder' ):
875 _temp = getattr(process, btagPrefix+
'inclusiveCandidateVertexFinder')
876 _temp.primaryVertices = pvSource
877 _temp.tracks = pfCandidates
878 if hasattr( process, btagPrefix+
'candidateVertexArbitrator' ):
879 _temp = getattr(process, btagPrefix+
'candidateVertexArbitrator')
880 _temp.primaryVertices = pvSource
881 _temp.tracks = pfCandidates
882 if hasattr( process, btagPrefix+
'inclusiveCandidateSecondaryVertices' )
and not hasattr( process, svSource.getModuleLabel() ):
884 getattr(process, btagPrefix+
'inclusiveCandidateSecondaryVertices').
clone(),
886 if any(i
in acceptedTagInfos
for i
in ivfcTagInfos):
887 if not hasattr( process, btagPrefix+
'inclusiveCandidateVertexFinderCvsL' ):
888 loadWithPrefix(process,
'RecoVertex.AdaptiveVertexFinder.inclusiveVertexing_cff', btagPrefix, task.label())
890 if hasattr( process, btagPrefix+
'inclusiveCandidateVertexFinderCvsL' ):
891 _temp = getattr(process, btagPrefix+
'inclusiveCandidateVertexFinderCvsL')
892 _temp.minHits = cms.uint32(8)
894 if pvSource.getModuleLabel() ==
'offlineSlimmedPrimaryVertices':
895 if hasattr( process, btagPrefix+
'inclusiveCandidateVertexFinderCvsL' ):
896 _temp = getattr(process, btagPrefix+
'inclusiveCandidateVertexFinderCvsL')
897 _temp.primaryVertices = pvSource
898 _temp.tracks = pfCandidates
899 if hasattr( process, btagPrefix+
'candidateVertexArbitratorCvsL' ):
900 _temp = getattr(process, btagPrefix+
'candidateVertexArbitratorCvsL')
901 _temp.primaryVertices = pvSource
902 _temp.tracks = pfCandidates
903 if hasattr( process, btagPrefix+
'inclusiveCandidateSecondaryVerticesCvsL' )
and not hasattr( process, svSourceCvsL.getModuleLabel() ):
905 getattr(process, btagPrefix+
'inclusiveCandidateSecondaryVerticesCvsL').
clone(),
907 if 'inclusiveSecondaryVertexFinderTagInfos' in acceptedTagInfos:
908 if not hasattr( process,
'inclusiveVertexing' ):
909 process.load(
'RecoVertex.AdaptiveVertexFinder.inclusiveVertexing_cff' )
910 task.add(process.inclusiveVertexingTask)
911 task.add(process.inclusiveCandidateVertexingTask)
912 task.add(process.inclusiveCandidateVertexingCvsLTask)
913 if 'inclusiveSecondaryVertexFinderFilteredTagInfos' in acceptedTagInfos:
914 if not hasattr( process,
'inclusiveVertexing' ):
915 process.load(
'RecoVertex.AdaptiveVertexFinder.inclusiveVertexing_cff' )
916 task.add(process.inclusiveVertexingTask)
917 task.add(process.inclusiveCandidateVertexingTask)
918 task.add(process.inclusiveCandidateVertexingCvsLTask)
919 if 'inclusiveSecondaryVertexFinderFilteredTagInfos' in acceptedTagInfos:
920 if not hasattr( process,
'inclusiveSecondaryVerticesFiltered' ):
921 process.load(
'RecoBTag.SecondaryVertex.inclusiveSecondaryVerticesFiltered_cfi' )
922 task.add(process.inclusiveSecondaryVerticesFiltered)
923 task.add(process.bVertexFilter)
924 if not hasattr( process,
'bToCharmDecayVertexMerged' ):
925 process.load(
'RecoBTag.SecondaryVertex.bToCharmDecayVertexMerger_cfi' )
926 task.add(process.bToCharmDecayVertexMerged)
927 if 'caTopTagInfos' in acceptedTagInfos :
928 patJets.addTagInfos =
True 929 if not hasattr( process,
'caTopTagInfos' )
and not hasattr( process,
'caTopTagInfosAK8' ):
930 process.load(
'RecoJets.JetProducers.caTopTaggers_cff' )
931 task.add(process.caTopTaggersTask)
bool any(const std::vector< T > &v, const T &what)
def addToProcessAndTask(label, module, process, task)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def loadWithPrefix(process, moduleName, prefix='', loadedProducersAndFilters=None)
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
def getPatAlgosToolsTask(process)