Manual selection or working with preselected elements in a linked model

hi,

here is an example

import clr
import sys
import System
#import net library
from System import Array
from System.Collections.Generic import List, IList, Dictionary, HashSet

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

#import Revit APIUI namespace
clr.AddReference('RevitAPIUI')
import Autodesk.Revit.UI as RUI
from Autodesk.Revit.UI.Selection import *

#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
app = uiapp.Application

    
def get_AllLinkElementConnected():
    #subfunction
    def getSubConnect(elem):
        lstElems = [elem]
        lstIds = [elem.Id]
        n = 0
        while n < 2000: # max iteration to search
            n += 1
            init_len = len(lstElems)
            #
            for cdcCheck in lstElems:
                if hasattr(cdcCheck, 'ConnectorManager'):
                    conManag = cdcCheck.ConnectorManager
                else:
                    conManag = cdcCheck.MEPModel.ConnectorManager            
                for con in conManag.Connectors :
                    for conRef in con.AllRefs:
                        if conRef.Owner.Id not in lstIds:
                            #list ConnectorType must to be adapted
                            if conRef.ConnectorType in [ConnectorType.End, ConnectorType.Surface, ConnectorType.Curve]:
                                lstElems.append(conRef.Owner)
                                lstIds.append(conRef.Owner.Id)
            #
            # if no elements added break the while loop
            if len(lstElems) == init_len:
                break
                            
            return lstElems
    #
    ### main function ###
    ref = uidoc.Selection.PickObject(ObjectType.LinkedElement, "Select Link Element")
    lnk_instance = doc.GetElement(ref)
    lnk_doc = lnk_instance.GetLinkDocument()
    lnk_elem = lnk_doc.GetElement(ref.LinkedElementId )
    
    subElemsConnected = getSubConnect(lnk_elem)
    subElemsConnected_refs = List[Reference]([Reference(x).CreateLinkReference(lnk_instance) for x in subElemsConnected])
    uidoc.Selection.SetReferences(subElemsConnected_refs)
    return subElemsConnected
    
OUT = get_AllLinkElementConnected()