414 def makeAlgs (self, config) :
415
416 selectionPostfix = self.selectionName
417 if selectionPostfix != '' and selectionPostfix[0] != '_' :
418 selectionPostfix = '_' + selectionPostfix
419
420 postfix = self.postfix
421 if postfix is None :
422 postfix = self.selectionName
423 if postfix != '' and postfix[0] != '_' :
424 postfix = '_' + postfix
425
426 if self.quality is not None and self.quality not in ['Tight', 'Medium', 'Loose', 'VeryLoose', 'Baseline', 'BaselineForFakes'] :
427 raise ValueError (f"invalid tau quality: \"{self.quality}\", allowed values are Tight, Medium, Loose, "
428 "VeryLoose, Baseline, BaselineForFakes")
429
430 sfList = []
431
432
433 if config.dataType() is not DataType.Data and not self.noEffSF:
434 log = logging.getLogger('TauJetSFConfig')
435
436
437
438
439
440 alg = config.createAlgorithm( 'CP::TauEfficiencyCorrectionsAlg',
441 'TauEfficiencyCorrectionsAlgReco' )
442 config.addPrivateTool( 'efficiencyCorrectionsTool',
443 'TauAnalysisTools::TauEfficiencyCorrectionsTool' )
444 alg.efficiencyCorrectionsTool.EfficiencyCorrectionTypes = [0]
445 alg.efficiencyCorrectionsTool.Campaign = _campaign(config)
446 alg.efficiencyCorrectionsTool.useFastSim = config.dataType() is DataType.FastSim
447 alg.scaleFactorDecoration = 'tau_Reco_effSF' + selectionPostfix + '_%SYS%'
448 alg.outOfValidity = 2
449 alg.outOfValidityDeco = 'bad_Reco_eff' + selectionPostfix
450 alg.taus = config.readName (self.containerName)
451 alg.preselection = config.getPreselection (self.containerName, self.selectionName)
452 if self.saveDetailedSF:
453 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
454 'Reco_effSF' + postfix, auxType='float')
455 sfList += [alg.scaleFactorDecoration]
456
457
458 campaign = _campaign(config)
459
460
461 if self.quality not in ('VeryLoose','Baseline','BaselineForFakes'):
462 alg = config.createAlgorithm( 'CP::TauEfficiencyCorrectionsAlg',
463 'TauEfficiencyCorrectionsAlgID' )
464 config.addPrivateTool( 'efficiencyCorrectionsTool',
465 'TauAnalysisTools::TauEfficiencyCorrectionsTool' )
466 alg.efficiencyCorrectionsTool.EfficiencyCorrectionTypes = [4]
467
468 jetIDLevels = _GNTAU_JETID_LEVELS if self.useGNTau else _RNN_JETID_LEVELS
469 wp = self.quality
470 if not self.useGNTau and self.manual_sel_rnnwp is not None:
471 wp = self.manual_sel_rnnwp.capitalize()
472 if wp not in jetIDLevels:
473 raise ValueError(f'Invalid tauID: "{wp}". Allowed values are Loose, Medium, Tight')
474
475 alg.efficiencyCorrectionsTool.JetIDLevel = jetIDLevels[wp]
476 alg.efficiencyCorrectionsTool.useFastSim = config.dataType() is DataType.FastSim
477 alg.efficiencyCorrectionsTool.Campaign = campaign
478 alg.efficiencyCorrectionsTool.useGNTau = self.useGNTau
479 alg.scaleFactorDecoration = 'tau_ID_effSF' + selectionPostfix + '_%SYS%'
480 alg.outOfValidity = 2
481 alg.outOfValidityDeco = 'bad_ID_eff' + selectionPostfix
482 alg.taus = config.readName (self.containerName)
483 alg.preselection = config.getPreselection (self.containerName, self.selectionName)
484 if self.saveDetailedSF:
485 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
486 'ID_effSF' + postfix, auxType='float')
487 sfList += [alg.scaleFactorDecoration]
488
489
490 if self.use_eVeto:
491
492 if self.quality not in ('VeryLoose','Baseline','BaselineForFakes'):
493
494 alg = config.createAlgorithm( 'CP::TauEfficiencyCorrectionsAlg',
495 'TauEfficiencyCorrectionsAlgEvetoFakeTau' )
496 config.addPrivateTool( 'efficiencyCorrectionsTool',
497 'TauAnalysisTools::TauEfficiencyCorrectionsTool' )
498 alg.efficiencyCorrectionsTool.EfficiencyCorrectionTypes = [10]
499 alg.efficiencyCorrectionsTool.EleIDLevel = self._eVetoEleIDLevel()
500
501 alg.efficiencyCorrectionsTool.useFastSim = config.dataType() is DataType.FastSim
502 alg.efficiencyCorrectionsTool.Campaign = campaign
503 alg.efficiencyCorrectionsTool.useGNTau = self.useGNTau
504 alg.scaleFactorDecoration = 'tau_EvetoFakeTau_effSF' + selectionPostfix + '_%SYS%'
505
506
507 jetIDLevels = _GNTAU_JETID_LEVELS if self.useGNTau else _RNN_JETID_LEVELS
508 wp = self.quality
509 if not self.useGNTau and self.manual_sel_rnnwp is not None:
510 wp = self.manual_sel_rnnwp.capitalize()
511 if wp not in jetIDLevels:
512 raise ValueError(f'Invalid tauID: "{wp}". Allowed values are Loose, Medium, Tight')
513 if wp == "Tight":
514 log.warning(
515 "eVeto SFs are not available for Tight WP -> fallback to Medium WP"
516 )
517 wp = "Medium"
518
519 alg.efficiencyCorrectionsTool.JetIDLevel = jetIDLevels[wp]
520 alg.outOfValidity = 2
521 alg.outOfValidityDeco = 'bad_EvetoFakeTau_eff' + selectionPostfix
522 alg.taus = config.readName (self.containerName)
523 alg.preselection = config.getPreselection (self.containerName, self.selectionName)
524 if self.saveDetailedSF:
525 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
526 'EvetoFakeTau_effSF' + postfix, auxType='float')
527 sfList += [alg.scaleFactorDecoration]
528
529
530 alg = config.createAlgorithm( 'CP::TauEfficiencyCorrectionsAlg',
531 'TauEfficiencyCorrectionsAlgEvetoTrueTau' )
532 config.addPrivateTool( 'efficiencyCorrectionsTool',
533 'TauAnalysisTools::TauEfficiencyCorrectionsTool' )
534 alg.efficiencyCorrectionsTool.EfficiencyCorrectionTypes = [8]
535 alg.efficiencyCorrectionsTool.useFastSim = config.dataType() is DataType.FastSim
536 alg.efficiencyCorrectionsTool.Campaign = _campaign(config)
537 alg.scaleFactorDecoration = 'tau_EvetoTrueTau_effSF' + selectionPostfix + '_%SYS%'
538 alg.efficiencyCorrectionsTool.EleIDLevel = self._eVetoEleIDLevel()
539 alg.outOfValidity = 2
540 alg.outOfValidityDeco = 'bad_EvetoTrueTau_eff' + selectionPostfix
541 alg.taus = config.readName (self.containerName)
542 alg.preselection = config.getPreselection (self.containerName, self.selectionName)
543 if self.saveDetailedSF:
544 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
545 'EvetoTrueTau_effSF' + postfix, auxType='float')
546 sfList += [alg.scaleFactorDecoration]
547
548 if self.saveCombinedSF:
549 alg = config.createAlgorithm( 'CP::AsgObjectScaleFactorAlg',
550 'TauCombinedEfficiencyScaleFactorAlg' )
551 alg.particles = config.readName (self.containerName)
552 alg.inScaleFactors = sfList
553 alg.outScaleFactor = 'effSF' + postfix + '_%SYS%'
554 config.addOutputVar (self.containerName, alg.outScaleFactor,
555 'effSF' + postfix, auxType='float')
556
557