59 def makeAlgs (self, config) :
60
61 log = logging.getLogger('MuonCalibrationConfig')
62
63
64
65 if self.calibMode == 'correctData_CB':
66 calibMode = 0
67 elif self.calibMode == 'correctData_IDMS':
68 calibMode = 1
69 elif self.calibMode == 'notCorrectData_IDMS':
70 calibMode = 2
71 elif self.calibMode == 'notCorrectData_CB':
72 calibMode = 3
73 else :
74 raise ValueError ("invalid calibMode: \"" + self.calibMode + "\". Allowed values are correctData_CB, correctData_IDMS, notCorrectData_IDMS, notCorrectData_CB")
75
76 inputContainer = "AnalysisMuons" if config.isPhyslite() else "Muons"
77 if self.inputContainer:
78 inputContainer = self.inputContainer
79 config.setSourceName (self.containerName, inputContainer)
80 config.setContainerMeta (self.containerName, 'calibMode', calibMode)
81
82
83 if config.wantCopy (self.containerName) :
84 alg = config.createAlgorithm( 'CP::AsgShallowCopyAlg', 'MuonShallowCopyAlg' )
85 alg.input = config.readName (self.containerName)
86 alg.output = config.copyName (self.containerName)
87
88
89 alg = config.createAlgorithm( 'CP::AsgSelectionAlg',
90 'MuonEtaCutAlg' )
91 config.addPrivateTool( 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
92 alg.selectionTool.maxEta = self.maxEta
93 alg.selectionDecoration = 'selectEta' + self.postfix + ',as_bits'
94 alg.particles = config.readName (self.containerName)
95 alg.preselection = config.getPreselection (self.containerName, '')
96 config.addSelection (self.containerName, '', alg.selectionDecoration)
97
98
99 alg = config.createAlgorithm( 'CP::MuonCalibrationAndSmearingAlg',
100 'MuonCalibrationAndSmearingAlg' )
101 config.addPrivateTool( 'calibrationAndSmearingTool',
102 'CP::MuonCalibTool' )
103
104 alg.calibrationAndSmearingTool.IsRun3Geo = config.geometry() >= LHCPeriod.Run3
105 alg.calibrationAndSmearingTool.calibMode = calibMode
106 if config.geometry() is LHCPeriod.Run4:
107 log.warning("Disabling NSW hits for Run4 geometry")
108 alg.calibrationAndSmearingTool.ExcludeNSWFromPrecisionLayers = True
109 else:
110 alg.calibrationAndSmearingTool.ExcludeNSWFromPrecisionLayers = self.excludeNSWFromPrecisionLayers and (config.geometry() >= LHCPeriod.Run3)
111 alg.muons = config.readName (self.containerName)
112 alg.muonsOut = config.copyName (self.containerName)
113 alg.preselection = config.getPreselection (self.containerName, '')
114 if config.isPhyslite() and not self.recalibratePhyslite :
115 alg.skipNominal = True
116
117
118 if self.minPt > 0:
119 alg = config.createAlgorithm( 'CP::AsgSelectionAlg', 'MuonPtCutAlg' )
120 alg.selectionDecoration = 'selectPt' + self.postfix + ',as_bits'
121 config.addPrivateTool( 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
122 alg.particles = config.readName (self.containerName)
123 alg.selectionTool.minPt = self.minPt
124 alg.preselection = config.getPreselection (self.containerName, '')
125 config.addSelection (self.containerName, '', alg.selectionDecoration,
126 preselection = True)
127
128
129 if self.writeTrackD0Z0:
130 alg = config.createAlgorithm( 'CP::AsgLeptonTrackDecorationAlg',
131 'LeptonTrackDecorator' )
132 if config.dataType() is not DataType.Data:
133 if self.runTrackBiasing:
134 InDetTrackCalibrationConfig.makeTrackBiasingTool(config, alg)
135 InDetTrackCalibrationConfig.makeTrackSmearingTool(config, alg)
136 alg.particles = config.readName (self.containerName)
137
138 alg = config.createAlgorithm( 'CP::AsgEnergyDecoratorAlg', 'EnergyDecorator' )
139 alg.particles = config.readName (self.containerName)
140
141 config.addOutputVar (self.containerName, 'pt', 'pt')
142 config.addOutputVar (self.containerName, 'eta', 'eta', noSys=True)
143 config.addOutputVar (self.containerName, 'phi', 'phi', noSys=True)
144 config.addOutputVar (self.containerName, 'e_%SYS%', 'e')
145 config.addOutputVar (self.containerName, 'charge', 'charge', noSys=True)
146
147 if self.writeTrackD0Z0:
148 config.addOutputVar (self.containerName, 'd0_%SYS%', 'd0')
149 config.addOutputVar (self.containerName, 'd0sig_%SYS%', 'd0sig')
150 config.addOutputVar (self.containerName, 'z0_%SYS%', 'z0')
151 config.addOutputVar (self.containerName, 'z0sintheta_%SYS%', 'z0sintheta')
152 config.addOutputVar (self.containerName, 'z0sinthetasig_%SYS%', 'z0sinthetasig')
153
154
155 if self.decorateTruth and config.dataType() is not DataType.Data:
156 config.addOutputVar (self.containerName, "truthType", "truth_type", noSys=True)
157 config.addOutputVar (self.containerName, "truthOrigin", "truth_origin", noSys=True)
158
159 config.addOutputVar (self.containerName, 'muonType', 'muonType', noSys=True, enabled=self.writeColumnarToolVariables)
160