include("EventOverlayJobTransforms/LArMcSignal_jobOptions.py")

include("EventOverlayJobTransforms/TileMcSignal_jobOptions.py")

include("EventOverlayJobTransforms/L1Signal_jobOptions.py")

from OverlayCommonAlgs.OverlayCommonAlgsConf import UpdateEventInfo
job += UpdateEventInfo()
job.UpdateEventInfo.InfoType = "McEventInfo"

# The output - signal
from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
signalStream = AthenaPoolOutputStream("StreamRDO_MC")
signalStream.OutputFile = SignalCollection
signalStream.Store = "TemporaryStore"

signalStream.ItemList += [
    "EventInfo#*", "EventStreamInfo#*", "PileUpEventInfo#*"
]

if DetFlags.overlay.Truth_on():
    signalStream.ItemList += ["McEventCollection#*", "TrackRecordCollection#*"]
    if DetFlags.overlay.CSC_on():
        signalStream.ItemList += ["CscSimDataCollection#CSC_SDO"]
    if DetFlags.overlay.MDT_on():
        signalStream.ItemList += ["MuonSimDataCollection#MDT_SDO"]
    if DetFlags.overlay.RPC_on():
        signalStream.ItemList += ["MuonSimDataCollection#RPC_SDO"]
    if DetFlags.overlay.TGC_on():
        signalStream.ItemList += ["MuonSimDataCollection#TGC_SDO"]
# McEventCollection copying
from OverlayCommonAlgs.OverlayCommonAlgsConf import CopyMcEventCollection
job += CopyMcEventCollection()

#--------------------------------------------------------------
# Output options
#--------------------------------------------------------------

from StoreGate.StoreGateConf import StoreGateSvc
ServiceMgr += StoreGateSvc("StoreGateSvc")
ServiceMgr.StoreGateSvc.Dump = True

from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream
outStream = AthenaPoolOutputStream("OverlayOutputStream")
outStream.Store = ServiceMgr.StoreGateSvc

# Stream's output file
outStream.OutputFile = "InDetOverlayOut.pool.root"

#FIXME: ### FIXME: this does not work because I and O stores are separate.
#FIXME: # Copy everything from the input and must force reading of all input
#FIXME: # objects
#FIXME: #outStream.ForceRead          = True
#FIXME: #outStream.TakeItemsFromInput = True  # Need to set this to False if an explicit list is to be used

# Can use an explicit list to avoid broken classes. Requires TakeItemsFromInput=False.

outStream.ItemList = []

# Define output stream