Global_set, Global_set_supp = polling.gen_global_set(temp, size-1, NORM, SUP, local_pruning)    
    
    '''homesite'''
    '''get global sets from all polling sites'''
    temp = comm.gather(Global_set, 0)
    temp_supp = comm.gather(Global_set_supp, 0)
    site = comm.gather(large_site, 0)
    if rank == 0:
	print 'HOME SITE: get Global_large and large_site from POLLING SITES ' + ', STEP ' + str(k)
        temp = temp[1:]
	temp_supp = temp_supp[1:]
        site = site[1:]
	if k == 1:
	    large_supp = {}
        '''generate large set'''
        large, large_supp = home.compute_large(temp, temp_supp, site, size - 1, CONF, large, large_supp)
        large_length = len(large)
        '''divide large into global_large'''
        Global_large = home.divide_global_set(size - 1, large)
        '''send global_large to remote sites'''
        for remoteJ in range(1,size):
            if flag[remoteJ] == 0:
		'''send global_large to remote site'''
		if remoteJ in Global_large.keys():
                    comm.send(Global_large[remoteJ], remoteJ, 3*k)
		else:
		    comm.send('NO GLOBAL_LARGE', remoteJ, 3*k)
	print 'STEP ' + str(k) + ' done, start STEP ' +str(k+1)
    del temp
    '''new loop'''
    k += 1
                """update large_site"""
                [local_pruning, large_site[rank]] = polling.insert(tranAndSup, remoteJ, local_pruning, large_site[rank])
            """gather support values, in Transacion"""
            """generate global large sets"""
        result = polling.gen_global_set(Transaction, size, NORM, SUP, local_pruning)
        Global_set[rank] = result[0]
        print Global_set[rank]
        Global_set_supp[rank] = result[1]
        print Global_set_supp[rank]

    """homesite"""
    """get global sets from all polling sites, in Global_set"""
    """generate large set"""
    large = {}
    large_supp = {}
    large, large_supp = home.compute_large(Global_set, Global_set_supp, large_site, size, large, large_supp)
    if len(large) == 0:  # no transactions added (global_large)
        print "BREAK IN STEP " + str(k) + " global_set no update"
        break

    """divide large into global_large"""
    Global_large = home.divide_global_set(size, large)
    """send global_large to remote sites"""
    del temp
    k += 1
    """receive global_large from home site, start next loop"""
    for rank in range(size):
        if breakFlag[rank] == 0:
            REMOTE[rank].global_large = Global_large[rank]
        else:
            print breakFlag[rank]