Skip to content
Snippets Groups Projects
Forked from atlas / athena
113742 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
DigiOutput.py 11.09 KiB
# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration

#from AthenaCommon import CfgMgr
#from AthenaCommon.CfgGetter import getPrivateTool

def getStreamRDO_ItemList(log):

    def standardDigiConfig():
        from Digitization.DigitizationFlags import digitizationFlags
        return not ('Split' in digitizationFlags.digiSteeringConf.get_Value() or 'Fast' in digitizationFlags.digiSteeringConf.get_Value())

    def standardDigiOutputExpected(keys=['doFastPixelDigi', 'doFastSCT_Digi', 'doFastTRT_Digi']):
        noStandardDigi=True
        from Digitization.DigitizationFlags import digitizationFlags
        if standardDigiConfig():
            for key in keys:
                noStandardDigi = noStandardDigi and key in digitizationFlags.experimentalDigi()
        else:
            noStandardDigi =  not set(['SplitNoMergeFFPileUpToolsAlg', 'FastPileUpToolsAlg']).isdisjoint(set([digitizationFlags.digiSteeringConf.get_Value()]))
        return not noStandardDigi

    def standardPixelDigiOutputExpected():
        return standardDigiOutputExpected(['doFastPixelDigi'])

    def standardSCT_DigiOutputExpected():
        return standardDigiOutputExpected(['doFastSCT_Digi'])

    def standardTRT_DigiOutputExpected():
        return standardDigiOutputExpected(['doFastTRT_Digi'])

    def fastDigiOutputExpected(keys=['doFastPixelDigi', 'doFastSCT_Digi', 'doFastTRT_Digi']):
        noFastDigi = False
        from Digitization.DigitizationFlags import digitizationFlags
        if standardDigiConfig():
            noFastDigi = set(keys).isdisjoint(set(digitizationFlags.experimentalDigi()))
        else:
            noFastDigi = set(['SplitNoMergeFFPileUpToolsAlg', 'SplitNoMergeSFPileUpToolsAlg', 'SplitNoMergeFSPileUpToolsAlg', 'FastPileUpToolsAlg']).isdisjoint(set([digitizationFlags.digiSteeringConf.get_Value()]))
        return not noFastDigi

    def fastPixelDigiOutputExpected():
        return fastDigiOutputExpected(['doFastPixelDigi'])

    def fastSCT_DigiOutputExpected():
        return fastDigiOutputExpected(['doFastSCT_Digi'])

    def fastTRT_DigiOutputExpected():
        return fastDigiOutputExpected(['doFastTRT_Digi'])

    ## print "XXXXXXXXXXXXXXX Expect standard digi output: ", standardDigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect Pixel standard digi output: ", standardPixelDigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect SCT standard digi output: ", standardSCT_DigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect TRT standard digi output: ", standardTRT_DigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect fast digi output: ", fastDigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect Pixel fast digi output: ", fastPixelDigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect SCT fast digi output: ", fastSCT_DigiOutputExpected()
    ## print "XXXXXXXXXXXXXXX Expect TRT fast digi output: ", fastTRT_DigiOutputExpected()

    from Digitization.DigitizationFlags import digitizationFlags
    from AthenaCommon.DetFlags import DetFlags
    if not(DetFlags.writeRDOPool.any_on()):
        log.warning( "this digitization job will not write any RDO object" )
    else:
        StreamRDO_ItemList = []

    if DetFlags.pileup.any_on() or digitizationFlags.doXingByXingPileUp():
        if DetFlags.writeRDOPool.any_on():
            #add to output stream
#            StreamRDO_ItemList+=["PileUpEventInfo#*"]
            StreamRDO_ItemList+=["xAOD::EventInfo#*"]
    # Set up for cosmics digitization
    from AthenaCommon.BeamFlags import jobproperties
    if jobproperties.Beam.beamType == "cosmics" :
        StreamRDO_ItemList += ["ComTime#*"]
    # Truth Output
    if DetFlags.writeRDOPool.Truth_on():
        StreamRDO_ItemList+=["McEventCollection#*"]
        StreamRDO_ItemList+=["TrackRecordCollection#*"]
        StreamRDO_ItemList+=["xAOD::JetContainer#InTimeAntiKt4TruthJets"]
        StreamRDO_ItemList+=["xAOD::JetAuxContainer#InTimeAntiKt4TruthJetsAux."]
        StreamRDO_ItemList+=["xAOD::JetContainer#OutOfTimeAntiKt4TruthJets"]
        StreamRDO_ItemList+=["xAOD::JetAuxContainer#OutOfTimeAntiKt4TruthJetsAux."]
        if DetFlags.writeRDOPool.Calo_on():
            StreamRDO_ItemList += ["CaloCalibrationHitContainer#*"]
            # Temporary for debugging MBTSHits
            StreamRDO_ItemList+=["TileHitVector#MBTSHits"]
        if DetFlags.writeRDOPool.ID_on():
            if standardDigiOutputExpected() or DetFlags.writeRDOPool.BCM_on():
                StreamRDO_ItemList+=["InDetSimDataCollection#*"]
            if fastDigiOutputExpected():
                StreamRDO_ItemList+=["PRD_MultiTruthCollection#*"]
        if DetFlags.writeRDOPool.Muon_on():
            StreamRDO_ItemList+=["CscSimDataCollection#CSC_SDO"]
            StreamRDO_ItemList+=["MuonSimDataCollection#*"]
    # Forward Detector Output
    if DetFlags.digitize.Lucid_on():
        if DetFlags.writeRDOPool.Lucid_on():
            StreamRDO_ItemList += ["LUCID_DigitContainer#Lucid_Digits"]
    if DetFlags.digitize.ZDC_on():
        if DetFlags.writeRDOPool.ZDC_on():
            StreamRDO_ItemList += ["ZdcDigitsCollection#*"]
    if DetFlags.digitize.ALFA_on():
        if DetFlags.writeRDOPool.ALFA_on():
            StreamRDO_ItemList += ["ALFA_DigitCollection#*"]
            StreamRDO_ItemList += ["ALFA_ODDigitCollection#*"]
    if hasattr(DetFlags.digitize, 'AFP_on') and DetFlags.digitize.AFP_on():
        if DetFlags.writeRDOPool.AFP_on():
            StreamRDO_ItemList+=["AFP_SiDigiCollection#*"]
            StreamRDO_ItemList+=["AFP_TDDigiCollection#*"]
    # Inner Detector Output
    if DetFlags.digitize.BCM_on():
        if DetFlags.writeRDOPool.BCM_on():
            StreamRDO_ItemList+=["BCM_RDO_Container#*"]
    if DetFlags.digitize.pixel_on():
        if DetFlags.writeRDOPool.pixel_on():
            if fastPixelDigiOutputExpected():
                StreamRDO_ItemList+=["InDet::SiClusterContainer#*"]
                StreamRDO_ItemList+=["InDet::PixelGangedClusterAmbiguities#*"]
            if standardPixelDigiOutputExpected():
                StreamRDO_ItemList+=["PixelRDO_Container#*"]
    if DetFlags.digitize.SCT_on():
        if DetFlags.writeRDOPool.SCT_on():
            if fastSCT_DigiOutputExpected():
                StreamRDO_ItemList+=["InDet::SiClusterContainer#*"]
            if standardSCT_DigiOutputExpected():
                StreamRDO_ItemList+=["SCT_RDO_Container#*"]
    if DetFlags.digitize.TRT_on():
        if DetFlags.writeRDOPool.TRT_on():
            if fastTRT_DigiOutputExpected():
                StreamRDO_ItemList += ["InDet::TRT_DriftCircleContainer#*"]
            if standardTRT_DigiOutputExpected():
                StreamRDO_ItemList+=["TRT_RDO_Container#*"]
    # Calorimeter Output
    if DetFlags.digitize.LAr_on():
        if DetFlags.writeRDOPool.LAr_on():
            if not digitizationFlags.PileUpPremixing:
                StreamRDO_ItemList+=["LArRawChannelContainer#*"]
            if 'AddCaloDigi' in digitizationFlags.experimentalDigi():
                StreamRDO_ItemList+=["LArDigitContainer#*"]
            elif digitizationFlags.PileUpPremixing:
                StreamRDO_ItemList+=["LArDigitContainer#*LArDigitContainer_MC"]
            else:
                StreamRDO_ItemList+=["LArDigitContainer#LArDigitContainer_MC_Thinned"]
    if hasattr(DetFlags.digitize, 'HGTD_on') and DetFlags.digitize.HGTD_on():
        if DetFlags.writeRDOPool.HGTD_on():
            StreamRDO_ItemList+=["LArHitContainer#HGTDDigitContainer_MC"]
    if DetFlags.digitize.Tile_on():
        if DetFlags.writeRDOPool.Tile_on():
            if not digitizationFlags.PileUpPremixing:
                StreamRDO_ItemList+=["TileRawChannelContainer#*"]
            if 'AddCaloDigi' in digitizationFlags.experimentalDigi():
                StreamRDO_ItemList+=["TileDigitsContainer#*"]
            elif digitizationFlags.PileUpPremixing:
                StreamRDO_ItemList+=["TileDigitsContainer#TileDigitsCnt"]
            else:
                StreamRDO_ItemList+=["TileDigitsContainer#TileDigitsFlt"]
            StreamRDO_ItemList+=["TileL2Container#TileL2Cnt"]
    # Muon Spectrometer Output
    if DetFlags.digitize.Muon_on():
        if DetFlags.writeRDOPool.CSC_on():
            StreamRDO_ItemList+=["CscRawDataContainer#*"]
        if DetFlags.writeRDOPool.MDT_on():
            StreamRDO_ItemList+=["MdtCsmContainer#*"]
        if DetFlags.writeRDOPool.RPC_on():
            StreamRDO_ItemList+=["RpcPadContainer#*"]
        if DetFlags.writeRDOPool.TGC_on():
            StreamRDO_ItemList+=["TgcRdoContainer#*"]
        if DetFlags.writeRDOPool.sTGC_on():
            StreamRDO_ItemList+=["sTgcDigitContainer#*"] # FIXME - we should remove this eventually. Not RDOs!
            StreamRDO_ItemList+=["Muon::STGC_RawDataContainer#*"]
            # the sensitive detector must not be removed w/o checking with the atlas-muon-nsw-sim-dev list
            StreamRDO_ItemList+=["GenericMuonSimHitCollection#sTGCSensitiveDetector"]
            StreamRDO_ItemList+=["sTGCSimHitCollection#sTGCSensitiveDetector"]
        if DetFlags.writeRDOPool.Micromegas_on():
            StreamRDO_ItemList+=["MmDigitContainer#*"] # FIXME - we should remove this eventually. Not RDOs!
            StreamRDO_ItemList+=["Muon::MM_RawDataContainer#*"]
            # the sensitive detector must not be removed w/o checking with the atlas-muon-nsw-sim-dev list
            StreamRDO_ItemList+=["GenericMuonSimHitCollection#MicromegasSensitiveDetector"]
    # LVL1 Emulation Output
    if DetFlags.simulateLVL1.LAr_on():
        if DetFlags.writeRDOPool.LAr_on():
            StreamRDO_ItemList+=["LArTTL1Container#*"]
    if DetFlags.simulateLVL1.Tile_on():
        if DetFlags.writeRDOPool.Tile_on():
            StreamRDO_ItemList+=["TileTTL1Container#*"]
            StreamRDO_ItemList+=["TileDigitsContainer#MuRcvDigitsCnt"]
            StreamRDO_ItemList+=["TileRawChannelContainer#MuRcvRawChCnt"]
            StreamRDO_ItemList+=["TileMuonReceiverContainer#*"]
    if DetFlags.digitize.LVL1_on():
        if DetFlags.writeRDOPool.LVL1_on():
              StreamRDO_ItemList+=[
                               "ROIB::RoIBResult#*",
                               "MuCTPI_RDO#*",
                               "CTP_RDO#*",
                               "DataVector<LVL1::TriggerTower>#*",
                               "DataVector<LVL1::CPMTower>#*",
                               "DataVector<LVL1::JetElement>#*",
                               "DataVector<LVL1::CPMHits>#*",
                               "DataVector<LVL1::CPMRoI>#*",
                               "DataVector<LVL1::CMMCPHits>#*",
                               "DataVector<LVL1::CMMJetHits>#*",
                               "DataVector<LVL1::CMMEtSums>#*",
                               "DataVector<LVL1::JEMHits>#*",
                               "DataVector<LVL1::JEMRoI>#*",
                               "DataVector<LVL1::JEMEtSums>#*",
                               "LVL1::CMMRoI#*"]


    if DetFlags.writeRDOPool.any_on():
        ## TimingAlg
        StreamRDO_ItemList +=["RecoTimingObj#*EVNTtoHITS_timings"]
        StreamRDO_ItemList +=["RecoTimingObj#*HITStoRDO_timings"]

    if DetFlags.writeRDOPool.any_on():
        # Pool Output
        StreamRDO_ItemList+=["EventInfo#*"];
    return StreamRDO_ItemList