526 def makeAlgs (self, config) :
527
528 if config.dataType() is not DataType.Data:
529
530
531
532
533 triggerDict = TriggerDict()
534
535 if self.includeAllYearsPerRun:
536 years = [int(year) for year in self.triggerChainsPerYear.keys()]
537 else:
538 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig import (
539 get_input_years)
540 years = get_input_years(config)
541
542 triggerYearStartBoundaries = {
543 2015: 260000,
544 2016: 290000,
545 2017: 324000,
546 2018: 348000,
547 2022: 410000,
548 2023: 450000,
549 2024: 470000,
550 2025: 495000,
551 2026: 516000,
552 }
553
554 triggerConfigs = {}
555 triggerConfigYears = {}
556 from TriggerAnalysisAlgorithms.TriggerAnalysisConfig import is_year_in_current_period
557 for year in years:
558 if not is_year_in_current_period(config, year):
559 continue
560
561 triggerChains = self.triggerChainsPerYear.
get(int(year), self.triggerChainsPerYear.
get(str(year), []))
562 for chain in triggerChains:
563 chain = chain.replace(" || ", "_OR_")
564 chain_noHLT = chain.replace("HLT_", "")
565 chain_out = chain_noHLT if self.removeHLTPrefix else chain
566 legs = triggerDict[chain_noHLT]
567 if not legs:
568 if chain_noHLT.startswith('mu') and chain_noHLT[2].isdigit():
569
570 triggerConfigs[chain_out] = chain
571 if chain_out in triggerConfigYears.keys():
572 triggerConfigYears[chain_out].append(year)
573 else:
574 triggerConfigYears[chain_out] = [year]
575 else:
576 for leg in legs:
577 if leg.startswith('mu') and leg[2].isdigit():
578
579 leg_out = leg if self.removeHLTPrefix else f"HLT_{leg}"
580 triggerConfigs[leg_out] = f"HLT_{leg}"
581 if leg_out in triggerConfigYears.keys():
582 triggerConfigYears[leg_out].append(year)
583 else:
584 triggerConfigYears[leg_out] = [year]
585
586 if not triggerConfigs:
587 return
588
589
590 sfTool = config.createPublicTool("CP::MuonTriggerScaleFactors", f"{self.instanceName()}_SFTool{self.customToolSuffix}")
591
592 sfTool.MuonQuality = self.muonID
593 sfTool.AllowZeroSF = True
594 sfTool.CustomInputFolder = self.customInputFolder
595 sfTool.CustomInputFilePerYear = self.customInputFilePerYear
596 sfTool.Campaign = config.campaign().value
597
598 for trig_short, trig in triggerConfigs.items():
599 alg = config.createAlgorithm('CP::MuonTriggerEfficiencyScaleFactorAlg',
600 'MuonTrigEfficiencyCorrectionsAlg_' + trig_short)
601 config.setExtraInputs ({('xAOD::EventInfo', 'EventInfo.RandomRunNumber')})
602 alg.efficiencyScaleFactorTool = f"{sfTool.getType()}/{sfTool.getName()}"
603
604
605 if self.includeAllYearsPerRun:
606 alg.minRunNumber = 0
607 alg.maxRunNumber = 999999
608
609 if triggerConfigYears[trig_short][0] != years[0]:
610 alg.minRunNumber = triggerYearStartBoundaries.get(triggerConfigYears[trig_short][0], 999999)
611 if triggerConfigYears[trig_short][-1] != years[-1]:
612 alg.maxRunNumber = triggerYearStartBoundaries.get(triggerConfigYears[trig_short][-1] + 1, 999999)
613 elif config.campaign() is Campaign.MC20a:
614 if triggerConfigYears[trig_short] == [2015]:
615 alg.maxRunNumber = 290000
616 elif triggerConfigYears[trig_short] == [2016]:
617 alg.minRunNumber = 290000
618
619 alg.trigger = trig
620
621
622 if config.campaign() is Campaign.MC23a and (trig_short == "HLT_mu8noL1_FSNOSEED" or trig_short == "HLT_mu22_L1MU14FCH"):
623 alg.minRunNumber = 435816
624
625 if self.saveSF:
626 alg.scaleFactorDecoration = f"muon_{self.prefixSF}_{trig_short}_%SYS%"
627 if self.saveEff:
628 alg.mcEfficiencyDecoration = f"muon_{self.prefixEff}_{trig_short}_%SYS%"
629 if self.saveEffData:
630 alg.dataEfficiencyDecoration = f"muon_{self.prefixEffData}_{trig_short}_%SYS%"
631 alg.outOfValidity = 2
632 alg.outOfValidityDeco = f"bad_eff_muontrig_{trig_short}"
633 alg.muons = config.readName (self.containerName)
634 alg.preselection = config.getPreselection (self.containerName, '')
635 if self.saveSF:
636 config.addOutputVar (self.containerName, alg.scaleFactorDecoration, f"{self.prefixSF}_{trig_short}")
637 if self.saveEff:
638 config.addOutputVar (self.containerName, alg.mcEfficiencyDecoration, f"{self.prefixEff}_{trig_short}")
639 if self.saveEffData:
640 config.addOutputVar (self.containerName, alg.dataEfficiencyDecoration, f"{self.prefixEffData}_{trig_short}")
641
642
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)