def calculate_user_top_5(user,all_apps,user_download_list):
    # ways is to calculate all_apps similarity with the user_download_list

    app_similarity={}

    for app in all_apps:
        if app in user_download_list:
            continue
        else:
            #calculate the app similarity with the user download lists
            similarity = Helper.cosine_similarity([app],user_download_list)
            if app_similarity.has_key(app):
                app_similarity[app] = app_similarity[app] + similarity
            else:
                app_similarity[app] = similarity

    #get the top 5
    top_five_apps=[]
    sorted_apps =sorted(app_similarity.items(),key=operator.itemgetter(1),reverse=True)
    i=0
    while i<5:
        #print("top 10 apps "+sorted_apps[i][0]) ## uncommnet for test one app top 10
        top_five_apps.append(sorted_apps[i][0])
        i+=1

    DataService.update_user_info({'user_id':user},{'$set':{"top_5_app":top_five_apps}})
def calculate_app_top_10(app,user_download_history):
    #get app with all the lists similarity
    
    app_similarity ={}
    for apps in user_download_history:
        similarity = Helper.cosine_similarity([app],apps)
        for listapp in apps:
            if listapp is app:
                continue
            elif app_similarity.has_key(listapp):
                app_similarity[listapp] = app_similarity[listapp] + similarity
            else:
                app_similarity[listapp] = similarity
            
    if not app_similarity.has_key(app):
        return 
    #remove itself
    #app_similarity.pop(app)
    #calculate top10  reverse= true means from bigger to smaller   
    #items() and operator.itemgetter(1) means get list of tuples with key-value pair
    sorted_apps =sorted(app_similarity.items(),key=operator.itemgetter(1),reverse=True)

    top_ten_apps=[]

    i=0
    while i<10:
        #print("top 10 apps "+sorted_apps[i][0]) ## uncommnet for test one app top 10
        top_ten_apps.append(sorted_apps[i][0])
        i+=1