728 def makeAlgs (self, config) :
729
730 decorationName = f"jvt_selection_{self.jvtWP},as_char"
731
732 if not self.noEffSF and config.dataType() is not DataType.Data:
733 alg = config.createAlgorithm( 'CP::JvtEfficiencyAlg', f'JvtEfficiencyAlg_{self.jvtWP}' )
734 config.addPrivateTool( 'efficiencyTool', 'CP::NNJvtEfficiencyTool' )
735 alg.efficiencyTool.JetContainer = config.readName(self.containerName)
736 alg.efficiencyTool.MaxPtForJvt = 60*GeV
737 alg.efficiencyTool.WorkingPoint = self.jvtWP
738 if config.geometry() is LHCPeriod.Run2:
739 alg.efficiencyTool.SFFile = "JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
740 else:
741 alg.efficiencyTool.SFFile = "JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
742 alg.selection = decorationName
743 alg.scaleFactorDecoration = f'jvt_effSF_{self.jvtWP}_%SYS%'
744 alg.outOfValidity = 2
745 alg.outOfValidityDeco = f'no_jvt_{self.jvtWP}'
746 alg.skipBadEfficiency = False
747 alg.jets = config.readName (self.containerName)
748 alg.preselection = config.getPreselection (self.containerName, '')
749
750 config.addOutputVar (self.containerName, alg.scaleFactorDecoration, f'jvtEfficiency_{self.jvtWP}')
751
752
753 if self.eventSF:
754 alg = config.createAlgorithm( 'CP::AsgEventScaleFactorAlg', f'JvtEventScaleFactorAlg_{self.jvtWP}' )
755 preselection = config.getFullSelection (self.containerName, '')
756 alg.preselection = preselection + f'&&no_jvt_{self.jvtWP}' if preselection else f'no_jvt_{self.jvtWP}'
757 alg.scaleFactorInputDecoration = f'jvt_effSF_{self.jvtWP}_%SYS%'
758 alg.scaleFactorOutputDecoration = f'jvt_effSF_{self.jvtWP}_%SYS%'
759 alg.particles = config.readName (self.containerName)
760
761 config.addOutputVar('EventInfo', alg.scaleFactorOutputDecoration, f'weight_jvt_effSF_{self.jvtWP}')
762
763