Exemple #1
0
from CaloRec.CaloRecConf import CaloTopoClusterMaker, CaloTopoClusterSplitter, CaloClusterMomentsMaker, CaloClusterMaker, CaloCell2ClusterMapper
from CaloRec.CaloTopoClusterFlags import jobproperties
from AthenaCommon.SystemOfUnits import deg, GeV, MeV
from AthenaCommon.AlgSequence import AlgSequence
from AthenaCommon.GlobalFlags import globalflags

from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault
theCaloNoiseTool = CaloNoiseToolDefault()
from AthenaCommon.AppMgr import ToolSvc
ToolSvc += theCaloNoiseTool

TopoClusterForTaus = CaloTopoClusterMaker("TopoClusterForTaus")

TopoClusterForTaus.CellsNames = ["TauCells"]
#TopoClusterForTaus.OutputLevel=2
TopoClusterForTaus.CalorimeterNames = ["LAREM"]
TopoClusterForTaus.SeedSamplingNames = [
    "PreSamplerB", "EMB1", "EMB2", "PreSamplerE", "EME1", "EME2"
]
TopoClusterForTaus.CaloNoiseTool = theCaloNoiseTool
TopoClusterForTaus.UseCaloNoiseTool = True
TopoClusterForTaus.UsePileUpNoise = True
TopoClusterForTaus.NeighborOption = "super3D"
TopoClusterForTaus.RestrictHECIWandFCalNeighbors = False
TopoClusterForTaus.CellThresholdOnEorAbsEinSigma = 0.0
TopoClusterForTaus.NeighborThresholdOnEorAbsEinSigma = 2.0
TopoClusterForTaus.SeedThresholdOnEorAbsEinSigma = 4.0
TopoClusterForTaus.SeedCutsInAbsE = True
TopoClusterForTaus.ClusterEtorAbsEtCut = 1 * GeV

TopoSplitterForTaus = CaloTopoClusterSplitter("TopoSplitterForTaus")
Exemple #2
0
            LockVariables.LockedSamplingVariables += [
                "Eta", "Phi", "Delta_Eta", "Delta_Phi", "Max_Eta", "Max_Phi"
            ]

if Rel17Style:
    if jobproperties.CaloTopoClusterFlags.printTopoClusters():
        PrintCaloCluster = CaloClusterPrinter("PrintCaloCluster")
        PrintCaloCluster.PrintFirstOnly = True
        PrintCaloCluster.PrintFrequency = 1
        PrintCaloCluster.EnergyUnit = 1.0 * GeV

# maker tools
TileTopoMaker = CaloTopoClusterMaker("TileTopoMaker")

TileTopoMaker.CellsName = "AllCalo"
TileTopoMaker.CalorimeterNames = ["TILE"]
# cells from the following samplings will be able to form
# seeds. By default no sampling is excluded
TileTopoMaker.SeedSamplingNames = [
    "TileBar0", "TileBar1", "TileBar2", "TileExt0", "TileExt1", "TileExt2",
    "TileGap1", "TileGap2", "TileGap3"
]
TileTopoMaker.CaloNoiseTool = theCaloNoiseTool
#TileTopoMaker.NoiseSigma= 1.68 / 1023 / 64 * 800 * 1.414214 * GeV
TileTopoMaker.UseCaloNoiseTool = True
TileTopoMaker.UsePileUpNoise = True
TileTopoMaker.NeighborOption = "super3D"
TileTopoMaker.RestrictHECIWandFCalNeighbors = False
TileTopoMaker.CellThresholdOnEorAbsEinSigma = 0.0
TileTopoMaker.NeighborThresholdOnEorAbsEinSigma = 2.0
TileTopoMaker.SeedThresholdOnEorAbsEinSigma = 4.0
Exemple #3
0
    def configure(self):
        mlog = logging.getLogger('CaloClusterTopoGetter::configure :')
        mlog.info('scheduled to output %s', self.output())

        # get handle to upstream object
        theCaloCellGetter = self.getInputGetter\
                            (jp.CaloRecFlags.clusterCellGetterName())

        # configure cell weight calibration
        if jobproperties.CaloTopoClusterFlags.doCellWeightCalib():
            from CaloClusterCorrection.CaloClusterCorrectionConf import H1WeightToolCSC12Generic
            from CaloClusterCorrection.StandardCellWeightCalib import H1Calibration, getCellWeightTool
            CellWeights = CaloClusterCellWeightCalib("CellWeights")
            # -- configure weight tool
            finder = jobproperties.CaloTopoClusterFlags.cellWeightRefFinder.get_Value(
            )
            size = jobproperties.CaloTopoClusterFlags.cellWeightRefSize.get_Value(
            )
            signal = jobproperties.CaloTopoClusterFlags.cellWeightRefSignal.get_Value(
            )
            WeightTool = getCellWeightTool(finder, size, signal)
            # -- connect weight tool
            CellWeights.CellSignalWeightTool = WeightTool
            CellWeights += WeightTool
            #-- default properties
            CellWeights.Direction = "AbsSignal"  #-- use absolute cell energies for eta/phi calculation
            CellWeights.BelowThresholdLikeAll = True  #-- treat clusters below thresholds the same as all others
            CellWeights.BelowThresholdDirection = "AbsSignal"  #-- alternative direction calculation for below threshold clusters,
            #   ignored if BelowThresholdLikeAll = True
            CellWeights.EnergyThreshold = 0.0 * MeV  #-- threshold for possible change of direction calculation
            CellWeights.IgnoreGeoWeights = False  #-- ignore geometrical cell signal weights if True

        # now configure local hadronic calibration
        if jobproperties.CaloTopoClusterFlags.doTopoClusterLocalCalib():
            # tools used by tools
            # EMFrac   = EMFracClusterClassificationTool("EMFrac")
            # EMFrac.ClassificationKey   = "EMFracClassify"
            # EMFrac.UseEMFractionSpread = False
            # EMFrac.MaxEMFraction       = 0.5
            #
            # H1Weight = H1ClusterCellWeightTool("H1Weight")
            # H1Weight.CorrectionKey       = "H1ClusterCellWeights"
            # H1Weight.SignalOverNoiseCut  = 2.0
            # H1Weight.CaloNoiseTool       = theCaloNoiseTool
            #
            # OOCC     = OutOfClusterCorrectionTool("OOCC")
            # OOCC.CorrectionKey       = "OOCCorrection"
            #
            # OOCCPi0  = OutOfClusterCorrectionTool("OOCCPi0")
            # OOCCPi0.CorrectionKey    = "OOCPi0Correction"

            # tools used by tools
            LCClassify = CaloLCClassificationTool("LCClassify")
            LCClassify.ClassificationKey = "EMFracClassify"
            LCClassify.UseSpread = False
            LCClassify.MaxProbability = 0.5
            # add the moments EM_PROBABILITY, HAD_WEIGHT, OOC_WEIGHT, DM_WEIGHT to the AOD:
            LCClassify.StoreClassificationProbabilityInAOD = True
            LCClassify.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )

            LCWeight = CaloLCWeightTool("LCWeight")
            LCWeight.CorrectionKey = "H1ClusterCellWeights"
            LCWeight.SignalOverNoiseCut = 2.0
            LCWeight.CaloNoiseTool = theCaloNoiseTool
            LCWeight.UseHadProbability = True

            LCOut = CaloLCOutOfClusterTool("LCOut")
            LCOut.CorrectionKey = "OOCCorrection"
            LCOut.UseEmProbability = False
            LCOut.UseHadProbability = True

            LCOutPi0 = CaloLCOutOfClusterTool("LCOutPi0")
            LCOutPi0.CorrectionKey = "OOCPi0Correction"
            LCOutPi0.UseEmProbability = True
            LCOutPi0.UseHadProbability = False

            #DMTool   = DeadMaterialCorrectionTool2("DMTool")
            #DMTool.HadDMCoeffKey       = "HadDMCoeff2"
            #DMTool.SignalOverNoiseCut  = 1.0
            #DMTool.ClusterRecoStatus   = 0
            #DMTool.WeightModeDM        = 2
            #DMTool.CaloNoiseTool       = theCaloNoiseTool

            LCDeadMaterial = CaloLCDeadMaterialTool("LCDeadMaterial")
            LCDeadMaterial.HadDMCoeffKey = "HadDMCoeff2"
            LCDeadMaterial.ClusterRecoStatus = 0
            LCDeadMaterial.WeightModeDM = 2
            LCDeadMaterial.UseHadProbability = True
            LCDeadMaterial.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )
            # correction tools using tools
            LocalCalib = CaloClusterLocalCalib("LocalCalib")
            LocalCalib.ClusterClassificationTool = [LCClassify]
            #LocalCalib.ClusterRecoStatus             = [2]
            LocalCalib.ClusterRecoStatus = [1, 2]
            LocalCalib.LocalCalibTools = [LCWeight]
            LocalCalib.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )

            LocalCalib += LCClassify
            LocalCalib += LCWeight

            OOCCalib = CaloClusterLocalCalib("OOCCalib")
            #OOCCalib.ClusterRecoStatus   = [2]
            OOCCalib.ClusterRecoStatus = [1, 2]
            OOCCalib.LocalCalibTools = [LCOut]
            OOCCalib.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )

            OOCCalib += LCOut

            OOCPi0Calib = CaloClusterLocalCalib("OOCPi0Calib")
            #OOCPi0Calib.ClusterRecoStatus   = [1]
            OOCPi0Calib.ClusterRecoStatus = [1, 2]
            OOCPi0Calib.LocalCalibTools = [LCOutPi0]

            OOCPi0Calib.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )

            OOCPi0Calib += LCOutPi0

            DMCalib = CaloClusterLocalCalib("DMCalib")
            DMCalib.ClusterRecoStatus = [1, 2]
            #DMCalib.LocalCalibToolNames = [DMTool.getFullName()]
            #DMCalib += DMTool
            DMCalib.LocalCalibTools = [LCDeadMaterial]

            DMCalib.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )

            DMCalib += LCDeadMaterial

        # correction tools not using tools
        TopoMoments = CaloClusterMomentsMaker("TopoMoments")
        TopoMoments.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
        )
        TopoMoments.MaxAxisAngle = 20 * deg
        TopoMoments.CaloNoiseTool = theCaloNoiseTool
        TopoMoments.UsePileUpNoise = True
        TopoMoments.TwoGaussianNoise = jobproperties.CaloTopoClusterFlags.doTwoGaussianNoise(
        )
        TopoMoments.MinBadLArQuality = 4000
        TopoMoments.MomentsNames = [
            "AVG_LAR_Q", "AVG_TILE_Q", "BAD_CELLS_CORR_E", "BADLARQ_FRAC",
            "CELL_SIGNIFICANCE", "CELL_SIG_SAMPLING", "CENTER_LAMBDA",
            "CENTER_MAG", "CENTER_X", "CENTER_Y", "CENTER_Z", "DELTA_ALPHA",
            "DELTA_PHI", "DELTA_THETA", "ENG_BAD_CELLS", "ENG_FRAC_CORE",
            "ENG_FRAC_EM", "ENG_FRAC_MAX", "ENG_POS", "FIRST_ENG_DENS",
            "FIRST_ETA", "FIRST_PHI", "ISOLATION", "LATERAL", "LONGITUDINAL",
            "MASS", "N_BAD_CELLS", "N_BAD_CELLS_CORR", "PTD",
            "SECOND_ENG_DENS", "SECOND_LAMBDA", "SECOND_R", "SIGNIFICANCE"
        ]

        doDigiTruthFlag = False
        try:
            from Digitization.DigitizationFlags import digitizationFlags
            doDigiTruthFlag = digitizationFlags.doDigiTruth()
        except:
            log = logging.getLogger('CaloClusterTopoGetter')
            log.info(
                'Unable to import DigitizationFlags in CaloClusterTopoGetter. Expected in AthenaP1'
            )

        if doDigiTruthFlag:
            TopoMoments_Truth = CaloClusterMomentsMaker_DigiHSTruth(
                "TopoMoments_Truth")
            TopoMoments_Truth.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
            )
            TopoMoments_Truth.MaxAxisAngle = 20 * deg
            TopoMoments_Truth.CaloNoiseTool = theCaloNoiseTool
            TopoMoments_Truth.UsePileUpNoise = True
            TopoMoments_Truth.TwoGaussianNoise = jobproperties.CaloTopoClusterFlags.doTwoGaussianNoise(
            )
            TopoMoments_Truth.MinBadLArQuality = 4000
            TopoMoments_Truth.MomentsNames = [
                "FIRST_PHI_DigiHSTruth", "FIRST_ETA_DigiHSTruth",
                "SECOND_R_DigiHSTruth", "SECOND_LAMBDA_DigiHSTruth",
                "DELTA_PHI_DigiHSTruth", "DELTA_THETA_DigiHSTruth",
                "DELTA_ALPHA_DigiHSTruth", "CENTER_X_DigiHSTruth",
                "CENTER_Y_DigiHSTruth", "CENTER_Z_DigiHSTruth",
                "CENTER_MAG_DigiHSTruth", "CENTER_LAMBDA_DigiHSTruth",
                "LATERAL_DigiHSTruth", "LONGITUDINAL_DigiHSTruth",
                "ENG_FRAC_CORE_DigiHSTruth", "FIRST_ENG_DENS_DigiHSTruth",
                "SECOND_ENG_DENS_DigiHSTruth", "ISOLATION_DigiHSTruth",
                "BAD_CELLS_CORR_E_DigiHSTruth", "ENG_POS_DigiHSTruth",
                "SIGNIFICANCE_DigiHSTruth", "CELL_SIGNIFICANCE_DigiHSTruth",
                "CELL_SIG_SAMPLING_DigiHSTruth", "AVG_LAR_Q_DigiHSTruth",
                "AVG_TILE_Q_DigiHSTruth", "ENERGY_DigiHSTruth",
                "PHI_DigiHSTruth", "ETA_DigiHSTruth"
            ]

        # only add HV related moments if it is offline.
        from IOVDbSvc.CondDB import conddb
        if not conddb.isOnline:
            from LArRecUtils.LArHVScaleRetrieverDefault import LArHVScaleRetrieverDefault
            TopoMoments.LArHVScaleRetriever = LArHVScaleRetrieverDefault()
            TopoMoments.MomentsNames += ["ENG_BAD_HV_CELLS", "N_BAD_HV_CELLS"]

#        TopoMoments.AODMomentsNames = ["LATERAL"
#                                       ,"LONGITUDINAL"
#                                       ,"SECOND_R"
#                                       ,"SECOND_LAMBDA"
#                                       ,"CENTER_MAG"
#                                       ,"CENTER_LAMBDA"
#                                       ,"FIRST_ENG_DENS"
#                                       ,"ENG_FRAC_MAX"
#                                       ,"ISOLATION"
#                                       ,"ENG_BAD_CELLS"
#                                       ,"N_BAD_CELLS"
#                                       ,"BADLARQ_FRAC"
#                                       ,"ENG_POS"
#                                       ,"SIGNIFICANCE"
#                                       ,"CELL_SIGNIFICANCE"
#                                       ,"CELL_SIG_SAMPLING"
#                                       ,"AVG_LAR_Q"
#                                       ,"AVG_TILE_Q"
#                                       ]

#if jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingEnergies() or jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingVariables():
#    LockVariables = CaloClusterLockVars("LockVariables")
#    LockVariables.FixBasicEnergy = True
#    LockVariables.LockedSamplingVariables = []
#    if jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingEnergies():
#        LockVariables.LockedSamplingVariables += [
#            "Energy", "Max_Energy"]
#    if jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingVariables():
#        LockVariables.LockedSamplingVariables += [
#            "Eta", "Phi", "Delta_Eta",
#            "Delta_Phi", "Max_Eta", "Max_Phi"
#            ]

#if jobproperties.CaloTopoClusterFlags.printTopoClusters():
#    PrintCaloCluster = CaloClusterPrinter("PrintCaloCluster")
#    PrintCaloCluster.PrintFirstOnly = True
#    PrintCaloCluster.PrintFrequency = 1
#    PrintCaloCluster.EnergyUnit     = 1.0*GeV

        theCaloClusterSnapshot = CaloClusterSnapshot(
            OutputName="CaloTopoCluster", SetCrossLinks=True)

        # maker tools
        TopoMaker = CaloTopoClusterMaker("TopoMaker")

        TopoMaker.CellsName = theCaloCellGetter.outputKey()
        TopoMaker.CalorimeterNames = ["LAREM", "LARHEC", "LARFCAL", "TILE"]
        # cells from the following samplings will be able to form
        # seeds. By default no sampling is excluded
        TopoMaker.SeedSamplingNames = [
            "PreSamplerB", "EMB1", "EMB2", "EMB3", "PreSamplerE", "EME1",
            "EME2", "EME3", "HEC0", "HEC1", "HEC2", "HEC3", "TileBar0",
            "TileBar1", "TileBar2", "TileExt0", "TileExt1", "TileExt2",
            "TileGap1", "TileGap2", "TileGap3", "FCAL0", "FCAL1", "FCAL2"
        ]
        TopoMaker.CaloNoiseTool = theCaloNoiseTool
        TopoMaker.UseCaloNoiseTool = True
        TopoMaker.UsePileUpNoise = True
        TopoMaker.NeighborOption = "super3D"
        TopoMaker.RestrictHECIWandFCalNeighbors = False
        TopoMaker.RestrictPSNeighbors = True
        TopoMaker.CellThresholdOnEorAbsEinSigma = 0.0
        TopoMaker.NeighborThresholdOnEorAbsEinSigma = 2.0
        TopoMaker.SeedThresholdOnEorAbsEinSigma = 4.0
        #timing
        TopoMaker.SeedCutsInT = jobproperties.CaloTopoClusterFlags.doTimeCut()

        # note E or AbsE
        #
        # the following property must be set to TRUE in order to make double
        # sided cuts on the seed and the cluster level
        #
        TopoMaker.SeedCutsInAbsE = True
        TopoMaker.ClusterEtorAbsEtCut = 0.0 * MeV
        #
        # note E or AbsE
        #
        # by default neighbor and cell thresholds are on AbsE. Set the following
        # properties to FALSE in order to switch to cuts on E
        #
        #TopoMaker.NeighborCutsInAbsE              = False
        #TopoMaker.CellCutsInAbsE                 = False
        # the following Et thresholds are ignored in case UsePileUpNoise
        # is TRUE
        #
        #
        # CellThresholdOnAbsEt = 0.0*MeV
        # NeighborThresholdOnAbsEt = 100.0*MeV
        # SeedThresholdOnEtorAbsEt = 200.0*MeV
        # note Et or AbsEt

        # use 2-gaussian or single gaussian noise for TileCal
        TopoMaker.TwoGaussianNoise = jobproperties.CaloTopoClusterFlags.doTwoGaussianNoise(
        )

        TopoSplitter = CaloTopoClusterSplitter("TopoSplitter")
        # cells from the following samplings will be able to form local
        # maxima. The excluded samplings are PreSamplerB, EMB1,
        # PreSamplerE, EME1, all Tile samplings, all HEC samplings and the
        # two rear FCal samplings.
        #
        TopoSplitter.SamplingNames = ["EMB2", "EMB3", "EME2", "EME3", "FCAL0"]
        # cells from the following samplings will also be able to form
        # local maxima but only if they are not overlapping in eta and phi
        # with local maxima in previous samplings from the primary list.
        #
        TopoSplitter.SecondarySamplingNames = [
            "EMB1", "EME1", "TileBar0", "TileBar1", "TileBar2", "TileExt0",
            "TileExt1", "TileExt2", "HEC0", "HEC1", "HEC2", "HEC3", "FCAL1",
            "FCAL2"
        ]
        TopoSplitter.ShareBorderCells = True
        TopoSplitter.RestrictHECIWandFCalNeighbors = False
        TopoSplitter.WeightingOfNegClusters = jobproperties.CaloTopoClusterFlags.doTreatEnergyCutAsAbsolute(
        )
        #
        # the following options are not set, since these are the default
        # values
        #
        # NeighborOption                = "super3D",
        # NumberOfCellsCut              = 4,
        # EnergyCut                     = 500*MeV,

        # cluster maker
        CaloTopoCluster = CaloClusterMaker("CaloTopoCluster")
        if jobproperties.CaloTopoClusterFlags.doTopoClusterLocalCalib():
            CaloTopoCluster.ClustersOutputName = "CaloCalTopoClusters"
        else:
            CaloTopoCluster.ClustersOutputName = "CaloTopoCluster"
        CaloTopoCluster.ClusterMakerTools = [TopoMaker, TopoSplitter]

        from CaloClusterCorrection.CaloClusterBadChannelListCorr import CaloClusterBadChannelListCorr
        BadChannelListCorr = CaloClusterBadChannelListCorr()
        CaloTopoCluster.ClusterCorrectionTools += [BadChannelListCorr]

        CaloTopoCluster.ClusterCorrectionTools += [TopoMoments]

        if doDigiTruthFlag:
            CaloTopoCluster.ClusterCorrectionTools += [TopoMoments_Truth]

        CaloTopoCluster += TopoMaker
        CaloTopoCluster += TopoSplitter
        CaloTopoCluster += BadChannelListCorr
        CaloTopoCluster += TopoMoments
        if doDigiTruthFlag:
            CaloTopoCluster += TopoMoments_Truth

        if jobproperties.CaloTopoClusterFlags.doClusterVertexFraction():
            from CaloTrackUtils.CaloTrackUtilsConf import CaloClusterVertexFractionMaker
            MyCaloClusterVertexFractionMaker = CaloClusterVertexFractionMaker(
                name="CaloClusterVertexFractionMaker",
                VxContainerName="VxPrimaryCandidate",
                dRMatchMax=0.17)
            CaloTopoCluster.ClusterCorrectionTools += [
                MyCaloClusterVertexFractionMaker
            ]
            CaloTopoCluster += MyCaloClusterVertexFractionMaker

        if jobproperties.CaloTopoClusterFlags.doCalibHitMoments(
        ) and rec.doTruth():
            from CaloCalibHitRec.CaloCalibHitRecConf import CaloCalibClusterMomentsMaker2
            TopoCalibMoments = CaloCalibClusterMomentsMaker2(
                "TopoCalibMoments")
            TopoCalibMoments.MomentsNames = [
                "ENG_CALIB_TOT",
                "ENG_CALIB_OUT_L"
                #,"ENG_CALIB_OUT_M"
                # ,"ENG_CALIB_OUT_T"
                # ,"ENG_CALIB_DEAD_L"
                # ,"ENG_CALIB_DEAD_M"
                # ,"ENG_CALIB_DEAD_T"
                ,
                "ENG_CALIB_EMB0",
                "ENG_CALIB_EME0",
                "ENG_CALIB_TILEG3",
                "ENG_CALIB_DEAD_TOT",
                "ENG_CALIB_DEAD_EMB0",
                "ENG_CALIB_DEAD_TILE0",
                "ENG_CALIB_DEAD_TILEG3",
                "ENG_CALIB_DEAD_EME0",
                "ENG_CALIB_DEAD_HEC0",
                "ENG_CALIB_DEAD_FCAL",
                "ENG_CALIB_DEAD_LEAKAGE",
                "ENG_CALIB_DEAD_UNCLASS",
                "ENG_CALIB_FRAC_EM",
                "ENG_CALIB_FRAC_HAD",
                "ENG_CALIB_FRAC_REST"
            ]

            #            TopoCalibMoments.AODMomentsNames = ["ENG_CALIB_TOT"
            #                                                 ,"ENG_CALIB_OUT_L"
            #                                                #,"ENG_CALIB_OUT_M"
            #                                                # ,"ENG_CALIB_OUT_T"
            #                                                # ,"ENG_CALIB_DEAD_L"
            #                                                # ,"ENG_CALIB_DEAD_M"
            #                                                # ,"ENG_CALIB_DEAD_T"
            #                                                ,"ENG_CALIB_EMB0"
            #                                                ,"ENG_CALIB_EME0"
            #                                                ,"ENG_CALIB_TILEG3"
            #                                                ,"ENG_CALIB_DEAD_TOT"
            #                                                ,"ENG_CALIB_DEAD_EMB0"
            #                                                ,"ENG_CALIB_DEAD_TILE0"
            #                                                ,"ENG_CALIB_DEAD_TILEG3"
            #                                                ,"ENG_CALIB_DEAD_EME0"
            #                                                ,"ENG_CALIB_DEAD_HEC0"
            #                                                ,"ENG_CALIB_DEAD_FCAL"
            #                                                ,"ENG_CALIB_DEAD_LEAKAGE"
            #                                                ,"ENG_CALIB_DEAD_UNCLASS"
            #                                                ,"ENG_CALIB_FRAC_EM"
            #                                                ,"ENG_CALIB_FRAC_HAD"
            #                                                ,"ENG_CALIB_FRAC_REST"]
            TopoCalibMoments.CalibrationHitContainerNames = [
                "LArCalibrationHitInactive", "LArCalibrationHitActive",
                "TileCalibHitActiveCell", "TileCalibHitInactiveCell"
            ]
            TopoCalibMoments.DMCalibrationHitContainerNames = [
                "LArCalibrationHitDeadMaterial", "TileCalibHitDeadMaterial"
            ]
            CaloTopoCluster.ClusterCorrectionTools += [TopoCalibMoments]
            CaloTopoCluster += TopoCalibMoments

        #if jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingEnergies() or jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingVariables():
        #    CaloTopoCluster.ClusterCorrectionTools += [
        #        LockVariables.getFullName()]
        #    CaloTopoCluster += LockVariables

        CaloTopoCluster.ClusterCorrectionTools += [theCaloClusterSnapshot]
        CaloTopoCluster += theCaloClusterSnapshot

        if jobproperties.CaloTopoClusterFlags.doCellWeightCalib():
            CaloTopoCluster.ClusterCorrectionTools += [
                CellWeights.getFullName()
            ]
            CaloTopoCluster += CellWeights

        if jobproperties.CaloTopoClusterFlags.doTopoClusterLocalCalib():
            CaloTopoCluster.ClusterCorrectionTools += [
                LocalCalib, OOCCalib, OOCPi0Calib, DMCalib
            ]

            CaloTopoCluster += LocalCalib
            CaloTopoCluster += OOCCalib
            CaloTopoCluster += OOCPi0Calib
            CaloTopoCluster += DMCalib

        #
        # pool/cool part
        #
        if jobproperties.CaloTopoClusterFlags.doTopoClusterLocalCalib():
            from CaloRec import CaloClusterTopoCoolFolder
            if globalflags.DetDescrVersion().startswith("Rome"):
                CaloTopoCluster.LocalCalib.LCClassify.MaxProbability = 0.85
                CaloTopoCluster.LocalCalib.LCClassify.UseNormalizedEnergyDensity = False
            else:
                CaloTopoCluster.LocalCalib.LCClassify.MaxProbability = 0.50
                CaloTopoCluster.LocalCalib.LCClassify.UseNormalizedEnergyDensity = True

        self._handle = CaloTopoCluster

        objKeyStore.addManyTypesTransient(self.output())
        # only write main object in AOD
        # 2014-01-15 W.L. Remove objs from output streams  b/c of xAOD migration
        #objKeyStore.addStreamESD(self.outputType(),self.outputKey())
        #objKeyStore.addStreamESD("CaloShowerContainer",self.outputKey()+"_Data")
        #objKeyStore.addStreamESD("CaloCellLinkContainer",self.outputKey()+"_Link")
        #objKeyStore.addStreamAOD(self.outputType(),self.outputKey())

        from AthenaCommon.AlgSequence import AlgSequence
        topSequence = AlgSequence()
        topSequence += CaloTopoCluster

        return True
    if jobproperties.CaloTopoClusterFlags.lockTopoClusterSamplingVariables():
        LockVariables.LockedSamplingVariables += [
            "Eta", "Phi", "Delta_Eta", "Delta_Phi", "Max_Eta", "Max_Phi"
        ]

if jobproperties.CaloTopoClusterFlags.printTopoClusters():
    PrintCaloCluster = CaloClusterPrinter("PrintCaloCluster")
    PrintCaloCluster.PrintFirstOnly = True
    PrintCaloCluster.PrintFrequency = 1
    PrintCaloCluster.EnergyUnit = 1.0 * GeV

# maker tools
HadTopoMaker = CaloTopoClusterMaker("HadTopoMaker")

HadTopoMaker.CellsNames = ["AllCalo"]
HadTopoMaker.CalorimeterNames = ["TILE", "LARHEC"]
# cells from the following samplings will be able to form
# seeds. By default no sampling is excluded
HadTopoMaker.SeedSamplingNames = [
    "TileBar0", "TileBar1", "TileBar2", "TileExt0", "TileExt1", "TileExt2",
    "HEC0", "HEC1", "HEC2", "HEC3", "TileGap1", "TileGap2", "TileGap3"
]
HadTopoMaker.CaloNoiseTool = theCaloNoiseTool
HadTopoMaker.NoiseSigma = 1.68 / 1023 / 64 * 800 * 1.414214 * GeV
#HadTopoMaker.UseCaloNoiseTool=False
HadTopoMaker.UseCaloNoiseTool = True
HadTopoMaker.UsePileUpNoise = False
HadTopoMaker.NeighborOption = "super3D"
HadTopoMaker.RestrictHECIWandFCalNeighbors = False
HadTopoMaker.SeedThresholdOnEorAbsEinSigma = 4.0
HadTopoMaker.CellThresholdOnEorAbsEinSigma = 0.0