Racks and Mortars
Show design encompasses three main areas: choreography, addressing, and site layout. Whereas choreography obviously specifies what effects are shot when and where, addressing and site layout deal with the setup required to make the show possible. Addressing is the specification of what module and pin "addresses" will ignite the effects. Site layout is the specification of what mortars and racks will hold the shells and where such mortars, racks, and other equipment are located in the launch positions.
Finale's site layout capabilities themselves divide into two areas: automatic rack assignment, and manual editing. Since it would be tedious to layout each mortar and rack by hand, most people begin by using Finale's automatic rack assignment to generate an initial site layout for their show. Then they customize the site layout by editing it before printing out reports for setting up the show.
Automatic Rack Assignment
The automatic rack assignment occurs after the choreography and addressing of the show. The algorithm takes as input the fully addressed show or launch position, and produces as output a collection of racks with mortars for the effects, each mortar specified individually by the module and pin address of the effect it contains.
Since the automatic rack assignment occurs after the choreography and addressing, it does not affect any of the addresses, which have already been determined. Thus you can think of addressing and rack assignment as two phases: first the module and pin addresses are determined in the addressing phase, then second the rack assignments are determined in the rack assignment phase. It is helpful to remember these two phases are separate when you are trying to understand why an automatically generated site layout is the way it is. The site layout is always generated to accommodate the addresses determined by the addressing phase.
Devices that are ignited by the same pin are called "chords," an analogy to musical chords which are notes played at the same time. The obvious example of a chord in a fireworks show is a chain, since it contains multiple shells ignited by the same fuse, and thus the same pin. Other examples are also common though. Some show designers use multiple e-matches on the same pin in order to get by with fewer pins. Some firing systems require that simultaneous effects are put on the same pin because they are not able to energize multiple pins simultaneously. Manually fired shows basically require that a single pin is used for simultaneous effects because it is easiest to press one button at a time on a manual controller or pin board.
Chords are relevant to rack layout because all the devices on the same pin must be connected to that pin by wires. If the mortars containing devices ignited by the same pin are close together, then less wire is required and the layouts produced are more organized. It is also helpful if the mortars for a chord are not just near each other, but are also laid out sensibly. For example, if a show contains 10-mortar racks and chains of ten shells, then it is sensible to layout each chain it its own rack if the angles of the shots are the same.
Sometimes the most sensible layout is not so obvious though. If a company uses 10-mortar racks and has chains of twelve shells, then it may be more sensible to "cross-load" the chains across twelve racks rather than "straight load" the chains snaking around one rack and onto the next rack.
Chords that involve shots at multiple angles are also not obvious. If a company uses racks that are pre-arranged together in groups of five racks, then it would probably be most natural to "mix-load" a 6-shell W-chain having angles -30, -15, 0, 0, 15, 30 into a row of five shells across the racks with the extra 0-angle shell on the next row. However if the company used racks that were not pre-arranged together, then it would probably be most natural to cross-load all six shells in a single row across six racks.
Finale's site layout capabilities support fan-in-rack type racks that contain mortars of multiple angles in the same rack, but the automatic rack assignment algorithm will never generate an initial site layout using fan-in-rack type racks. If you have that type of equipment then you need to manually edit racks and set the angles of their mortars after generating the initial site layout. Thus for purposes of describing the automatic rack assignment algorithm we can assume that all the mortars in a rack are aiming the same direction, and that the rack itself can be tilted to accommodate shots at an angle.
Cross-loading, Mix-loading, and Straight-loading
The rack assignment algorithm will load the shells of a chord in racks using "straight-loading" or "cross-loading" or "mix-loading" depending on the circumstance and options that you specify in the Show menu.
The rack assignment algorithm treats chains and non-chain chords differently. Non-chain chords, i.e., shells that are e-matched together on the same pin but are not part of the same chain, are always mix-loaded, which is the same thing as straight-loaded if the shells are all at the same angle. Chains, however, may be cross-loaded or mix-loaded depending on the option you select in the Show menu:
If you specify the "Cross-load all chains" option in the Show menu then every chain will be cross-loaded across exactly the number of racks as there are shells in the chain, one shell per rack. The other three options will cross-load or mix-load the chain depending on the circumstance:
A second difference between chain and non-chain chords is that the rack assignment algorithm will not split a straight-loaded chain chord over multiple racks unnecessarily if the "Sort chains first and avoid splitting" option is set (see below). Straight-loaded non-chains can always be split. The splitting issue only pertains to mix-loaded and straight-loaded chords since they involve multiple mortars per rack. Mix-loaded chords are never split unnecessarily whether or not they are chains.
A chord fits without splitting at a given mortar position in the racks if the chord's maximum number of mortars per rack does not exceed the number of remaining mortars in the rack beginning at the given mortar position. To avoid splitting straight-loaded chains, the rack assignment algorithm will always assign a chain chord beginning at a mortar position in the rack that allows it to fit if there is such a position. For example, 5-shell chains that are straight-loaded into 10-mortar racks will never begin at mortar position 6, 7, 8, 9, or 10 in the racks because doing so would run off the end of the racks. A 12-shell chain, however, could begin at any position since there is no way to load a 12-shell chain into a 10-mortar rack without splitting off part of it onto a second rack.
Order of Pins in Racks
When you look at the initial site layout produced by the rack assignment algorithm, you may want to understand why it looks as it does. You should be able to understand the layout of individual chains and devices that are e-matched together based on the explanation of chords, but you may also want to understand the order in which mortars are assigned to effects, which determines the order of the pins in the racks.
The rack assignment algorithm assigns mortars by order of caliber, considering first all the devices of the least caliber, then all the devices of the next higher caliber, and so on. Within each caliber, the order of assignments is straight forward if there are no chains or devices e-matched together: The devices are sorted first by module, then by angle, then by pin. All the first module's left-angled shots are assigned first, in pin order, then all of its up-angled shots, and so on, and then the next module's shots are assigned.
By default, the rack assignment algorithm creates the initial site layout allowing multiple modules to be wired to the same rack, so if the first module leaves a rack unfilled, the next module will start filling its remaining open mortars. You can change this default from the "Show > Set rack assignment options" menu:
You can also restrict an individual rack to "same module" in the manual editing phase if you want only one module per rack. As you can easily see from this algorithm, if all the shots are at the same angle and no chains or chords, then the mortars will be assigned simply in the module/pin order. If you have multiple angles and you still want module/pin order, then just make sure that the shots themselves are addressed to modules and pins sorted by angle before any criteria other than launch position or caliber. From the "Show > Set addressing options" menu the second and third option will work:
If you also have single-angle chains and you still want module/pin order, then you need to set an option to ensure that chains are assigned in order also. Otherwise chains will be assigned before the non-chains, and will be laid out in racks so as to avoid splitting across multiple racks if possible. The options are,
If you have chains or devices e-matched together across multiple angles, then obviously it is impossible to lay out the racks in module/pin order. The rack assignment algorithm will attempt to produce an optimal rack layout that minimizes wiring and that loads chains and other chords neatly across or along the racks in rows. Returning to an earlier example, if you choose not to cross-load chains, a 6-shell chain with angles -30, -15, 0, 0, 15, and 30 degrees would require only five racks, because both 0-angle shells would go on the same rack. If this is the first chain loaded into racks, it would be easy to load the chain in one row across five racks with the extra 0-degree shell consuming one mortar in the next row. If a second chain of the same type were then loaded, it could also be loaded across one row of the five racks with its extra 0-degree shell consuming one mortar of the next row. Additional such chains could be loaded the same way, and all the chains would be neatly and sensibly laid out in the racks, but each chain would be leaving empty mortars on the row in which it filled only a single 0-degree shell. Since these empty mortars could be used for other individual shells, the rack assignment algorithm makes all if its assignments to cross-loaded and mix-loaded chords before the individual shells, so the remaining shells can fill the unused mortars.
The Rack Assignment Algorithm
Addressing all the scenarios discussed above, the rack assignment order for each caliber is:
The rack-length-aligned, straight-loaded chords in the first group are the most independent of the items since each such chord takes up one or more full racks, leaving no extra unused mortars. By assigning them first, the rack assignment algorithm can guarantee that these chords all start flush at the beginning of a rack, and consume exactly the right number of racks. The straight-loaded chains in the first group are not necessarily rack-length aligned, but will never be split over multiple racks unnecessarily, as discussed above. Together, all the chords in the first group are assigned sorted by the criteria: rack-length aligned first, then by module, then by angle, then by pin.
The cross-loaded and mix-loaded chords of the second group are assigned sorted by the criteria: cross-loaded first, then by module, then by maximum number of shells per rack, then by pin. The mix-loaded chords are never split unnecessarily, as discussed above.
Finally, the remaining straight-loaded chords and individual shells are assigned sorted by module, angle, and pin, as discussed above. These shells may fill in the unused mortars skipped over in the first or second group to avoid splitting chains or mix-loaded chords.
The racks in the initial site layout will be grouped by caliber and sorted left-to-right by angle so none of the racks aim toward each other. In practice, most people have in mind specific groupings for racks. Sometimes people have racks that are pre-arranged in groups of specific numbers or angles of racks. From the perspective of rack positions and groupings, the initial site layout is thus just a starting point. You can reposition the racks in the manual editing phase by selecting them and dragging them into the groups that you want.