53 def makeAlgs (self, config) :
55 log = logging.getLogger(
'MuonCalibrationConfig')
59 if self.calibMode ==
'correctData_CB':
61 elif self.calibMode ==
'correctData_IDMS':
63 elif self.calibMode ==
'notCorrectData_IDMS':
65 elif self.calibMode ==
'notCorrectData_CB':
68 raise ValueError (
"invalid calibMode: \"" + self.calibMode +
"\". Allowed values are correctData_CB, correctData_IDMS, notCorrectData_IDMS, notCorrectData_CB")
70 inputContainer =
"AnalysisMuons" if config.isPhyslite()
else "Muons"
71 if self.inputContainer:
72 inputContainer = self.inputContainer
73 config.setSourceName (self.containerName, inputContainer)
74 config.setContainerMeta (self.containerName,
'calibMode', calibMode)
77 if config.wantCopy (self.containerName) :
78 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'MuonShallowCopyAlg' )
79 alg.input = config.readName (self.containerName)
80 alg.output = config.copyName (self.containerName)
83 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
85 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
86 alg.selectionTool.maxEta = self.maxEta
87 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
88 alg.particles = config.readName (self.containerName)
89 alg.preselection = config.getPreselection (self.containerName,
'')
90 config.addSelection (self.containerName,
'', alg.selectionDecoration)
93 alg = config.createAlgorithm(
'CP::MuonCalibrationAndSmearingAlg',
94 'MuonCalibrationAndSmearingAlg' )
95 config.addPrivateTool(
'calibrationAndSmearingTool',
98 alg.calibrationAndSmearingTool.IsRun3Geo = config.geometry() >= LHCPeriod.Run3
99 alg.calibrationAndSmearingTool.calibMode = calibMode
100 if config.geometry()
is LHCPeriod.Run4:
101 log.warning(
"Disabling NSW hits for Run4 geometry")
102 alg.calibrationAndSmearingTool.ExcludeNSWFromPrecisionLayers =
True
104 alg.calibrationAndSmearingTool.ExcludeNSWFromPrecisionLayers = self.excludeNSWFromPrecisionLayers
and (config.geometry() >= LHCPeriod.Run3)
105 alg.muons = config.readName (self.containerName)
106 alg.muonsOut = config.copyName (self.containerName)
107 alg.preselection = config.getPreselection (self.containerName,
'')
108 if config.isPhyslite()
and not self.recalibratePhyslite :
109 alg.skipNominal =
True
113 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'MuonPtCutAlg' )
114 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
115 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
116 alg.particles = config.readName (self.containerName)
117 alg.selectionTool.minPt = self.minPt
118 alg.preselection = config.getPreselection (self.containerName,
'')
119 config.addSelection (self.containerName,
'', alg.selectionDecoration,
123 if self.writeTrackD0Z0:
124 alg = config.createAlgorithm(
'CP::AsgLeptonTrackDecorationAlg',
125 'LeptonTrackDecorator',
127 alg.particles = config.readName (self.containerName)
129 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' )
130 alg.particles = config.readName (self.containerName)
132 config.addOutputVar (self.containerName,
'pt',
'pt')
133 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
134 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
135 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
136 config.addOutputVar (self.containerName,
'charge',
'charge', noSys=
True)
138 if self.writeTrackD0Z0:
139 config.addOutputVar (self.containerName,
'd0_%SYS%',
'd0', noSys=
True)
140 config.addOutputVar (self.containerName,
'd0sig_%SYS%',
'd0sig', noSys=
True)
141 config.addOutputVar (self.containerName,
'z0sintheta_%SYS%',
'z0sintheta', noSys=
True)
142 config.addOutputVar (self.containerName,
'z0sinthetasig_%SYS%',
'z0sinthetasig', noSys=
True)
145 if self.decorateTruth
and config.dataType()
is not DataType.Data:
146 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
147 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)
149 config.addOutputVar (self.containerName,
'muonType',
'muonType', noSys=
True, enabled=self.writeColumnarToolVariables)