Fixing Leipzig (1877)

Fixing Leipzig (1877)

There’s a big song and dance I wrote over on <CG>,  which I might as well reference it here, but reading it is optional:

http://www.chessgames.com/perl/kibitzing?kid=FBIO&reply=11369
http://www.chessgames.com/perl/kibitzing?kid=FBIO&reply=11379

We’re just going to roll up our shirtsleeves and get right to work.

Let’s start in a python session, where I’ve created a list of unclassified tournaments that are likely RR’s. This particular set, RR_p, are plus tournaments – that is to say, they have more than the expected N_rr = N_players*(N_players-1)/2 number of games.

I wrote a little routine, pts(), to nicely print out some info:

>>> pts( RR_p )

   79429   12    79     66      R11                        Leipzig (1877)  //           Leipzig GER   (1877.07.14)
   79923   10    92     45       R9    5th American Chess Congress (1880)  //          New York USA   (1880.01.06)
   79425   16   125    120      R15                         Munich (1900)  //            Munich GER   (1900.07.23)
   79318   10    53     45       R9    7th American Chess Congress (1904)  //   Saint Louis, MO USA   (1904.10.11)
   79503   14   100     91      R13                  Rice Memorial (1916)  //          New York USA   (1916.01.17)
   79527   20   196    190      R19              USSR Championship (1952)  //            Moscow URS   (1952.11.29)
   79528   20   196    190      R19              USSR Championship (1955)  //            Moscow URS   (1955.??.??)
   79540   20   196    190      R19              USSR Championship (1963)  //       Leningrad (RUS)   (1963.11.24)
   80226   22   237    231      R21              USSR Championship (1972)  //              Baku AZE   (1972.11.17)
   80227   12    86     66      R11                          Milan (1975)  //             Milan ITA   (1975.08.20)
   39472   12    67     66      R11          Superstars Hotel Bali (2002)  //          Benidorm ESP   (2002.11.29)
   53647   12    68     66      R11           French Championships (2006)  //          Besancon BRA   (2006.08.14)
   65481   12    68     66      R11            French Championship (2008)  //               Pau FRA   (2008.08.11)
   77377   10    47     45       R9        US Championship (Women) (2012)  //       Saint Louis USA   (2012.05.08)

>>>

 

The numbers are the tid, N_players, N_games, N_rr, and R_max. Followed by the tournament name TN[t] and EventDate. Hopefully this is familiar stuff by now.

If it isn’t the idea is still simple enough, the tournaments have too many games. Why?

There can be a number of reasons. A very common one is that has mixed in playoff games. Another reason, much more common historically than today, is that first pairing draws (or any draws) weren’t counted. So, some player pairs might have several games, only the last played being decisive.

Then there are even more insidious reasons. Which is the reason for this post! Let’s consider , which has a grand total of 13 extra games. What is going on?

Now, not everybody has all the python routines I run (in fact, only I do). But they could all have SCID, which is freely available, and perhaps even better!

But to be useful, SCID needs normalized PGN. Luckily, I’ve gotten permission to freely supply my efforts to produce just such data, here:

https://drive.google.com/open?id=0B4CTS_ohHuAofkZqX0kxVHM3Ry12Z2c1eFhFcXFGRzhjUW1nSDE2bU1hMU1HUmRXcGxfUFk&authuser=0

(Beware the WCC tournaments, but otherwise it’s OK. I’ll be posting a corrected update soon – so stay tuned!)

<Leipzig (1877)> is there, properly normalized. Let’s look at it:

Open SCID, load the database in (sorry for the name, it’s not all ‘s games, just those in the ).

Then set the filter just for <Leipzig (1877)>. That can be done either with the <Tournament Finder> or with the <Header Search> window. For instance, doing a <Header Search> on (Site:Leipzig Year:1877) pulls up 79 games, the expected number for the tournament.

(One should still scan the games in the <GameList Window> to ensure the Event/Site tags are all the same).

OK, load in any game (e.g. by doubleclicking a game in the gamelist window or using the <Load Next Filtered Game> button), and call up the <Crosstable Window> (shortcut Ctrl-Shift-x).

Looking at the Swiss table seems to show everything is fine (i.e. no holes or missing pairings):

CG-Leipzig (1877) - Swiss

But beware. The Swiss is really good at showing missing information, but can hide duplicated information. One should always look at both RR and Swiss. The RR, in particular, shows the problem:

CG-Leipzig (1877) - RR

I’ve truncated to fit on the screen, but the problem games are all displayed. Clearly, we have extra games for what appear as extra matches. There seems to be a 9-game <Anderssen//Paulsen> match, and a 3-game <Anderssen//Schallopp> match mixed in.

It’s never a bad idea to consult the <CG Tournament Page>:

http://www.chessgames.com/perl/chess.pl?tid=79429

There is no explicit mention of extra games in this intro. But if one looks at the collection it comes from:

http://www.chessgames.com/perl/chesscollection?cid=1009178

The intro is the same, since this collection was promoted to become the tournament. So there is no mention of the extra games in it. But if one scrolls down:

CG-collection-extra-games(Click to enlarge) 

There are several headings for the extra games –

  1. Playoff game for 2nd place, 23 Juli 1877, Vormittags
  2. Anderssen-Paulsen Match, 1st game, 23 Juli 1877, Nachmittags
    2nd game, 24 Juli 1877, Vormittags

    9th game, 28 Juli 1877
  3. Paulsen, Goring, Metger vs Anderssen, Zukertort, Schmid
  4. Freie Partien (Offhand Games) 14 Juli 1877

Zounds! It looks like <Calli> transcribed a slew of the tournament book games for the benefit of all:

https://books.google.com/books?id=wboUAAAAYAAJ&dq=leipzig%201877%20schach&pg=PA15#v=onepage&q=leipzig%201877%20schach&f=false

A quick scan of the tournament game page shows that the consultation game didn’t make it. One less worry.

Well, now we know what we are up against. And we can assume <Calli> was careful to include the proper dates for each game, since the collection was so properly prepared. That means the game Dates could be used to easy separate the current tournament into its proper parts. Let’s introduce a term for this: <Partitioning>. From here on let’s dive straight into the code session, and you can follow along as we actually fix the tournament:

# Shorthand, for our tournament:
t = 79429

# Keep track of how many games were played on a given day
>>> Date = {}
>>> for g in TG[t]:
        if g.Date not in Date: Date[g.Date]=0
        Date[g.Date] += 1

# Generate a sorted list for printouts (python dictionaires are unsorted)
>>> OD = Date.keys()                
>>> OD.sort()

>>> for d in OD: print "%s    %2d" % (d, Date[d])

1877.07.14     1
1877.07.16    13
1877.07.17    13
1877.07.18     6
1877.07.19    12
1877.07.20    12
1877.07.21    12
1877.07.23     2
1877.07.24     2
1877.07.25     2
1877.07.26     1
1877.07.27     2
1877.07.28     1

Let’s come up for air for a second. The bulk of the games are between 7/16 and 7/21 (inclusive). There are ten games after 7/21, which match the one game 2-3rd playoff and the 9-game <Anderssen//Paulsen> match. But there is only the one offhand <Anderssen//Schallopp> game on 7/14. So those two games have to be hunted out since they overlap with tournament play. Let’s look at all of <Schallopp>’s games (pid=10528):

>>> rr(t,10528 )

 79429  1337379  10342  10528     1877.07.14   C58  27     (R1)  1-0   Anderssen, Adolf -- Schallopp, Emil
 79429  1333437  10528  10437     1877.07.16   C80  35     (R1)  0-1   Schallopp, Emil -- Leffmann, Karl
 79429  1337380  10528  10342     1877.07.16   C44  25     (R2)  1-0   Schallopp, Emil -- Anderssen, Adolf
 79429  1337382  10528  10369     1877.07.16   C61  59     (R2)  1-0   Schallopp, Emil -- Flechsig, Ernst
 79429  1337383  10342  10528     1877.07.17   C65  33     (R3)  1-0   Anderssen, Adolf -- Schallopp, Emil
 79429  1337381  10342  10528     1877.07.17   C59  58     (R3)  0-1   Anderssen, Adolf -- Schallopp, Emil
 79429  1332799  10528  16049     1877.07.17   C70  43     (R4)  0-1   Schallopp, Emil -- Winawer, Simon
 79429  1265835  10528  31735     1877.07.18   C78  36     (R5)  1-0   Schallopp, Emil -- Paulsen, Wilfried
 79429  1337384  10528  19535     1877.07.19   C11  62     (R6)  1-0   Schallopp, Emil -- Metger, Johannes
 79429  1075760  79442  10528     1877.07.19   C31  35     (R7)  1-0   Franke, August Wilhelm -- Schallopp, Emil
 79429  1290928  47581  10528     1877.07.20   C41  19     (R8)  0-1   Goering, Carl Theodor -- Schallopp, Emil
 79429  1295586  10528  10343     1877.07.20   C11  41     (R9)  0-1   Schallopp, Emil -- Paulsen, Louis
 79429  1337385  10427  10528     1877.07.21   C45  34     (R10)  1-0   Zukertort, Johannes -- Schallopp, Emil
 79429  1330607  10414  10528     1877.07.21   C25  30     (R11)  0-1   Englisch, Berthold -- Schallopp, Emil

R3 looks like a real problem to disentangle since Anderssen and Schallopp played each other twice that day, once in a tournament game, and once in an off-hand game. Even with the same colors! Ah, but the results are different, and we know from <Calli>’s xtab that Anderssen beat Schallopp. Of course we can read the gid’s straight off of <Calli>’s collection to crosscheck: (1337379, 1337380, 1337381). Of course their being sequential makes sense. Let’s go back to the code:

# Thanks to <Calli>
>>> offhand = ( 1337379, 1337380, 1337381 )

>>> G = [g for g in TG[t] if g.id[1] in offhand]
>>> len(G)
3

>>> for g in G:g

 1877.07.14   C58  27     (R1)  1-0   Anderssen, Adolf -- Schallopp, Emil
 1877.07.16   C44  25     (R2)  1-0   Schallopp, Emil -- Anderssen, Adolf
 1877.07.17   C59  58     (R3)  0-1   Anderssen, Adolf -- Schallopp, Emil

# OK, we have the correct offhand games, let's partition them.

>>> for g in G: g.Event = "Leipzig (casual)"

# For the playoff and match games we partition off the games by Date

>>> G = [ g for g in TG[t] if g.Date > "1877.07.22" ]
>>> len(G)
10
>>> for g in G: g

 1877.07.23   C25  57     (R1)  0-1   Paulsen, Louis -- Anderssen, Adolf
 1877.07.23   C25  42     (R?)  0-1   Zukertort, Johannes -- Anderssen, Adolf
 1877.07.24   C46  26     (R3)  1-0   Paulsen, Louis -- Anderssen, Adolf
 1877.07.24   B45  39     (R2)  0-1   Anderssen, Adolf -- Paulsen, Louis
 1877.07.25   C45  27     (R5)  1-0   Paulsen, Louis -- Anderssen, Adolf
 1877.07.25   C70  49     (R4)  1-0   Anderssen, Adolf -- Paulsen, Louis
 1877.07.26   C70  61     (R6)   =    Anderssen, Adolf -- Paulsen, Louis
 1877.07.27   C70  31     (R8)  1-0   Anderssen, Adolf -- Paulsen, Louis
 1877.07.27   C46  39     (R7)  1-0   Paulsen, Louis -- Anderssen, Adolf
 1877.07.28   C48  45     (R9)  1-0   Paulsen, Louis -- Anderssen, Adolf

# Now, we fix the Match games... plus the playoff...
>>> for g in G: g.Event = "Anderssen - Paulsen Match"

# ... then fix the one playoff game "by hand".
>>> G[1].Event = "Leipzig Playoff (2nd-3rd)"

# Let's write out the corrected games to a pgn file, to input to SCID.

>>> f = open( "Leipzig (1877).pgn", "w" )
>>> for g in TG[t]: f.write( str(g) )
>>> f.close()

Loading the PGN into SCID, and using the <Tournament Finder>:

CG-Leipzig (1877) - corrected - Finder

And the new xtabs look to be improved and in agreement with the published <CG> xtab (for the RR):

CG-Leipzig (1877) - corrected - RR

 

CG-Leipzig (1877) - corrected - Swiss

 

zz

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s