Example #1
0
include.block('TileRecAlgs/jobOptions_TileDigitsThresholdFilter.py')

from AthenaCommon.Logging import logging
tileDigitsFilterLogger = logging.getLogger(
    'jobOptions_TileDigitsThresholdFilter.py')

import AthenaCommon.CfgMgr as CfgMgr
from AthenaCommon.AlgSequence import AlgSequence
topSequence = AlgSequence()

from TileRecUtils.TileRecFlags import jobproperties

from TileConditions.TileInfoConfigurator import TileInfoConfigurator
tileInfoConfigurator = TileInfoConfigurator()

if tileInfoConfigurator.setupCOOLDspThreshold():
    tileDigitsThresholdFilter = CfgMgr.TileDigitsThresholdFilter()
    jobproperties.TileRecFlags.TileDigitsContainer = 'TileDigitsFiltered'
    indices = [
        i for i, alg in enumerate(topSequence.getChildren())
        if alg.getType() == 'TileRawChannelMaker'
    ]
    if len(indices):
        topSequence.insert(indices[0], tileDigitsThresholdFilter)
        if hasattr(topSequence, 'TileRChMaker'):
            topSequence.TileRChMaker.TileDigitsContainer = jobproperties.TileRecFlags.TileDigitsContainer(
            )
    else:
        topSequence += tileDigitsThresholdFilter
    tileDigitsFilterLogger.info(
        "Added TileDigitsThresholdFilter algorithm to filter Tile Digits over threshold"
Example #2
0
    def configure(self):

        mlog = logging.getLogger('TileRawChannelGetter::configure:')
        mlog.info("entering")

        # Instantiation of the C++ algorithm
        try:
            from TileRecUtils.TileRecUtilsConf import TileRawChannelMaker
            theTileRawChannelMaker = TileRawChannelMaker("TileRChMaker")
        except:
            mlog.error("could not import TileRecUtils.TileRawChannelMaker")
            print traceback.format_exc()
            return False

        self._TileRChMaker = theTileRawChannelMaker

        # Configure TileInfoLoader
        from AthenaCommon.AppMgr import ServiceMgr

        from TileConditions.TileInfoConfigurator import TileInfoConfigurator
        tileInfoConfigurator = TileInfoConfigurator()

        # register output in objKeyStore
        from RecExConfig.ObjKeyStore import objKeyStore

        from AthenaCommon.AppMgr import ToolSvc

        from TileRecUtils.TileRecFlags import jobproperties
        from TileRecUtils.TileRecUtilsConf import TileBeamInfoProvider
        theTileBeamInfoProvider = TileBeamInfoProvider()
        if hasattr(ServiceMgr, "TileDCSSvc"):
            theTileBeamInfoProvider.CheckDCS = True

        # true for real data, false for MC - GlobalFlags.DataSource.is_data()
        # true for nominal ATLAS configuration - GlobalFlags.DetGeo.is_atlas()
        from AthenaCommon.GlobalFlags import globalflags
        if globalflags.DataSource() == 'data':
            # apply noise filter for real data (if this option was not set before)
            if jobproperties.TileRecFlags.noiseFilter() < 0:
                jobproperties.TileRecFlags.noiseFilter = 1

            if jobproperties.TileRecFlags.TileRunType() == 1:
                theTileBeamInfoProvider.TileBeamElemContainer = ""
            else:
                theTileBeamInfoProvider.TileBeamElemContainer = "TileBeamElemCnt"
            if jobproperties.TileRecFlags.readDigits():
                theTileBeamInfoProvider.TileDigitsContainer = "TileDigitsCnt"
            else:
                theTileBeamInfoProvider.TileDigitsContainer = ""
            theTileBeamInfoProvider.TileRawChannelContainer = "TileRawChannelCnt"
        else:
            theTileBeamInfoProvider.TileBeamElemContainer = ""
            theTileBeamInfoProvider.TileDigitsContainer = ""
            theTileBeamInfoProvider.TileRawChannelContainer = ""

        # set time window for amplitude correction if it was not set correctly before
        if jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
        ) <= jobproperties.TileRecFlags.TimeMinForAmpCorrection():
            from AthenaCommon.BeamFlags import jobproperties
            mlog.info("adjusting min/max time of parabolic correction for %s" %
                      jobproperties.Beam.bunchSpacing)
            halfBS = jobproperties.Beam.bunchSpacing.get_Value() / 2.
            if halfBS > 25.1:
                mlog.info(
                    "Bunch spacing is too big, keeping default limits for parabolic correction"
                )
            else:
                jobproperties.TileRecFlags.TimeMinForAmpCorrection = -halfBS
                jobproperties.TileRecFlags.TimeMaxForAmpCorrection = halfBS

        ToolSvc += theTileBeamInfoProvider

        NoiseFilterTools = []
        if jobproperties.TileRecFlags.noiseFilter() == 1:

            if globalflags.DataSource() == 'data':

                # check if there are DSP thresholds in DB
                if jobproperties.TileRecFlags.zeroAmplitudeWithoutDigits(
                ) and not tileInfoConfigurator.setupCOOLDspThreshold():
                    jobproperties.TileRecFlags.zeroAmplitudeWithoutDigits = False

                if jobproperties.TileRecFlags.correctPedestalDifference():
                    # check if offline and there are OFCs in DB for OF1 method
                    if athenaCommonFlags.isOnline(
                    ) or not tileInfoConfigurator.setupCOOLOFC(ofcType='OF1'):
                        jobproperties.TileRecFlags.correctPedestalDifference = False
                    else:
                        tileInfoConfigurator.setupCOOLTIME(online=True)

                if jobproperties.TileRecFlags.zeroAmplitudeWithoutDigits(
                ) or jobproperties.TileRecFlags.correctPedestalDifference():
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelOF1Corrector
                    theTileRawChannelOF1Corrector = TileRawChannelOF1Corrector(
                    )
                    theTileRawChannelOF1Corrector.CorrectPedestalDifference = jobproperties.TileRecFlags.correctPedestalDifference(
                    )
                    theTileRawChannelOF1Corrector.ZeroAmplitudeWithoutDigits = jobproperties.TileRecFlags.zeroAmplitudeWithoutDigits(
                    )

                    ToolSvc += theTileRawChannelOF1Corrector
                    NoiseFilterTools += [theTileRawChannelOF1Corrector]

            from TileRecUtils.TileRecUtilsConf import TileRawChannelNoiseFilter
            theTileRawChannelNoiseFilter = TileRawChannelNoiseFilter()
            ToolSvc += theTileRawChannelNoiseFilter
            NoiseFilterTools += [theTileRawChannelNoiseFilter]

        TileFrameLength = ServiceMgr.TileInfoLoader.NSamples
        if TileFrameLength != 7:
            mlog.info("disabling reading of OFC from COOL because Nsamples!=7")
            jobproperties.TileRecFlags.OfcFromCOOL = False

        jobproperties.TileRecFlags.print_JobProperties('tree&value')

        # run optimal filter only if readDigits is set
        if jobproperties.TileRecFlags.readDigits():

            TilePulseTypes = {0: 'PHY', 1: 'PHY', 2: 'LAS', 4: 'PHY', 8: 'CIS'}
            TilePulse = TilePulseTypes[
                jobproperties.TileRecFlags.TileRunType()]

            if (jobproperties.TileRecFlags.doTileMF()
                    or (not jobproperties.TileRecFlags.OfcFromCOOL() and
                        (jobproperties.TileRecFlags.doTileOF1()
                         or jobproperties.TileRecFlags.doTileOpt2()
                         or jobproperties.TileRecFlags.doTileOptATLAS()))):

                tileInfoConfigurator.setupCOOLPULSE(type=TilePulse)
                tileInfoConfigurator.setupCOOLAutoCr()

            elif jobproperties.TileRecFlags.doTileFitCool():
                tileInfoConfigurator.setupCOOLPULSE(type=TilePulse)

            if jobproperties.TileRecFlags.OfcFromCOOL():
                if (jobproperties.TileRecFlags.doTileMF()
                        or jobproperties.TileRecFlags.doTileOpt2()
                        or jobproperties.TileRecFlags.doTileOptATLAS()):

                    tileInfoConfigurator.setupCOOLOFC(type=TilePulse)

                if jobproperties.TileRecFlags.doTileOF1():
                    tileInfoConfigurator.setupCOOLOFC(type=TilePulse,
                                                      ofcType='OF1')

            if jobproperties.TileRecFlags.doTileQIE():
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderQIEFilter
                    theTileRawChannelBuilderQIEFilter = TileRawChannelBuilderQIEFilter(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderQIEFilter Quit"
                    )
                    print traceback.format_exc()
                    return False

                #TileRawChannelBuilderQIEFilter Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelQIE"
                theTileRawChannelBuilderQIEFilter.TileRawChannelContainer = "TileRawChannelQIE"
                theTileRawChannelBuilderQIEFilter.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderQIEFilter.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderQIEFilter.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderQIEFilter.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderQIEFilter.PedestalMode = 1

                mlog.info(
                    " adding now TileRawChannelBuilderQIEFilter to ToolSvc")
                ToolSvc += theTileRawChannelBuilderQIEFilter

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderQIEFilter
                ]

            # fit with several amplitudes
            if jobproperties.TileRecFlags.doTileManyAmps():

                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderManyAmps
                    theTileRawChannelBuilderManyAmps = TileRawChannelBuilderManyAmps(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderManyAmps Quit"
                    )
                    print traceback.format_exc()
                    return False

                #TileRawChannelBuilderManyAmps Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelManyAmp"
                theTileRawChannelBuilderManyAmps.TileRawChannelContainer = "TileRawChannelManyAmp"
                theTileRawChannelBuilderManyAmps.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderManyAmps.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderManyAmps.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderManyAmps.NoiseFilterTools = NoiseFilterTools

                mlog.info(
                    " adding now TileRawChannelBuilderManyAmps to ToolSvc")
                ToolSvc += theTileRawChannelBuilderManyAmps

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderManyAmps
                ]

            # flat filter - sum of 5 samples
            if jobproperties.TileRecFlags.doTileFlat():

                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderFlatFilter
                    theTileRawChannelBuilderFlatFilter = TileRawChannelBuilderFlatFilter(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderFlatFilter Quit"
                    )
                    print traceback.format_exc()
                    return False

                #TileRawChannelBuilderFlatFilter Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelFlat"
                theTileRawChannelBuilderFlatFilter.TileRawChannelContainer = "TileRawChannelFlat"
                theTileRawChannelBuilderFlatFilter.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderFlatFilter.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderFlatFilter.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderFlatFilter.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderFlatFilter.FrameLength = TileFrameLength
                theTileRawChannelBuilderFlatFilter.SignalLength = TileFrameLength - 1

                mlog.info(
                    " adding now TileRawChannelBuilderFlatFilter to ToolSvc")
                ToolSvc += theTileRawChannelBuilderFlatFilter

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderFlatFilter
                ]

            # Fit method
            if jobproperties.TileRecFlags.doTileFit(
            ) or jobproperties.TileRecFlags.doTileOverflowFit():

                # configure TileRawChannelMaker here
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderFitFilter
                    theTileRawChannelBuilderFitFilter = TileRawChannelBuilderFitFilter(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderFitFilter Quit"
                    )
                    print traceback.format_exc()
                    return False

                #TileRawChannelBuilderFitFilter Options:
                theTileRawChannelBuilderFitFilter.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderFitFilter.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderFitFilter.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderFitFilter.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderFitFilter.FrameLength = TileFrameLength

                # add the tool to list of tool ( should use ToolHandle eventually)
                mlog.info(
                    " adding now TileRawChannelBuilderFitFilter to ToolSvc")
                ToolSvc += theTileRawChannelBuilderFitFilter

                if jobproperties.TileRecFlags.doTileFit():
                    jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelFit"
                    theTileRawChannelBuilderFitFilter.TileRawChannelContainer = "TileRawChannelFit"
                    theTileRawChannelMaker.TileRawChannelBuilder += [
                        ToolSvc.TileRawChannelBuilderFitFilter
                    ]

                if jobproperties.TileRecFlags.doTileOverflowFit():
                    theTileRawChannelMaker.FitOverflow = True
                    theTileRawChannelMaker.TileRawChannelBuilderFitOverflow = ToolSvc.TileRawChannelBuilderFitFilter
                    mlog.info(
                        " set up TileRawChannelBuilderFitOverflow to TileRawChannelBuilderFitFilter"
                    )

            # Fit method with reading from COOL
            if jobproperties.TileRecFlags.doTileFitCool():

                # configure TileRawChannelMaker here
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderFitFilterCool
                    theTileRawChannelBuilderFitFilterCool = TileRawChannelBuilderFitFilterCool(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderFitFilterCool Quit"
                    )
                    print traceback.format_exc()
                    return False

                #TileRawChannelBuilderFitFilterCool Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelFitCool"
                theTileRawChannelBuilderFitFilterCool.TileRawChannelContainer = "TileRawChannelFitCool"
                theTileRawChannelBuilderFitFilterCool.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderFitFilterCool.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderFitFilterCool.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderFitFilterCool.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderFitFilterCool.FrameLength = TileFrameLength

                # add the tool to list of tool ( should use ToolHandle eventually)
                mlog.info(
                    " adding now TileRawChannelBuilderFitFilterCool to ToolSvc"
                )
                ToolSvc += theTileRawChannelBuilderFitFilterCool

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderFitFilterCool
                ]

            # matched filter
            if jobproperties.TileRecFlags.doTileMF():

                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderMF
                    theTileRawChannelBuilderMF = TileRawChannelBuilderMF()
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderMF Quit")
                    print traceback.format_exc()
                    return False

                # setup COOL to get OFCs, needed for COF to retrieve pulse shape and derivatives
                if jobproperties.TileRecFlags.OfcFromCOOL():
                    theTileRawChannelBuilderMF.TileCondToolOfc = ToolSvc.TileCondToolOfcCool

                #TileRawChannelBuilderMF Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelMF"
                theTileRawChannelBuilderMF.TileRawChannelContainer = "TileRawChannelMF"
                theTileRawChannelBuilderMF.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderMF.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                if jobproperties.TileRecFlags.BestPhaseFromCOOL(
                ):  # can't correct time and use best phase at the same time
                    theTileRawChannelBuilderMF.correctTime = False
                else:
                    theTileRawChannelBuilderMF.correctTime = jobproperties.TileRecFlags.correctTime(
                    )
                theTileRawChannelBuilderMF.BestPhase = jobproperties.TileRecFlags.BestPhaseFromCOOL(
                )
                theTileRawChannelBuilderMF.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderMF.MaxIterations = 5
                # iterative mode on
                theTileRawChannelBuilderMF.AmplitudeCorrection = False
                theTileRawChannelBuilderMF.TimeFromCOF = False
                theTileRawChannelBuilderMF.AmpMinForAmpCorrection = jobproperties.TileRecFlags.AmpMinForAmpCorrection(
                )
                if jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
                ) > jobproperties.TileRecFlags.TimeMinForAmpCorrection():
                    theTileRawChannelBuilderMF.TimeMinForAmpCorrection = jobproperties.TileRecFlags.TimeMinForAmpCorrection(
                    )
                    theTileRawChannelBuilderMF.TimeMaxForAmpCorrection = jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
                    )

                mlog.info(" adding now TileRawChannelBuilderMF to ToolSvc")
                ToolSvc += theTileRawChannelBuilderMF

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderMF
                ]

            if jobproperties.TileRecFlags.doTileOpt():
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderOptFilter
                    theTileRawChannelBuilderOptFilter = TileRawChannelBuilderOptFilter(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderOptFilter Quit"
                    )
                    print traceback.format_exc()
                    return False

                #TileRawChannelBuilderOptFilter Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelOpt"
                theTileRawChannelBuilderOptFilter.TileRawChannelContainer = "TileRawChannelOpt"
                theTileRawChannelBuilderOptFilter.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderOptFilter.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderOptFilter.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderOptFilter.OF2 = True
                theTileRawChannelBuilderOptFilter.PedestalMode = 1
                theTileRawChannelBuilderOptFilter.MaxIterations = 5
                theTileRawChannelBuilderOptFilter.Minus1Iteration = True
                theTileRawChannelBuilderOptFilter.AmplitudeCorrection = False
                # don't need correction after iterations
                theTileRawChannelBuilderOptFilter.TimeCorrection = False  # don't need correction after iterations

                ServiceMgr.TileInfoLoader.LoadOptFilterWeights = True

                mlog.info(
                    " adding now TileRawChannelBuilderOptFilter to ToolSvc")
                ToolSvc += theTileRawChannelBuilderOptFilter

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderOptFilter
                ]

            if jobproperties.TileRecFlags.doTileOF1():
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderOpt2Filter
                    theTileRawChannelBuilderOF1 = TileRawChannelBuilderOpt2Filter(
                        "TileRawChannelBuilderOF1")
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderOF1 Quit"
                    )
                    print traceback.format_exc()
                    return False

                # setup COOL to get OFCs
                if jobproperties.TileRecFlags.OfcFromCOOL():
                    if hasattr(ToolSvc, 'TileCondToolOfcCoolOF1'):
                        theTileRawChannelBuilderOF1.TileCondToolOfc = ToolSvc.TileCondToolOfcCoolOF1
                    else:
                        # There are no OF1 OFC in the COOL
                        # OFC will be calculated on the fly
                        tileInfoConfigurator.setupCOOLPULSE(type=TilePulse)
                        tileInfoConfigurator.setupCOOLAutoCr()

                #TileRawChannelBuilderOF1 Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelOF1"
                theTileRawChannelBuilderOF1.TileRawChannelContainer = "TileRawChannelOF1"
                theTileRawChannelBuilderOF1.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderOF1.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                if jobproperties.TileRecFlags.BestPhaseFromCOOL(
                ):  # can't correct time and use best phase at the same time
                    theTileRawChannelBuilderOF1.correctTime = False
                else:
                    theTileRawChannelBuilderOF1.correctTime = jobproperties.TileRecFlags.correctTime(
                    )
                theTileRawChannelBuilderOF1.BestPhase = jobproperties.TileRecFlags.BestPhaseFromCOOL(
                )
                theTileRawChannelBuilderOF1.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderOF1.OF2 = False
                theTileRawChannelBuilderOF1.PedestalMode = -1
                theTileRawChannelBuilderOF1.MaxIterations = 1
                # just one iteration
                theTileRawChannelBuilderOF1.Minus1Iteration = False
                # assume that max sample is at t=0
                theTileRawChannelBuilderOF1.AmplitudeCorrection = jobproperties.TileRecFlags.correctAmplitude(
                )
                theTileRawChannelBuilderOF1.TimeCorrection = False
                theTileRawChannelBuilderOF1.AmpMinForAmpCorrection = jobproperties.TileRecFlags.AmpMinForAmpCorrection(
                )
                if jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
                ) > jobproperties.TileRecFlags.TimeMinForAmpCorrection():
                    theTileRawChannelBuilderOF1.TimeMinForAmpCorrection = jobproperties.TileRecFlags.TimeMinForAmpCorrection(
                    )
                    theTileRawChannelBuilderOF1.TimeMaxForAmpCorrection = jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
                    )

                mlog.info(" adding now TileRawChannelBuilderOF1 to ToolSvc")
                ToolSvc += theTileRawChannelBuilderOF1

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderOF1
                ]

            if jobproperties.TileRecFlags.doTileOpt2():
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderOpt2Filter
                    theTileRawChannelBuilderOpt2Filter = TileRawChannelBuilderOpt2Filter(
                    )
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderOpt2Filter Quit"
                    )
                    print traceback.format_exc()
                    return False

                # setup COOL to get OFCs
                if jobproperties.TileRecFlags.OfcFromCOOL():
                    theTileRawChannelBuilderOpt2Filter.TileCondToolOfc = ToolSvc.TileCondToolOfcCool

                #TileRawChannelBuilderOpt2Filter Options:
                jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelOpt2"
                theTileRawChannelBuilderOpt2Filter.TileRawChannelContainer = "TileRawChannelOpt2"
                theTileRawChannelBuilderOpt2Filter.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderOpt2Filter.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                theTileRawChannelBuilderOpt2Filter.correctTime = jobproperties.TileRecFlags.correctTime(
                )
                theTileRawChannelBuilderOpt2Filter.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderOpt2Filter.BestPhase = False
                # no point to use best phase with interations
                theTileRawChannelBuilderOpt2Filter.OF2 = True
                theTileRawChannelBuilderOpt2Filter.PedestalMode = 1
                theTileRawChannelBuilderOpt2Filter.MaxIterations = 5
                theTileRawChannelBuilderOpt2Filter.Minus1Iteration = True
                theTileRawChannelBuilderOpt2Filter.AmplitudeCorrection = False
                # don't need correction after iterations
                theTileRawChannelBuilderOpt2Filter.TimeCorrection = False
                # don't need correction after iterations

                mlog.info(
                    " adding now TileRawChannelBuilderOpt2Filter to ToolSvc")
                ToolSvc += theTileRawChannelBuilderOpt2Filter

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderOpt2Filter
                ]

            if jobproperties.TileRecFlags.doTileOptATLAS():
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawChannelBuilderOpt2Filter
                    theTileRawChannelBuilderOptATLAS = TileRawChannelBuilderOpt2Filter(
                        "TileRawChannelBuilderOptATLAS")
                except:
                    mlog.error(
                        "could not get handle to TileRawChannelBuilderOpt2Filter Quit"
                    )
                    print traceback.format_exc()
                    return False

                # setup COOL to get OFCs
                if jobproperties.TileRecFlags.OfcFromCOOL():
                    theTileRawChannelBuilderOptATLAS.TileCondToolOfc = ToolSvc.TileCondToolOfcCool

                #TileRawChannelBuilderOptATLAS Options:
                if globalflags.DataSource(
                ) == 'data':  # don't use the name which is used for reco data from DSP
                    if jobproperties.TileRecFlags.TileRawChannelContainer == "TileRawChannelCnt":
                        jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelFixed"
                    theTileRawChannelBuilderOptATLAS.TileRawChannelContainer = "TileRawChannelFixed"
                else:
                    jobproperties.TileRecFlags.TileRawChannelContainer = "TileRawChannelCnt"
                    theTileRawChannelBuilderOptATLAS.TileRawChannelContainer = "TileRawChannelCnt"
                theTileRawChannelBuilderOptATLAS.RunType = jobproperties.TileRecFlags.TileRunType(
                )
                theTileRawChannelBuilderOptATLAS.calibrateEnergy = jobproperties.TileRecFlags.calibrateEnergy(
                )
                if jobproperties.TileRecFlags.BestPhaseFromCOOL(
                ):  # can't correct time and use best phase at the same time
                    theTileRawChannelBuilderOptATLAS.correctTime = False
                else:
                    theTileRawChannelBuilderOptATLAS.correctTime = jobproperties.TileRecFlags.correctTime(
                    )
                theTileRawChannelBuilderOptATLAS.BestPhase = jobproperties.TileRecFlags.BestPhaseFromCOOL(
                )
                theTileRawChannelBuilderOptATLAS.NoiseFilterTools = NoiseFilterTools
                theTileRawChannelBuilderOptATLAS.OF2 = True
                #theTileRawChannelBuilderOptATLAS.PedestalMode = 1; # not sure if we need this option here
                theTileRawChannelBuilderOptATLAS.MaxIterations = 1
                # just one iteration
                theTileRawChannelBuilderOptATLAS.Minus1Iteration = False
                # assume that max sample is at t=0
                theTileRawChannelBuilderOptATLAS.AmplitudeCorrection = jobproperties.TileRecFlags.correctAmplitude(
                )
                theTileRawChannelBuilderOptATLAS.TimeCorrection = jobproperties.TileRecFlags.correctTimeNI(
                )
                theTileRawChannelBuilderOptATLAS.AmpMinForAmpCorrection = jobproperties.TileRecFlags.AmpMinForAmpCorrection(
                )
                if jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
                ) > jobproperties.TileRecFlags.TimeMinForAmpCorrection():
                    theTileRawChannelBuilderOptATLAS.TimeMinForAmpCorrection = jobproperties.TileRecFlags.TimeMinForAmpCorrection(
                    )
                    theTileRawChannelBuilderOptATLAS.TimeMaxForAmpCorrection = jobproperties.TileRecFlags.TimeMaxForAmpCorrection(
                    )

                mlog.info(
                    " adding now TileRawChannelBuilderOpt2Filter with name TileRawChannelBuilderOptATLAS to ToolSvc"
                )
                ToolSvc += theTileRawChannelBuilderOptATLAS

                theTileRawChannelMaker.TileRawChannelBuilder += [
                    ToolSvc.TileRawChannelBuilderOptATLAS
                ]

            # now add algorithm to topSequence
            # this should always come at the end

            mlog.info(" now adding to topSequence")
            from AthenaCommon.AlgSequence import AlgSequence
            topSequence = AlgSequence()

            if jobproperties.TileRecFlags.noiseFilter() == 2:
                # Instantiation of the C++ algorithm
                try:
                    from TileRecUtils.TileRecUtilsConf import TileRawCorrelatedNoise
                    theTileRawCorrelatedNoise = TileRawCorrelatedNoise(
                        "TileRCorreNoise")
                except:
                    mlog.error(
                        "could not import TileRecUtils.TileRawCorrelatedNoise")
                    print traceback.format_exc()
                    return False
                #theTileRawCorrelatedNoise.UseMeanFiles = False
                #theTileRawCorrelatedNoise.PMTOrder = True
                jobproperties.TileRecFlags.TileDigitsContainer = "NewDigitsContainer"
                topSequence += theTileRawCorrelatedNoise

            jobproperties.TileRecFlags.print_JobProperties('tree&value')

            theTileRawChannelMaker.TileDigitsContainer = jobproperties.TileRecFlags.TileDigitsContainer(
            )
            topSequence += theTileRawChannelMaker

        else:
            mlog.info(
                " Disable all OF methods because readDigits flag set to False "
            )
            jobproperties.TileRecFlags.doTileFlat = False
            jobproperties.TileRecFlags.doTileFit = False
            jobproperties.TileRecFlags.doTileFitCool = False
            jobproperties.TileRecFlags.doTileOpt = False
            jobproperties.TileRecFlags.doTileOpt2 = False
            jobproperties.TileRecFlags.doTileOptATLAS = False
            jobproperties.TileRecFlags.doTileManyAmps = False
            jobproperties.TileRecFlags.doTileMF = False
            jobproperties.TileRecFlags.doTileOF1 = False
            jobproperties.TileRecFlags.OfcFromCOOL = False
            jobproperties.TileRecFlags.print_JobProperties('tree&value')

        return True