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
48 "CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesL",
49 "CaloTopoClusters." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_L",
52 "CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesT",
53 "CaloTopoClusters." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_T",
56 DecoratorTool = CompFactory.CaloCalibClusterDecoratorToolOOC
57 decoratorTool = DecoratorTool(name,**kwargs,ExtraInputs = {(
'CaloCellContainer',
'StoreGateSvc+AllCalo')})
58 decoratorTool.CalibrationHitContainerNames = [
59 "LArCalibrationHitInactive",
60 "LArCalibrationHitActive",
61 "TileCalibHitActiveCell",
62 "TileCalibHitInactiveCell"
95 CaloLCClassificationTool, CaloLCWeightTool, CaloLCOutOfClusterTool, CaloLCDeadMaterialTool=CompFactory.getComps(
"CaloLCClassificationTool",
"CaloLCWeightTool",
"CaloLCOutOfClusterTool",
"CaloLCDeadMaterialTool",)
96 CaloClusterLocalCalib=CompFactory.CaloClusterLocalCalib
99 LCClassify.ClassificationKey =
"EMFracClassify"
100 LCClassify.UseSpread =
False
101 LCClassify.MaxProbability = 0.5
103 LCClassify.StoreClassificationProbabilityInAOD =
True
104 LCClassify.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
107 LCWeight.CorrectionKey =
"H1ClusterCellWeights"
108 LCWeight.SignalOverNoiseCut = 2.0
110 LCWeight.UseHadProbability =
True
112 LocalCalib = CaloClusterLocalCalib (
"LocalCalib")
113 LocalCalib.ClusterClassificationTool = [LCClassify]
114 LocalCalib.ClusterRecoStatus = [1,2]
115 LocalCalib.LocalCalibTools = [LCWeight]
116 LocalCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
120 LCOut.CorrectionKey =
"OOCCorrection"
121 LCOut.UseEmProbability =
False
122 LCOut.UseHadProbability =
True
124 OOCCalib = CaloClusterLocalCalib (
"OOCCalib")
125 OOCCalib.ClusterRecoStatus = [1,2]
126 OOCCalib.LocalCalibTools = [LCOut]
127 OOCCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
130 LCOutPi0.CorrectionKey =
"OOCPi0Correction"
131 LCOutPi0.UseEmProbability =
True
132 LCOutPi0.UseHadProbability =
False
134 OOCPi0Calib = CaloClusterLocalCalib (
"OOCPi0Calib")
135 OOCPi0Calib.ClusterRecoStatus = [1,2]
136 OOCPi0Calib.LocalCalibTools = [LCOutPi0]
138 OOCPi0Calib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
142 LCDeadMaterial.HadDMCoeffKey =
"HadDMCoeff2"
143 LCDeadMaterial.ClusterRecoStatus = 0
144 LCDeadMaterial.WeightModeDM = 2
145 LCDeadMaterial.UseHadProbability =
True
146 LCDeadMaterial.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
148 DMCalib = CaloClusterLocalCalib (
"DMCalib")
149 DMCalib.ClusterRecoStatus = [1,2]
150 DMCalib.LocalCalibTools = [LCDeadMaterial]
152 DMCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
162 result=ComponentAccumulator()
163 CaloClusterMomentsMaker=CompFactory.CaloClusterMomentsMaker
164 TopoMoments = CaloClusterMomentsMaker (
"TopoMoments")
165 TopoMoments.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
166 from AthenaCommon.SystemOfUnits
import deg
167 TopoMoments.MaxAxisAngle = 20*deg
168 TopoMoments.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
169 TopoMoments.MinBadLArQuality = 4000
170 TopoMoments.MomentsNames = [
"FIRST_PHI"
209 if not flags.Common.isOnline:
210 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBCfg
211 result.merge(LArElecCalibDBCfg(flags,[
"HVScaleCorr"]))
213 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey=
"LArHVScaleCorr")
215 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey=
"LArHVScaleCorrRecomputed")
216 TopoMoments.MomentsNames += [
"ENG_BAD_HV_CELLS"
220 TopoMoments.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
222 result.setPrivateTools(TopoMoments)
227 CaloClusterMomentsMaker_DigiHSTruth=CompFactory.CaloClusterMomentsMaker_DigiHSTruth
228 TopoMoments_Truth = CaloClusterMomentsMaker_DigiHSTruth (
"TopoMoments_Truth")
229 TopoMoments_Truth.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
230 from AthenaCommon.SystemOfUnits
import deg
231 TopoMoments_Truth.MaxAxisAngle = 20*deg
232 TopoMoments_Truth.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
233 TopoMoments_Truth.MinBadLArQuality = 4000
234 TopoMoments_Truth.MomentsNames = [
"FIRST_PHI_DigiHSTruth"
235 ,
"FIRST_ETA_DigiHSTruth"
236 ,
"SECOND_R_DigiHSTruth"
237 ,
"SECOND_LAMBDA_DigiHSTruth"
238 ,
"DELTA_PHI_DigiHSTruth"
239 ,
"DELTA_THETA_DigiHSTruth"
240 ,
"DELTA_ALPHA_DigiHSTruth"
241 ,
"CENTER_X_DigiHSTruth"
242 ,
"CENTER_Y_DigiHSTruth"
243 ,
"CENTER_Z_DigiHSTruth"
244 ,
"CENTER_MAG_DigiHSTruth"
245 ,
"CENTER_LAMBDA_DigiHSTruth"
246 ,
"LATERAL_DigiHSTruth"
247 ,
"LONGITUDINAL_DigiHSTruth"
248 ,
"ENG_FRAC_CORE_DigiHSTruth"
249 ,
"FIRST_ENG_DENS_DigiHSTruth"
250 ,
"SECOND_ENG_DENS_DigiHSTruth"
251 ,
"ISOLATION_DigiHSTruth"
252 ,
"BAD_CELLS_CORR_E_DigiHSTruth"
253 ,
"ENG_POS_DigiHSTruth"
254 ,
"SIGNIFICANCE_DigiHSTruth"
255 ,
"CELL_SIGNIFICANCE_DigiHSTruth"
256 ,
"CELL_SIG_SAMPLING_DigiHSTruth"
257 ,
"AVG_LAR_Q_DigiHSTruth"
258 ,
"AVG_TILE_Q_DigiHSTruth"
259 ,
"ENERGY_DigiHSTruth"
263 return TopoMoments_Truth
296 result=ComponentAccumulator()
298 TopoMaker = CompFactory.CaloTopoClusterMaker(
"TopoMaker")
300 TopoMaker.CellsName = cellsname
301 TopoMaker.CalorimeterNames=[
"LAREM",
307 TopoMaker.SeedSamplingNames = [
"PreSamplerB",
"EMB1",
"EMB2",
"EMB3",
308 "PreSamplerE",
"EME1",
"EME2",
"EME3",
309 "HEC0",
"HEC1",
"HEC2",
"HEC3",
310 "TileBar0",
"TileBar1",
"TileBar2",
311 "TileExt0",
"TileExt1",
"TileExt2",
312 "TileGap1",
"TileGap2",
"TileGap3",
313 "FCAL0",
"FCAL1",
"FCAL2"]
314 TopoMaker.NeighborOption =
"super3D"
315 TopoMaker.RestrictHECIWandFCalNeighbors =
False
316 TopoMaker.RestrictPSNeighbors =
True
317 TopoMaker.CellThresholdOnEorAbsEinSigma = 0.0
318 TopoMaker.NeighborThresholdOnEorAbsEinSigma = 2.0
319 TopoMaker.SeedThresholdOnEorAbsEinSigma = 4.0
322 TopoMaker.SeedCutsInT = flags.Calo.TopoCluster.doTimeCut
323 TopoMaker.CutOOTseed = flags.Calo.TopoCluster.extendTimeCut
and flags.Calo.TopoCluster.doTimeCut
324 TopoMaker.UseTimeCutUpperLimit = flags.Calo.TopoCluster.useUpperLimitForTimeCut
325 TopoMaker.TimeCutUpperLimit = flags.Calo.TopoCluster.timeCutUpperLimit
326 TopoMaker.XTalkEM2 = flags.Calo.TopoCluster.xtalkEM2
327 TopoMaker.XTalkEM2D = flags.Calo.TopoCluster.xtalkEM2D
328 TopoMaker.XTalkEM2n = flags.Calo.TopoCluster.xtalkEM2n
329 TopoMaker.XTalkEM3 = flags.Calo.TopoCluster.xtalkEM3
330 TopoMaker.XTalkEMEta = flags.Calo.TopoCluster.xtalkEMEta
331 TopoMaker.XTalkDeltaT = flags.Calo.TopoCluster.xtalkDeltaT
332 TopoMaker.XTalk2Eratio1 = flags.Calo.TopoCluster.xtalk2Eratio1
333 TopoMaker.XTalk2Eratio2 = flags.Calo.TopoCluster.xtalk2Eratio2
334 TopoMaker.XTalk3Eratio = flags.Calo.TopoCluster.xtalk3Eratio
335 TopoMaker.XTalkEtaEratio = flags.Calo.TopoCluster.xtalkEtaEratio
336 TopoMaker.XTalk2DEratio = flags.Calo.TopoCluster.xtalk2DEratio
343 TopoMaker.SeedCutsInAbsE =
True
344 TopoMaker.ClusterCutsInAbsEt =
True
345 TopoMaker.ClusterEtorAbsEtCut = 0.0*MeV
347 TopoMaker.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
349 TopoMaker.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
351 result.setPrivateTools(TopoMaker)
355 result=ComponentAccumulator()
356 TopoSplitter = CompFactory.CaloTopoClusterSplitter(
"TopoSplitter")
362 TopoSplitter.SamplingNames = [
"EMB2",
"EMB3",
369 TopoSplitter.SecondarySamplingNames = [
"EMB1",
"EME1",
370 "TileBar0",
"TileBar1",
"TileBar2",
371 "TileExt0",
"TileExt1",
"TileExt2",
372 "HEC0",
"HEC1",
"HEC2",
"HEC3",
374 TopoSplitter.ShareBorderCells =
True
375 TopoSplitter.RestrictHECIWandFCalNeighbors =
False
376 TopoSplitter.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
378 TopoSplitter.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
380 result.setPrivateTools(TopoSplitter)
383def CaloTopoClusterCfg(flags, cellsname="AllCalo", clustersname=None, clustersnapname="CaloTopoClusters"):
385 Configures topo clustering
387 If output writing is enabled (ESD,AOD) the topo clusters are added to them
389 doLCCalib = flags.Calo.TopoCluster.doTopoClusterLocalCalib
390 if clustersname
is None:
391 clustersname =
"CaloCalTopoClusters" if doLCCalib
else "CaloTopoClusters"
394 if clustersname==
"CaloTopoClusters" and doLCCalib
is True:
395 raise RuntimeError(
"Inconsistent arguments: Name must not be 'CaloTopoClusters' if doLCCalib is True")
397 result=ComponentAccumulator()
399 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
400 from TileGeoModel.TileGMConfig
import TileGMCfg
401 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
403 result.merge(CaloNoiseCondAlgCfg(flags,
"totalNoise"))
405 result.merge(CaloNoiseCondAlgCfg(flags,
"electronicNoise"))
407 CaloClusterMaker, CaloClusterSnapshot=CompFactory.getComps(
"CaloClusterMaker",
"CaloClusterSnapshot",)
409 result.merge(LArGMCfg(flags))
411 result.merge(TileGMCfg(flags))
424 CaloTopoCluster.ClustersOutputName=clustersname
426 CaloTopoCluster.ClusterMakerTools = [TopoMaker, TopoSplitter]
428 from CaloBadChannelTool.CaloBadChanToolConfig
import CaloBadChanToolCfg
429 caloBadChanTool = result.popToolsAndMerge( CaloBadChanToolCfg(flags) )
430 CaloClusterBadChannelList=CompFactory.CaloClusterBadChannelList
432 CaloTopoCluster.ClusterCorrectionTools += [BadChannelListCorr]
435 CaloTopoCluster.ClusterCorrectionTools += [momentsMaker]
438 if flags.Calo.TopoCluster.doCalibHitMoments:
440 CaloTopoCluster.ClusterCorrectionTools += [calibHitsMomentsMaker]
441 if clustersname ==
"CaloTopoClusters":
446 CaloTopoCluster.ClusterCorrectionTools += [caloCalibTruthMapMaker, caloCalibDecorator, caloCalibDecoratorFullEnergy,caloCalibDecoratorOOC]
451 theCaloClusterSnapshot=
CaloClusterSnapshot(OutputName=clustersnapname,SetCrossLinks=
True,FinalClusterContainerName=clustersname)
452 CaloTopoCluster.ClusterCorrectionTools += [theCaloClusterSnapshot]
456 from CaloRec.CaloTopoClusterConfig
import caloTopoCoolFolderCfg
460 result.addEventAlgo(CaloTopoCluster,primary=
True)
462 if CaloTopoCluster.ClustersOutputName
in flags.Calo.TopoCluster.skipWriteList:
468 AODMoments=[
"SECOND_R"
487 if flags.Calo.TopoCluster.writeExtendedClusterMoments:
488 AODMoments += [
"LATERAL"
494 if flags.Reco.EnableHI:
495 AODMoments += [
"CELL_SIG_SAMPLING"]
497 if flags.Calo.TopoCluster.writeCalibHitClusterMoments:
498 AODMoments += [
"ENG_CALIB_TOT"
504 ,
"ENG_CALIB_DEAD_TOT"
505 ,
"ENG_CALIB_DEAD_EMB0"
506 ,
"ENG_CALIB_DEAD_TILE0"
507 ,
"ENG_CALIB_DEAD_TILEG3"
508 ,
"ENG_CALIB_DEAD_EME0"
509 ,
"ENG_CALIB_DEAD_HEC0"
510 ,
"ENG_CALIB_DEAD_FCAL"
511 ,
"ENG_CALIB_DEAD_LEAKAGE"
512 ,
"ENG_CALIB_DEAD_UNCLASS"
514 ,
"ENG_CALIB_FRAC_HAD"
515 ,
"ENG_CALIB_FRAC_REST"]
518 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD, addToESD
519 toESD = [f
"xAOD::CaloClusterContainer#{CaloTopoCluster.ClustersOutputName}",
520 f
"xAOD::CaloClusterAuxContainer#{CaloTopoCluster.ClustersOutputName}Aux.-sigmaWidth",
521 f
"CaloClusterCellLinkContainer#{CaloTopoCluster.ClustersOutputName}_links"]
522 toAOD = [f
"xAOD::CaloClusterContainer#{CaloTopoCluster.ClustersOutputName}",
523 f
"CaloClusterCellLinkContainer#{CaloTopoCluster.ClustersOutputName}_links"]
525 AODMoments.append(
"CellLink")
526 if flags.Calo.TopoCluster.addCalibrationHitDecoration:
527 AODMoments.append(flags.Calo.TopoCluster.CalibrationHitDecorationName)
529 if flags.Calo.TopoCluster.addCPData:
530 AODMoments += [
"ClusterWidthEta",
"ClusterWidthPhi"]
532 auxItems = f
"xAOD::CaloClusterAuxContainer#{CaloTopoCluster.ClustersOutputName}Aux."
533 auxItems+=
".".join(AODMoments)
535 toAOD.append(auxItems)
537 result.merge(addToESD(flags, toESD))
538 result.merge(addToAOD(flags, toAOD))
543 from AthenaCommon.Logging
import logging
544 mlog = logging.getLogger(
'CaloTopoClusterConfig:addSnapshot')
545 corrTools=topomaker.ClusterCorrectionTools
549 newCorrTools.append(t)
550 if (t.getName()==corrName):
551 newSnapshot=CompFactory.CaloClusterSnapshot(
"Snapshot_"+corrName,OutputName=contName,FinalClusterContainerName=topomaker.ClustersOutputName)
552 newCorrTools.append(newSnapshot)
555 mlog.error(
"Did not find cluster correction tool %s", corrName)
557 mlog.info(
"Added cluster snapshot after correction tool %s", corrName)
558 topomaker.ClusterCorrectionTools = newCorrTools
559 topomaker.ClusterCorrectionTools += [newSnapshot]
565 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
566 flags = initConfigFlags()
567 from AthenaConfiguration.TestDefaults
import defaultTestFiles
568 flags.Input.Files = defaultTestFiles.ESD_RUN3_MC
569 flags.Output.ESDFileName=
"esdOut.pool.root"
570 flags.Exec.MaxEvents = 10
574 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
575 cfg = MainServicesCfg(flags)
577 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
578 cfg.merge(PoolReadCfg(flags))
582 topoAlg = topoAcc.getPrimary()
583 topoAlg.ClustersOutputName =
"CaloCalTopoClustersNew"
587 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
588 cfg.merge(OutputStreamCfg(flags,
"xAOD", ItemList = [
"xAOD::CaloClusterContainer#CaloCalTopoClusters*",
589 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
592 ThinNegativeEnergyCaloClustersAlg=CompFactory.ThinNegativeEnergyCaloClustersAlg
594 "ThinNegativeEnergyCaloClustersAlg",
595 CaloClustersKey=topoAlg.ClustersOutputName,
596 ThinNegativeEnergyCaloClusters =
True,
597 StreamName =
'StreamAOD'
599 cfg.addEventAlgo(theNegativeEnergyCaloClustersThinner,
"AthAlgSeq")
601 cfg.addEventAlgo(CompFactory.ClusterDumper(
"TopoDumper",ContainerName=topoAlg.ClustersOutputName,FileName=
"TopoClusters.txt",
602 ReducedPrecision=
True),sequenceName=
"AthAlgSeq")
604 return cfg.run().isSuccess()