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