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