Replying as anonymous for business reasons...
I worked on the PTC a few years ago with Lockheed Martin and Norfolk Southern. The LM folks were very committed to the program, but NS kept reducing funding. I wont make you read between the lines here, the program was a absolute disaster.
Technologically the solution evolved GPS/Radio units in every train and maintenance vehicle that reported back to a bunker, data center, the trains approximate location, direction, and speed. However because of accuracy issues it was really hard to tell EXACTLY which track a train was on, especially in high density rail yards. So train GPS was supplemented by track circuits which in theory tell you if a train is on a section of track. Which is good in theory, but it can't tell you which train, nor distinguish between maintenance vehicles and trains, nor can it tell you how fast or long a train is.
Knowing how long a train is became important for guaranteeing safe spacing between vehicles, as well as knowing safe times to switch track selectors.
And don't get me started on the software, if anything were ever written by a room full of monkeys it was the PTC software. I recall one function in particular that controlled logic for determining which track a train was likely to be on; when printing out was over 30 foot long. To give you a since of how convoluted that code was, that single function had a McCabe complexity of over 1.5 million.
Now I don't care how brilliant you THINK you are as a programmer, but thinking that you could understand that function only proved to me you were an idiot. 1.5 million possible paths through that one function (yes I know that we didn't account for similar condition statements that artificially inflate that number). That one function is absolutely guaranteed to kill your program, and we stressed that until we were released from the program. Just by odds alone, you are likely to add 5-10 defects while trying to fix a bug in it. And for two solid years that is exactly what happened, the defect count literally oscillated like a sin-wave function.
I'm not telling you this as a slight at the programmers, nor the management. I'm telling you this because a project like PTC is HARD, its like the traveling salesman problem but with 50 salesman who can't be at the same place at the same time, but can pass each-other as needed, are likely going in opposite directions, and you have to recompute the whole mess every 30 seconds and resolve conflicts when a previous solution made the train "jump". Let me tell you there is nothing worse than watching a train make it's way through a switch yard then suddenly jump 10 lanes halfway through on the display.
I too was once involved in a Lockheed software project for a (thankfully) brief time. I came away with the impression that Lockheed has a very strong aversion to anything that wasn't developed there. Using Off-the-shelf hardware or software just isn't their thing, and making convoluted code was very common. Its how they run up the man-hour bill and keep support contracts. I would even go as far as to say that writing crappy code and using custom hardware is part of their business model.