There's a multitude of ways to do what you're suggesting. It all depends on how similar the operation is from Track1 to Track2, if there is different I/O involved, if you want to create AOI (Add on Instructions), etc.
A fairly straightforward way is to just create 16 Programs for each Track. Then call each Program with a JSR in order. Predicate calling the JSR on whether the .Track[counter] bit is true.
If it is true, call the JSR for that track and do what you need to do.
In between each JSR call, increment your counter by 1.
So, top to bottom, if .Track[0] is true, then JSR for Track 0 is called. When the program for Track 0 finishes, the rung after the JSR executes which increments your counter. Now counter = 1. If .Track[1] is true then the next JSR is called. If it isn't true, the JSR is not called and the counter just increments again on the next rung. You just keep calling the routines and incrementing the counter.
You could neatly package the above in a FOR-NEXT type setup and if the track operations are similar enough actually call the same routine over and over, using the current count number to know which track you are operating on. All depends on how fancy, and how condensed you want the program.
Me, I would tend to do it the more straightforward way so that it's easy to keep track of, and mainteance/programmers after you can easily see what's going on.