def __init__(self, line, pt):
     self.cycle = 0
     self.players = []
     self.ball = ball.Ball()
     self.kicker = player.Player()
     self.side_playing = "n"
     self.make(line, pt)
    def make(self, line, pt):
        details = line.split("|")
        # Cycle and Ball
        self.cycle = int(details[1])
        self.ball.set_data(details[2])

        # make Players
        for ply_str in details:
            if ply_str == '':
                continue
            if ply_str[0] != "r" and ply_str[0] != "l":
                continue
            playerobj = player.Player()
            playerobj.set_data(ply_str, pt)
            self.players.append(playerobj)

        self.set_side()
        self.set_kicker()

        # make Polars pos for players
        for i in range(len(self.players)):
            self.players[i].features.polar = pos.make_polar(
                pos.vector(self.kicker.pos, self.players[i].pos))

        # find open tm angle for pass FFFFFFFFFFFFFFFFFFFFFFFFFFFFFUCCCCCKKKKKKKKKKKKKKKKKKKkk
        opp_angles = [p.features.polar for p in self.players if p.side == "r"]
        for p in self.players:
            if p.side == "r": continue
            less = []
            for angle in opp_angles:
                if angle.r > p.features.polar.r: continue
                if angle.teta <= p.features.polar.teta:
                    less.append(angle.teta)
            more = []
            for angle in opp_angles:
                if angle.r > p.features.polar.r: continue
                if angle.teta > p.features.polar.teta:
                    more.append(angle.teta)

        # for i in range(len(players)): #tm
        #     left_ang = 10
        #     right_ang = -10
        #     if players[i].side != kicker.side: continue
        #
        #     for j in range(len(players)): #opp
        #         if j == i: continue
        #         if j == n: continue
        #         if players[j].side == players[i].side: continue
        #         if players[i].pos.dist(kicker.pos) + 2 < players[j].pos.dist(kicker.pos): continue
        #         if left_ang >   players[j].features.polar.teta and players[j].features.polar.teta > players[i].features.polar.teta:
        #             left_ang =  players[j].features.polar.teta
        #         if right_ang <  players[j].features.polar.teta and players[j].features.polar.teta < players[i].features.polar.teta:
        #             right_ang = players[j].features.polar.teta
        #     open_ang = (left_ang - right_ang)
        #     players[i].features.open_angle = open_ang

        # make vector to goals
        for i in range(len(self.players)):
            playerToGoal = pos.vector(self.players[i].pos, pos.Pos(52.5, 0))
            self.players[i].features.goal_vector = pos.make_polar(playerToGoal)
def run_logzip(log, player_types):
    os.chdir("../samples")
    new_log = open(str(counter()) + ".rca.gz", "wb")
    play_on = False
    # write types in file
    for pt in player_types:
        new_line = "pt " + str(pt.id) + " " + str(pt.kickAble_area) + "\n"
        new_log.write(gzip.compress(new_line.encode()))
    for line in log.split("\n"):
        if line.find("playmode") != -1:
            if line.find("play_on") != -1:
                play_on = True
                new_log.write(gzip.compress(b"*\n"))
            else:
                play_on = False
        # if not play_on:
        #     continue
        if line.find("show") == -1:
            continue
        #Seprate
        show_str = line[:line.find("(b)") - 2].strip("()")
        line = line[line.find("(b)") - 1:]
        ball_str = line[:line.find("(l ") - 2].strip("()")
        line = line[line.find("(l ") - 0:].strip("()")
        players_str = line.split(")) ((")
        #Cycle
        cycle = int(show_str.split(" ")[1].strip(")("))

        #Ball
        ball_str = ball_str.split(" ")
        ballobj = ball.Ball()
        ballobj.pos.set(ball_str[1], ball_str[2])
        ballobj.vel.set(ball_str[3], ball_str[4])

        #setPlayers
        players = []
        for player_str in players_str:
            player_str = player_str.split(" (")
            player_details = []
            for player_d in player_str:
                x = player_d.split(" ")
                xx = []
                for i in range(len(x)):
                    x[i] = x[i].strip(")(")
                    if (x[i][0] != 'f'):
                        xx.append(x[i])
                player_details.append(xx)
            plyr = player.Player()
            plyr.set(player_details, player_types)
            players.append(plyr)

        # Write in file
        # new_line = "R|"
        new_line = ""
        new_line += str(cycle) + "|"
        new_line += str(ballobj.pos.x) + " " + str(
            ballobj.pos.y
        ) + "|"  #+ " " + str(ballobj.vel.x) + " " + str(ballobj.vel.y) + "|"
        for plyr in players:
            new_line += plyr.side + " " + str(plyr.unum) + " " + str(
                plyr.playerType.id) + " "
            new_line += str(plyr.pos.x) + " " + str(
                plyr.pos.y
            ) + "|"  #" " + str(plyr.vel.x) + " " + str(plyr.vel.y) + " "
            new_line += str(plyr.body) + " " + str(plyr.head) + "|"
        new_line += "\n"
        new_log.write(gzip.compress(new_line.encode()))
        # print("samples:",cycle)
    os.chdir("../orginalLogs")
Example #4
0
def extractFeatur(log, player_types):
    os.chdir("../features")
    file_name = str(counter())
    new_log = open(file_name + ".rcb", "w")
    # write types in file
    for pt in player_types:
        new_log.write("pt " + str(pt.id) + " " + str(pt.kickAble_area) + "\n")
    lines = log.split("\n")

    last_kickAble_cycle = -10
    last_kickAble_unum = -1
    for line in lines:
        #Reading a cycle data
        if line.find("*") != -1:
            last_kickAble_unum = -1
            last_kickAble_cycle = -10
        if (line.find("R") == -1):
            continue
        details = line.split("|")
        cycle = int(details[1])
        ballobj = ball.Ball()
        ballobj.set_data(details[2])

        players = []
        for ply_str in details:
            if ply_str == '':
                continue
            if ply_str[0] != "r" and ply_str[0] != "l":
                continue
            playerobj = player.Player()
            playerobj.set_data(ply_str, player_types)
            players.append(playerobj)

        if not side(players, ballobj, "l"):
            if side(players, ballobj, "r"):
                last_kickAble_unum = -1
                last_kickAble_cycle = -10
            continue

        n = 0
        for i in range(len(players)):
            if players[i].is_kickAble(ballobj.pos) and players[i].side == "l":
                n = i
                break
        polars = []
        polars_n = []
        kicker = players[n]
        for plyr in players:
            teta = plyr.pos.teta(kicker.pos)
            r = plyr.pos.dist(kicker.pos)
            polar = pos.Polar(r, teta)
            polars.append(polar)
            next_pos = pos.plus(plyr.pos, plyr.vel)
            teta_n = next_pos.teta(kicker.pos)
            r_n = next_pos.dist(kicker.pos)
            polar_n = pos.Polar(r_n, teta_n)
            polars_n.append(polar_n)
        new_line = ""
        new_line += "R|" + str(cycle) + "|"
        #find polar pos and vel of ball
        teta_b = ballobj.pos.teta(kicker.pos)
        r_b = ballobj.pos.dist(kicker.pos)
        polar_b = pos.Polar(r_b, teta_b)
        next_ballpos = pos.Pos(ballobj.pos.x + ballobj.vel.x,
                               ballobj.pos.y + ballobj.vel.y)
        teta_vb = next_ballpos.teta(ballobj.pos)
        r_vb = ballobj.vel.r()
        polar_vb = pos.Polar(r_vb, teta_vb)
        new_line += str(polar_b.r) + " " + str(polar_b.teta) + " " + str(
            polar_vb.r) + " " + str(polar_vb.teta) + "|"
        for i_p in range(len(polars)):
            new_line += str(polars[i_p].r) + " " + str(polars[i_p].teta) + "|"
        #     new_line += str(polars_n[i_p].r) + " " + str(polars_n[i_p].teta) + "|"
        # for plyr in players:
        #     new_line += str(plyr.pos.x/52.5) + " " + str(plyr.pos.y/34) + "|"
        new_line += str(last_kickAble_unum) + " " + str(kicker.unum) + "|"
        if last_kickAble_unum != -1:
            new_log.write(new_line + "\n")
        last_kickAble_unum = kicker.unum
        # print("feature:",cycle)
    new_log.close()
    f_log = open(file_name + ".rcb", "r").read()
    new_log = open(file_name + ".rcb", "w")
    lines = f_log.split("\n")
    for i in range(len(lines) - 2):
        if lines[i].find("pt") != -1:
            continue
        line = lines[i].split("|")[:-1]
        next_line = lines[i + 1].split("|")[:-1]
        line[-1] = next_line[-1]
        newline = ""
        for w in line:
            newline += w + "|"
        new_log.write(newline + "\n")
    os.chdir("../samples")