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