Investigating pT behavior in our MC

The spill-over plots from the previous post raise the question of why the partonic pT spreads so much.  These new plots show more detail on the pT contributions at each stage of the event.

Step One:  Look at true_pt (the pt of the photon candidate) vs partonic_pt (the pt of the incident parton(s?))

We see a trend at parton_pt=true_pt, which is the expected behavior.  The spread can be understood as a result of the translation from the parton Center of mass frame to the lab frame (I think).  The horizontal lines just show the different bins, since the weighting isn't factored in to smooth the distribution.

The same plot for non-prompt photons also behaves as expected:

Here we see the same true=parton trend, and also the low pt section, and a smearing in between the two (not sure what the seeming peek at 5GeV is, likely something to do with the 5GeV threshold in the code). 

Step Two:  In bins of partonic pt, look at the contributions to the true_pt spectrum.  This will help understand the spill-over events discussed previously.

Here we see something a little troubling.  As we go up in energy, the peaks of the partonic pt bins fall short of the midpoints more and more.  The problematic parts are the trailing edges of each bin's contribution, where few events may outweigh the total contribution of the bin with true_pt=parton_pt.

It's not as useful, but the same plot for background shows similar problems:

Here the distributions aren't so troubling.  We fully expect them to smear out like this.  I'm not sure if this is very problematic, since the total number of events in this plot is 10x the previous.

The strange thing comes when we move to step 3:

Step Three:  Compare the reconstructed pt distribution contribution from the various partonic bins:

This seems very strange.  Why do we find near-perfect restoration of the pt bins? 

The functions I'm using are pythia->pt() and momentum gathered from the pythia record final states...  am I using these wrong?

The pertinent code:
                        pt  = candidate->momentum().Perp();
                        *parton_pt=pythia_event->pt();

candidate is, not surprisingly, a StGammaCandidate, while pythia_event is an StGammaPythiaEvent, which extends StPythiaEvent.

To check the initial assumption that partonic pt bin is what is coming out of the pythia_event->pt(), I generated plots of parton_pt vs parton_ptbin for signal and background:

This one looks clean, with the bins all falling where they should.  For background, though, the situation changes:

The question is why some of the members of each bin come back reporting a parton_pt of zero.  Especially in the 45-55 bin, where this seems to be the case for every last event.  What's going on?