17 "CaloClusterWriteDecorHandleKey_NLeadingTruthParticles",
18 "CaloTopoClusters." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Visible"
22 TruthAttributerTool = CompFactory.CaloCalibClusterTruthAttributerTool
23 truth_tool = TruthAttributerTool(
"CaloCalibClusterTruthAttributerTool")
24 DecoratorTool = CompFactory.CaloCalibClusterDecoratorTool
25 decoratorTool = DecoratorTool(name,TruthAttributerTool=truth_tool,**kwargs,ExtraInputs = {(
'CaloCellContainer',
'StoreGateSvc+AllCalo')})
26 decoratorTool.useCellWeights =
True
32 "CaloClusterWriteDecorHandleKey_NLeadingTruthParticles",
33 "CaloTopoClusters." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Full"
35 TruthAttributerTool = CompFactory.CaloCalibClusterTruthAttributerTool
36 truth_tool = TruthAttributerTool(
"CaloCalibClusterTruthAttributerTool")
37 DecoratorTool = CompFactory.CaloCalibClusterDecoratorTool
38 decoratorTool = DecoratorTool(name, TruthAttributerTool=truth_tool, **kwargs,ExtraInputs = {(
'CaloCellContainer',
'StoreGateSvc+AllCalo')})
39 decoratorTool.useCellWeights =
True
40 decoratorTool.StoreFullTruthEnergy =
True
68 CaloLCClassificationTool, CaloLCWeightTool, CaloLCOutOfClusterTool, CaloLCDeadMaterialTool=CompFactory.getComps(
"CaloLCClassificationTool",
"CaloLCWeightTool",
"CaloLCOutOfClusterTool",
"CaloLCDeadMaterialTool",)
69 CaloClusterLocalCalib=CompFactory.CaloClusterLocalCalib
72 LCClassify.ClassificationKey =
"EMFracClassify"
73 LCClassify.UseSpread =
False
74 LCClassify.MaxProbability = 0.5
76 LCClassify.StoreClassificationProbabilityInAOD =
True
77 LCClassify.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
80 LCWeight.CorrectionKey =
"H1ClusterCellWeights"
81 LCWeight.SignalOverNoiseCut = 2.0
83 LCWeight.UseHadProbability =
True
85 LocalCalib = CaloClusterLocalCalib (
"LocalCalib")
86 LocalCalib.ClusterClassificationTool = [LCClassify]
87 LocalCalib.ClusterRecoStatus = [1,2]
88 LocalCalib.LocalCalibTools = [LCWeight]
89 LocalCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
93 LCOut.CorrectionKey =
"OOCCorrection"
94 LCOut.UseEmProbability =
False
95 LCOut.UseHadProbability =
True
97 OOCCalib = CaloClusterLocalCalib (
"OOCCalib")
98 OOCCalib.ClusterRecoStatus = [1,2]
99 OOCCalib.LocalCalibTools = [LCOut]
100 OOCCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
103 LCOutPi0.CorrectionKey =
"OOCPi0Correction"
104 LCOutPi0.UseEmProbability =
True
105 LCOutPi0.UseHadProbability =
False
107 OOCPi0Calib = CaloClusterLocalCalib (
"OOCPi0Calib")
108 OOCPi0Calib.ClusterRecoStatus = [1,2]
109 OOCPi0Calib.LocalCalibTools = [LCOutPi0]
111 OOCPi0Calib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
115 LCDeadMaterial.HadDMCoeffKey =
"HadDMCoeff2"
116 LCDeadMaterial.ClusterRecoStatus = 0
117 LCDeadMaterial.WeightModeDM = 2
118 LCDeadMaterial.UseHadProbability =
True
119 LCDeadMaterial.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
121 DMCalib = CaloClusterLocalCalib (
"DMCalib")
122 DMCalib.ClusterRecoStatus = [1,2]
123 DMCalib.LocalCalibTools = [LCDeadMaterial]
125 DMCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
135 result=ComponentAccumulator()
136 CaloClusterMomentsMaker=CompFactory.CaloClusterMomentsMaker
137 TopoMoments = CaloClusterMomentsMaker (
"TopoMoments")
138 TopoMoments.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
139 from AthenaCommon.SystemOfUnits
import deg
140 TopoMoments.MaxAxisAngle = 20*deg
141 TopoMoments.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
142 TopoMoments.MinBadLArQuality = 4000
143 TopoMoments.MomentsNames = [
"FIRST_PHI"
182 if not flags.Common.isOnline:
183 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBCfg
184 result.merge(LArElecCalibDBCfg(flags,[
"HVScaleCorr"]))
186 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey=
"LArHVScaleCorr")
188 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey=
"LArHVScaleCorrRecomputed")
189 TopoMoments.MomentsNames += [
"ENG_BAD_HV_CELLS"
193 TopoMoments.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
195 result.setPrivateTools(TopoMoments)
200 CaloClusterMomentsMaker_DigiHSTruth=CompFactory.CaloClusterMomentsMaker_DigiHSTruth
201 TopoMoments_Truth = CaloClusterMomentsMaker_DigiHSTruth (
"TopoMoments_Truth")
202 TopoMoments_Truth.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
203 from AthenaCommon.SystemOfUnits
import deg
204 TopoMoments_Truth.MaxAxisAngle = 20*deg
205 TopoMoments_Truth.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
206 TopoMoments_Truth.MinBadLArQuality = 4000
207 TopoMoments_Truth.MomentsNames = [
"FIRST_PHI_DigiHSTruth"
208 ,
"FIRST_ETA_DigiHSTruth"
209 ,
"SECOND_R_DigiHSTruth"
210 ,
"SECOND_LAMBDA_DigiHSTruth"
211 ,
"DELTA_PHI_DigiHSTruth"
212 ,
"DELTA_THETA_DigiHSTruth"
213 ,
"DELTA_ALPHA_DigiHSTruth"
214 ,
"CENTER_X_DigiHSTruth"
215 ,
"CENTER_Y_DigiHSTruth"
216 ,
"CENTER_Z_DigiHSTruth"
217 ,
"CENTER_MAG_DigiHSTruth"
218 ,
"CENTER_LAMBDA_DigiHSTruth"
219 ,
"LATERAL_DigiHSTruth"
220 ,
"LONGITUDINAL_DigiHSTruth"
221 ,
"ENG_FRAC_CORE_DigiHSTruth"
222 ,
"FIRST_ENG_DENS_DigiHSTruth"
223 ,
"SECOND_ENG_DENS_DigiHSTruth"
224 ,
"ISOLATION_DigiHSTruth"
225 ,
"BAD_CELLS_CORR_E_DigiHSTruth"
226 ,
"ENG_POS_DigiHSTruth"
227 ,
"SIGNIFICANCE_DigiHSTruth"
228 ,
"CELL_SIGNIFICANCE_DigiHSTruth"
229 ,
"CELL_SIG_SAMPLING_DigiHSTruth"
230 ,
"AVG_LAR_Q_DigiHSTruth"
231 ,
"AVG_TILE_Q_DigiHSTruth"
232 ,
"ENERGY_DigiHSTruth"
236 return TopoMoments_Truth
269 result=ComponentAccumulator()
271 TopoMaker = CompFactory.CaloTopoClusterMaker(
"TopoMaker")
273 TopoMaker.CellsName = cellsname
274 TopoMaker.CalorimeterNames=[
"LAREM",
280 TopoMaker.SeedSamplingNames = [
"PreSamplerB",
"EMB1",
"EMB2",
"EMB3",
281 "PreSamplerE",
"EME1",
"EME2",
"EME3",
282 "HEC0",
"HEC1",
"HEC2",
"HEC3",
283 "TileBar0",
"TileBar1",
"TileBar2",
284 "TileExt0",
"TileExt1",
"TileExt2",
285 "TileGap1",
"TileGap2",
"TileGap3",
286 "FCAL0",
"FCAL1",
"FCAL2"]
287 TopoMaker.NeighborOption =
"super3D"
288 TopoMaker.RestrictHECIWandFCalNeighbors =
False
289 TopoMaker.RestrictPSNeighbors =
True
290 TopoMaker.CellThresholdOnEorAbsEinSigma = 0.0
291 TopoMaker.NeighborThresholdOnEorAbsEinSigma = 2.0
292 TopoMaker.SeedThresholdOnEorAbsEinSigma = 4.0
295 TopoMaker.SeedCutsInT = flags.Calo.TopoCluster.doTimeCut
296 TopoMaker.CutOOTseed = flags.Calo.TopoCluster.extendTimeCut
and flags.Calo.TopoCluster.doTimeCut
297 TopoMaker.UseTimeCutUpperLimit = flags.Calo.TopoCluster.useUpperLimitForTimeCut
298 TopoMaker.TimeCutUpperLimit = flags.Calo.TopoCluster.timeCutUpperLimit
299 TopoMaker.XTalkEM2 = flags.Calo.TopoCluster.xtalkEM2
300 TopoMaker.XTalkEM2D = flags.Calo.TopoCluster.xtalkEM2D
301 TopoMaker.XTalkEM2n = flags.Calo.TopoCluster.xtalkEM2n
302 TopoMaker.XTalkEM3 = flags.Calo.TopoCluster.xtalkEM3
303 TopoMaker.XTalkEMEta = flags.Calo.TopoCluster.xtalkEMEta
304 TopoMaker.XTalkDeltaT = flags.Calo.TopoCluster.xtalkDeltaT
305 TopoMaker.XTalk2Eratio1 = flags.Calo.TopoCluster.xtalk2Eratio1
306 TopoMaker.XTalk2Eratio2 = flags.Calo.TopoCluster.xtalk2Eratio2
307 TopoMaker.XTalk3Eratio = flags.Calo.TopoCluster.xtalk3Eratio
308 TopoMaker.XTalkEtaEratio = flags.Calo.TopoCluster.xtalkEtaEratio
309 TopoMaker.XTalk2DEratio = flags.Calo.TopoCluster.xtalk2DEratio
316 TopoMaker.SeedCutsInAbsE =
True
317 TopoMaker.ClusterCutsInAbsEt =
True
318 TopoMaker.ClusterEtorAbsEtCut = 0.0*MeV
320 TopoMaker.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
322 TopoMaker.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
324 result.setPrivateTools(TopoMaker)
328 result=ComponentAccumulator()
329 TopoSplitter = CompFactory.CaloTopoClusterSplitter(
"TopoSplitter")
335 TopoSplitter.SamplingNames = [
"EMB2",
"EMB3",
342 TopoSplitter.SecondarySamplingNames = [
"EMB1",
"EME1",
343 "TileBar0",
"TileBar1",
"TileBar2",
344 "TileExt0",
"TileExt1",
"TileExt2",
345 "HEC0",
"HEC1",
"HEC2",
"HEC3",
347 TopoSplitter.ShareBorderCells =
True
348 TopoSplitter.RestrictHECIWandFCalNeighbors =
False
349 TopoSplitter.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
351 TopoSplitter.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
353 result.setPrivateTools(TopoSplitter)
356def CaloTopoClusterCfg(flags, cellsname="AllCalo", clustersname=None, clustersnapname="CaloTopoClusters"):
358 Configures topo clustering
360 If output writing is enabled (ESD,AOD) the topo clusters are added to them
362 doLCCalib = flags.Calo.TopoCluster.doTopoClusterLocalCalib
363 if clustersname
is None:
364 clustersname =
"CaloCalTopoClusters" if doLCCalib
else "CaloTopoClusters"
367 if clustersname==
"CaloTopoClusters" and doLCCalib
is True:
368 raise RuntimeError(
"Inconsistent arguments: Name must not be 'CaloTopoClusters' if doLCCalib is True")
370 result=ComponentAccumulator()
372 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
373 from TileGeoModel.TileGMConfig
import TileGMCfg
374 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
376 result.merge(CaloNoiseCondAlgCfg(flags,
"totalNoise"))
378 result.merge(CaloNoiseCondAlgCfg(flags,
"electronicNoise"))
380 CaloClusterMaker, CaloClusterSnapshot=CompFactory.getComps(
"CaloClusterMaker",
"CaloClusterSnapshot",)
382 result.merge(LArGMCfg(flags))
384 result.merge(TileGMCfg(flags))
397 CaloTopoCluster.ClustersOutputName=clustersname
399 CaloTopoCluster.ClusterMakerTools = [TopoMaker, TopoSplitter]
401 from CaloBadChannelTool.CaloBadChanToolConfig
import CaloBadChanToolCfg
402 caloBadChanTool = result.popToolsAndMerge( CaloBadChanToolCfg(flags) )
403 CaloClusterBadChannelList=CompFactory.CaloClusterBadChannelList
405 CaloTopoCluster.ClusterCorrectionTools += [BadChannelListCorr]
408 CaloTopoCluster.ClusterCorrectionTools += [momentsMaker]
411 if flags.Calo.TopoCluster.doCalibHitMoments:
413 CaloTopoCluster.ClusterCorrectionTools += [calibHitsMomentsMaker]
414 if clustersname ==
"CaloTopoClusters":
418 CaloTopoCluster.ClusterCorrectionTools += [caloCalibTruthMapMaker, caloCalibDecorator, caloCalibDecoratorFullEnergy]
423 theCaloClusterSnapshot=
CaloClusterSnapshot(OutputName=clustersnapname,SetCrossLinks=
True,FinalClusterContainerName=clustersname)
424 CaloTopoCluster.ClusterCorrectionTools += [theCaloClusterSnapshot]
428 from CaloRec.CaloTopoClusterConfig
import caloTopoCoolFolderCfg
432 result.addEventAlgo(CaloTopoCluster,primary=
True)
434 if CaloTopoCluster.ClustersOutputName
in flags.Calo.TopoCluster.skipWriteList:
440 AODMoments=[
"SECOND_R"
459 if flags.Calo.TopoCluster.writeExtendedClusterMoments:
460 AODMoments += [
"LATERAL"
466 if flags.Reco.EnableHI:
467 AODMoments += [
"CELL_SIG_SAMPLING"]
469 if flags.Calo.TopoCluster.writeCalibHitClusterMoments:
470 AODMoments += [
"ENG_CALIB_TOT"
476 ,
"ENG_CALIB_DEAD_TOT"
477 ,
"ENG_CALIB_DEAD_EMB0"
478 ,
"ENG_CALIB_DEAD_TILE0"
479 ,
"ENG_CALIB_DEAD_TILEG3"
480 ,
"ENG_CALIB_DEAD_EME0"
481 ,
"ENG_CALIB_DEAD_HEC0"
482 ,
"ENG_CALIB_DEAD_FCAL"
483 ,
"ENG_CALIB_DEAD_LEAKAGE"
484 ,
"ENG_CALIB_DEAD_UNCLASS"
486 ,
"ENG_CALIB_FRAC_HAD"
487 ,
"ENG_CALIB_FRAC_REST"]
490 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD, addToESD
491 toESD = [f
"xAOD::CaloClusterContainer#{CaloTopoCluster.ClustersOutputName}",
492 f
"xAOD::CaloClusterAuxContainer#{CaloTopoCluster.ClustersOutputName}Aux.-sigmaWidth",
493 f
"CaloClusterCellLinkContainer#{CaloTopoCluster.ClustersOutputName}_links"]
494 toAOD = [f
"xAOD::CaloClusterContainer#{CaloTopoCluster.ClustersOutputName}",
495 f
"CaloClusterCellLinkContainer#{CaloTopoCluster.ClustersOutputName}_links"]
497 AODMoments.append(
"CellLink")
498 if flags.Calo.TopoCluster.addCalibrationHitDecoration:
499 AODMoments.append(flags.Calo.TopoCluster.CalibrationHitDecorationName)
501 if flags.Calo.TopoCluster.addCPData:
502 AODMoments += [
"ClusterWidthEta",
"ClusterWidthPhi"]
504 auxItems = f
"xAOD::CaloClusterAuxContainer#{CaloTopoCluster.ClustersOutputName}Aux."
505 auxItems+=
".".join(AODMoments)
507 toAOD.append(auxItems)
509 result.merge(addToESD(flags, toESD))
510 result.merge(addToAOD(flags, toAOD))
515 from AthenaCommon.Logging
import logging
516 mlog = logging.getLogger(
'CaloTopoClusterConfig:addSnapshot')
517 corrTools=topomaker.ClusterCorrectionTools
521 newCorrTools.append(t)
522 if (t.getName()==corrName):
523 newSnapshot=CompFactory.CaloClusterSnapshot(
"Snapshot_"+corrName,OutputName=contName,FinalClusterContainerName=topomaker.ClustersOutputName)
524 newCorrTools.append(newSnapshot)
527 mlog.error(
"Did not find cluster correction tool %s", corrName)
529 mlog.info(
"Added cluster snapshot after correction tool %s", corrName)
530 topomaker.ClusterCorrectionTools = newCorrTools
531 topomaker.ClusterCorrectionTools += [newSnapshot]
537 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
538 flags = initConfigFlags()
539 from AthenaConfiguration.TestDefaults
import defaultTestFiles
540 flags.Input.Files = defaultTestFiles.ESD_RUN3_MC
541 flags.Output.ESDFileName=
"esdOut.pool.root"
542 flags.Exec.MaxEvents = 10
546 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
547 cfg = MainServicesCfg(flags)
549 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
550 cfg.merge(PoolReadCfg(flags))
553 topoAlg = topoAcc.getPrimary()
554 topoAlg.ClustersOutputName =
"CaloCalTopoClustersNew"
558 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
559 cfg.merge(OutputStreamCfg(flags,
"xAOD", ItemList = [
"xAOD::CaloClusterContainer#CaloCalTopoClusters*",
560 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
563 ThinNegativeEnergyCaloClustersAlg=CompFactory.ThinNegativeEnergyCaloClustersAlg
565 "ThinNegativeEnergyCaloClustersAlg",
566 CaloClustersKey=topoAlg.ClustersOutputName,
567 ThinNegativeEnergyCaloClusters =
True,
568 StreamName =
'StreamAOD'
570 cfg.addEventAlgo(theNegativeEnergyCaloClustersThinner,
"AthAlgSeq")
572 cfg.addEventAlgo(CompFactory.ClusterDumper(
"TopoDumper",ContainerName=topoAlg.ClustersOutputName,FileName=
"TopoClusters.txt",
573 ReducedPrecision=
True),sequenceName=
"AthAlgSeq")
575 return cfg.run().isSuccess()