A long while back, perhaps in about 2003, I created a tutorial to teach the basics of refracting. I think I spent nearly every night and weekend on it for about a year (that was when I didn't have any kids, and my wife worked a lot of hours that I had off and vice versa).


I actually didn't even know what I was going to do with it when I finished it, if I ever did. I ultimately did finish it, and by a recommendation by my old ICO roomate, I ended up publishing it at medrounds.org.  Like anybody who creates things, I'm very critical of my own work, but overall I'm proud of conceiving this and putting in the work to see it through to completion. It has generated some small extra income, although I don't think I want to know what the hourly wages would break down to! To be frank, however, I really don't care - it's been very rewarding to hear the feedback over the years and I hope I've helped a lot of new optometrists, ophthalmologists, and technicians get their feet wet with refracting concepts.

A few days ago a comment appeared on the youtube screencast I recorded to introduce this tutorial.  

 I was very disappointed. There's only 15 case studies, and then pretty much all you're left with is with the option where you manually input the target refraction... well that's not too useful is it since you already know what the endpoint refraction is gonna be!

It's always difficult to hear criticism of your work, but the more I thought about it, the more I saw this person's point. Of all the time I spent programming, drawing images of phoropters, etc., I should have spent some more time creating case studies. That would have been very easy. Or, I should have provided an option to generate random cases.

To be honest, I'm a little afraid to try to add features to this tutorial at this point. It's been quite a while since I've worked on it, and it's kind of like a swiss watch. If open it up and start tinkering with it I'm afraid I'll start breaking things and I'll never get it put back together again.

The good news is, it's actually quite easy to add patient cases to this tutorial. Somehow I had the foresight to separate the patient cases from the rest of the programming.

To do this, you will need to copy all the files on the CD onto your computer. I'd put them all into a folder (directory) - call it something clever, like "refraction tutorial". Then, within that file, find a file called patient_files.xml.


if you open this file, you'll see an xml document that describes all the patient cases that are included in the refraction tutorial. I won't go into too much detail here, but if you look at the structure I think you'll figure it out and should be able to add more patients.


But wait! Before you start messing with the contents of this file I'd recommend making a duplicate of the original, and rename it to something clever like patient_files_original.xml. Computers can be pretty picky about the syntax of XML. If you make a mistake you might find yourself in a position where you don't have any cases to work with!

However, I really don't like the idea of people having to populate this XML file to generate more virtual patients to refract. So, I spent the last couple nights writing a script to generate some data for you.  The script uses totally random numbers to generate 100 patients.

I tried to make it relatively smart, so you'll find that:

  1. Every patient has a unique name. Not a useful feature, but it was kinda fun doing it!
  2. Most patients should have a fair amount of symmetry between their eyes, just like real patients (ie you won't find many cases with a +6.00 OD and a -6.00 OS).
  3. The old glasses or autorefractor results won't be perfect (what would be the point of refracting?), but they won't be off-the-wall either (ie, autorefractor says +4.00 but you refract -6.00).


How is this data lacking?

  1. I didn't have the motivation to factor in accommodation. I wrote a lot of code to make the virtual patients accommodate in ways you'd expect based on age. However, this data lists a starting VA's that do not take into account accommodation. As such, a 20 year old with +2.00 of hyperopia may show a starting VA of 20/80, but we all know this patient would probably be able to accommodate through that to a much better VA. As a cop out, I wrote a comment that these VAs were taken while the patient was cyclopleged. It's important to point out that this will not affect the process of refracting, only the initial VAs that are listed in the case "file".
  2. I didn't supply much history for the patients. Patients with cataracts or amblyopia will have some sort of statement related to their reduced BCVA, but the histories are not quite as involved as they are in the original case studies.

So, without further adieu, here are the patient files:

Refraction case study

Each of these files has 100 patient cases. You can download them to your computer, than drag them into the directory that contains the contents of your CD. Rename the file you want to use to patient_files.xml (again, make sure you renamed the original so you don't overwrite it! ). When you start the refraction simulator it should pull in the data from the new file.

With 400 patients you'll have no excuse for not becoming refracting ninja!

refracting simulator
AuthorTodd Zarwell