Strict cleanup of the TrdQt interface in order to prepare TRDCuts so that nobody needs to instanciate TrdQt on their own anymore.
WARNING: Yet to be tested and debugged.

- Remove XePressure fields from ACROOT tree. It can be queried from the lookup file, so save memory.

- Remove useless ParticleId field from ACROOT file (legacy code needed for TrdQt until now), can be calculated dynamically from charge & rigidity.

- Remove (confusing) concept of random events from TrdQt. It's not needed. Same for CalculateElectronLikelihoodInSelectedEnergyBin().
  Instead offer a way to calculate the likelihoods for any energy scale (either random rigidity for the random proton likelihoods, or ECAL energy for electrons)
  using the same candidate hits, but another energy scale instead of the default tracker rigidity.

  This way TrdQt itself no longer has to know how many toy MC / random events you want to generate and no longer stores any vectors of the likelihoods.
  They're passed out to the user, who can then calculate only the desired likelihood ratios he/she wants to inspect.

The workflow is much simpler now. TrdQt constructor doesn't need a number of random/mc events anymore.
Only one call to TrdQt Process(particle) for event is needed. It also doesn't need a toy MC particle ID anymore.

Then you can do:

std::vector<std::vector<double> > likelihoodProductsPerSpecies;
trdQt.CalculateToyMcLikelihoods(0 /* Electron */, 100, likelihoodProductsPerSpecies);

for (unsigned int mcEvent = 0; mcEvent < 100; ++mcEvent) {
  const std::vector<double>& likelihoodProductForParticleSpecified = likelihoodProductsPerSpecies.at(mcEvent);
  double electronProtonRatio = Analysis::TrdLikelihoodCalculator::ComputeElectronProtonLikelihood(likelihoodProductForParticleSpecified);
  double heliumElectronRatio = Analysis::TrdLikelihoodCalculator::ComputeHeliumElectronLikelihood(likelihoodProductForParticleSpecified);
  ...

}

to generate 100 ToyMC events using electron toy MC particle id (look into specified PDF).
You can call CalculateToyMcLikelihoods, as often as you want, for any particle ID (<= 7), it has no side-effects.

Another example:

double assumedEnergy = someEnergyDistribution->GetRandom();

std::vector<double> likelihoodProductForParticleSpecified;
trdQt.CalculateLikelihoodsWithSpecificEnergyScale(assumedEnergy, likelihoodProductForParticleSpecified);

double electronProtonRatio = Analysis::TrdLikelihoodCalculator::ComputeElectronProtonLikelihood(likelihoodProductForParticleSpecified);
..

By specifying another energy scale, you can obtain new likelihoods, calculated from the same PDF but from a different rigidity bin.
-> Can be used to generate random events for high energy protons or to evaluate the likelihood for electrons calculated upon the ecal energy insted of the tracker rigidity.
Unify the ParticleId enum and the McParticleId class into one single ParticleId class.
Makes a much nicer interface within TrdQt, for calculating the toy mcs.

We can even refactor it further.
Make ParticleFactory a real factory, aka. a singleton. Let everyone use Analysis::ParticleFactory::Self() instead of creating a particle factory in each program.
TrdQt is now an a production step of the particle factory: Specify UseTrdQt in the production factory steps to let it create a TrdQt object.
Each call to particleFactory->FillHighLevelObjects() fill also call TrdQt::Process() behind the scenes. You can not create a TrdQt object on your own anymore.

This paves the route towards built-in TrdQt cuts, like like the other tof/tracker/ecal cuts.
Merge branch 'dev' into nz_cleanups
Merge branch 'dev' into nz_cleanups
Make this beast build again.
Forgot the last chunk...
Update after B598.rd.B620dev production finished
If parameters do not have to be changed they can be const.
Changed cut name. CutNoLayer9XandY was not what its name suggested but a cut on No X hit in Layer 9. Same for layer 1.
First round of comments from code review.
Merge remote-tracking branch 'origin/dev' into nz_cleanups

Conflicts:
	cuts/CutFactory.C
	cuts/TrackerCuts.hh
	interface/TrdQt.C
	interface/TrdQt.hh
	io/FileManagerACROOT.C
	programs/examples/analysis_template/analysis_template.C
	programs/examples/analysis_template/write_custom_event_tree/write_custom_event_tree.C
	programs/io/reduce_event_tree/reduce_event_tree.C
	programs/offline_plots/offline_plots.C
	programs/positron_fraction/template_posfrac/template_posfrac.C
	programs/trd_calibration/test_trd_proton_likelihood_selection/test_trd_proton_likelihood_selection.C
	utilities/McSpectrumScaler.C
Make ParticleFactory a normal object (non-singleton) again.
Unify TrdPreselection and TrdCandidateMatching in one place (TrdCandidateMatching).

Get rid of TrdPreselection. Remove all return values of the Process functions of
TrdPreselection, TrdCandidateMatching, and TrdQt because those were not used in actual
analyses, and the cuts used in TrdPreselection and in the UsefulForTrdParticleId functions
are now considered obsolete.

They are still used in the TrdAdcSpectra class used for filling pdfs and in the test_trd_preselection
program (which produces some useful plots).

Move the check if a particle is inside the TRD acceptance to the Particle class, where it belongs.
Cosmetics.
Temporary workaround for bug in ParticleId class.
Also print info about candidate matching in acroot_dump --dump-highlevel.
Safer use of DeadStrawLookup.
Fix compilation.
Fixed MAJOR mixup of handling of particle ID numbers.

The problem was that there are two conventions for numbering particle IDs:
 - the new one defined in utilities/ParticleId.hh, based on Geant4 IDs
 - the one in TrdPdfLookup, with numbers from 0 to 6, often also used as numbers, e.g. in indices of vectors of histograms