##  [Script Tip Friday- Adding contact tools to the solution branch for all contacts](/blog/script-tip-friday-adding-contact-tools-solution-branch-all-contacts) 

Welcome back to another week and another great Script Tip. This one was presented to us by Mark Lytell, a Staff Engineer 2, Mechanical from Chamberlain Group, LLC. Thanks Mark!

![](https://developer.ansys.com/sites/default/files/inline-images/Mark.png)

"Below is a demonstration on how you can add contact tools to the solution brand for all contacts:

Functions

- Create a contact tool for a single contact containing Pressure, Frictional Stress, Sliding Distance, Penetration and Gap for a list of times

```Python
import time


StartTime = time.time()

model = ExtAPI.DataModel.Project.Model
analysis = model.Analyses[0]
analysis_settings = analysis.AnalysisSettings
n = analysis_settings.NumberOfSteps             # number of time steps
DISP_TIMES = [analysis_settings.GetStepEndTime(i) for i in range(1, n+1, 1)]

```

- Get all nonliner connections and contacts

```Python
conns = model.Connections
contacts = conns.GetChildren(DataModelObjectCategory.ContactRegion, True)
linear_contacts = [ContactType.Bonded, ContactType.NoSeparation]
#contacts = [c for c in contacts if c.ContactType not in linear_contacts]
#supp_conts = [c for c in contacts if c.Suppressed]

```

- Contact names and IDs:

```Python
contNames = [i.Name for i in contacts]
contIDs = [i.ObjectId for i in contacts]

```

- Create contact tool for each contact:

```Python
def createContactTool(contactID, lstContID, contName, dispTimes):
    ...

```

- Create a contact tool for a single contact containing Pressure, Frictional Stress, Sliding Distance, Penetration and Gap for a list of times

## Parameters

contactID : int (the ID of the contact for which to create the tool) lstContID : list of ints (list of contact IDs for all contacts in the model) contName : string (the name of the contact for which the tool is created) dispTimes : list of Quantities (list of analysis times for which to display contact tools)

## Returns

Ansys.ACT.Automation.Mechanical.PostContactTool (The newly created post processing contact tool) Add contact tool:

```Python
    ...
    contact_tool = analysis.Solution.AddContactTool()
    ...

```

Scope only to single contact ID (These lines are unsupported beta features contact\_tool.InternalObject.AddScopedContact(contIDs\[130\])):

```Python
    ...
    [contact_tool.InternalObject.RemoveScopedContact(i) for i in lstContID if i != contactID]
    ...

```

Rename the contact tool:

```Python
    ...
    contact_tool.Name = "Contact Tool - " + contName
    print("Contact tool name: " + contact_tool.Name)
    ...

```

Create contact Status, Pressure, Frictional Stress, Penetration and Gap for each time in dispTimes

```Python
    ...
    for idx, time in enumerate(dispTimes):
        # Status
        if idx == 0:
            status = contact_tool.GetChildren(DataModelObjectCategory.ContactStatus, True)[0]
        else:
            status = contact_tool.AddStatus()
        status.DisplayTime = time
        status.Name = "Status - " + str(time)
        
        # Pressure
        pressure = contact_tool.AddPressure()
        pressure.DisplayTime = time
        pressure.Name = "Pressure - " + str(time)
        
        # Frictional Stress
        fric_stress = contact_tool.AddFrictionalStress()
        fric_stress.DisplayTime = time
        fric_stress.Name = "Frictional Stress - " + str(time)
        
        # Penetration
        pene = contact_tool.AddPenetration()
        pene.DisplayTime = time
        pene.Name = "Penetration - " + str(time)
        
        # Gap
        gap = contact_tool.AddGap()
        gap.DisplayTime = time
        gap.Name = "Gap - " + str(time)
        
        # Sliding Distance
        slide_dist = contact_tool.AddSlidingDistance()
        slide_dist.DisplayTime = time
        slide_dist.Name = "Sliding Distance - " + str(time)

    return contact_tool

```

Calling the function

```Python
with Transaction():  # Suppress GUI update until complete to speed the process
    # Create contact tools and collect in a list
    contact_tools = [createContactTool(id, contIDs, name, DISP_TIMES) for id, name in zip(contIDs, contNames)]
    # contact_tools = [createContactTool(id, contIDs, name, DISP_TIMES) for id, name,c  in zip(contIDs, contNames, contacts) if not c.Suppressed]

```

Put all contact tools into a group folder:

```Python
group = Tree.Group(contact_tools)
group.Name = "Contact Tools"
Tree.Activate([analysis.Solution])
#print(str(time.time() - StartTime))

```