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)
324 result=ComponentAccumulator()
326 TopoMaker = CompFactory.CaloTopoClusterMaker(
"TopoMaker")
328 TopoMaker.CellsName = cellsname
329 TopoMaker.CalorimeterNames=[
"LAREM",
335 TopoMaker.SeedSamplingNames = [
"PreSamplerB",
"EMB1",
"EMB2",
"EMB3",
336 "PreSamplerE",
"EME1",
"EME2",
"EME3",
337 "HEC0",
"HEC1",
"HEC2",
"HEC3",
338 "TileBar0",
"TileBar1",
"TileBar2",
339 "TileExt0",
"TileExt1",
"TileExt2",
340 "TileGap1",
"TileGap2",
"TileGap3",
341 "FCAL0",
"FCAL1",
"FCAL2"]
342 TopoMaker.NeighborOption =
"super3D"
343 TopoMaker.RestrictHECIWandFCalNeighbors =
False
344 TopoMaker.RestrictPSNeighbors =
True
345 TopoMaker.CellThresholdOnEorAbsEinSigma = cellthresholds[2]
346 TopoMaker.NeighborThresholdOnEorAbsEinSigma = cellthresholds[1]
347 TopoMaker.SeedThresholdOnEorAbsEinSigma = cellthresholds[0]
350 TopoMaker.SeedCutsInT = flags.Calo.TopoCluster.doTimeCut
351 TopoMaker.CutOOTseed = flags.Calo.TopoCluster.extendTimeCut
and flags.Calo.TopoCluster.doTimeCut
352 TopoMaker.UseTimeCutUpperLimit = flags.Calo.TopoCluster.useUpperLimitForTimeCut
353 TopoMaker.TimeCutUpperLimit = flags.Calo.TopoCluster.timeCutUpperLimit
354 TopoMaker.XTalkEM2 = flags.Calo.TopoCluster.xtalkEM2
355 TopoMaker.XTalkEM2D = flags.Calo.TopoCluster.xtalkEM2D
356 TopoMaker.XTalkEM2n = flags.Calo.TopoCluster.xtalkEM2n
357 TopoMaker.XTalkEM3 = flags.Calo.TopoCluster.xtalkEM3
358 TopoMaker.XTalkEMEta = flags.Calo.TopoCluster.xtalkEMEta
359 TopoMaker.XTalkDeltaT = flags.Calo.TopoCluster.xtalkDeltaT
360 TopoMaker.XTalk2Eratio1 = flags.Calo.TopoCluster.xtalk2Eratio1
361 TopoMaker.XTalk2Eratio2 = flags.Calo.TopoCluster.xtalk2Eratio2
362 TopoMaker.XTalk3Eratio = flags.Calo.TopoCluster.xtalk3Eratio
363 TopoMaker.XTalkEtaEratio = flags.Calo.TopoCluster.xtalkEtaEratio
364 TopoMaker.XTalk2DEratio = flags.Calo.TopoCluster.xtalk2DEratio
371 TopoMaker.SeedCutsInAbsE =
True
372 TopoMaker.ClusterCutsInAbsEt =
True
373 TopoMaker.ClusterEtorAbsEtCut = 0.0*MeV
375 TopoMaker.TwoGaussianNoise = flags.Calo.TopoCluster.doTwoGaussianNoise
377 TopoMaker.UseGPUCriteria = flags.Calo.TopoCluster.UseGPUCompatibleCriteria
379 result.setPrivateTools(TopoMaker)
427 clustersnapname="CaloTopoClusters",
428 cellthresholds=(4,2,0)
431 Configures topo clustering
433 If output writing is enabled (ESD,AOD) the topo clusters are added to them
435 doLCCalib = flags.Calo.TopoCluster.doTopoClusterLocalCalib
436 if clustersname
is None:
437 clustersname =
"CaloCalTopoClusters" if doLCCalib
else "CaloTopoClusters"
440 if clustersname==
"CaloTopoClusters" and doLCCalib
is True:
441 raise RuntimeError(
"Inconsistent arguments: Name must not be 'CaloTopoClusters' if doLCCalib is True")
443 clustersname_final = clustersname
444 if flags.Calo.TopoCluster.applyClusterTimingCut:
445 clustersname = f
"{clustersname}BeforeTimingCut"
447 result=ComponentAccumulator()
449 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
450 from TileGeoModel.TileGMConfig
import TileGMCfg
451 from CaloTools.CaloNoiseCondAlgConfig
import CaloNoiseCondAlgCfg
453 result.merge(CaloNoiseCondAlgCfg(flags,
"totalNoise"))
455 result.merge(CaloNoiseCondAlgCfg(flags,
"electronicNoise"))
457 CaloClusterMaker, CaloClusterSnapshot=CompFactory.getComps(
"CaloClusterMaker",
"CaloClusterSnapshot",)
459 result.merge(LArGMCfg(flags))
461 result.merge(TileGMCfg(flags))
463 TopoMaker = result.popToolsAndMerge(
CaloTopoClusterToolCfg(flags, cellsname=cellsname, cellthresholds=cellthresholds))
474 CaloTopoCluster.ClustersOutputName=clustersname
476 CaloTopoCluster.ClusterMakerTools = [TopoMaker, TopoSplitter]
478 from CaloBadChannelTool.CaloBadChanToolConfig
import CaloBadChanToolCfg
479 caloBadChanTool = result.popToolsAndMerge( CaloBadChanToolCfg(flags) )
480 CaloClusterBadChannelList=CompFactory.CaloClusterBadChannelList
482 CaloTopoCluster.ClusterCorrectionTools += [BadChannelListCorr]
485 CaloTopoCluster.ClusterCorrectionTools += [momentsMaker]
488 if flags.Calo.TopoCluster.doCalibHitMoments:
490 CaloTopoCluster.ClusterCorrectionTools += [calibHitsMomentsMaker]
493 caloCalibDecorator.CaloClusterWriteDecorHandleKey_NLeadingTruthParticles = (
494 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Visible"
497 caloCalibDecoratorFullEnergy.CaloClusterWriteDecorHandleKey_NLeadingTruthParticles = (
498 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Full"
501 caloCalibDecoratorOOC.CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesL = (
502 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_L"
504 caloCalibDecoratorOOC.CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesT = (
505 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_T"
509 caloCalibDecoratorDM.CaloClusterWriteDecorHandleKey_NLeadingTruthParticlesDM = (
510 clustersname +
"." + flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_DM"
513 CaloTopoCluster.ClusterCorrectionTools += [
514 caloCalibTruthMapMaker,
516 caloCalibDecoratorFullEnergy,
517 caloCalibDecoratorOOC,
518 caloCalibDecoratorDM,
521 if flags.Calo.TopoCluster.doDigiHSTruthMoments:
523 CaloTopoCluster.ClusterCorrectionTools += [truthMomentMaker]
526 theCaloClusterSnapshot=
CaloClusterSnapshot(OutputName=clustersnapname,SetCrossLinks=
True,FinalClusterContainerName=clustersname)
527 CaloTopoCluster.ClusterCorrectionTools += [theCaloClusterSnapshot]
531 from CaloRec.CaloTopoClusterConfig
import caloTopoCoolFolderCfg
535 result.addEventAlgo(CaloTopoCluster,primary=
True)
537 if flags.Calo.TopoCluster.applyClusterTimingCut:
540 name = f
"{clustersname}Filter",
541 InputClusters = clustersname,
542 OutputClusters = clustersname_final,
545 if clustersname_final
in flags.Calo.TopoCluster.skipWriteList:
551 AODMoments=[
"SECOND_R"
570 if flags.Calo.TopoCluster.writeExtendedClusterMoments:
571 AODMoments += [
"LATERAL"
577 if flags.Reco.EnableHI:
578 AODMoments += [
"CELL_SIG_SAMPLING"]
580 if flags.Calo.TopoCluster.writeCalibHitClusterMoments:
581 AODMoments += [
"ENG_CALIB_TOT"
587 ,
"ENG_CALIB_DEAD_TOT"
588 ,
"ENG_CALIB_DEAD_EMB0"
589 ,
"ENG_CALIB_DEAD_TILE0"
590 ,
"ENG_CALIB_DEAD_TILEG3"
591 ,
"ENG_CALIB_DEAD_EME0"
592 ,
"ENG_CALIB_DEAD_HEC0"
593 ,
"ENG_CALIB_DEAD_FCAL"
594 ,
"ENG_CALIB_DEAD_LEAKAGE"
595 ,
"ENG_CALIB_DEAD_UNCLASS"
597 ,
"ENG_CALIB_FRAC_HAD"
598 ,
"ENG_CALIB_FRAC_REST"]
600 if flags.Calo.TopoCluster.writeDigiHSTruthMoments:
601 AODMoments += [
"FIRST_PHI_DigiHSTruth"
602 ,
"FIRST_ETA_DigiHSTruth"
603 ,
"SECOND_R_DigiHSTruth"
604 ,
"SECOND_LAMBDA_DigiHSTruth"
605 ,
"DELTA_PHI_DigiHSTruth"
606 ,
"DELTA_THETA_DigiHSTruth"
607 ,
"DELTA_ALPHA_DigiHSTruth"
608 ,
"CENTER_X_DigiHSTruth"
609 ,
"CENTER_Y_DigiHSTruth"
610 ,
"CENTER_Z_DigiHSTruth"
611 ,
"CENTER_MAG_DigiHSTruth"
612 ,
"CENTER_LAMBDA_DigiHSTruth"
613 ,
"LATERAL_DigiHSTruth"
614 ,
"LONGITUDINAL_DigiHSTruth"
615 ,
"ENG_FRAC_CORE_DigiHSTruth"
616 ,
"FIRST_ENG_DENS_DigiHSTruth"
617 ,
"SECOND_ENG_DENS_DigiHSTruth"
618 ,
"ISOLATION_DigiHSTruth"
619 ,
"BAD_CELLS_CORR_E_DigiHSTruth"
620 ,
"ENG_POS_DigiHSTruth"
621 ,
"SIGNIFICANCE_DigiHSTruth"
622 ,
"CELL_SIGNIFICANCE_DigiHSTruth"
623 ,
"CELL_SIG_SAMPLING_DigiHSTruth"
624 ,
"AVG_LAR_Q_DigiHSTruth"
625 ,
"AVG_TILE_Q_DigiHSTruth"
628 ,
"SECOND_TIME_DigiHSTruth"
629 ,
"ENERGY_DigiHSTruth"
634 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD, addToESD
635 toESD = [f
"xAOD::CaloClusterContainer#{clustersname_final}",
636 f
"xAOD::CaloClusterAuxContainer#{clustersname_final}Aux.-sigmaWidth",
637 f
"CaloClusterCellLinkContainer#{clustersname_final}_links"]
638 toAOD = [f
"xAOD::CaloClusterContainer#{clustersname_final}",
639 f
"CaloClusterCellLinkContainer#{clustersname_final}_links"]
641 AODMoments.append(
"CellLink")
642 if flags.Calo.TopoCluster.addCalibrationHitDecoration:
644 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Visible",
645 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_Full",
646 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_L",
647 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_OOC_T",
648 flags.Calo.TopoCluster.CalibrationHitDecorationName +
"_DM",
651 if flags.Calo.TopoCluster.addCPData:
652 AODMoments += [
"ClusterWidthEta",
"ClusterWidthPhi"]
654 auxItems = f
"xAOD::CaloClusterAuxContainer#{clustersname_final}Aux."
655 auxItems+=
".".join(AODMoments)
657 if flags.Calo.TopoCluster.writeDigiHSTruthMoments:
658 toAOD.append(
"CaloCellContainer#AllCalo_DigiHSTruth")
659 toESD.append(
"CaloCellContainer#AllCalo_DigiHSTruth")
661 toAOD.append(auxItems)
663 result.merge(addToESD(flags, toESD))
664 result.merge(addToAOD(flags, toAOD))
691 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
692 flags = initConfigFlags()
693 from AthenaConfiguration.TestDefaults
import defaultTestFiles
694 flags.Input.Files = defaultTestFiles.ESD_RUN3_MC
695 flags.Output.ESDFileName=
"esdOut.pool.root"
696 flags.Exec.MaxEvents = 10
700 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
701 cfg = MainServicesCfg(flags)
703 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
704 cfg.merge(PoolReadCfg(flags))
708 topoAlg = topoAcc.getPrimary()
709 topoAlg.ClustersOutputName =
"CaloCalTopoClustersNew"
713 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
714 cfg.merge(OutputStreamCfg(flags,
"xAOD", ItemList = [
"xAOD::CaloClusterContainer#CaloCalTopoClusters*",
715 "xAOD::CaloClusterAuxContainer#*CaloCalTopoClusters*Aux.",
718 ThinNegativeEnergyCaloClustersAlg=CompFactory.ThinNegativeEnergyCaloClustersAlg
720 "ThinNegativeEnergyCaloClustersAlg",
721 CaloClustersKey=topoAlg.ClustersOutputName,
722 ThinNegativeEnergyCaloClusters =
True,
723 StreamName =
'StreamAOD'
725 cfg.addEventAlgo(theNegativeEnergyCaloClustersThinner,
"AthAlgSeq")
727 cfg.addEventAlgo(CompFactory.ClusterDumper(
"TopoDumper",ContainerName=topoAlg.ClustersOutputName,FileName=
"TopoClusters.txt",
728 ReducedPrecision=
True),sequenceName=
"AthAlgSeq")
730 return cfg.run().isSuccess()