54 def makeAlgs (self, config) :
56 log = logging.getLogger(
'MuonCalibrationConfig')
60 if self.calibMode ==
'correctData_CB':
62 elif self.calibMode ==
'correctData_IDMS':
64 elif self.calibMode ==
'notCorrectData_IDMS':
66 elif self.calibMode ==
'notCorrectData_CB':
69 raise ValueError (
"invalid calibMode: \"" + self.calibMode +
"\". Allowed values are correctData_CB, correctData_IDMS, notCorrectData_IDMS, notCorrectData_CB")
71 inputContainer =
"AnalysisMuons" if config.isPhyslite()
else "Muons"
72 if self.inputContainer:
73 inputContainer = self.inputContainer
74 config.setSourceName (self.containerName, inputContainer)
75 config.setContainerMeta (self.containerName,
'calibMode', calibMode)
78 if config.wantCopy (self.containerName) :
79 alg = config.createAlgorithm(
'CP::AsgShallowCopyAlg',
'MuonShallowCopyAlg' )
80 alg.input = config.readName (self.containerName)
81 alg.output = config.copyName (self.containerName)
84 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
86 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
87 alg.selectionTool.maxEta = self.maxEta
88 alg.selectionDecoration =
'selectEta' + self.postfix +
',as_bits'
89 alg.particles = config.readName (self.containerName)
90 alg.preselection = config.getPreselection (self.containerName,
'')
91 config.addSelection (self.containerName,
'', alg.selectionDecoration)
94 alg = config.createAlgorithm(
'CP::MuonCalibrationAndSmearingAlg',
95 'MuonCalibrationAndSmearingAlg' )
96 config.addPrivateTool(
'calibrationAndSmearingTool',
99 alg.calibrationAndSmearingTool.IsRun3Geo = config.geometry() >= LHCPeriod.Run3
100 alg.calibrationAndSmearingTool.calibMode = calibMode
101 if config.geometry()
is LHCPeriod.Run4:
102 log.warning(
"Disabling NSW hits for Run4 geometry")
103 alg.calibrationAndSmearingTool.ExcludeNSWFromPrecisionLayers =
True
105 alg.calibrationAndSmearingTool.ExcludeNSWFromPrecisionLayers = self.excludeNSWFromPrecisionLayers
and (config.geometry() >= LHCPeriod.Run3)
106 alg.muons = config.readName (self.containerName)
107 alg.muonsOut = config.copyName (self.containerName)
108 alg.preselection = config.getPreselection (self.containerName,
'')
109 if config.isPhyslite()
and not self.recalibratePhyslite :
110 alg.skipNominal =
True
114 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'MuonPtCutAlg' )
115 alg.selectionDecoration =
'selectPt' + self.postfix +
',as_bits'
116 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
117 alg.particles = config.readName (self.containerName)
118 alg.selectionTool.minPt = self.minPt
119 alg.preselection = config.getPreselection (self.containerName,
'')
120 config.addSelection (self.containerName,
'', alg.selectionDecoration,
124 if self.writeTrackD0Z0:
125 alg = config.createAlgorithm(
'CP::AsgLeptonTrackDecorationAlg',
126 'LeptonTrackDecorator',
128 alg.particles = config.readName (self.containerName)
130 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'EnergyDecorator' )
131 alg.particles = config.readName (self.containerName)
133 config.addOutputVar (self.containerName,
'pt',
'pt')
134 config.addOutputVar (self.containerName,
'eta',
'eta', noSys=
True)
135 config.addOutputVar (self.containerName,
'phi',
'phi', noSys=
True)
136 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')
137 config.addOutputVar (self.containerName,
'charge',
'charge', noSys=
True)
139 if self.writeTrackD0Z0:
140 config.addOutputVar (self.containerName,
'd0_%SYS%',
'd0', noSys=
True)
141 config.addOutputVar (self.containerName,
'd0sig_%SYS%',
'd0sig', noSys=
True)
142 config.addOutputVar (self.containerName,
'z0sintheta_%SYS%',
'z0sintheta', noSys=
True)
143 config.addOutputVar (self.containerName,
'z0sinthetasig_%SYS%',
'z0sinthetasig', noSys=
True)
146 if self.decorateTruth
and config.dataType()
is not DataType.Data:
147 config.addOutputVar (self.containerName,
"truthType",
"truth_type", noSys=
True)
148 config.addOutputVar (self.containerName,
"truthOrigin",
"truth_origin", noSys=
True)
150 config.addOutputVar (self.containerName,
'muonType',
'muonType', noSys=
True, enabled=self.writeColumnarToolVariables)