120 CaloLCClassificationTool, CaloLCWeightTool, CaloLCOutOfClusterTool, CaloLCDeadMaterialTool=CompFactory.getComps(
"CaloLCClassificationTool",
"CaloLCWeightTool",
"CaloLCOutOfClusterTool",
"CaloLCDeadMaterialTool",)
121 CaloClusterLocalCalib=CompFactory.CaloClusterLocalCalib
124 LCClassify.ClassificationKey =
"EMFracClassify"
125 LCClassify.UseSpread =
False
126 LCClassify.MaxProbability = 0.5
128 LCClassify.StoreClassificationProbabilityInAOD =
True
129 LCClassify.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
132 LCWeight.CorrectionKey =
"H1ClusterCellWeights"
133 LCWeight.SignalOverNoiseCut = 2.0
135 LCWeight.UseHadProbability =
True
137 LocalCalib = CaloClusterLocalCalib (
"LocalCalib")
138 LocalCalib.ClusterClassificationTool = [LCClassify]
139 LocalCalib.ClusterRecoStatus = [1,2]
140 LocalCalib.LocalCalibTools = [LCWeight]
141 LocalCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
145 LCOut.CorrectionKey =
"OOCCorrection"
146 LCOut.UseEmProbability =
False
147 LCOut.UseHadProbability =
True
149 OOCCalib = CaloClusterLocalCalib (
"OOCCalib")
150 OOCCalib.ClusterRecoStatus = [1,2]
151 OOCCalib.LocalCalibTools = [LCOut]
152 OOCCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
155 LCOutPi0.CorrectionKey =
"OOCPi0Correction"
156 LCOutPi0.UseEmProbability =
True
157 LCOutPi0.UseHadProbability =
False
159 OOCPi0Calib = CaloClusterLocalCalib (
"OOCPi0Calib")
160 OOCPi0Calib.ClusterRecoStatus = [1,2]
161 OOCPi0Calib.LocalCalibTools = [LCOutPi0]
163 OOCPi0Calib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
167 LCDeadMaterial.HadDMCoeffKey =
"HadDMCoeff2"
168 LCDeadMaterial.ClusterRecoStatus = 0
169 LCDeadMaterial.WeightModeDM = 2
170 LCDeadMaterial.UseHadProbability =
True
171 LCDeadMaterial.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
173 DMCalib = CaloClusterLocalCalib (
"DMCalib")
174 DMCalib.ClusterRecoStatus = [1,2]
175 DMCalib.LocalCalibTools = [LCDeadMaterial]
177 DMCalib.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
187 result=ComponentAccumulator()
188 CaloClusterMomentsMaker=CompFactory.CaloClusterMomentsMaker
189 TopoMoments = CaloClusterMomentsMaker (
"TopoMoments")
190 TopoMoments.WeightingOfNegClusters = flags.Calo.TopoCluster.doTreatEnergyCutAsAbsolute
191 from AthenaCommon.SystemOfUnits
import deg
192 TopoMoments.MaxAxisAngle = 20*deg
193 TopoMoments.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
194 TopoMoments.MinBadLArQuality = 4000
195 TopoMoments.MomentsNames = [
"FIRST_PHI"
234 if not flags.Common.isOnline:
235 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBCfg
236 result.merge(LArElecCalibDBCfg(flags,[
"HVScaleCorr"]))
238 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey=
"LArHVScaleCorr")
240 TopoMoments.LArHVFraction=CompFactory.LArHVFraction(HVScaleCorrKey=
"LArHVScaleCorrRecomputed")
241 TopoMoments.MomentsNames += [
"ENG_BAD_HV_CELLS"
245 TopoMoments.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
247 result.setPrivateTools(TopoMoments)
321 result=ComponentAccumulator()
323 TopoMaker = CompFactory.CaloTopoClusterMaker(
"TopoMaker")
325 TopoMaker.CellsName = cellsname
326 TopoMaker.CalorimeterNames=[
"LAREM",
332 TopoMaker.SeedSamplingNames = [
"PreSamplerB",
"EMB1",
"EMB2",
"EMB3",
333 "PreSamplerE",
"EME1",
"EME2",
"EME3",
334 "HEC0",
"HEC1",
"HEC2",
"HEC3",
335 "TileBar0",
"TileBar1",
"TileBar2",
336 "TileExt0",
"TileExt1",
"TileExt2",
337 "TileGap1",
"TileGap2",
"TileGap3",
338 "FCAL0",
"FCAL1",
"FCAL2"]
339 TopoMaker.NeighborOption =
"super3D"
340 TopoMaker.RestrictHECIWandFCalNeighbors =
False
341 TopoMaker.RestrictPSNeighbors =
True
342 TopoMaker.CellThresholdOnEorAbsEinSigma = cellthresholds[2]
343 TopoMaker.NeighborThresholdOnEorAbsEinSigma = cellthresholds[1]
344 TopoMaker.SeedThresholdOnEorAbsEinSigma = cellthresholds[0]
347 TopoMaker.SeedCutsInT = flags.Calo.TopoCluster.doTimeCut
348 TopoMaker.CutOOTseed = flags.Calo.TopoCluster.extendTimeCut
and flags.Calo.TopoCluster.doTimeCut
349 TopoMaker.UseTimeCutUpperLimit = flags.Calo.TopoCluster.useUpperLimitForTimeCut
350 TopoMaker.TimeCutUpperLimit = flags.Calo.TopoCluster.timeCutUpperLimit
351 TopoMaker.XTalkEM2 = flags.Calo.TopoCluster.xtalkEM2
352 TopoMaker.XTalkEM2D = flags.Calo.TopoCluster.xtalkEM2D
353 TopoMaker.XTalkEM2n = flags.Calo.TopoCluster.xtalkEM2n
354 TopoMaker.XTalkEM3 = flags.Calo.TopoCluster.xtalkEM3
355 TopoMaker.XTalkEMEta = flags.Calo.TopoCluster.xtalkEMEta
356 TopoMaker.XTalkDeltaT = flags.Calo.TopoCluster.xtalkDeltaT
357 TopoMaker.XTalk2Eratio1 = flags.Calo.TopoCluster.xtalk2Eratio1
358 TopoMaker.XTalk2Eratio2 = flags.Calo.TopoCluster.xtalk2Eratio2
359 TopoMaker.XTalk3Eratio = flags.Calo.TopoCluster.xtalk3Eratio
360 TopoMaker.XTalkEtaEratio = flags.Calo.TopoCluster.xtalkEtaEratio
361 TopoMaker.XTalk2DEratio = flags.Calo.TopoCluster.xtalk2DEratio
368 TopoMaker.SeedCutsInAbsE =
True
369 TopoMaker.ClusterCutsInAbsEt =
True
370 TopoMaker.ClusterEtorAbsEtCut = 0.0*MeV
372 TopoMaker.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
374 TopoMaker.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
376 result.setPrivateTools(TopoMaker)
424 clustersnapname="CaloTopoClusters",
425 cellthresholds=(4,2,0)
428 Configures topo clustering
430 If output writing is enabled (ESD,AOD) the topo clusters are added to them
432 doLCCalib = flags.Calo.TopoCluster.doTopoClusterLocalCalib
433 if clustersname
is None:
434 clustersname =
"CaloCalTopoClusters" if doLCCalib
else "CaloTopoClusters"
437 if clustersname==
"CaloTopoClusters" and doLCCalib
is True:
438 raise RuntimeError(
"Inconsistent arguments: Name must not be 'CaloTopoClusters' if doLCCalib is True")
440 clustersname_final = clustersname
441 if flags.Calo.TopoCluster.applyClusterTimingCut:
442 clustersname = f
"{clustersname}BeforeTimingCut"
444 result=ComponentAccumulator()
446 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
447 from TileGeoModel.TileGMConfig
import TileGMCfg
448 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
450 result.merge(CaloNoiseCondAlgCfg(flags,
"totalNoise"))
452 result.merge(CaloNoiseCondAlgCfg(flags,
"electronicNoise"))
454 CaloClusterMaker, CaloClusterSnapshot=CompFactory.getComps(
"CaloClusterMaker",
"CaloClusterSnapshot",)
456 result.merge(LArGMCfg(flags))
458 result.merge(TileGMCfg(flags))
460 TopoMaker = result.popToolsAndMerge(
CaloTopoClusterToolCfg(flags, cellsname=cellsname, cellthresholds=cellthresholds))
471 CaloTopoCluster.ClustersOutputName=clustersname
473 CaloTopoCluster.ClusterMakerTools = [TopoMaker, TopoSplitter]
475 from CaloBadChannelTool.CaloBadChanToolConfig
import CaloBadChanToolCfg
476 caloBadChanTool = result.popToolsAndMerge( CaloBadChanToolCfg(flags) )
477 CaloClusterBadChannelList=CompFactory.CaloClusterBadChannelList
479 CaloTopoCluster.ClusterCorrectionTools += [BadChannelListCorr]
482 CaloTopoCluster.ClusterCorrectionTools += [momentsMaker]
485 if flags.Calo.TopoCluster.doCalibHitMoments:
487 CaloTopoCluster.ClusterCorrectionTools += [calibHitsMomentsMaker]
490 caloCalibDecorator.CaloClusterWriteDecorHandleKey_NLeadingTruthParticles = (
491 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Visible"
494 caloCalibDecoratorFullEnergy.CaloClusterWriteDecorHandleKey_NLeadingTruthParticles = (
495 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Full"
498 caloCalibDecoratorOOC.CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesL = (
499 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_L"
501 caloCalibDecoratorOOC.CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesT = (
502 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_T"
506 caloCalibDecoratorDM.CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesDM = (
507 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_DM"
510 CaloTopoCluster.ClusterCorrectionTools += [
511 caloCalibTruthMapMaker,
513 caloCalibDecoratorFullEnergy,
514 caloCalibDecoratorOOC,
515 caloCalibDecoratorDM,
521 theCaloClusterSnapshot=
CaloClusterSnapshot(OutputName=clustersnapname,SetCrossLinks=
True,FinalClusterContainerName=clustersname)
522 CaloTopoCluster.ClusterCorrectionTools += [theCaloClusterSnapshot]
526 from CaloRec.CaloTopoClusterConfig
import caloTopoCoolFolderCfg
530 result.addEventAlgo(CaloTopoCluster,primary=
True)
532 if flags.Calo.TopoCluster.applyClusterTimingCut:
535 name = f
"{clustersname}Filter",
536 InputClusters = clustersname,
537 OutputClusters = clustersname_final,
540 if clustersname_final
in flags.Calo.TopoCluster.skipWriteList:
546 AODMoments=[
"SECOND_R"
565 if flags.Calo.TopoCluster.writeExtendedClusterMoments:
566 AODMoments += [
"LATERAL"
572 if flags.Reco.EnableHI:
573 AODMoments += [
"CELL_SIG_SAMPLING"]
575 if flags.Calo.TopoCluster.writeCalibHitClusterMoments:
576 AODMoments += [
"ENG_CALIB_TOT"
582 ,
"ENG_CALIB_DEAD_TOT"
583 ,
"ENG_CALIB_DEAD_EMB0"
584 ,
"ENG_CALIB_DEAD_TILE0"
585 ,
"ENG_CALIB_DEAD_TILEG3"
586 ,
"ENG_CALIB_DEAD_EME0"
587 ,
"ENG_CALIB_DEAD_HEC0"
588 ,
"ENG_CALIB_DEAD_FCAL"
589 ,
"ENG_CALIB_DEAD_LEAKAGE"
590 ,
"ENG_CALIB_DEAD_UNCLASS"
592 ,
"ENG_CALIB_FRAC_HAD"
593 ,
"ENG_CALIB_FRAC_REST"]
596 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD, addToESD
597 toESD = [f
"xAOD::CaloClusterContainer#{clustersname_final}",
598 f
"xAOD::CaloClusterAuxContainer#{clustersname_final}Aux.-sigmaWidth",
599 f
"CaloClusterCellLinkContainer#{clustersname_final}_links"]
600 toAOD = [f
"xAOD::CaloClusterContainer#{clustersname_final}",
601 f
"CaloClusterCellLinkContainer#{clustersname_final}_links"]
603 AODMoments.append(
"CellLink")
604 if flags.Calo.TopoCluster.addCalibrationHitDecoration:
606 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Visible",
607 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Full",
608 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_L",
609 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_T",
610 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_DM",
613 if flags.Calo.TopoCluster.addCPData:
614 AODMoments += [
"ClusterWidthEta",
"ClusterWidthPhi"]
616 auxItems = f
"xAOD::CaloClusterAuxContainer#{clustersname_final}Aux."
617 auxItems+=
".".join(AODMoments)
619 toAOD.append(auxItems)
621 result.merge(addToESD(flags, toESD))
622 result.merge(addToAOD(flags, toAOD))
649 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
650 flags = initConfigFlags()
651 from AthenaConfiguration.TestDefaults
import defaultTestFiles
652 flags.Input.Files = defaultTestFiles.ESD_RUN3_MC
653 flags.Output.ESDFileName=
"esdOut.pool.root"
654 flags.Exec.MaxEvents = 10
658 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
659 cfg = MainServicesCfg(flags)
661 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
662 cfg.merge(PoolReadCfg(flags))
666 topoAlg = topoAcc.getPrimary()
667 topoAlg.ClustersOutputName =
"CaloCalTopoClustersNew"
671 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
672 cfg.merge(OutputStreamCfg(flags,
"xAOD", ItemList = [
"xAOD::CaloClusterContainer#CaloCalTopoClusters*",
673 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
676 ThinNegativeEnergyCaloClustersAlg=CompFactory.ThinNegativeEnergyCaloClustersAlg
678 "ThinNegativeEnergyCaloClustersAlg",
679 CaloClustersKey=topoAlg.ClustersOutputName,
680 ThinNegativeEnergyCaloClusters =
True,
681 StreamName =
'StreamAOD'
683 cfg.addEventAlgo(theNegativeEnergyCaloClustersThinner,
"AthAlgSeq")
685 cfg.addEventAlgo(CompFactory.ClusterDumper(
"TopoDumper",ContainerName=topoAlg.ClustersOutputName,FileName=
"TopoClusters.txt",
686 ReducedPrecision=
True),sequenceName=
"AthAlgSeq")
688 return cfg.run().isSuccess()