public StitchedFinalPdf generatePdfCard(int numTracks)
        {
            //tracks total = 6 through 12.
            //28,29,30,32 leaves
            StitchedFinalPdf pdfData = new StitchedFinalPdf();

            Console.WriteLine("---pdf card for  " + numTracks + " tracks -----");

            for (int t = 1; t <= numTracks; t++)
            {
                Console.Write("================track-" + t + "==================");

                int raceCount = numberOfRacesPerTrack();
                for (int r = 1; r <= raceCount; r++)
                {
                    Console.Write("     race-" + r + ">>>>>> ");
                    int horseCount = numberOfHorsePerRace();
                    //process header and 1st horse
                    int[] conjugate = generateHeaderAnd1stdHorseDepth();
                    HeaderAndFirstHorse headerAndFirstHorse_v = new HeaderAndFirstHorse(new Header(conjugate[0], "", "", r, "", true), new Horse(GeneatingFunction.HorseSequence, conjugate[1], "", "", r, "", true, false, false));
                    //process 2nd horse onward
                    for (int h = 2; h <= horseCount; h++)
                    {
                        int depth = generateFrom2ndHorseDepth();
                        Console.Write("horse-" + h + " height=" + depth + " | ");
                    }
                    Console.WriteLine();
                    //spacer if needed. calculation
                }
            }
            return(pdfData);
        }
        public StitchedFinalPdf generateAPdfStructure(int numTracks)
        {
            //tracks total = 5 through 12.
            //28,29,30,32 leaves
            // track count = 1
            StitchedFinalPdf pdfData = new StitchedFinalPdf();

            Console.WriteLine("---pdf card for  " + numTracks + " tracks -----");

            for (int t = 1; t <= numTracks; t++)
            {
                Track track = new Track();
                Console.Write("================track-" + t + "==================");

                int raceCount = numberOfRacesPerTrack();
                for (int r = 1; r <= raceCount; r++)
                {
                    Console.Write("     race-" + r + ">>>>>> ");
                    Race <Horse> race       = new Race <Horse>();
                    int          horseCount = numberOfHorsePerRace();
                    //process header and 1st horse
                    int[] conjugate        = generateHeaderAnd1stdHorseDepth();
                    HeaderAndFirstHorse hf = new HeaderAndFirstHorse(new Header(conjugate[0], "", "", r, "", true), new Horse(GeneatingFunction.HorseSequence, conjugate[1], "", "", r, "", true, false, false));
                    race = race.setRaceTop(hf);

                    //process 2nd horse onward
                    for (int h = 2; h <= horseCount; h++)
                    {
                        int depth = generateFrom2ndHorseDepth();
                        //Horse horse2on = new Horse(height);
                        //horse2.spCount = 0; auto initialize to 0
                        race = race.addHorse(new Horse(GeneatingFunction.HorseSequence, depth, "", "", r, "", false, false, false)); //adding horses on race **********1
                        Console.Write("horse-" + h + " height=" + depth + " | ");
                    }//horse-for
                    Console.WriteLine();
                    track = track.addRace(race);   //adding races to track *************************2
                }//race-for
                pdfData = pdfData.addTrack(track); //adding track to pdf ************************3
            }//track-for

            Horse lastHorse = pdfData.trackList.Last().raceList.Last <Race <Horse> >().secondAndOtherHorseList.Last <Horse>();

            lastHorse.IsLastHorseOfTheCard = true;
            return(pdfData);
        }