484 def makeAlgs (self, config) :
485
486 if config.dataType() is not DataType.Data:
487
488
489
490
491 triggerDict = TriggerDict()
492
493 if self.includeAllYearsPerRun:
494 years = [int(year) for year in self.triggerChainsPerYear.keys()]
495 else:
496 from TriggerAnalysisAlgorithms.TriggerAnalysisSFConfig import (
497 get_input_years)
498 years = get_input_years(config)
499
500 triggerYearStartBoundaries = {
501 2015: 260000,
502 2016: 290000,
503 2017: 324000,
504 2018: 348000,
505 2022: 410000,
506 2023: 450000,
507 2024: 470000,
508 }
509
510 triggerConfigs = {}
511 triggerConfigYears = {}
512 from TriggerAnalysisAlgorithms.TriggerAnalysisConfig import is_year_in_current_period
513 for year in years:
514 if not is_year_in_current_period(config, year):
515 continue
516
517 triggerChains = self.triggerChainsPerYear.
get(int(year), self.triggerChainsPerYear.
get(str(year), []))
518 for chain in triggerChains:
519 chain = chain.replace(" || ", "_OR_")
520 chain_noHLT = chain.replace("HLT_", "")
521 chain_out = chain_noHLT if self.removeHLTPrefix else chain
522 legs = triggerDict[chain_noHLT]
523 if not legs:
524 if chain_noHLT.startswith('mu') and chain_noHLT[2].isdigit:
525
526 triggerConfigs[chain_out] = chain
527 if chain_out in triggerConfigYears.keys():
528 triggerConfigYears[chain_out].append(year)
529 else:
530 triggerConfigYears[chain_out] = [year]
531 else:
532 for leg in legs:
533 if leg.startswith('mu') and leg[2].isdigit:
534
535 leg_out = leg if self.removeHLTPrefix else f"HLT_{leg}"
536 triggerConfigs[leg_out] = f"HLT_{leg}"
537 if leg_out in triggerConfigYears.keys():
538 triggerConfigYears[leg_out].append(year)
539 else:
540 triggerConfigYears[leg_out] = [year]
541
542 if not triggerConfigs:
543 return
544
545
546 sfTool = config.createPublicTool("CP::MuonTriggerScaleFactors", f"{self.instanceName()}_SFTool{self.customToolSuffix}")
547
548 sfTool.MuonQuality = self.muonID
549 sfTool.AllowZeroSF = True
550 sfTool.CustomInputFolder = self.customInputFolder
551 sfTool.CustomInputFilePerYear = self.customInputFilePerYear
552 sfTool.Campaign = config.campaign().value
553
554 for trig_short, trig in triggerConfigs.items():
555 alg = config.createAlgorithm('CP::MuonTriggerEfficiencyScaleFactorAlg',
556 'MuonTrigEfficiencyCorrectionsAlg_' + trig_short)
557 alg.efficiencyScaleFactorTool = f"{sfTool.getType()}/{sfTool.getName()}"
558
559
560 if self.includeAllYearsPerRun:
561 alg.minRunNumber = 0
562 alg.maxRunNumber = 999999
563
564 if triggerConfigYears[trig_short][0] != years[0]:
565 alg.minRunNumber = triggerYearStartBoundaries.get(triggerConfigYears[trig_short][0], 999999)
566 if triggerConfigYears[trig_short][-1] != years[-1]:
567 alg.maxRunNumber = triggerYearStartBoundaries.get(triggerConfigYears[trig_short][-1] + 1, 999999)
568 elif config.campaign() is Campaign.MC20a:
569 if triggerConfigYears[trig_short] == [2015]:
570 alg.maxRunNumber = 290000
571 elif triggerConfigYears[trig_short] == [2016]:
572 alg.minRunNumber = 290000
573
574 alg.trigger = trig
575
576
577 if config.campaign() is Campaign.MC23a and (trig_short == "HLT_mu8noL1_FSNOSEED" or trig_short == "HLT_mu22_L1MU14FCH"):
578 alg.minRunNumber = 435816
579
580 if self.saveSF:
581 alg.scaleFactorDecoration = f"muon_{self.prefixSF}_{trig_short}_%SYS%"
582 if self.saveEff:
583 alg.mcEfficiencyDecoration = f"muon_{self.prefixEff}_{trig_short}_%SYS%"
584 if self.saveEffData:
585 alg.dataEfficiencyDecoration = f"muon_{self.prefixEffData}_{trig_short}_%SYS%"
586 alg.outOfValidity = 2
587 alg.outOfValidityDeco = f"bad_eff_muontrig_{trig_short}"
588 alg.muons = config.readName (self.containerName)
589 alg.preselection = config.getPreselection (self.containerName, '')
590 if self.saveSF:
591 config.addOutputVar (self.containerName, alg.scaleFactorDecoration, f"{self.prefixSF}_{trig_short}")
592 if self.saveEff:
593 config.addOutputVar (self.containerName, alg.mcEfficiencyDecoration, f"{self.prefixEff}_{trig_short}")
594 if self.saveEffData:
595 config.addOutputVar (self.containerName, alg.dataEfficiencyDecoration, f"{self.prefixEffData}_{trig_short}")
596
597
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)