Exemple #1
0
def RPC_DigitizationBasicCfg(flags, **kwargs):
    """Return ComponentAccumulator for RPC digitization"""
    acc = MuonGeoModelCfg(flags)
    if "PileUpTools" not in kwargs:
        PileUpTools = acc.popToolsAndMerge(RPC_DigitizationToolCfg(flags))
        kwargs["PileUpTools"] = PileUpTools
    acc.merge(PileUpToolsCfg(flags, **kwargs))
    return acc
Exemple #2
0
def TgcRDODecodeCfg(flags, forTrigger=False):
    acc = ComponentAccumulator()

    # We need the TGC cabling to be setup
    from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
    acc.merge(TGCCablingConfigCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Get the RDO -> PRD tool
    Muon__TgcRdoToPrepDataToolMT = CompFactory.Muon.TgcRdoToPrepDataToolMT
    TgcRdoToTgcPrepDataTool = Muon__TgcRdoToPrepDataToolMT(
        name="TgcRdoToTgcPrepDataTool")

    # Get the RDO -> PRD alorithm
    TgcRdoToTgcPrepData = CompFactory.TgcRdoToTgcPrepData
    TgcRdoToTgcPrepData = TgcRdoToTgcPrepData(
        name="TgcRdoToTgcPrepData",
        DecodingTool=TgcRdoToTgcPrepDataTool,
        PrintPrepData=False)
    # add RegSelTool
    from RegionSelector.RegSelToolConfig import regSelTool_TGC_Cfg
    TgcRdoToTgcPrepData.RegSel_TGC = acc.popToolsAndMerge(
        regSelTool_TGC_Cfg(flags))

    if forTrigger:
        # Set the algorithm to RoI mode
        TgcRdoToTgcPrepData.DoSeededDecoding = True
        from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection
        TgcRdoToTgcPrepData.RoIs = mapThresholdToL1RoICollection("MU")

    acc.addEventAlgo(TgcRdoToTgcPrepData)
    return acc
Exemple #3
0
def RPC_OverlayDigitizationBasicCfg(flags, **kwargs):
    """Return ComponentAccumulator with RPC Overlay digitization"""
    acc = MuonGeoModelCfg(flags)
    if "DigitizationTool" not in kwargs:
        tool = acc.popToolsAndMerge(RPC_OverlayDigitizationToolCfg(flags))
        kwargs["DigitizationTool"] = tool

    if flags.Concurrency.NumThreads > 0:
        kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)

    # Set common overlay extra inputs
    kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)

    RPC_Digitizer = CompFactory.RPC_Digitizer
    acc.addEventAlgo(RPC_Digitizer(name="RPC_OverlayDigitizer", **kwargs))
    return acc
Exemple #4
0
def MuonTrackBuildingCfg(flags, name="MuPatTrackBuilder"):
    MuPatTrackBuilder = CompFactory.MuPatTrackBuilder
    # This is based on https://gitlab.cern.ch/atlas/athena/blob/release/22.0.3/MuonSpectrometer/MuonReconstruction/MuonRecExample/python/MuonStandalone.py#L162
    result = ComponentAccumulator()

    #Arguably this should be somewhere deeper - not quite sure where yet though. FIXME
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(flags))

    Muon__MuonEDMHelperSvc = CompFactory.Muon.MuonEDMHelperSvc
    muon_edm_helper_svc = Muon__MuonEDMHelperSvc("MuonEDMHelperSvc")
    result.addService(muon_edm_helper_svc)

    acc = MuonTrackSteeringCfg(flags)
    track_steering = acc.getPrimary()
    result.merge(acc)

    track_builder = MuPatTrackBuilder(
        name=name,
        TrackSteering=track_steering,
        MuonSegmentCollection="MuonSegments",
        SpectrometerTrackOutputLocation="MuonSpectrometerTracks")

    result.addEventAlgo(track_builder, primary=True)
    return result
Exemple #5
0
def MuonGeoDetectorToolCfg(ConfigFlags, name='Muon', **kwargs):
    #set up geometry
    result=MuonGeoModelCfg(ConfigFlags)
    kwargs.setdefault("DetectorName", "Muon")
    #add the GeometryNotifierSvc
    result.addService(G4GeometryNotifierSvcCfg(ConfigFlags))
    kwargs.setdefault("GeometryNotifierSvc", result.getService("G4GeometryNotifierSvc"))
    result.setPrivateTools(GeoDetectorTool(name, **kwargs))
    return result
Exemple #6
0
def CSCCablingConfigCfg(flags):
    acc = ComponentAccumulator()

    acc.merge(MuonGeoModelCfg(flags))

    CSCcablingSvc = CompFactory.CSCcablingSvc
    cscCablingSvc = CSCcablingSvc()

    acc.addService(cscCablingSvc, primary=True)

    return acc
Exemple #7
0
def testCfg (configFlags):
    result = ComponentAccumulator()

    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge (MuonGeoModelCfg(configFlags))

    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    result.merge (MagneticFieldSvcCfg(configFlags, UseDCS = False))

    Muon__MdtRdoToPrepDataTool = CompFactory.Muon.MdtRdoToPrepDataTool
    result.addPublicTool (Muon__MdtRdoToPrepDataTool ('Muon__MdtRdoToPrepDataTool', OutputLevel = 1))
    
    result.addEventAlgo (TestAlg ('TestAlg'))
    return result
Exemple #8
0
def testCfg(configFlags):
    result = ComponentAccumulator()

    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(configFlags))

    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    result.merge(MagneticFieldSvcCfg(configFlags, UseDCS=False))

    MuonStationIntersectSvc = CompFactory.MuonStationIntersectSvc
    result.addService(
        MuonStationIntersectSvc('MuonStationIntersectSvc', OutputLevel=1))

    result.addEventAlgo(TestAlg('TestAlg'))
    return result
Exemple #9
0
def MDTCablingConfigCfg(flags):
    acc = ComponentAccumulator()

    acc.merge(MuonGeoModelCfg(flags))

    MuonMDT_CablingAlg = CompFactory.MuonMDT_CablingAlg
    MDTCablingAlg = MuonMDT_CablingAlg("MuonMDT_CablingAlg")

    MuonMDT_CablingSvc = CompFactory.MuonMDT_CablingSvc
    mdtCablingSvc = MuonMDT_CablingSvc()
    mdtCablingSvc.UseOldCabling = False
    mdtCablingSvc.ForcedUse = True

    MDTCablingDbTool = CompFactory.MDTCablingDbTool
    MDTCablingDbTool = MDTCablingDbTool()

    from IOVDbSvc.IOVDbSvcConfig import addFolders
    if flags.Input.isMC is True:
        MDTCablingDbTool.MapFolders = "/MDT/Ofl/CABLING/MAP_SCHEMA"
        MDTCablingDbTool.MezzanineFolders = "/MDT/Ofl/CABLING/MEZZANINE_SCHEMA"
        MDTCablingAlg.MapFolders = "/MDT/Ofl/CABLING/MAP_SCHEMA"
        MDTCablingAlg.MezzanineFolders = "/MDT/Ofl/CABLING/MEZZANINE_SCHEMA"
        acc.merge(
            addFolders(flags, [
                "/MDT/Ofl/CABLING/MAP_SCHEMA",
                "/MDT/Ofl/CABLING/MEZZANINE_SCHEMA"
            ],
                       'MDT_OFL',
                       className="CondAttrListCollection"))
    else:
        MDTCablingDbTool.MapFolders = "/MDT/CABLING/MAP_SCHEMA"
        MDTCablingDbTool.MezzanineFolders = "/MDT/CABLING/MEZZANINE_SCHEMA"
        MDTCablingAlg.MapFolders = "/MDT/CABLING/MAP_SCHEMA"
        MDTCablingAlg.MezzanineFolders = "/MDT/CABLING/MEZZANINE_SCHEMA"
        acc.merge(
            addFolders(
                flags,
                ["/MDT/CABLING/MAP_SCHEMA", "/MDT/CABLING/MEZZANINE_SCHEMA"],
                'MDT',
                className="CondAttrListCollection"))

    acc.addCondAlgo(MDTCablingAlg)
    acc.addPublicTool(MDTCablingDbTool)
    mdtCablingSvc.DBTool = MDTCablingDbTool

    acc.addService(mdtCablingSvc, primary=True)

    return acc
Exemple #10
0
def testCfg(configFlags):
    result = ComponentAccumulator()

    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(configFlags))

    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    result.merge(MagneticFieldSvcCfg(configFlags, UseDCS=False))

    TrigL2MuonSA__MdtDataPreparator = CompFactory.TrigL2MuonSA.MdtDataPreparator
    result.addPublicTool(
        TrigL2MuonSA__MdtDataPreparator('TrigL2MuonSA::MdtDataPreparator',
                                        OutputLevel=1))  # noqa: ATL900

    result.addEventAlgo(TestAlg('TestAlg'))
    return result
Exemple #11
0
def RpcBytestreamDecodeCfg(flags, forTrigger=False):
    acc = ComponentAccumulator()

    # We need the RPC cabling to be setup
    from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
    acc.merge(RPCCablingConfigCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Setup the RPC ROD decoder
    Muon__RpcROD_Decoder = CompFactory.Muon.RpcROD_Decoder
    RPCRodDecoder = Muon__RpcROD_Decoder(name="RpcROD_Decoder")

    # RAW data provider tool needs ROB data provider service (should be another Config function?)
    ROBDataProviderSvc = CompFactory.ROBDataProviderSvc
    robDPSvc = ROBDataProviderSvc()
    acc.addService(robDPSvc)

    # Setup the RAW data provider tool
    keyName = flags.Overlay.BkgPrefix + "RPCPAD" if flags.Detector.OverlayRPC else "RPCPAD"
    Muon__RPC_RawDataProviderToolMT = CompFactory.Muon.RPC_RawDataProviderToolMT
    MuonRpcRawDataProviderTool = Muon__RPC_RawDataProviderToolMT(
        name="RPC_RawDataProviderToolMT",
        Decoder=RPCRodDecoder,
        RdoLocation=keyName)
    if forTrigger:
        MuonRpcRawDataProviderTool.RpcContainerCacheKey = MuonCacheNames.RpcCache
        MuonRpcRawDataProviderTool.WriteOutRpcSectorLogic = False

    acc.addPublicTool(
        MuonRpcRawDataProviderTool
    )  # This should be removed, but now defined as PublicTool at MuFastSteering

    # Setup the RAW data provider algorithm
    Muon__RpcRawDataProvider = CompFactory.Muon.RpcRawDataProvider
    RpcRawDataProvider = Muon__RpcRawDataProvider(
        name="RpcRawDataProvider", ProviderTool=MuonRpcRawDataProviderTool)

    if forTrigger:
        # Configure the RAW data provider for ROI access
        from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection
        RpcRawDataProvider.RoIs = mapThresholdToL1RoICollection("MU")

    acc.addEventAlgo(RpcRawDataProvider, primary=True)
    return acc
Exemple #12
0
def MdtBytestreamDecodeCfg(flags, forTrigger=False):
    acc = ComponentAccumulator()

    # We need the MDT cabling to be setup
    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
    acc.merge(MDTCablingConfigCfg(flags))

    # need the MagFieldSvc since MdtRdoToMdtPrepData.MdtRdoToMdtPrepDataTool.MdtCalibrationTool wants to retrieve it
    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    acc.merge(MagneticFieldSvcCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Setup the MDT ROD decoder
    MdtROD_Decoder = CompFactory.MdtROD_Decoder
    MDTRodDecoder = MdtROD_Decoder(name="MdtROD_Decoder")

    # RAW data provider tool needs ROB data provider service (should be another Config function?)
    ROBDataProviderSvc = CompFactory.ROBDataProviderSvc
    robDPSvc = ROBDataProviderSvc()
    acc.addService(robDPSvc)

    # Setup the RAW data provider tool
    keyName = flags.Overlay.BkgPrefix + "MDTCSM" if flags.Detector.OverlayMDT else "MDTCSM"
    Muon__MDT_RawDataProviderToolMT = CompFactory.Muon.MDT_RawDataProviderToolMT
    MuonMdtRawDataProviderTool = Muon__MDT_RawDataProviderToolMT(
        name="MDT_RawDataProviderToolMT",
        Decoder=MDTRodDecoder,
        RdoLocation=keyName)

    if forTrigger:
        MuonMdtRawDataProviderTool.CsmContainerCacheKey = MuonCacheNames.MdtCsmCache

    acc.addPublicTool(
        MuonMdtRawDataProviderTool
    )  # This should be removed, but now defined as PublicTool at MuFastSteering

    # Setup the RAW data provider algorithm
    Muon__MdtRawDataProvider = CompFactory.Muon.MdtRawDataProvider
    MdtRawDataProvider = Muon__MdtRawDataProvider(
        name="MdtRawDataProvider", ProviderTool=MuonMdtRawDataProviderTool)

    acc.addEventAlgo(MdtRawDataProvider, primary=True)

    return acc
Exemple #13
0
def RPCCablingConfigCfg(flags):
    acc = ComponentAccumulator()

    # TODO check if we actually need this here?
    acc.merge(MuonGeoModelCfg(flags))

    RpcCablingCondAlg = CompFactory.RpcCablingCondAlg
    RpcCablingAlg = RpcCablingCondAlg("RpcCablingCondAlg")
    acc.addCondAlgo(RpcCablingAlg)

    RPCcablingServerSvc = CompFactory.RPCcablingServerSvc
    RPCCablingSvc = RPCcablingServerSvc()
    RPCCablingSvc.Atlas = True
    RPCCablingSvc.forcedUse = True
    RPCCablingSvc.useMuonRPC_CablingSvc = True  #Needed to switch to new cabling
    acc.addService(RPCCablingSvc)

    MuonRPC_CablingSvc = CompFactory.MuonRPC_CablingSvc
    rpcCablingSvc = MuonRPC_CablingSvc()
    rpcCablingSvc.ConfFileName = 'LVL1confAtlas.data'  # this should come from config flag maybe ???
    rpcCablingSvc.CorrFileName = 'LVL1confAtlas.corr'
    rpcCablingSvc.ConfFilePath = 'MuonRPC_Cabling/'
    rpcCablingSvc.RPCTriggerRoadsfromCool = True
    rpcCablingSvc.CosmicConfiguration = 'HLT' in flags.IOVDb.GlobalTag  # this was set to true by the modifier openThresholdRPCCabling in runHLT_standalone.py

    from IOVDbSvc.IOVDbSvcConfig import addFolders
    dbName = 'RPC_OFL' if flags.Input.isMC else 'RPC'
    acc.merge(
        addFolders(flags, [
            '/RPC/TRIGGER/CM_THR_ETA', '/RPC/TRIGGER/CM_THR_PHI',
            '/RPC/CABLING/MAP_SCHEMA', '/RPC/CABLING/MAP_SCHEMA_CORR'
        ],
                   dbName,
                   className='CondAttrListCollection'))

    RPCCablingDbTool = CompFactory.RPCCablingDbTool
    RPCCablingDbTool = RPCCablingDbTool()
    RPCCablingDbTool.MapConfigurationFolder = '/RPC/CABLING/MAP_SCHEMA'
    RPCCablingDbTool.MapCorrectionFolder = '/RPC/CABLING/MAP_SCHEMA_CORR'

    acc.addPublicTool(RPCCablingDbTool)
    rpcCablingSvc.TheRpcCablingDbTool = RPCCablingDbTool

    acc.addService(rpcCablingSvc, primary=True)

    return acc
Exemple #14
0
def TrackingGeoCfg(inputFlags):
    result = ComponentAccumulator()

    from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg
    result.merge(InDetGeometryCfg(inputFlags))

    # Something builds muon stations -- extrapolator?
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(inputFlags))

    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
    result.merge(TrackingGeometrySvcCfg(inputFlags))

    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    result.merge(MagneticFieldSvcCfg(inputFlags))

    return result
Exemple #15
0
def AtlasGeometryCfg(flags):
    acc = ComponentAccumulator()

    from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg
    acc.merge(InDetGeometryCfg(flags))
    from LArGeoAlgsNV.LArGMConfig import LArGMCfg
    acc.merge(LArGMCfg(flags))
    from TileGeoModel.TileGMConfig import TileGMCfg
    acc.merge(TileGMCfg(flags))
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))
    #from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
    #acc.merge(ForDetGeometryCfg(flags))
    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
    acc.merge(BeamPipeGeometryCfg(flags))
    from AtlasGeoModel.CavernGMConfig import CavernGeometryCfg
    acc.merge(CavernGeometryCfg(flags))
    return acc
Exemple #16
0
def MuonSegmentFindingCfg(flags, cardinality=1):
    # Set up some general stuff needed by muon reconstruction

    result = ComponentAccumulator()

    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(flags))

    Muon__MuonEDMHelperSvc = CompFactory.Muon.MuonEDMHelperSvc
    muon_edm_helper_svc = Muon__MuonEDMHelperSvc("MuonEDMHelperSvc")
    result.addService(muon_edm_helper_svc)

    # We need to add two algorithms - one for normal collisions, one for NCB
    acc = MooSegmentFinderAlgCfg(flags, Cardinality=cardinality)
    result.merge(acc)

    acc = MooSegmentFinderAlg_NCBCfg(flags, Cardinality=cardinality)
    result.merge(acc)
    return result
Exemple #17
0
def TgcBytestreamDecodeCfg(flags, forTrigger=False):
    acc = ComponentAccumulator()

    # We need the TGC cabling to be setup
    from MuonConfig.MuonCablingConfig import TGCCablingConfigCfg
    acc.merge(TGCCablingConfigCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Setup the TGC ROD decoder
    Muon__TGC_RodDecoderReadout = CompFactory.Muon.TGC_RodDecoderReadout
    TGCRodDecoder = Muon__TGC_RodDecoderReadout(name="TgcROD_Decoder")

    # RAW data provider tool needs ROB data provider service (should be another Config function?)
    ROBDataProviderSvc = CompFactory.ROBDataProviderSvc
    robDPSvc = ROBDataProviderSvc()
    acc.addService(robDPSvc)

    # Setup the RAW data provider tool
    keyName = flags.Overlay.BkgPrefix + "TGCRDO" if flags.Detector.OverlayTGC else "TGCRDO"
    Muon__TGC_RawDataProviderToolMT = CompFactory.Muon.TGC_RawDataProviderToolMT
    MuonTgcRawDataProviderTool = Muon__TGC_RawDataProviderToolMT(
        name="TGC_RawDataProviderToolMT",
        Decoder=TGCRodDecoder,
        RdoLocation=keyName)

    if forTrigger:
        MuonTgcRawDataProviderTool.TgcContainerCacheKey = MuonCacheNames.TgcCache

    acc.addPublicTool(
        MuonTgcRawDataProviderTool
    )  # This should be removed, but now defined as PublicTool at MuFastSteering

    # Setup the RAW data provider algorithm
    Muon__TgcRawDataProvider = CompFactory.Muon.TgcRawDataProvider
    TgcRawDataProvider = Muon__TgcRawDataProvider(
        name="TgcRawDataProvider", ProviderTool=MuonTgcRawDataProviderTool)

    acc.addEventAlgo(TgcRawDataProvider, primary=True)

    return acc
Exemple #18
0
def RpcRDODecodeCfg(flags, forTrigger=False):
    from MuonConfig.MuonCondAlgConfig import RpcCondDbAlgCfg  # MT-safe conditions access
    acc = RpcCondDbAlgCfg(flags)

    # We need the RPC cabling to be setup
    from MuonConfig.MuonCablingConfig import RPCCablingConfigCfg
    acc.merge(RPCCablingConfigCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Get the RDO -> PRD tool
    Muon__RpcRdoToPrepDataToolMT = CompFactory.Muon.RpcRdoToPrepDataToolMT
    RpcRdoToRpcPrepDataTool = Muon__RpcRdoToPrepDataToolMT(
        name="RpcRdoToRpcPrepDataTool")
    if flags.Common.isOnline:
        RpcRdoToRpcPrepDataTool.ReadKey = ""  ## cond data not needed online

    if forTrigger:
        RpcRdoToRpcPrepDataTool.RpcPrdContainerCacheKey = MuonPrdCacheNames.RpcCache
        RpcRdoToRpcPrepDataTool.RpcCoinDataContainerCacheKey = MuonPrdCacheNames.RpcCoinCache

    # Get the RDO -> PRD alorithm
    RpcRdoToRpcPrepData = CompFactory.RpcRdoToRpcPrepData
    RpcRdoToRpcPrepData = RpcRdoToRpcPrepData(
        name="RpcRdoToRpcPrepData",
        DecodingTool=RpcRdoToRpcPrepDataTool,
        PrintPrepData=False)
    # add RegSelTool
    from RegionSelector.RegSelToolConfig import regSelTool_RPC_Cfg
    RpcRdoToRpcPrepData.RegSel_RPC = acc.popToolsAndMerge(
        regSelTool_RPC_Cfg(flags))

    if forTrigger:
        # Set the algorithm to RoI mode
        RpcRdoToRpcPrepData.DoSeededDecoding = True
        from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection
        RpcRdoToRpcPrepData.RoIs = mapThresholdToL1RoICollection("MU")

    acc.addEventAlgo(RpcRdoToRpcPrepData)
    return acc
Exemple #19
0
def TGCCablingConfigCfg(flags):
    acc = ComponentAccumulator()

    # TODO check if we actually need this here?
    acc.merge(MuonGeoModelCfg(flags))

    LVL1TGC__TGCRecRoiSvc = CompFactory.LVL1TGC.TGCRecRoiSvc
    acc.addService(LVL1TGC__TGCRecRoiSvc())

    TGCcablingServerSvc = CompFactory.TGCcablingServerSvc
    TGCCablingSvc = TGCcablingServerSvc()
    TGCCablingSvc.Atlas = True
    TGCCablingSvc.useMuonTGC_CablingSvc = True
    TGCCablingSvc.forcedUse = True
    acc.addService(TGCCablingSvc, primary=True)

    from IOVDbSvc.IOVDbSvcConfig import addFolders
    dbName = 'TGC_OFL' if flags.Input.isMC else 'TGC'
    acc.merge(addFolders(flags, '/TGC/CABLING/MAP_SCHEMA', dbName))

    return acc
Exemple #20
0
def CscRDODecodeCfg(flags, forTrigger=False):
    acc = ComponentAccumulator()

    # We need the CSC cabling to be setup
    from MuonConfig.MuonCablingConfig import CSCCablingConfigCfg  # Not yet been prepared
    acc.merge(CSCCablingConfigCfg(flags))

    from MuonConfig.MuonCondAlgConfig import CscCondDbAlgCfg
    acc.merge(CscCondDbAlgCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Get the RDO -> PRD tool
    Muon__CscRdoToCscPrepDataToolMT = CompFactory.Muon.CscRdoToCscPrepDataToolMT
    CscRdoToCscPrepDataTool = Muon__CscRdoToCscPrepDataToolMT(
        name="CscRdoToCscPrepDataTool")

    # Get the RDO -> PRD alorithm
    CscRdoToCscPrepData = CompFactory.CscRdoToCscPrepData
    CscRdoToCscPrepData = CscRdoToCscPrepData(
        name="CscRdoToCscPrepData",
        CscRdoToCscPrepDataTool=CscRdoToCscPrepDataTool,
        PrintPrepData=False)
    # add RegSelTool
    from RegionSelector.RegSelToolConfig import regSelTool_CSC_Cfg
    CscRdoToCscPrepData.RegSel_CSC = acc.popToolsAndMerge(
        regSelTool_CSC_Cfg(flags))

    if forTrigger:
        # Set the algorithm to RoI mode
        CscRdoToCscPrepData.DoSeededDecoding = True
        from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection
        CscRdoToCscPrepData.RoIs = mapThresholdToL1RoICollection("MU")

    acc.addEventAlgo(CscRdoToCscPrepData)
    return acc
Exemple #21
0
def MdtRDODecodeCfg(flags, forTrigger=False):
    acc = ComponentAccumulator()

    # We need the MDT cabling to be setup
    from MuonConfig.MuonCablingConfig import MDTCablingConfigCfg
    acc.merge(MDTCablingConfigCfg(flags))

    from MuonConfig.MuonCalibConfig import MdtCalibDbAlgCfg
    acc.merge(MdtCalibDbAlgCfg(flags))

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    acc.merge(MuonGeoModelCfg(flags))

    # Get the RDO -> PRD tool
    Muon__MdtRdoToPrepDataToolMT = CompFactory.Muon.MdtRdoToPrepDataToolMT
    MdtRdoToMdtPrepDataTool = Muon__MdtRdoToPrepDataToolMT(
        name="MdtRdoToMdtPrepDataTool")

    # Get the RDO -> PRD alorithm
    MdtRdoToMdtPrepData = CompFactory.MdtRdoToMdtPrepData
    MdtRdoToMdtPrepData = MdtRdoToMdtPrepData(
        name="MdtRdoToMdtPrepData",
        DecodingTool=MdtRdoToMdtPrepDataTool,
        PrintPrepData=False)
    # add RegSelTool
    from RegionSelector.RegSelToolConfig import regSelTool_MDT_Cfg
    MdtRdoToMdtPrepData.RegSel_MDT = acc.popToolsAndMerge(
        regSelTool_MDT_Cfg(flags))

    if forTrigger:
        # Set the algorithm to RoI mode
        MdtRdoToMdtPrepData.DoSeededDecoding = True
        from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection
        MdtRdoToMdtPrepData.RoIs = mapThresholdToL1RoICollection("MU")

    acc.addEventAlgo(MdtRdoToMdtPrepData)
    return acc
Exemple #22
0
def PrepareStandAloneBTagCfg(inputFlags):
    result = ComponentAccumulator()

    from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
    result.merge(PoolReadCfg(inputFlags))

    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
    acc = TrackingGeometrySvcCfg(inputFlags)
    result.merge(acc)

    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(inputFlags))

    GeometryDBSvc = CompFactory.GeometryDBSvc
    result.addService(GeometryDBSvc("InDetGeometryDBSvc"))

    from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
    result.merge(PixelGeometryCfg(inputFlags))

    # get standard config for magnetic field - map and cache
    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    result.merge(MagneticFieldSvcCfg(inputFlags))

    from IOVDbSvc.IOVDbSvcConfig import addFolders, addFoldersSplitOnline

    #load folders needed for Run2 ID alignment
    result.merge(
        addFoldersSplitOnline(inputFlags,
                              "INDET",
                              "/Indet/Onl/Align",
                              "/Indet/Align",
                              className="AlignableTransformContainer"))
    result.merge(addFolders(inputFlags, ['/TRT/Align'], 'TRT_OFL'))

    #load folders needed for IBL
    result.merge(addFolders(inputFlags, ['/Indet/IBLDist'], 'INDET_OFL'))

    return result
Exemple #23
0
def TPCnvTest(infile,
              keys,
              useGeoModelSvc=False,
              useIOVDbSvc=False,
              doPixel=False,
              doSCT=False,
              doTRT=False,
              doLAr=False,
              doTile=False,
              doMuon=False):
    # Make sure we don't have a stale file catalog.
    if os.path.exists('PoolFileCatalog.xml'):
        os.remove('PoolFileCatalog.xml')

    if ('ATLAS_REFERENCE_TAG' not in globals()
            and 'ATLAS_REFERENCE_TAG' in os.environ):
        ATLAS_REFERENCE_TAG = os.environ['ATLAS_REFERENCE_TAG']  # noqa: F841

    refpaths = [
        os.environ.get('ATLAS_REFERENCE_DATA', None),
        '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art',
        '/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/CommonInputs',
        '/afs/cern.ch/atlas/maxidisk/d33/referencefiles'
    ]

    if infile.startswith('rtt:'):
        infile = infile[4:]
    infile = find_file(infile, refpaths)

    # Provide MC input
    ConfigFlags.Input.Files = [infile]
    ConfigFlags.GeoModel.AtlasVersion = 'ATLAS-R1-2012-03-01-00'
    ConfigFlags.GeoModel.Align.Dynamic = False
    ConfigFlags.Detector.GeometryPixel = doPixel
    ConfigFlags.Detector.GeometrySCT = doSCT
    ConfigFlags.Detector.GeometryTRT = doTRT
    ConfigFlags.Detector.GeometryLAr = doLAr
    ConfigFlags.Detector.GeometryTile = doTile
    ConfigFlags.Detector.GeometryMuon = doMuon
    ConfigFlags.lock()

    # Construct ComponentAccumulator
    acc = MainServicesCfg(ConfigFlags)
    acc.merge(PoolReadCfg(ConfigFlags))
    if useIOVDbSvc:
        acc.merge(IOVDbSvcCfg(ConfigFlags))
    if useGeoModelSvc:
        if ConfigFlags.Detector.GeometryPixel:
            acc.merge(PixelGeometryCfg(ConfigFlags))
            useGeoModelSvc = True
        if ConfigFlags.Detector.GeometrySCT:
            acc.merge(SCT_GeometryCfg(ConfigFlags))
            useGeoModelSvc = True
        if ConfigFlags.Detector.GeometryTRT:
            acc.merge(TRT_GeometryCfg(ConfigFlags))
            useGeoModelSvc = True
        if ConfigFlags.Detector.GeometryLAr:
            acc.merge(LArGMCfg(ConfigFlags))
            useGeoModelSvc = True
        if ConfigFlags.Detector.GeometryTile:
            acc.merge(TileGMCfg(ConfigFlags))
            useGeoModelSvc = True
        if ConfigFlags.Detector.GeometryMuon:
            acc.merge(MuonGeoModelCfg(ConfigFlags))
            useGeoModelSvc = True
        #acc.merge(ForDetGeometryCfg(ConfigFlags))
        acc.merge(GeoModelCfg(ConfigFlags))
        acc.getService("GeoModelSvc").IgnoreTagDifference = True
    acc.addEventAlgo(
        Dumper('dumper', ConfigFlags.Input.Files[0], keys, refpaths),
        'AthAlgSeq')
    return acc.run(maxEvents=10)
Exemple #24
0
def PFCfg(inputFlags, **kwargs):

    #This is monolithic for now.
    #Once a first complete example runs, this will be split into small modular chunks.
    #Some such items may be best placed elsewehere (e.g. put magnetic field setup in magnetic field git folder etc)
    result = ComponentAccumulator()

    StoreGateSvc = CompFactory.StoreGateSvc
    result.addService(StoreGateSvc("DetectorStore"))

    #Alias calibrated topoclusters, if they exist already, such that overwrite won't fial
    from SGComps.AddressRemappingConfig import InputRenameCfg
    result.merge(
        InputRenameCfg("xAOD::CaloClusterContainer", "CaloCalTopoClusters",
                       ""))

    #Setup up general geometry
    from AtlasGeoModel.InDetGMConfig import InDetGeometryCfg
    result.merge(InDetGeometryCfg(inputFlags))

    #Setup TRT conditions
    TRTAlignCondAlg = CompFactory.TRTAlignCondAlg
    result.addCondAlgo(
        TRTAlignCondAlg(name="TRTAlignCondAlg",
                        UseDynamicFolders=inputFlags.GeoModel.Align.Dynamic))

    #Setup Pixel conditions
    PixelAlignCondAlg = CompFactory.PixelAlignCondAlg
    result.addCondAlgo(
        PixelAlignCondAlg(
            name="PixelAlignCondAlg",
            UseDynamicAlignFolders=inputFlags.GeoModel.Align.Dynamic))

    PixelDetectorElementCondAlg = CompFactory.PixelDetectorElementCondAlg
    result.addCondAlgo(
        PixelDetectorElementCondAlg(name="PixelDetectorElementCondAlg"))

    #Setup SCT conditions
    SCT_AlignCondAlg = CompFactory.SCT_AlignCondAlg
    result.addCondAlgo(
        SCT_AlignCondAlg(
            name="SCT_AlignCondAlg",
            UseDynamicAlignFolders=inputFlags.GeoModel.Align.Dynamic))

    SCT_DetectorElementCondAlg = CompFactory.SCT_DetectorElementCondAlg
    result.addCondAlgo(
        SCT_DetectorElementCondAlg(name="SCT_DetectorElementCondAlg"))

    GeometryDBSvc = CompFactory.GeometryDBSvc
    result.addService(GeometryDBSvc("InDetGeometryDBSvc"))

    #from AthenaCommon import CfgGetter
    #result.getService("GeoModelSvc").DetectorTools += [ CfgGetter.getPrivateTool("PixelDetectorTool", checkType=True) ]
    #result.getService("GeoModelSvc").DetectorTools += [ CfgGetter.getPrivateTool("SCT_DetectorTool", checkType=True) ]

    #Setup TRT geometry
    TRT_DetectorTool = CompFactory.TRT_DetectorTool
    trtDetectorTool = TRT_DetectorTool()
    #These two lines fix ATLASRECTS-5053. I expect eventually we can remove them, once the underlying issue is fixed.
    trtDetectorTool.DoXenonArgonMixture = False
    trtDetectorTool.DoKryptonMixture = False
    result.getService("GeoModelSvc").DetectorTools += [trtDetectorTool]

    #Setup up material for inner detector
    InDetServMatTool = CompFactory.InDetServMatTool
    result.getService("GeoModelSvc").DetectorTools += [InDetServMatTool()]

    #Setup up tracking geometry
    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
    acc = TrackingGeometrySvcCfg(inputFlags)
    result.merge(acc)

    #load folders needed for Run2 ID alignment
    from IOVDbSvc.IOVDbSvcConfig import addFolders
    result.merge(addFolders(inputFlags, ['/TRT/Align'], 'TRT_OFL'))

    #Setup up muon geometry
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(inputFlags))

    #setup magnetic field service
    from MagFieldServices.MagFieldServicesConfig import MagneticFieldSvcCfg
    result.merge(MagneticFieldSvcCfg(inputFlags))

    #hard-code MC conditions tag needed for my ESD file - must be a better way? how to auto-configure?
    iovDbSvc = result.getService("IOVDbSvc")
    iovDbSvc.GlobalTag = "OFLCOND-MC16-SDR-20"

    #Configure topocluster algorithmsm, and associated conditions
    from CaloRec.CaloTopoClusterConfig import CaloTopoClusterCfg
    result.merge(CaloTopoClusterCfg(inputFlags, doLCCalib=True))

    from CaloRec.CaloTopoClusterConfig import caloTopoCoolFolderCfg
    result.merge(caloTopoCoolFolderCfg(inputFlags))

    from CaloTools.CaloNoiseCondAlgConfig import CaloNoiseCondAlgCfg
    result.merge(CaloNoiseCondAlgCfg(inputFlags, "totalNoise"))
    result.merge(CaloNoiseCondAlgCfg(inputFlags, "electronicNoise"))

    #Cache the track extrapolations
    from TrackToCalo.CaloExtensionBuilderAlgCfg import getCaloExtenstionBuilderAlgorithm
    result.addEventAlgo(getCaloExtenstionBuilderAlgorithm(inputFlags))

    #Configure the pflow algorithms
    PFLeptonSelector = CompFactory.PFLeptonSelector
    result.addEventAlgo(PFLeptonSelector("PFLeptonSelector"))

    from eflowRec.PFCfg import getPFTrackSelectorAlgorithm
    result.addEventAlgo(
        getPFTrackSelectorAlgorithm(inputFlags, "PFTrackSelector"))

    result.addEventAlgo(getOfflinePFAlgorithm(inputFlags))

    from eflowRec.PFCfg import getChargedPFOCreatorAlgorithm, getNeutralPFOCreatorAlgorithm
    result.addEventAlgo(getChargedPFOCreatorAlgorithm(inputFlags, ""))
    result.addEventAlgo(getNeutralPFOCreatorAlgorithm(inputFlags, ""))

    return result
Exemple #25
0
def MuonCombinedReconstructionCfg(flags):
    result = ComponentAccumulator()

    from AtlasGeoModel.GeoModelConfig import GeoModelCfg
    result.merge(GeoModelCfg(flags))

    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(flags))

    from LArGeoAlgsNV.LArGMConfig import LArGMCfg
    result.merge(LArGMCfg(flags))

    from TileGeoModel.TileGMConfig import TileGMCfg
    result.merge(TileGMCfg(flags))

    from BeamPipeGeoModel.BeamPipeGMConfig import BeamPipeGeometryCfg
    result.merge(BeamPipeGeometryCfg(flags))

    from PixelGeoModel.PixelGeoModelConfig import PixelGeometryCfg
    result.merge(PixelGeometryCfg(flags))

    from SCT_GeoModel.SCT_GeoModelConfig import SCT_GeometryCfg
    result.merge(SCT_GeometryCfg(flags))

    from TRT_GeoModel.TRT_GeoModelConfig import TRT_GeometryCfg
    result.merge(TRT_GeometryCfg(flags))

    from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
    result.merge(TrackingGeometrySvcCfg(flags))

    muon_edm_helper_svc = CompFactory.Muon.MuonEDMHelperSvc("MuonEDMHelperSvc")
    result.addService(muon_edm_helper_svc)

    # Set up to read Tracks.
    from TrkConfig.TrackCollectionReadConfig import TrackCollectionReadCfg
    result.merge(TrackCollectionReadCfg(flags, 'Tracks'))

    result.merge(MuonCombinedInDetCandidateAlg(flags))
    result.merge(MuonCombinedMuonCandidateAlgCfg(flags))

    if flags.MuonCombined.doStatisticalCombination or flags.MuonCombined.doCombinedFit:
        result.merge(MuonCombinedAlgCfg(flags))

    if flags.MuonCombined.doMuGirl:
        result.merge(
            MuonInsideOutRecoAlgCfg(flags, name="MuonInsideOutRecoAlg"))
        if flags.MuonCombined.doMuGirlLowBeta:
            result.merge(MuGirlStauAlgCfg)

    if flags.MuonCombined.doCaloTrkMuId:
        result.merge(MuonCaloTagAlgCfg(flags))

    if flags.MuonCombined.doMuonSegmentTagger:
        result.merge(MuonSegmentTagAlgCfg(flags))

    # runs over outputs and create xAODMuon collection
    acc = MuonCreatorAlgCfg(flags)
    result.merge(acc)

    if flags.MuonCombined.doMuGirl and flags.MuonCombined.doMuGirlLowBeta:
        # Has to be at end if not using sequencer. If we drop this requirement, can be moved above
        result.merge(StauCreatorAlgCfg(flags))

    return result
Exemple #26
0
# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
from AthenaCommon import Logging
from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
from AthenaConfiguration.ComponentFactory import CompFactory

if __name__=="__main__":
    # Setting needed for the ComponentAccumulator to do its thing
    from AthenaCommon.Configurable import Configurable
    Configurable.configurableRun3Behavior=True
    
    # Set message levels
    from AthenaCommon import Constants
    msgLvl = "WARNING"
    from AthenaCommon.Logging import log
    log.setLevel(msgLvl)
    
    # Config flags steer the job at various levels
    from AthenaConfiguration.AllConfigFlags import ConfigFlags
    ConfigFlags.Input.isMC  = True
    ConfigFlags.Input.Files = ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/ASG/mc16_13TeV.410501.PowhegPythia8EvtGen_A14_ttbar_hdamp258p75_nonallhad.merge.AOD.e5458_s3126_r9364_r9315/AOD.11182705._000001.pool.root.1"]
    
    # Flags relating to multithreaded execution
    nthreads=0
    ConfigFlags.Concurrency.NumThreads =nthreads
    if nthreads>0:
    	ConfigFlags.Concurrency.NumThreads = 1
    	ConfigFlags.Concurrency.NumConcurrentEvents = 1
    ConfigFlags.MET.UseTracks = True
    ConfigFlags.MET.DoPFlow = True
    if ConfigFlags.Beam.Type == 'cosmics' or ConfigFlags.Beam.Type == 'singlebeam':# used to have " or not rec.doInDet()" on the end
Exemple #27
0
def CscMonitoringConfig(inputFlags):
    '''Function to configures some algorithms in the monitoring system.'''

    ### STEP 1 ###
    # If you need to set up special tools, etc., you will need your own ComponentAccumulator;
    # uncomment the following 2 lines and use the last three lines of this function instead of the ones
    # just before
    from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
    result = ComponentAccumulator()

    # Make sure muon geometry is configured
    from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
    result.merge(MuonGeoModelCfg(inputFlags))

    # The following class will make a sequence, configure algorithms, and link
    # them to GenericMonitoringTools
    from AthenaMonitoring import AthMonitorCfgHelper
    helper = AthMonitorCfgHelper(inputFlags, 'CscAthMonitorCfg')

    ### STEP 2 ###
    # Adding an algorithm to the helper. Here, we will use the example
    # algorithm in the AthenaMonitoring package. Just pass the type to the
    # helper. Then, the helper will instantiate an instance and set up the
    # base class configuration following the inputFlags. The returned object
    # is the algorithm.
    # This uses the new Configurables object system.
    cscClusMonAlg = helper.addAlgorithm(CompFactory.CscClusterValMonAlg,
                                        'CscClusMonAlg')
    cscPrdMonAlg = helper.addAlgorithm(CompFactory.CscPrdValMonAlg,
                                       'CscPrdMonAlg')
    # cscSegmMonAlg = helper.addAlgorithm(CompFactory.CscSegmValMonAlg,'CscSegmValMonAlg')

    ### STEP 3 ###
    # Edit properties of a algorithm
    # some generic property
    # exampleMonAlg.RandomHist = True
    cscClusMonAlg.CSCQmaxCutADC = 100
    cscPrdMonAlg.NoiseCutADC = 50
    cscPrdMonAlg.MapYXandRZ = False

    # to enable a trigger filter, for example:
    #exampleMonAlg.TriggerChain = 'HLT_mu26_ivarmedium'

    ### STEP 4 ###
    # Add some tools. N.B. Do not use your own trigger decion tool. Use the
    # standard one that is included with AthMonitorAlgorithm.

    # # Then, add a tool that doesn't have its own configuration function. In
    # # this example, no accumulator is returned, so no merge is necessary.
    # from MyDomainPackage.MyDomainPackageConf import MyDomainTool
    # exampleMonAlg.MyDomainTool = MyDomainTool()
    from MuonConfig.MuonCalibConfig import CscCalibToolCfg
    calibtool = result.popToolsAndMerge(CscCalibToolCfg(inputFlags))
    cscClusMonAlg.CscCalibTool = calibtool

    from MuonConfig.MuonSegmentFindingConfig import CalibCscStripFitterCfg
    stripfitter = result.popToolsAndMerge(CalibCscStripFitterCfg(inputFlags))
    cscClusMonAlg.CSCStripFitter = stripfitter
    cscPrdMonAlg.CSCStripFitter = stripfitter

    # Add a generic monitoring tool (a "group" in old language). The returned
    # object here is the standard GenericMonitoringTool.
    cscClusGroup = helper.addGroup(cscClusMonAlg, 'CscClusMonitor',
                                   'Muon/MuonRawDataMonitoring/CSC/')
    cscPrdGroup = helper.addGroup(cscPrdMonAlg, 'CscPrdMonitor',
                                  'Muon/MuonRawDataMonitoring/CSC/')
    #  cscSegmGroup = helper.addGroup(cscSegmMonAlg,'CscSegmMonitor','Muon/MuonRawDataMonitoring/CSC/')

    ### STEP 5 ###
    # Configure histograms

    qmaxCut = str(cscClusMonAlg.CSCQmaxCutADC)
    #Cluster
    cscClusGroup.defineHistogram('z,r;h2csc_clus_r_vs_z_hitmap',
                                 type='TH2F',
                                 title='R vs. Z Cluster hitmap;z(mm);R(mm)',
                                 path='Clusters/Shift',
                                 xbins=200,
                                 xmin=-10000.,
                                 xmax=10000.,
                                 ybins=40,
                                 ymin=0.,
                                 ymax=4000.)

    cscClusGroup.defineHistogram('y,x;h2csc_clus_y_vs_x_hitmap',
                                 type='TH2F',
                                 title='X vs. Y Cluster hitmap;y(mm);x(mm)',
                                 path='Clusters/Shift',
                                 xbins=100,
                                 xmin=-5000.,
                                 xmax=5000.,
                                 ybins=100,
                                 ymin=-5000,
                                 ymax=5000)

    cscClusGroup.defineHistogram(
        'noStrips,secLayer;h2csc_clus_phicluswidth',
        type='TH2F',
        cutmask='clus_phi',
        title='Phi-Cluster width;# strips;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=48,
        xmin=0,
        xmax=48,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'noStrips,secLayer;h2csc_clus_etacluswidth',
        type='TH2F',
        cutmask='clus_eta',
        title='Eta-Cluster width;# strips;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=192,
        xmin=0,
        xmax=192,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'stripid,secLayer;h2csc_clus_hitmap',
        type='TH2F',
        title='Cluster occupancy;channel;[sector]+[0.2 #times layer]',
        path='Clusters/Expert',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'fStripIDs_col,secLayer;h2csc_clus_hitmap_signal',
        cutmask='signal_mon',
        type='TH2F',
        title='Cluster occupancy, Qmax > ' + qmaxCut +
        ' counts;channel;[sector] + [0.2 #times layer]',
        path='Clusters/Shift',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'noStrips,secLayer;h2csc_clus_phicluswidth_signal',
        type='TH2F',
        cutmask='clus_phiSig',
        title='#phi-cluster width, Qmax > ' + qmaxCut +
        ' counts;# strips;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=48,
        xmin=0,
        xmax=48,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'noStrips,secLayer;h2csc_clus_etacluswidth_signal',
        type='TH2F',
        cutmask='clus_etaSig',
        title='#eta-cluster width, Qmax > ' + qmaxCut +
        ' counts;# strips;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=192,
        xmin=0,
        xmax=192,
        ybins=175,
        ymin=-17,
        ymax=18)

    thisLabelx = getCSCLabelx("labels_clus_occupancy_signal_EA")
    cscClusGroup.defineHistogram('secLayer;h1csc_clus_occupancy_signal_EA',
                                 type='TH1F',
                                 cutmask='sideA',
                                 title='EndCap A: Layer occupancy, Qmax > ' +
                                 qmaxCut + ' counts;;entries/layer',
                                 path='Overview/CSCEA/Cluster',
                                 xbins=90,
                                 xmin=0,
                                 xmax=18,
                                 xlabels=thisLabelx)

    thisLabelx = getCSCLabelx("labels_clus_occupancy_signal_EC")
    cscClusGroup.defineHistogram('secLayer;h1csc_clus_occupancy_signal_EC',
                                 type='TH1F',
                                 cutmask='sideC',
                                 title='EndCap C: Layer occupancy, Qmax > ' +
                                 qmaxCut + ' counts;;entries/layer',
                                 path='Overview/CSCEC/Cluster',
                                 xbins=85,
                                 xmin=-17.,
                                 xmax=0.,
                                 xlabels=thisLabelx)

    cscClusGroup.defineHistogram(
        'fStripIDs_col,secLayer;h2csc_clus_hitmap_noise',
        cutmask='noise_mon',
        type='TH2F',
        title='Cluster occupancy, Qmax #leq ' + qmaxCut +
        ' counts;channel;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'noStrips,secLayer;h2csc_clus_phicluswidth_noise',
        type='TH2F',
        cutmask='clus_phiNoise',
        title='#phi-cluster width, Qmax #leq ' + qmaxCut +
        ' counts;# strips;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=48,
        xmin=0,
        xmax=48,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'noStrips,secLayer;h2csc_clus_etacluswidth_noise',
        type='TH2F',
        cutmask='clus_etaNoise',
        title='#eta-cluster width, Qmax #leq ' + qmaxCut +
        ' counts;# strips;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=192,
        xmin=0,
        xmax=192,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QmaxADC,secLayer;h2csc_clus_qmax',
        type='TH2F',
        title=
        'Cluster peak-strip charge, Qmax;counts;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QmaxADC,secLayer;h2csc_clus_qmax_signal',
        cutmask='signal_mon',
        type='TH2F',
        title='Cluster peak-strip charge, Qmax > ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Clusters/Shift',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QmaxADC,secLayer;h2csc_clus_qmax_noise',
        cutmask='noise_mon',
        type='TH2F',
        title='Cluster peak-strip charge, Qmax #leq ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QmaxADC,secLayer;h2csc_clus_qmax_signal_EA',
        cutmask='sideA',
        type='TH2F',
        title='EndCap A: Cluster peak-strip charge, Qmax > ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Overview/CSCEA/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=90,
        ymin=0,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QmaxADC;h1csc_clus_qmax_signal_EA_count',
        cutmask='sideA',
        type='TH1F',
        title='EndCap A: Cluster peak-strip charge, Qmax > ' + qmaxCut +
        ' counts;counts;entries/20 counts;',
        path='Overview/CSCEA/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'QmaxADC,secLayer;h2csc_clus_qmax_signal_EC',
        cutmask='sideC',
        type='TH2F',
        title='EndCap C: Cluster peak-strip charge, Qmax > ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Overview/CSCEC/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=90,
        ymin=0,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QmaxADC;h1csc_clus_qmax_signal_EC_count',
        cutmask='sideC',
        type='TH1F',
        title='EndCap C: Cluster peak-strip charge, Qmax > ' + qmaxCut +
        ' counts;counts;entries/20 counts;',
        path='Overview/CSCEC/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'QsumADC,secLayer;h2csc_clus_qsum',
        type='TH2F',
        title='Cluster charge (Qsum);counts;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QsumADC,secLayer;h2csc_clus_qsum_signal',
        cutmask='signal_mon',
        type='TH2F',
        title='Cluster charge(Qsum), Qmax > ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Clusters/Shift',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QsumADC,secLayer;h2csc_clus_qsum_signal_EA',
        cutmask='sideA',
        type='TH2F',
        title='EndCap A: Cluster charge(Qsum), Qmax > ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Overview/CSCEA/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=90,
        ymin=0,
        ymax=18)

    cscClusGroup.defineHistogram(
        'QsumADC;h1csc_clus_qsum_signal_EA_count',
        cutmask='sideA',
        type='TH1F',
        title='EndCap A: Cluster charge(Qsum), Qmax > ' + qmaxCut +
        ' counts;counts;entries/20 counts;',
        path='Overview/CSCEA/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'QsumADC;h2csc_clus_qsum_signal_EC',
        cutmask='sideC',
        type='TH1F',
        title='EndCap C: Cluster charge(Qsum), Qmax > ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Overview/CSCEC/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'QsumADC;h1csc_clus_qsum_signal_EC_count',
        cutmask='sideC',
        type='TH1F',
        title='EndCap C: Cluster charge(Qsum), Qmax > ' + qmaxCut +
        ' counts;counts;entries/20 counts;',
        path='Overview/CSCEC/Cluster',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'QsumADC,secLayer;h2csc_clus_qsum_noise',
        cutmask='noise_mon',
        type='TH2F',
        title='Cluster charge(Qsum), Qmax #leq ' + qmaxCut +
        ' counts;counts;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000,
        ybins=175,
        ymin=-17,
        ymax=18)

    cscClusGroup.defineHistogram(
        'clu_time;h1csc_clus_transverse_time',
        cutmask='clus_phi',
        type='TH1F',
        title='#phi-cluster sampling time;ns;entries/ns',
        path='Clusters/Expert',
        xbins=260,
        xmin=-60,
        xmax=200)

    cscClusGroup.defineHistogram(
        'clu_charge_kiloele;h1csc_clus_transverse_charge',
        cutmask='clus_phi',
        type='TH1F',
        title='#phi-cluster charge;counts;entries/count',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram('clu_time;h1csc_clus_transverse_time_signal',
                                 cutmask='clus_phiSig',
                                 type='TH1F',
                                 title='#phi-cluster sampling time, Qmax > ' +
                                 qmaxCut + ' counts;ns;entries/ns',
                                 path='Clusters/Expert',
                                 xbins=260,
                                 xmin=-60,
                                 xmax=200)

    cscClusGroup.defineHistogram(
        'clu_charge_kiloele;h1csc_clus_transverse_charge_signal',
        cutmask='clus_phiSig',
        type='TH1F',
        title='#phi-cluster charge, Qmax > ' + qmaxCut +
        ' counts;counts;entries/count',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'clu_time;h1csc_clus_transverse_time_noise',
        cutmask='clus_phiNoise',
        type='TH1F',
        title='#phi-cluster sampling time, Qmax #leq ' + qmaxCut +
        ' counts;ns;entries/ns',
        path='Clusters/Expert',
        xbins=260,
        xmin=-60,
        xmax=200)

    cscClusGroup.defineHistogram(
        'clu_charge_kiloele;h1csc_clus_transverse_charge_noise',
        cutmask='clus_phiNoise',
        type='TH1F',
        title='#phi-cluster charge, Qmax #leq ' + qmaxCut +
        ' counts;counts;entries/count',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'clu_time;h1csc_clus_precision_time',
        cutmask='clus_eta',
        type='TH1F',
        title='#eta-cluster sampling time;ns;entries/ns',
        path='Clusters/Expert',
        xbins=260,
        xmin=-60,
        xmax=200)

    cscClusGroup.defineHistogram(
        'clu_charge_kiloele;h1csc_clus_precision_charge',
        cutmask='clus_eta',
        type='TH1F',
        title='eta-cluster charge;counts;entries/count',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram('clu_time;h1csc_clus_precision_time_signal',
                                 cutmask='clus_etaSig',
                                 type='TH1F',
                                 title='#eta-cluster sampling time, Qmax > ' +
                                 qmaxCut + ' counts;ns;entries/ns',
                                 path='Clusters/Shift',
                                 xbins=260,
                                 xmin=-60,
                                 xmax=200)

    cscClusGroup.defineHistogram(
        'clu_charge_kiloele;h1csc_clus_precision_charge_signal',
        cutmask='clus_etaSig',
        type='TH1F',
        title='#eta-cluster charge, Qmax > ' + qmaxCut +
        ' counts;counts;entries/count',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'clu_time;h1csc_clus_precision_time_signal_EA',
        cutmask='sideA',
        type='TH1F',
        title='EndCap A: #eta-cluster sampling time, Qmax > ' + qmaxCut +
        ' counts;ns;entries/ns',
        path='Overview/CSCEA/Cluster',
        xbins=260,
        xmin=-60,
        xmax=200)

    cscClusGroup.defineHistogram(
        'clu_time;h1csc_clus_precision_time_signal_EC',
        cutmask='sideC',
        type='TH1F',
        title='EndCap C: #eta-cluster sampling time, Qmax > ' + qmaxCut +
        ' counts;ns;entries/ns',
        path='Overview/CSCEC/Cluster',
        xbins=260,
        xmin=-60,
        xmax=200)

    cscClusGroup.defineHistogram(
        'clu_time;h1csc_clus_precision_time_noise',
        cutmask='clus_etaNoise',
        type='TH1F',
        title='#eta-cluster sampling time, Qmax #leq ' + qmaxCut +
        ' counts;ns;entries/ns',
        path='Clusters/Expert',
        xbins=260,
        xmin=-60,
        xmax=200)

    cscClusGroup.defineHistogram(
        'clu_charge_kiloele;h1csc_clus_precision_charge_noise',
        cutmask='clus_etaNoise',
        type='TH1F',
        title='#eta-cluster charge, Qmax #leq ' + qmaxCut +
        ' counts;counts;entries/count',
        path='Clusters/Expert',
        xbins=400,
        xmin=0,
        xmax=8000)

    cscClusGroup.defineHistogram(
        'stripsSum_EA_mon;h1csc_clus_totalWidth_EA',
        type='TH1F',
        title=
        'EndCap A: Cluster hits in all EA eta(#eta) & phi(#phi) strips;strips;cluster hits',
        path='Overview/CSCEA/Cluster',
        xbins=15360,
        xmin=1.,
        xmax=15361.)

    cscClusGroup.defineHistogram(
        'stripsSum_EC_mon;h1csc_clus_totalWidth_EC',
        type='TH1F',
        title=
        'EndCap C: Cluster hits in all EC eta(#eta) & phi(#phi) strips;strips;cluster hits',
        path='Overview/CSCEC/Cluster',
        xbins=15360,
        xmin=1.,
        xmax=15361.)

    cscClusGroup.defineHistogram(
        'nPhiClusWidthCnt_mon,nEtaClusWidthCnt_mon;h2csc_clus_eta_vs_phi_cluswidth',
        type='TH2F',
        title=
        'Eta vs. Phi Cluster width correlation;#varphi-cluster width;#eta-cluster width',
        path='Clusters/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    cscClusGroup.defineHistogram(
        'count_mon,secLayer;h2csc_clus_phicluscount',
        cutmask='mphi_true',
        type='TH2F',
        title='#phi-cluster count;# clusters;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=20,
        xmin=0,
        xmax=20,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'scount_mon,secLayer;h2csc_clus_phicluscount_signal',
        cutmask='scount_phi_true',
        type='TH2F',
        title='#phi-cluster count;# clusters;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=20,
        xmin=0,
        xmax=20,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'count_diff,secLayer;h2csc_clus_phicluscount_noise',
        cutmask='scount_phi_false',
        type='TH2F',
        title='#phi-cluster count, Qmax #leq ' + qmaxCut +
        ' counts;# clusters;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=20,
        xmin=0,
        xmax=20,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'count_mon,secLayer;h2csc_clus_etacluscount',
        cutmask='mphi_false',
        type='TH2F',
        title='#eta-cluster count;# clusters;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=20,
        xmin=0,
        xmax=20,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'scount_mon,secLayer;h2csc_clus_etacluscount_signal',
        cutmask='scount_eta_true',
        type='TH2F',
        title='#eta-cluster count;# clusters;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=20,
        xmin=0,
        xmax=20,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'count_diff,secLayer;h2csc_clus_etacluscount_noise',
        cutmask='scount_eta_false',
        type='TH2F',
        title='#eta-cluster count, Qmax #leq ' + qmaxCut +
        ' counts;# clusters;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=20,
        xmin=0,
        xmax=20,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'segNum_mon,sec_mon;h2csc_clus_segmap_signal',
        type='TH2F',
        title='Segment occupancy, Qmax > ' + qmaxCut +
        ' counts;segment;[sector] + [0.2 #times layer]',
        path='Clusters/Expert',
        xbins=16,
        xmin=-0.5,
        xmax=15.5,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscClusGroup.defineHistogram(
        'numphi_numeta_mon;h1csc_clus_count',
        type='TH1F',
        title='Clusters per event;no.of clusters;entries',
        path='Clusters/Expert',
        xbins=26,
        xmin=-1,
        xmax=25)

    cscClusGroup.defineHistogram(
        'numphi_numeta_sig_mon;h1csc_clus_count_signal',
        type='TH1F',
        title='Clusters per event, Qmax > ' + qmaxCut +
        ' counts;no.of clusters;entries',
        path='Clusters/Expert',
        xbins=26,
        xmin=-1,
        xmax=25)

    cscClusGroup.defineHistogram('num_num_noise_mon;h1csc_clus_count_noise',
                                 type='TH1F',
                                 title='Clusters per event, Qmax #leq ' +
                                 qmaxCut + ' counts;no.of clusters;entries',
                                 path='Clusters/Expert',
                                 xbins=26,
                                 xmin=-1,
                                 xmax=25)

    cscClusGroup.defineHistogram(
        'numphi_mon,numeta_mon;h2csc_clus_eta_vs_phi_cluscount',
        type='TH2F',
        title=
        'Eta vs. Phi Cluster count correlation;#varphi-cluster count;#eta-cluster count',
        path='Clusters/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    cscClusGroup.defineHistogram(
        'numphi_sig_mon,numeta_sig_mon;h2csc_clus_eta_vs_phi_cluscount_signal',
        type='TH2F',
        title=
        'Eta vs. Phi Signal-Cluster count correlation;#varphi-cluster count;#eta-cluster count',
        path='Clusters/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    cscClusGroup.defineHistogram(
        'numphi_diff_mon,numeta_diff_mon;h2csc_clus_eta_vs_phi_cluscount_noise',
        type='TH2F',
        title=
        'Eta vs. Phi Noise-Cluster count correlation;#varphi-cluster count;#eta-cluster count',
        path='Clusters/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    #PRD
    cscPrdGroup.defineHistogram(
        'spid, secLayer;h2csc_prd_hitmap',
        type='TH2F',
        title='Hit Occupancy; channel; [sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'noStrips,secLayer;h2csc_prd_phicluswidth',
        type='TH2F',
        cutmask='measphi',
        title=
        'PRD precision-cluster width;no.of strips;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=48,
        xmin=0,
        xmax=48,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'noStrips,secLayer;h2csc_prd_etacluswidth',
        type='TH2F',
        cutmask='measeta',
        title=
        'PRD precision-cluster width;no.of strips;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=192,
        xmin=0,
        xmax=192,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram('z,r;h2csc_prd_r_vs_z_hitmap',
                                type='TH2F',
                                title='R vs. Z Cluster hitmap;z(mm);R(mm)',
                                path='PRD/Shift',
                                xbins=200,
                                xmin=-10000.,
                                xmax=10000.,
                                ybins=40,
                                ymin=0.,
                                ymax=4000.)

    cscPrdGroup.defineHistogram('y,x;h2csc_prd_y_vs_x_hitmap',
                                type='TH2F',
                                title='Y vs. X Cluster hitmap;x(mm);y(mm)',
                                path='PRD/Shift',
                                xbins=100,
                                xmin=-5000.,
                                xmax=5000.,
                                ybins=100,
                                ymin=-5000.,
                                ymax=5000.)

    cscPrdGroup.defineHistogram(
        'spid,secLayer;h2csc_prd_hitmap_signal',
        cutmask='signal_mon',
        type='TH2F',
        title='Signal Occupancy;channel;[sector] + [0.2 #times layer]',
        path='PRD/Shift',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'spid,secLayer;h2csc_prd_hitmap_signal_EC',
        cutmask='sideC',
        type='TH2F',
        title=
        'EndCap C: Signal Occupancy;channel;[sector] + [0.2 #times layer]',
        path='Overview/CSCEC/PRD',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=85,
        ymin=-17.,
        ymax=0.)

    cscPrdGroup.defineHistogram(
        'spid;h1csc_prd_hitmap_signal_EC_count',
        cutmask='sideC',
        type='TH1F',
        title='EndCap C: Signal Occupancy;channel;entries/channel;',
        path='Overview/CSCEC/PRD',
        xbins=242,
        xmin=-49.,
        xmax=193.)

    thisLabelx = getCSCLabelx("labels_clus_occupancy_signal_EC")
    cscPrdGroup.defineHistogram(
        'secLayer;h1csc_prd_hitmap_signal_EC_occupancy',
        cutmask='sideC',
        type='TH1F',
        title='EndCap C: Signal Occupancy;;entries/layer',
        path='Overview/CSCEC/PRD',
        xbins=85,
        xmin=-17.,
        xmax=0.,
        xlabels=thisLabelx)  #labels

    cscPrdGroup.defineHistogram(
        'lumiblock_mon,secLayer;h2csc_prd_occvslb_EC',
        cutmask='sideC',
        type='TH2F',
        title=
        'EndCap C: Layer Signal Occupancy Per LB;LB;[sector] + [0.2 #times layer]',
        path='Overview/CSCEC/PRD',
        xbins=2510,
        xmin=-10.,
        xmax=2500.,
        ybins=85,
        ymin=-17.,
        ymax=0.)

    cscPrdGroup.defineHistogram(
        'spid,secLayer;h2csc_prd_hitmap_signal_EA',
        cutmask='sideA',
        type='TH2F',
        title=
        'EndCap A: Signal Occupancy;channel;[sector] + [0.2 #times layer]',
        path='Overview/CSCEA/PRD',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=90,
        ymin=0.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'spid;h1csc_prd_hitmap_signal_EA_count',
        cutmask='sideA',
        type='TH1F',
        title='EndCap A: Signal Occupancy;channel;entries/channel;',
        path='Overview/CSCEA/PRD',
        xbins=242,
        xmin=-49.,
        xmax=193.)

    thisLabelx = getCSCLabelx("labels_clus_occupancy_signal_EA")
    cscPrdGroup.defineHistogram(
        'secLayer;h1csc_prd_hitmap_signal_EA_occupancy',
        cutmask='sideA',
        type='TH1F',
        title='EndCap A: Signal Occupancy;;entries/layer',
        path='Overview/CSCEA/PRD',
        xbins=90,
        xmin=0.,
        xmax=18.,
        xlabels=thisLabelx)  #labels

    cscPrdGroup.defineHistogram(
        'lumiblock_mon,secLayer;h2csc_prd_occvslb_EA',
        cutmask='sideA',
        type='TH2F',
        title=
        'EndCap A: Layer Signal Occupancy Per LB;LB;[sector] + [0.2 #times layer]',
        path='Overview/CSCEA/PRD',
        xbins=2510,
        xmin=-10.,
        xmax=2500.,
        ybins=90,
        ymin=0.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'noStrips,secLayer;h2csc_prd_etacluswidth_signal',
        cutmask='clus_etaSig',
        type='TH2F',
        title=
        'PRD precision-cluster width;no.of strips;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=192,
        xmin=0.,
        xmax=192.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'noStrips,secLayer;h2csc_prd_phicluswidth_signal',
        cutmask='clus_phiSig',
        type='TH2F',
        title=
        'PRD precision-cluster width;no.of strips;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=48,
        xmin=0.,
        xmax=48.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'spid,secLayer;h2csc_prd_hitmap_noise',
        cutmask='noise_mon',
        type='TH2F',
        title='Noise Occupancy;channel;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=242,
        xmin=-49.,
        xmax=193.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'noStrips,secLayer;h2csc_prd_etacluswidth_noise',
        cutmask='clus_etaNoise',
        type='TH2F',
        title=
        'PRD precision-cluster width;no.of strips;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=192,
        xmin=0.,
        xmax=192.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'noStrips,secLayer;h2csc_prd_phicluswidth_noise',
        cutmask='clus_phiNoise',
        type='TH2F',
        title=
        'PRD precision-cluster width;no.of strips;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=48,
        xmin=0.,
        xmax=48.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'count_mon,secLayer;h2csc_prd_phicluscount',
        cutmask='mphi_true',
        type='TH2F',
        title=
        'PRD transverse-cluster count;no.of clusters;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=20,
        xmin=0.,
        xmax=20.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'scount_mon,secLayer;h2csc_prd_phicluscount_signal',
        cutmask='scount_phi_true',
        type='TH2F',
        title=
        'PRD transverse-cluster count;no.of clusters;[sector] + [0.2 #times layer]',
        path='PRD/Shift',
        xbins=20,
        xmin=0.,
        xmax=20.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'tmp_val_mon,secLayer;h2csc_prd_phicluscount_noise',
        cutmask='mphi_true',
        type='TH2F',
        title=
        'PRD transverse-cluster count;no.of clusters;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=20,
        xmin=0.,
        xmax=20.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'count_mon,secLayer;h2csc_prd_etacluscount',
        cutmask='mphi_false',
        type='TH2F',
        title=
        'PRD precision-cluster count;no.of clusters;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=20,
        xmin=0.,
        xmax=20.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'scount_mon,secLayer;h2csc_prd_etacluscount_signal',
        cutmask='scount_eta_true',
        type='TH2F',
        title=
        'PRD precision-cluster count;no.of clusters;[sector] + [0.2 #times layer]',
        path='PRD/Shift',
        xbins=20,
        xmin=0.,
        xmax=20.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'tmp_val_mon,secLayer;h2csc_prd_etacluscount_noise',
        cutmask='mphi_false',
        type='TH2F',
        title=
        'PRD precision-cluster count;no.of clusters;[sector] + [0.2 #times layer]',
        path='PRD/Expert',
        xbins=20,
        xmin=0.,
        xmax=20.,
        ybins=175,
        ymin=-17.,
        ymax=18.)

    cscPrdGroup.defineHistogram(
        'numphi_mon,numeta_mon;h2csc_prd_eta_vs_phi_cluscount',
        type='TH2F',
        title=
        'Eta vs. Phi Cluster count correlation;#varphi-cluster count;#eta-cluster count',
        path='PRD/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    cscPrdGroup.defineHistogram(
        'numphi_sig_mon,numeta_sig_mon;h2csc_prd_eta_vs_phi_cluscount_signal',
        type='TH2F',
        title=
        'Eta vs. Phi Signal-Cluster count correlation;#varphi-cluster count;#eta-cluster count',
        path='PRD/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    cscPrdGroup.defineHistogram(
        'numphi_diff_mon,numeta_diff_mon;h2csc_prd_eta_vs_phi_cluscount_noise',
        type='TH2F',
        title=
        'Eta vs. Phi Noise-Cluster count correlation;#varphi-cluster count;#eta-cluster count',
        path='PRD/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    cscClusGroup.defineHistogram(
        'nPhiClusWidthCnt_mon,nEtaClusWidthCnt_mon;h2csc_prd_eta_vs_phi_cluswidth',
        type='TH2F',
        title=
        'Eta vs. Phi Cluster width correlation;#varphi-cluster width;#eta-cluster width',
        path='PRD/Expert',
        xbins=100,
        xmin=0,
        xmax=100,
        ybins=100,
        ymin=0,
        ymax=100)

    #myGroup.defineHistogram('lb', title='Luminosity Block;lb;Events',
    #                       path='ToFindThem',xbins=1000,xmin=-0.5,xmax=999.5,weight='testweight')
    #myGroup.defineHistogram('random', title='LB;x;Events',
    #                        path='ToBringThemAll',xbins=30,xmin=0,xmax=1,opt='kLBNHistoryDepth=10')
    #myGroup.defineHistogram('random', title='title;x;y',path='ToBringThemAll',
    #                        xbins=[0,.1,.2,.4,.8,1.6])
    ##myGroup.defineHistogram('random,pT', type='TH2F', title='title;x;y',path='ToBringThemAll',
    #                       xbins=[0,.1,.2,.4,.8,1.6],ybins=[0,10,30,40,60,70,90])
    # TEfficiencies
    ##myGroup.defineHistogram('pT_passed,pT', type='TEfficiency', title='Test TEfficiency;x;Eff',
    #                        path='AndInTheDarkness', xbins=100, xmin=0.0, xmax=50.0)
    #myGroup.defineHistogram('pT_passed,pT,random', type='TEfficiency', title='Test TEfficiency 2D;x;y;Eff',
    #                        path='AndInTheDarkness', xbins=100, xmin=0.0, xmax=50.0,
    #                        ybins=10, ymin=0.0, ymax=2.0)
    # # use a cutmask to only fill certain events
    #myGroup.defineHistogram('pT;pT_with_cut', title='p_{T};p_{T};Events', path='AndInTheDarkness',
    #                         xbins=50, xmin=0, xmax=50, cutmask='pT_passed')
    # make a TTree
    #myGroup.defineTree('pT,lb,pT_vec,strvec,str;testtree', path='BindThem',
    #                    treedef='pT/F:lb/i:pT_vec/vector<float>:strvec/vector<string>:str/string')

    #anotherGroup.defineHistogram('lbWithFilter',title='Lumi;lb;Events',
    #                             path='top',xbins=1000,xmin=-0.5,xmax=999.5)
    #anotherGroup.defineHistogram('run',title='Run Number;run;Events',
    #                             path='top',xbins=1000000,xmin=-0.5,xmax=999999.5)

    # Example defining an array of histograms. This is useful if one seeks to create a
    # number of histograms in an organized manner. (For instance, one plot for each ASIC
    # in the subdetector, and these components are mapped in eta, phi, and layer.) Thus,
    # one might have an array of TH1's such as quantity[etaIndex][phiIndex][layerIndex].
    # for alg in [exampleMonAlg,anotherExampleMonAlg]:
    # Using an array of groups
    #    topPath = 'OneRing' if alg == exampleMonAlg else ''
    #    array = helper.addArray([2],alg,'ExampleMonitor', topPath=topPath)
    #    array.defineHistogram('a,b',title='AB',type='TH2F',path='Eta',
    #                          xbins=10,xmin=0.0,xmax=10.0,
    #                          ybins=10,ymin=0.0,ymax=10.0)
    #    array.defineHistogram('c',title='C',path='Eta',
    #                         xbins=10,xmin=0.0,xmax=10.0)
    #    array = helper.addArray([4,2],alg,'ExampleMonitor', topPath=topPath)
    #    array.defineHistogram('a',title='A',path='EtaPhi',
    #                         xbins=10,xmin=0.0,xmax=10.0)
    # Using a map of groups
    #    layerList = ['layer1','layer2']
    #    clusterList = ['clusterX','clusterB']
    #    array = helper.addArray([layerList],alg,'ExampleMonitor', topPath=topPath)
    #    array.defineHistogram('c',title='C',path='Layer',
    #                         xbins=10,xmin=0,xmax=10.0)
    #    array = helper.addArray([layerList,clusterList],alg,'ExampleMonitor', topPath=topPath)
    #    array.defineHistogram('c',title='C',path='LayerCluster',
    #                         xbins=10,xmin=0,xmax=10.0)

    ### STEP 6 ###
    # Finalize. The return value should be a tuple of the ComponentAccumulator
    # and the sequence containing the created algorithms. If we haven't called
    # any configuration other than the AthMonitorCfgHelper here, then we can
    # just return directly (and not create "result" above)
    #return helper.result()

    # # Otherwise, merge with result object and return
    acc = helper.result()
    result.merge(acc)
    return result