'Process the graph to find ranks and order of the nodes
@param starting_node node from where to start the graph search'

def process(self, starting_node):

    self.start_nodes = (starting_node or [])
    self.partial_order = {}
    self.links = []
    self.tree_list = {}
    if self.nodes:
        if self.start_nodes:
            tree = self.make_acyclic(None, self.start_nodes[0], 0, [])
            for node in self.no_ancester:
                for sec_node in self.transitions.get(node, []):
                    if (sec_node in self.partial_order.keys()):
                        self.transitions[self.start_nodes[0]].append(node)
                        break
            self.partial_order = {}
            tree = self.make_acyclic(None, self.start_nodes[0], 0, [])
        if (len(self.nodes) > len(self.partial_order)):
            self.find_starts()
        self.max_order = 0
        for s in self.start_nodes:
            self.start = s
            self.rank()
            self.order_in_rank()
