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