For instructors and teaching assistants

Marking stereonet assignments against an answer key

Thirty students hand in thirty stereonets. Checking them by eye is slow, and it only catches the ones that are obviously wrong. Here is a way to put every submission next to your own solution and get the disagreement back as a number of degrees.

The awkward thing about marking structural analysis is that the submission is a picture. A student sends a stereonet with a great circle on it and a number in the caption, and there is no practical way to tell whether that number came from a defensible fit or from a fit through the wrong half of the data. You can re-do the analysis yourself, but not thirty times. So most of us mark the picture, spot the two or three obvious disasters, and give everyone else a tick.

That is a shame, because the interesting mistakes are never the obvious ones. They are the student who took poles as planes, the one who left a bedding measurement in a joint set, the one whose numbers are ninety degrees out because their compass app records dip direction. All of those produce a plausible-looking plot.

What follows is a workflow that gets you to the disagreement quickly. It needs no accounts to be linked, no shared server, and nothing beyond emailing a file.

1. Build the answer key once

Start in your own project with the data the assignment is based on, and do the analysis you expect the class to do. Put the measurements into an analysis data set, run the fit, and leave the result where it lands: under Analysis → Derived Data in the tree. If the exercise has three parts, you will finish with three derived results. That project is the key, and you build it once per assignment rather than once per student.

Figure 1

The answer-key project, with the Analysis tab showing the analysis data set and its derived result, and the statistics panel open.

Figure 1. The key. An analysis data set holding the measurements the exercise is about, and the derived results underneath it. The statistics panel on the right carries N, R̄, κ and α95 for the fit, which is what you will compare against later.

Two things are worth deciding at this point rather than at the marking desk. First, which convention the class is working in: right-hand-rule strike, or dip and dip direction. Second, what counts as agreement. A best-fit plane recovered from the same measurements should land within a degree or two of yours; if students are working from their own field data, the α95 cone on your own mean is a more honest yardstick than a round number you invent.

2. What the students hand in

Students work in their own projects, on their own accounts, and export two files from the CSV menu in the toolbar when they are done.

Figure 2

The CSV export menu open in the toolbar, with all three export options visible.

Figure 2. The whole hand-in. All Data · Library is the measurements the student ended up with, one row per reading, with site, station, position, feature type, orientation and notes. All Data · Derived is the answer sheet: one row per computed result, with its kind, the analysis data set it came from, its orientation and the N it was built on.

Those two files answer two different questions, and it is worth being clear about which is which. The library export tells you what the student analysed. The derived export tells you what they concluded. A submission can be wrong in either place independently, and marking only the second will hide half of the interesting cases.

Both files are small, a few tens of kilobytes for a normal exercise, so they go through any LMS upload box or straight into an email. There is nothing to install on your side and nothing to provision for the class.

3. Load a submission beside the key

Open your key project and import the student's file through Import → Import Data. Map the columns once and name the target after the student. The mapping is the only fiddly part, and you only do it once: the importer fingerprints the header row and saves your mapping as a template, so the second submission with the same layout comes in already mapped. For a class working from the same export, that means every file after the first is a few clicks.

Figure 3

The import wizard on the mapping step, with a student's derived export loaded and the saved-template control in frame.

Figure 3. Mapping a derived export. Strike, Dip, Trend and Plunge are recognised on sight; Kind is the useful one to send to feature type, so each class of result arrives as its own data set and can be flagged as a plane or a line. Save the mapping as a template and the rest of the class imports on the same settings.

Now both results live in the same project. Colour the plot by data set and the student's work draws on top of yours.

Figure 4

Key and submission plotted on one stereonet, coloured by data set, with both named data sets listed in the Data Library.

Figure 4. Key and submission on one net, coloured by data set. At this point most marking decisions are already made: the results either sit on top of each other or they do not.

4. Read the difference as a number

Eyeballing the overlay is enough to sort a stack of submissions into “fine” and “needs a look”, but for a mark you want the angle. Add both orientations to an analysis data set, then drop one into each slot of the Angle Between tool. It returns the angular separation of the two orientations on the sphere, which is the quantity you actually care about, not the difference in strike and the difference in dip reported separately, which for steep planes can each look alarming while the planes themselves are nearly parallel.

For a quick check without creating anything, the Measure tool (shortcut M) does the same arithmetic straight on the plot: click the two orientations and read the angle off the net.

Figure 5

The Angle Between tool with both slots filled and the resulting angular separation shown in the inspector.

Figure 5. One number per part of the assignment. Repeat for each result the exercise asked for and the submission is marked.

Note that inputs to the analysis tools have to come from an analysis data set; dropping straight from the Data Library is refused. That is a deliberate speed bump elsewhere in the app, and here it is mildly useful: it makes you name the two things you are comparing before you compare them.

What the disagreements usually turn out to be

The angle tells you that a student's answer differs. It does not tell you why, and this is where the workflow earns its keep in teaching rather than in marking. Four causes cover most of what you will see.

Table 1. Common failure modes and what they look like once the student's result is sitting next to yours.
SymptomUsual cause
Result is about 90° from the keyDip direction entered as strike, or the wrong convention chosen at import
Result is roughly right but N differs from yoursMeasurements included or excluded from the set: the real analytical decision, and the one worth discussing
Plane and line swappedA pole treated as a plane, or a best-fit girdle read as its own axis
Result agrees, statistics do notSame mean, different scatter: an outlier left in, usually visible immediately on the overlay

The second row is the one to spend time on. Two students can be eight degrees from the key for entirely different reasons, one of them defensible and one of them not, and the difference between them is which measurements went into the set and why. That question is the actual subject of the course. Because the library export carries the student's own data with the station names intact, you can point at the specific readings that made the difference rather than talking in general terms about scatter.

Running it for a whole class

A few habits make this scale. Keep one project per assignment rather than one per student, and import each submission as its own data set named after them; the overlay stays readable up to a surprising number of results, and the checkboxes in the Data Library let you show one at a time. Open the derived spreadsheet from the tree and you have every result in the project in one table, the key's row and every student's row together, which is close enough to a marks sheet to paste into one.

Ask for the export rather than a screenshot in the assignment brief. Students who submit a PNG cannot be marked this way, and one line in the brief saves the argument later.

Lastly, hand the class the same starting CSV rather than letting everyone type in their own copy of the data. Transcription errors are not what you are assessing, and they generate discrepancies that look analytical and are not.

The number is not the grade

It is tempting, once every submission comes back as an angle, to set a threshold and let it do the marking. Resist that a little. A five-degree tolerance is a reasonable filter and a poor rubric, because it treats a student who reasoned carefully and disagreed with you as identical to one who got close by accident. What the workflow buys is the thing that was previously expensive: knowing, in about a minute per submission, exactly where each student's answer sits relative to yours. The judgement about what that means is still yours, and it is the part worth your time.

Try the workflow

Stereogram Pro opens in demo mode straight from the browser, with no signup and no account, if you want to look around the analysis tools before setting an assignment. Building a key and importing submissions needs a normal account, since the demo sandbox is read-only.

Open Stereogram Pro in demo mode

We license by volume for university courses. If you are setting this up for a class or a field camp, write to [email protected] and we will work out a fair fit.

Worked examples to set as exercises

Each of these comes with an open dataset that imports without manual column mapping, and each has a defensible right answer, which makes them straightforward to hand out as assignments.

  1. 1 How many joint sets? Canyonlands
  2. 2 Fold axis three ways Voyageurs
  3. 3 Structural domains Grand Canyon
  4. 4 Fault-slip P and T axes Bavaria