First of all: This article is intentionally a bit longer.
It is aimed at callers who not only want to know, that The choreography search works, but they also want to understand it precisely., what the caller's caddy does internally with a sequence.
If you're just looking for a quick instruction manual, you can safely skip this article. However, if you want to know how to turn a few lines of text into a choreography searchable by figures, dance program, sequence type, and difficulty, then you've come to the right place.
Let's start with a completely normal sequence:
Heads Square Thru 4, Swing Thru, Boys Run, Ferris Wheel, Centers Pass Thru, Touch 1/4, Scoot Back, Swing
For a caller, it is immediately clear what is meant in both sequences.
Initially, the software only sees individual texts. It doesn't automatically know that... Heads merely determines who starts. She must recognize that the 4 to Square Thru It belongs to the character, but is not part of their official name. And they need to understand which parts are actual calls and which are merely role descriptions, additions, or instructions.
Caller's Caddy must therefore first answer some questions:
- Which lines are actually calls?
- Which official figure is meant by a particular spelling?
- Heard
HeadsDoes it refer to the figure or does it only describe the active dancers? - Is the sequence completely mainstream?
- Or is there a single plus-size figure hidden inside?
- And what happens if the caller's caddy doesn't yet know a spelling?
Behind every sequence lies a small processing chain. It begins with the entered text and ends with a pre-calculated dance level, which later allows even thousands of sequences to be searched at lightning speed.
Let's take a closer look at this path.
Step 1: The original sequence is saved as JSON.
Our complete technical example sequence is:
["Heads Square Thru 4", "Swing Thru", "Boys Run", "Ferris Wheel", "Centers Pass Thru", "Touch 1/4", "Scoot Back", "Swing" ]
When you enter or import a sequence, Callers Caddy stores it as an ordered list of its calls. Technically, this is a JSON array directly in the database.
JSON sounds more complicated than it is. Basically, it's just a list where each entry has a fixed place. This preserves both the calls and their order.
Callers Caddy is allowed to simplify the spelling internally later to identify the characters. However, this does not change the saved original sequence.
When you access the choreography again later, you will still see:
Heads Square Thru 4
and not only that:
Square Thru
The length of the sequence is also not artificially limited. It can contain three calls, thirty calls, or even more. Caller's Caddy stores what is needed choreographically.
Type and difficulty are separate information
In addition to the actual call list, Callers Caddy stores two further pieces of information for each sequence:
- the Sequence type
- the Difficulty
The sequence type describes the choreographic path: From which formation does the sequence start and where does it lead?
Typical examples are:
Static Set ➔ ResolveZero Box ➔ ResolveZero Line ➔ Zero LineSinger (Corner progression)
Zero Line ➔ Zero Line This means, for example, that the dancers start in a zero line and end up in a zero line again.
In Singer (Corner progression) In contrast, it is a figure from a Singing Call, after which all dancers have moved one position forward.
The difficulty answers another question: How challenging is this specific sequence to dance?
For this purpose, there are deliberately only three simple values:
EasymediumHard
Dance level and difficulty are not the same thing.
A sequence can consist entirely of mainstream figures and still be choreographically demanding. Conversely, a plus sequence can be very clear and easy to dance.
Therefore, Callers Caddy stores this information separately.
Later, you can use this to say, for example:
Show me all the simple "Zero Box ➔ Resolve" type sequences that are suitable for mainstream audiences.
From a large collection of choreographies, a very specific selection is made for the next dance evening.
[Screenshot: Sequence showing type and difficulty]
Step 2: The spelling is cleaned up internally.
Humans are amazingly creative at it., to write the same figure in different ways.
A caller writes:
Heads Square Thru 4
Another one perhaps:
Heads Sq Thru
Or:
Square Thru 4 (again)
To a human being, it's clear that all three spellings refer to the same basic figure. To a software program, they initially appear as three different texts.
Therefore, Callers Caddy creates an internally cleaned version for comparison.
Among other things, it removes:
- leading role details such as
Heads,Sides,Centers,BoysorGirls - final figures
- Fractures such as
3/4 - Parenthetical additions
- Words like
again
Out of:
Heads Square Thru 4
will be used for internal comparison:
square thru
Out of:
Boys Run
is:
run
And from:
Touch 1/4
A revised spelling will be used, which will then be applied to the official figure. Touch a Quarter can be assigned.
Important: This cleanup takes place For internal use only, for comparison purposes instead.
The original spelling is fully preserved in the stored sequence.
One could say:
The original line is what the caller wrote. The edited version is what the caller's caddy tries to understand from it.
Step 3: The call mapping translates caller language
After the cleanup, Callers Caddy has a simplified spelling. However, it doesn't automatically know which official character is being referred to.
Now comes the Call-Mapping into the game.
The call mapping is a translation table between the many possible spellings of the caller and the clearly defined figures in Caller's Caddy.
For example:
| Found spelling | Official figure |
|---|---|
Sq Thru | Square Thru |
Square Thru 4 | Square Thru |
square thru | Square Thru |
All three spellings ultimately point to the same official figure.
This is a crucial step. Only through this mapping can Callers Caddy recognize that sequences from different sources contain the same calls.
Without call mapping:
Sq Thru
and:
Square Thru 4
For the database, these are two different things.
Call mapping turns them into two spellings of the same official figure.
The same thing happens in our example sequence with:
Centers Pass Thru
The role specification Centers is removed for allocation. What remains is Pass Thru, that with the official figure Pass Thru is connected.
Or with:
Swing
This spelling will be used for the official figure Swing (your partner) assigned. (Unless you call A2 or higher, then Swing can mean something else)
Not every line is a call
Choreography collections often also include instructions such as:
(Zero Box) You're Home Repeat Opener
Such lines can be helpful for the caller, but they are not square dance figures.
There is a special entry for this in the call mapping:
Filler Words
That means you're saying Caller's Caddy:
This line belongs to the text of the sequence, but should not be evaluated as a character.
This is important because the caller's caddy cannot simply ignore an unknown line. It could, after all, be an unrecognized command from a higher-level dance program.
[Screenshot: Call mapping with different spellings and "filler words"]
Step 4: Each character gets its place in the curriculum
After all spellings were assigned to the official characters, Callers Caddy knows the calls of the sequence.
Now it has to figure out which dance level the entire choreography belongs to.
Each official character has a fixed [option] for this purpose. ordinal number.
The integer part of this number represents the dance program:
10for Basic30for mainstream40for Plus50for A1- correspondingly higher values for the other programs
The decimal places describe the exact position of the figure within the respective program or curriculum.
This creates a continuous sequence. A figure taught later or assigned to a higher program has a higher ordinal number than an earlier figure.
This has a major advantage: Caller's Caddy doesn't have to work with many separate lists. It can compare figures across different programs using a single number.
Our mainstream sequence in numbers
After Callers Caddy has cleaned up the spellings and assigned them to the official characters, our simplified example sequence looks like this internally:
| Call in the sequence | Associated figure | ordinal number | program |
|---|---|---|---|
Heads Square Thru 4 | Square Thru | 30.0021 | Mainstream |
Swing Thru | Swing Thru | 30.0033 | Mainstream |
Boys Run | Run | 30.0034 | Mainstream |
Ferris Wheel | Ferris Wheel | 30.0040 | Mainstream |
Centers Pass Thru | Pass Thru | 30.0007 | Mainstream |
Touch 1/4 | Touch a Quarter | 30.0042 | Mainstream |
Scoot Back | Scoot Back | 30.0047 | Mainstream |
Swing | Swing (your partner) | 30.0011 | Mainstream |
Here you can clearly see that the order of the calls in the sequence has nothing to do with the size of their ordinal numbers.
Centers Pass Thru For example, it is only in fifth place in the choreography, and has 30.0007 but a lower ordinal number than the one danced previously Ferris Wheel with 30.0040.
The ordinal number therefore does not describe the position within this sequence.
It describes the place of the official figure within the overall curriculum.
[Screenshot: Figures with their ordinal numbers]
Step 5: The highest figure decides
Caller's Caddy now knows the ordinal numbers of all the figures in the sequence.
To determine the level of the entire sequence, only one mathematical function is needed:
Maximum
Caller's Caddy is therefore looking for the highest contained ordinal number.
In our example sequence, this is:
30.0047
This value belongs to:
Scoot Back
This will 30.0047 is stored as the maximum of the entire sequence..
Since this value is in the mainstream range, the sequence can be displayed in a search up to the mainstream.
Callers Caddy does not recalculate this maximum for each subsequent search. It is determined once and stored directly with the sequence.
It is precisely this small amount of preliminary work that makes the subsequent search so fast.
How a sequence suddenly becomes a plus sequence
Now we're only changing a small part of our choreography. (I'll leave the timing out of it for now.)
Out of:
Touch 1/4 Scoot Back Swing
is:
Touch 1/4 Follow Your Neighbor & Spread Swing
The completely changed sequence is therefore:
["Heads Square Thru 4", "Swing Thru", "Boys Run", "Ferris Wheel", "Centers Pass Thru", "Touch 1/4", "Follow Your Neighbor", "& Spread", "Swing" ]
At first glance, not much has changed. The first six calls are identical, and the swinging continues at the end.
Internally, however, the evaluation now looks like this:
| Call in the sequence | Associated figure | ordinal number | program |
|---|---|---|---|
Heads Square Thru 4 | Square Thru | 30.0021 | Mainstream |
Swing Thru | Swing Thru | 30.0033 | Mainstream |
Boys Run | Run | 30.0034 | Mainstream |
Ferris Wheel | Ferris Wheel | 30.0040 | Mainstream |
Centers Pass Thru | Pass Thru | 30.0007 | Mainstream |
Touch 1/4 | Touch a Quarter | 30.0042 | Mainstream |
Follow Your Neighbor | Follow Your Neighbor | 40.0024 | Plus |
& Spread | (Anything) & Spread | 40.0032 | Plus |
Swing | Swing (your partner) | 30.0011 | Mainstream |
Caller's Caddy is once again simply looking for the highest value.
This time the maximum is:
40.0032
It belongs to (Anything) & Spread and is in positive territory.
Therefore, the entire sequence is now considered a plus sequence.
Although it consists mostly of mainstream characters, that doesn't matter for its classification. A mainstream group would also have to... Follow Your Neighbor and (Anything) & Spread be able to dance confidently enough to master the full choreography.
Therefore, a sequence is not ranked according to the average or the majority of its calls.
The highest-level character included determines the level of the entire sequence.
That's precisely why our first variant appears in a search up to the mainstream level, while the second variant remains hidden. Increasing the search limit to Plus allows both sequences to be displayed.
In this example, the difference between Mainstream and Plus ultimately lies in a single numerical comparison:
Mainstream sequence: Maximum 30.0047 Plus sequence: Maximum 40.0032
The pre-calculated maximum makes subsequent searches both reliable and fast.
Step 6: Now you can search at lightning speed.
After processing, Callers Caddy knows the following about our sequence:
- the calls in their original order
- the assigned official figures
- the sequence type
- the difficulty
- the highest included figure
- so that the maximum dance level is also reached
Based on this, different search methods are possible.
Searching for a specific character
The first question could be:
Show me all the sequences that
Ferris Wheelcontain.
Callers Caddy can directly consult the prepared index to see in which sequences this character appears.
It makes no difference whether they were originally intended as Ferris Wheel, imported with a role suffix or in another known spelling.
The call mapping has already traced these variants back to the same official figure.
Search up to a certain level
The second question could be:
Show me all sequences up to and including mainstream.
Now the advantage of the pre-calculated maximum becomes apparent.
Callers Caddy doesn't need to re-examine all calls in all sequences for every search. It only compares two values:
Maximum of the sequence ≤ selected level?
If so, the sequence will be displayed.
If not, it remains hidden.
For our first example sequence, the answer is:
30.0047 ≤ Mainstream
The sequence is displayed.
In the modified version, the answer is:
40.0032 > Mainstream
This sequence remains hidden.
Even with thousands of stored sequences, this comparison is very fast.
Additional filters can then further narrow down the selection:
- Sequence type
- Difficulty
- Included figure
- selected dance program
This way, a large amount of data can be transformed into exactly the choreography you need in a very short time.
[Screenshot: Search with level, type and difficulty filters]
Question 1: Why does an imported sequence sometimes not appear?
You're importing a new choreography. The import seems to have worked, but the sequence doesn't appear in the level search.
The most common reason is an unknown spelling.
Let's assume the sequence contains:
HDS SQThr 4
If Caller's Caddy doesn't recognize this abbreviation, he can't assign it to any official character.
The program could simply skip the unknown line. That would be convenient, but risky.
Caller's Caddy doesn't know what the unfamiliar notation means. Perhaps it's just an unusual abbreviation for a basic figure. Or perhaps it's an A2 figure.
If the program were to simply ignore the line, it could mistakenly display an A2 sequence as mainstream.
Therefore, Caller's caddy is deliberately cautious:
As long as even one call is unassigned, the actual maximum of the sequence cannot be reliably calculated.
The sequence is therefore excluded from the level search.
Call mapping shows you the remaining spellings. Additionally, Callers Caddy searches for similarly spelled official characters and suggests suitable matches.
Then you decide:
- Is this a familiar character in a new spelling?
- Or is it merely a comment or an announcement?
In the first case, you assign the appropriate official figure.
In the second case, you choose:
Filler Words
Once all lines are clear, Callers Caddy can reliably calculate the maximum. The sequence then reappears in the relevant searches.
[Screenshot: Unknown spelling and similarity suggestions in call mapping]
Question 2: How do new sequences get into the Caller's Caddy?
The easiest way is the free text import.
You load a choreography, for example, from a text file.
The program recognizes the individual calls line by line.
For structured collections, files in JSON or CSV format can also be imported. These may contain additional information besides the calls, such as:
- the level
- the sequence type
- the difficulty
Regardless of the import route, the same processing chain then follows:
- Save original sequence
- Internally clean up spellings
- Assign calls via mapping
- Determine ordinal numbers
- determine the highest call
- Prepare the sequence for the search
With larger imports, it's quite normal for Callers Caddy to encounter new abbreviations or personal spellings.
That's exactly what call mapping is for.
You don't need to rewrite the choreography. You simply teach Caller's Caddy the new notation once. After that, the system will recognize it for subsequent sequences.
Conclusion: A small translation engine for choreography
From an external perspective, Caller's Caddy stores choreography sequences.
However, technically, much more is happening.
The program initially preserves the original notation. It then reduces different notations to their essential core. The call mapping translates this core into clearly defined figures. The ordinal numbers make the figures comparable across different dance programs. And the highest-level figure included ultimately determines the level of the entire sequence.
From a few simple lines of text, a structured and lightning-fast searchable data set is created.
Or in short:
Text ➔ Cleanup ➔ Call Mapping ➔ Ordinal Numbers ➔ Maximum ➔ Search
This also explains why Callers Caddy prefers to ask about unknown spellings rather than potentially misclassifying a sequence.
Because a good choreography search doesn't just have to be fast.
Above all, she needs to know reliably, what is actually danced in a sequence.
Very good description of how
CC handles choreography. You have done a great job David. I really appreciate your help and how quickly you implement changes and updates.
Thank you, and I thought, it's better for me to document it once, that to explain it to everyone one on one. I love laverages.
This is impressive!
Can you include the timing for each call in order to develop new singing call sequences?
Thanks,
Can you please put it on the ideas page, so that others can also vote about that?