How to Run a Badminton Tournament

It is October 23, 2000, as I jot this down. For many years now I have been involved in organizing local and national tournaments in our Gym, and with the help of many others this has generally been considered a success. Over the years we have assembled a large number of notes and now computer programs that may be of some use to the community. Right now I am in the middle of running the annual DC Open, where we typically get about 150 or so players from mostly Region-I of the USAB.


Here's an outline of the whole process, from registration to post-tournament reporting, in terms of TourneyTools, a suite of programs and scripts to aid in running such a tournament. I hope to flesh this out sometime later, after the tournament no doubt. The notes will be a bit technical, and still incomplete and opaque in places:
  1. assume you have a webserver running
  2. write a registration form, e.g. using html form. Look at this for one of my recent examples.
  3. write a cgi-script that will process the above form by sending a set of keyword=value pairs via an email message. See my example dcopen.c, a small C program that compiles with the apache source-code, but needs their util.c to complete the link.
  4. Here is a version written in perl, that we used for the senior nationals: It contains a few stupid redundant buttons (e.g. number of events, sum/sum1/sum2) which should have been computed from the entered events.
  5. manually, or via procmail, place the incoming emails in a special mail folder for further processing. this mailfolder will be the database.
  6. Here comes the dirty work: players cannot spell their own name, let alone that of their partner. some don't even know first from last name (that's cultural to begin with), they are not consistent in use of upper, lower or use of capitilization. some of it can be programmed, but most not. Basically you will need to edit this database. To allow users to edit their own entry after submission is asking for trouble. An expert needs to do this. A set of scripts (described below) will help identifying these problems.
  7. A set of scripts and programs will do most of this checking. For example, it will create a lists of each event with the teams, and in the case of a (mixed) doubles, checking if player A and player B both registered with each other as partner, and encoding errors in the output. In this example you can see how it came raw out of the database.
  8. Pairs of teams, where this is possible, are made up, and a complete list of teams is studied by the seeding committee. They will come up with a 1st, and 2nd seed, and depending on the size of the draw, a 3/4rd seed and shadow seeds for the 5th-8th places. The remainder of the players is more-or-less randomly (resolving some geographic conflicts) sprinkled into a (predefined set of points of the) draw. Here you can see the sorted list, I've added some comments in the form of lines that start with the # symbol.
  9. A program makedraw turns this ranked list into a draw. This is again a simple ASCII file, but now containing the location of the players in this draw. Again, you can comment your files for personal usage. Version 0.8 (march 2002) now correctly implements the IBF rules for placing byes in the draw for any arbitrary size draw using a nice little recursive formulae I happen to empirically derive. See comments in the code.
  10. A program drawplot turns a draw into a human readable plot, which can be annotated and filled in during the tournament at the desk. Normally we now keep a laptop/computer at the desk, and as matches have been played, fill them into this ASCII file. Once all the draws have been filled out, drawplot can also compute some simple statistics, such as the number of matches played etc.
  11. The drawplot program can also generate a list of all players that lost in the 1st or 2nd round. This has always been the way we create A/B/C/D drop-down events, and can be very rewarding for the players, but is a major time sink for the tournmament desk. Now creating a list is just a snap. The list has only to be sorted by strenght of the players, and fed into makedraw to create the dropped down draw.
  12. Another nice idea is the express checkin. Those who pay in advance, give the correct USAB number, and sent in the consent form, will get priority checkin, and receive a red card. All other players need to be processed at registration time before they get the red card. Only red card holders will be allowed access on the courts. The red card contains also their events. It can also be used for other purposes (e.g. a lottery ).
  13. Here's a writeup of some of the background of tournament math, the following two tables are explained in more details in this writeup:
Number of matches in a full 5 category tournament in various styles of tournament.
single double triple double double
N 2N-5 3N-10 4N-20 3N-20 3N-5
4 3 - - - -
8 11 14 - - 19
16 27 38 44 28 43
32 59 86 108 76 91
64 123 182 236 172 187
128 251 374 492 364 379
The software mentioned above is available upon request (the source code links listed here could be outdated), but usage not well documented at all at this time. There are quite a few things you will need to understand: TourneyTools runs on Unix (tested on Solaris and Linux). You need the core NEMO package for the user interface, and the plplot graphics library to link the two C programs. A number of shell and awk scripts simplify running the tournament in real-time, including live updates to the web if you desire. (see below for the updated python procedures)


The old set of awk, perl and shell scripts have been replaced by a far more useful and powerul set of python scripts. These were used for the last dcopen and njopen and will be explained here shortly. I have a description here, which is part of the TourneyTools CVS module you can grab via cvs.

Past Events


Other links

Last updated: 8-sep-06 PJT